diff options
Diffstat (limited to 'backoffice/index.js')
-rw-r--r-- | backoffice/index.js | 24986 |
1 files changed, 12578 insertions, 12408 deletions
diff --git a/backoffice/index.js b/backoffice/index.js index 8622462a5..9410585ae 100644 --- a/backoffice/index.js +++ b/backoffice/index.js @@ -2752,12 +2752,12 @@ var init_hooks_module = __esm({ // ../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/compat/dist/compat.module.js var compat_module_exports = {}; __export(compat_module_exports, { - Children: () => O2, + Children: () => O3, Component: () => d, Fragment: () => p2, - PureComponent: () => w3, + PureComponent: () => w4, StrictMode: () => vn2, - Suspense: () => D3, + Suspense: () => D4, SuspenseList: () => V2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: () => rn, cloneElement: () => cn, @@ -2769,12 +2769,12 @@ __export(compat_module_exports, { default: () => bn, findDOMNode: () => an, flushSync: () => hn, - forwardRef: () => k3, - hydrate: () => q3, + forwardRef: () => k4, + hydrate: () => q4, isValidElement: () => ln, - lazy: () => M3, - memo: () => R, - render: () => Y2, + lazy: () => M5, + memo: () => R2, + render: () => Y3, startTransition: () => dn, unmountComponentAtNode: () => fn, unstable_batchedUpdates: () => sn, @@ -2810,13 +2810,13 @@ function C2(n2, t4) { return true; return false; } -function E(n2, t4) { +function E2(n2, t4) { return n2 === t4 && (0 !== n2 || 1 / n2 == 1 / t4) || n2 != n2 && t4 != t4; } -function w3(n2) { +function w4(n2) { this.props = n2; } -function R(n2, e4) { +function R2(n2, e4) { function r3(n3) { var t4 = this.props.ref, r4 = t4 == n3.ref; return !r4 && t4 && (t4.call ? t4(null) : t4.current = null), e4 ? !e4(this.props, n3) || !r4 : C2(this.props, n3); @@ -2826,18 +2826,18 @@ function R(n2, e4) { } return u4.displayName = "Memo(" + (n2.displayName || n2.name) + ")", u4.prototype.isReactComponent = true, u4.__f = true, u4; } -function k3(n2) { +function k4(n2) { function t4(t5) { var e4 = g3({}, t5); return delete e4.ref, n2(e4, t5.ref || null); } return t4.$$typeof = N2, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n2.displayName || n2.name) + ")", t4; } -function L3(n2, t4, e4) { +function L4(n2, t4, e4) { return n2 && (n2.__c && n2.__c.__H && (n2.__c.__H.__.forEach(function(n3) { "function" == typeof n3.__c && n3.__c(); }), n2.__c.__H = null), null != (n2 = g3({}, n2)).__c && (n2.__c.__P === e4 && (n2.__c.__P = t4), n2.__c = null), n2.__k = n2.__k && n2.__k.map(function(n3) { - return L3(n3, t4, e4); + return L4(n3, t4, e4); })), n2; } function U(n2, t4, e4) { @@ -2845,14 +2845,14 @@ function U(n2, t4, e4) { return U(n3, t4, e4); }), n2.__c && n2.__c.__P === t4 && (n2.__e && e4.insertBefore(n2.__e, n2.__d), n2.__c.__e = true, n2.__c.__P = e4)), n2; } -function D3() { +function D4() { this.__u = 0, this.t = null, this.__b = null; } function F2(n2) { var t4 = n2.__.__c; return t4 && t4.__a && t4.__a(n2); } -function M3(n2) { +function M5(n2) { var e4, r3, u4; function o3(o4) { if (e4 || (e4 = n2()).then(function(n3) { @@ -2891,25 +2891,25 @@ function j3(n2, e4) { var r3 = h($2, { __v: n2, i: e4 }); return r3.containerInfo = e4, r3; } -function Y2(n2, t4, e4) { +function Y3(n2, t4, e4) { return null == t4.__k && (t4.textContent = ""), P(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; } -function q3(n2, t4, e4) { +function q4(n2, t4, e4) { return S2(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; } function J() { } -function K3() { +function K4() { return this.cancelBubble; } -function Q() { +function Q2() { return this.defaultPrevented; } function on(n2) { return h.bind(null, n2); } function ln(n2) { - return !!n2 && n2.$$typeof === z3; + return !!n2 && n2.$$typeof === z4; } function cn(n2) { return ln(n2) ? q.apply(null, arguments) : n2; @@ -2932,32 +2932,32 @@ function mn() { function _n(n2, t4) { var e4 = t4(), r3 = p3({ h: { __: e4, v: t4 } }), u4 = r3[0].h, o3 = r3[1]; return s2(function() { - u4.__ = e4, u4.v = t4, E(u4.__, t4()) || o3({ h: u4 }); + u4.__ = e4, u4.v = t4, E2(u4.__, t4()) || o3({ h: u4 }); }, [n2, e4, t4]), h2(function() { - return E(u4.__, u4.v()) || o3({ h: u4 }), n2(function() { - E(u4.__, u4.v()) || o3({ h: u4 }); + return E2(u4.__, u4.v()) || o3({ h: u4 }), n2(function() { + E2(u4.__, u4.v()) || o3({ h: u4 }); }); }, [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 x5, N2, A4, O3, T4, I4, W, z4, B4, H4, Z2, G2, X3, 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(); init_preact_module(); init_hooks_module(); init_hooks_module(); - (w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) { + (w4.prototype = new d()).isPureReactComponent = true, w4.prototype.shouldComponentUpdate = function(n2, t4) { return C2(this.props, n2) || C2(this.state, t4); }; - x4 = l.__b; + x5 = 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), x5 && x5(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)); }; - O2 = { map: A4, forEach: A4, count: function(n2) { + O3 = { map: A4, forEach: A4, count: function(n2) { return n2 ? x2(n2).length : 0; }, only: function(n2) { var t4 = x2(n2); @@ -2965,20 +2965,20 @@ var init_compat_module = __esm({ throw "Children.only"; return t4[0]; }, toArray: x2 }; - T3 = l.__e; + T4 = l.__e; l.__e = function(n2, t4, e4, r3) { if (n2.then) { for (var u4, o3 = t4; o3 = o3.__; ) if ((u4 = o3.__c) && u4.__c) return null == t4.__e && (t4.__e = e4.__e, t4.__k = e4.__k), u4.__c(n2, t4); } - T3(n2, t4, e4, r3); + T4(n2, t4, e4, r3); }; - I3 = l.unmount; + I4 = l.unmount; l.unmount = function(n2) { var t4 = n2.__c; - t4 && t4.__R && t4.__R(), t4 && true === n2.__h && (n2.type = null), I3 && I3(n2); - }, (D3.prototype = new d()).__c = function(n2, t4) { + t4 && t4.__R && t4.__R(), t4 && true === n2.__h && (n2.type = null), I4 && I4(n2); + }, (D4.prototype = new d()).__c = function(n2, t4) { var e4 = t4.__c, r3 = this; null == r3.t && (r3.t = []), r3.t.push(e4); var u4 = F2(r3.__v), o3 = false, i4 = function() { @@ -2997,13 +2997,13 @@ var init_compat_module = __esm({ } }, c4 = true === t4.__h; r3.__u++ || c4 || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n2.then(i4, i4); - }, D3.prototype.componentWillUnmount = function() { + }, D4.prototype.componentWillUnmount = function() { this.t = []; - }, D3.prototype.render = function(n2, e4) { + }, D4.prototype.render = function(n2, e4) { if (this.__b) { if (this.__v.__k) { var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; - this.__v.__k[0] = L3(this.__b, r3, o3.__O = o3.__P); + this.__v.__k[0] = L4(this.__b, r3, o3.__O = o3.__P); } this.__b = null; } @@ -3041,9 +3041,9 @@ var init_compat_module = __esm({ W(n2, e4, t4); }); }; - z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; - B3 = /^(?: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]/; - H2 = "undefined" != typeof document; + z4 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; + B4 = /^(?: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]/; + H4 = "undefined" != typeof document; Z2 = function(n2) { return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n2); }; @@ -3054,9 +3054,9 @@ var init_compat_module = __esm({ Object.defineProperty(this, t4, { configurable: true, writable: true, value: n2 }); } }); }); - G = l.event; + G2 = l.event; l.event = function(n2) { - return G && (n2 = G(n2)), n2.persist = J, n2.isPropagationStopped = K3, n2.isDefaultPrevented = Q, n2.nativeEvent = n2; + return G2 && (n2 = G2(n2)), n2.persist = J, n2.isPropagationStopped = K4, n2.isDefaultPrevented = Q2, n2.nativeEvent = n2; }; nn = { configurable: true, get: function() { return this.class; @@ -3068,7 +3068,7 @@ var init_compat_module = __esm({ var o3 = -1 === t4.indexOf("-"); for (var i4 in u4 = {}, e4) { 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); + H4 && "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 && B4.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) { n3.props.selected = -1 != u4.value.indexOf(n3.props.value); @@ -3076,14 +3076,14 @@ var init_compat_module = __esm({ 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)); } - n2.$$typeof = z3, tn && tn(n2); + n2.$$typeof = z4, tn && tn(n2); }; en = l.__r; l.__r = function(n2) { - en && en(n2), X2 = n2.__c; + en && en(n2), X3 = n2.__c; }; rn = { ReactCurrentDispatcher: { current: { readContext: function(n2) { - return X2.__n[n2.__c].props.value; + return X3.__n[n2.__c].props.value; } } } }; un = "17.0.2"; sn = function(n2, t4) { @@ -3094,7 +3094,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: x3, version: "17.0.2", Children: O3, render: Y3, hydrate: q4, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p2, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w4, memo: R2, forwardRef: k4, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn2, Suspense: D4, SuspenseList: V2, lazy: M5, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn }; } }); @@ -9841,6 +9841,23 @@ var ObjectCodecBuilder = class { function buildCodecForObject() { return new ObjectCodecBuilder(); } +function codecForMap(innerCodec) { + if (!innerCodec) { + throw Error("inner codec must be defined"); + } + return { + decode(x6, c4) { + const map3 = {}; + if (typeof x6 !== "object") { + throw new DecodingError(`expected object at ${renderContext(c4)}`); + } + for (const i4 in x6) { + map3[i4] = innerCodec.decode(x6[i4], joinContext(c4, `[${i4}]`)); + } + return map3; + } + }; +} function codecForNumber() { return { decode(x6, c4) { @@ -12538,6 +12555,13 @@ var TalerProtocolTimestamp; var timeshift = 0; var Duration; (function(Duration2) { + function toMilliseconds(d5) { + if (d5.d_ms === "forever") { + return Number.MAX_VALUE; + } + return d5.d_ms; + } + Duration2.toMilliseconds = toMilliseconds; function getRemaining(deadline, now2 = AbsoluteTime.now()) { if (deadline.t_ms === "never") { return { d_ms: "forever" }; @@ -12899,6 +12923,29 @@ function durationMul(d5, n2) { } return { d_ms: Math.round(d5.d_ms * n2) }; } +var codecForTimestamp = { + decode(x6, c4) { + const t_ms = x6.t_ms; + if (typeof t_ms === "string") { + if (t_ms === "never") { + return { t_s: "never" }; + } + } else if (typeof t_ms === "number") { + return { t_s: Math.floor(t_ms / 1e3) }; + } + const t_s = x6.t_s; + if (typeof t_s === "string") { + if (t_s === "never") { + return { t_s: "never" }; + } + throw Error(`expected timestamp at ${renderContext(c4)}`); + } + if (typeof t_s === "number") { + return { t_s }; + } + throw Error(`expected timestamp at ${renderContext(c4)}`); + } +}; // ../taler-util/lib/taler-types.js var DenomKeyType; @@ -15135,6 +15182,17 @@ var sampleWalletCoreTransactions = [ var textEncoder = new TextEncoder(); var logger5 = new Logger("http.ts"); +// ../taler-util/lib/MerchantApiClient.js +var logger6 = new Logger("MerchantApiClient.ts"); + +// ../taler-util/lib/bank-api-client.js +var logger7 = new Logger("bank-api-client.ts"); +var CreditDebitIndicator; +(function(CreditDebitIndicator2) { + CreditDebitIndicator2["Credit"] = "credit"; + CreditDebitIndicator2["Debit"] = "debit"; +})(CreditDebitIndicator || (CreditDebitIndicator = {})); + // ../taler-util/lib/index.browser.js loadBrowserPrng(); @@ -15475,34 +15533,6 @@ function useLang(initial2) { return useLocalStorage(langPreferenceKey, defaultValue); } var storage2 = memoryMap(); -function useMemoryStorage(key, defaultValue) { - const [storedValue, setStoredValue] = p3( - () => { - const prev = storage2.get(key); - return prev === void 0 ? defaultValue : prev; - } - ); - h2(() => { - return storage2.onUpdate(key, () => { - const newValue = storage2.get(key); - setStoredValue(newValue === void 0 ? defaultValue : newValue); - }); - }, [key]); - const setValue = (value) => { - if (value === void 0) { - storage2.delete(key); - } else { - storage2.set(key, value); - } - }; - return { - value: storedValue, - update: setValue, - reset: () => { - setValue(defaultValue); - } - }; -} var storage3 = memoryMap(); function base64encode(str) { return base64EncArr(strToUTF8Arr(str)); @@ -15616,9 +15646,25 @@ function defaultRequestHandler(_0, _1) { const requestParams = (_c = options.params) != null ? _c : {}; const requestPreventCache = (_d = options.preventCache) != null ? _d : false; const requestPreventCors = (_e = options.preventCors) != null ? _e : false; - const _url = new URL(`${baseUrl}${endpoint}`); + const validURL = validateURL(baseUrl, endpoint); + if (!validURL) { + const error2 = { + info: { + url: `${baseUrl}${endpoint}`, + payload: {}, + hasToken: !!options.token, + status: 0, + options + }, + type: 4, + exception: void 0, + loading: false, + message: `invalid URL: "${validURL}"` + }; + throw new RequestError(error2); + } Object.entries(requestParams).forEach(([key, value]) => { - _url.searchParams.set(key, String(value)); + validURL.searchParams.set(key, String(value)); }); let payload = void 0; if (requestBody != null) { @@ -15631,7 +15677,20 @@ function defaultRequestHandler(_0, _1) { } else if (typeof requestBody === "object") { payload = JSON.stringify(requestBody); } else { - throw Error("unsupported request body type"); + const error2 = { + info: { + url: validURL.href, + payload: {}, + hasToken: !!options.token, + status: 0, + options + }, + type: 4, + exception: void 0, + loading: false, + message: `unsupported request body type: "${typeof requestBody}"` + }; + throw new RequestError(error2); } } const controller = new AbortController(); @@ -15640,7 +15699,7 @@ function defaultRequestHandler(_0, _1) { }, requestTimeout); let response; try { - response = yield fetch(_url.href, { + response = yield fetch(validURL.href, { headers: requestHeaders, method: requestMethod, credentials: "omit", @@ -15652,15 +15711,27 @@ function defaultRequestHandler(_0, _1) { } catch (ex) { const info = { payload, - url: _url.href, + url: validURL.href, hasToken: !!options.token, status: 0, options }; + if (ex instanceof Error) { + if (ex.message === "HTTP_REQUEST_TIMEOUT") { + const error22 = { + info, + type: 3, + message: "request timeout" + }; + throw new RequestError(error22); + } + } const error2 = { info, - type: 3, - message: "Request timeout" + type: 4, + exception: ex, + loading: false, + message: ex instanceof Error ? ex.message : "" }; throw new RequestError(error2); } @@ -15674,7 +15745,7 @@ function defaultRequestHandler(_0, _1) { if (response.ok) { const result = yield buildRequestOk( response, - _url.href, + validURL.href, payload, !!options.token, options @@ -15683,7 +15754,7 @@ function defaultRequestHandler(_0, _1) { } else { const dataTxt = yield response.text(); const error2 = buildRequestFailed( - _url.href, + validURL.href, dataTxt, response.status, payload, @@ -15773,7 +15844,14 @@ function buildRequestFailed(url, dataTxt, status, payload, maybeOptions) { return error2; } } -var logger6 = new Logger("browserHttpLib"); +function validateURL(baseUrl, endpoint) { + try { + return new URL(`${baseUrl}${endpoint}`); + } catch (ex) { + return void 0; + } +} +var logger8 = new Logger("browserHttpLib"); var Context = B({ request: defaultRequestHandler }); @@ -15889,297 +15967,6 @@ function inspect(obj) { // src/Application.tsx init_preact_module(); - -// ../../node_modules/.pnpm/preact-router@3.2.1_preact@10.11.3/node_modules/preact-router/dist/preact-router.es.js -init_preact_module(); -var EMPTY$1 = {}; -function assign(obj, props) { - for (var i4 in props) { - obj[i4] = props[i4]; - } - return obj; -} -function exec(url, route2, opts) { - var reg = /(?:\?([^#]*))?(#.*)?$/, c4 = url.match(reg), matches = {}, ret; - if (c4 && c4[1]) { - var p4 = c4[1].split("&"); - for (var i4 = 0; i4 < p4.length; i4++) { - var r3 = p4[i4].split("="); - matches[decodeURIComponent(r3[0])] = decodeURIComponent(r3.slice(1).join("=")); - } - } - url = segmentize(url.replace(reg, "")); - route2 = segmentize(route2 || ""); - var max = Math.max(url.length, route2.length); - for (var i$1 = 0; i$1 < max; i$1++) { - if (route2[i$1] && route2[i$1].charAt(0) === ":") { - var param = route2[i$1].replace(/(^:|[+*?]+$)/g, ""), flags = (route2[i$1].match(/[+*?]+$/) || EMPTY$1)[0] || "", plus = ~flags.indexOf("+"), star = ~flags.indexOf("*"), val = url[i$1] || ""; - if (!val && !star && (flags.indexOf("?") < 0 || plus)) { - ret = false; - break; - } - matches[param] = decodeURIComponent(val); - if (plus || star) { - matches[param] = url.slice(i$1).map(decodeURIComponent).join("/"); - break; - } - } else if (route2[i$1] !== url[i$1]) { - ret = false; - break; - } - } - if (opts.default !== true && ret === false) { - return false; - } - return matches; -} -function pathRankSort(a5, b4) { - return a5.rank < b4.rank ? 1 : a5.rank > b4.rank ? -1 : a5.index - b4.index; -} -function prepareVNodeForRanking(vnode, index) { - vnode.index = index; - vnode.rank = rankChild(vnode); - return vnode.props; -} -function segmentize(url) { - return url.replace(/(^\/+|\/+$)/g, "").split("/"); -} -function rankSegment(segment) { - return segment.charAt(0) == ":" ? 1 + "*+?".indexOf(segment.charAt(segment.length - 1)) || 4 : 5; -} -function rank(path) { - return segmentize(path).map(rankSegment).join(""); -} -function rankChild(vnode) { - return vnode.props.default ? 0 : rank(vnode.props.path); -} -var customHistory = null; -var ROUTERS = []; -var subscribers = []; -var EMPTY = {}; -function setUrl(url, type) { - if (type === void 0) - type = "push"; - if (customHistory && customHistory[type]) { - customHistory[type](url); - } else if (typeof history !== "undefined" && history[type + "State"]) { - history[type + "State"](null, null, url); - } -} -function getCurrentUrl() { - var url; - if (customHistory && customHistory.location) { - url = customHistory.location; - } else if (customHistory && customHistory.getCurrentLocation) { - url = customHistory.getCurrentLocation(); - } else { - url = typeof location !== "undefined" ? location : EMPTY; - } - return "" + (url.pathname || "") + (url.search || ""); -} -function route(url, replace) { - if (replace === void 0) - replace = false; - if (typeof url !== "string" && url.url) { - replace = url.replace; - url = url.url; - } - if (canRoute(url)) { - setUrl(url, replace ? "replace" : "push"); - } - return routeTo(url); -} -function canRoute(url) { - for (var i4 = ROUTERS.length; i4--; ) { - if (ROUTERS[i4].canRoute(url)) { - return true; - } - } - return false; -} -function routeTo(url) { - var didRoute = false; - for (var i4 = 0; i4 < ROUTERS.length; i4++) { - if (ROUTERS[i4].routeTo(url) === true) { - didRoute = true; - } - } - for (var i$1 = subscribers.length; i$1--; ) { - subscribers[i$1](url); - } - return didRoute; -} -function routeFromLink(node) { - if (!node || !node.getAttribute) { - return; - } - var href = node.getAttribute("href"), target = node.getAttribute("target"); - if (!href || !href.match(/^\//g) || target && !target.match(/^_?self$/i)) { - return; - } - return route(href); -} -function handleLinkClick(e4) { - if (e4.ctrlKey || e4.metaKey || e4.altKey || e4.shiftKey || e4.button !== 0) { - return; - } - routeFromLink(e4.currentTarget || e4.target || this); - return prevent(e4); -} -function prevent(e4) { - if (e4) { - if (e4.stopImmediatePropagation) { - e4.stopImmediatePropagation(); - } - if (e4.stopPropagation) { - e4.stopPropagation(); - } - e4.preventDefault(); - } - return false; -} -function delegateLinkHandler(e4) { - if (e4.ctrlKey || e4.metaKey || e4.altKey || e4.shiftKey || e4.button !== 0) { - return; - } - var t4 = e4.target; - do { - if (String(t4.nodeName).toUpperCase() === "A" && t4.getAttribute("href")) { - if (t4.hasAttribute("native")) { - return; - } - if (routeFromLink(t4)) { - return prevent(e4); - } - } - } while (t4 = t4.parentNode); -} -var eventListenersInitialized = false; -function initEventListeners() { - if (eventListenersInitialized) { - return; - } - if (typeof addEventListener === "function") { - if (!customHistory) { - addEventListener("popstate", function() { - routeTo(getCurrentUrl()); - }); - } - addEventListener("click", delegateLinkHandler); - } - eventListenersInitialized = true; -} -var Router = function(Component$$1) { - function Router2(props) { - Component$$1.call(this, props); - if (props.history) { - customHistory = props.history; - } - this.state = { - url: props.url || getCurrentUrl() - }; - initEventListeners(); - } - if (Component$$1) - Router2.__proto__ = Component$$1; - Router2.prototype = Object.create(Component$$1 && Component$$1.prototype); - Router2.prototype.constructor = Router2; - Router2.prototype.shouldComponentUpdate = function shouldComponentUpdate(props) { - if (props.static !== true) { - return true; - } - return props.url !== this.props.url || props.onChange !== this.props.onChange; - }; - Router2.prototype.canRoute = function canRoute2(url) { - var children = x2(this.props.children); - return this.getMatchingChildren(children, url, false).length > 0; - }; - Router2.prototype.routeTo = function routeTo2(url) { - this.setState({ url }); - var didRoute = this.canRoute(url); - if (!this.updating) { - this.forceUpdate(); - } - return didRoute; - }; - Router2.prototype.componentWillMount = function componentWillMount() { - ROUTERS.push(this); - this.updating = true; - }; - Router2.prototype.componentDidMount = function componentDidMount() { - var this$1 = this; - if (customHistory) { - this.unlisten = customHistory.listen(function(location2) { - this$1.routeTo("" + (location2.pathname || "") + (location2.search || "")); - }); - } - this.updating = false; - }; - Router2.prototype.componentWillUnmount = function componentWillUnmount() { - if (typeof this.unlisten === "function") { - this.unlisten(); - } - ROUTERS.splice(ROUTERS.indexOf(this), 1); - }; - Router2.prototype.componentWillUpdate = function componentWillUpdate() { - this.updating = true; - }; - Router2.prototype.componentDidUpdate = function componentDidUpdate() { - this.updating = false; - }; - Router2.prototype.getMatchingChildren = function getMatchingChildren(children, url, invoke) { - return children.filter(prepareVNodeForRanking).sort(pathRankSort).map(function(vnode) { - var matches = exec(url, vnode.props.path, vnode.props); - if (matches) { - if (invoke !== false) { - var newProps = { url, matches }; - assign(newProps, matches); - delete newProps.ref; - delete newProps.key; - return q(vnode, newProps); - } - return vnode; - } - }).filter(Boolean); - }; - Router2.prototype.render = function render(ref, ref$1) { - var children = ref.children; - var onChange = ref.onChange; - var url = ref$1.url; - var active = this.getMatchingChildren(x2(children), url, true); - var current = active[0] || null; - var previous = this.previousUrl; - if (url !== previous) { - this.previousUrl = url; - if (typeof onChange === "function") { - onChange({ - router: this, - url, - previous, - active, - current - }); - } - } - return current; - }; - return Router2; -}(d); -var Link = function(props) { - return h("a", assign({ onClick: handleLinkClick }, props)); -}; -var Route = function(props) { - return h(props.component, props); -}; -Router.subscribers = subscribers; -Router.getCurrentUrl = getCurrentUrl; -Router.route = route; -Router.Router = Router; -Router.Route = Route; -Router.Link = Link; -Router.exec = exec; - -// src/Application.tsx init_hooks_module(); // ../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/extends.js @@ -16665,1970 +16452,298 @@ function createHashHistory(props) { // src/ApplicationReadyRoutes.tsx init_preact_module(); -init_hooks_module(); - -// src/components/menu/index.tsx -init_preact_module(); -init_hooks_module(); - -// src/AdminRoutes.tsx -init_preact_module(); - -// src/paths/admin/create/index.tsx -init_preact_module(); -init_hooks_module(); -// src/context/backend.ts +// ../../node_modules/.pnpm/preact-router@3.2.1_preact@10.11.3/node_modules/preact-router/dist/preact-router.es.js init_preact_module(); -init_hooks_module(); - -// src/hooks/index.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); - -// ../../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 = (a5, b4) => __spreadValues(__spreadValues({}, a5), b4); -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]) + ","; - } - 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); +var EMPTY$1 = {}; +function assign(obj, props) { + for (var i4 in props) { + obj[i4] = props[i4]; + } + return obj; +} +function exec(url, route2, opts) { + var reg = /(?:\?([^#]*))?(#.*)?$/, c4 = url.match(reg), matches = {}, ret; + if (c4 && c4[1]) { + var p4 = c4[1].split("&"); + for (var i4 = 0; i4 < p4.length; i4++) { + var r3 = p4[i4].split("="); + matches[decodeURIComponent(r3[0])] = decodeURIComponent(r3.slice(1).join("=")); } - } 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); + url = segmentize(url.replace(reg, "")); + route2 = segmentize(route2 || ""); + var max = Math.max(url.length, route2.length); + for (var i$1 = 0; i$1 < max; i$1++) { + if (route2[i$1] && route2[i$1].charAt(0) === ":") { + var param = route2[i$1].replace(/(^:|[+*?]+$)/g, ""), flags = (route2[i$1].match(/[+*?]+$/) || EMPTY$1)[0] || "", plus = ~flags.indexOf("+"), star = ~flags.indexOf("*"), val = url[i$1] || ""; + if (!val && !star && (flags.indexOf("?") < 0 || plus)) { + ret = false; + break; } - }, - // Subscriber - state[6], - // Get server cache snapshot - () => { - if (!isUndefined(key)) { - if (key in INITIAL_CACHE) - return INITIAL_CACHE[key]; + matches[param] = decodeURIComponent(val); + if (plus || star) { + matches[param] = url.slice(i$1).map(decodeURIComponent).join("/"); + break; } - return !isUndefined(key) && cache2.get(key) || EMPTY_CACHE; + } else if (route2[i$1] !== url[i$1]) { + ret = false; + break; } - ]; -}; -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 = ""; - } + if (opts.default !== true && ret === false) { + return false; } - 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 -}; -function internalMutate(...args) { - return __async(this, null, function* () { - 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); - function mutateByKey(_k) { - return __async(this, null, function* () { - const [key] = serialize(_k); - if (!key) - return; - const [get, set2] = 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; - set2({ - data: optimisticData, - _c: committedData - }); - } - if (isFunction(data)) { - try { - data = data(committedData); - } catch (err) { - error2 = err; - } - } - if (data && isPromiseLike(data)) { - data = yield data.catch((err) => { - error2 = err; - }); - if (beforeMutationTs !== MUTATION[key][0]) { - if (error2) - throw error2; - return data; - } else if (error2 && hasOptimisticData && rollbackOnError(error2)) { - populateCache = true; - set2({ - data: committedData, - _c: UNDEFINED - }); - } - } - if (populateCache) { - if (!error2) { - if (isFunction(populateCache)) { - const populateCachedData = populateCache(data, committedData); - set2({ - data: populateCachedData, - error: UNDEFINED, - _c: UNDEFINED - }); - } else { - set2({ - data, - error: UNDEFINED, - _c: UNDEFINED - }); - } - } - } - MUTATION[key][1] = getTimestamp(); - Promise.resolve(startRevalidate()).then(() => { - set2({ - _c: UNDEFINED - }); - }); - if (error2) { - if (throwOnError) - throw error2; - return; - } - return data; - }); - } - }); + return matches; } -var revalidateAllKeys = (revalidators, type) => { - for (const key in revalidators) { - if (revalidators[key][0]) - revalidators[key][0](type); +function pathRankSort(a5, b4) { + return a5.rank < b4.rank ? 1 : a5.rank > b4.rank ? -1 : a5.index - b4.index; +} +function prepareVNodeForRanking(vnode, index) { + vnode.index = index; + vnode.rank = rankChild(vnode); + return vnode.props; +} +function segmentize(url) { + return url.replace(/(^\/+|\/+$)/g, "").split("/"); +} +function rankSegment(segment) { + return segment.charAt(0) == ":" ? 1 + "*+?".indexOf(segment.charAt(segment.length - 1)) || 4 : 5; +} +function rank(path) { + return segmentize(path).map(rankSegment).join(""); +} +function rankChild(vnode) { + return vnode.props.default ? 0 : rank(vnode.props.path); +} +var customHistory = null; +var ROUTERS = []; +var subscribers = []; +var EMPTY = {}; +function setUrl(url, type) { + if (type === void 0) + type = "push"; + if (customHistory && customHistory[type]) { + customHistory[type](url); + } else if (typeof history !== "undefined" && history[type + "State"]) { + history[type + "State"](null, null, url); } -}; -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 - ]; +} +function getCurrentUrl() { + var url; + if (customHistory && customHistory.location) { + url = customHistory.location; + } else if (customHistory && customHistory.getCurrentLocation) { + url = customHistory.getCurrentLocation(); + } else { + url = typeof location !== "undefined" ? location : EMPTY; } - 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; + return "" + (url.pathname || "") + (url.search || ""); +} +function route(url, replace) { + if (replace === void 0) + replace = false; + if (typeof url !== "string" && url.url) { + replace = url.replace; + url = url.url; } - 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 = (a5, b4) => { - const v3 = mergeObjects(a5, b4); - if (b4) { - const { use: u1, fallback: f1 } = a5; - const { use: u22, fallback: f22 } = b4; - if (u1 && u22) { - v3.use = u1.concat(u22); + if (canRoute(url)) { + setUrl(url, replace ? "replace" : "push"); + } + return routeTo(url); +} +function canRoute(url) { + for (var i4 = ROUTERS.length; i4--; ) { + if (ROUTERS[i4].canRoute(url)) { + return true; } - if (f1 && f22) { - v3.fallback = mergeObjects(f1, f22); + } + return false; +} +function routeTo(url) { + var didRoute = false; + for (var i4 = 0; i4 < ROUTERS.length; i4++) { + if (ROUTERS[i4].routeTo(url) === true) { + didRoute = true; } } - 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); + for (var i$1 = subscribers.length; i$1--; ) { + subscribers[i$1](url); } - const cacheContext = cacheContextRef.current; - if (cacheContext) { - extendedConfig.cache = cacheContext[0]; - extendedConfig.mutate = cacheContext[1]; + return didRoute; +} +function routeFromLink(node) { + if (!node || !node.getAttribute) { + return; } - 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 href = node.getAttribute("href"), target = node.getAttribute("target"); + if (!href || !href.match(/^\//g) || target && !target.match(/^_?self$/i)) { + return; } -}; -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 i4 = middleware2.length; i4--; ) { - next = middleware2[i4](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.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; - }, (e4) => { - promise.status = "rejected"; - promise.reason = e4; - }); - throw promise; + return route(href); +} +function handleLinkClick(e4) { + if (e4.ctrlKey || e4.metaKey || e4.altKey || e4.shiftKey || e4.button !== 0) { + return; } -}); -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 t4 = _3; - if (t4 === "data") { - if (!compare2(prev[t4], current[t4])) { - if (!isUndefined(prev[t4])) { - return false; - } - if (!compare2(returnedData, current[t4])) { - return false; - } - } - } else { - if (current[t4] !== prev[t4]) { - 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 __spreadValues({ - 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( - (revalidateOpts) => __async(void 0, null, function* () { - 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 = yield 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 now2 = Date.now(); - if (getConfig().revalidateOnFocus && now2 > nextFocusRevalidatedAt && isActive()) { - nextFocusRevalidatedAt = now2 + 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 timer; - function next() { - const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval; - if (interval && timer !== -1) { - timer = setTimeout(execute, interval); - } - } - function execute() { - if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) { - revalidate(WITH_DEDUPE).then(next); - } else { - next(); - } - } - next(); - return () => { - if (timer) { - clearTimeout(timer); - timer = -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; - 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; + routeFromLink(e4.currentTarget || e4.target || this); + return prevent(e4); +} +function prevent(e4) { + if (e4) { + if (e4.stopImmediatePropagation) { + e4.stopImmediatePropagation(); } - } - 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; + if (e4.stopPropagation) { + e4.stopPropagation(); } - }; -}; -var SWRConfig2 = OBJECT.defineProperty(SWRConfig, "defaultValue", { - value: defaultConfig -}); -var useSWR = withArgs(useSWRHandler); - -// src/hooks/backend.ts -init_hooks_module(); - -// src/context/instance.ts -init_preact_module(); -init_hooks_module(); -var Context3 = B({}); -var InstanceContextProvider = Context3.Provider; -var useInstanceContext = () => q2(Context3); - -// src/hooks/backend.ts -function useMatchMutate() { - const { cache: cache2, mutate: mutate2 } = useSWRConfig(); - if (!(cache2 instanceof Map)) { - throw new Error( - "matchMutate requires the cache provider to be a Map instance" - ); + e4.preventDefault(); } - return function matchRegexMutate(re) { - return mutate2((key) => { - if (!key || !re) - return true; - if (typeof key === "string" && re.test(key)) - return true; - if (typeof key === "object" && re.test(key[0])) - return true; - return false; - }, void 0, { - revalidate: true - }); - }; -} -function useBackendInstancesTestForAdmin() { - const { request } = useBackendBaseRequest(); - const [result, setResult] = p3({ loading: true }); - h2(() => { - request(`/management/instances`).then((data) => setResult(data)).catch( - (error2) => setResult(error2.cause) - ); - }, [request]); - return result; -} -function useBackendConfig() { - const { request } = useBackendBaseRequest(); - const [result, setResult] = p3({ loading: true }); - h2(() => { - request(`/config`).then((data) => setResult(data)).catch((error2) => setResult(error2)); - }, [request]); - return result; + return false; } -function useCredentialsChecker() { - const { request } = useApiContext(); - function testLogin(instance, token) { - return __async(this, null, function* () { - try { - const response = yield request(instance, `/private/`, { - token - }); - return { valid: true }; - } catch (error2) { - if (error2 instanceof RequestError) { - return { valid: false, cause: error2.cause.type }; - } - return { valid: false, cause: ErrorType.UNEXPECTED }; - } - }); +function delegateLinkHandler(e4) { + if (e4.ctrlKey || e4.metaKey || e4.altKey || e4.shiftKey || e4.button !== 0) { + return; } - ; - return testLogin; -} -function useBackendBaseRequest() { - const { url: backend, token } = useBackendContext(); - const { request: requestHandler } = useApiContext(); - const request = T2( - function requestImpl(endpoint, options = {}) { - return requestHandler(backend, endpoint, __spreadValues({ token }, options)); - }, - [backend, token] - ); - return { request }; -} -function useBackendInstanceRequest() { - const { url: rootBackendUrl, token: rootToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - const { request: requestHandler } = useApiContext(); - const { baseUrl, token } = !admin ? { baseUrl: rootBackendUrl, token: rootToken } : { baseUrl: `${rootBackendUrl}/instances/${id}`, token: instanceToken }; - const request = T2( - function requestImpl(endpoint, options = {}) { - return requestHandler(baseUrl, endpoint, __spreadValues({ token }, options)); - }, - [baseUrl, token] - ); - const multiFetcher = T2( - function multiFetcherImpl(args) { - const [endpoints] = args; - return Promise.all( - endpoints.map( - (endpoint) => requestHandler(baseUrl, endpoint, { token }) - ) - ); - }, - [baseUrl, token] - ); - const fetcher = T2( - function fetcherImpl(endpoint) { - return requestHandler(baseUrl, endpoint, { token }); - }, - [baseUrl, token] - ); - const orderFetcher = T2( - function orderFetcherImpl(args) { - const [endpoint, paid, refunded, wired, searchDate, delta] = args; - const date_s = delta && delta < 0 && searchDate ? searchDate.getTime() / 1e3 + 1 : searchDate !== void 0 ? searchDate.getTime() / 1e3 : void 0; - const params = {}; - if (paid !== void 0) - params.paid = paid; - if (delta !== void 0) - params.delta = delta; - if (refunded !== void 0) - params.refunded = refunded; - if (wired !== void 0) - params.wired = wired; - if (date_s !== void 0) - params.date_s = date_s; - return requestHandler(baseUrl, endpoint, { params, token }); - }, - [baseUrl, token] - ); - const reserveDetailFetcher = T2( - function reserveDetailFetcherImpl(endpoint) { - return requestHandler(baseUrl, endpoint, { - params: { - rewards: "yes" - }, - token - }); - }, - [baseUrl, token] - ); - const rewardsDetailFetcher = T2( - function rewardsDetailFetcherImpl(endpoint) { - return requestHandler(baseUrl, endpoint, { - params: { - pickups: "yes" - }, - token - }); - }, - [baseUrl, token] - ); - const transferFetcher = T2( - function transferFetcherImpl(args) { - const [endpoint, payto_uri, verified, position, delta] = args; - const params = {}; - if (payto_uri !== void 0) - params.payto_uri = payto_uri; - if (verified !== void 0) - params.verified = verified; - if (delta !== void 0) { - params.limit = delta; - } - if (position !== void 0) - params.offset = position; - return requestHandler(baseUrl, endpoint, { params, token }); - }, - [baseUrl, token] - ); - const templateFetcher = T2( - function templateFetcherImpl(args) { - const [endpoint, position, delta] = args; - const params = {}; - if (delta !== void 0) { - params.limit = delta; + var t4 = e4.target; + do { + if (String(t4.nodeName).toUpperCase() === "A" && t4.getAttribute("href")) { + if (t4.hasAttribute("native")) { + return; } - if (position !== void 0) - params.offset = position; - return requestHandler(baseUrl, endpoint, { params, token }); - }, - [baseUrl, token] - ); - const webhookFetcher = T2( - function webhookFetcherImpl(args) { - const [endpoint, position, delta] = args; - const params = {}; - if (delta !== void 0) { - params.limit = delta; + if (routeFromLink(t4)) { + return prevent(e4); } - if (position !== void 0) - params.offset = position; - return requestHandler(baseUrl, endpoint, { params, token }); - }, - [baseUrl, token] - ); - return { - request, - fetcher, - multiFetcher, - orderFetcher, - reserveDetailFetcher, - rewardsDetailFetcher, - transferFetcher, - templateFetcher, - webhookFetcher - }; -} - -// src/hooks/index.ts -var calculateRootPath = () => { - const rootPath = typeof window !== void 0 ? window.location.origin + window.location.pathname : "/"; - return rootPath; -}; -function useBackendURL(url) { - const [value, setter] = useNotNullLocalStorage( - "backend-url", - url || calculateRootPath() - ); - const [triedToLog, setTriedToLog] = useLocalStorage2("tried-login"); - const checkedSetter = (v3) => { - setTriedToLog("yes"); - return setter((p4) => (v3 instanceof Function ? v3(p4) : v3).replace(/\/$/, "")); - }; - const resetBackend = () => { - setTriedToLog(void 0); - }; - return [value, !!triedToLog, checkedSetter, resetBackend]; -} -function useBackendDefaultToken(initialValue) { - initialValue = "secret-token:secret"; - const { update: setToken, value: token, reset } = useMemoryStorage(`backend-token`, initialValue); - const clearCache = useMatchMutate(); - h2(() => { - clearCache(); - }, [token]); - function updateToken(value) { - if (value === void 0) { - reset(); - } else { - setToken(value); } - } - return [token, updateToken]; + } while (t4 = t4.parentNode); } -function useBackendInstanceToken(id) { - const { update: setToken, value: token, reset } = useMemoryStorage(`backend-token-${id}`); - const [defaultToken, defaultSetToken] = useBackendDefaultToken(); - if (id === "default") { - return [defaultToken, defaultSetToken]; +var eventListenersInitialized = false; +function initEventListeners() { + if (eventListenersInitialized) { + return; } - function updateToken(value) { - if (value === void 0) { - reset(); - } else { - setToken(value); + if (typeof addEventListener === "function") { + if (!customHistory) { + addEventListener("popstate", function() { + routeTo(getCurrentUrl()); + }); } + addEventListener("click", delegateLinkHandler); } - return [token, updateToken]; + eventListenersInitialized = true; } -function useLocalStorage2(key, initialValue) { - const [storedValue, setStoredValue] = p3( - () => { - return typeof window !== "undefined" ? window.localStorage.getItem(key) || initialValue : initialValue; +var Router = function(Component$$1) { + function Router2(props) { + Component$$1.call(this, props); + if (props.history) { + customHistory = props.history; } - ); - const setValue = (value) => { - setStoredValue((p4) => { - const toStore = value instanceof Function ? value(p4) : value; - if (typeof window !== "undefined") { - if (!toStore) { - window.localStorage.removeItem(key); - } else { - window.localStorage.setItem(key, toStore); - } - } - return toStore; - }); + this.state = { + url: props.url || getCurrentUrl() + }; + initEventListeners(); + } + if (Component$$1) + Router2.__proto__ = Component$$1; + Router2.prototype = Object.create(Component$$1 && Component$$1.prototype); + Router2.prototype.constructor = Router2; + Router2.prototype.shouldComponentUpdate = function shouldComponentUpdate(props) { + if (props.static !== true) { + return true; + } + return props.url !== this.props.url || props.onChange !== this.props.onChange; }; - return [storedValue, setValue]; -} -function useNotNullLocalStorage(key, initialValue) { - const [storedValue, setStoredValue] = p3(() => { - return typeof window !== "undefined" ? window.localStorage.getItem(key) || initialValue : initialValue; - }); - const setValue = (value) => { - const valueToStore = value instanceof Function ? value(storedValue) : value; - setStoredValue(valueToStore); - if (typeof window !== "undefined") { - if (!valueToStore) { - window.localStorage.removeItem(key); - } else { - window.localStorage.setItem(key, valueToStore); - } + Router2.prototype.canRoute = function canRoute2(url) { + var children = x2(this.props.children); + return this.getMatchingChildren(children, url, false).length > 0; + }; + Router2.prototype.routeTo = function routeTo2(url) { + this.setState({ url }); + var didRoute = this.canRoute(url); + if (!this.updating) { + this.forceUpdate(); } + return didRoute; }; - return [storedValue, setValue]; -} - -// src/context/backend.ts -var BackendContext = B({ - url: "", - token: void 0, - triedToLog: false, - resetBackend: () => null, - // clearAllTokens: () => null, - // addTokenCleaner: () => null, - updateLoginStatus: () => null, - updateToken: () => null -}); -function useBackendContextState(defaultUrl, initialToken) { - const [url, triedToLog, changeBackend, resetBackend] = useBackendURL(defaultUrl); - const [token, _updateToken] = useBackendDefaultToken(initialToken); - const updateToken = (t4) => { - _updateToken(t4); + Router2.prototype.componentWillMount = function componentWillMount() { + ROUTERS.push(this); + this.updating = true; }; - const updateLoginStatus = (url2, token2) => { - changeBackend(url2); - updateToken(token2); + Router2.prototype.componentDidMount = function componentDidMount() { + var this$1 = this; + if (customHistory) { + this.unlisten = customHistory.listen(function(location2) { + this$1.routeTo("" + (location2.pathname || "") + (location2.search || "")); + }); + } + this.updating = false; }; - return { - url, - token, - triedToLog, - updateLoginStatus, - resetBackend, - // clearAllTokens, - updateToken - // addTokenCleaner: addTokenCleanerMemo, + Router2.prototype.componentWillUnmount = function componentWillUnmount() { + if (typeof this.unlisten === "function") { + this.unlisten(); + } + ROUTERS.splice(ROUTERS.indexOf(this), 1); }; -} -var BackendContextProvider = ({ - children, - defaultUrl, - initialToken -}) => { - const value = useBackendContextState(defaultUrl, initialToken); - return h(BackendContext.Provider, { value, children }); -}; -var useBackendContext = () => q2(BackendContext); - -// src/hooks/instance.ts -var useSWR2 = useSWR; -function useAdminAPI() { - const { request } = useBackendBaseRequest(); - const mutateAll = useMatchMutate(); - const createInstance = (instance) => __async(this, null, function* () { - yield request(`/management/instances`, { - method: "POST", - data: instance - }); - mutateAll(/\/management\/instances/); - }); - const deleteInstance = (id) => __async(this, null, function* () { - yield request(`/management/instances/${id}`, { - method: "DELETE" - }); - mutateAll(/\/management\/instances/); - }); - const purgeInstance = (id) => __async(this, null, function* () { - yield request(`/management/instances/${id}`, { - method: "DELETE", - params: { - purge: "YES" - } - }); - mutateAll(/\/management\/instances/); - }); - return { createInstance, deleteInstance, purgeInstance }; -} -function useManagementAPI(instanceId) { - const mutateAll = useMatchMutate(); - const { updateToken } = useBackendContext(); - const { request } = useBackendBaseRequest(); - const updateInstance = (instance) => __async(this, null, function* () { - yield request(`/management/instances/${instanceId}`, { - method: "PATCH", - data: instance - }); - mutateAll(/\/management\/instances/); - }); - const deleteInstance = () => __async(this, null, function* () { - yield request(`/management/instances/${instanceId}`, { - method: "DELETE" - }); - mutateAll(/\/management\/instances/); - }); - const clearToken = () => __async(this, null, function* () { - yield request(`/management/instances/${instanceId}/auth`, { - method: "POST", - data: { method: "external" } - }); - mutateAll(/\/management\/instances/); - }); - const setNewToken = (newToken) => __async(this, null, function* () { - yield request(`/management/instances/${instanceId}/auth`, { - method: "POST", - data: { method: "token", token: newToken } - }); - updateToken(newToken); - mutateAll(/\/management\/instances/); - }); - return { updateInstance, deleteInstance, setNewToken, clearToken }; -} -function useInstanceAPI() { - const { mutate: mutate2 } = useSWRConfig(); - const { - url: baseUrl, - token: adminToken, - updateLoginStatus - } = useBackendContext(); - const { request } = useBackendInstanceRequest(); - const updateInstance = (instance) => __async(this, null, function* () { - yield request(`/private/`, { - method: "PATCH", - data: instance - }); - if (adminToken) - mutate2(["/private/instances", adminToken, baseUrl], null); - mutate2([`/private/`], null); - }); - const deleteInstance = () => __async(this, null, function* () { - yield request(`/private/`, { - method: "DELETE" - // token: adminToken, - }); - if (adminToken) - mutate2(["/private/instances", adminToken, baseUrl], null); - mutate2([`/private/`], null); - }); - const clearToken = () => __async(this, null, function* () { - yield request(`/private/auth`, { - method: "POST", - data: { method: "external" } - }); - mutate2([`/private/`], null); - }); - const setNewToken = (newToken) => __async(this, null, function* () { - yield request(`/private/auth`, { - method: "POST", - data: { method: "token", token: newToken } - }); - updateLoginStatus(baseUrl, newToken); - mutate2([`/private/`], null); - }); - return { updateInstance, deleteInstance, setNewToken, clearToken }; -} -function useInstanceDetails() { - const { fetcher } = useBackendInstanceRequest(); - const { data, error: error2, isValidating } = useSWR2([`/private/`], fetcher, { - refreshInterval: 0, - refreshWhenHidden: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, - refreshWhenOffline: false, - revalidateIfStale: false, - errorRetryCount: 0, - errorRetryInterval: 1, - shouldRetryOnError: false - }); - if (isValidating) - return { loading: true, data: data == null ? void 0 : data.data }; - if (data) - return data; - if (error2) - return error2.cause; - return { loading: true }; -} -function useInstanceKYCDetails() { - var _a; - const { fetcher } = useBackendInstanceRequest(); - const { data, error: error2 } = useSWR2([`/private/kyc`], fetcher, { - refreshInterval: 60 * 1e3, - refreshWhenHidden: false, - revalidateOnFocus: false, - revalidateIfStale: false, - revalidateOnMount: false, - revalidateOnReconnect: false, - refreshWhenOffline: false, - errorRetryCount: 0, - errorRetryInterval: 1, - shouldRetryOnError: false - }); - if (data) { - if (((_a = data.info) == null ? void 0 : _a.status) === 202) - return { ok: true, data: { type: "redirect", status: data.data } }; - return { ok: true, data: { type: "ok" } }; - } - if (error2) - return error2.cause; - return { loading: true }; -} -function useManagedInstanceDetails(instanceId) { - const { request } = useBackendBaseRequest(); - const { data, error: error2, isValidating } = useSWR2([`/management/instances/${instanceId}`], request, { - refreshInterval: 0, - refreshWhenHidden: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, - refreshWhenOffline: false, - errorRetryCount: 0, - errorRetryInterval: 1, - shouldRetryOnError: false - }); - if (isValidating) - return { loading: true, data: data == null ? void 0 : data.data }; - if (data) - return data; - if (error2) - return error2.cause; - return { loading: true }; -} -function useBackendInstances() { - const { request } = useBackendBaseRequest(); - const { data, error: error2, isValidating } = useSWR2(["/management/instances"], request); - if (isValidating) - return { loading: true, data: data == null ? void 0 : data.data }; - if (data) - return data; - if (error2) - return error2.cause; - return { loading: true }; -} - -// src/paths/admin/create/CreatePage.tsx -init_preact_module(); -init_hooks_module(); - -// src/components/exception/AsyncButton.tsx -init_preact_module(); - -// src/components/modal/index.tsx -init_preact_module(); -init_hooks_module(); - -// src/utils/constants.ts -var PAYTO_REGEX = /^payto:\/\/[a-zA-Z][a-zA-Z0-9-.]+(\/[a-zA-Z0-9\-\.\~\(\)@_%:!$&'*+,;=]*)*\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\-\.\~\(\)@_%:!$'*+,;=]*&?)*$/; -var PAYTO_WIRE_METHOD_LOOKUP = /payto:\/\/([a-zA-Z][a-zA-Z0-9-.]+)\/.*/; -var AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\.?[0-9,]*$/; -var INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/; -var CROCKFORD_BASE32_REGEX = /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/; -var URL_REGEX = /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)\/$/; -var PAGE_SIZE = 20; -var MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1; -var DEFAULT_REQUEST_TIMEOUT = 10; -var MAX_IMAGE_SIZE = 1024 * 1024; -var INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/; -var COUNTRY_TABLE = { - AE: "U.A.E.", - AF: "Afghanistan", - AL: "Albania", - AM: "Armenia", - AN: "Netherlands Antilles", - AR: "Argentina", - AT: "Austria", - AU: "Australia", - AZ: "Azerbaijan", - BA: "Bosnia and Herzegovina", - BD: "Bangladesh", - BE: "Belgium", - BG: "Bulgaria", - BH: "Bahrain", - BN: "Brunei Darussalam", - BO: "Bolivia", - BR: "Brazil", - BT: "Bhutan", - BY: "Belarus", - BZ: "Belize", - CA: "Canada", - CG: "Congo", - CH: "Switzerland", - CI: "Cote d'Ivoire", - CL: "Chile", - CM: "Cameroon", - CN: "People's Republic of China", - CO: "Colombia", - CR: "Costa Rica", - CS: "Serbia and Montenegro", - CZ: "Czech Republic", - DE: "Germany", - DK: "Denmark", - DO: "Dominican Republic", - DZ: "Algeria", - EC: "Ecuador", - EE: "Estonia", - EG: "Egypt", - ER: "Eritrea", - ES: "Spain", - ET: "Ethiopia", - FI: "Finland", - FO: "Faroe Islands", - FR: "France", - GB: "United Kingdom", - GD: "Caribbean", - GE: "Georgia", - GL: "Greenland", - GR: "Greece", - GT: "Guatemala", - HK: "Hong Kong", - // HK: "Hong Kong S.A.R.", - HN: "Honduras", - HR: "Croatia", - HT: "Haiti", - HU: "Hungary", - ID: "Indonesia", - IE: "Ireland", - IL: "Israel", - IN: "India", - IQ: "Iraq", - IR: "Iran", - IS: "Iceland", - IT: "Italy", - JM: "Jamaica", - JO: "Jordan", - JP: "Japan", - KE: "Kenya", - KG: "Kyrgyzstan", - KH: "Cambodia", - KR: "South Korea", - KW: "Kuwait", - KZ: "Kazakhstan", - LA: "Laos", - LB: "Lebanon", - LI: "Liechtenstein", - LK: "Sri Lanka", - LT: "Lithuania", - LU: "Luxembourg", - LV: "Latvia", - LY: "Libya", - MA: "Morocco", - MC: "Principality of Monaco", - MD: "Moldava", - // MD: "Moldova", - ME: "Montenegro", - MK: "Former Yugoslav Republic of Macedonia", - ML: "Mali", - MM: "Myanmar", - MN: "Mongolia", - MO: "Macau S.A.R.", - MT: "Malta", - MV: "Maldives", - MX: "Mexico", - MY: "Malaysia", - NG: "Nigeria", - NI: "Nicaragua", - NL: "Netherlands", - NO: "Norway", - NP: "Nepal", - NZ: "New Zealand", - OM: "Oman", - PA: "Panama", - PE: "Peru", - PH: "Philippines", - PK: "Islamic Republic of Pakistan", - PL: "Poland", - PR: "Puerto Rico", - PT: "Portugal", - PY: "Paraguay", - QA: "Qatar", - RE: "Reunion", - RO: "Romania", - RS: "Serbia", - RU: "Russia", - RW: "Rwanda", - SA: "Saudi Arabia", - SE: "Sweden", - SG: "Singapore", - SI: "Slovenia", - SK: "Slovak", - SN: "Senegal", - SO: "Somalia", - SR: "Suriname", - SV: "El Salvador", - SY: "Syria", - TH: "Thailand", - TJ: "Tajikistan", - TM: "Turkmenistan", - TN: "Tunisia", - TR: "Turkey", - TT: "Trinidad and Tobago", - TW: "Taiwan", - TZ: "Tanzania", - UA: "Ukraine", - US: "United States", - UY: "Uruguay", - VA: "Vatican", - VE: "Venezuela", - VN: "Viet Nam", - YE: "Yemen", - ZA: "South Africa", - ZW: "Zimbabwe" -}; - -// src/components/exception/loading.tsx -init_preact_module(); -function Loading() { - return /* @__PURE__ */ h( - "div", - { - class: "columns is-centered is-vcentered", - style: { - height: "calc(100% - 3rem)", - position: "absolute", - width: "100%" - } - }, - /* @__PURE__ */ h(Spinner, null) - ); -} -function Spinner() { - return /* @__PURE__ */ h("div", { class: "lds-ring" }, /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null)); -} - -// src/components/form/FormProvider.tsx -init_preact_module(); -init_hooks_module(); -var noUpdater = () => (s5) => s5; -function FormProvider({ - object: object2 = {}, - errors: errors2 = {}, - name = "", - valueHandler, - children -}) { - const initialObject = F(() => object2, []); - const value = F( - () => ({ - errors: errors2, - object: object2, - initialObject, - valueHandler: valueHandler ? valueHandler : noUpdater, - name, - toStr: {}, - fromStr: {} - }), - [errors2, object2, valueHandler] - ); - return /* @__PURE__ */ h(FormContext.Provider, { value }, /* @__PURE__ */ h( - "form", - { - class: "field", - onSubmit: (e4) => { - e4.preventDefault(); + Router2.prototype.componentWillUpdate = function componentWillUpdate() { + this.updating = true; + }; + Router2.prototype.componentDidUpdate = function componentDidUpdate() { + this.updating = false; + }; + Router2.prototype.getMatchingChildren = function getMatchingChildren(children, url, invoke) { + return children.filter(prepareVNodeForRanking).sort(pathRankSort).map(function(vnode) { + var matches = exec(url, vnode.props.path, vnode.props); + if (matches) { + if (invoke !== false) { + var newProps = { url, matches }; + assign(newProps, matches); + delete newProps.ref; + delete newProps.key; + return q(vnode, newProps); + } + return vnode; } - }, - children - )); -} -var FormContext = B(null); -function useFormContext() { - return q2(FormContext); -} - -// src/components/form/Input.tsx -init_preact_module(); - -// src/components/form/useField.tsx -init_hooks_module(); -function useField(name) { - const { errors: errors2, object: object2, initialObject, toStr, fromStr, valueHandler } = useFormContext(); - const [isDirty, setDirty] = p3(false); - const updateField = (field) => (value2) => { - setDirty(true); - return valueHandler((prev) => { - return setValueDeeper(prev, String(field).split("."), value2); - }); + }).filter(Boolean); }; - const defaultToString4 = (f3) => String(!f3 ? "" : f3); - const defaultFromString4 = (v3) => v3; - const value = readField(object2, String(name)); - const initial2 = readField(initialObject, String(name)); - const hasError = readField(errors2, String(name)); - return { - error: isDirty ? hasError : void 0, - required: !isDirty && hasError, - value, - initial: initial2, - onChange: updateField(name), - toStr: toStr[name] ? toStr[name] : defaultToString4, - fromStr: fromStr[name] ? fromStr[name] : defaultFromString4 + Router2.prototype.render = function render(ref, ref$1) { + var children = ref.children; + var onChange = ref.onChange; + var url = ref$1.url; + var active = this.getMatchingChildren(x2(children), url, true); + var current = active[0] || null; + var previous = this.previousUrl; + if (url !== previous) { + this.previousUrl = url; + if (typeof onChange === "function") { + onChange({ + router: this, + url, + previous, + active, + current + }); + } + } + return current; }; -} -var readField = (object2, name) => { - return name.split(".").reduce((prev, current) => prev && prev[current], object2); -}; -var setValueDeeper = (object2, names2, value) => { - if (names2.length === 0) - return value; - const [head, ...rest] = names2; - return __spreadProps(__spreadValues({}, object2), { [head]: setValueDeeper(object2[head] || {}, rest, value) }); + return Router2; +}(d); +var Link = function(props) { + return h("a", assign({ onClick: handleLinkClick }, props)); }; - -// src/components/form/Input.tsx -var defaultToString = (f3) => f3 || ""; -var defaultFromString = (v3) => v3; -var TextInput = (_a) => { - var _b = _a, { inputType, error: error2 } = _b, rest = __objRest(_b, ["inputType", "error"]); - return inputType === "multiline" ? /* @__PURE__ */ h( - "textarea", - __spreadProps(__spreadValues({}, rest), { - class: error2 ? "textarea is-danger" : "textarea", - rows: "3" - }) - ) : /* @__PURE__ */ h( - "input", - __spreadProps(__spreadValues({}, rest), { - class: error2 ? "input is-danger" : "input", - type: inputType - }) - ); +var Route = function(props) { + return h(props.component, props); }; -function Input({ - name, - readonly, - placeholder, - tooltip, - label, - expand, - help, - children, - inputType, - inputExtra, - side, - fromStr = defaultFromString, - toStr = defaultToString -}) { - const { error: error2, value, onChange, required } = 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" - }, - /* @__PURE__ */ h( - TextInput, - __spreadProps(__spreadValues({ - error: error2 - }, inputExtra), { - inputType, - placeholder, - readonly, - disabled: readonly, - name: String(name), - value: toStr(value), - onChange: (e4) => onChange(fromStr(e4.currentTarget.value)) - }) - ), - help, - children, - required && /* @__PURE__ */ h("span", { class: "icon has-text-danger is-right" }, /* @__PURE__ */ h("i", { class: "mdi mdi-alert" })) - ), error2 && /* @__PURE__ */ h("p", { class: "help is-danger" }, error2)), side)); -} - -// src/components/modal/index.tsx -function ConfirmModal({ - active, - description, - onCancel, - onConfirm, - children, - danger, - disabled, - label = "Confirm" -}) { - const { i18n: i18n2 } = useTranslationContext(); - return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card", style: { maxWidth: 700 } }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h("b", null, description)), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, onConfirm ? /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")), /* @__PURE__ */ h( - "button", - { - class: danger ? "button is-danger " : "button is-info ", - disabled, - onClick: onConfirm - }, - /* @__PURE__ */ h(i18n2.Translate, null, label) - )) : /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Close"))))), /* @__PURE__ */ h( - "button", - { - class: "modal-close is-large ", - "aria-label": "close", - onClick: onCancel - } - )); -} -function ContinueModal({ - active, - description, - onCancel, - onConfirm, - children, - disabled -}) { - const { i18n: i18n2 } = useTranslationContext(); - return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("header", { class: "modal-card-head has-background-success" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, description), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, /* @__PURE__ */ h( - "button", - { - class: "button is-success ", - disabled, - onClick: onConfirm - }, - /* @__PURE__ */ h(i18n2.Translate, null, "Continue") - )))), /* @__PURE__ */ h( - "button", - { - class: "modal-close is-large ", - "aria-label": "close", - onClick: onCancel - } - )); -} -function SimpleModal({ onCancel, children }) { - return /* @__PURE__ */ h("div", { class: "modal is-active" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("section", { class: "modal-card-body is-main-section" }, children)), /* @__PURE__ */ h( - "button", - { - class: "modal-close is-large ", - "aria-label": "close", - onClick: onCancel - } - )); -} -function DeleteModal({ - element, - onCancel, - onConfirm -}) { - return /* @__PURE__ */ h( - ConfirmModal, - { - label: `Delete instance`, - description: `Delete the instance "${element.name}"`, - danger: true, - active: true, - onCancel, - onConfirm: () => onConfirm(element.id) - }, - /* @__PURE__ */ h("p", null, "If you delete the instance named ", /* @__PURE__ */ h("b", null, '"', element.name, '"'), " (ID:", " ", /* @__PURE__ */ h("b", null, element.id), "), the merchant will no longer be able to process orders or refunds"), - /* @__PURE__ */ h("p", null, "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance."), - /* @__PURE__ */ h("p", { class: "warning" }, "Deleting an instance ", /* @__PURE__ */ h("b", null, "cannot be undone"), ".") - ); -} -function PurgeModal({ - element, - onCancel, - onConfirm -}) { - return /* @__PURE__ */ h( - ConfirmModal, - { - label: `Purge the instance`, - description: `Purge the instance "${element.name}"`, - danger: true, - active: true, - onCancel, - onConfirm: () => onConfirm(element.id) - }, - /* @__PURE__ */ h("p", null, "If you purge the instance named ", /* @__PURE__ */ h("b", null, '"', element.name, '"'), " (ID:", " ", /* @__PURE__ */ h("b", null, element.id), "), you will also delete all it's transaction data."), - /* @__PURE__ */ h("p", null, "The instance will disappear from your list, and you will no longer be able to access it's data."), - /* @__PURE__ */ h("p", { class: "warning" }, "Purging an instance ", /* @__PURE__ */ h("b", null, "cannot be undone"), ".") - ); -} -function LoadingModal({ onCancel }) { - const { i18n: i18n2 } = useTranslationContext(); - return /* @__PURE__ */ h("div", { class: "modal is-active" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h(i18n2.Translate, null, "Operation in progress..."))), /* @__PURE__ */ h("section", { class: "modal-card-body" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h(Spinner, null), /* @__PURE__ */ h("div", { class: "column" })), /* @__PURE__ */ h("p", null, i18n2.str`The operation will be automatically canceled after ${DEFAULT_REQUEST_TIMEOUT} seconds`)), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel"))))), /* @__PURE__ */ h( - "button", - { - class: "modal-close is-large ", - "aria-label": "close", - onClick: onCancel - } - )); -} +Router.subscribers = subscribers; +Router.getCurrentUrl = getCurrentUrl; +Router.route = route; +Router.Router = Router; +Router.Route = Route; +Router.Link = Link; +Router.exec = exec; -// src/hooks/async.ts +// src/ApplicationReadyRoutes.tsx init_hooks_module(); -function useAsync(fn2, { slowTolerance: tooLong } = { slowTolerance: 1e3 }) { - const [data, setData] = p3(void 0); - const [isLoading, setLoading] = p3(false); - const [error2, setError] = p3(void 0); - const [isSlow, setSlow] = p3(false); - const request = (...args) => __async(this, null, function* () { - if (!fn2) - return; - setLoading(true); - const handler = setTimeout(() => { - setSlow(true); - }, tooLong); - try { - const result = yield fn2(...args); - setData(result); - } catch (error3) { - setError(error3); - } - setLoading(false); - setSlow(false); - clearTimeout(handler); - }); - function cancel() { - setLoading(false); - setSlow(false); - } - return { - request, - cancel, - data, - isSlow, - isLoading, - error: error2 - }; -} - -// src/components/exception/AsyncButton.tsx -function AsyncButton(_a) { - var _b = _a, { onClick, disabled, children } = _b, rest = __objRest(_b, ["onClick", "disabled", "children"]); - const { isSlow, isLoading, request, cancel } = useAsync(onClick); - const { i18n: i18n2 } = useTranslationContext(); - if (isSlow) { - return /* @__PURE__ */ h(LoadingModal, { onCancel: cancel }); - } - if (isLoading) { - return /* @__PURE__ */ h("button", { class: "button" }, /* @__PURE__ */ h(i18n2.Translate, null, "Loading...")); - } - return /* @__PURE__ */ h("span", __spreadValues({}, rest), /* @__PURE__ */ h("button", { class: "button is-success", onClick: request, disabled }, children)); -} - -// src/components/instance/DefaultInstanceFormFields.tsx -init_preact_module(); // ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/toInteger/index.js function toInteger(dirtyNumber) { @@ -19156,7 +17271,7 @@ var formatters = { return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); }, // Month - M: function M4(date2, token) { + M: function M3(date2, token) { var month = date2.getUTCMonth(); return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); }, @@ -19185,7 +17300,7 @@ var formatters = { return addLeadingZeros(date2.getUTCHours() % 12 || 12, token.length); }, // Hour [0-23] - H: function H3(date2, token) { + H: function H2(date2, token) { return addLeadingZeros(date2.getUTCHours(), token.length); }, // Minute @@ -19219,7 +17334,7 @@ var dayPeriodEnum = { }; var formatters2 = { // Era - G: function G2(date2, token, localize2) { + G: function G(date2, token, localize2) { var era = date2.getUTCFullYear() > 0 ? 1 : 0; switch (token) { case "G": @@ -19251,7 +17366,7 @@ var formatters2 = { return lightFormatters_default.y(date2, token); }, // Local week-numbering year - Y: function Y3(date2, token, localize2, options) { + Y: function Y2(date2, token, localize2, options) { var signedWeekYear = getUTCWeekYear(date2, options); var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; if (token === "YY") { @@ -19266,7 +17381,7 @@ var formatters2 = { return addLeadingZeros(weekYear, token.length); }, // ISO week-numbering year - R: function R2(date2, token) { + R: function R(date2, token) { var isoWeekYear = getUTCISOWeekYear(date2); return addLeadingZeros(isoWeekYear, token.length); }, @@ -19284,7 +17399,7 @@ var formatters2 = { return addLeadingZeros(year, token.length); }, // Quarter - Q: function Q2(date2, token, localize2) { + Q: function Q(date2, token, localize2) { var quarter = Math.ceil((date2.getUTCMonth() + 1) / 3); switch (token) { case "Q": @@ -19314,7 +17429,7 @@ var formatters2 = { } }, // Stand-alone quarter - q: function q4(date2, token, localize2) { + q: function q3(date2, token, localize2) { var quarter = Math.ceil((date2.getUTCMonth() + 1) / 3); switch (token) { case "q": @@ -19344,7 +17459,7 @@ var formatters2 = { } }, // Month - M: function M5(date2, token, localize2) { + M: function M4(date2, token, localize2) { var month = date2.getUTCMonth(); switch (token) { case "M": @@ -19373,7 +17488,7 @@ var formatters2 = { } }, // Stand-alone month - L: function L4(date2, token, localize2) { + L: function L3(date2, token, localize2) { var month = date2.getUTCMonth(); switch (token) { case "L": @@ -19403,7 +17518,7 @@ var formatters2 = { } }, // Local week of year - w: function w4(date2, token, localize2, options) { + w: function w3(date2, token, localize2, options) { var week = getUTCWeek(date2, options); if (token === "wo") { return localize2.ordinalNumber(week, { @@ -19413,7 +17528,7 @@ var formatters2 = { return addLeadingZeros(week, token.length); }, // ISO week of year - I: function I4(date2, token, localize2) { + I: function I3(date2, token, localize2) { var isoWeek = getUTCISOWeek(date2); if (token === "Io") { return localize2.ordinalNumber(isoWeek, { @@ -19432,7 +17547,7 @@ var formatters2 = { return lightFormatters_default.d(date2, token); }, // Day of year - D: function D4(date2, token, localize2) { + D: function D3(date2, token, localize2) { var dayOfYear = getUTCDayOfYear(date2); if (token === "Do") { return localize2.ordinalNumber(dayOfYear, { @@ -19442,7 +17557,7 @@ var formatters2 = { return addLeadingZeros(dayOfYear, token.length); }, // Day of week - E: function E2(date2, token, localize2) { + E: function E(date2, token, localize2) { var dayOfWeek = date2.getUTCDay(); switch (token) { case "E": @@ -19644,7 +17759,7 @@ var formatters2 = { } }, // in the morning, in the afternoon, in the evening, at night - B: function B4(date2, token, localize2) { + B: function B3(date2, token, localize2) { var hours = date2.getUTCHours(); var dayPeriodEnumValue; if (hours >= 17) { @@ -19690,7 +17805,7 @@ var formatters2 = { return lightFormatters_default.h(date2, token); }, // Hour [0-23] - H: function H4(date2, token, localize2) { + H: function H3(date2, token, localize2) { if (token === "Ho") { return localize2.ordinalNumber(date2.getUTCHours(), { unit: "hour" @@ -19699,7 +17814,7 @@ var formatters2 = { return lightFormatters_default.H(date2, token); }, // Hour [0-11] - K: function K4(date2, token, localize2) { + K: function K3(date2, token, localize2) { var hours = date2.getUTCHours() % 12; if (token === "Ko") { return localize2.ordinalNumber(hours, { @@ -19709,7 +17824,7 @@ var formatters2 = { return addLeadingZeros(hours, token.length); }, // Hour [1-24] - k: function k4(date2, token, localize2) { + k: function k3(date2, token, localize2) { var hours = date2.getUTCHours(); if (hours === 0) hours = 24; @@ -19743,7 +17858,7 @@ var formatters2 = { return lightFormatters_default.S(date2, token); }, // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) - X: function X3(date2, token, _localize, options) { + X: function X2(date2, token, _localize, options) { var originalDate = options._originalDate || date2; var timezoneOffset = originalDate.getTimezoneOffset(); if (timezoneOffset === 0) { @@ -19762,7 +17877,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) { @@ -19778,7 +17893,7 @@ var formatters2 = { } }, // Timezone (GMT) - O: function O3(date2, token, _localize, options) { + O: function O2(date2, token, _localize, options) { var originalDate = options._originalDate || date2; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { @@ -19792,7 +17907,7 @@ var formatters2 = { } }, // Timezone (specific non-location) - z: function z4(date2, token, _localize, options) { + z: function z3(date2, token, _localize, options) { var originalDate = options._originalDate || date2; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { @@ -19812,7 +17927,7 @@ var formatters2 = { return addLeadingZeros(timestamp, token.length); }, // Milliseconds timestamp - T: function T4(date2, token, _localize, options) { + T: function T3(date2, token, _localize, options) { var originalDate = options._originalDate || date2; var timestamp = originalDate.getTime(); return addLeadingZeros(timestamp, token.length); @@ -20695,6 +18810,2025 @@ function isFuture(dirtyDate) { return toDate(dirtyDate).getTime() > Date.now(); } +// src/InstanceRoutes.tsx +init_preact_module(); +init_hooks_module(); + +// src/components/exception/loading.tsx +init_preact_module(); +function Loading() { + return /* @__PURE__ */ h( + "div", + { + class: "columns is-centered is-vcentered", + style: { + height: "calc(100% - 3rem)", + position: "absolute", + width: "100%" + } + }, + /* @__PURE__ */ h(Spinner, null) + ); +} +function Spinner() { + return /* @__PURE__ */ h("div", { class: "lds-ring" }, /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null), /* @__PURE__ */ h("div", null)); +} + +// src/components/menu/index.tsx +init_preact_module(); +init_hooks_module(); + +// src/AdminRoutes.tsx +init_preact_module(); + +// src/paths/admin/create/index.tsx +init_preact_module(); +init_hooks_module(); + +// src/context/backend.ts +init_preact_module(); +init_hooks_module(); + +// src/hooks/index.ts +init_hooks_module(); + +// src/hooks/backend.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); + +// ../../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 = (a5, b4) => __spreadValues(__spreadValues({}, a5), b4); +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]) + ","; + } + 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 +}; +function internalMutate(...args) { + return __async(this, null, function* () { + 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); + function mutateByKey(_k) { + return __async(this, null, function* () { + const [key] = serialize(_k); + if (!key) + return; + const [get, set2] = 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; + set2({ + data: optimisticData, + _c: committedData + }); + } + if (isFunction(data)) { + try { + data = data(committedData); + } catch (err) { + error2 = err; + } + } + if (data && isPromiseLike(data)) { + data = yield data.catch((err) => { + error2 = err; + }); + if (beforeMutationTs !== MUTATION[key][0]) { + if (error2) + throw error2; + return data; + } else if (error2 && hasOptimisticData && rollbackOnError(error2)) { + populateCache = true; + set2({ + data: committedData, + _c: UNDEFINED + }); + } + } + if (populateCache) { + if (!error2) { + if (isFunction(populateCache)) { + const populateCachedData = populateCache(data, committedData); + set2({ + data: populateCachedData, + error: UNDEFINED, + _c: UNDEFINED + }); + } else { + set2({ + data, + error: UNDEFINED, + _c: UNDEFINED + }); + } + } + } + MUTATION[key][1] = getTimestamp(); + Promise.resolve(startRevalidate()).then(() => { + set2({ + _c: UNDEFINED + }); + }); + if (error2) { + if (throwOnError) + throw error2; + return; + } + return data; + }); + } + }); +} +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 (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 + ]; + } + 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 = (a5, b4) => { + const v3 = mergeObjects(a5, b4); + if (b4) { + const { use: u1, fallback: f1 } = a5; + const { use: u22, fallback: f22 } = b4; + 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 i4 = middleware2.length; i4--; ) { + next = middleware2[i4](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.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; + }, (e4) => { + promise.status = "rejected"; + promise.reason = e4; + }); + 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 t4 = _3; + if (t4 === "data") { + if (!compare2(prev[t4], current[t4])) { + if (!isUndefined(prev[t4])) { + return false; + } + if (!compare2(returnedData, current[t4])) { + return false; + } + } + } else { + if (current[t4] !== prev[t4]) { + 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 __spreadValues({ + 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( + (revalidateOpts) => __async(void 0, null, function* () { + 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 = yield 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 now2 = Date.now(); + if (getConfig().revalidateOnFocus && now2 > nextFocusRevalidatedAt && isActive()) { + nextFocusRevalidatedAt = now2 + 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 timer; + function next() { + const interval = isFunction(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval; + if (interval && timer !== -1) { + timer = setTimeout(execute, interval); + } + } + function execute() { + if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) { + revalidate(WITH_DEDUPE).then(next); + } else { + next(); + } + } + next(); + return () => { + if (timer) { + clearTimeout(timer); + timer = -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; + 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/context/instance.ts +init_preact_module(); +init_hooks_module(); +var Context3 = B({}); +var InstanceContextProvider = Context3.Provider; +var useInstanceContext = () => q2(Context3); + +// src/hooks/backend.ts +function useMatchMutate() { + const { cache: cache2, mutate: mutate2 } = useSWRConfig(); + if (!(cache2 instanceof Map)) { + throw new Error( + "matchMutate requires the cache provider to be a Map instance" + ); + } + return function matchRegexMutate(re) { + return mutate2((key) => { + if (!key || !re) + return true; + if (typeof key === "string" && re.test(key)) + return true; + if (typeof key === "object" && re.test(key[0])) + return true; + return false; + }, void 0, { + revalidate: true + }); + }; +} +function useBackendInstancesTestForAdmin() { + const { request } = useBackendBaseRequest(); + const [result, setResult] = p3({ loading: true }); + h2(() => { + request(`/management/instances`).then((data) => setResult(data)).catch( + (error2) => setResult(error2.cause) + ); + }, [request]); + return result; +} +var CHECK_CONFIG_INTERVAL_OK = 5 * 60 * 1e3; +var CHECK_CONFIG_INTERVAL_FAIL = 2 * 1e3; +function useBackendConfig() { + const { request } = useBackendBaseRequest(); + const [result, setResult] = p3({ data: { loading: true }, timer: 0 }); + h2(() => { + if (result.timer) { + clearTimeout(result.timer); + } + function tryConfig() { + request(`/config`).then((data) => { + const timer = setTimeout(() => { + tryConfig(); + }, CHECK_CONFIG_INTERVAL_OK); + setResult({ data, timer }); + }).catch((error2) => { + const timer = setTimeout(() => { + tryConfig(); + }, CHECK_CONFIG_INTERVAL_FAIL); + const data = error2.cause; + setResult({ data, timer }); + }); + } + tryConfig(); + }, [request]); + return result.data; +} +function useCredentialsChecker() { + const { request } = useApiContext(); + function requestNewLoginToken(baseUrl, token) { + return __async(this, null, function* () { + const data = { + scope: "write", + duration: { + d_us: "forever" + }, + refreshable: true + }; + try { + const response = yield request(baseUrl, `/private/token`, { + method: "POST", + token, + data + }); + return { valid: true, token: response.data.token, expiration: response.data.expiration }; + } catch (error2) { + if (error2 instanceof RequestError) { + return { valid: false, cause: error2.cause }; + } + return { + valid: false, + cause: { + type: ErrorType.UNEXPECTED, + loading: false, + info: { + hasToken: true, + status: 0, + options: {}, + url: `/private/token`, + payload: {} + }, + exception: error2, + message: error2 instanceof Error ? error2.message : "unpexepected error" + } + }; + } + }); + } + ; + function refreshLoginToken(baseUrl, token) { + return __async(this, null, function* () { + if (AbsoluteTime.isExpired(AbsoluteTime.fromProtocolTimestamp(token.expiration))) { + return { + valid: false, + cause: { + type: ErrorType.CLIENT, + status: HttpStatusCode.Unauthorized, + message: "login token expired, login again.", + info: { + hasToken: true, + status: 401, + options: {}, + url: `/private/token`, + payload: {} + }, + payload: {} + } + }; + } + return requestNewLoginToken(baseUrl, token.token); + }); + } + return { requestNewLoginToken, refreshLoginToken }; +} +function useBackendBaseRequest() { + const { url: backend, token: loginToken } = useBackendContext(); + const { request: requestHandler } = useApiContext(); + const token = loginToken == null ? void 0 : loginToken.token; + const request = T2( + function requestImpl(endpoint, options = {}) { + return requestHandler(backend, endpoint, __spreadValues({ token }, options)).then((res) => { + return res; + }).catch((err) => { + throw err; + }); + }, + [backend, token] + ); + return { request }; +} +function useBackendInstanceRequest() { + const { url: rootBackendUrl, token: rootToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + const { request: requestHandler } = useApiContext(); + const { baseUrl, token: loginToken } = !admin ? { baseUrl: rootBackendUrl, token: rootToken } : { baseUrl: `${rootBackendUrl}/instances/${id}`, token: instanceToken }; + const token = loginToken == null ? void 0 : loginToken.token; + const request = T2( + function requestImpl(endpoint, options = {}) { + return requestHandler(baseUrl, endpoint, __spreadValues({ token }, options)); + }, + [baseUrl, token] + ); + const multiFetcher = T2( + function multiFetcherImpl(args) { + const [endpoints] = args; + return Promise.all( + endpoints.map( + (endpoint) => requestHandler(baseUrl, endpoint, { token }) + ) + ); + }, + [baseUrl, token] + ); + const fetcher = T2( + function fetcherImpl(endpoint) { + return requestHandler(baseUrl, endpoint, { token }); + }, + [baseUrl, token] + ); + const orderFetcher = T2( + function orderFetcherImpl(args) { + const [endpoint, paid, refunded, wired, searchDate, delta] = args; + const date_s = delta && delta < 0 && searchDate ? searchDate.getTime() / 1e3 + 1 : searchDate !== void 0 ? searchDate.getTime() / 1e3 : void 0; + const params = {}; + if (paid !== void 0) + params.paid = paid; + if (delta !== void 0) + params.delta = delta; + if (refunded !== void 0) + params.refunded = refunded; + if (wired !== void 0) + params.wired = wired; + if (date_s !== void 0) + params.date_s = date_s; + return requestHandler(baseUrl, endpoint, { params, token }); + }, + [baseUrl, token] + ); + const reserveDetailFetcher = T2( + function reserveDetailFetcherImpl(endpoint) { + return requestHandler(baseUrl, endpoint, { + params: { + rewards: "yes" + }, + token + }); + }, + [baseUrl, token] + ); + const rewardsDetailFetcher = T2( + function rewardsDetailFetcherImpl(endpoint) { + return requestHandler(baseUrl, endpoint, { + params: { + pickups: "yes" + }, + token + }); + }, + [baseUrl, token] + ); + const transferFetcher = T2( + function transferFetcherImpl(args) { + const [endpoint, payto_uri, verified, position, delta] = args; + const params = {}; + if (payto_uri !== void 0) + params.payto_uri = payto_uri; + if (verified !== void 0) + params.verified = verified; + if (delta !== void 0) { + params.limit = delta; + } + if (position !== void 0) + params.offset = position; + return requestHandler(baseUrl, endpoint, { params, token }); + }, + [baseUrl, token] + ); + const templateFetcher = T2( + function templateFetcherImpl(args) { + const [endpoint, position, delta] = args; + const params = {}; + if (delta !== void 0) { + params.limit = delta; + } + if (position !== void 0) + params.offset = position; + return requestHandler(baseUrl, endpoint, { params, token }); + }, + [baseUrl, token] + ); + const webhookFetcher = T2( + function webhookFetcherImpl(args) { + const [endpoint, position, delta] = args; + const params = {}; + if (delta !== void 0) { + params.limit = delta; + } + if (position !== void 0) + params.offset = position; + return requestHandler(baseUrl, endpoint, { params, token }); + }, + [baseUrl, token] + ); + return { + request, + fetcher, + multiFetcher, + orderFetcher, + reserveDetailFetcher, + rewardsDetailFetcher, + transferFetcher, + templateFetcher, + webhookFetcher + }; +} + +// src/hooks/index.ts +var calculateRootPath = () => { + const rootPath = typeof window !== void 0 ? window.location.origin + window.location.pathname : "/"; + return rootPath; +}; +var loginTokenCodec = buildCodecForObject().property("token", codecForString()).property("expiration", codecForTimestamp).build("loginToken"); +var TOKENS_KEY = buildStorageKey("backend-token", codecForMap(loginTokenCodec)); +function useBackendURL(url) { + const [value, setter] = useSimpleLocalStorage( + "backend-url", + url || calculateRootPath() + ); + const checkedSetter = (v3) => { + return setter((p4) => (v3 instanceof Function ? v3(p4 != null ? p4 : "") : v3).replace(/\/$/, "")); + }; + return [value, checkedSetter]; +} +function useBackendDefaultToken() { + const { update: setToken, value: tokenMap, reset } = useLocalStorage(TOKENS_KEY, {}); + const tokenOfDefaultInstance = tokenMap["default"]; + const clearCache = useMatchMutate(); + h2(() => { + clearCache(); + }, [tokenOfDefaultInstance]); + function updateToken(value) { + if (value === void 0) { + reset(); + } else { + const res = __spreadProps(__spreadValues({}, tokenMap), { "default": value }); + setToken(res); + } + } + return [tokenMap["default"], updateToken]; +} +function useBackendInstanceToken(id) { + const { update: setToken, value: tokenMap, reset } = useLocalStorage(TOKENS_KEY, {}); + const [defaultToken, defaultSetToken] = useBackendDefaultToken(); + if (id === "default") { + return [defaultToken, defaultSetToken]; + } + function updateToken(value) { + if (value === void 0) { + reset(); + } else { + const res = __spreadProps(__spreadValues({}, tokenMap), { [id]: value }); + setToken(res); + } + } + return [tokenMap[id], updateToken]; +} +function useSimpleLocalStorage(key, initialValue) { + const [storedValue, setStoredValue] = p3( + () => { + return typeof window !== "undefined" ? window.localStorage.getItem(key) || initialValue : initialValue; + } + ); + const setValue = (value) => { + setStoredValue((p4) => { + const toStore = value instanceof Function ? value(p4) : value; + if (typeof window !== "undefined") { + if (!toStore) { + window.localStorage.removeItem(key); + } else { + window.localStorage.setItem(key, toStore); + } + } + return toStore; + }); + }; + return [storedValue, setValue]; +} + +// src/context/backend.ts +var BackendContext = B({ + url: "", + token: void 0, + updateToken: () => null, + changeBackend: () => null +}); +function useBackendContextState(defaultUrl) { + const [url, changeBackend] = useBackendURL(defaultUrl); + const [token, updateToken] = useBackendDefaultToken(); + return { + url, + token, + updateToken, + changeBackend + }; +} +var BackendContextProvider = ({ + children, + defaultUrl +}) => { + const value = useBackendContextState(defaultUrl); + return h(BackendContext.Provider, { value, children }); +}; +var useBackendContext = () => q2(BackendContext); + +// src/hooks/instance.ts +var useSWR2 = useSWR; +function useAdminAPI() { + const { request } = useBackendBaseRequest(); + const mutateAll = useMatchMutate(); + const createInstance = (instance) => __async(this, null, function* () { + yield request(`/management/instances`, { + method: "POST", + data: instance + }); + mutateAll(/\/management\/instances/); + }); + const deleteInstance = (id) => __async(this, null, function* () { + yield request(`/management/instances/${id}`, { + method: "DELETE" + }); + mutateAll(/\/management\/instances/); + }); + const purgeInstance = (id) => __async(this, null, function* () { + yield request(`/management/instances/${id}`, { + method: "DELETE", + params: { + purge: "YES" + } + }); + mutateAll(/\/management\/instances/); + }); + return { createInstance, deleteInstance, purgeInstance }; +} +function useManagementAPI(instanceId) { + const mutateAll = useMatchMutate(); + const { url: backendURL } = useBackendContext(); + const { updateToken } = useBackendContext(); + const { request } = useBackendBaseRequest(); + const { requestNewLoginToken } = useCredentialsChecker(); + const updateInstance = (instance) => __async(this, null, function* () { + yield request(`/management/instances/${instanceId}`, { + method: "PATCH", + data: instance + }); + mutateAll(/\/management\/instances/); + }); + const deleteInstance = () => __async(this, null, function* () { + yield request(`/management/instances/${instanceId}`, { + method: "DELETE" + }); + mutateAll(/\/management\/instances/); + }); + const clearToken = () => __async(this, null, function* () { + yield request(`/management/instances/${instanceId}/auth`, { + method: "POST", + data: { method: "external" } + }); + mutateAll(/\/management\/instances/); + }); + const setNewToken = (newToken) => __async(this, null, function* () { + yield request(`/management/instances/${instanceId}/auth`, { + method: "POST", + data: { method: "token", token: newToken } + }); + const resp = yield requestNewLoginToken(backendURL, newToken); + if (resp.valid) { + const { token, expiration } = resp; + updateToken({ token, expiration }); + } else { + updateToken(void 0); + } + mutateAll(/\/management\/instances/); + }); + return { updateInstance, deleteInstance, setNewToken, clearToken }; +} +function useInstanceAPI() { + const { mutate: mutate2 } = useSWRConfig(); + const { url: backendURL, updateToken } = useBackendContext(); + const { + token: adminToken + } = useBackendContext(); + const { request } = useBackendInstanceRequest(); + const { requestNewLoginToken } = useCredentialsChecker(); + const updateInstance = (instance) => __async(this, null, function* () { + yield request(`/private/`, { + method: "PATCH", + data: instance + }); + if (adminToken) + mutate2(["/private/instances", adminToken, backendURL], null); + mutate2([`/private/`], null); + }); + const deleteInstance = () => __async(this, null, function* () { + yield request(`/private/`, { + method: "DELETE" + // token: adminToken, + }); + if (adminToken) + mutate2(["/private/instances", adminToken, backendURL], null); + mutate2([`/private/`], null); + }); + const clearToken = () => __async(this, null, function* () { + yield request(`/private/auth`, { + method: "POST", + data: { method: "external" } + }); + mutate2([`/private/`], null); + }); + const setNewToken = (newToken) => __async(this, null, function* () { + yield request(`/private/auth`, { + method: "POST", + data: { method: "token", token: newToken } + }); + const resp = yield requestNewLoginToken(backendURL, newToken); + if (resp.valid) { + const { token, expiration } = resp; + updateToken({ token, expiration }); + } else { + updateToken(void 0); + } + mutate2([`/private/`], null); + }); + return { updateInstance, deleteInstance, setNewToken, clearToken }; +} +function useInstanceDetails() { + const { fetcher } = useBackendInstanceRequest(); + const { data, error: error2, isValidating } = useSWR2([`/private/`], fetcher, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + revalidateIfStale: false, + errorRetryCount: 0, + errorRetryInterval: 1, + shouldRetryOnError: false + }); + if (isValidating) + return { loading: true, data: data == null ? void 0 : data.data }; + if (data) + return data; + if (error2) + return error2.cause; + return { loading: true }; +} +function useInstanceKYCDetails() { + var _a; + const { fetcher } = useBackendInstanceRequest(); + const { data, error: error2 } = useSWR2([`/private/kyc`], fetcher, { + refreshInterval: 60 * 1e3, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateIfStale: false, + revalidateOnMount: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + errorRetryCount: 0, + errorRetryInterval: 1, + shouldRetryOnError: false + }); + if (data) { + if (((_a = data.info) == null ? void 0 : _a.status) === 202) + return { ok: true, data: { type: "redirect", status: data.data } }; + return { ok: true, data: { type: "ok" } }; + } + if (error2) + return error2.cause; + return { loading: true }; +} +function useManagedInstanceDetails(instanceId) { + const { request } = useBackendBaseRequest(); + const { data, error: error2, isValidating } = useSWR2([`/management/instances/${instanceId}`], request, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + errorRetryCount: 0, + errorRetryInterval: 1, + shouldRetryOnError: false + }); + if (isValidating) + return { loading: true, data: data == null ? void 0 : data.data }; + if (data) + return data; + if (error2) + return error2.cause; + return { loading: true }; +} +function useBackendInstances() { + const { request } = useBackendBaseRequest(); + const { data, error: error2, isValidating } = useSWR2(["/management/instances"], request); + if (isValidating) + return { loading: true, data: data == null ? void 0 : data.data }; + if (data) + return data; + if (error2) + return error2.cause; + return { loading: true }; +} + +// src/paths/admin/create/CreatePage.tsx +init_preact_module(); +init_hooks_module(); + +// src/components/exception/AsyncButton.tsx +init_preact_module(); + +// src/components/modal/index.tsx +init_preact_module(); +init_hooks_module(); + +// src/utils/constants.ts +var PAYTO_REGEX = /^payto:\/\/[a-zA-Z][a-zA-Z0-9-.]+(\/[a-zA-Z0-9\-\.\~\(\)@_%:!$&'*+,;=]*)*\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\-\.\~\(\)@_%:!$'*+,;=]*&?)*$/; +var PAYTO_WIRE_METHOD_LOOKUP = /payto:\/\/([a-zA-Z][a-zA-Z0-9-.]+)\/.*/; +var AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\.?[0-9,]*$/; +var INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/; +var CROCKFORD_BASE32_REGEX = /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/; +var URL_REGEX = /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)\/$/; +var PAGE_SIZE = 20; +var MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1; +var DEFAULT_REQUEST_TIMEOUT = 10; +var MAX_IMAGE_SIZE = 1024 * 1024; +var INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/; +var COUNTRY_TABLE = { + AE: "U.A.E.", + AF: "Afghanistan", + AL: "Albania", + AM: "Armenia", + AN: "Netherlands Antilles", + AR: "Argentina", + AT: "Austria", + AU: "Australia", + AZ: "Azerbaijan", + BA: "Bosnia and Herzegovina", + BD: "Bangladesh", + BE: "Belgium", + BG: "Bulgaria", + BH: "Bahrain", + BN: "Brunei Darussalam", + BO: "Bolivia", + BR: "Brazil", + BT: "Bhutan", + BY: "Belarus", + BZ: "Belize", + CA: "Canada", + CG: "Congo", + CH: "Switzerland", + CI: "Cote d'Ivoire", + CL: "Chile", + CM: "Cameroon", + CN: "People's Republic of China", + CO: "Colombia", + CR: "Costa Rica", + CS: "Serbia and Montenegro", + CZ: "Czech Republic", + DE: "Germany", + DK: "Denmark", + DO: "Dominican Republic", + DZ: "Algeria", + EC: "Ecuador", + EE: "Estonia", + EG: "Egypt", + ER: "Eritrea", + ES: "Spain", + ET: "Ethiopia", + FI: "Finland", + FO: "Faroe Islands", + FR: "France", + GB: "United Kingdom", + GD: "Caribbean", + GE: "Georgia", + GL: "Greenland", + GR: "Greece", + GT: "Guatemala", + HK: "Hong Kong", + // HK: "Hong Kong S.A.R.", + HN: "Honduras", + HR: "Croatia", + HT: "Haiti", + HU: "Hungary", + ID: "Indonesia", + IE: "Ireland", + IL: "Israel", + IN: "India", + IQ: "Iraq", + IR: "Iran", + IS: "Iceland", + IT: "Italy", + JM: "Jamaica", + JO: "Jordan", + JP: "Japan", + KE: "Kenya", + KG: "Kyrgyzstan", + KH: "Cambodia", + KR: "South Korea", + KW: "Kuwait", + KZ: "Kazakhstan", + LA: "Laos", + LB: "Lebanon", + LI: "Liechtenstein", + LK: "Sri Lanka", + LT: "Lithuania", + LU: "Luxembourg", + LV: "Latvia", + LY: "Libya", + MA: "Morocco", + MC: "Principality of Monaco", + MD: "Moldava", + // MD: "Moldova", + ME: "Montenegro", + MK: "Former Yugoslav Republic of Macedonia", + ML: "Mali", + MM: "Myanmar", + MN: "Mongolia", + MO: "Macau S.A.R.", + MT: "Malta", + MV: "Maldives", + MX: "Mexico", + MY: "Malaysia", + NG: "Nigeria", + NI: "Nicaragua", + NL: "Netherlands", + NO: "Norway", + NP: "Nepal", + NZ: "New Zealand", + OM: "Oman", + PA: "Panama", + PE: "Peru", + PH: "Philippines", + PK: "Islamic Republic of Pakistan", + PL: "Poland", + PR: "Puerto Rico", + PT: "Portugal", + PY: "Paraguay", + QA: "Qatar", + RE: "Reunion", + RO: "Romania", + RS: "Serbia", + RU: "Russia", + RW: "Rwanda", + SA: "Saudi Arabia", + SE: "Sweden", + SG: "Singapore", + SI: "Slovenia", + SK: "Slovak", + SN: "Senegal", + SO: "Somalia", + SR: "Suriname", + SV: "El Salvador", + SY: "Syria", + TH: "Thailand", + TJ: "Tajikistan", + TM: "Turkmenistan", + TN: "Tunisia", + TR: "Turkey", + TT: "Trinidad and Tobago", + TW: "Taiwan", + TZ: "Tanzania", + UA: "Ukraine", + US: "United States", + UY: "Uruguay", + VA: "Vatican", + VE: "Venezuela", + VN: "Viet Nam", + YE: "Yemen", + ZA: "South Africa", + ZW: "Zimbabwe" +}; + +// src/components/form/FormProvider.tsx +init_preact_module(); +init_hooks_module(); +var noUpdater = () => (s5) => s5; +function FormProvider({ + object: object2 = {}, + errors: errors2 = {}, + name = "", + valueHandler, + children +}) { + const initialObject = F(() => object2, []); + const value = F( + () => ({ + errors: errors2, + object: object2, + initialObject, + valueHandler: valueHandler ? valueHandler : noUpdater, + name, + toStr: {}, + fromStr: {} + }), + [errors2, object2, valueHandler] + ); + return /* @__PURE__ */ h(FormContext.Provider, { value }, /* @__PURE__ */ h( + "form", + { + class: "field", + onSubmit: (e4) => { + e4.preventDefault(); + } + }, + children + )); +} +var FormContext = B(null); +function useFormContext() { + return q2(FormContext); +} + +// src/components/form/Input.tsx +init_preact_module(); + +// src/components/form/useField.tsx +init_hooks_module(); +function useField(name) { + const { errors: errors2, object: object2, initialObject, toStr, fromStr, valueHandler } = useFormContext(); + const [isDirty, setDirty] = p3(false); + const updateField = (field) => (value2) => { + setDirty(true); + return valueHandler((prev) => { + return setValueDeeper(prev, String(field).split("."), value2); + }); + }; + const defaultToString4 = (f3) => String(!f3 ? "" : f3); + const defaultFromString4 = (v3) => v3; + const value = readField(object2, String(name)); + const initial2 = readField(initialObject, String(name)); + const hasError = readField(errors2, String(name)); + return { + error: isDirty ? hasError : void 0, + required: !isDirty && hasError, + value, + initial: initial2, + onChange: updateField(name), + toStr: toStr[name] ? toStr[name] : defaultToString4, + fromStr: fromStr[name] ? fromStr[name] : defaultFromString4 + }; +} +var readField = (object2, name) => { + return name.split(".").reduce((prev, current) => prev && prev[current], object2); +}; +var setValueDeeper = (object2, names2, value) => { + if (names2.length === 0) + return value; + const [head, ...rest] = names2; + return __spreadProps(__spreadValues({}, object2), { [head]: setValueDeeper(object2[head] || {}, rest, value) }); +}; + +// src/components/form/Input.tsx +var defaultToString = (f3) => f3 || ""; +var defaultFromString = (v3) => v3; +var TextInput = (_a) => { + var _b = _a, { inputType, error: error2 } = _b, rest = __objRest(_b, ["inputType", "error"]); + return inputType === "multiline" ? /* @__PURE__ */ h( + "textarea", + __spreadProps(__spreadValues({}, rest), { + class: error2 ? "textarea is-danger" : "textarea", + rows: "3" + }) + ) : /* @__PURE__ */ h( + "input", + __spreadProps(__spreadValues({}, rest), { + class: error2 ? "input is-danger" : "input", + type: inputType + }) + ); +}; +function Input({ + name, + readonly, + placeholder, + tooltip, + label, + expand, + help, + children, + inputType, + inputExtra, + side, + fromStr = defaultFromString, + toStr = defaultToString +}) { + const { error: error2, value, onChange, required } = 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" + }, + /* @__PURE__ */ h( + TextInput, + __spreadProps(__spreadValues({ + error: error2 + }, inputExtra), { + inputType, + placeholder, + readonly, + disabled: readonly, + name: String(name), + value: toStr(value), + onChange: (e4) => onChange(fromStr(e4.currentTarget.value)) + }) + ), + help, + children, + required && /* @__PURE__ */ h("span", { class: "icon has-text-danger is-right" }, /* @__PURE__ */ h("i", { class: "mdi mdi-alert" })) + ), error2 && /* @__PURE__ */ h("p", { class: "help is-danger" }, error2)), side)); +} + +// src/components/modal/index.tsx +function ConfirmModal({ + active, + description, + onCancel, + onConfirm, + children, + danger, + disabled, + label = "Confirm" +}) { + const { i18n: i18n2 } = useTranslationContext(); + return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card", style: { maxWidth: 700 } }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h("b", null, description)), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, onConfirm ? /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")), /* @__PURE__ */ h( + "button", + { + class: danger ? "button is-danger " : "button is-info ", + disabled, + onClick: onConfirm + }, + /* @__PURE__ */ h(i18n2.Translate, null, label) + )) : /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Close"))))), /* @__PURE__ */ h( + "button", + { + class: "modal-close is-large ", + "aria-label": "close", + onClick: onCancel + } + )); +} +function ContinueModal({ + active, + description, + onCancel, + onConfirm, + children, + disabled +}) { + const { i18n: i18n2 } = useTranslationContext(); + return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("header", { class: "modal-card-head has-background-success" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, description), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, /* @__PURE__ */ h( + "button", + { + class: "button is-success ", + disabled, + onClick: onConfirm + }, + /* @__PURE__ */ h(i18n2.Translate, null, "Continue") + )))), /* @__PURE__ */ h( + "button", + { + class: "modal-close is-large ", + "aria-label": "close", + onClick: onCancel + } + )); +} +function SimpleModal({ onCancel, children }) { + return /* @__PURE__ */ h("div", { class: "modal is-active" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("section", { class: "modal-card-body is-main-section" }, children)), /* @__PURE__ */ h( + "button", + { + class: "modal-close is-large ", + "aria-label": "close", + onClick: onCancel + } + )); +} +function DeleteModal({ + element, + onCancel, + onConfirm +}) { + return /* @__PURE__ */ h( + ConfirmModal, + { + label: `Delete instance`, + description: `Delete the instance "${element.name}"`, + danger: true, + active: true, + onCancel, + onConfirm: () => onConfirm(element.id) + }, + /* @__PURE__ */ h("p", null, "If you delete the instance named ", /* @__PURE__ */ h("b", null, '"', element.name, '"'), " (ID:", " ", /* @__PURE__ */ h("b", null, element.id), "), the merchant will no longer be able to process orders or refunds"), + /* @__PURE__ */ h("p", null, "This action deletes the instance private key, but preserves all transaction data. You can still access that data after deleting the instance."), + /* @__PURE__ */ h("p", { class: "warning" }, "Deleting an instance ", /* @__PURE__ */ h("b", null, "cannot be undone"), ".") + ); +} +function PurgeModal({ + element, + onCancel, + onConfirm +}) { + return /* @__PURE__ */ h( + ConfirmModal, + { + label: `Purge the instance`, + description: `Purge the instance "${element.name}"`, + danger: true, + active: true, + onCancel, + onConfirm: () => onConfirm(element.id) + }, + /* @__PURE__ */ h("p", null, "If you purge the instance named ", /* @__PURE__ */ h("b", null, '"', element.name, '"'), " (ID:", " ", /* @__PURE__ */ h("b", null, element.id), "), you will also delete all it's transaction data."), + /* @__PURE__ */ h("p", null, "The instance will disappear from your list, and you will no longer be able to access it's data."), + /* @__PURE__ */ h("p", { class: "warning" }, "Purging an instance ", /* @__PURE__ */ h("b", null, "cannot be undone"), ".") + ); +} +function LoadingModal({ onCancel }) { + const { i18n: i18n2 } = useTranslationContext(); + return /* @__PURE__ */ h("div", { class: "modal is-active" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card" }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h(i18n2.Translate, null, "Operation in progress..."))), /* @__PURE__ */ h("section", { class: "modal-card-body" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h(Spinner, null), /* @__PURE__ */ h("div", { class: "column" })), /* @__PURE__ */ h("p", null, i18n2.str`The operation will be automatically canceled after ${DEFAULT_REQUEST_TIMEOUT} seconds`)), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel"))))), /* @__PURE__ */ h( + "button", + { + class: "modal-close is-large ", + "aria-label": "close", + onClick: onCancel + } + )); +} + +// src/hooks/async.ts +init_hooks_module(); +function useAsync(fn2, { slowTolerance: tooLong } = { slowTolerance: 1e3 }) { + const [data, setData] = p3(void 0); + const [isLoading, setLoading] = p3(false); + const [error2, setError] = p3(void 0); + const [isSlow, setSlow] = p3(false); + const request = (...args) => __async(this, null, function* () { + if (!fn2) + return; + setLoading(true); + const handler = setTimeout(() => { + setSlow(true); + }, tooLong); + try { + const result = yield fn2(...args); + setData(result); + } catch (error3) { + setError(error3); + } + setLoading(false); + setSlow(false); + clearTimeout(handler); + }); + function cancel() { + setLoading(false); + setSlow(false); + } + return { + request, + cancel, + data, + isSlow, + isLoading, + error: error2 + }; +} + +// src/components/exception/AsyncButton.tsx +function AsyncButton(_a) { + var _b = _a, { onClick, disabled, children } = _b, rest = __objRest(_b, ["onClick", "disabled", "children"]); + const { isSlow, isLoading, request, cancel } = useAsync(onClick); + const { i18n: i18n2 } = useTranslationContext(); + if (isSlow) { + return /* @__PURE__ */ h(LoadingModal, { onCancel: cancel }); + } + if (isLoading) { + return /* @__PURE__ */ h("button", { class: "button" }, /* @__PURE__ */ h(i18n2.Translate, null, "Loading...")); + } + return /* @__PURE__ */ h("span", __spreadValues({}, rest), /* @__PURE__ */ h("button", { class: "button is-success", onClick: request, disabled }, children)); +} + +// src/components/instance/DefaultInstanceFormFields.tsx +init_preact_module(); + // src/components/form/InputDuration.tsx init_preact_module(); init_hooks_module(); @@ -21184,12 +21318,12 @@ function DefaultInstanceFormFields({ showId }) { const { i18n: i18n2 } = useTranslationContext(); - const backend = useBackendContext(); + const { url: backendURL } = useBackendContext(); return /* @__PURE__ */ h(p2, null, showId && /* @__PURE__ */ h( InputWithAddon, { name: "id", - addonBefore: `${backend.url}/instances/`, + addonBefore: `${backendURL}/instances/`, 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.` @@ -21674,10 +21808,9982 @@ function Instances({ )); } -// src/InstanceRoutes.tsx +// src/components/menu/NavigationBar.tsx +init_preact_module(); + +// src/assets/logo-2021.svg +var logo_2021_default = "./logo-2021-VSZSJ4QZ.svg"; + +// src/components/menu/NavigationBar.tsx +function NavigationBar({ onMobileMenu, title }) { + return /* @__PURE__ */ h( + "nav", + { + class: "navbar is-fixed-top", + role: "navigation", + "aria-label": "main navigation" + }, + /* @__PURE__ */ h("div", { class: "navbar-brand" }, /* @__PURE__ */ h("span", { class: "navbar-item", style: { fontSize: 24, fontWeight: 900 } }, title), /* @__PURE__ */ h( + "a", + { + role: "button", + class: "navbar-burger", + "aria-label": "menu", + "aria-expanded": "false", + onClick: (e4) => { + onMobileMenu(); + e4.stopPropagation(); + } + }, + /* @__PURE__ */ h("span", { "aria-hidden": "true" }), + /* @__PURE__ */ h("span", { "aria-hidden": "true" }), + /* @__PURE__ */ h("span", { "aria-hidden": "true" }) + )), + /* @__PURE__ */ h("div", { class: "navbar-menu " }, /* @__PURE__ */ h( + "a", + { + class: "navbar-start is-justify-content-center is-flex-grow-1", + href: "https://taler.net" + }, + /* @__PURE__ */ h("img", { src: logo_2021_default, style: { height: 35, margin: 10 } }) + ), /* @__PURE__ */ h("div", { class: "navbar-end" }, /* @__PURE__ */ h("div", { class: "navbar-item", style: { paddingTop: 4, paddingBottom: 4 } }))) + ); +} + +// src/components/menu/SideBar.tsx +init_preact_module(); + +// src/context/config.ts +init_preact_module(); +init_hooks_module(); +var Context4 = B(null); +var ConfigContextProvider = Context4.Provider; +var useConfigContext = () => q2(Context4); + +// src/components/menu/LangSelector.tsx init_preact_module(); init_hooks_module(); +// src/assets/icons/languageicon.svg +var languageicon_default = "./languageicon-LWKRUH5D.svg"; + +// src/i18n/strings.ts +var strings = {}; +strings["de"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Cancel": [ + "" + ], + "%1$s": [ + "" + ], + "Close": [ + "" + ], + "Continue": [ + "" + ], + "Clear": [ + "" + ], + "Confirm": [ + "" + ], + "is not the same as the current access token": [ + "" + ], + "cannot be empty": [ + "" + ], + "cannot be the same as the old token": [ + "" + ], + "is not the same": [ + "" + ], + "You are updating the access token from instance with id %1$s": [ + "" + ], + "Old access token": [ + "" + ], + "access token currently in use": [ + "" + ], + "New access token": [ + "" + ], + "next access token to be used": [ + "" + ], + "Repeat access token": [ + "" + ], + "confirm the same access token": [ + "" + ], + "Clearing the access token will mean public access to the instance": [ + "" + ], + "cannot be the same as the old access token": [ + "" + ], + "You are setting the access token for the new instance": [ + "" + ], + "With external authorization method no check will be done by the merchant backend": [ + "" + ], + "Set external authorization": [ + "" + ], + "Set access token": [ + "" + ], + "Operation in progress...": [ + "" + ], + "The operation will be automatically canceled after %1$s seconds": [ + "" + ], + "Instances": [ + "" + ], + "Delete": [ + "" + ], + "add new instance": [ + "" + ], + "ID": [ + "" + ], + "Name": [ + "" + ], + "Edit": [ + "" + ], + "Purge": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Only show active instances": [ + "" + ], + "Active": [ + "" + ], + "Only show deleted instances": [ + "" + ], + "Deleted": [ + "" + ], + "Show all instances": [ + "" + ], + "All": [ + "" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "" + ], + "Failed to delete instance": [ + "" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "" + ], + "Failed to purge instance": [ + "" + ], + "Pending KYC verification": [ + "" + ], + "Timed out": [ + "" + ], + "Exchange": [ + "" + ], + "Target account": [ + "" + ], + "KYC URL": [ + "" + ], + "Code": [ + "" + ], + "Http Status": [ + "" + ], + "No pending kyc verification!": [ + "" + ], + "change value to unknown date": [ + "" + ], + "change value to empty": [ + "" + ], + "clear": [ + "" + ], + "change value to never": [ + "" + ], + "never": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Product": [ + "" + ], + "search products by it's description or id": [ + "" + ], + "no products found with that description": [ + "" + ], + "You must enter a valid product identifier.": [ + "" + ], + "Quantity must be greater than 0!": [ + "" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "" + ], + "Quantity": [ + "" + ], + "how many products will be added": [ + "" + ], + "Add from inventory": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Add": [ + "" + ], + "Remove": [ + "" + ], + "No taxes configured for this product.": [ + "" + ], + "Amount": [ + "" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "" + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "" + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "" + ], + "add tax to the tax list": [ + "" + ], + "describe and add a product that is not in the inventory list": [ + "" + ], + "Add custom product": [ + "" + ], + "Complete information of the product": [ + "" + ], + "Image": [ + "" + ], + "photo of the product": [ + "" + ], + "full product description": [ + "" + ], + "Unit": [ + "" + ], + "name of the product unit": [ + "" + ], + "Price": [ + "" + ], + "amount in the current currency": [ + "" + ], + "Taxes": [ + "" + ], + "image": [ + "" + ], + "description": [ + "" + ], + "quantity": [ + "" + ], + "unit price": [ + "" + ], + "total price": [ + "" + ], + "required": [ + "" + ], + "not valid": [ + "" + ], + "must be greater than 0": [ + "" + ], + "not a valid json": [ + "" + ], + "should be in the future": [ + "" + ], + "refund deadline cannot be before pay deadline": [ + "" + ], + "wire transfer deadline cannot be before refund deadline": [ + "" + ], + "wire transfer deadline cannot be before pay deadline": [ + "" + ], + "should have a refund deadline": [ + "" + ], + "auto refund cannot be after refund deadline": [ + "" + ], + "Manage products in order": [ + "" + ], + "Manage list of products in the order.": [ + "" + ], + "Remove this product from the order.": [ + "" + ], + "Total price": [ + "" + ], + "total product price added up": [ + "" + ], + "Amount to be paid by the customer": [ + "" + ], + "Order price": [ + "" + ], + "final order price": [ + "" + ], + "Summary": [ + "" + ], + "Title of the order to be shown to the customer": [ + "" + ], + "Shipping and Fulfillment": [ + "" + ], + "Delivery date": [ + "" + ], + "Deadline for physical delivery assured by the merchant.": [ + "" + ], + "Location": [ + "" + ], + "address where the products will be delivered": [ + "" + ], + "Fulfillment URL": [ + "" + ], + "URL to which the user will be redirected after successful payment.": [ + "" + ], + "Taler payment options": [ + "" + ], + "Override default Taler payment settings for this order": [ + "" + ], + "Payment deadline": [ + "" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "" + ], + "Refund deadline": [ + "" + ], + "Time until which the order can be refunded by the merchant.": [ + "" + ], + "Wire transfer deadline": [ + "" + ], + "Deadline for the exchange to make the wire transfer.": [ + "" + ], + "Auto-refund deadline": [ + "" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "" + ], + "Maximum deposit fee": [ + "" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "" + ], + "Maximum wire fee": [ + "" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "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.": [ + "" + ], + "Create token": [ + "" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "" + ], + "hours": [ + "" + ], + "minutes": [ + "" + ], + "seconds": [ + "" + ], + "forever": [ + "" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "" + ], + "create order": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "copy url": [ + "" + ], + "load older orders": [ + "" + ], + "No orders have been found matching your query!": [ + "" + ], + "duplicated": [ + "" + ], + "invalid format": [ + "" + ], + "this value exceed the refundable amount": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "amount to be refunded": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "Choose one...": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "why this order is being refunded": [ + "" + ], + "more information to give context": [ + "" + ], + "Contract Terms": [ + "" + ], + "human-readable description of the whole purchase": [ + "" + ], + "total price for the transaction": [ + "" + ], + "URL for this purchase": [ + "" + ], + "Max fee": [ + "" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "claimed at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund order": [ + "" + ], + "not refundable": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Refund taken": [ + "" + ], + "Status URL": [ + "" + ], + "Refund URI": [ + "" + ], + "unpaid": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Order status URL": [ + "" + ], + "Payment URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "Back": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "" + ], + "only show orders with refunds": [ + "" + ], + "Refunded": [ + "" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "" + ], + "order not found": [ + "" + ], + "could not get the order to refund": [ + "" + ], + "Loading...": [ + "" + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "" + ], + "Products": [ + "" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "free": [ + "" + ], + "go to product update page": [ + "" + ], + "Update": [ + "" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Product id:": [ + "" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "" + ], + "Valid until": [ + "" + ], + "Created balance": [ + "" + ], + "Exchange balance": [ + "" + ], + "Picked up": [ + "" + ], + "Committed": [ + "" + ], + "Account address": [ + "" + ], + "Subject": [ + "" + ], + "Tips": [ + "" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "" + ], + "Expiration": [ + "" + ], + "amount of tip": [ + "" + ], + "Justification": [ + "" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "" + ], + "Expected Balance": [ + "" + ], + "could not create the tip": [ + "" + ], + "should not be empty": [ + "" + ], + "should be greater that 0": [ + "" + ], + "can't be empty": [ + "" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "" + ], + "Amount is required": [ + "" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "" + ], + "could not create order from template": [ + "" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "" + ], + "Default amount": [ + "" + ], + "Default summary": [ + "" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "" + ], + "There is no templates yet, add more pressing the + sign": [ + "" + ], + "template delete successfully": [ + "" + ], + "could not delete the template": [ + "" + ], + "could not update template": [ + "" + ], + "should be one of '%1$s'": [ + "" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "" + ], + "webhook delete successfully": [ + "" + ], + "could not delete the webhook": [ + "" + ], + "check the id, does not look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "" + ], + "Transfers": [ + "" + ], + "add new transfer": [ + "" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "delete selected transfer from the database": [ + "" + ], + "load more transfer after the last one": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ], + "filter by account address": [ + "" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "" + ], + "must be 1 or greater": [ + "" + ], + "max 7 lines": [ + "" + ], + "change authorization configuration": [ + "" + ], + "Need to complete marked fields and choose authorization method": [ + "" + ], + "This is not a valid bitcoin address.": [ + "" + ], + "This is not a valid Ethereum address.": [ + "" + ], + "IBAN numbers usually have more that 4 digits": [ + "" + ], + "IBAN numbers usually have less that 34 digits": [ + "" + ], + "IBAN country code not found": [ + "" + ], + "IBAN number is not valid, checksum is wrong": [ + "" + ], + "Target type": [ + "" + ], + "Method to use for wire transfer": [ + "" + ], + "Routing": [ + "" + ], + "Routing number.": [ + "" + ], + "Account": [ + "" + ], + "Account number.": [ + "" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "" + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "" + ], + "Default payment delay": [ + "" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "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.": [ + "" + ], + "Instance id": [ + "" + ], + "Change the authorization method use for this instance.": [ + "" + ], + "Manage access token": [ + "" + ], + "Failed to create instance": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Connection": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "Server not found": [ + "" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "add element to the list": [ + "" + ], + "add": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Order ID": [ + "" + ], + "Payment URL": [ + "" + ] + } + } +}; +strings["en"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Cancel": [ + "" + ], + "%1$s": [ + "" + ], + "Close": [ + "" + ], + "Continue": [ + "" + ], + "Clear": [ + "" + ], + "Confirm": [ + "" + ], + "is not the same as the current access token": [ + "" + ], + "cannot be empty": [ + "" + ], + "cannot be the same as the old token": [ + "" + ], + "is not the same": [ + "" + ], + "You are updating the access token from instance with id %1$s": [ + "" + ], + "Old access token": [ + "" + ], + "access token currently in use": [ + "" + ], + "New access token": [ + "" + ], + "next access token to be used": [ + "" + ], + "Repeat access token": [ + "" + ], + "confirm the same access token": [ + "" + ], + "Clearing the access token will mean public access to the instance": [ + "" + ], + "cannot be the same as the old access token": [ + "" + ], + "You are setting the access token for the new instance": [ + "" + ], + "With external authorization method no check will be done by the merchant backend": [ + "" + ], + "Set external authorization": [ + "" + ], + "Set access token": [ + "" + ], + "Operation in progress...": [ + "" + ], + "The operation will be automatically canceled after %1$s seconds": [ + "" + ], + "Instances": [ + "" + ], + "Delete": [ + "" + ], + "add new instance": [ + "" + ], + "ID": [ + "" + ], + "Name": [ + "" + ], + "Edit": [ + "" + ], + "Purge": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Only show active instances": [ + "" + ], + "Active": [ + "" + ], + "Only show deleted instances": [ + "" + ], + "Deleted": [ + "" + ], + "Show all instances": [ + "" + ], + "All": [ + "" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "" + ], + "Failed to delete instance": [ + "" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "" + ], + "Failed to purge instance": [ + "" + ], + "Pending KYC verification": [ + "" + ], + "Timed out": [ + "" + ], + "Exchange": [ + "" + ], + "Target account": [ + "" + ], + "KYC URL": [ + "" + ], + "Code": [ + "" + ], + "Http Status": [ + "" + ], + "No pending kyc verification!": [ + "" + ], + "change value to unknown date": [ + "" + ], + "change value to empty": [ + "" + ], + "clear": [ + "" + ], + "change value to never": [ + "" + ], + "never": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Product": [ + "" + ], + "search products by it's description or id": [ + "" + ], + "no products found with that description": [ + "" + ], + "You must enter a valid product identifier.": [ + "" + ], + "Quantity must be greater than 0!": [ + "" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "" + ], + "Quantity": [ + "" + ], + "how many products will be added": [ + "" + ], + "Add from inventory": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Add": [ + "" + ], + "Remove": [ + "" + ], + "No taxes configured for this product.": [ + "" + ], + "Amount": [ + "" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "" + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "" + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "" + ], + "add tax to the tax list": [ + "" + ], + "describe and add a product that is not in the inventory list": [ + "" + ], + "Add custom product": [ + "" + ], + "Complete information of the product": [ + "" + ], + "Image": [ + "" + ], + "photo of the product": [ + "" + ], + "full product description": [ + "" + ], + "Unit": [ + "" + ], + "name of the product unit": [ + "" + ], + "Price": [ + "" + ], + "amount in the current currency": [ + "" + ], + "Taxes": [ + "" + ], + "image": [ + "" + ], + "description": [ + "" + ], + "quantity": [ + "" + ], + "unit price": [ + "" + ], + "total price": [ + "" + ], + "required": [ + "" + ], + "not valid": [ + "" + ], + "must be greater than 0": [ + "" + ], + "not a valid json": [ + "" + ], + "should be in the future": [ + "" + ], + "refund deadline cannot be before pay deadline": [ + "" + ], + "wire transfer deadline cannot be before refund deadline": [ + "" + ], + "wire transfer deadline cannot be before pay deadline": [ + "" + ], + "should have a refund deadline": [ + "" + ], + "auto refund cannot be after refund deadline": [ + "" + ], + "Manage products in order": [ + "" + ], + "Manage list of products in the order.": [ + "" + ], + "Remove this product from the order.": [ + "" + ], + "Total price": [ + "" + ], + "total product price added up": [ + "" + ], + "Amount to be paid by the customer": [ + "" + ], + "Order price": [ + "" + ], + "final order price": [ + "" + ], + "Summary": [ + "" + ], + "Title of the order to be shown to the customer": [ + "" + ], + "Shipping and Fulfillment": [ + "" + ], + "Delivery date": [ + "" + ], + "Deadline for physical delivery assured by the merchant.": [ + "" + ], + "Location": [ + "" + ], + "address where the products will be delivered": [ + "" + ], + "Fulfillment URL": [ + "" + ], + "URL to which the user will be redirected after successful payment.": [ + "" + ], + "Taler payment options": [ + "" + ], + "Override default Taler payment settings for this order": [ + "" + ], + "Payment deadline": [ + "" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "" + ], + "Refund deadline": [ + "" + ], + "Time until which the order can be refunded by the merchant.": [ + "" + ], + "Wire transfer deadline": [ + "" + ], + "Deadline for the exchange to make the wire transfer.": [ + "" + ], + "Auto-refund deadline": [ + "" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "" + ], + "Maximum deposit fee": [ + "" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "" + ], + "Maximum wire fee": [ + "" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "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.": [ + "" + ], + "Create token": [ + "" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "" + ], + "hours": [ + "" + ], + "minutes": [ + "" + ], + "seconds": [ + "" + ], + "forever": [ + "" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "" + ], + "create order": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "copy url": [ + "" + ], + "load older orders": [ + "" + ], + "No orders have been found matching your query!": [ + "" + ], + "duplicated": [ + "" + ], + "invalid format": [ + "" + ], + "this value exceed the refundable amount": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "amount to be refunded": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "Choose one...": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "why this order is being refunded": [ + "" + ], + "more information to give context": [ + "" + ], + "Contract Terms": [ + "" + ], + "human-readable description of the whole purchase": [ + "" + ], + "total price for the transaction": [ + "" + ], + "URL for this purchase": [ + "" + ], + "Max fee": [ + "" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "claimed at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund order": [ + "" + ], + "not refundable": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Refund taken": [ + "" + ], + "Status URL": [ + "" + ], + "Refund URI": [ + "" + ], + "unpaid": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Order status URL": [ + "" + ], + "Payment URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "Back": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "" + ], + "only show orders with refunds": [ + "" + ], + "Refunded": [ + "" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "" + ], + "order not found": [ + "" + ], + "could not get the order to refund": [ + "" + ], + "Loading...": [ + "" + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "" + ], + "Products": [ + "" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "free": [ + "" + ], + "go to product update page": [ + "" + ], + "Update": [ + "" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Product id:": [ + "" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "" + ], + "Valid until": [ + "" + ], + "Created balance": [ + "" + ], + "Exchange balance": [ + "" + ], + "Picked up": [ + "" + ], + "Committed": [ + "" + ], + "Account address": [ + "" + ], + "Subject": [ + "" + ], + "Tips": [ + "" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "" + ], + "Expiration": [ + "" + ], + "amount of tip": [ + "" + ], + "Justification": [ + "" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "" + ], + "Expected Balance": [ + "" + ], + "could not create the tip": [ + "" + ], + "should not be empty": [ + "" + ], + "should be greater that 0": [ + "" + ], + "can't be empty": [ + "" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "" + ], + "Amount is required": [ + "" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "" + ], + "could not create order from template": [ + "" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "" + ], + "Default amount": [ + "" + ], + "Default summary": [ + "" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "" + ], + "There is no templates yet, add more pressing the + sign": [ + "" + ], + "template delete successfully": [ + "" + ], + "could not delete the template": [ + "" + ], + "could not update template": [ + "" + ], + "should be one of '%1$s'": [ + "" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "" + ], + "webhook delete successfully": [ + "" + ], + "could not delete the webhook": [ + "" + ], + "check the id, does not look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "" + ], + "Transfers": [ + "" + ], + "add new transfer": [ + "" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "delete selected transfer from the database": [ + "" + ], + "load more transfer after the last one": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ], + "filter by account address": [ + "" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "" + ], + "must be 1 or greater": [ + "" + ], + "max 7 lines": [ + "" + ], + "change authorization configuration": [ + "" + ], + "Need to complete marked fields and choose authorization method": [ + "" + ], + "This is not a valid bitcoin address.": [ + "" + ], + "This is not a valid Ethereum address.": [ + "" + ], + "IBAN numbers usually have more that 4 digits": [ + "" + ], + "IBAN numbers usually have less that 34 digits": [ + "" + ], + "IBAN country code not found": [ + "" + ], + "IBAN number is not valid, checksum is wrong": [ + "" + ], + "Target type": [ + "" + ], + "Method to use for wire transfer": [ + "" + ], + "Routing": [ + "" + ], + "Routing number.": [ + "" + ], + "Account": [ + "" + ], + "Account number.": [ + "" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "" + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "" + ], + "Default payment delay": [ + "" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "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.": [ + "" + ], + "Instance id": [ + "" + ], + "Change the authorization method use for this instance.": [ + "" + ], + "Manage access token": [ + "" + ], + "Failed to create instance": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Connection": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "Server not found": [ + "" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "add element to the list": [ + "" + ], + "add": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Order ID": [ + "" + ], + "Payment URL": [ + "" + ] + } + } +}; +strings["es"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=n != 1;", + "lang": "es" + }, + "Cancel": [ + "Cancelar" + ], + "%1$s": [ + "%1$s" + ], + "Close": [ + "" + ], + "Continue": [ + "Continuar" + ], + "Clear": [ + "Limpiar" + ], + "Confirm": [ + "Confirmar" + ], + "is not the same as the current access token": [ + "no es el mismo que el token de acceso actual" + ], + "cannot be empty": [ + "no puede ser vac\xEDo" + ], + "cannot be the same as the old token": [ + "no puede ser igual al viejo token" + ], + "is not the same": [ + "no son iguales" + ], + "You are updating the access token from instance with id %1$s": [ + "Est\xE1 actualizando el token de acceso para la instancia con id %1$s" + ], + "Old access token": [ + "Viejo token de acceso" + ], + "access token currently in use": [ + "acceder al token en uso actualmente" + ], + "New access token": [ + "Nuevo token de acceso" + ], + "next access token to be used": [ + "siguiente token de acceso a usar" + ], + "Repeat access token": [ + "Repetir token de acceso" + ], + "confirm the same access token": [ + "confirmar el mismo token de acceso" + ], + "Clearing the access token will mean public access to the instance": [ + "Limpiar el token de acceso significa acceso p\xFAblico a la instancia" + ], + "cannot be the same as the old access token": [ + "no puede ser igual al anterior token de acceso" + ], + "You are setting the access token for the new instance": [ + "Est\xE1 estableciendo el token de acceso para la nueva instancia" + ], + "With external authorization method no check will be done by the merchant backend": [ + "Con el m\xE9todo de autorizaci\xF3n externa no se har\xE1 ninguna revisi\xF3n por el backend del comerciante" + ], + "Set external authorization": [ + "Establecer autorizaci\xF3n externa" + ], + "Set access token": [ + "Establecer token de acceso" + ], + "Operation in progress...": [ + "Operaci\xF3n en progreso..." + ], + "The operation will be automatically canceled after %1$s seconds": [ + "La operaci\xF3n ser\xE1 autom\xE1ticamente cancelada luego de %1$s segundos" + ], + "Instances": [ + "Instancias" + ], + "Delete": [ + "Eliminar" + ], + "add new instance": [ + "agregar nueva instancia" + ], + "ID": [ + "ID" + ], + "Name": [ + "Nombre" + ], + "Edit": [ + "Editar" + ], + "Purge": [ + "Purgar" + ], + "There is no instances yet, add more pressing the + sign": [ + "Todav\xEDa no hay instancias, agregue m\xE1s presionando el signo +" + ], + "Only show active instances": [ + "Solo mostrar instancias activas" + ], + "Active": [ + "Activo" + ], + "Only show deleted instances": [ + "Mostrar solo instancias eliminadas" + ], + "Deleted": [ + "Eliminado" + ], + "Show all instances": [ + "Mostrar todas las instancias" + ], + "All": [ + "Todo" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "La instancia '%1$s' (ID: %2$s) fue eliminada" + ], + "Failed to delete instance": [ + "Fallo al eliminar instancia" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "Instance '%1$s' (ID: %2$s) ha sido deshabilitada" + ], + "Failed to purge instance": [ + "Fallo al purgar la instancia" + ], + "Pending KYC verification": [ + "Verificaci\xF3n KYC pendiente" + ], + "Timed out": [ + "Expirado" + ], + "Exchange": [ + "Exchange" + ], + "Target account": [ + "Cuenta objetivo" + ], + "KYC URL": [ + "URL de KYC" + ], + "Code": [ + "C\xF3digo" + ], + "Http Status": [ + "Estado http" + ], + "No pending kyc verification!": [ + "\xA1No hay verificaci\xF3n kyc pendiente!" + ], + "change value to unknown date": [ + "cambiar valor a fecha desconocida" + ], + "change value to empty": [ + "cambiar valor a vac\xEDo" + ], + "clear": [ + "limpiar" + ], + "change value to never": [ + "cambiar valor a nunca" + ], + "never": [ + "nunca" + ], + "Country": [ + "Pa\xEDs" + ], + "Address": [ + "Direcci\xF3n" + ], + "Building number": [ + "N\xFAmero de edificio" + ], + "Building name": [ + "Nombre de edificio" + ], + "Street": [ + "Calle" + ], + "Post code": [ + "C\xF3digo postal" + ], + "Town location": [ + "Ubicaci\xF3n de ciudad" + ], + "Town": [ + "Ciudad" + ], + "District": [ + "Distrito" + ], + "Country subdivision": [ + "Subdivisi\xF3n de pa\xEDs" + ], + "Product id": [ + "Id de producto" + ], + "Description": [ + "Descripcion" + ], + "Product": [ + "Productos" + ], + "search products by it's description or id": [ + "buscar productos por su descripci\xF3n o ID" + ], + "no products found with that description": [ + "no se encontraron productos con esa descripci\xF3n" + ], + "You must enter a valid product identifier.": [ + "Debe ingresar un identificador de producto v\xE1lido." + ], + "Quantity must be greater than 0!": [ + "\xA1Cantidad debe ser mayor que 0!" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias." + ], + "Quantity": [ + "Cantidad" + ], + "how many products will be added": [ + "cu\xE1ntos productos ser\xE1n agregados" + ], + "Add from inventory": [ + "Agregar del inventario" + ], + "Image should be smaller than 1 MB": [ + "La imagen debe ser mas chica que 1 MB" + ], + "Add": [ + "Agregar" + ], + "Remove": [ + "Eliminar" + ], + "No taxes configured for this product.": [ + "Ningun impuesto configurado para este producto." + ], + "Amount": [ + "Monto" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante." + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "Ingrese divisa y valor separado por dos puntos, e.g. "USD:2.3"." + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "Nombre legal del impuesto, e.g. IVA o arancel." + ], + "add tax to the tax list": [ + "agregar impuesto a la lista de impuestos" + ], + "describe and add a product that is not in the inventory list": [ + "describa y agregue un producto que no est\xE1 en la lista de inventarios" + ], + "Add custom product": [ + "Agregue un producto personalizado" + ], + "Complete information of the product": [ + "Complete informaci\xF3n del producto" + ], + "Image": [ + "Imagen" + ], + "photo of the product": [ + "foto del producto" + ], + "full product description": [ + "descripci\xF3n completa del producto" + ], + "Unit": [ + "Unidad" + ], + "name of the product unit": [ + "nombre de la unidad del producto" + ], + "Price": [ + "Precio" + ], + "amount in the current currency": [ + "monto de la divisa actual" + ], + "Taxes": [ + "Impuestos" + ], + "image": [ + "imagen" + ], + "description": [ + "descripci\xF3n" + ], + "quantity": [ + "cantidad" + ], + "unit price": [ + "precio unitario" + ], + "total price": [ + "precio total" + ], + "required": [ + "requerido" + ], + "not valid": [ + "no es un json v\xE1lido" + ], + "must be greater than 0": [ + "debe ser mayor que 0" + ], + "not a valid json": [ + "no es un json v\xE1lido" + ], + "should be in the future": [ + "deber\xEDan ser en el futuro" + ], + "refund deadline cannot be before pay deadline": [ + "plazo de reembolso no puede ser antes que el plazo de pago" + ], + "wire transfer deadline cannot be before refund deadline": [ + "el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso" + ], + "wire transfer deadline cannot be before pay deadline": [ + "el plazo de la transferencia bancaria no puede ser antes que el plazo de pago" + ], + "should have a refund deadline": [ + "deber\xEDa tener un plazo de reembolso" + ], + "auto refund cannot be after refund deadline": [ + "reembolso autom\xE1tico no puede ser despu\xE9s qu el plazo de reembolso" + ], + "Manage products in order": [ + "Manejar productos en orden" + ], + "Manage list of products in the order.": [ + "Manejar lista de productos en la orden." + ], + "Remove this product from the order.": [ + "Remover este producto de la orden." + ], + "Total price": [ + "Precio total" + ], + "total product price added up": [ + "precio total de producto agregado" + ], + "Amount to be paid by the customer": [ + "Monto a ser pagado por el cliente" + ], + "Order price": [ + "Precio de la orden" + ], + "final order price": [ + "Precio final de la orden" + ], + "Summary": [ + "Resumen" + ], + "Title of the order to be shown to the customer": [ + "T\xEDtulo de la orden a ser mostrado al cliente" + ], + "Shipping and Fulfillment": [ + "Env\xEDo y cumplimiento" + ], + "Delivery date": [ + "Fecha de entrega" + ], + "Deadline for physical delivery assured by the merchant.": [ + "Plazo para la entrega f\xEDsica asegurado por el comerciante." + ], + "Location": [ + "Ubicaci\xF3n" + ], + "address where the products will be delivered": [ + "direcci\xF3n a donde los productos ser\xE1n entregados" + ], + "Fulfillment URL": [ + "URL de cumplimiento" + ], + "URL to which the user will be redirected after successful payment.": [ + "URL al cual el usuario ser\xE1 redirigido luego de pago exitoso." + ], + "Taler payment options": [ + "Opciones de pago de Taler" + ], + "Override default Taler payment settings for this order": [ + "Sobreescribir pagos por omisi\xF3n de Taler para esta orden" + ], + "Payment deadline": [ + "Plazo de pago" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "Plazo l\xEDmite para que el cliente pague por la oferta antes de que expire. Productos del inventario ser\xE1n reservados hasta este plazo l\xEDmite." + ], + "Refund deadline": [ + "Plazo de reembolso" + ], + "Time until which the order can be refunded by the merchant.": [ + "Tiempo hasta el cual la orden puede ser reembolsada por el comerciante." + ], + "Wire transfer deadline": [ + "Plazo de la transferencia" + ], + "Deadline for the exchange to make the wire transfer.": [ + "Plazo para que el exchange haga la transferencia." + ], + "Auto-refund deadline": [ + "Plazo de reembolso autom\xE1tico" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "Tiempo hasta el cual la billetera ser\xE1 autom\xE1ticamente revisada por reembolsos win interaci\xF3n por parte del usuario." + ], + "Maximum deposit fee": [ + "M\xE1xima tarifa de dep\xF3sito" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "M\xE1xima tarifa de dep\xF3sito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de dep\xF3sito deben ser cubiertas completamente por el consumidor." + ], + "Maximum wire fee": [ + "M\xE1xima tarifa de transferencia" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "Amortizaci\xF3n de comisi\xF3n de transferencia" + ], + "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.": [ + "" + ], + "Create token": [ + "Administrar token" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "Login necesario" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "Informaci\xF3n extra" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "d\xEDas" + ], + "hours": [ + "horas" + ], + "minutes": [ + "minutos" + ], + "seconds": [ + "segundos" + ], + "forever": [ + "nunca" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "\xD3rdenes" + ], + "create order": [ + "creado" + ], + "load newer orders": [ + "cargar nuevas ordenes" + ], + "Date": [ + "Fecha" + ], + "Refund": [ + "Devoluci\xF3n" + ], + "copy url": [ + "copiar url" + ], + "load older orders": [ + "cargar viejas ordenes" + ], + "No orders have been found matching your query!": [ + "\xA1No se encontraron \xF3rdenes que emparejen su b\xFAsqueda!" + ], + "duplicated": [ + "duplicado" + ], + "invalid format": [ + "formato inv\xE1lido" + ], + "this value exceed the refundable amount": [ + "este monto excede el monto reembolsable" + ], + "date": [ + "fecha" + ], + "amount": [ + "monto" + ], + "reason": [ + "raz\xF3n" + ], + "amount to be refunded": [ + "monto a ser reembolsado" + ], + "Max refundable:": [ + "M\xE1ximo reembolzable:" + ], + "Reason": [ + "Raz\xF3n" + ], + "Choose one...": [ + "Elija uno..." + ], + "requested by the customer": [ + "pedido por el consumidor" + ], + "other": [ + "otro" + ], + "why this order is being refunded": [ + "por qu\xE9 esta orden est\xE1 siendo reembolsada" + ], + "more information to give context": [ + "m\xE1s informaci\xF3n para dar contexto" + ], + "Contract Terms": [ + "T\xE9rminos de contrato" + ], + "human-readable description of the whole purchase": [ + "descripci\xF3n legible de toda la compra" + ], + "total price for the transaction": [ + "precio total de la transacci\xF3n" + ], + "URL for this purchase": [ + "URL para esta compra" + ], + "Max fee": [ + "M\xE1xima comisi\xF3n" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "Impuesto de transferencia m\xE1ximo" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "Creado en" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "Plazo de reembolso autom\xE1tico" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "Informaci\xF3n extra" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "Orden" + ], + "claimed": [ + "reclamado" + ], + "claimed at": [ + "reclamado" + ], + "Timeline": [ + "Cronolog\xEDa" + ], + "Payment details": [ + "Detalles de pago" + ], + "Order status": [ + "Estado de orden" + ], + "Product list": [ + "Lista de producto" + ], + "paid": [ + "pagados" + ], + "wired": [ + "transferido" + ], + "refunded": [ + "reembolzado" + ], + "refund order": [ + "reembolzado" + ], + "not refundable": [ + "M\xE1ximo reembolzable:" + ], + "refund": [ + "reembolzar" + ], + "Refunded amount": [ + "Monto reembolzado" + ], + "Refund taken": [ + "Reembolzado" + ], + "Status URL": [ + "URL de estado de orden" + ], + "Refund URI": [ + "Devoluci\xF3n" + ], + "unpaid": [ + "impago" + ], + "pay at": [ + "pagar en" + ], + "created at": [ + "creado" + ], + "Order status URL": [ + "URL de estado de orden" + ], + "Payment URI": [ + "URI de pago" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "Estado de orden desconocido. Esto es un error, por favor contacte a su administrador." + ], + "Back": [ + "" + ], + "refund created successfully": [ + "reembolzo creado satisfactoriamente" + ], + "could not create the refund": [ + "No se pudo create el reembolso" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "ir a id de orden" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "Pagado" + ], + "only show orders with refunds": [ + "No se pudo create el reembolso" + ], + "Refunded": [ + "Reembolzado" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "No transferido" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "ir a id de orden" + ], + "order not found": [ + "Servidor no encontrado" + ], + "could not get the order to refund": [ + "No se pudo create el reembolso" + ], + "Loading...": [ + "Cargando..." + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "Administrar stock" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "Inifinito" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "la p\xE9rdida no puede ser mayor al stock actual + entrante (max %1$s )" + ], + "Incoming": [ + "Ingresando" + ], + "Lost": [ + "Perdido" + ], + "Current": [ + "Actual" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "sin stock" + ], + "Next restock": [ + "Pr\xF3ximo reabastecimiento" + ], + "Delivery address": [ + "Direcci\xF3n de entrega" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "Existencias" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "no se pudo crear el producto" + ], + "Products": [ + "Productos" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "Venta" + ], + "Profit": [ + "Ganancia" + ], + "Sold": [ + "Vendido" + ], + "free": [ + "Gratis" + ], + "go to product update page": [ + "producto actualizado correctamente" + ], + "Update": [ + "Actualizar" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "no se pudo actualizar el producto" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "No hay propinas todav\xEDa, agregar mas presionando el signo +" + ], + "product updated successfully": [ + "producto actualizado correctamente" + ], + "could not update the product": [ + "no se pudo actualizar el producto" + ], + "product delete successfully": [ + "producto fue eliminado correctamente" + ], + "could not delete the product": [ + "no se pudo eliminar el producto" + ], + "Product id:": [ + "Id de producto" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "Debe ser mayor a 0" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "Instancia" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "URL del Exchange" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "Siguiente" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "no se pudo informar la transferencia" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "No se pudo create el reembolso" + ], + "Valid until": [ + "V\xE1lido hasta" + ], + "Created balance": [ + "creado" + ], + "Exchange balance": [ + "Monto inicial" + ], + "Picked up": [ + "" + ], + "Committed": [ + "Monto confirmado" + ], + "Account address": [ + "Direcci\xF3n de cuenta" + ], + "Subject": [ + "Asunto" + ], + "Tips": [ + "Propinas" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "Token de autorizaci\xF3n" + ], + "Expiration": [ + "Informaci\xF3n extra" + ], + "amount of tip": [ + "monto" + ], + "Justification": [ + "Jurisdicci\xF3n" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "Servidor no encontrado" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "cargar nuevas transferencias" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "No hay transferencias todav\xEDa, agregar mas presionando el signo +" + ], + "Expected Balance": [ + "Ejecutado en" + ], + "could not create the tip": [ + "No se pudo create el reembolso" + ], + "should not be empty": [ + "no puede ser vac\xEDo" + ], + "should be greater that 0": [ + "Debe ser mayor a 0" + ], + "can't be empty": [ + "no puede ser vac\xEDo" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "Estado de orden" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "precio unitario" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "Edad m\xEDnima" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "Opciones de pago" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "no se pudo informar la transferencia" + ], + "Amount is required": [ + "Login necesario" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "cargar viejas transferencias" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "Estado de orden" + ], + "could not create order from template": [ + "No se pudo create el reembolso" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "Monto reembolzado" + ], + "Default amount": [ + "Monto reembolzado" + ], + "Default summary": [ + "Estado de orden" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "cargar nuevas transferencias" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "No se pudo create el reembolso" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "cargar viejas transferencias" + ], + "There is no templates yet, add more pressing the + sign": [ + "No hay propinas todav\xEDa, agregar mas presionando el signo +" + ], + "template delete successfully": [ + "producto fue eliminado correctamente" + ], + "could not delete the template": [ + "no se pudo eliminar el producto" + ], + "could not update template": [ + "no se pudo actualizar el producto" + ], + "should be one of '%1$s'": [ + "deber\xEDan ser iguales" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "URL" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "cargar nuevas ordenes" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "cargar viejas ordenes" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "No hay propinas todav\xEDa, agregar mas presionando el signo +" + ], + "webhook delete successfully": [ + "producto fue eliminado correctamente" + ], + "could not delete the webhook": [ + "no se pudo eliminar el producto" + ], + "check the id, does not look valid": [ + "verificar el id, no parece v\xE1lido" + ], + "should have 52 characters, current %1$s": [ + "deber\xEDa tener 52 caracteres, actualmente %1$s" + ], + "URL doesn't have the right format": [ + "La URL no tiene el formato correcto" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "Id de transferencia" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "no se pudo informar la transferencia" + ], + "Transfers": [ + "Transferencias" + ], + "add new transfer": [ + "cargar nuevas transferencias" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "cargar nuevas transferencias" + ], + "Credit": [ + "Cr\xE9dito" + ], + "Confirmed": [ + "Confirmado" + ], + "Verified": [ + "Verificado" + ], + "Executed at": [ + "Ejecutado en" + ], + "yes": [ + "si" + ], + "no": [ + "no" + ], + "unknown": [ + "desconocido" + ], + "delete selected transfer from the database": [ + "eliminar transferencia seleccionada de la base de datos" + ], + "load more transfer after the last one": [ + "cargue m\xE1s transferencia luego de la \xFAltima" + ], + "load older transfers": [ + "cargar viejas transferencias" + ], + "There is no transfer yet, add more pressing the + sign": [ + "No hay transferencias todav\xEDa, agregar mas presionando el signo +" + ], + "filter by account address": [ + "Direcci\xF3n de cuenta" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "Verificado" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "N\xFAmero de edificio" + ], + "must be 1 or greater": [ + "debe ser 1 o mayor" + ], + "max 7 lines": [ + "m\xE1ximo 7 l\xEDneas" + ], + "change authorization configuration": [ + "cambiar configuraci\xF3n de autorizaci\xF3n" + ], + "Need to complete marked fields and choose authorization method": [ + "Necesita completar campos marcados y escoger un m\xE9todo de autorizaci\xF3n" + ], + "This is not a valid bitcoin address.": [ + "Esta no es una direcci\xF3n de bitcoin v\xE1lida." + ], + "This is not a valid Ethereum address.": [ + "Esta no es una direcci\xF3n de Ethereum v\xE1lida." + ], + "IBAN numbers usually have more that 4 digits": [ + "N\xFAmeros IBAN usualmente tienen m\xE1s de 4 d\xEDgitos" + ], + "IBAN numbers usually have less that 34 digits": [ + "N\xFAmero IBAN usualmente tienen menos de 34 d\xEDgitos" + ], + "IBAN country code not found": [ + "C\xF3digo IBAN de pa\xEDs no encontrado" + ], + "IBAN number is not valid, checksum is wrong": [ + "N\xFAmero IBAN no es v\xE1lido, la suma de verificaci\xF3n es incorrecta" + ], + "Target type": [ + "Tipo objetivo" + ], + "Method to use for wire transfer": [ + "M\xE9todo a usar para la transferencia" + ], + "Routing": [ + "Enrutamiento" + ], + "Routing number.": [ + "N\xFAmero de enrutamiento." + ], + "Account": [ + "Cuenta" + ], + "Account number.": [ + "Direcci\xF3n de cuenta" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "Interfaz de pago unificado." + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "Nombre de edificio" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "URL de sitio web" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "Cuenta bancaria" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "Impuesto m\xE1ximo de deposito por omisi\xF3n" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "Impuesto m\xE1ximo de transferencia por omisi\xF3n" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "Amortizaci\xF3n de impuesto de transferencia por omisi\xF3n" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "Jurisdicci\xF3n" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "Jurisdicci\xF3n para disputas legales con el comerciante." + ], + "Default payment delay": [ + "Retrazo de pago por omisi\xF3n" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "Retrazo de transferencia por omisi\xF3n" + ], + "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.": [ + "" + ], + "Instance id": [ + "ID de instancia" + ], + "Change the authorization method use for this instance.": [ + "Limpiar el token de autorizaci\xF3n significa acceso p\xFAblico a la instancia" + ], + "Manage access token": [ + "Administrar token de acceso" + ], + "Failed to create instance": [ + "Fallo al crear la instancia" + ], + "Login required": [ + "Login necesario" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "Acceso denegado" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "Servidir reporto un problema: HTTP status #%1$s" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "Acceso denegado" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "Sin instancia default" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "Instancia" + ], + "Settings": [ + "Configuraci\xF3n" + ], + "Connection": [ + "Conexi\xF3n" + ], + "New": [ + "Nuevo" + ], + "List": [ + "Lista" + ], + "Log out": [ + "Salir" + ], + "Check your token is valid": [ + "Verifica que el token sea valido" + ], + "Couldn't access the server.": [ + "No se pudo acceder al servidor." + ], + "Could not infer instance id from url %1$s": [ + "No se pudo inferir el id de la instancia con la url %1$s" + ], + "Server not found": [ + "Servidor no encontrado" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "Recibimos el mensaje %1$s desde %2$s" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "Error inesperado" + ], + "The value %1$s is invalid for a payment url": [ + "El valor %1$s es invalido para una URL de pago" + ], + "add element to the list": [ + "agregar elemento a la lista" + ], + "add": [ + "Agregar" + ], + "Deleting": [ + "Borrando" + ], + "Changing": [ + "Cambiando" + ], + "Order ID": [ + "ID de pedido" + ], + "Payment URL": [ + "URL de pago" + ] + } + } +}; +strings["fr"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Cancel": [ + "" + ], + "%1$s": [ + "" + ], + "Close": [ + "" + ], + "Continue": [ + "" + ], + "Clear": [ + "" + ], + "Confirm": [ + "" + ], + "is not the same as the current access token": [ + "" + ], + "cannot be empty": [ + "" + ], + "cannot be the same as the old token": [ + "" + ], + "is not the same": [ + "" + ], + "You are updating the access token from instance with id %1$s": [ + "" + ], + "Old access token": [ + "" + ], + "access token currently in use": [ + "" + ], + "New access token": [ + "" + ], + "next access token to be used": [ + "" + ], + "Repeat access token": [ + "" + ], + "confirm the same access token": [ + "" + ], + "Clearing the access token will mean public access to the instance": [ + "" + ], + "cannot be the same as the old access token": [ + "" + ], + "You are setting the access token for the new instance": [ + "" + ], + "With external authorization method no check will be done by the merchant backend": [ + "" + ], + "Set external authorization": [ + "" + ], + "Set access token": [ + "" + ], + "Operation in progress...": [ + "" + ], + "The operation will be automatically canceled after %1$s seconds": [ + "" + ], + "Instances": [ + "" + ], + "Delete": [ + "" + ], + "add new instance": [ + "" + ], + "ID": [ + "" + ], + "Name": [ + "" + ], + "Edit": [ + "" + ], + "Purge": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Only show active instances": [ + "" + ], + "Active": [ + "" + ], + "Only show deleted instances": [ + "" + ], + "Deleted": [ + "" + ], + "Show all instances": [ + "" + ], + "All": [ + "" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "" + ], + "Failed to delete instance": [ + "" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "" + ], + "Failed to purge instance": [ + "" + ], + "Pending KYC verification": [ + "" + ], + "Timed out": [ + "" + ], + "Exchange": [ + "" + ], + "Target account": [ + "" + ], + "KYC URL": [ + "" + ], + "Code": [ + "" + ], + "Http Status": [ + "" + ], + "No pending kyc verification!": [ + "" + ], + "change value to unknown date": [ + "" + ], + "change value to empty": [ + "" + ], + "clear": [ + "" + ], + "change value to never": [ + "" + ], + "never": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Product": [ + "" + ], + "search products by it's description or id": [ + "" + ], + "no products found with that description": [ + "" + ], + "You must enter a valid product identifier.": [ + "" + ], + "Quantity must be greater than 0!": [ + "" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "" + ], + "Quantity": [ + "" + ], + "how many products will be added": [ + "" + ], + "Add from inventory": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Add": [ + "" + ], + "Remove": [ + "" + ], + "No taxes configured for this product.": [ + "" + ], + "Amount": [ + "" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "" + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "" + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "" + ], + "add tax to the tax list": [ + "" + ], + "describe and add a product that is not in the inventory list": [ + "" + ], + "Add custom product": [ + "" + ], + "Complete information of the product": [ + "" + ], + "Image": [ + "" + ], + "photo of the product": [ + "" + ], + "full product description": [ + "" + ], + "Unit": [ + "" + ], + "name of the product unit": [ + "" + ], + "Price": [ + "" + ], + "amount in the current currency": [ + "" + ], + "Taxes": [ + "" + ], + "image": [ + "" + ], + "description": [ + "" + ], + "quantity": [ + "" + ], + "unit price": [ + "" + ], + "total price": [ + "" + ], + "required": [ + "" + ], + "not valid": [ + "" + ], + "must be greater than 0": [ + "" + ], + "not a valid json": [ + "" + ], + "should be in the future": [ + "" + ], + "refund deadline cannot be before pay deadline": [ + "" + ], + "wire transfer deadline cannot be before refund deadline": [ + "" + ], + "wire transfer deadline cannot be before pay deadline": [ + "" + ], + "should have a refund deadline": [ + "" + ], + "auto refund cannot be after refund deadline": [ + "" + ], + "Manage products in order": [ + "" + ], + "Manage list of products in the order.": [ + "" + ], + "Remove this product from the order.": [ + "" + ], + "Total price": [ + "" + ], + "total product price added up": [ + "" + ], + "Amount to be paid by the customer": [ + "" + ], + "Order price": [ + "" + ], + "final order price": [ + "" + ], + "Summary": [ + "" + ], + "Title of the order to be shown to the customer": [ + "" + ], + "Shipping and Fulfillment": [ + "" + ], + "Delivery date": [ + "" + ], + "Deadline for physical delivery assured by the merchant.": [ + "" + ], + "Location": [ + "" + ], + "address where the products will be delivered": [ + "" + ], + "Fulfillment URL": [ + "" + ], + "URL to which the user will be redirected after successful payment.": [ + "" + ], + "Taler payment options": [ + "" + ], + "Override default Taler payment settings for this order": [ + "" + ], + "Payment deadline": [ + "" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "" + ], + "Refund deadline": [ + "" + ], + "Time until which the order can be refunded by the merchant.": [ + "" + ], + "Wire transfer deadline": [ + "" + ], + "Deadline for the exchange to make the wire transfer.": [ + "" + ], + "Auto-refund deadline": [ + "" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "" + ], + "Maximum deposit fee": [ + "" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "" + ], + "Maximum wire fee": [ + "" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "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.": [ + "" + ], + "Create token": [ + "" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "" + ], + "hours": [ + "" + ], + "minutes": [ + "" + ], + "seconds": [ + "" + ], + "forever": [ + "" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "" + ], + "create order": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "copy url": [ + "" + ], + "load older orders": [ + "" + ], + "No orders have been found matching your query!": [ + "" + ], + "duplicated": [ + "" + ], + "invalid format": [ + "" + ], + "this value exceed the refundable amount": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "amount to be refunded": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "Choose one...": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "why this order is being refunded": [ + "" + ], + "more information to give context": [ + "" + ], + "Contract Terms": [ + "" + ], + "human-readable description of the whole purchase": [ + "" + ], + "total price for the transaction": [ + "" + ], + "URL for this purchase": [ + "" + ], + "Max fee": [ + "" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "claimed at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund order": [ + "" + ], + "not refundable": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Refund taken": [ + "" + ], + "Status URL": [ + "" + ], + "Refund URI": [ + "" + ], + "unpaid": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Order status URL": [ + "" + ], + "Payment URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "Back": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "" + ], + "only show orders with refunds": [ + "" + ], + "Refunded": [ + "" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "" + ], + "order not found": [ + "" + ], + "could not get the order to refund": [ + "" + ], + "Loading...": [ + "" + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "" + ], + "Products": [ + "" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "free": [ + "" + ], + "go to product update page": [ + "" + ], + "Update": [ + "" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Product id:": [ + "" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "" + ], + "Valid until": [ + "" + ], + "Created balance": [ + "" + ], + "Exchange balance": [ + "" + ], + "Picked up": [ + "" + ], + "Committed": [ + "" + ], + "Account address": [ + "" + ], + "Subject": [ + "" + ], + "Tips": [ + "" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "" + ], + "Expiration": [ + "" + ], + "amount of tip": [ + "" + ], + "Justification": [ + "" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "" + ], + "Expected Balance": [ + "" + ], + "could not create the tip": [ + "" + ], + "should not be empty": [ + "" + ], + "should be greater that 0": [ + "" + ], + "can't be empty": [ + "" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "" + ], + "Amount is required": [ + "" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "" + ], + "could not create order from template": [ + "" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "" + ], + "Default amount": [ + "" + ], + "Default summary": [ + "" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "" + ], + "There is no templates yet, add more pressing the + sign": [ + "" + ], + "template delete successfully": [ + "" + ], + "could not delete the template": [ + "" + ], + "could not update template": [ + "" + ], + "should be one of '%1$s'": [ + "" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "" + ], + "webhook delete successfully": [ + "" + ], + "could not delete the webhook": [ + "" + ], + "check the id, does not look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "" + ], + "Transfers": [ + "" + ], + "add new transfer": [ + "" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "delete selected transfer from the database": [ + "" + ], + "load more transfer after the last one": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ], + "filter by account address": [ + "" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "" + ], + "must be 1 or greater": [ + "" + ], + "max 7 lines": [ + "" + ], + "change authorization configuration": [ + "" + ], + "Need to complete marked fields and choose authorization method": [ + "" + ], + "This is not a valid bitcoin address.": [ + "" + ], + "This is not a valid Ethereum address.": [ + "" + ], + "IBAN numbers usually have more that 4 digits": [ + "" + ], + "IBAN numbers usually have less that 34 digits": [ + "" + ], + "IBAN country code not found": [ + "" + ], + "IBAN number is not valid, checksum is wrong": [ + "" + ], + "Target type": [ + "" + ], + "Method to use for wire transfer": [ + "" + ], + "Routing": [ + "" + ], + "Routing number.": [ + "" + ], + "Account": [ + "" + ], + "Account number.": [ + "" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "" + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "" + ], + "Default payment delay": [ + "" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "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.": [ + "" + ], + "Instance id": [ + "" + ], + "Change the authorization method use for this instance.": [ + "" + ], + "Manage access token": [ + "" + ], + "Failed to create instance": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Connection": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "Server not found": [ + "" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "add element to the list": [ + "" + ], + "add": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Order ID": [ + "" + ], + "Payment URL": [ + "" + ] + } + } +}; +strings["it"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Cancel": [ + "" + ], + "%1$s": [ + "" + ], + "Close": [ + "" + ], + "Continue": [ + "" + ], + "Clear": [ + "" + ], + "Confirm": [ + "" + ], + "is not the same as the current access token": [ + "" + ], + "cannot be empty": [ + "" + ], + "cannot be the same as the old token": [ + "" + ], + "is not the same": [ + "" + ], + "You are updating the access token from instance with id %1$s": [ + "" + ], + "Old access token": [ + "" + ], + "access token currently in use": [ + "" + ], + "New access token": [ + "" + ], + "next access token to be used": [ + "" + ], + "Repeat access token": [ + "" + ], + "confirm the same access token": [ + "" + ], + "Clearing the access token will mean public access to the instance": [ + "" + ], + "cannot be the same as the old access token": [ + "" + ], + "You are setting the access token for the new instance": [ + "" + ], + "With external authorization method no check will be done by the merchant backend": [ + "" + ], + "Set external authorization": [ + "" + ], + "Set access token": [ + "" + ], + "Operation in progress...": [ + "" + ], + "The operation will be automatically canceled after %1$s seconds": [ + "" + ], + "Instances": [ + "" + ], + "Delete": [ + "" + ], + "add new instance": [ + "" + ], + "ID": [ + "" + ], + "Name": [ + "" + ], + "Edit": [ + "" + ], + "Purge": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Only show active instances": [ + "" + ], + "Active": [ + "" + ], + "Only show deleted instances": [ + "" + ], + "Deleted": [ + "" + ], + "Show all instances": [ + "" + ], + "All": [ + "" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "" + ], + "Failed to delete instance": [ + "" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "" + ], + "Failed to purge instance": [ + "" + ], + "Pending KYC verification": [ + "" + ], + "Timed out": [ + "" + ], + "Exchange": [ + "" + ], + "Target account": [ + "" + ], + "KYC URL": [ + "" + ], + "Code": [ + "" + ], + "Http Status": [ + "" + ], + "No pending kyc verification!": [ + "" + ], + "change value to unknown date": [ + "" + ], + "change value to empty": [ + "" + ], + "clear": [ + "" + ], + "change value to never": [ + "" + ], + "never": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Product": [ + "" + ], + "search products by it's description or id": [ + "" + ], + "no products found with that description": [ + "" + ], + "You must enter a valid product identifier.": [ + "" + ], + "Quantity must be greater than 0!": [ + "" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "" + ], + "Quantity": [ + "" + ], + "how many products will be added": [ + "" + ], + "Add from inventory": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Add": [ + "" + ], + "Remove": [ + "" + ], + "No taxes configured for this product.": [ + "" + ], + "Amount": [ + "" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "" + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "" + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "" + ], + "add tax to the tax list": [ + "" + ], + "describe and add a product that is not in the inventory list": [ + "" + ], + "Add custom product": [ + "" + ], + "Complete information of the product": [ + "" + ], + "Image": [ + "" + ], + "photo of the product": [ + "" + ], + "full product description": [ + "" + ], + "Unit": [ + "" + ], + "name of the product unit": [ + "" + ], + "Price": [ + "" + ], + "amount in the current currency": [ + "" + ], + "Taxes": [ + "" + ], + "image": [ + "" + ], + "description": [ + "" + ], + "quantity": [ + "" + ], + "unit price": [ + "" + ], + "total price": [ + "" + ], + "required": [ + "" + ], + "not valid": [ + "" + ], + "must be greater than 0": [ + "" + ], + "not a valid json": [ + "" + ], + "should be in the future": [ + "" + ], + "refund deadline cannot be before pay deadline": [ + "" + ], + "wire transfer deadline cannot be before refund deadline": [ + "" + ], + "wire transfer deadline cannot be before pay deadline": [ + "" + ], + "should have a refund deadline": [ + "" + ], + "auto refund cannot be after refund deadline": [ + "" + ], + "Manage products in order": [ + "" + ], + "Manage list of products in the order.": [ + "" + ], + "Remove this product from the order.": [ + "" + ], + "Total price": [ + "" + ], + "total product price added up": [ + "" + ], + "Amount to be paid by the customer": [ + "" + ], + "Order price": [ + "" + ], + "final order price": [ + "" + ], + "Summary": [ + "" + ], + "Title of the order to be shown to the customer": [ + "" + ], + "Shipping and Fulfillment": [ + "" + ], + "Delivery date": [ + "" + ], + "Deadline for physical delivery assured by the merchant.": [ + "" + ], + "Location": [ + "" + ], + "address where the products will be delivered": [ + "" + ], + "Fulfillment URL": [ + "" + ], + "URL to which the user will be redirected after successful payment.": [ + "" + ], + "Taler payment options": [ + "" + ], + "Override default Taler payment settings for this order": [ + "" + ], + "Payment deadline": [ + "" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "" + ], + "Refund deadline": [ + "" + ], + "Time until which the order can be refunded by the merchant.": [ + "" + ], + "Wire transfer deadline": [ + "" + ], + "Deadline for the exchange to make the wire transfer.": [ + "" + ], + "Auto-refund deadline": [ + "" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "" + ], + "Maximum deposit fee": [ + "" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "" + ], + "Maximum wire fee": [ + "" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "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.": [ + "" + ], + "Create token": [ + "" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "" + ], + "hours": [ + "" + ], + "minutes": [ + "" + ], + "seconds": [ + "" + ], + "forever": [ + "" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "" + ], + "create order": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "copy url": [ + "" + ], + "load older orders": [ + "" + ], + "No orders have been found matching your query!": [ + "" + ], + "duplicated": [ + "" + ], + "invalid format": [ + "" + ], + "this value exceed the refundable amount": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "amount to be refunded": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "Choose one...": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "why this order is being refunded": [ + "" + ], + "more information to give context": [ + "" + ], + "Contract Terms": [ + "" + ], + "human-readable description of the whole purchase": [ + "" + ], + "total price for the transaction": [ + "" + ], + "URL for this purchase": [ + "" + ], + "Max fee": [ + "" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "claimed at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund order": [ + "" + ], + "not refundable": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Refund taken": [ + "" + ], + "Status URL": [ + "" + ], + "Refund URI": [ + "" + ], + "unpaid": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Order status URL": [ + "" + ], + "Payment URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "Back": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "" + ], + "only show orders with refunds": [ + "" + ], + "Refunded": [ + "" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "" + ], + "order not found": [ + "" + ], + "could not get the order to refund": [ + "" + ], + "Loading...": [ + "" + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "" + ], + "Products": [ + "" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "free": [ + "" + ], + "go to product update page": [ + "" + ], + "Update": [ + "" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Product id:": [ + "" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "" + ], + "Valid until": [ + "" + ], + "Created balance": [ + "" + ], + "Exchange balance": [ + "" + ], + "Picked up": [ + "" + ], + "Committed": [ + "" + ], + "Account address": [ + "" + ], + "Subject": [ + "" + ], + "Tips": [ + "" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "" + ], + "Expiration": [ + "" + ], + "amount of tip": [ + "" + ], + "Justification": [ + "" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "" + ], + "Expected Balance": [ + "" + ], + "could not create the tip": [ + "" + ], + "should not be empty": [ + "" + ], + "should be greater that 0": [ + "" + ], + "can't be empty": [ + "" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "" + ], + "Amount is required": [ + "" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "" + ], + "could not create order from template": [ + "" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "" + ], + "Default amount": [ + "" + ], + "Default summary": [ + "" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "" + ], + "There is no templates yet, add more pressing the + sign": [ + "" + ], + "template delete successfully": [ + "" + ], + "could not delete the template": [ + "" + ], + "could not update template": [ + "" + ], + "should be one of '%1$s'": [ + "" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "" + ], + "webhook delete successfully": [ + "" + ], + "could not delete the webhook": [ + "" + ], + "check the id, does not look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "" + ], + "Transfers": [ + "" + ], + "add new transfer": [ + "" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "delete selected transfer from the database": [ + "" + ], + "load more transfer after the last one": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ], + "filter by account address": [ + "" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "" + ], + "must be 1 or greater": [ + "" + ], + "max 7 lines": [ + "" + ], + "change authorization configuration": [ + "" + ], + "Need to complete marked fields and choose authorization method": [ + "" + ], + "This is not a valid bitcoin address.": [ + "" + ], + "This is not a valid Ethereum address.": [ + "" + ], + "IBAN numbers usually have more that 4 digits": [ + "" + ], + "IBAN numbers usually have less that 34 digits": [ + "" + ], + "IBAN country code not found": [ + "" + ], + "IBAN number is not valid, checksum is wrong": [ + "" + ], + "Target type": [ + "" + ], + "Method to use for wire transfer": [ + "" + ], + "Routing": [ + "" + ], + "Routing number.": [ + "" + ], + "Account": [ + "" + ], + "Account number.": [ + "" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "" + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "" + ], + "Default payment delay": [ + "" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "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.": [ + "" + ], + "Instance id": [ + "" + ], + "Change the authorization method use for this instance.": [ + "" + ], + "Manage access token": [ + "" + ], + "Failed to create instance": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Connection": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "Server not found": [ + "" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "add element to the list": [ + "" + ], + "add": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Order ID": [ + "" + ], + "Payment URL": [ + "" + ] + } + } +}; +strings["sv"] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Cancel": [ + "" + ], + "%1$s": [ + "" + ], + "Close": [ + "" + ], + "Continue": [ + "" + ], + "Clear": [ + "" + ], + "Confirm": [ + "" + ], + "is not the same as the current access token": [ + "" + ], + "cannot be empty": [ + "" + ], + "cannot be the same as the old token": [ + "" + ], + "is not the same": [ + "" + ], + "You are updating the access token from instance with id %1$s": [ + "" + ], + "Old access token": [ + "" + ], + "access token currently in use": [ + "" + ], + "New access token": [ + "" + ], + "next access token to be used": [ + "" + ], + "Repeat access token": [ + "" + ], + "confirm the same access token": [ + "" + ], + "Clearing the access token will mean public access to the instance": [ + "" + ], + "cannot be the same as the old access token": [ + "" + ], + "You are setting the access token for the new instance": [ + "" + ], + "With external authorization method no check will be done by the merchant backend": [ + "" + ], + "Set external authorization": [ + "" + ], + "Set access token": [ + "" + ], + "Operation in progress...": [ + "" + ], + "The operation will be automatically canceled after %1$s seconds": [ + "" + ], + "Instances": [ + "" + ], + "Delete": [ + "" + ], + "add new instance": [ + "" + ], + "ID": [ + "" + ], + "Name": [ + "" + ], + "Edit": [ + "" + ], + "Purge": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Only show active instances": [ + "" + ], + "Active": [ + "" + ], + "Only show deleted instances": [ + "" + ], + "Deleted": [ + "" + ], + "Show all instances": [ + "" + ], + "All": [ + "" + ], + 'Instance "%1$s" (ID: %2$s) has been deleted': [ + "" + ], + "Failed to delete instance": [ + "" + ], + "Instance '%1$s' (ID: %2$s) has been disabled": [ + "" + ], + "Failed to purge instance": [ + "" + ], + "Pending KYC verification": [ + "" + ], + "Timed out": [ + "" + ], + "Exchange": [ + "" + ], + "Target account": [ + "" + ], + "KYC URL": [ + "" + ], + "Code": [ + "" + ], + "Http Status": [ + "" + ], + "No pending kyc verification!": [ + "" + ], + "change value to unknown date": [ + "" + ], + "change value to empty": [ + "" + ], + "clear": [ + "" + ], + "change value to never": [ + "" + ], + "never": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Product": [ + "" + ], + "search products by it's description or id": [ + "" + ], + "no products found with that description": [ + "" + ], + "You must enter a valid product identifier.": [ + "" + ], + "Quantity must be greater than 0!": [ + "" + ], + "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ + "" + ], + "Quantity": [ + "" + ], + "how many products will be added": [ + "" + ], + "Add from inventory": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Add": [ + "" + ], + "Remove": [ + "" + ], + "No taxes configured for this product.": [ + "" + ], + "Amount": [ + "" + ], + "Taxes can be in currencies that differ from the main currency used by the merchant.": [ + "" + ], + "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ + "" + ], + "Legal name of the tax, e.g. VAT or import duties.": [ + "" + ], + "add tax to the tax list": [ + "" + ], + "describe and add a product that is not in the inventory list": [ + "" + ], + "Add custom product": [ + "" + ], + "Complete information of the product": [ + "" + ], + "Image": [ + "" + ], + "photo of the product": [ + "" + ], + "full product description": [ + "" + ], + "Unit": [ + "" + ], + "name of the product unit": [ + "" + ], + "Price": [ + "" + ], + "amount in the current currency": [ + "" + ], + "Taxes": [ + "" + ], + "image": [ + "" + ], + "description": [ + "" + ], + "quantity": [ + "" + ], + "unit price": [ + "" + ], + "total price": [ + "" + ], + "required": [ + "" + ], + "not valid": [ + "" + ], + "must be greater than 0": [ + "" + ], + "not a valid json": [ + "" + ], + "should be in the future": [ + "" + ], + "refund deadline cannot be before pay deadline": [ + "" + ], + "wire transfer deadline cannot be before refund deadline": [ + "" + ], + "wire transfer deadline cannot be before pay deadline": [ + "" + ], + "should have a refund deadline": [ + "" + ], + "auto refund cannot be after refund deadline": [ + "" + ], + "Manage products in order": [ + "" + ], + "Manage list of products in the order.": [ + "" + ], + "Remove this product from the order.": [ + "" + ], + "Total price": [ + "" + ], + "total product price added up": [ + "" + ], + "Amount to be paid by the customer": [ + "" + ], + "Order price": [ + "" + ], + "final order price": [ + "" + ], + "Summary": [ + "" + ], + "Title of the order to be shown to the customer": [ + "" + ], + "Shipping and Fulfillment": [ + "" + ], + "Delivery date": [ + "" + ], + "Deadline for physical delivery assured by the merchant.": [ + "" + ], + "Location": [ + "" + ], + "address where the products will be delivered": [ + "" + ], + "Fulfillment URL": [ + "" + ], + "URL to which the user will be redirected after successful payment.": [ + "" + ], + "Taler payment options": [ + "" + ], + "Override default Taler payment settings for this order": [ + "" + ], + "Payment deadline": [ + "" + ], + "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ + "" + ], + "Refund deadline": [ + "" + ], + "Time until which the order can be refunded by the merchant.": [ + "" + ], + "Wire transfer deadline": [ + "" + ], + "Deadline for the exchange to make the wire transfer.": [ + "" + ], + "Auto-refund deadline": [ + "" + ], + "Time until which the wallet will automatically check for refunds without user interaction.": [ + "" + ], + "Maximum deposit fee": [ + "" + ], + "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ + "" + ], + "Maximum wire fee": [ + "" + ], + "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.": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "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.": [ + "" + ], + "Create token": [ + "" + ], + "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ + "" + ], + "Minimum age required": [ + "" + ], + "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": [ + "" + ], + "Min age defined by the producs is %1$s": [ + "" + ], + "Additional information": [ + "" + ], + "Custom information to be included in the contract for this order.": [ + "" + ], + "You must enter a value in JavaScript Object Notation (JSON).": [ + "" + ], + "days": [ + "" + ], + "hours": [ + "" + ], + "minutes": [ + "" + ], + "seconds": [ + "" + ], + "forever": [ + "" + ], + "%1$sM": [ + "" + ], + "%1$sY": [ + "" + ], + "%1$sd": [ + "" + ], + "%1$sh": [ + "" + ], + "%1$smin": [ + "" + ], + "%1$ssec": [ + "" + ], + "Orders": [ + "" + ], + "create order": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "copy url": [ + "" + ], + "load older orders": [ + "" + ], + "No orders have been found matching your query!": [ + "" + ], + "duplicated": [ + "" + ], + "invalid format": [ + "" + ], + "this value exceed the refundable amount": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "amount to be refunded": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "Choose one...": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "why this order is being refunded": [ + "" + ], + "more information to give context": [ + "" + ], + "Contract Terms": [ + "" + ], + "human-readable description of the whole purchase": [ + "" + ], + "total price for the transaction": [ + "" + ], + "URL for this purchase": [ + "" + ], + "Max fee": [ + "" + ], + "maximum total deposit fee accepted by the merchant for this contract": [ + "" + ], + "Max wire fee": [ + "" + ], + "maximum wire fee accepted by the merchant": [ + "" + ], + "over how many customer transactions does the merchant expect to amortize wire fees on average": [ + "" + ], + "Created at": [ + "" + ], + "time when this contract was generated": [ + "" + ], + "after this deadline has passed no refunds will be accepted": [ + "" + ], + "after this deadline, the merchant won't accept payments for the contract": [ + "" + ], + "transfer deadline for the exchange": [ + "" + ], + "time indicating when the order should be delivered": [ + "" + ], + "where the order will be delivered": [ + "" + ], + "Auto-refund delay": [ + "" + ], + "how long the wallet should try to get an automatic refund for the purchase": [ + "" + ], + "Extra info": [ + "" + ], + "extra data that is only interpreted by the merchant frontend": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "claimed at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund order": [ + "" + ], + "not refundable": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Refund taken": [ + "" + ], + "Status URL": [ + "" + ], + "Refund URI": [ + "" + ], + "unpaid": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Order status URL": [ + "" + ], + "Payment URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "Back": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "select date to show nearby orders": [ + "" + ], + "order id": [ + "" + ], + "jump to order with the given order ID": [ + "" + ], + "remove all filters": [ + "" + ], + "only show paid orders": [ + "" + ], + "Paid": [ + "" + ], + "only show orders with refunds": [ + "" + ], + "Refunded": [ + "" + ], + "only show orders where customers paid, but wire payments from payment provider are still pending": [ + "" + ], + "Not wired": [ + "" + ], + "clear date filter": [ + "" + ], + "date (YYYY/MM/DD)": [ + "" + ], + "Enter an order id": [ + "" + ], + "order not found": [ + "" + ], + "could not get the order to refund": [ + "" + ], + "Loading...": [ + "" + ], + "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ + "" + ], + "Manage stock": [ + "" + ], + "this product has been configured without stock control": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater than current and incoming (max %1$s)": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "remove stock control for this product": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "product identification to use in URLs (for internal use only)": [ + "" + ], + "illustration of the product for customers": [ + "" + ], + "product description for customers": [ + "" + ], + "Age restricted": [ + "" + ], + "is this product restricted for customer below certain age?": [ + "" + ], + "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ + "" + ], + "sale price for customers, including taxes, for above units of the product": [ + "" + ], + "Stock": [ + "" + ], + "product inventory for products with finite supply (for internal use only)": [ + "" + ], + "taxes included in the product price, exposed to customers": [ + "" + ], + "Need to complete marked fields": [ + "" + ], + "could not create product": [ + "" + ], + "Products": [ + "" + ], + "add product to inventory": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "free": [ + "" + ], + "go to product update page": [ + "" + ], + "Update": [ + "" + ], + "remove this product from the database": [ + "" + ], + "update the product with new price": [ + "" + ], + "update product with new price": [ + "" + ], + "add more elements to the inventory": [ + "" + ], + "report elements lost in the inventory": [ + "" + ], + "new price for the product": [ + "" + ], + "the are value with errors": [ + "" + ], + "update product with new stock and price": [ + "" + ], + "There is no products yet, add more pressing the + sign": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Product id:": [ + "" + ], + "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.": [ + "" + ], + "If your system supports RFC 8905, you can do this by opening this URI:": [ + "" + ], + "it should be greater than 0": [ + "" + ], + "must be a valid URL": [ + "" + ], + "Initial balance": [ + "" + ], + "balance prior to deposit": [ + "" + ], + "Exchange URL": [ + "" + ], + "URL of exchange": [ + "" + ], + "Next": [ + "" + ], + "Wire method": [ + "" + ], + "method to use for wire transfer": [ + "" + ], + "Select one wire method": [ + "" + ], + "could not create reserve": [ + "" + ], + "Valid until": [ + "" + ], + "Created balance": [ + "" + ], + "Exchange balance": [ + "" + ], + "Picked up": [ + "" + ], + "Committed": [ + "" + ], + "Account address": [ + "" + ], + "Subject": [ + "" + ], + "Tips": [ + "" + ], + "No tips has been authorized from this reserve": [ + "" + ], + "Authorized": [ + "" + ], + "Expiration": [ + "" + ], + "amount of tip": [ + "" + ], + "Justification": [ + "" + ], + "reason for the tip": [ + "" + ], + "URL after tip": [ + "" + ], + "URL to visit after tip payment": [ + "" + ], + "Reserves not yet funded": [ + "" + ], + "Reserves ready": [ + "" + ], + "add new reserve": [ + "" + ], + "Expires at": [ + "" + ], + "Initial": [ + "" + ], + "delete selected reserve from the database": [ + "" + ], + "authorize new tip from selected reserve": [ + "" + ], + "There is no ready reserves yet, add more pressing the + sign or fund them": [ + "" + ], + "Expected Balance": [ + "" + ], + "could not create the tip": [ + "" + ], + "should not be empty": [ + "" + ], + "should be greater that 0": [ + "" + ], + "can't be empty": [ + "" + ], + "to short": [ + "" + ], + "just letters and numbers from 2 to 7": [ + "" + ], + "size of the key should be 32": [ + "" + ], + "Identifier": [ + "" + ], + "Name of the template in URLs.": [ + "" + ], + "Describe what this template stands for": [ + "" + ], + "Fixed summary": [ + "" + ], + "If specified, this template will create order with the same summary": [ + "" + ], + "Fixed price": [ + "" + ], + "If specified, this template will create order with the same price": [ + "" + ], + "Minimum age": [ + "" + ], + "Is this contract restricted to some age?": [ + "" + ], + "Payment timeout": [ + "" + ], + "How much time has the customer to complete the payment once the order was created.": [ + "" + ], + "Verification algorithm": [ + "" + ], + "Algorithm to use to verify transaction in offline mode": [ + "" + ], + "Point-of-sale key": [ + "" + ], + "Useful to validate the purchase": [ + "" + ], + "generate random secret key": [ + "" + ], + "random": [ + "" + ], + "show secret key": [ + "" + ], + "hide secret key": [ + "" + ], + "hide": [ + "" + ], + "show": [ + "" + ], + "could not inform template": [ + "" + ], + "Amount is required": [ + "" + ], + "Order summary is required": [ + "" + ], + "New order for template": [ + "" + ], + "Amount of the order": [ + "" + ], + "Order summary": [ + "" + ], + "could not create order from template": [ + "" + ], + "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ + "" + ], + "Fixed amount": [ + "" + ], + "Default amount": [ + "" + ], + "Default summary": [ + "" + ], + "Print": [ + "" + ], + "Setup TOTP": [ + "" + ], + "Templates": [ + "" + ], + "add new templates": [ + "" + ], + "load more templates before the first one": [ + "" + ], + "load newer templates": [ + "" + ], + "delete selected templates from the database": [ + "" + ], + "use template to create new order": [ + "" + ], + "create qr code for the template": [ + "" + ], + "load more templates after the last one": [ + "" + ], + "load older templates": [ + "" + ], + "There is no templates yet, add more pressing the + sign": [ + "" + ], + "template delete successfully": [ + "" + ], + "could not delete the template": [ + "" + ], + "could not update template": [ + "" + ], + "should be one of '%1$s'": [ + "" + ], + "Webhook ID to use": [ + "" + ], + "Event": [ + "" + ], + "The event of the webhook: why the webhook is used": [ + "" + ], + "Method": [ + "" + ], + "Method used by the webhook": [ + "" + ], + "URL": [ + "" + ], + "URL of the webhook where the customer will be redirected": [ + "" + ], + "Header": [ + "" + ], + "Header template of the webhook": [ + "" + ], + "Body": [ + "" + ], + "Body template by the webhook": [ + "" + ], + "Webhooks": [ + "" + ], + "add new webhooks": [ + "" + ], + "load more webhooks before the first one": [ + "" + ], + "load newer webhooks": [ + "" + ], + "Event type": [ + "" + ], + "delete selected webhook from the database": [ + "" + ], + "load more webhooks after the last one": [ + "" + ], + "load older webhooks": [ + "" + ], + "There is no webhooks yet, add more pressing the + sign": [ + "" + ], + "webhook delete successfully": [ + "" + ], + "could not delete the webhook": [ + "" + ], + "check the id, does not look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Credited bank account": [ + "" + ], + "Select one account": [ + "" + ], + "Bank account of the merchant where the payment was received": [ + "" + ], + "Wire transfer ID": [ + "" + ], + "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ + "" + ], + "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ + "" + ], + "Amount credited": [ + "" + ], + "Actual amount that was wired to the merchant's bank account": [ + "" + ], + "could not inform transfer": [ + "" + ], + "Transfers": [ + "" + ], + "add new transfer": [ + "" + ], + "load more transfers before the first one": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "delete selected transfer from the database": [ + "" + ], + "load more transfer after the last one": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ], + "filter by account address": [ + "" + ], + "only show wire transfers confirmed by the merchant": [ + "" + ], + "only show wire transfers claimed by the exchange": [ + "" + ], + "Unverified": [ + "" + ], + "is not valid": [ + "" + ], + "is not a number": [ + "" + ], + "must be 1 or greater": [ + "" + ], + "max 7 lines": [ + "" + ], + "change authorization configuration": [ + "" + ], + "Need to complete marked fields and choose authorization method": [ + "" + ], + "This is not a valid bitcoin address.": [ + "" + ], + "This is not a valid Ethereum address.": [ + "" + ], + "IBAN numbers usually have more that 4 digits": [ + "" + ], + "IBAN numbers usually have less that 34 digits": [ + "" + ], + "IBAN country code not found": [ + "" + ], + "IBAN number is not valid, checksum is wrong": [ + "" + ], + "Target type": [ + "" + ], + "Method to use for wire transfer": [ + "" + ], + "Routing": [ + "" + ], + "Routing number.": [ + "" + ], + "Account": [ + "" + ], + "Account number.": [ + "" + ], + "Business Identifier Code.": [ + "" + ], + "Bank Account Number.": [ + "" + ], + "Unified Payment Interface.": [ + "" + ], + "Bitcoin protocol.": [ + "" + ], + "Ethereum protocol.": [ + "" + ], + "Interledger protocol.": [ + "" + ], + "Host": [ + "" + ], + "Bank host.": [ + "" + ], + "Bank account.": [ + "" + ], + "Bank account owner's name.": [ + "" + ], + "No accounts yet.": [ + "" + ], + "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ + "" + ], + "Business name": [ + "" + ], + "Legal name of the business represented by this instance.": [ + "" + ], + "Email": [ + "" + ], + "Contact email": [ + "" + ], + "Website URL": [ + "" + ], + "URL.": [ + "" + ], + "Logo": [ + "" + ], + "Logo image.": [ + "" + ], + "Bank account": [ + "" + ], + "URI specifying bank account for crediting revenue.": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Maximum deposit fees this merchant is willing to pay per order by default.": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ + "" + ], + "Physical location of the merchant.": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Jurisdiction for legal disputes with the merchant.": [ + "" + ], + "Default payment delay": [ + "" + ], + "Time customers have to pay an order before the offer expires by default.": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "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.": [ + "" + ], + "Instance id": [ + "" + ], + "Change the authorization method use for this instance.": [ + "" + ], + "Manage access token": [ + "" + ], + "Failed to create instance": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your access token.": [ + "" + ], + "Access Token": [ + "" + ], + "The request to the backend take too long and was cancelled": [ + "" + ], + 'Diagnostic from %1$s is "%2$s"': [ + "" + ], + "The backend reported a problem: HTTP status #%1$s": [ + "" + ], + "Diagnostic from %1$s is '%2$s'": [ + "" + ], + "Access denied": [ + "" + ], + "The access token provided is invalid.": [ + "" + ], + "No 'default' instance configured yet.": [ + "" + ], + "Create a 'default' instance to begin using the merchant backoffice.": [ + "" + ], + "The access token provided is invalid": [ + "" + ], + "Hide for today": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Connection": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "Server not found": [ + "" + ], + "Server response with an error code": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Response from server is unreadable, http status: %1$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "add element to the list": [ + "" + ], + "add": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Order ID": [ + "" + ], + "Payment URL": [ + "" + ] + } + } +}; + +// src/components/menu/LangSelector.tsx +var names = { + es: "Espa\xF1ol [es]", + en: "English [en]", + fr: "Fran\xE7ais [fr]", + de: "Deutsch [de]", + sv: "Svenska [sv]", + it: "Italiano [it]" +}; +function getLangName(s5) { + if (names[s5]) + return names[s5]; + return s5; +} +function LangSelector() { + const [updatingLang, setUpdatingLang] = p3(false); + const { lang, changeLanguage } = useTranslationContext(); + return /* @__PURE__ */ h("div", { class: "dropdown is-active " }, /* @__PURE__ */ h("div", { class: "dropdown-trigger" }, /* @__PURE__ */ h( + "button", + { + class: "button has-tooltip-left", + "data-tooltip": "change language selection", + "aria-haspopup": "true", + "aria-controls": "dropdown-menu", + onClick: () => setUpdatingLang(!updatingLang) + }, + /* @__PURE__ */ h("div", { class: "icon is-small is-left" }, /* @__PURE__ */ h("img", { src: languageicon_default })), + /* @__PURE__ */ h("span", null, getLangName(lang)), + /* @__PURE__ */ h("div", { class: "icon is-right" }, /* @__PURE__ */ h("i", { class: "mdi mdi-chevron-down" })) + )), updatingLang && /* @__PURE__ */ h("div", { class: "dropdown-menu", id: "dropdown-menu", role: "menu" }, /* @__PURE__ */ h("div", { class: "dropdown-content" }, Object.keys(strings).filter((l3) => l3 !== lang).map((l3) => /* @__PURE__ */ h( + "a", + { + key: l3, + class: "dropdown-item", + value: l3, + onClick: () => { + changeLanguage(l3); + setUpdatingLang(false); + } + }, + getLangName(l3) + ))))); +} + +// src/components/menu/SideBar.tsx +var VERSION = true ? "0.1.0" : void 0; +function Sidebar({ + mobile, + instance, + onShowSettings, + onLogout, + admin, + mimic, + isPasswordOk +}) { + const config = useConfigContext(); + const { url: backendURL } = useBackendContext(); + const { i18n: i18n2 } = useTranslationContext(); + const kycStatus = useInstanceKYCDetails(); + const needKYC = kycStatus.ok && kycStatus.data.type === "redirect"; + return /* @__PURE__ */ h("aside", { class: "aside is-placed-left is-expanded", style: { overflowY: "scroll" } }, mobile && /* @__PURE__ */ h( + "div", + { + class: "footer", + onClick: (e4) => { + return e4.stopImmediatePropagation(); + } + }, + /* @__PURE__ */ h(LangSelector, null) + ), /* @__PURE__ */ h("div", { class: "aside-tools" }, /* @__PURE__ */ h("div", { class: "aside-tools-label" }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("b", null, "Taler"), " Backoffice"), /* @__PURE__ */ h( + "div", + { + class: "is-size-7 has-text-right", + style: { lineHeight: 0, marginTop: -10 } + }, + VERSION, + " (", + config.version, + ")" + ))), /* @__PURE__ */ h("div", { class: "menu is-menu-main" }, isPasswordOk && instance ? /* @__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: "/products", 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, "Products")))), /* @__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: "/validators", 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, "Validators")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/reserves", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-cash" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, "Reserves"))), /* @__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: "/server", 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, "Server")))), /* @__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", + onClick: () => onShowSettings() + }, + /* @__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-currency-eur" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, config.currency))), /* @__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" }, new URL(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" }, !instance ? "default" : instance))), isPasswordOk && admin && !mimic && /* @__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"))))), isPasswordOk && /* @__PURE__ */ h("li", null, /* @__PURE__ */ h( + "a", + { + class: "has-icon is-state-info is-hoverable", + onClick: () => onLogout() + }, + /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-logout default" })), + /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Log out")) + ))))); +} + +// src/components/menu/index.tsx +function getInstanceTitle(path, id) { + switch (path) { + case "/server" /* server */: + return `${id}: Settings`; + case "/orders" /* order_list */: + return `${id}: Orders`; + case "/order/new" /* order_new */: + return `${id}: New order`; + case "/products" /* product_list */: + return `${id}: Products`; + case "/product/new" /* product_new */: + return `${id}: New product`; + case "/product/:pid/update" /* product_update */: + return `${id}: Update product`; + case "/reserves/new" /* reserves_new */: + return `${id}: New reserve`; + case "/reserves" /* reserves_list */: + return `${id}: Reserves`; + case "/transfers" /* transfers_list */: + return `${id}: Transfers`; + case "/transfer/new" /* transfers_new */: + return `${id}: New transfer`; + case "/webhooks" /* webhooks_list */: + return `${id}: Webhooks`; + case "/webhooks/new" /* webhooks_new */: + return `${id}: New webhook`; + case "/webhooks/:tid/update" /* webhooks_update */: + return `${id}: Update webhook`; + case "/validators" /* validators_list */: + return `${id}: Validators`; + case "/validators/new" /* validators_new */: + return `${id}: New validator`; + case "/validators/:vid/update" /* validators_update */: + return `${id}: Update validators`; + case "/templates/new" /* templates_new */: + return `${id}: New template`; + case "/templates/:tid/update" /* templates_update */: + return `${id}: Update template`; + case "/templates" /* templates_list */: + return `${id}: Templates`; + case "/templates/:tid/use" /* templates_use */: + return `${id}: Use template`; + case "/interface" /* settings */: + return `${id}: Interface`; + case "/interface" /* settings */: + return `${id}: Interface`; + default: + return ""; + } +} +function getAdminTitle(path, instance) { + if (path === "/instance/new" /* new_instance */) + return `New instance`; + if (path === "/instances" /* list_instances */) + return `Instances`; + return getInstanceTitle(path, instance); +} +function WithTitle({ + title, + children +}) { + h2(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + return /* @__PURE__ */ h(p2, null, children); +} +function Menu({ + onLogout, + onShowSettings, + title, + instance, + path, + admin, + setInstanceName, + isPasswordOk +}) { + const [mobileOpen, setMobileOpen] = p3(false); + const titleWithSubtitle = title ? title : !admin ? getInstanceTitle(path, instance) : getAdminTitle(path, instance); + const adminInstance = instance === "default"; + const mimic = admin && !adminInstance; + return /* @__PURE__ */ h(WithTitle, { title: titleWithSubtitle }, /* @__PURE__ */ h( + "div", + { + class: mobileOpen ? "has-aside-mobile-expanded" : "", + onClick: () => setMobileOpen(false) + }, + /* @__PURE__ */ h( + NavigationBar, + { + onMobileMenu: () => setMobileOpen(!mobileOpen), + title: titleWithSubtitle + } + ), + onLogout && /* @__PURE__ */ h( + Sidebar, + { + onShowSettings, + onLogout, + admin, + mimic, + instance, + mobile: mobileOpen, + isPasswordOk + } + ), + mimic && /* @__PURE__ */ h("nav", { class: "level", style: { + zIndex: 100, + position: "fixed", + width: "50%", + marginLeft: "20%" + } }, /* @__PURE__ */ h("div", { class: "level-item has-text-centered has-background-warning" }, /* @__PURE__ */ h("p", { class: "is-size-5" }, "You are viewing the instance ", /* @__PURE__ */ h("b", null, '"', instance, '"'), ".", " ", /* @__PURE__ */ h( + "a", + { + href: "#/instances", + onClick: (e4) => { + setInstanceName("default"); + } + }, + "go back" + )))) + )); +} +function NotificationCard({ + notification: n2 +}) { + if (!n2) + return null; + return /* @__PURE__ */ h("div", { class: "notification" }, /* @__PURE__ */ h("div", { class: "columns is-vcentered" }, /* @__PURE__ */ h("div", { class: "column is-12" }, /* @__PURE__ */ h( + "article", + { + class: n2.type === "ERROR" ? "message is-danger" : n2.type === "WARN" ? "message is-warning" : "message is-info" + }, + /* @__PURE__ */ h("div", { class: "message-header" }, /* @__PURE__ */ h("p", null, n2.message)), + n2.description && /* @__PURE__ */ h("div", { class: "message-body" }, /* @__PURE__ */ h("div", null, n2.description), n2.details && /* @__PURE__ */ h("pre", null, n2.details)) + )))); +} +function NotConnectedAppMenu({ + title +}) { + const [mobileOpen, setMobileOpen] = p3(false); + h2(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + return /* @__PURE__ */ h( + "div", + { + class: mobileOpen ? "has-aside-mobile-expanded" : "", + onClick: () => setMobileOpen(false) + }, + /* @__PURE__ */ h( + NavigationBar, + { + onMobileMenu: () => setMobileOpen(!mobileOpen), + title + } + ) + ); +} +function NotYetReadyAppMenu({ + onLogout, + onShowSettings, + title, + isPasswordOk +}) { + const [mobileOpen, setMobileOpen] = p3(false); + h2(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + return /* @__PURE__ */ h( + "div", + { + class: mobileOpen ? "has-aside-mobile-expanded" : "", + onClick: () => setMobileOpen(false) + }, + /* @__PURE__ */ h( + NavigationBar, + { + onMobileMenu: () => setMobileOpen(!mobileOpen), + title + } + ), + onLogout && /* @__PURE__ */ h(Sidebar, { onShowSettings, onLogout, instance: "", mobile: mobileOpen, isPasswordOk }) + ); +} + // src/paths/instance/token/index.tsx init_preact_module(); @@ -21707,10 +31813,11 @@ function DetailPage({ instanceId, currentToken: oldToken, onBack, onNewToken, on return __async(this, null, function* () { if (hasErrors) return; - onNewToken(form.new_token); + const nt = `secret-token:${form.new_token}`; + onNewToken(nt); }); } - 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" }, "Instace id: ", /* @__PURE__ */ h("b", null, instanceId))))))), /* @__PURE__ */ h("hr", null), /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h(FormProvider, { errors: errors2, object: form, valueHandler: setValue }, hasOldtoken && /* @__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" }, "Instance id: ", /* @__PURE__ */ h("b", null, instanceId))))))), /* @__PURE__ */ h("hr", null), /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h(FormProvider, { errors: errors2, object: form, valueHandler: setValue }, hasOldtoken && /* @__PURE__ */ h( Input, { name: "old_token", @@ -21768,12 +31875,12 @@ function Token({ const { token: rootToken } = useBackendContext(); const { token: instanceToken, id, admin } = useInstanceContext(); const currentToken = !admin ? rootToken : instanceToken; - const hasPrefix = currentToken !== void 0 && currentToken.startsWith(PREFIX); + const hasPrefix = currentToken !== void 0 && currentToken.token.startsWith(PREFIX); return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotificationCard, { notification: notif }), /* @__PURE__ */ h( DetailPage, { instanceId: id, - currentToken: hasPrefix ? currentToken.substring(PREFIX.length) : currentToken, + currentToken: hasPrefix ? currentToken.token.substring(PREFIX.length) : currentToken == null ? void 0 : currentToken.token, onClearToken: () => __async(this, null, function* () { try { yield clearToken(); @@ -21790,7 +31897,7 @@ function Token({ }), onNewToken: (newToken) => __async(this, null, function* () { try { - yield setNewToken(`secret-token:${newToken}`); + yield setNewToken(newToken); onChange(); } catch (error2) { if (error2 instanceof Error) { @@ -22119,15 +32226,6 @@ init_hooks_module(); // src/components/form/InputCurrency.tsx init_preact_module(); - -// src/context/config.ts -init_preact_module(); -init_hooks_module(); -var Context4 = B(null); -var ConfigContextProvider = Context4.Provider; -var useConfigContext = () => q2(Context4); - -// src/components/form/InputCurrency.tsx function InputCurrency({ name, readonly, @@ -26388,9 +36486,9 @@ function PaidPage({ return e4.when.getTime() > now2.getTime(); }); const [value, valueHandler] = p3(order); - const { url } = useBackendContext(); + const { url: backendURL } = useBackendContext(); const refundurl = stringifyRefundUri({ - merchantBaseUrl: url, + merchantBaseUrl: backendURL, orderId: order.contract_terms.order_id }); const refundable = (/* @__PURE__ */ new Date()).getTime() < order.contract_terms.refund_deadline.t_s * 1e3; @@ -27099,7 +37197,7 @@ function ProductForm2({ onSubscribe, initial: initial2, alreadyExist }) { h2(() => { onSubscribe(hasErrors ? void 0 : submit); }, [submit, hasErrors]); - const backend = useBackendContext(); + const { url: backendURL } = useBackendContext(); const { i18n: i18n2 } = useTranslationContext(); return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h( FormProvider, @@ -27113,7 +37211,7 @@ function ProductForm2({ onSubscribe, initial: initial2, alreadyExist }) { InputWithAddon, { name: "product_id", - addonBefore: `${backend.url}/product/`, + addonBefore: `${backendURL}/product/`, label: i18n2.str`ID`, tooltip: i18n2.str`product identification to use in URLs (for internal use only)` } @@ -27141,7 +37239,7 @@ function ProductForm2({ onSubscribe, initial: initial2, alreadyExist }) { name: "minimum_age", label: i18n2.str`Age restricted`, tooltip: i18n2.str`is this product restricted for customer below certain age?`, - help: i18n2.str`can be overriden by the order configuration` + help: i18n2.str`can be overridden by the order configuration` } ), /* @__PURE__ */ h( @@ -28876,9 +38974,9 @@ init_hooks_module(); // src/paths/instance/reserves/details/RewardInfo.tsx init_preact_module(); function RewardInfo({ id: merchantRewardId, amount, entity }) { - const { url: merchantBaseUrl } = useBackendContext(); + const { url: backendURL } = useBackendContext(); const [settings] = useSettings(); - const rewardURL = stringifyRewardUri({ merchantBaseUrl, merchantRewardId }); + const rewardURL = stringifyRewardUri({ merchantBaseUrl: backendURL, merchantRewardId }); return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "Amount")), /* @__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: amount }))))), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "URL")), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field", style: { overflowWrap: "anywhere" } }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h("a", { target: "_blank", rel: "noreferrer", href: rewardURL }, rewardURL))))), /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "Valid until")), /* @__PURE__ */ h("div", { class: "field-body is-flex-grow-3" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control" }, /* @__PURE__ */ h( "input", { @@ -29609,7 +39707,7 @@ function useOtpDeviceDetails(deviceId) { function CreatePage6({ onCreate, onBack }) { var _a, _b, _c, _d; const { i18n: i18n2 } = useTranslationContext(); - const backend = useBackendContext(); + const { url: backendURL } = useBackendContext(); const devices = useInstanceOtpDevices(); const [state, setState] = p3({ template_contract: { @@ -29650,7 +39748,7 @@ function CreatePage6({ onCreate, onBack }) { InputWithAddon, { name: "template_id", - help: `${backend.url}/templates/${(_d = state.template_id) != null ? _d : ""}`, + help: `${backendURL}/templates/${(_d = state.template_id) != null ? _d : ""}`, label: i18n2.str`Identifier`, tooltip: i18n2.str`Name of the template in URLs.` } @@ -29871,7 +39969,7 @@ init_hooks_module(); function QrPage({ contract, id: templateId, onBack }) { var _a; const { i18n: i18n2 } = useTranslationContext(); - const { url: backendUrl } = useBackendContext(); + const { url: backendURL } = useBackendContext(); const { id: instanceId } = useInstanceContext(); const config = useConfigContext(); const [state, setState] = p3({ @@ -29892,14 +39990,14 @@ function QrPage({ contract, id: templateId, onBack }) { if (!fixedSummary) { templateParams.summary = (_a = state.summary) != null ? _a : ""; } - const merchantBaseUrl = new URL(backendUrl).href; + const merchantBaseUrl = new URL(backendURL).href; const payTemplateUri = stringifyPayTemplateUri({ merchantBaseUrl, templateId, templateParams }); const issuer = encodeURIComponent( - `${new URL(backendUrl).host}/${instanceId}` + `${new URL(backendURL).host}/${instanceId}` ); return /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("section", { class: "section is-main-section" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h("p", { class: "is-size-5 mt-5 mb-5" }, /* @__PURE__ */ h(i18n2.Translate, null, "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.")), /* @__PURE__ */ h("p", null), /* @__PURE__ */ h( FormProvider, @@ -30219,7 +40317,7 @@ init_hooks_module(); function UpdatePage3({ template, onUpdate, onBack }) { var _a, _b, _c; const { i18n: i18n2 } = useTranslationContext(); - const backend = useBackendContext(); + const { url: backendURL } = useBackendContext(); const [state, setState] = p3(template); const parsedPrice = !((_a = state.template_contract) == null ? void 0 : _a.amount) ? void 0 : Amounts.parse((_b = state.template_contract) == null ? void 0 : _b.amount); const errors2 = { @@ -30238,7 +40336,7 @@ function UpdatePage3({ template, onUpdate, onBack }) { return Promise.reject(); return onUpdate(state); }; - 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" }, backend.url, "/templates/", template.id)))))), /* @__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" }, backendURL, "/templates/", template.id)))))), /* @__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, @@ -31028,9 +41126,9 @@ function CreatedSuccessfully4({ onConfirm }) { const { i18n: i18n2 } = useTranslationContext(); - const backend = useBackendContext(); + const { url: backendURL } = useBackendContext(); const { id: instanceId } = useInstanceContext(); - const issuer = new URL(backend.url).hostname; + const issuer = new URL(backendURL).hostname; const qrText = `otpauth://totp/${instanceId}/${entity.otp_device_id}?issuer=${issuer}&algorithm=SHA1&digits=8&period=30&secret=${entity.otp_key}`; const qrTextSafe = `otpauth://totp/${instanceId}/${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 safe the key before continue.")), /* @__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( @@ -31944,7 +42042,6 @@ function CommonUpdate({ onUpdateError, onUnauthorized }, result, updateInstance, clearToken, setNewToken) { - const { changeToken } = useInstanceContext(); const [notif, setNotif] = p3(void 0); const { i18n: i18n2 } = useTranslationContext(); if (result.loading) @@ -31973,7 +42070,7 @@ function CommonUpdate({ }, onChangeAuth: (d5) => { const apiCall = d5.method === "external" ? clearToken() : setNewToken(d5.token); - return apiCall.then(() => changeToken(d5.token)).then(onConfirm).catch(onUpdateError); + return apiCall.then(onConfirm).catch(onUpdateError); } } )); @@ -31981,18 +42078,7 @@ function CommonUpdate({ // src/paths/login/index.tsx init_preact_module(); - -// src/components/exception/login.tsx -init_preact_module(); init_hooks_module(); -function getTokenValuePart(t4) { - if (!t4) - return t4; - const match2 = /secret-token:(.*)/.exec(t4); - if (!match2 || !match2[1]) - return ""; - return match2[1]; -} function normalizeToken(r3) { return `secret-token:${r3}`; } @@ -32003,17 +42089,31 @@ function cleanUp(s5) { } return result; } -function LoginModal({ onConfirm, withMessage }) { - var _a; - const { url: backendUrl, token: baseToken } = useBackendContext(); - const { admin, token: instanceToken, id } = useInstanceContext(); - const testLogin = useCredentialsChecker(); - const currentToken = getTokenValuePart( - (_a = !admin ? baseToken : instanceToken) != null ? _a : "" - ); - const [token, setToken] = p3(currentToken); - const [url, setURL] = p3(cleanUp(backendUrl)); +function LoginPage({ onConfirm }) { + const { url: backendURL, changeBackend } = useBackendContext(); + const { admin, id } = useInstanceContext(); + const { requestNewLoginToken } = useCredentialsChecker(); + const [token, setToken] = p3(""); const { i18n: i18n2 } = useTranslationContext(); + const doLogin = T2(function doLoginImpl() { + return __async(this, null, function* () { + const secretToken = normalizeToken(token); + const baseUrl = id === void 0 ? backendURL : `${backendURL}/instances/${id}`; + const result = yield requestNewLoginToken(baseUrl, secretToken); + if (result.valid) { + const { token: token2, expiration } = result; + onConfirm({ token: token2, expiration }); + } else { + onConfirm(void 0); + } + }); + }, [backendURL, id, token]); + function changeServer() { + return __async(this, null, function* () { + changeBackend(""); + }); + } + console.log(admin, id); if (admin && id !== "default") { 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", @@ -32036,7 +42136,7 @@ function LoginModal({ onConfirm, withMessage }) { type: "password", placeholder: "current access token", name: "token", - onKeyPress: (e4) => e4.keyCode === 13 ? onConfirm(url, normalizeToken(token)) : null, + onKeyPress: (e4) => e4.keyCode === 13 ? doLogin() : null, value: token, onInput: (e4) => setToken(e4 == null ? void 0 : e4.currentTarget.value) } @@ -32054,15 +42154,7 @@ function LoginModal({ onConfirm, withMessage }) { /* @__PURE__ */ h( AsyncButton2, { - onClick: () => __async(this, null, function* () { - const secretToken = normalizeToken(token); - const { valid, cause } = yield testLogin(`${url}/instances/${id}`, secretToken); - if (valid) { - onConfirm(url, secretToken); - } else { - onConfirm(url); - } - }) + onClick: doLogin }, /* @__PURE__ */ h(i18n2.Translate, null, "Confirm") ) @@ -32089,9 +42181,9 @@ function LoginModal({ onConfirm, withMessage }) { type: "text", placeholder: "set new url", name: "id", - value: url, - onKeyPress: (e4) => e4.keyCode === 13 ? onConfirm(url, normalizeToken(token)) : null, - onInput: (e4) => setURL(e4 == null ? void 0 : e4.currentTarget.value) + value: backendURL, + disabled: true, + readOnly: true } ))))), /* @__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( @@ -32101,7 +42193,7 @@ function LoginModal({ onConfirm, withMessage }) { type: "password", placeholder: "current access token", name: "token", - onKeyPress: (e4) => e4.keyCode === 13 ? onConfirm(url, normalizeToken(token)) : null, + onKeyPress: (e4) => e4.keyCode === 13 ? doLogin() : null, value: token, onInput: (e4) => setToken(e4 == null ? void 0 : e4.currentTarget.value) } @@ -32111,7 +42203,7 @@ function LoginModal({ onConfirm, withMessage }) { { class: "modal-card-foot ", style: { - justifyContent: "flex-end", + justifyContent: "space-between", border: "1px solid", borderTop: 0 } @@ -32119,23 +42211,23 @@ function LoginModal({ onConfirm, withMessage }) { /* @__PURE__ */ h( AsyncButton2, { - onClick: () => __async(this, null, function* () { - const secretToken = normalizeToken(token); - const { valid, cause } = yield testLogin(url, secretToken); - if (valid) { - onConfirm(url, secretToken); - } else { - onConfirm(url); - } - }) + onClick: changeServer + }, + /* @__PURE__ */ h(i18n2.Translate, null, "Change server") + ), + /* @__PURE__ */ h( + AsyncButton2, + { + type: "is-info", + onClick: doLogin }, /* @__PURE__ */ h(i18n2.Translate, null, "Confirm") ) )))); } -function AsyncButton2({ onClick, children }) { +function AsyncButton2({ onClick, disabled, type = "", children }) { const [running, setRunning] = p3(false); - return /* @__PURE__ */ h("button", { class: "button is-info", disabled: running, onClick: () => { + return /* @__PURE__ */ h("button", { class: "button " + type, disabled: disabled || running, onClick: () => { setRunning(true); onClick().then(() => { setRunning(false); @@ -32144,10 +42236,60 @@ function AsyncButton2({ onClick, children }) { }); } }, children); } - -// src/paths/login/index.tsx -function LoginPage({ onConfirm }) { - return /* @__PURE__ */ h(LoginModal, { onConfirm }); +function ConnectionPage({ onConfirm }) { + const { url: backendURL } = useBackendContext(); + const [url, setURL] = p3(cleanUp(backendURL)); + const { i18n: i18n2 } = useTranslationContext(); + function doConnect() { + return __async(this, null, function* () { + onConfirm(url); + }); + } + 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`Connect to backend`) + ), /* @__PURE__ */ h( + "section", + { + class: "modal-card-body", + style: { border: "1px solid", borderTop: 0, borderBottom: 0 } + }, + /* @__PURE__ */ h(i18n2.Translate, null, "Location of the backend server"), + /* @__PURE__ */ h("div", { class: "field is-horizontal" }, /* @__PURE__ */ h("div", { class: "field-label is-normal" }, /* @__PURE__ */ h("label", { class: "label" }, "URL")), /* @__PURE__ */ h("div", { class: "field-body" }, /* @__PURE__ */ h("div", { class: "field" }, /* @__PURE__ */ h("p", { class: "control is-expanded" }, /* @__PURE__ */ h( + "input", + { + class: "input", + type: "text", + placeholder: "set new url", + name: "id", + value: url != null ? url : "", + onKeyPress: (e4) => e4.keyCode === 13 ? doConnect() : null, + onInput: (e4) => setURL(e4 == null ? void 0 : e4.currentTarget.value) + } + ))))) + ), /* @__PURE__ */ h( + "footer", + { + class: "modal-card-foot ", + style: { + justifyContent: "flex-end", + border: "1px solid", + borderTop: 0 + } + }, + /* @__PURE__ */ h( + AsyncButton2, + { + disabled: backendURL === url, + onClick: doConnect + }, + /* @__PURE__ */ h(i18n2.Translate, null, "Try again") + ) + )))); } // src/paths/notfound/index.tsx @@ -32158,9692 +42300,6 @@ function NotFoundPage() { // src/paths/settings/index.tsx init_preact_module(); - -// src/components/menu/LangSelector.tsx -init_preact_module(); -init_hooks_module(); - -// src/assets/icons/languageicon.svg -var languageicon_default = "./languageicon-LWKRUH5D.svg"; - -// src/i18n/strings.ts -var strings = {}; -strings["de"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=(n != 1);", - "lang": "" - }, - "Cancel": [ - "" - ], - "%1$s": [ - "" - ], - "Close": [ - "" - ], - "Continue": [ - "" - ], - "Clear": [ - "" - ], - "Confirm": [ - "" - ], - "is not the same as the current access token": [ - "" - ], - "cannot be empty": [ - "" - ], - "cannot be the same as the old token": [ - "" - ], - "is not the same": [ - "" - ], - "You are updating the access token from instance with id %1$s": [ - "" - ], - "Old access token": [ - "" - ], - "access token currently in use": [ - "" - ], - "New access token": [ - "" - ], - "next access token to be used": [ - "" - ], - "Repeat access token": [ - "" - ], - "confirm the same access token": [ - "" - ], - "Clearing the access token will mean public access to the instance": [ - "" - ], - "cannot be the same as the old access token": [ - "" - ], - "You are setting the access token for the new instance": [ - "" - ], - "With external authorization method no check will be done by the merchant backend": [ - "" - ], - "Set external authorization": [ - "" - ], - "Set access token": [ - "" - ], - "Operation in progress...": [ - "" - ], - "The operation will be automatically canceled after %1$s seconds": [ - "" - ], - "Instances": [ - "" - ], - "Delete": [ - "" - ], - "add new instance": [ - "" - ], - "ID": [ - "" - ], - "Name": [ - "" - ], - "Edit": [ - "" - ], - "Purge": [ - "" - ], - "There is no instances yet, add more pressing the + sign": [ - "" - ], - "Only show active instances": [ - "" - ], - "Active": [ - "" - ], - "Only show deleted instances": [ - "" - ], - "Deleted": [ - "" - ], - "Show all instances": [ - "" - ], - "All": [ - "" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "" - ], - "Failed to delete instance": [ - "" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "" - ], - "Failed to purge instance": [ - "" - ], - "Pending KYC verification": [ - "" - ], - "Timed out": [ - "" - ], - "Exchange": [ - "" - ], - "Target account": [ - "" - ], - "KYC URL": [ - "" - ], - "Code": [ - "" - ], - "Http Status": [ - "" - ], - "No pending kyc verification!": [ - "" - ], - "change value to unknown date": [ - "" - ], - "change value to empty": [ - "" - ], - "clear": [ - "" - ], - "change value to never": [ - "" - ], - "never": [ - "" - ], - "Country": [ - "" - ], - "Address": [ - "" - ], - "Building number": [ - "" - ], - "Building name": [ - "" - ], - "Street": [ - "" - ], - "Post code": [ - "" - ], - "Town location": [ - "" - ], - "Town": [ - "" - ], - "District": [ - "" - ], - "Country subdivision": [ - "" - ], - "Product id": [ - "" - ], - "Description": [ - "" - ], - "Product": [ - "" - ], - "search products by it's description or id": [ - "" - ], - "no products found with that description": [ - "" - ], - "You must enter a valid product identifier.": [ - "" - ], - "Quantity must be greater than 0!": [ - "" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "" - ], - "Quantity": [ - "" - ], - "how many products will be added": [ - "" - ], - "Add from inventory": [ - "" - ], - "Image should be smaller than 1 MB": [ - "" - ], - "Add": [ - "" - ], - "Remove": [ - "" - ], - "No taxes configured for this product.": [ - "" - ], - "Amount": [ - "" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "" - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "" - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "" - ], - "add tax to the tax list": [ - "" - ], - "describe and add a product that is not in the inventory list": [ - "" - ], - "Add custom product": [ - "" - ], - "Complete information of the product": [ - "" - ], - "Image": [ - "" - ], - "photo of the product": [ - "" - ], - "full product description": [ - "" - ], - "Unit": [ - "" - ], - "name of the product unit": [ - "" - ], - "Price": [ - "" - ], - "amount in the current currency": [ - "" - ], - "Taxes": [ - "" - ], - "image": [ - "" - ], - "description": [ - "" - ], - "quantity": [ - "" - ], - "unit price": [ - "" - ], - "total price": [ - "" - ], - "required": [ - "" - ], - "not valid": [ - "" - ], - "must be greater than 0": [ - "" - ], - "not a valid json": [ - "" - ], - "should be in the future": [ - "" - ], - "refund deadline cannot be before pay deadline": [ - "" - ], - "wire transfer deadline cannot be before refund deadline": [ - "" - ], - "wire transfer deadline cannot be before pay deadline": [ - "" - ], - "should have a refund deadline": [ - "" - ], - "auto refund cannot be after refund deadline": [ - "" - ], - "Manage products in order": [ - "" - ], - "Manage list of products in the order.": [ - "" - ], - "Remove this product from the order.": [ - "" - ], - "Total price": [ - "" - ], - "total product price added up": [ - "" - ], - "Amount to be paid by the customer": [ - "" - ], - "Order price": [ - "" - ], - "final order price": [ - "" - ], - "Summary": [ - "" - ], - "Title of the order to be shown to the customer": [ - "" - ], - "Shipping and Fulfillment": [ - "" - ], - "Delivery date": [ - "" - ], - "Deadline for physical delivery assured by the merchant.": [ - "" - ], - "Location": [ - "" - ], - "address where the products will be delivered": [ - "" - ], - "Fulfillment URL": [ - "" - ], - "URL to which the user will be redirected after successful payment.": [ - "" - ], - "Taler payment options": [ - "" - ], - "Override default Taler payment settings for this order": [ - "" - ], - "Payment deadline": [ - "" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "" - ], - "Refund deadline": [ - "" - ], - "Time until which the order can be refunded by the merchant.": [ - "" - ], - "Wire transfer deadline": [ - "" - ], - "Deadline for the exchange to make the wire transfer.": [ - "" - ], - "Auto-refund deadline": [ - "" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "" - ], - "Maximum deposit fee": [ - "" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "" - ], - "Maximum wire fee": [ - "" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "" - ], - "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.": [ - "" - ], - "Create token": [ - "" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "" - ], - "hours": [ - "" - ], - "minutes": [ - "" - ], - "seconds": [ - "" - ], - "forever": [ - "" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "" - ], - "create order": [ - "" - ], - "load newer orders": [ - "" - ], - "Date": [ - "" - ], - "Refund": [ - "" - ], - "copy url": [ - "" - ], - "load older orders": [ - "" - ], - "No orders have been found matching your query!": [ - "" - ], - "duplicated": [ - "" - ], - "invalid format": [ - "" - ], - "this value exceed the refundable amount": [ - "" - ], - "date": [ - "" - ], - "amount": [ - "" - ], - "reason": [ - "" - ], - "amount to be refunded": [ - "" - ], - "Max refundable:": [ - "" - ], - "Reason": [ - "" - ], - "Choose one...": [ - "" - ], - "requested by the customer": [ - "" - ], - "other": [ - "" - ], - "why this order is being refunded": [ - "" - ], - "more information to give context": [ - "" - ], - "Contract Terms": [ - "" - ], - "human-readable description of the whole purchase": [ - "" - ], - "total price for the transaction": [ - "" - ], - "URL for this purchase": [ - "" - ], - "Max fee": [ - "" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "" - ], - "claimed": [ - "" - ], - "claimed at": [ - "" - ], - "Timeline": [ - "" - ], - "Payment details": [ - "" - ], - "Order status": [ - "" - ], - "Product list": [ - "" - ], - "paid": [ - "" - ], - "wired": [ - "" - ], - "refunded": [ - "" - ], - "refund order": [ - "" - ], - "not refundable": [ - "" - ], - "refund": [ - "" - ], - "Refunded amount": [ - "" - ], - "Refund taken": [ - "" - ], - "Status URL": [ - "" - ], - "Refund URI": [ - "" - ], - "unpaid": [ - "" - ], - "pay at": [ - "" - ], - "created at": [ - "" - ], - "Order status URL": [ - "" - ], - "Payment URI": [ - "" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "" - ], - "Back": [ - "" - ], - "refund created successfully": [ - "" - ], - "could not create the refund": [ - "" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "" - ], - "only show orders with refunds": [ - "" - ], - "Refunded": [ - "" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "" - ], - "order not found": [ - "" - ], - "could not get the order to refund": [ - "" - ], - "Loading...": [ - "" - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "" - ], - "Incoming": [ - "" - ], - "Lost": [ - "" - ], - "Current": [ - "" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "" - ], - "Next restock": [ - "" - ], - "Delivery address": [ - "" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "" - ], - "Products": [ - "" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "" - ], - "Profit": [ - "" - ], - "Sold": [ - "" - ], - "free": [ - "" - ], - "go to product update page": [ - "" - ], - "Update": [ - "" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "" - ], - "product updated successfully": [ - "" - ], - "could not update the product": [ - "" - ], - "product delete successfully": [ - "" - ], - "could not delete the product": [ - "" - ], - "Product id:": [ - "" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "" - ], - "Valid until": [ - "" - ], - "Created balance": [ - "" - ], - "Exchange balance": [ - "" - ], - "Picked up": [ - "" - ], - "Committed": [ - "" - ], - "Account address": [ - "" - ], - "Subject": [ - "" - ], - "Tips": [ - "" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "" - ], - "Expiration": [ - "" - ], - "amount of tip": [ - "" - ], - "Justification": [ - "" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "" - ], - "Expected Balance": [ - "" - ], - "could not create the tip": [ - "" - ], - "should not be empty": [ - "" - ], - "should be greater that 0": [ - "" - ], - "can't be empty": [ - "" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "" - ], - "Amount is required": [ - "" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "" - ], - "could not create order from template": [ - "" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "" - ], - "Default amount": [ - "" - ], - "Default summary": [ - "" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "" - ], - "There is no templates yet, add more pressing the + sign": [ - "" - ], - "template delete successfully": [ - "" - ], - "could not delete the template": [ - "" - ], - "could not update template": [ - "" - ], - "should be one of '%1$s'": [ - "" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "" - ], - "webhook delete successfully": [ - "" - ], - "could not delete the webhook": [ - "" - ], - "check the id, does not look valid": [ - "" - ], - "should have 52 characters, current %1$s": [ - "" - ], - "URL doesn't have the right format": [ - "" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "" - ], - "Transfers": [ - "" - ], - "add new transfer": [ - "" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "" - ], - "Credit": [ - "" - ], - "Confirmed": [ - "" - ], - "Verified": [ - "" - ], - "Executed at": [ - "" - ], - "yes": [ - "" - ], - "no": [ - "" - ], - "unknown": [ - "" - ], - "delete selected transfer from the database": [ - "" - ], - "load more transfer after the last one": [ - "" - ], - "load older transfers": [ - "" - ], - "There is no transfer yet, add more pressing the + sign": [ - "" - ], - "filter by account address": [ - "" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "" - ], - "must be 1 or greater": [ - "" - ], - "max 7 lines": [ - "" - ], - "change authorization configuration": [ - "" - ], - "Need to complete marked fields and choose authorization method": [ - "" - ], - "This is not a valid bitcoin address.": [ - "" - ], - "This is not a valid Ethereum address.": [ - "" - ], - "IBAN numbers usually have more that 4 digits": [ - "" - ], - "IBAN numbers usually have less that 34 digits": [ - "" - ], - "IBAN country code not found": [ - "" - ], - "IBAN number is not valid, checksum is wrong": [ - "" - ], - "Target type": [ - "" - ], - "Method to use for wire transfer": [ - "" - ], - "Routing": [ - "" - ], - "Routing number.": [ - "" - ], - "Account": [ - "" - ], - "Account number.": [ - "" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "" - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "" - ], - "Default payment delay": [ - "" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "" - ], - "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.": [ - "" - ], - "Instance id": [ - "" - ], - "Change the authorization method use for this instance.": [ - "" - ], - "Manage access token": [ - "" - ], - "Failed to create instance": [ - "" - ], - "Login required": [ - "" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "" - ], - "Settings": [ - "" - ], - "Connection": [ - "" - ], - "New": [ - "" - ], - "List": [ - "" - ], - "Log out": [ - "" - ], - "Check your token is valid": [ - "" - ], - "Couldn't access the server.": [ - "" - ], - "Could not infer instance id from url %1$s": [ - "" - ], - "Server not found": [ - "" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "" - ], - "The value %1$s is invalid for a payment url": [ - "" - ], - "add element to the list": [ - "" - ], - "add": [ - "" - ], - "Deleting": [ - "" - ], - "Changing": [ - "" - ], - "Order ID": [ - "" - ], - "Payment URL": [ - "" - ] - } - } -}; -strings["en"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=(n != 1);", - "lang": "" - }, - "Cancel": [ - "" - ], - "%1$s": [ - "" - ], - "Close": [ - "" - ], - "Continue": [ - "" - ], - "Clear": [ - "" - ], - "Confirm": [ - "" - ], - "is not the same as the current access token": [ - "" - ], - "cannot be empty": [ - "" - ], - "cannot be the same as the old token": [ - "" - ], - "is not the same": [ - "" - ], - "You are updating the access token from instance with id %1$s": [ - "" - ], - "Old access token": [ - "" - ], - "access token currently in use": [ - "" - ], - "New access token": [ - "" - ], - "next access token to be used": [ - "" - ], - "Repeat access token": [ - "" - ], - "confirm the same access token": [ - "" - ], - "Clearing the access token will mean public access to the instance": [ - "" - ], - "cannot be the same as the old access token": [ - "" - ], - "You are setting the access token for the new instance": [ - "" - ], - "With external authorization method no check will be done by the merchant backend": [ - "" - ], - "Set external authorization": [ - "" - ], - "Set access token": [ - "" - ], - "Operation in progress...": [ - "" - ], - "The operation will be automatically canceled after %1$s seconds": [ - "" - ], - "Instances": [ - "" - ], - "Delete": [ - "" - ], - "add new instance": [ - "" - ], - "ID": [ - "" - ], - "Name": [ - "" - ], - "Edit": [ - "" - ], - "Purge": [ - "" - ], - "There is no instances yet, add more pressing the + sign": [ - "" - ], - "Only show active instances": [ - "" - ], - "Active": [ - "" - ], - "Only show deleted instances": [ - "" - ], - "Deleted": [ - "" - ], - "Show all instances": [ - "" - ], - "All": [ - "" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "" - ], - "Failed to delete instance": [ - "" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "" - ], - "Failed to purge instance": [ - "" - ], - "Pending KYC verification": [ - "" - ], - "Timed out": [ - "" - ], - "Exchange": [ - "" - ], - "Target account": [ - "" - ], - "KYC URL": [ - "" - ], - "Code": [ - "" - ], - "Http Status": [ - "" - ], - "No pending kyc verification!": [ - "" - ], - "change value to unknown date": [ - "" - ], - "change value to empty": [ - "" - ], - "clear": [ - "" - ], - "change value to never": [ - "" - ], - "never": [ - "" - ], - "Country": [ - "" - ], - "Address": [ - "" - ], - "Building number": [ - "" - ], - "Building name": [ - "" - ], - "Street": [ - "" - ], - "Post code": [ - "" - ], - "Town location": [ - "" - ], - "Town": [ - "" - ], - "District": [ - "" - ], - "Country subdivision": [ - "" - ], - "Product id": [ - "" - ], - "Description": [ - "" - ], - "Product": [ - "" - ], - "search products by it's description or id": [ - "" - ], - "no products found with that description": [ - "" - ], - "You must enter a valid product identifier.": [ - "" - ], - "Quantity must be greater than 0!": [ - "" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "" - ], - "Quantity": [ - "" - ], - "how many products will be added": [ - "" - ], - "Add from inventory": [ - "" - ], - "Image should be smaller than 1 MB": [ - "" - ], - "Add": [ - "" - ], - "Remove": [ - "" - ], - "No taxes configured for this product.": [ - "" - ], - "Amount": [ - "" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "" - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "" - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "" - ], - "add tax to the tax list": [ - "" - ], - "describe and add a product that is not in the inventory list": [ - "" - ], - "Add custom product": [ - "" - ], - "Complete information of the product": [ - "" - ], - "Image": [ - "" - ], - "photo of the product": [ - "" - ], - "full product description": [ - "" - ], - "Unit": [ - "" - ], - "name of the product unit": [ - "" - ], - "Price": [ - "" - ], - "amount in the current currency": [ - "" - ], - "Taxes": [ - "" - ], - "image": [ - "" - ], - "description": [ - "" - ], - "quantity": [ - "" - ], - "unit price": [ - "" - ], - "total price": [ - "" - ], - "required": [ - "" - ], - "not valid": [ - "" - ], - "must be greater than 0": [ - "" - ], - "not a valid json": [ - "" - ], - "should be in the future": [ - "" - ], - "refund deadline cannot be before pay deadline": [ - "" - ], - "wire transfer deadline cannot be before refund deadline": [ - "" - ], - "wire transfer deadline cannot be before pay deadline": [ - "" - ], - "should have a refund deadline": [ - "" - ], - "auto refund cannot be after refund deadline": [ - "" - ], - "Manage products in order": [ - "" - ], - "Manage list of products in the order.": [ - "" - ], - "Remove this product from the order.": [ - "" - ], - "Total price": [ - "" - ], - "total product price added up": [ - "" - ], - "Amount to be paid by the customer": [ - "" - ], - "Order price": [ - "" - ], - "final order price": [ - "" - ], - "Summary": [ - "" - ], - "Title of the order to be shown to the customer": [ - "" - ], - "Shipping and Fulfillment": [ - "" - ], - "Delivery date": [ - "" - ], - "Deadline for physical delivery assured by the merchant.": [ - "" - ], - "Location": [ - "" - ], - "address where the products will be delivered": [ - "" - ], - "Fulfillment URL": [ - "" - ], - "URL to which the user will be redirected after successful payment.": [ - "" - ], - "Taler payment options": [ - "" - ], - "Override default Taler payment settings for this order": [ - "" - ], - "Payment deadline": [ - "" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "" - ], - "Refund deadline": [ - "" - ], - "Time until which the order can be refunded by the merchant.": [ - "" - ], - "Wire transfer deadline": [ - "" - ], - "Deadline for the exchange to make the wire transfer.": [ - "" - ], - "Auto-refund deadline": [ - "" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "" - ], - "Maximum deposit fee": [ - "" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "" - ], - "Maximum wire fee": [ - "" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "" - ], - "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.": [ - "" - ], - "Create token": [ - "" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "" - ], - "hours": [ - "" - ], - "minutes": [ - "" - ], - "seconds": [ - "" - ], - "forever": [ - "" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "" - ], - "create order": [ - "" - ], - "load newer orders": [ - "" - ], - "Date": [ - "" - ], - "Refund": [ - "" - ], - "copy url": [ - "" - ], - "load older orders": [ - "" - ], - "No orders have been found matching your query!": [ - "" - ], - "duplicated": [ - "" - ], - "invalid format": [ - "" - ], - "this value exceed the refundable amount": [ - "" - ], - "date": [ - "" - ], - "amount": [ - "" - ], - "reason": [ - "" - ], - "amount to be refunded": [ - "" - ], - "Max refundable:": [ - "" - ], - "Reason": [ - "" - ], - "Choose one...": [ - "" - ], - "requested by the customer": [ - "" - ], - "other": [ - "" - ], - "why this order is being refunded": [ - "" - ], - "more information to give context": [ - "" - ], - "Contract Terms": [ - "" - ], - "human-readable description of the whole purchase": [ - "" - ], - "total price for the transaction": [ - "" - ], - "URL for this purchase": [ - "" - ], - "Max fee": [ - "" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "" - ], - "claimed": [ - "" - ], - "claimed at": [ - "" - ], - "Timeline": [ - "" - ], - "Payment details": [ - "" - ], - "Order status": [ - "" - ], - "Product list": [ - "" - ], - "paid": [ - "" - ], - "wired": [ - "" - ], - "refunded": [ - "" - ], - "refund order": [ - "" - ], - "not refundable": [ - "" - ], - "refund": [ - "" - ], - "Refunded amount": [ - "" - ], - "Refund taken": [ - "" - ], - "Status URL": [ - "" - ], - "Refund URI": [ - "" - ], - "unpaid": [ - "" - ], - "pay at": [ - "" - ], - "created at": [ - "" - ], - "Order status URL": [ - "" - ], - "Payment URI": [ - "" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "" - ], - "Back": [ - "" - ], - "refund created successfully": [ - "" - ], - "could not create the refund": [ - "" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "" - ], - "only show orders with refunds": [ - "" - ], - "Refunded": [ - "" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "" - ], - "order not found": [ - "" - ], - "could not get the order to refund": [ - "" - ], - "Loading...": [ - "" - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "" - ], - "Incoming": [ - "" - ], - "Lost": [ - "" - ], - "Current": [ - "" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "" - ], - "Next restock": [ - "" - ], - "Delivery address": [ - "" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "" - ], - "Products": [ - "" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "" - ], - "Profit": [ - "" - ], - "Sold": [ - "" - ], - "free": [ - "" - ], - "go to product update page": [ - "" - ], - "Update": [ - "" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "" - ], - "product updated successfully": [ - "" - ], - "could not update the product": [ - "" - ], - "product delete successfully": [ - "" - ], - "could not delete the product": [ - "" - ], - "Product id:": [ - "" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "" - ], - "Valid until": [ - "" - ], - "Created balance": [ - "" - ], - "Exchange balance": [ - "" - ], - "Picked up": [ - "" - ], - "Committed": [ - "" - ], - "Account address": [ - "" - ], - "Subject": [ - "" - ], - "Tips": [ - "" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "" - ], - "Expiration": [ - "" - ], - "amount of tip": [ - "" - ], - "Justification": [ - "" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "" - ], - "Expected Balance": [ - "" - ], - "could not create the tip": [ - "" - ], - "should not be empty": [ - "" - ], - "should be greater that 0": [ - "" - ], - "can't be empty": [ - "" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "" - ], - "Amount is required": [ - "" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "" - ], - "could not create order from template": [ - "" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "" - ], - "Default amount": [ - "" - ], - "Default summary": [ - "" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "" - ], - "There is no templates yet, add more pressing the + sign": [ - "" - ], - "template delete successfully": [ - "" - ], - "could not delete the template": [ - "" - ], - "could not update template": [ - "" - ], - "should be one of '%1$s'": [ - "" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "" - ], - "webhook delete successfully": [ - "" - ], - "could not delete the webhook": [ - "" - ], - "check the id, does not look valid": [ - "" - ], - "should have 52 characters, current %1$s": [ - "" - ], - "URL doesn't have the right format": [ - "" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "" - ], - "Transfers": [ - "" - ], - "add new transfer": [ - "" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "" - ], - "Credit": [ - "" - ], - "Confirmed": [ - "" - ], - "Verified": [ - "" - ], - "Executed at": [ - "" - ], - "yes": [ - "" - ], - "no": [ - "" - ], - "unknown": [ - "" - ], - "delete selected transfer from the database": [ - "" - ], - "load more transfer after the last one": [ - "" - ], - "load older transfers": [ - "" - ], - "There is no transfer yet, add more pressing the + sign": [ - "" - ], - "filter by account address": [ - "" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "" - ], - "must be 1 or greater": [ - "" - ], - "max 7 lines": [ - "" - ], - "change authorization configuration": [ - "" - ], - "Need to complete marked fields and choose authorization method": [ - "" - ], - "This is not a valid bitcoin address.": [ - "" - ], - "This is not a valid Ethereum address.": [ - "" - ], - "IBAN numbers usually have more that 4 digits": [ - "" - ], - "IBAN numbers usually have less that 34 digits": [ - "" - ], - "IBAN country code not found": [ - "" - ], - "IBAN number is not valid, checksum is wrong": [ - "" - ], - "Target type": [ - "" - ], - "Method to use for wire transfer": [ - "" - ], - "Routing": [ - "" - ], - "Routing number.": [ - "" - ], - "Account": [ - "" - ], - "Account number.": [ - "" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "" - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "" - ], - "Default payment delay": [ - "" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "" - ], - "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.": [ - "" - ], - "Instance id": [ - "" - ], - "Change the authorization method use for this instance.": [ - "" - ], - "Manage access token": [ - "" - ], - "Failed to create instance": [ - "" - ], - "Login required": [ - "" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "" - ], - "Settings": [ - "" - ], - "Connection": [ - "" - ], - "New": [ - "" - ], - "List": [ - "" - ], - "Log out": [ - "" - ], - "Check your token is valid": [ - "" - ], - "Couldn't access the server.": [ - "" - ], - "Could not infer instance id from url %1$s": [ - "" - ], - "Server not found": [ - "" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "" - ], - "The value %1$s is invalid for a payment url": [ - "" - ], - "add element to the list": [ - "" - ], - "add": [ - "" - ], - "Deleting": [ - "" - ], - "Changing": [ - "" - ], - "Order ID": [ - "" - ], - "Payment URL": [ - "" - ] - } - } -}; -strings["es"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=n != 1;", - "lang": "es" - }, - "Cancel": [ - "Cancelar" - ], - "%1$s": [ - "%1$s" - ], - "Close": [ - "" - ], - "Continue": [ - "Continuar" - ], - "Clear": [ - "Limpiar" - ], - "Confirm": [ - "Confirmar" - ], - "is not the same as the current access token": [ - "no es el mismo que el token de acceso actual" - ], - "cannot be empty": [ - "no puede ser vac\xEDo" - ], - "cannot be the same as the old token": [ - "no puede ser igual al viejo token" - ], - "is not the same": [ - "no son iguales" - ], - "You are updating the access token from instance with id %1$s": [ - "Est\xE1 actualizando el token de acceso para la instancia con id %1$s" - ], - "Old access token": [ - "Viejo token de acceso" - ], - "access token currently in use": [ - "acceder al token en uso actualmente" - ], - "New access token": [ - "Nuevo token de acceso" - ], - "next access token to be used": [ - "siguiente token de acceso a usar" - ], - "Repeat access token": [ - "Repetir token de acceso" - ], - "confirm the same access token": [ - "confirmar el mismo token de acceso" - ], - "Clearing the access token will mean public access to the instance": [ - "Limpiar el token de acceso significa acceso p\xFAblico a la instancia" - ], - "cannot be the same as the old access token": [ - "no puede ser igual al anterior token de acceso" - ], - "You are setting the access token for the new instance": [ - "Est\xE1 estableciendo el token de acceso para la nueva instancia" - ], - "With external authorization method no check will be done by the merchant backend": [ - "Con el m\xE9todo de autorizaci\xF3n externa no se har\xE1 ninguna revisi\xF3n por el backend del comerciante" - ], - "Set external authorization": [ - "Establecer autorizaci\xF3n externa" - ], - "Set access token": [ - "Establecer token de acceso" - ], - "Operation in progress...": [ - "Operaci\xF3n en progreso..." - ], - "The operation will be automatically canceled after %1$s seconds": [ - "La operaci\xF3n ser\xE1 autom\xE1ticamente cancelada luego de %1$s segundos" - ], - "Instances": [ - "Instancias" - ], - "Delete": [ - "Eliminar" - ], - "add new instance": [ - "agregar nueva instancia" - ], - "ID": [ - "ID" - ], - "Name": [ - "Nombre" - ], - "Edit": [ - "Editar" - ], - "Purge": [ - "Purgar" - ], - "There is no instances yet, add more pressing the + sign": [ - "Todav\xEDa no hay instancias, agregue m\xE1s presionando el signo +" - ], - "Only show active instances": [ - "Solo mostrar instancias activas" - ], - "Active": [ - "Activo" - ], - "Only show deleted instances": [ - "Mostrar solo instancias eliminadas" - ], - "Deleted": [ - "Eliminado" - ], - "Show all instances": [ - "Mostrar todas las instancias" - ], - "All": [ - "Todo" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "La instancia '%1$s' (ID: %2$s) fue eliminada" - ], - "Failed to delete instance": [ - "Fallo al eliminar instancia" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "Instance '%1$s' (ID: %2$s) ha sido deshabilitada" - ], - "Failed to purge instance": [ - "Fallo al purgar la instancia" - ], - "Pending KYC verification": [ - "Verificaci\xF3n KYC pendiente" - ], - "Timed out": [ - "Expirado" - ], - "Exchange": [ - "Exchange" - ], - "Target account": [ - "Cuenta objetivo" - ], - "KYC URL": [ - "URL de KYC" - ], - "Code": [ - "C\xF3digo" - ], - "Http Status": [ - "Estado http" - ], - "No pending kyc verification!": [ - "\xA1No hay verificaci\xF3n kyc pendiente!" - ], - "change value to unknown date": [ - "cambiar valor a fecha desconocida" - ], - "change value to empty": [ - "cambiar valor a vac\xEDo" - ], - "clear": [ - "limpiar" - ], - "change value to never": [ - "cambiar valor a nunca" - ], - "never": [ - "nunca" - ], - "Country": [ - "Pa\xEDs" - ], - "Address": [ - "Direcci\xF3n" - ], - "Building number": [ - "N\xFAmero de edificio" - ], - "Building name": [ - "Nombre de edificio" - ], - "Street": [ - "Calle" - ], - "Post code": [ - "C\xF3digo postal" - ], - "Town location": [ - "Ubicaci\xF3n de ciudad" - ], - "Town": [ - "Ciudad" - ], - "District": [ - "Distrito" - ], - "Country subdivision": [ - "Subdivisi\xF3n de pa\xEDs" - ], - "Product id": [ - "Id de producto" - ], - "Description": [ - "Descripcion" - ], - "Product": [ - "Productos" - ], - "search products by it's description or id": [ - "buscar productos por su descripci\xF3n o ID" - ], - "no products found with that description": [ - "no se encontraron productos con esa descripci\xF3n" - ], - "You must enter a valid product identifier.": [ - "Debe ingresar un identificador de producto v\xE1lido." - ], - "Quantity must be greater than 0!": [ - "\xA1Cantidad debe ser mayor que 0!" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "Esta cantidad excede las existencias restantes. Actualmente, solo quedan %1$s unidades sin reservar en las existencias." - ], - "Quantity": [ - "Cantidad" - ], - "how many products will be added": [ - "cu\xE1ntos productos ser\xE1n agregados" - ], - "Add from inventory": [ - "Agregar del inventario" - ], - "Image should be smaller than 1 MB": [ - "La imagen debe ser mas chica que 1 MB" - ], - "Add": [ - "Agregar" - ], - "Remove": [ - "Eliminar" - ], - "No taxes configured for this product.": [ - "Ningun impuesto configurado para este producto." - ], - "Amount": [ - "Monto" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "Impuestos pueden estar en divisas que difieren de la principal divisa usada por el comerciante." - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "Ingrese divisa y valor separado por dos puntos, e.g. "USD:2.3"." - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "Nombre legal del impuesto, e.g. IVA o arancel." - ], - "add tax to the tax list": [ - "agregar impuesto a la lista de impuestos" - ], - "describe and add a product that is not in the inventory list": [ - "describa y agregue un producto que no est\xE1 en la lista de inventarios" - ], - "Add custom product": [ - "Agregue un producto personalizado" - ], - "Complete information of the product": [ - "Complete informaci\xF3n del producto" - ], - "Image": [ - "Imagen" - ], - "photo of the product": [ - "foto del producto" - ], - "full product description": [ - "descripci\xF3n completa del producto" - ], - "Unit": [ - "Unidad" - ], - "name of the product unit": [ - "nombre de la unidad del producto" - ], - "Price": [ - "Precio" - ], - "amount in the current currency": [ - "monto de la divisa actual" - ], - "Taxes": [ - "Impuestos" - ], - "image": [ - "imagen" - ], - "description": [ - "descripci\xF3n" - ], - "quantity": [ - "cantidad" - ], - "unit price": [ - "precio unitario" - ], - "total price": [ - "precio total" - ], - "required": [ - "requerido" - ], - "not valid": [ - "no es un json v\xE1lido" - ], - "must be greater than 0": [ - "debe ser mayor que 0" - ], - "not a valid json": [ - "no es un json v\xE1lido" - ], - "should be in the future": [ - "deber\xEDan ser en el futuro" - ], - "refund deadline cannot be before pay deadline": [ - "plazo de reembolso no puede ser antes que el plazo de pago" - ], - "wire transfer deadline cannot be before refund deadline": [ - "el plazo de la transferencia bancaria no puede ser antes que el plazo de reembolso" - ], - "wire transfer deadline cannot be before pay deadline": [ - "el plazo de la transferencia bancaria no puede ser antes que el plazo de pago" - ], - "should have a refund deadline": [ - "deber\xEDa tener un plazo de reembolso" - ], - "auto refund cannot be after refund deadline": [ - "reembolso autom\xE1tico no puede ser despu\xE9s qu el plazo de reembolso" - ], - "Manage products in order": [ - "Manejar productos en orden" - ], - "Manage list of products in the order.": [ - "Manejar lista de productos en la orden." - ], - "Remove this product from the order.": [ - "Remover este producto de la orden." - ], - "Total price": [ - "Precio total" - ], - "total product price added up": [ - "precio total de producto agregado" - ], - "Amount to be paid by the customer": [ - "Monto a ser pagado por el cliente" - ], - "Order price": [ - "Precio de la orden" - ], - "final order price": [ - "Precio final de la orden" - ], - "Summary": [ - "Resumen" - ], - "Title of the order to be shown to the customer": [ - "T\xEDtulo de la orden a ser mostrado al cliente" - ], - "Shipping and Fulfillment": [ - "Env\xEDo y cumplimiento" - ], - "Delivery date": [ - "Fecha de entrega" - ], - "Deadline for physical delivery assured by the merchant.": [ - "Plazo para la entrega f\xEDsica asegurado por el comerciante." - ], - "Location": [ - "Ubicaci\xF3n" - ], - "address where the products will be delivered": [ - "direcci\xF3n a donde los productos ser\xE1n entregados" - ], - "Fulfillment URL": [ - "URL de cumplimiento" - ], - "URL to which the user will be redirected after successful payment.": [ - "URL al cual el usuario ser\xE1 redirigido luego de pago exitoso." - ], - "Taler payment options": [ - "Opciones de pago de Taler" - ], - "Override default Taler payment settings for this order": [ - "Sobreescribir pagos por omisi\xF3n de Taler para esta orden" - ], - "Payment deadline": [ - "Plazo de pago" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "Plazo l\xEDmite para que el cliente pague por la oferta antes de que expire. Productos del inventario ser\xE1n reservados hasta este plazo l\xEDmite." - ], - "Refund deadline": [ - "Plazo de reembolso" - ], - "Time until which the order can be refunded by the merchant.": [ - "Tiempo hasta el cual la orden puede ser reembolsada por el comerciante." - ], - "Wire transfer deadline": [ - "Plazo de la transferencia" - ], - "Deadline for the exchange to make the wire transfer.": [ - "Plazo para que el exchange haga la transferencia." - ], - "Auto-refund deadline": [ - "Plazo de reembolso autom\xE1tico" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "Tiempo hasta el cual la billetera ser\xE1 autom\xE1ticamente revisada por reembolsos win interaci\xF3n por parte del usuario." - ], - "Maximum deposit fee": [ - "M\xE1xima tarifa de dep\xF3sito" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "M\xE1xima tarifa de dep\xF3sito que el comerciante esta dispuesto a cubir para esta orden. Mayores tarifas de dep\xF3sito deben ser cubiertas completamente por el consumidor." - ], - "Maximum wire fee": [ - "M\xE1xima tarifa de transferencia" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "Amortizaci\xF3n de comisi\xF3n de transferencia" - ], - "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.": [ - "" - ], - "Create token": [ - "Administrar token" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "Login necesario" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "Informaci\xF3n extra" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "d\xEDas" - ], - "hours": [ - "horas" - ], - "minutes": [ - "minutos" - ], - "seconds": [ - "segundos" - ], - "forever": [ - "nunca" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "\xD3rdenes" - ], - "create order": [ - "creado" - ], - "load newer orders": [ - "cargar nuevas ordenes" - ], - "Date": [ - "Fecha" - ], - "Refund": [ - "Devoluci\xF3n" - ], - "copy url": [ - "copiar url" - ], - "load older orders": [ - "cargar viejas ordenes" - ], - "No orders have been found matching your query!": [ - "\xA1No se encontraron \xF3rdenes que emparejen su b\xFAsqueda!" - ], - "duplicated": [ - "duplicado" - ], - "invalid format": [ - "formato inv\xE1lido" - ], - "this value exceed the refundable amount": [ - "este monto excede el monto reembolsable" - ], - "date": [ - "fecha" - ], - "amount": [ - "monto" - ], - "reason": [ - "raz\xF3n" - ], - "amount to be refunded": [ - "monto a ser reembolsado" - ], - "Max refundable:": [ - "M\xE1ximo reembolzable:" - ], - "Reason": [ - "Raz\xF3n" - ], - "Choose one...": [ - "Elija uno..." - ], - "requested by the customer": [ - "pedido por el consumidor" - ], - "other": [ - "otro" - ], - "why this order is being refunded": [ - "por qu\xE9 esta orden est\xE1 siendo reembolsada" - ], - "more information to give context": [ - "m\xE1s informaci\xF3n para dar contexto" - ], - "Contract Terms": [ - "T\xE9rminos de contrato" - ], - "human-readable description of the whole purchase": [ - "descripci\xF3n legible de toda la compra" - ], - "total price for the transaction": [ - "precio total de la transacci\xF3n" - ], - "URL for this purchase": [ - "URL para esta compra" - ], - "Max fee": [ - "M\xE1xima comisi\xF3n" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "Impuesto de transferencia m\xE1ximo" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "Creado en" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "Plazo de reembolso autom\xE1tico" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "Informaci\xF3n extra" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "Orden" - ], - "claimed": [ - "reclamado" - ], - "claimed at": [ - "reclamado" - ], - "Timeline": [ - "Cronolog\xEDa" - ], - "Payment details": [ - "Detalles de pago" - ], - "Order status": [ - "Estado de orden" - ], - "Product list": [ - "Lista de producto" - ], - "paid": [ - "pagados" - ], - "wired": [ - "transferido" - ], - "refunded": [ - "reembolzado" - ], - "refund order": [ - "reembolzado" - ], - "not refundable": [ - "M\xE1ximo reembolzable:" - ], - "refund": [ - "reembolzar" - ], - "Refunded amount": [ - "Monto reembolzado" - ], - "Refund taken": [ - "Reembolzado" - ], - "Status URL": [ - "URL de estado de orden" - ], - "Refund URI": [ - "Devoluci\xF3n" - ], - "unpaid": [ - "impago" - ], - "pay at": [ - "pagar en" - ], - "created at": [ - "creado" - ], - "Order status URL": [ - "URL de estado de orden" - ], - "Payment URI": [ - "URI de pago" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "Estado de orden desconocido. Esto es un error, por favor contacte a su administrador." - ], - "Back": [ - "" - ], - "refund created successfully": [ - "reembolzo creado satisfactoriamente" - ], - "could not create the refund": [ - "No se pudo create el reembolso" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "ir a id de orden" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "Pagado" - ], - "only show orders with refunds": [ - "No se pudo create el reembolso" - ], - "Refunded": [ - "Reembolzado" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "No transferido" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "ir a id de orden" - ], - "order not found": [ - "Servidor no encontrado" - ], - "could not get the order to refund": [ - "No se pudo create el reembolso" - ], - "Loading...": [ - "Cargando..." - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "Administrar stock" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "Inifinito" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "la p\xE9rdida no puede ser mayor al stock actual + entrante (max %1$s )" - ], - "Incoming": [ - "Ingresando" - ], - "Lost": [ - "Perdido" - ], - "Current": [ - "Actual" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "sin stock" - ], - "Next restock": [ - "Pr\xF3ximo reabastecimiento" - ], - "Delivery address": [ - "Direcci\xF3n de entrega" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "Existencias" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "no se pudo crear el producto" - ], - "Products": [ - "Productos" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "Venta" - ], - "Profit": [ - "Ganancia" - ], - "Sold": [ - "Vendido" - ], - "free": [ - "Gratis" - ], - "go to product update page": [ - "producto actualizado correctamente" - ], - "Update": [ - "Actualizar" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "no se pudo actualizar el producto" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "No hay propinas todav\xEDa, agregar mas presionando el signo +" - ], - "product updated successfully": [ - "producto actualizado correctamente" - ], - "could not update the product": [ - "no se pudo actualizar el producto" - ], - "product delete successfully": [ - "producto fue eliminado correctamente" - ], - "could not delete the product": [ - "no se pudo eliminar el producto" - ], - "Product id:": [ - "Id de producto" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "Debe ser mayor a 0" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "Instancia" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "URL del Exchange" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "Siguiente" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "no se pudo informar la transferencia" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "No se pudo create el reembolso" - ], - "Valid until": [ - "V\xE1lido hasta" - ], - "Created balance": [ - "creado" - ], - "Exchange balance": [ - "Monto inicial" - ], - "Picked up": [ - "" - ], - "Committed": [ - "Monto confirmado" - ], - "Account address": [ - "Direcci\xF3n de cuenta" - ], - "Subject": [ - "Asunto" - ], - "Tips": [ - "Propinas" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "Token de autorizaci\xF3n" - ], - "Expiration": [ - "Informaci\xF3n extra" - ], - "amount of tip": [ - "monto" - ], - "Justification": [ - "Jurisdicci\xF3n" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "Servidor no encontrado" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "cargar nuevas transferencias" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "No hay transferencias todav\xEDa, agregar mas presionando el signo +" - ], - "Expected Balance": [ - "Ejecutado en" - ], - "could not create the tip": [ - "No se pudo create el reembolso" - ], - "should not be empty": [ - "no puede ser vac\xEDo" - ], - "should be greater that 0": [ - "Debe ser mayor a 0" - ], - "can't be empty": [ - "no puede ser vac\xEDo" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "Estado de orden" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "precio unitario" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "Edad m\xEDnima" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "Opciones de pago" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "no se pudo informar la transferencia" - ], - "Amount is required": [ - "Login necesario" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "cargar viejas transferencias" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "Estado de orden" - ], - "could not create order from template": [ - "No se pudo create el reembolso" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "Monto reembolzado" - ], - "Default amount": [ - "Monto reembolzado" - ], - "Default summary": [ - "Estado de orden" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "cargar nuevas transferencias" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "No se pudo create el reembolso" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "cargar viejas transferencias" - ], - "There is no templates yet, add more pressing the + sign": [ - "No hay propinas todav\xEDa, agregar mas presionando el signo +" - ], - "template delete successfully": [ - "producto fue eliminado correctamente" - ], - "could not delete the template": [ - "no se pudo eliminar el producto" - ], - "could not update template": [ - "no se pudo actualizar el producto" - ], - "should be one of '%1$s'": [ - "deber\xEDan ser iguales" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "URL" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "cargar nuevas ordenes" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "cargar viejas ordenes" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "No hay propinas todav\xEDa, agregar mas presionando el signo +" - ], - "webhook delete successfully": [ - "producto fue eliminado correctamente" - ], - "could not delete the webhook": [ - "no se pudo eliminar el producto" - ], - "check the id, does not look valid": [ - "verificar el id, no parece v\xE1lido" - ], - "should have 52 characters, current %1$s": [ - "deber\xEDa tener 52 caracteres, actualmente %1$s" - ], - "URL doesn't have the right format": [ - "La URL no tiene el formato correcto" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "Id de transferencia" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "no se pudo informar la transferencia" - ], - "Transfers": [ - "Transferencias" - ], - "add new transfer": [ - "cargar nuevas transferencias" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "cargar nuevas transferencias" - ], - "Credit": [ - "Cr\xE9dito" - ], - "Confirmed": [ - "Confirmado" - ], - "Verified": [ - "Verificado" - ], - "Executed at": [ - "Ejecutado en" - ], - "yes": [ - "si" - ], - "no": [ - "no" - ], - "unknown": [ - "desconocido" - ], - "delete selected transfer from the database": [ - "eliminar transferencia seleccionada de la base de datos" - ], - "load more transfer after the last one": [ - "cargue m\xE1s transferencia luego de la \xFAltima" - ], - "load older transfers": [ - "cargar viejas transferencias" - ], - "There is no transfer yet, add more pressing the + sign": [ - "No hay transferencias todav\xEDa, agregar mas presionando el signo +" - ], - "filter by account address": [ - "Direcci\xF3n de cuenta" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "Verificado" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "N\xFAmero de edificio" - ], - "must be 1 or greater": [ - "debe ser 1 o mayor" - ], - "max 7 lines": [ - "m\xE1ximo 7 l\xEDneas" - ], - "change authorization configuration": [ - "cambiar configuraci\xF3n de autorizaci\xF3n" - ], - "Need to complete marked fields and choose authorization method": [ - "Necesita completar campos marcados y escoger un m\xE9todo de autorizaci\xF3n" - ], - "This is not a valid bitcoin address.": [ - "Esta no es una direcci\xF3n de bitcoin v\xE1lida." - ], - "This is not a valid Ethereum address.": [ - "Esta no es una direcci\xF3n de Ethereum v\xE1lida." - ], - "IBAN numbers usually have more that 4 digits": [ - "N\xFAmeros IBAN usualmente tienen m\xE1s de 4 d\xEDgitos" - ], - "IBAN numbers usually have less that 34 digits": [ - "N\xFAmero IBAN usualmente tienen menos de 34 d\xEDgitos" - ], - "IBAN country code not found": [ - "C\xF3digo IBAN de pa\xEDs no encontrado" - ], - "IBAN number is not valid, checksum is wrong": [ - "N\xFAmero IBAN no es v\xE1lido, la suma de verificaci\xF3n es incorrecta" - ], - "Target type": [ - "Tipo objetivo" - ], - "Method to use for wire transfer": [ - "M\xE9todo a usar para la transferencia" - ], - "Routing": [ - "Enrutamiento" - ], - "Routing number.": [ - "N\xFAmero de enrutamiento." - ], - "Account": [ - "Cuenta" - ], - "Account number.": [ - "Direcci\xF3n de cuenta" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "Interfaz de pago unificado." - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "Nombre de edificio" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "URL de sitio web" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "Cuenta bancaria" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "Impuesto m\xE1ximo de deposito por omisi\xF3n" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "Impuesto m\xE1ximo de transferencia por omisi\xF3n" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "Amortizaci\xF3n de impuesto de transferencia por omisi\xF3n" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "Jurisdicci\xF3n" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "Jurisdicci\xF3n para disputas legales con el comerciante." - ], - "Default payment delay": [ - "Retrazo de pago por omisi\xF3n" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "Retrazo de transferencia por omisi\xF3n" - ], - "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.": [ - "" - ], - "Instance id": [ - "ID de instancia" - ], - "Change the authorization method use for this instance.": [ - "Limpiar el token de autorizaci\xF3n significa acceso p\xFAblico a la instancia" - ], - "Manage access token": [ - "Administrar token de acceso" - ], - "Failed to create instance": [ - "Fallo al crear la instancia" - ], - "Login required": [ - "Login necesario" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "Acceso denegado" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "Servidir reporto un problema: HTTP status #%1$s" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "Acceso denegado" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "Sin instancia default" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "Instancia" - ], - "Settings": [ - "Configuraci\xF3n" - ], - "Connection": [ - "Conexi\xF3n" - ], - "New": [ - "Nuevo" - ], - "List": [ - "Lista" - ], - "Log out": [ - "Salir" - ], - "Check your token is valid": [ - "Verifica que el token sea valido" - ], - "Couldn't access the server.": [ - "No se pudo acceder al servidor." - ], - "Could not infer instance id from url %1$s": [ - "No se pudo inferir el id de la instancia con la url %1$s" - ], - "Server not found": [ - "Servidor no encontrado" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "Recibimos el mensaje %1$s desde %2$s" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "Error inesperado" - ], - "The value %1$s is invalid for a payment url": [ - "El valor %1$s es invalido para una URL de pago" - ], - "add element to the list": [ - "agregar elemento a la lista" - ], - "add": [ - "Agregar" - ], - "Deleting": [ - "Borrando" - ], - "Changing": [ - "Cambiando" - ], - "Order ID": [ - "ID de pedido" - ], - "Payment URL": [ - "URL de pago" - ] - } - } -}; -strings["fr"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=(n != 1);", - "lang": "" - }, - "Cancel": [ - "" - ], - "%1$s": [ - "" - ], - "Close": [ - "" - ], - "Continue": [ - "" - ], - "Clear": [ - "" - ], - "Confirm": [ - "" - ], - "is not the same as the current access token": [ - "" - ], - "cannot be empty": [ - "" - ], - "cannot be the same as the old token": [ - "" - ], - "is not the same": [ - "" - ], - "You are updating the access token from instance with id %1$s": [ - "" - ], - "Old access token": [ - "" - ], - "access token currently in use": [ - "" - ], - "New access token": [ - "" - ], - "next access token to be used": [ - "" - ], - "Repeat access token": [ - "" - ], - "confirm the same access token": [ - "" - ], - "Clearing the access token will mean public access to the instance": [ - "" - ], - "cannot be the same as the old access token": [ - "" - ], - "You are setting the access token for the new instance": [ - "" - ], - "With external authorization method no check will be done by the merchant backend": [ - "" - ], - "Set external authorization": [ - "" - ], - "Set access token": [ - "" - ], - "Operation in progress...": [ - "" - ], - "The operation will be automatically canceled after %1$s seconds": [ - "" - ], - "Instances": [ - "" - ], - "Delete": [ - "" - ], - "add new instance": [ - "" - ], - "ID": [ - "" - ], - "Name": [ - "" - ], - "Edit": [ - "" - ], - "Purge": [ - "" - ], - "There is no instances yet, add more pressing the + sign": [ - "" - ], - "Only show active instances": [ - "" - ], - "Active": [ - "" - ], - "Only show deleted instances": [ - "" - ], - "Deleted": [ - "" - ], - "Show all instances": [ - "" - ], - "All": [ - "" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "" - ], - "Failed to delete instance": [ - "" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "" - ], - "Failed to purge instance": [ - "" - ], - "Pending KYC verification": [ - "" - ], - "Timed out": [ - "" - ], - "Exchange": [ - "" - ], - "Target account": [ - "" - ], - "KYC URL": [ - "" - ], - "Code": [ - "" - ], - "Http Status": [ - "" - ], - "No pending kyc verification!": [ - "" - ], - "change value to unknown date": [ - "" - ], - "change value to empty": [ - "" - ], - "clear": [ - "" - ], - "change value to never": [ - "" - ], - "never": [ - "" - ], - "Country": [ - "" - ], - "Address": [ - "" - ], - "Building number": [ - "" - ], - "Building name": [ - "" - ], - "Street": [ - "" - ], - "Post code": [ - "" - ], - "Town location": [ - "" - ], - "Town": [ - "" - ], - "District": [ - "" - ], - "Country subdivision": [ - "" - ], - "Product id": [ - "" - ], - "Description": [ - "" - ], - "Product": [ - "" - ], - "search products by it's description or id": [ - "" - ], - "no products found with that description": [ - "" - ], - "You must enter a valid product identifier.": [ - "" - ], - "Quantity must be greater than 0!": [ - "" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "" - ], - "Quantity": [ - "" - ], - "how many products will be added": [ - "" - ], - "Add from inventory": [ - "" - ], - "Image should be smaller than 1 MB": [ - "" - ], - "Add": [ - "" - ], - "Remove": [ - "" - ], - "No taxes configured for this product.": [ - "" - ], - "Amount": [ - "" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "" - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "" - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "" - ], - "add tax to the tax list": [ - "" - ], - "describe and add a product that is not in the inventory list": [ - "" - ], - "Add custom product": [ - "" - ], - "Complete information of the product": [ - "" - ], - "Image": [ - "" - ], - "photo of the product": [ - "" - ], - "full product description": [ - "" - ], - "Unit": [ - "" - ], - "name of the product unit": [ - "" - ], - "Price": [ - "" - ], - "amount in the current currency": [ - "" - ], - "Taxes": [ - "" - ], - "image": [ - "" - ], - "description": [ - "" - ], - "quantity": [ - "" - ], - "unit price": [ - "" - ], - "total price": [ - "" - ], - "required": [ - "" - ], - "not valid": [ - "" - ], - "must be greater than 0": [ - "" - ], - "not a valid json": [ - "" - ], - "should be in the future": [ - "" - ], - "refund deadline cannot be before pay deadline": [ - "" - ], - "wire transfer deadline cannot be before refund deadline": [ - "" - ], - "wire transfer deadline cannot be before pay deadline": [ - "" - ], - "should have a refund deadline": [ - "" - ], - "auto refund cannot be after refund deadline": [ - "" - ], - "Manage products in order": [ - "" - ], - "Manage list of products in the order.": [ - "" - ], - "Remove this product from the order.": [ - "" - ], - "Total price": [ - "" - ], - "total product price added up": [ - "" - ], - "Amount to be paid by the customer": [ - "" - ], - "Order price": [ - "" - ], - "final order price": [ - "" - ], - "Summary": [ - "" - ], - "Title of the order to be shown to the customer": [ - "" - ], - "Shipping and Fulfillment": [ - "" - ], - "Delivery date": [ - "" - ], - "Deadline for physical delivery assured by the merchant.": [ - "" - ], - "Location": [ - "" - ], - "address where the products will be delivered": [ - "" - ], - "Fulfillment URL": [ - "" - ], - "URL to which the user will be redirected after successful payment.": [ - "" - ], - "Taler payment options": [ - "" - ], - "Override default Taler payment settings for this order": [ - "" - ], - "Payment deadline": [ - "" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "" - ], - "Refund deadline": [ - "" - ], - "Time until which the order can be refunded by the merchant.": [ - "" - ], - "Wire transfer deadline": [ - "" - ], - "Deadline for the exchange to make the wire transfer.": [ - "" - ], - "Auto-refund deadline": [ - "" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "" - ], - "Maximum deposit fee": [ - "" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "" - ], - "Maximum wire fee": [ - "" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "" - ], - "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.": [ - "" - ], - "Create token": [ - "" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "" - ], - "hours": [ - "" - ], - "minutes": [ - "" - ], - "seconds": [ - "" - ], - "forever": [ - "" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "" - ], - "create order": [ - "" - ], - "load newer orders": [ - "" - ], - "Date": [ - "" - ], - "Refund": [ - "" - ], - "copy url": [ - "" - ], - "load older orders": [ - "" - ], - "No orders have been found matching your query!": [ - "" - ], - "duplicated": [ - "" - ], - "invalid format": [ - "" - ], - "this value exceed the refundable amount": [ - "" - ], - "date": [ - "" - ], - "amount": [ - "" - ], - "reason": [ - "" - ], - "amount to be refunded": [ - "" - ], - "Max refundable:": [ - "" - ], - "Reason": [ - "" - ], - "Choose one...": [ - "" - ], - "requested by the customer": [ - "" - ], - "other": [ - "" - ], - "why this order is being refunded": [ - "" - ], - "more information to give context": [ - "" - ], - "Contract Terms": [ - "" - ], - "human-readable description of the whole purchase": [ - "" - ], - "total price for the transaction": [ - "" - ], - "URL for this purchase": [ - "" - ], - "Max fee": [ - "" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "" - ], - "claimed": [ - "" - ], - "claimed at": [ - "" - ], - "Timeline": [ - "" - ], - "Payment details": [ - "" - ], - "Order status": [ - "" - ], - "Product list": [ - "" - ], - "paid": [ - "" - ], - "wired": [ - "" - ], - "refunded": [ - "" - ], - "refund order": [ - "" - ], - "not refundable": [ - "" - ], - "refund": [ - "" - ], - "Refunded amount": [ - "" - ], - "Refund taken": [ - "" - ], - "Status URL": [ - "" - ], - "Refund URI": [ - "" - ], - "unpaid": [ - "" - ], - "pay at": [ - "" - ], - "created at": [ - "" - ], - "Order status URL": [ - "" - ], - "Payment URI": [ - "" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "" - ], - "Back": [ - "" - ], - "refund created successfully": [ - "" - ], - "could not create the refund": [ - "" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "" - ], - "only show orders with refunds": [ - "" - ], - "Refunded": [ - "" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "" - ], - "order not found": [ - "" - ], - "could not get the order to refund": [ - "" - ], - "Loading...": [ - "" - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "" - ], - "Incoming": [ - "" - ], - "Lost": [ - "" - ], - "Current": [ - "" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "" - ], - "Next restock": [ - "" - ], - "Delivery address": [ - "" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "" - ], - "Products": [ - "" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "" - ], - "Profit": [ - "" - ], - "Sold": [ - "" - ], - "free": [ - "" - ], - "go to product update page": [ - "" - ], - "Update": [ - "" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "" - ], - "product updated successfully": [ - "" - ], - "could not update the product": [ - "" - ], - "product delete successfully": [ - "" - ], - "could not delete the product": [ - "" - ], - "Product id:": [ - "" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "" - ], - "Valid until": [ - "" - ], - "Created balance": [ - "" - ], - "Exchange balance": [ - "" - ], - "Picked up": [ - "" - ], - "Committed": [ - "" - ], - "Account address": [ - "" - ], - "Subject": [ - "" - ], - "Tips": [ - "" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "" - ], - "Expiration": [ - "" - ], - "amount of tip": [ - "" - ], - "Justification": [ - "" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "" - ], - "Expected Balance": [ - "" - ], - "could not create the tip": [ - "" - ], - "should not be empty": [ - "" - ], - "should be greater that 0": [ - "" - ], - "can't be empty": [ - "" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "" - ], - "Amount is required": [ - "" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "" - ], - "could not create order from template": [ - "" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "" - ], - "Default amount": [ - "" - ], - "Default summary": [ - "" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "" - ], - "There is no templates yet, add more pressing the + sign": [ - "" - ], - "template delete successfully": [ - "" - ], - "could not delete the template": [ - "" - ], - "could not update template": [ - "" - ], - "should be one of '%1$s'": [ - "" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "" - ], - "webhook delete successfully": [ - "" - ], - "could not delete the webhook": [ - "" - ], - "check the id, does not look valid": [ - "" - ], - "should have 52 characters, current %1$s": [ - "" - ], - "URL doesn't have the right format": [ - "" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "" - ], - "Transfers": [ - "" - ], - "add new transfer": [ - "" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "" - ], - "Credit": [ - "" - ], - "Confirmed": [ - "" - ], - "Verified": [ - "" - ], - "Executed at": [ - "" - ], - "yes": [ - "" - ], - "no": [ - "" - ], - "unknown": [ - "" - ], - "delete selected transfer from the database": [ - "" - ], - "load more transfer after the last one": [ - "" - ], - "load older transfers": [ - "" - ], - "There is no transfer yet, add more pressing the + sign": [ - "" - ], - "filter by account address": [ - "" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "" - ], - "must be 1 or greater": [ - "" - ], - "max 7 lines": [ - "" - ], - "change authorization configuration": [ - "" - ], - "Need to complete marked fields and choose authorization method": [ - "" - ], - "This is not a valid bitcoin address.": [ - "" - ], - "This is not a valid Ethereum address.": [ - "" - ], - "IBAN numbers usually have more that 4 digits": [ - "" - ], - "IBAN numbers usually have less that 34 digits": [ - "" - ], - "IBAN country code not found": [ - "" - ], - "IBAN number is not valid, checksum is wrong": [ - "" - ], - "Target type": [ - "" - ], - "Method to use for wire transfer": [ - "" - ], - "Routing": [ - "" - ], - "Routing number.": [ - "" - ], - "Account": [ - "" - ], - "Account number.": [ - "" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "" - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "" - ], - "Default payment delay": [ - "" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "" - ], - "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.": [ - "" - ], - "Instance id": [ - "" - ], - "Change the authorization method use for this instance.": [ - "" - ], - "Manage access token": [ - "" - ], - "Failed to create instance": [ - "" - ], - "Login required": [ - "" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "" - ], - "Settings": [ - "" - ], - "Connection": [ - "" - ], - "New": [ - "" - ], - "List": [ - "" - ], - "Log out": [ - "" - ], - "Check your token is valid": [ - "" - ], - "Couldn't access the server.": [ - "" - ], - "Could not infer instance id from url %1$s": [ - "" - ], - "Server not found": [ - "" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "" - ], - "The value %1$s is invalid for a payment url": [ - "" - ], - "add element to the list": [ - "" - ], - "add": [ - "" - ], - "Deleting": [ - "" - ], - "Changing": [ - "" - ], - "Order ID": [ - "" - ], - "Payment URL": [ - "" - ] - } - } -}; -strings["it"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=(n != 1);", - "lang": "" - }, - "Cancel": [ - "" - ], - "%1$s": [ - "" - ], - "Close": [ - "" - ], - "Continue": [ - "" - ], - "Clear": [ - "" - ], - "Confirm": [ - "" - ], - "is not the same as the current access token": [ - "" - ], - "cannot be empty": [ - "" - ], - "cannot be the same as the old token": [ - "" - ], - "is not the same": [ - "" - ], - "You are updating the access token from instance with id %1$s": [ - "" - ], - "Old access token": [ - "" - ], - "access token currently in use": [ - "" - ], - "New access token": [ - "" - ], - "next access token to be used": [ - "" - ], - "Repeat access token": [ - "" - ], - "confirm the same access token": [ - "" - ], - "Clearing the access token will mean public access to the instance": [ - "" - ], - "cannot be the same as the old access token": [ - "" - ], - "You are setting the access token for the new instance": [ - "" - ], - "With external authorization method no check will be done by the merchant backend": [ - "" - ], - "Set external authorization": [ - "" - ], - "Set access token": [ - "" - ], - "Operation in progress...": [ - "" - ], - "The operation will be automatically canceled after %1$s seconds": [ - "" - ], - "Instances": [ - "" - ], - "Delete": [ - "" - ], - "add new instance": [ - "" - ], - "ID": [ - "" - ], - "Name": [ - "" - ], - "Edit": [ - "" - ], - "Purge": [ - "" - ], - "There is no instances yet, add more pressing the + sign": [ - "" - ], - "Only show active instances": [ - "" - ], - "Active": [ - "" - ], - "Only show deleted instances": [ - "" - ], - "Deleted": [ - "" - ], - "Show all instances": [ - "" - ], - "All": [ - "" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "" - ], - "Failed to delete instance": [ - "" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "" - ], - "Failed to purge instance": [ - "" - ], - "Pending KYC verification": [ - "" - ], - "Timed out": [ - "" - ], - "Exchange": [ - "" - ], - "Target account": [ - "" - ], - "KYC URL": [ - "" - ], - "Code": [ - "" - ], - "Http Status": [ - "" - ], - "No pending kyc verification!": [ - "" - ], - "change value to unknown date": [ - "" - ], - "change value to empty": [ - "" - ], - "clear": [ - "" - ], - "change value to never": [ - "" - ], - "never": [ - "" - ], - "Country": [ - "" - ], - "Address": [ - "" - ], - "Building number": [ - "" - ], - "Building name": [ - "" - ], - "Street": [ - "" - ], - "Post code": [ - "" - ], - "Town location": [ - "" - ], - "Town": [ - "" - ], - "District": [ - "" - ], - "Country subdivision": [ - "" - ], - "Product id": [ - "" - ], - "Description": [ - "" - ], - "Product": [ - "" - ], - "search products by it's description or id": [ - "" - ], - "no products found with that description": [ - "" - ], - "You must enter a valid product identifier.": [ - "" - ], - "Quantity must be greater than 0!": [ - "" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "" - ], - "Quantity": [ - "" - ], - "how many products will be added": [ - "" - ], - "Add from inventory": [ - "" - ], - "Image should be smaller than 1 MB": [ - "" - ], - "Add": [ - "" - ], - "Remove": [ - "" - ], - "No taxes configured for this product.": [ - "" - ], - "Amount": [ - "" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "" - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "" - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "" - ], - "add tax to the tax list": [ - "" - ], - "describe and add a product that is not in the inventory list": [ - "" - ], - "Add custom product": [ - "" - ], - "Complete information of the product": [ - "" - ], - "Image": [ - "" - ], - "photo of the product": [ - "" - ], - "full product description": [ - "" - ], - "Unit": [ - "" - ], - "name of the product unit": [ - "" - ], - "Price": [ - "" - ], - "amount in the current currency": [ - "" - ], - "Taxes": [ - "" - ], - "image": [ - "" - ], - "description": [ - "" - ], - "quantity": [ - "" - ], - "unit price": [ - "" - ], - "total price": [ - "" - ], - "required": [ - "" - ], - "not valid": [ - "" - ], - "must be greater than 0": [ - "" - ], - "not a valid json": [ - "" - ], - "should be in the future": [ - "" - ], - "refund deadline cannot be before pay deadline": [ - "" - ], - "wire transfer deadline cannot be before refund deadline": [ - "" - ], - "wire transfer deadline cannot be before pay deadline": [ - "" - ], - "should have a refund deadline": [ - "" - ], - "auto refund cannot be after refund deadline": [ - "" - ], - "Manage products in order": [ - "" - ], - "Manage list of products in the order.": [ - "" - ], - "Remove this product from the order.": [ - "" - ], - "Total price": [ - "" - ], - "total product price added up": [ - "" - ], - "Amount to be paid by the customer": [ - "" - ], - "Order price": [ - "" - ], - "final order price": [ - "" - ], - "Summary": [ - "" - ], - "Title of the order to be shown to the customer": [ - "" - ], - "Shipping and Fulfillment": [ - "" - ], - "Delivery date": [ - "" - ], - "Deadline for physical delivery assured by the merchant.": [ - "" - ], - "Location": [ - "" - ], - "address where the products will be delivered": [ - "" - ], - "Fulfillment URL": [ - "" - ], - "URL to which the user will be redirected after successful payment.": [ - "" - ], - "Taler payment options": [ - "" - ], - "Override default Taler payment settings for this order": [ - "" - ], - "Payment deadline": [ - "" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "" - ], - "Refund deadline": [ - "" - ], - "Time until which the order can be refunded by the merchant.": [ - "" - ], - "Wire transfer deadline": [ - "" - ], - "Deadline for the exchange to make the wire transfer.": [ - "" - ], - "Auto-refund deadline": [ - "" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "" - ], - "Maximum deposit fee": [ - "" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "" - ], - "Maximum wire fee": [ - "" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "" - ], - "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.": [ - "" - ], - "Create token": [ - "" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "" - ], - "hours": [ - "" - ], - "minutes": [ - "" - ], - "seconds": [ - "" - ], - "forever": [ - "" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "" - ], - "create order": [ - "" - ], - "load newer orders": [ - "" - ], - "Date": [ - "" - ], - "Refund": [ - "" - ], - "copy url": [ - "" - ], - "load older orders": [ - "" - ], - "No orders have been found matching your query!": [ - "" - ], - "duplicated": [ - "" - ], - "invalid format": [ - "" - ], - "this value exceed the refundable amount": [ - "" - ], - "date": [ - "" - ], - "amount": [ - "" - ], - "reason": [ - "" - ], - "amount to be refunded": [ - "" - ], - "Max refundable:": [ - "" - ], - "Reason": [ - "" - ], - "Choose one...": [ - "" - ], - "requested by the customer": [ - "" - ], - "other": [ - "" - ], - "why this order is being refunded": [ - "" - ], - "more information to give context": [ - "" - ], - "Contract Terms": [ - "" - ], - "human-readable description of the whole purchase": [ - "" - ], - "total price for the transaction": [ - "" - ], - "URL for this purchase": [ - "" - ], - "Max fee": [ - "" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "" - ], - "claimed": [ - "" - ], - "claimed at": [ - "" - ], - "Timeline": [ - "" - ], - "Payment details": [ - "" - ], - "Order status": [ - "" - ], - "Product list": [ - "" - ], - "paid": [ - "" - ], - "wired": [ - "" - ], - "refunded": [ - "" - ], - "refund order": [ - "" - ], - "not refundable": [ - "" - ], - "refund": [ - "" - ], - "Refunded amount": [ - "" - ], - "Refund taken": [ - "" - ], - "Status URL": [ - "" - ], - "Refund URI": [ - "" - ], - "unpaid": [ - "" - ], - "pay at": [ - "" - ], - "created at": [ - "" - ], - "Order status URL": [ - "" - ], - "Payment URI": [ - "" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "" - ], - "Back": [ - "" - ], - "refund created successfully": [ - "" - ], - "could not create the refund": [ - "" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "" - ], - "only show orders with refunds": [ - "" - ], - "Refunded": [ - "" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "" - ], - "order not found": [ - "" - ], - "could not get the order to refund": [ - "" - ], - "Loading...": [ - "" - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "" - ], - "Incoming": [ - "" - ], - "Lost": [ - "" - ], - "Current": [ - "" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "" - ], - "Next restock": [ - "" - ], - "Delivery address": [ - "" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "" - ], - "Products": [ - "" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "" - ], - "Profit": [ - "" - ], - "Sold": [ - "" - ], - "free": [ - "" - ], - "go to product update page": [ - "" - ], - "Update": [ - "" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "" - ], - "product updated successfully": [ - "" - ], - "could not update the product": [ - "" - ], - "product delete successfully": [ - "" - ], - "could not delete the product": [ - "" - ], - "Product id:": [ - "" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "" - ], - "Valid until": [ - "" - ], - "Created balance": [ - "" - ], - "Exchange balance": [ - "" - ], - "Picked up": [ - "" - ], - "Committed": [ - "" - ], - "Account address": [ - "" - ], - "Subject": [ - "" - ], - "Tips": [ - "" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "" - ], - "Expiration": [ - "" - ], - "amount of tip": [ - "" - ], - "Justification": [ - "" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "" - ], - "Expected Balance": [ - "" - ], - "could not create the tip": [ - "" - ], - "should not be empty": [ - "" - ], - "should be greater that 0": [ - "" - ], - "can't be empty": [ - "" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "" - ], - "Amount is required": [ - "" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "" - ], - "could not create order from template": [ - "" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "" - ], - "Default amount": [ - "" - ], - "Default summary": [ - "" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "" - ], - "There is no templates yet, add more pressing the + sign": [ - "" - ], - "template delete successfully": [ - "" - ], - "could not delete the template": [ - "" - ], - "could not update template": [ - "" - ], - "should be one of '%1$s'": [ - "" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "" - ], - "webhook delete successfully": [ - "" - ], - "could not delete the webhook": [ - "" - ], - "check the id, does not look valid": [ - "" - ], - "should have 52 characters, current %1$s": [ - "" - ], - "URL doesn't have the right format": [ - "" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "" - ], - "Transfers": [ - "" - ], - "add new transfer": [ - "" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "" - ], - "Credit": [ - "" - ], - "Confirmed": [ - "" - ], - "Verified": [ - "" - ], - "Executed at": [ - "" - ], - "yes": [ - "" - ], - "no": [ - "" - ], - "unknown": [ - "" - ], - "delete selected transfer from the database": [ - "" - ], - "load more transfer after the last one": [ - "" - ], - "load older transfers": [ - "" - ], - "There is no transfer yet, add more pressing the + sign": [ - "" - ], - "filter by account address": [ - "" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "" - ], - "must be 1 or greater": [ - "" - ], - "max 7 lines": [ - "" - ], - "change authorization configuration": [ - "" - ], - "Need to complete marked fields and choose authorization method": [ - "" - ], - "This is not a valid bitcoin address.": [ - "" - ], - "This is not a valid Ethereum address.": [ - "" - ], - "IBAN numbers usually have more that 4 digits": [ - "" - ], - "IBAN numbers usually have less that 34 digits": [ - "" - ], - "IBAN country code not found": [ - "" - ], - "IBAN number is not valid, checksum is wrong": [ - "" - ], - "Target type": [ - "" - ], - "Method to use for wire transfer": [ - "" - ], - "Routing": [ - "" - ], - "Routing number.": [ - "" - ], - "Account": [ - "" - ], - "Account number.": [ - "" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "" - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "" - ], - "Default payment delay": [ - "" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "" - ], - "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.": [ - "" - ], - "Instance id": [ - "" - ], - "Change the authorization method use for this instance.": [ - "" - ], - "Manage access token": [ - "" - ], - "Failed to create instance": [ - "" - ], - "Login required": [ - "" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "" - ], - "Settings": [ - "" - ], - "Connection": [ - "" - ], - "New": [ - "" - ], - "List": [ - "" - ], - "Log out": [ - "" - ], - "Check your token is valid": [ - "" - ], - "Couldn't access the server.": [ - "" - ], - "Could not infer instance id from url %1$s": [ - "" - ], - "Server not found": [ - "" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "" - ], - "The value %1$s is invalid for a payment url": [ - "" - ], - "add element to the list": [ - "" - ], - "add": [ - "" - ], - "Deleting": [ - "" - ], - "Changing": [ - "" - ], - "Order ID": [ - "" - ], - "Payment URL": [ - "" - ] - } - } -}; -strings["sv"] = { - "domain": "messages", - "locale_data": { - "messages": { - "": { - "domain": "messages", - "plural_forms": "nplurals=2; plural=(n != 1);", - "lang": "" - }, - "Cancel": [ - "" - ], - "%1$s": [ - "" - ], - "Close": [ - "" - ], - "Continue": [ - "" - ], - "Clear": [ - "" - ], - "Confirm": [ - "" - ], - "is not the same as the current access token": [ - "" - ], - "cannot be empty": [ - "" - ], - "cannot be the same as the old token": [ - "" - ], - "is not the same": [ - "" - ], - "You are updating the access token from instance with id %1$s": [ - "" - ], - "Old access token": [ - "" - ], - "access token currently in use": [ - "" - ], - "New access token": [ - "" - ], - "next access token to be used": [ - "" - ], - "Repeat access token": [ - "" - ], - "confirm the same access token": [ - "" - ], - "Clearing the access token will mean public access to the instance": [ - "" - ], - "cannot be the same as the old access token": [ - "" - ], - "You are setting the access token for the new instance": [ - "" - ], - "With external authorization method no check will be done by the merchant backend": [ - "" - ], - "Set external authorization": [ - "" - ], - "Set access token": [ - "" - ], - "Operation in progress...": [ - "" - ], - "The operation will be automatically canceled after %1$s seconds": [ - "" - ], - "Instances": [ - "" - ], - "Delete": [ - "" - ], - "add new instance": [ - "" - ], - "ID": [ - "" - ], - "Name": [ - "" - ], - "Edit": [ - "" - ], - "Purge": [ - "" - ], - "There is no instances yet, add more pressing the + sign": [ - "" - ], - "Only show active instances": [ - "" - ], - "Active": [ - "" - ], - "Only show deleted instances": [ - "" - ], - "Deleted": [ - "" - ], - "Show all instances": [ - "" - ], - "All": [ - "" - ], - 'Instance "%1$s" (ID: %2$s) has been deleted': [ - "" - ], - "Failed to delete instance": [ - "" - ], - "Instance '%1$s' (ID: %2$s) has been disabled": [ - "" - ], - "Failed to purge instance": [ - "" - ], - "Pending KYC verification": [ - "" - ], - "Timed out": [ - "" - ], - "Exchange": [ - "" - ], - "Target account": [ - "" - ], - "KYC URL": [ - "" - ], - "Code": [ - "" - ], - "Http Status": [ - "" - ], - "No pending kyc verification!": [ - "" - ], - "change value to unknown date": [ - "" - ], - "change value to empty": [ - "" - ], - "clear": [ - "" - ], - "change value to never": [ - "" - ], - "never": [ - "" - ], - "Country": [ - "" - ], - "Address": [ - "" - ], - "Building number": [ - "" - ], - "Building name": [ - "" - ], - "Street": [ - "" - ], - "Post code": [ - "" - ], - "Town location": [ - "" - ], - "Town": [ - "" - ], - "District": [ - "" - ], - "Country subdivision": [ - "" - ], - "Product id": [ - "" - ], - "Description": [ - "" - ], - "Product": [ - "" - ], - "search products by it's description or id": [ - "" - ], - "no products found with that description": [ - "" - ], - "You must enter a valid product identifier.": [ - "" - ], - "Quantity must be greater than 0!": [ - "" - ], - "This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.": [ - "" - ], - "Quantity": [ - "" - ], - "how many products will be added": [ - "" - ], - "Add from inventory": [ - "" - ], - "Image should be smaller than 1 MB": [ - "" - ], - "Add": [ - "" - ], - "Remove": [ - "" - ], - "No taxes configured for this product.": [ - "" - ], - "Amount": [ - "" - ], - "Taxes can be in currencies that differ from the main currency used by the merchant.": [ - "" - ], - "Enter currency and value separated with a colon, e.g. "USD:2.3".": [ - "" - ], - "Legal name of the tax, e.g. VAT or import duties.": [ - "" - ], - "add tax to the tax list": [ - "" - ], - "describe and add a product that is not in the inventory list": [ - "" - ], - "Add custom product": [ - "" - ], - "Complete information of the product": [ - "" - ], - "Image": [ - "" - ], - "photo of the product": [ - "" - ], - "full product description": [ - "" - ], - "Unit": [ - "" - ], - "name of the product unit": [ - "" - ], - "Price": [ - "" - ], - "amount in the current currency": [ - "" - ], - "Taxes": [ - "" - ], - "image": [ - "" - ], - "description": [ - "" - ], - "quantity": [ - "" - ], - "unit price": [ - "" - ], - "total price": [ - "" - ], - "required": [ - "" - ], - "not valid": [ - "" - ], - "must be greater than 0": [ - "" - ], - "not a valid json": [ - "" - ], - "should be in the future": [ - "" - ], - "refund deadline cannot be before pay deadline": [ - "" - ], - "wire transfer deadline cannot be before refund deadline": [ - "" - ], - "wire transfer deadline cannot be before pay deadline": [ - "" - ], - "should have a refund deadline": [ - "" - ], - "auto refund cannot be after refund deadline": [ - "" - ], - "Manage products in order": [ - "" - ], - "Manage list of products in the order.": [ - "" - ], - "Remove this product from the order.": [ - "" - ], - "Total price": [ - "" - ], - "total product price added up": [ - "" - ], - "Amount to be paid by the customer": [ - "" - ], - "Order price": [ - "" - ], - "final order price": [ - "" - ], - "Summary": [ - "" - ], - "Title of the order to be shown to the customer": [ - "" - ], - "Shipping and Fulfillment": [ - "" - ], - "Delivery date": [ - "" - ], - "Deadline for physical delivery assured by the merchant.": [ - "" - ], - "Location": [ - "" - ], - "address where the products will be delivered": [ - "" - ], - "Fulfillment URL": [ - "" - ], - "URL to which the user will be redirected after successful payment.": [ - "" - ], - "Taler payment options": [ - "" - ], - "Override default Taler payment settings for this order": [ - "" - ], - "Payment deadline": [ - "" - ], - "Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.": [ - "" - ], - "Refund deadline": [ - "" - ], - "Time until which the order can be refunded by the merchant.": [ - "" - ], - "Wire transfer deadline": [ - "" - ], - "Deadline for the exchange to make the wire transfer.": [ - "" - ], - "Auto-refund deadline": [ - "" - ], - "Time until which the wallet will automatically check for refunds without user interaction.": [ - "" - ], - "Maximum deposit fee": [ - "" - ], - "Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.": [ - "" - ], - "Maximum wire fee": [ - "" - ], - "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.": [ - "" - ], - "Wire fee amortization": [ - "" - ], - "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.": [ - "" - ], - "Create token": [ - "" - ], - "Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.": [ - "" - ], - "Minimum age required": [ - "" - ], - "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": [ - "" - ], - "Min age defined by the producs is %1$s": [ - "" - ], - "Additional information": [ - "" - ], - "Custom information to be included in the contract for this order.": [ - "" - ], - "You must enter a value in JavaScript Object Notation (JSON).": [ - "" - ], - "days": [ - "" - ], - "hours": [ - "" - ], - "minutes": [ - "" - ], - "seconds": [ - "" - ], - "forever": [ - "" - ], - "%1$sM": [ - "" - ], - "%1$sY": [ - "" - ], - "%1$sd": [ - "" - ], - "%1$sh": [ - "" - ], - "%1$smin": [ - "" - ], - "%1$ssec": [ - "" - ], - "Orders": [ - "" - ], - "create order": [ - "" - ], - "load newer orders": [ - "" - ], - "Date": [ - "" - ], - "Refund": [ - "" - ], - "copy url": [ - "" - ], - "load older orders": [ - "" - ], - "No orders have been found matching your query!": [ - "" - ], - "duplicated": [ - "" - ], - "invalid format": [ - "" - ], - "this value exceed the refundable amount": [ - "" - ], - "date": [ - "" - ], - "amount": [ - "" - ], - "reason": [ - "" - ], - "amount to be refunded": [ - "" - ], - "Max refundable:": [ - "" - ], - "Reason": [ - "" - ], - "Choose one...": [ - "" - ], - "requested by the customer": [ - "" - ], - "other": [ - "" - ], - "why this order is being refunded": [ - "" - ], - "more information to give context": [ - "" - ], - "Contract Terms": [ - "" - ], - "human-readable description of the whole purchase": [ - "" - ], - "total price for the transaction": [ - "" - ], - "URL for this purchase": [ - "" - ], - "Max fee": [ - "" - ], - "maximum total deposit fee accepted by the merchant for this contract": [ - "" - ], - "Max wire fee": [ - "" - ], - "maximum wire fee accepted by the merchant": [ - "" - ], - "over how many customer transactions does the merchant expect to amortize wire fees on average": [ - "" - ], - "Created at": [ - "" - ], - "time when this contract was generated": [ - "" - ], - "after this deadline has passed no refunds will be accepted": [ - "" - ], - "after this deadline, the merchant won't accept payments for the contract": [ - "" - ], - "transfer deadline for the exchange": [ - "" - ], - "time indicating when the order should be delivered": [ - "" - ], - "where the order will be delivered": [ - "" - ], - "Auto-refund delay": [ - "" - ], - "how long the wallet should try to get an automatic refund for the purchase": [ - "" - ], - "Extra info": [ - "" - ], - "extra data that is only interpreted by the merchant frontend": [ - "" - ], - "Order": [ - "" - ], - "claimed": [ - "" - ], - "claimed at": [ - "" - ], - "Timeline": [ - "" - ], - "Payment details": [ - "" - ], - "Order status": [ - "" - ], - "Product list": [ - "" - ], - "paid": [ - "" - ], - "wired": [ - "" - ], - "refunded": [ - "" - ], - "refund order": [ - "" - ], - "not refundable": [ - "" - ], - "refund": [ - "" - ], - "Refunded amount": [ - "" - ], - "Refund taken": [ - "" - ], - "Status URL": [ - "" - ], - "Refund URI": [ - "" - ], - "unpaid": [ - "" - ], - "pay at": [ - "" - ], - "created at": [ - "" - ], - "Order status URL": [ - "" - ], - "Payment URI": [ - "" - ], - "Unknown order status. This is an error, please contact the administrator.": [ - "" - ], - "Back": [ - "" - ], - "refund created successfully": [ - "" - ], - "could not create the refund": [ - "" - ], - "select date to show nearby orders": [ - "" - ], - "order id": [ - "" - ], - "jump to order with the given order ID": [ - "" - ], - "remove all filters": [ - "" - ], - "only show paid orders": [ - "" - ], - "Paid": [ - "" - ], - "only show orders with refunds": [ - "" - ], - "Refunded": [ - "" - ], - "only show orders where customers paid, but wire payments from payment provider are still pending": [ - "" - ], - "Not wired": [ - "" - ], - "clear date filter": [ - "" - ], - "date (YYYY/MM/DD)": [ - "" - ], - "Enter an order id": [ - "" - ], - "order not found": [ - "" - ], - "could not get the order to refund": [ - "" - ], - "Loading...": [ - "" - ], - "click here to configure the stock of the product, leave it as is and the backend will not control stock": [ - "" - ], - "Manage stock": [ - "" - ], - "this product has been configured without stock control": [ - "" - ], - "Infinite": [ - "" - ], - "lost cannot be greater than current and incoming (max %1$s)": [ - "" - ], - "Incoming": [ - "" - ], - "Lost": [ - "" - ], - "Current": [ - "" - ], - "remove stock control for this product": [ - "" - ], - "without stock": [ - "" - ], - "Next restock": [ - "" - ], - "Delivery address": [ - "" - ], - "product identification to use in URLs (for internal use only)": [ - "" - ], - "illustration of the product for customers": [ - "" - ], - "product description for customers": [ - "" - ], - "Age restricted": [ - "" - ], - "is this product restricted for customer below certain age?": [ - "" - ], - "unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers": [ - "" - ], - "sale price for customers, including taxes, for above units of the product": [ - "" - ], - "Stock": [ - "" - ], - "product inventory for products with finite supply (for internal use only)": [ - "" - ], - "taxes included in the product price, exposed to customers": [ - "" - ], - "Need to complete marked fields": [ - "" - ], - "could not create product": [ - "" - ], - "Products": [ - "" - ], - "add product to inventory": [ - "" - ], - "Sell": [ - "" - ], - "Profit": [ - "" - ], - "Sold": [ - "" - ], - "free": [ - "" - ], - "go to product update page": [ - "" - ], - "Update": [ - "" - ], - "remove this product from the database": [ - "" - ], - "update the product with new price": [ - "" - ], - "update product with new price": [ - "" - ], - "add more elements to the inventory": [ - "" - ], - "report elements lost in the inventory": [ - "" - ], - "new price for the product": [ - "" - ], - "the are value with errors": [ - "" - ], - "update product with new stock and price": [ - "" - ], - "There is no products yet, add more pressing the + sign": [ - "" - ], - "product updated successfully": [ - "" - ], - "could not update the product": [ - "" - ], - "product delete successfully": [ - "" - ], - "could not delete the product": [ - "" - ], - "Product id:": [ - "" - ], - "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.": [ - "" - ], - "If your system supports RFC 8905, you can do this by opening this URI:": [ - "" - ], - "it should be greater than 0": [ - "" - ], - "must be a valid URL": [ - "" - ], - "Initial balance": [ - "" - ], - "balance prior to deposit": [ - "" - ], - "Exchange URL": [ - "" - ], - "URL of exchange": [ - "" - ], - "Next": [ - "" - ], - "Wire method": [ - "" - ], - "method to use for wire transfer": [ - "" - ], - "Select one wire method": [ - "" - ], - "could not create reserve": [ - "" - ], - "Valid until": [ - "" - ], - "Created balance": [ - "" - ], - "Exchange balance": [ - "" - ], - "Picked up": [ - "" - ], - "Committed": [ - "" - ], - "Account address": [ - "" - ], - "Subject": [ - "" - ], - "Tips": [ - "" - ], - "No tips has been authorized from this reserve": [ - "" - ], - "Authorized": [ - "" - ], - "Expiration": [ - "" - ], - "amount of tip": [ - "" - ], - "Justification": [ - "" - ], - "reason for the tip": [ - "" - ], - "URL after tip": [ - "" - ], - "URL to visit after tip payment": [ - "" - ], - "Reserves not yet funded": [ - "" - ], - "Reserves ready": [ - "" - ], - "add new reserve": [ - "" - ], - "Expires at": [ - "" - ], - "Initial": [ - "" - ], - "delete selected reserve from the database": [ - "" - ], - "authorize new tip from selected reserve": [ - "" - ], - "There is no ready reserves yet, add more pressing the + sign or fund them": [ - "" - ], - "Expected Balance": [ - "" - ], - "could not create the tip": [ - "" - ], - "should not be empty": [ - "" - ], - "should be greater that 0": [ - "" - ], - "can't be empty": [ - "" - ], - "to short": [ - "" - ], - "just letters and numbers from 2 to 7": [ - "" - ], - "size of the key should be 32": [ - "" - ], - "Identifier": [ - "" - ], - "Name of the template in URLs.": [ - "" - ], - "Describe what this template stands for": [ - "" - ], - "Fixed summary": [ - "" - ], - "If specified, this template will create order with the same summary": [ - "" - ], - "Fixed price": [ - "" - ], - "If specified, this template will create order with the same price": [ - "" - ], - "Minimum age": [ - "" - ], - "Is this contract restricted to some age?": [ - "" - ], - "Payment timeout": [ - "" - ], - "How much time has the customer to complete the payment once the order was created.": [ - "" - ], - "Verification algorithm": [ - "" - ], - "Algorithm to use to verify transaction in offline mode": [ - "" - ], - "Point-of-sale key": [ - "" - ], - "Useful to validate the purchase": [ - "" - ], - "generate random secret key": [ - "" - ], - "random": [ - "" - ], - "show secret key": [ - "" - ], - "hide secret key": [ - "" - ], - "hide": [ - "" - ], - "show": [ - "" - ], - "could not inform template": [ - "" - ], - "Amount is required": [ - "" - ], - "Order summary is required": [ - "" - ], - "New order for template": [ - "" - ], - "Amount of the order": [ - "" - ], - "Order summary": [ - "" - ], - "could not create order from template": [ - "" - ], - "Here you can specify a default value for fields that are not fixed. Default values can be edited by the customer before the payment.": [ - "" - ], - "Fixed amount": [ - "" - ], - "Default amount": [ - "" - ], - "Default summary": [ - "" - ], - "Print": [ - "" - ], - "Setup TOTP": [ - "" - ], - "Templates": [ - "" - ], - "add new templates": [ - "" - ], - "load more templates before the first one": [ - "" - ], - "load newer templates": [ - "" - ], - "delete selected templates from the database": [ - "" - ], - "use template to create new order": [ - "" - ], - "create qr code for the template": [ - "" - ], - "load more templates after the last one": [ - "" - ], - "load older templates": [ - "" - ], - "There is no templates yet, add more pressing the + sign": [ - "" - ], - "template delete successfully": [ - "" - ], - "could not delete the template": [ - "" - ], - "could not update template": [ - "" - ], - "should be one of '%1$s'": [ - "" - ], - "Webhook ID to use": [ - "" - ], - "Event": [ - "" - ], - "The event of the webhook: why the webhook is used": [ - "" - ], - "Method": [ - "" - ], - "Method used by the webhook": [ - "" - ], - "URL": [ - "" - ], - "URL of the webhook where the customer will be redirected": [ - "" - ], - "Header": [ - "" - ], - "Header template of the webhook": [ - "" - ], - "Body": [ - "" - ], - "Body template by the webhook": [ - "" - ], - "Webhooks": [ - "" - ], - "add new webhooks": [ - "" - ], - "load more webhooks before the first one": [ - "" - ], - "load newer webhooks": [ - "" - ], - "Event type": [ - "" - ], - "delete selected webhook from the database": [ - "" - ], - "load more webhooks after the last one": [ - "" - ], - "load older webhooks": [ - "" - ], - "There is no webhooks yet, add more pressing the + sign": [ - "" - ], - "webhook delete successfully": [ - "" - ], - "could not delete the webhook": [ - "" - ], - "check the id, does not look valid": [ - "" - ], - "should have 52 characters, current %1$s": [ - "" - ], - "URL doesn't have the right format": [ - "" - ], - "Credited bank account": [ - "" - ], - "Select one account": [ - "" - ], - "Bank account of the merchant where the payment was received": [ - "" - ], - "Wire transfer ID": [ - "" - ], - "unique identifier of the wire transfer used by the exchange, must be 52 characters long": [ - "" - ], - "Base URL of the exchange that made the transfer, should have been in the wire transfer subject": [ - "" - ], - "Amount credited": [ - "" - ], - "Actual amount that was wired to the merchant's bank account": [ - "" - ], - "could not inform transfer": [ - "" - ], - "Transfers": [ - "" - ], - "add new transfer": [ - "" - ], - "load more transfers before the first one": [ - "" - ], - "load newer transfers": [ - "" - ], - "Credit": [ - "" - ], - "Confirmed": [ - "" - ], - "Verified": [ - "" - ], - "Executed at": [ - "" - ], - "yes": [ - "" - ], - "no": [ - "" - ], - "unknown": [ - "" - ], - "delete selected transfer from the database": [ - "" - ], - "load more transfer after the last one": [ - "" - ], - "load older transfers": [ - "" - ], - "There is no transfer yet, add more pressing the + sign": [ - "" - ], - "filter by account address": [ - "" - ], - "only show wire transfers confirmed by the merchant": [ - "" - ], - "only show wire transfers claimed by the exchange": [ - "" - ], - "Unverified": [ - "" - ], - "is not valid": [ - "" - ], - "is not a number": [ - "" - ], - "must be 1 or greater": [ - "" - ], - "max 7 lines": [ - "" - ], - "change authorization configuration": [ - "" - ], - "Need to complete marked fields and choose authorization method": [ - "" - ], - "This is not a valid bitcoin address.": [ - "" - ], - "This is not a valid Ethereum address.": [ - "" - ], - "IBAN numbers usually have more that 4 digits": [ - "" - ], - "IBAN numbers usually have less that 34 digits": [ - "" - ], - "IBAN country code not found": [ - "" - ], - "IBAN number is not valid, checksum is wrong": [ - "" - ], - "Target type": [ - "" - ], - "Method to use for wire transfer": [ - "" - ], - "Routing": [ - "" - ], - "Routing number.": [ - "" - ], - "Account": [ - "" - ], - "Account number.": [ - "" - ], - "Business Identifier Code.": [ - "" - ], - "Bank Account Number.": [ - "" - ], - "Unified Payment Interface.": [ - "" - ], - "Bitcoin protocol.": [ - "" - ], - "Ethereum protocol.": [ - "" - ], - "Interledger protocol.": [ - "" - ], - "Host": [ - "" - ], - "Bank host.": [ - "" - ], - "Bank account.": [ - "" - ], - "Bank account owner's name.": [ - "" - ], - "No accounts yet.": [ - "" - ], - "Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.": [ - "" - ], - "Business name": [ - "" - ], - "Legal name of the business represented by this instance.": [ - "" - ], - "Email": [ - "" - ], - "Contact email": [ - "" - ], - "Website URL": [ - "" - ], - "URL.": [ - "" - ], - "Logo": [ - "" - ], - "Logo image.": [ - "" - ], - "Bank account": [ - "" - ], - "URI specifying bank account for crediting revenue.": [ - "" - ], - "Default max deposit fee": [ - "" - ], - "Maximum deposit fees this merchant is willing to pay per order by default.": [ - "" - ], - "Default max wire fee": [ - "" - ], - "Maximum wire fees this merchant is willing to pay per wire transfer by default.": [ - "" - ], - "Default wire fee amortization": [ - "" - ], - "Number of orders excess wire transfer fees will be divided by to compute per order surcharge.": [ - "" - ], - "Physical location of the merchant.": [ - "" - ], - "Jurisdiction": [ - "" - ], - "Jurisdiction for legal disputes with the merchant.": [ - "" - ], - "Default payment delay": [ - "" - ], - "Time customers have to pay an order before the offer expires by default.": [ - "" - ], - "Default wire transfer delay": [ - "" - ], - "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.": [ - "" - ], - "Instance id": [ - "" - ], - "Change the authorization method use for this instance.": [ - "" - ], - "Manage access token": [ - "" - ], - "Failed to create instance": [ - "" - ], - "Login required": [ - "" - ], - "Please enter your access token.": [ - "" - ], - "Access Token": [ - "" - ], - "The request to the backend take too long and was cancelled": [ - "" - ], - 'Diagnostic from %1$s is "%2$s"': [ - "" - ], - "The backend reported a problem: HTTP status #%1$s": [ - "" - ], - "Diagnostic from %1$s is '%2$s'": [ - "" - ], - "Access denied": [ - "" - ], - "The access token provided is invalid.": [ - "" - ], - "No 'default' instance configured yet.": [ - "" - ], - "Create a 'default' instance to begin using the merchant backoffice.": [ - "" - ], - "The access token provided is invalid": [ - "" - ], - "Hide for today": [ - "" - ], - "Instance": [ - "" - ], - "Settings": [ - "" - ], - "Connection": [ - "" - ], - "New": [ - "" - ], - "List": [ - "" - ], - "Log out": [ - "" - ], - "Check your token is valid": [ - "" - ], - "Couldn't access the server.": [ - "" - ], - "Could not infer instance id from url %1$s": [ - "" - ], - "Server not found": [ - "" - ], - "Server response with an error code": [ - "" - ], - "Got message %1$s from %2$s": [ - "" - ], - "Response from server is unreadable, http status: %1$s": [ - "" - ], - "Unexpected Error": [ - "" - ], - "The value %1$s is invalid for a payment url": [ - "" - ], - "add element to the list": [ - "" - ], - "add": [ - "" - ], - "Deleting": [ - "" - ], - "Changing": [ - "" - ], - "Order ID": [ - "" - ], - "Payment URL": [ - "" - ] - } - } -}; - -// src/components/menu/LangSelector.tsx -var names = { - es: "Espa\xF1ol [es]", - en: "English [en]", - fr: "Fran\xE7ais [fr]", - de: "Deutsch [de]", - sv: "Svenska [sv]", - it: "Italiano [it]" -}; -function getLangName(s5) { - if (names[s5]) - return names[s5]; - return s5; -} -function LangSelector() { - const [updatingLang, setUpdatingLang] = p3(false); - const { lang, changeLanguage } = useTranslationContext(); - return /* @__PURE__ */ h("div", { class: "dropdown is-active " }, /* @__PURE__ */ h("div", { class: "dropdown-trigger" }, /* @__PURE__ */ h( - "button", - { - class: "button has-tooltip-left", - "data-tooltip": "change language selection", - "aria-haspopup": "true", - "aria-controls": "dropdown-menu", - onClick: () => setUpdatingLang(!updatingLang) - }, - /* @__PURE__ */ h("div", { class: "icon is-small is-left" }, /* @__PURE__ */ h("img", { src: languageicon_default })), - /* @__PURE__ */ h("span", null, getLangName(lang)), - /* @__PURE__ */ h("div", { class: "icon is-right" }, /* @__PURE__ */ h("i", { class: "mdi mdi-chevron-down" })) - )), updatingLang && /* @__PURE__ */ h("div", { class: "dropdown-menu", id: "dropdown-menu", role: "menu" }, /* @__PURE__ */ h("div", { class: "dropdown-content" }, Object.keys(strings).filter((l3) => l3 !== lang).map((l3) => /* @__PURE__ */ h( - "a", - { - key: l3, - class: "dropdown-item", - value: l3, - onClick: () => { - changeLanguage(l3); - setUpdatingLang(false); - } - }, - getLangName(l3) - ))))); -} - -// src/paths/settings/index.tsx function getBrowserLang2() { if (typeof window === "undefined") return void 0; @@ -41853,7 +42309,7 @@ function getBrowserLang2() { return window.navigator.language; return void 0; } -function Settings() { +function Settings({ onClose }) { const { i18n: i18n2 } = useTranslationContext(); const borwserLang = getBrowserLang2(); const { update } = useLang(); @@ -41919,7 +42375,14 @@ function Settings() { tooltip: i18n2.str`how the date is going to be displayed` } ) - ))), /* @__PURE__ */ h("div", { class: "column" })))); + ))), /* @__PURE__ */ h("div", { class: "column" }))), onClose && /* @__PURE__ */ h("section", { class: "section is-main-section" }, /* @__PURE__ */ h( + "button", + { + class: "button", + onClick: onClose + }, + /* @__PURE__ */ h(i18n2.Translate, null, "Close") + ))); } // src/InstanceRoutes.tsx @@ -41929,7 +42392,7 @@ function InstanceRoutes({ id, admin, path, - onUnauthorized, + // onUnauthorized, onLoginPass, setInstanceName }) { @@ -41971,8 +42434,7 @@ function InstanceRoutes({ }; } const LoginPageAccessDenied = () => { - onUnauthorized(); - return /* @__PURE__ */ h( + return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h( NotificationCard, { notification: { @@ -41981,7 +42443,7 @@ function InstanceRoutes({ type: "ERROR" } } - ); + ), /* @__PURE__ */ h(LoginPage, { onConfirm: changeToken })); }; function IfAdminCreateDefaultOr(Next) { return function IfAdminCreateDefaultOrImpl(props) { @@ -42022,7 +42484,7 @@ function InstanceRoutes({ instance: id, admin, onShowSettings: () => { - route("/inteface"); + route("/interface" /* settings */); }, path, onLogout: clearTokenAndGoToRoot, @@ -42482,7 +42944,7 @@ function InstanceRoutes({ } ), /* @__PURE__ */ h(Route, { path: "/kyc" /* kyc */, component: ListKYC }), - /* @__PURE__ */ h(Route, { path: "/inteface" /* settings */, component: Settings }), + /* @__PURE__ */ h(Route, { path: "/interface" /* settings */, component: Settings }), /* @__PURE__ */ h(Route, { path: "/loading", component: Loading }), /* @__PURE__ */ h(Route, { default: true, component: NotFoundPage }) )); @@ -42500,9 +42962,7 @@ function AdminInstanceUpdatePage(_a) { "id" ]); const [token, changeToken] = useBackendInstanceToken(id); - const { updateLoginStatus: changeBackend } = useBackendContext(); - const updateLoginStatus = (url, token2) => { - changeBackend(url); + const updateLoginStatus = (token2) => { changeToken(token2); }; const value = F( @@ -42547,7 +43007,7 @@ function KycBanner() { const { i18n: i18n2 } = useTranslationContext(); const [settings] = useSettings(); const today = format(/* @__PURE__ */ new Date(), dateFormatForSettings(settings)); - const [lastHide, setLastHide] = useLocalStorage2("kyc-last-hide"); + const [lastHide, setLastHide] = useSimpleLocalStorage("kyc-last-hide"); const hasBeenHidden = today === lastHide; const needsToBeShown = kycStatus.ok && kycStatus.data.type === "redirect"; if (hasBeenHidden || !needsToBeShown) @@ -42564,300 +43024,16 @@ function KycBanner() { ); } -// src/components/menu/NavigationBar.tsx -init_preact_module(); - -// src/assets/logo-2021.svg -var logo_2021_default = "./logo-2021-VSZSJ4QZ.svg"; - -// src/components/menu/NavigationBar.tsx -function NavigationBar({ onMobileMenu, title }) { - return /* @__PURE__ */ h( - "nav", - { - class: "navbar is-fixed-top", - role: "navigation", - "aria-label": "main navigation" - }, - /* @__PURE__ */ h("div", { class: "navbar-brand" }, /* @__PURE__ */ h("span", { class: "navbar-item", style: { fontSize: 24, fontWeight: 900 } }, title), /* @__PURE__ */ h( - "a", - { - role: "button", - class: "navbar-burger", - "aria-label": "menu", - "aria-expanded": "false", - onClick: (e4) => { - onMobileMenu(); - e4.stopPropagation(); - } - }, - /* @__PURE__ */ h("span", { "aria-hidden": "true" }), - /* @__PURE__ */ h("span", { "aria-hidden": "true" }), - /* @__PURE__ */ h("span", { "aria-hidden": "true" }) - )), - /* @__PURE__ */ h("div", { class: "navbar-menu " }, /* @__PURE__ */ h( - "a", - { - class: "navbar-start is-justify-content-center is-flex-grow-1", - href: "https://taler.net" - }, - /* @__PURE__ */ h("img", { src: logo_2021_default, style: { height: 35, margin: 10 } }) - ), /* @__PURE__ */ h("div", { class: "navbar-end" }, /* @__PURE__ */ h("div", { class: "navbar-item", style: { paddingTop: 4, paddingBottom: 4 } }))) - ); -} - -// src/components/menu/SideBar.tsx -init_preact_module(); -var VERSION = true ? "0.1.0" : void 0; -function Sidebar({ - mobile, - instance, - onShowSettings, - onLogout, - admin, - mimic, - isPasswordOk -}) { - const config = useConfigContext(); - const backend = useBackendContext(); - const { i18n: i18n2 } = useTranslationContext(); - const kycStatus = useInstanceKYCDetails(); - const needKYC = kycStatus.ok && kycStatus.data.type === "redirect"; - return /* @__PURE__ */ h("aside", { class: "aside is-placed-left is-expanded", style: { overflowY: "scroll" } }, mobile && /* @__PURE__ */ h( - "div", - { - class: "footer", - onClick: (e4) => { - return e4.stopImmediatePropagation(); - } - }, - /* @__PURE__ */ h(LangSelector, null) - ), /* @__PURE__ */ h("div", { class: "aside-tools" }, /* @__PURE__ */ h("div", { class: "aside-tools-label" }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("b", null, "Taler"), " Backoffice"), /* @__PURE__ */ h( - "div", - { - class: "is-size-7 has-text-right", - style: { lineHeight: 0, marginTop: -10 } - }, - VERSION, - " (", - config.version, - ")" - ))), /* @__PURE__ */ h("div", { class: "menu is-menu-main" }, isPasswordOk && instance ? /* @__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: "/products", 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, "Products")))), /* @__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: "/validators", 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, "Validators")))), /* @__PURE__ */ h("li", null, /* @__PURE__ */ h("a", { href: "/reserves", class: "has-icon" }, /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-cash" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, "Reserves"))), /* @__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: "/server", 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, "Server")))), /* @__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", - onClick: () => onShowSettings() - }, - /* @__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-currency-eur" })), /* @__PURE__ */ h("span", { class: "menu-item-label" }, config.currency))), /* @__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" }, new URL(backend.url).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" }, !instance ? "default" : instance))), isPasswordOk && admin && !mimic && /* @__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"))))), isPasswordOk && /* @__PURE__ */ h("li", null, /* @__PURE__ */ h( - "a", - { - class: "has-icon is-state-info is-hoverable", - onClick: () => onLogout() - }, - /* @__PURE__ */ h("span", { class: "icon" }, /* @__PURE__ */ h("i", { class: "mdi mdi-logout default" })), - /* @__PURE__ */ h("span", { class: "menu-item-label" }, /* @__PURE__ */ h(i18n2.Translate, null, "Log out")) - ))))); -} - -// src/components/menu/index.tsx -function getInstanceTitle(path, id) { - switch (path) { - case "/server" /* server */: - return `${id}: Settings`; - case "/orders" /* order_list */: - return `${id}: Orders`; - case "/order/new" /* order_new */: - return `${id}: New order`; - case "/products" /* product_list */: - return `${id}: Products`; - case "/product/new" /* product_new */: - return `${id}: New product`; - case "/product/:pid/update" /* product_update */: - return `${id}: Update product`; - case "/reserves/new" /* reserves_new */: - return `${id}: New reserve`; - case "/reserves" /* reserves_list */: - return `${id}: Reserves`; - case "/transfers" /* transfers_list */: - return `${id}: Transfers`; - case "/transfer/new" /* transfers_new */: - return `${id}: New transfer`; - case "/webhooks" /* webhooks_list */: - return `${id}: Webhooks`; - case "/webhooks/new" /* webhooks_new */: - return `${id}: New webhook`; - case "/webhooks/:tid/update" /* webhooks_update */: - return `${id}: Update webhook`; - case "/validators" /* validators_list */: - return `${id}: Validators`; - case "/validators/new" /* validators_new */: - return `${id}: New validator`; - case "/validators/:vid/update" /* validators_update */: - return `${id}: Update validators`; - case "/templates/new" /* templates_new */: - return `${id}: New template`; - case "/templates/:tid/update" /* templates_update */: - return `${id}: Update template`; - case "/templates" /* templates_list */: - return `${id}: Templates`; - case "/templates/:tid/use" /* templates_use */: - return `${id}: Use template`; - case "/inteface" /* settings */: - return `${id}: Interface`; - case "/inteface" /* settings */: - return `${id}: Interface`; - default: - return ""; - } -} -function getAdminTitle(path, instance) { - if (path === "/instance/new" /* new_instance */) - return `New instance`; - if (path === "/instances" /* list_instances */) - return `Instances`; - return getInstanceTitle(path, instance); -} -function WithTitle({ - title, - children -}) { - h2(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - return /* @__PURE__ */ h(p2, null, children); -} -function Menu({ - onLogout, - onShowSettings, - title, - instance, - path, - admin, - setInstanceName, - isPasswordOk -}) { - const [mobileOpen, setMobileOpen] = p3(false); - const titleWithSubtitle = title ? title : !admin ? getInstanceTitle(path, instance) : getAdminTitle(path, instance); - const adminInstance = instance === "default"; - const mimic = admin && !adminInstance; - return /* @__PURE__ */ h(WithTitle, { title: titleWithSubtitle }, /* @__PURE__ */ h( - "div", - { - class: mobileOpen ? "has-aside-mobile-expanded" : "", - onClick: () => setMobileOpen(false) - }, - /* @__PURE__ */ h( - NavigationBar, - { - onMobileMenu: () => setMobileOpen(!mobileOpen), - title: titleWithSubtitle - } - ), - onLogout && /* @__PURE__ */ h( - Sidebar, - { - onShowSettings, - onLogout, - admin, - mimic, - instance, - mobile: mobileOpen, - isPasswordOk - } - ), - mimic && /* @__PURE__ */ h("nav", { class: "level", style: { - zIndex: 100, - position: "fixed", - width: "50%", - marginLeft: "20%" - } }, /* @__PURE__ */ h("div", { class: "level-item has-text-centered has-background-warning" }, /* @__PURE__ */ h("p", { class: "is-size-5" }, "You are viewing the instance ", /* @__PURE__ */ h("b", null, '"', instance, '"'), ".", " ", /* @__PURE__ */ h( - "a", - { - href: "#/instances", - onClick: (e4) => { - setInstanceName("default"); - } - }, - "go back" - )))) - )); -} -function NotificationCard({ - notification: n2 -}) { - if (!n2) - return null; - return /* @__PURE__ */ h("div", { class: "notification" }, /* @__PURE__ */ h("div", { class: "columns is-vcentered" }, /* @__PURE__ */ h("div", { class: "column is-12" }, /* @__PURE__ */ h( - "article", - { - class: n2.type === "ERROR" ? "message is-danger" : n2.type === "WARN" ? "message is-warning" : "message is-info" - }, - /* @__PURE__ */ h("div", { class: "message-header" }, /* @__PURE__ */ h("p", null, n2.message)), - n2.description && /* @__PURE__ */ h("div", { class: "message-body" }, /* @__PURE__ */ h("div", null, n2.description), n2.details && /* @__PURE__ */ h("pre", null, n2.details)) - )))); -} -function NotConnectedAppMenu({ - title -}) { - const [mobileOpen, setMobileOpen] = p3(false); - h2(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - return /* @__PURE__ */ h( - "div", - { - class: mobileOpen ? "has-aside-mobile-expanded" : "", - onClick: () => setMobileOpen(false) - }, - /* @__PURE__ */ h( - NavigationBar, - { - onMobileMenu: () => setMobileOpen(!mobileOpen), - title - } - ) - ); -} -function NotYetReadyAppMenu({ - onLogout, - onShowSettings, - title, - isPasswordOk -}) { - const [mobileOpen, setMobileOpen] = p3(false); - h2(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - return /* @__PURE__ */ h( - "div", - { - class: mobileOpen ? "has-aside-mobile-expanded" : "", - onClick: () => setMobileOpen(false) - }, - /* @__PURE__ */ h( - NavigationBar, - { - onMobileMenu: () => setMobileOpen(!mobileOpen), - title - } - ), - onLogout && /* @__PURE__ */ h(Sidebar, { onShowSettings, onLogout, instance: "", mobile: mobileOpen, isPasswordOk }) - ); -} - // src/ApplicationReadyRoutes.tsx function ApplicationReadyRoutes() { const { i18n: i18n2 } = useTranslationContext(); + const { url: backendURL, changeBackend } = useBackendContext(); const [unauthorized, setUnauthorized] = p3(false); const { - url: backendURL, - updateLoginStatus: updateLoginStatus2 + updateToken } = useBackendContext(); - function updateLoginStatus(url, token) { - console.log("updateing", url, token); - updateLoginStatus2(url, token); + function updateLoginStatus(token) { + updateToken(token); setUnauthorized(false); } const result = useBackendInstancesTestForAdmin(); @@ -42867,7 +43043,7 @@ function ApplicationReadyRoutes() { const [showSettings, setShowSettings] = p3(false); const unauthorizedAdmin = !result.loading && !result.ok && result.type === ErrorType.CLIENT && result.status === HttpStatusCode.Unauthorized; if (showSettings) { - return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotYetReadyAppMenu, { onShowSettings: () => setShowSettings(true), title: "UI Settings", onLogout: clearTokenAndGoToRoot, isPasswordOk: false }), /* @__PURE__ */ h(Settings, null)); + return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotYetReadyAppMenu, { onShowSettings: () => setShowSettings(true), title: "UI Settings", onLogout: clearTokenAndGoToRoot, isPasswordOk: false }), /* @__PURE__ */ h(Settings, { onClose: () => setShowSettings(false) })); } if (result.loading) { return /* @__PURE__ */ h(NotYetReadyAppMenu, { onShowSettings: () => setShowSettings(true), title: "Loading...", isPasswordOk: false }); @@ -42887,18 +43063,17 @@ function ApplicationReadyRoutes() { type: "ERROR" } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginStatus })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } instanceNameByBackendURL = match2[1]; } - console.log(unauthorized, unauthorizedAdmin); if (unauthorized || unauthorizedAdmin) { return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotYetReadyAppMenu, { onShowSettings: () => setShowSettings(true), title: "Login", onLogout: clearTokenAndGoToRoot, isPasswordOk: false }), /* @__PURE__ */ h( NotificationCard, { notification: { message: i18n2.str`Access denied`, - description: i18n2.str`Check your token is valid`, + description: i18n2.str`Check your token is valid 1`, type: "ERROR" } } @@ -42913,7 +43088,6 @@ function ApplicationReadyRoutes() { admin, onUnauthorized: () => setUnauthorized(true), onLoginPass: () => { - console.log("ahora si"); setUnauthorized(false); }, instanceNameByBackendURL @@ -42951,23 +43125,19 @@ function Application() { } function ApplicationStatusRoutes() { var _a, _b, _c, _d; - const { url, updateLoginStatus, triedToLog } = useBackendContext(); + const { url: backendURL, updateToken, changeBackend } = useBackendContext(); const result = useBackendConfig(); const { i18n: i18n2 } = useTranslationContext(); - const updateLoginInfoAndGoToRoot = (url2, token) => { - updateLoginStatus(url2, token); - route("/"); - }; const { currency, version } = result.ok ? result.data : { currency: "unknown", version: "unknown" }; const ctx = F(() => ({ currency, version }), [currency, version]); - if (!triedToLog) { - return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Welcome!" }), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + if (!backendURL) { + return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Welcome!" }), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } if (!result.ok) { if (result.loading) return /* @__PURE__ */ h(Loading, null); if (result.type === ErrorType.CLIENT && result.status === HttpStatusCode.Unauthorized) { - return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Login" }), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Login" }), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } if (result.type === ErrorType.CLIENT && result.status === HttpStatusCode.NotFound) { return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Error" }), /* @__PURE__ */ h( @@ -42979,7 +43149,7 @@ function ApplicationStatusRoutes() { description: `Check your url` } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } if (result.type === ErrorType.SERVER) { /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Error" }), /* @__PURE__ */ h( @@ -42988,10 +43158,10 @@ function ApplicationStatusRoutes() { notification: { message: i18n2.str`Server response with an error code`, type: "ERROR", - description: i18n2.str`Got message ${result.message} from ${(_a = result.info) == null ? void 0 : _a.url}` + description: i18n2.str`Got message "${result.message}" from ${(_a = result.info) == null ? void 0 : _a.url}` } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } if (result.type === ErrorType.UNREADABLE) { /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Error" }), /* @__PURE__ */ h( @@ -43000,10 +43170,10 @@ function ApplicationStatusRoutes() { notification: { message: i18n2.str`Response from server is unreadable, http status: ${result.status}`, type: "ERROR", - description: i18n2.str`Got message ${result.message} from ${(_b = result.info) == null ? void 0 : _b.url}` + description: i18n2.str`Got message "${result.message}" from ${(_b = result.info) == null ? void 0 : _b.url}` } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h(NotConnectedAppMenu, { title: "Error" }), /* @__PURE__ */ h( NotificationCard, @@ -43011,10 +43181,10 @@ function ApplicationStatusRoutes() { notification: { message: i18n2.str`Unexpected Error`, type: "ERROR", - description: i18n2.str`Got message ${result.message} from ${(_c = result.info) == null ? void 0 : _c.url}` + description: i18n2.str`Got message "${result.message}" from ${(_c = result.info) == null ? void 0 : _c.url}` } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } const SUPPORTED_VERSION = "5:0:1"; if (!((_d = LibtoolVersion.compare( @@ -43030,7 +43200,7 @@ function ApplicationStatusRoutes() { description: i18n2.str`Merchant backend server version ${result.data.version} is not compatible with the supported version ${SUPPORTED_VERSION}` } } - ), /* @__PURE__ */ h(LoginPage, { onConfirm: updateLoginInfoAndGoToRoot })); + ), /* @__PURE__ */ h(ConnectionPage, { onConfirm: changeBackend })); } return /* @__PURE__ */ h("div", { class: "has-navbar-fixed-top" }, /* @__PURE__ */ h(ConfigContextProvider, { value: ctx }, /* @__PURE__ */ h(ApplicationReadyRoutes, null))); } |