summaryrefslogtreecommitdiff
path: root/backoffice/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'backoffice/index.js')
-rw-r--r--backoffice/index.js24986
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. &quot;USD:2.3&quot;.": [
+ ""
+ ],
+ "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. &quot;USD:2.3&quot;.": [
+ ""
+ ],
+ "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. &quot;USD:2.3&quot;.": [
+ "Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;."
+ ],
+ "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. &quot;USD:2.3&quot;.": [
+ ""
+ ],
+ "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. &quot;USD:2.3&quot;.": [
+ ""
+ ],
+ "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. &quot;USD:2.3&quot;.": [
+ ""
+ ],
+ "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. &quot;USD:2.3&quot;.": [
- ""
- ],
- "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. &quot;USD:2.3&quot;.": [
- ""
- ],
- "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. &quot;USD:2.3&quot;.": [
- "Ingrese divisa y valor separado por dos puntos, e.g. &quot;USD:2.3&quot;."
- ],
- "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. &quot;USD:2.3&quot;.": [
- ""
- ],
- "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. &quot;USD:2.3&quot;.": [
- ""
- ],
- "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. &quot;USD:2.3&quot;.": [
- ""
- ],
- "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)));
}