summaryrefslogtreecommitdiff
path: root/bank/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'bank/index.js')
-rw-r--r--bank/index.js1507
1 files changed, 859 insertions, 648 deletions
diff --git a/bank/index.js b/bank/index.js
index 077e9190e..86a1bf29a 100644
--- a/bank/index.js
+++ b/bank/index.js
@@ -6667,12 +6667,21 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED"] = 2175] = "MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH"] = 2200] = "MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID"] = 2201] = "MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_TOKEN_FAMILY_CONFLICT"] = 2225] = "MERCHANT_POST_TOKEN_FAMILY_CONFLICT";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_PATCH_TOKEN_FAMILY_NOT_FOUND"] = 2226] = "MERCHANT_PATCH_TOKEN_FAMILY_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_REFUND_FAILED"] = 2251] = "MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_REFUND_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_LOOKUP_FAILED"] = 2252] = "MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_LOOKUP_FAILED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND"] = 2253] = "MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE"] = 2254] = "MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH"] = 2255] = "MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY"] = 2256] = "MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS"] = 2258] = "MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST"] = 2259] = "MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE"] = 2260] = "MERCHANT_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND"] = 2261] = "MERCHANT_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED"] = 2262] = "MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE"] = 2263] = "MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE";
+ TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_HARD_FAILURE"] = 2264] = "MERCHANT_EXCHANGE_TRANSFERS_HARD_FAILURE";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND"] = 2300] = "MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED"] = 2301] = "MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_POST_ORDERS_ID_CLAIM_CLIENT_INTERNAL_FAILURE"] = 2302] = "MERCHANT_POST_ORDERS_ID_CLAIM_CLIENT_INTERNAL_FAILURE";
@@ -6708,13 +6717,6 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_ACCOUNT_NOT_FOUND"] = 2555] = "MERCHANT_PRIVATE_POST_TRANSFERS_ACCOUNT_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_DELETE_TRANSFERS_ALREADY_CONFIRMED"] = 2556] = "MERCHANT_PRIVATE_DELETE_TRANSFERS_ALREADY_CONFIRMED";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_SUBMISSION"] = 2557] = "MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_SUBMISSION";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS"] = 2258] = "MERCHANT_EXCHANGE_TRANSFERS_AWAITING_KEYS";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST"] = 2259] = "MERCHANT_EXCHANGE_TRANSFERS_AWAITING_LIST";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE"] = 2260] = "MERCHANT_EXCHANGE_TRANSFERS_FATAL_NO_EXCHANGE";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND"] = 2261] = "MERCHANT_EXCHANGE_TRANSFERS_FATAL_NOT_FOUND";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED"] = 2262] = "MERCHANT_EXCHANGE_TRANSFERS_RATE_LIMITED";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE"] = 2263] = "MERCHANT_EXCHANGE_TRANSFERS_TRANSIENT_FAILURE";
- TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_HARD_FAILURE"] = 2264] = "MERCHANT_EXCHANGE_TRANSFERS_HARD_FAILURE";
TalerErrorCode2[TalerErrorCode2["MERCHANT_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS"] = 2563] = "MERCHANT_EXCHANGE_TRANSFERS_CONFLICTING_TRANSFERS";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS"] = 2600] = "MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS";
TalerErrorCode2[TalerErrorCode2["MERCHANT_PRIVATE_POST_INSTANCES_BAD_AUTH"] = 2601] = "MERCHANT_PRIVATE_POST_INSTANCES_BAD_AUTH";
@@ -6842,6 +6844,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["WALLET_EXCHANGE_UNAVAILABLE"] = 7032] = "WALLET_EXCHANGE_UNAVAILABLE";
TalerErrorCode2[TalerErrorCode2["WALLET_EXCHANGE_ENTRY_USED"] = 7033] = "WALLET_EXCHANGE_ENTRY_USED";
TalerErrorCode2[TalerErrorCode2["WALLET_DB_UNAVAILABLE"] = 7034] = "WALLET_DB_UNAVAILABLE";
+ TalerErrorCode2[TalerErrorCode2["WALLET_TALER_URI_MALFORMED"] = 7035] = "WALLET_TALER_URI_MALFORMED";
+ TalerErrorCode2[TalerErrorCode2["WALLET_CORE_REQUEST_CANCELLED"] = 7036] = "WALLET_CORE_REQUEST_CANCELLED";
TalerErrorCode2[TalerErrorCode2["ANASTASIS_GENERIC_BACKEND_TIMEOUT"] = 8e3] = "ANASTASIS_GENERIC_BACKEND_TIMEOUT";
TalerErrorCode2[TalerErrorCode2["ANASTASIS_GENERIC_INVALID_PAYMENT_REQUEST"] = 8001] = "ANASTASIS_GENERIC_INVALID_PAYMENT_REQUEST";
TalerErrorCode2[TalerErrorCode2["ANASTASIS_GENERIC_BACKEND_ERROR"] = 8002] = "ANASTASIS_GENERIC_BACKEND_ERROR";
@@ -6909,6 +6913,8 @@ var TalerErrorCode;
TalerErrorCode2[TalerErrorCode2["ANASTASIS_REDUCER_INTERNAL_ERROR"] = 8419] = "ANASTASIS_REDUCER_INTERNAL_ERROR";
TalerErrorCode2[TalerErrorCode2["ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED"] = 8420] = "ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED";
TalerErrorCode2[TalerErrorCode2["DONAU_GENERIC_KEYS_MISSING"] = 8607] = "DONAU_GENERIC_KEYS_MISSING";
+ TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_SIGNATURE_INVALID"] = 8608] = "DONAU_CHARITY_SIGNATURE_INVALID";
+ TalerErrorCode2[TalerErrorCode2["DONAU_CHARITY_NOT_FOUND"] = 8609] = "DONAU_CHARITY_NOT_FOUND";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_GENERIC_ERROR"] = 9e3] = "LIBEUFIN_NEXUS_GENERIC_ERROR";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION"] = 9001] = "LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION";
TalerErrorCode2[TalerErrorCode2["LIBEUFIN_SANDBOX_GENERIC_ERROR"] = 9500] = "LIBEUFIN_SANDBOX_GENERIC_ERROR";
@@ -7104,6 +7110,38 @@ var amountFractionalBase = 1e8;
var amountFractionalLength = 8;
var amountMaxValue = 2 ** 52;
var FRAC_SEPARATOR = ".";
+var Amount = class _Amount {
+ static from(a5) {
+ return new _Amount(Amounts.parseOrThrow(a5), 0);
+ }
+ static zeroOfCurrency(currency) {
+ return new _Amount(Amounts.zeroOfCurrency(currency), 0);
+ }
+ add(...a5) {
+ if (this.saturated) {
+ return this;
+ }
+ const r3 = Amounts.add(this.val, ...a5);
+ return new _Amount(r3.amount, r3.saturated ? 1 : 0);
+ }
+ mult(n2) {
+ if (this.saturated) {
+ return this;
+ }
+ const r3 = Amounts.mult(this, n2);
+ return new _Amount(r3.amount, r3.saturated ? 1 : 0);
+ }
+ toJson() {
+ return { ...this.val };
+ }
+ toString() {
+ return Amounts.stringify(this.val);
+ }
+ constructor(val, saturated) {
+ this.val = val;
+ this.saturated = saturated;
+ }
+};
function codecForAmountString() {
return {
decode(x6, c4) {
@@ -7147,6 +7185,9 @@ var Amounts = class _Amounts {
if (typeof amt === "string") {
return _Amounts.parseOrThrow(amt);
}
+ if (amt instanceof Amount) {
+ return amt.toJson();
+ }
return amt;
}
static divmod(a1, a22) {
@@ -7366,6 +7407,9 @@ var Amounts = class _Amounts {
* throw if the input is not a valid amount.
*/
static parseOrThrow(s5) {
+ if (s5 instanceof Amount) {
+ return s5.toJson();
+ }
if (typeof s5 === "object") {
if (typeof s5.currency !== "string") {
throw Error("invalid amount object");
@@ -9140,14 +9184,21 @@ function parseURL(input, options) {
});
}
var URLImpl = class {
+ //Include URL type for "url" and "base" params.
constructor(url, base2) {
let parsedBase = null;
if (base2 !== void 0) {
+ if (base2 instanceof URL) {
+ base2 = base2.href;
+ }
parsedBase = basicURLParse(base2);
if (parsedBase === null) {
throw new TypeError(`Invalid base URL: ${base2}`);
}
}
+ if (url instanceof URL) {
+ url = url.href;
+ }
const parsedURL = basicURLParse(url, { baseURL: parsedBase });
if (parsedURL === null) {
throw new TypeError(`Invalid URL: ${url}`);
@@ -10353,36 +10404,36 @@ var Duration;
Duration2.clamp = clamp;
})(Duration || (Duration = {}));
var AbsoluteTime;
-(function(AbsoluteTime4) {
+(function(AbsoluteTime5) {
function getStampMsNow() {
return (/* @__PURE__ */ new Date()).getTime();
}
- AbsoluteTime4.getStampMsNow = getStampMsNow;
+ AbsoluteTime5.getStampMsNow = getStampMsNow;
function getStampMsNever() {
return Number.MAX_SAFE_INTEGER;
}
- AbsoluteTime4.getStampMsNever = getStampMsNever;
+ AbsoluteTime5.getStampMsNever = getStampMsNever;
function now() {
return {
t_ms: (/* @__PURE__ */ new Date()).getTime() + timeshift,
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.now = now;
+ AbsoluteTime5.now = now;
function never() {
return {
t_ms: "never",
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.never = never;
+ AbsoluteTime5.never = never;
function fromMilliseconds(ms) {
return {
t_ms: ms,
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.fromMilliseconds = fromMilliseconds;
+ AbsoluteTime5.fromMilliseconds = fromMilliseconds;
function cmp(t1, t22) {
if (t1.t_ms === "never") {
if (t22.t_ms === "never") {
@@ -10401,7 +10452,7 @@ var AbsoluteTime;
}
return -1;
}
- AbsoluteTime4.cmp = cmp;
+ AbsoluteTime5.cmp = cmp;
function min(t1, t22) {
if (t1.t_ms === "never") {
return { t_ms: t22.t_ms, [opaque_AbsoluteTime]: true };
@@ -10411,7 +10462,7 @@ var AbsoluteTime;
}
return { t_ms: Math.min(t1.t_ms, t22.t_ms), [opaque_AbsoluteTime]: true };
}
- AbsoluteTime4.min = min;
+ AbsoluteTime5.min = min;
function max(t1, t22) {
if (t1.t_ms === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -10421,7 +10472,7 @@ var AbsoluteTime;
}
return { t_ms: Math.max(t1.t_ms, t22.t_ms), [opaque_AbsoluteTime]: true };
}
- AbsoluteTime4.max = max;
+ AbsoluteTime5.max = max;
function difference(t1, t22) {
if (t1.t_ms === "never") {
return { d_ms: "forever" };
@@ -10431,15 +10482,15 @@ var AbsoluteTime;
}
return { d_ms: Math.abs(t1.t_ms - t22.t_ms) };
}
- AbsoluteTime4.difference = difference;
+ AbsoluteTime5.difference = difference;
function isExpired(t4) {
return cmp(t4, now()) <= 0;
}
- AbsoluteTime4.isExpired = isExpired;
+ AbsoluteTime5.isExpired = isExpired;
function isNever(t4) {
return t4.t_ms === "never";
}
- AbsoluteTime4.isNever = isNever;
+ AbsoluteTime5.isNever = isNever;
function fromProtocolTimestamp(t4) {
if (t4.t_s === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -10449,14 +10500,14 @@ var AbsoluteTime;
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.fromProtocolTimestamp = fromProtocolTimestamp;
+ AbsoluteTime5.fromProtocolTimestamp = fromProtocolTimestamp;
function fromStampMs(stampMs) {
return {
t_ms: stampMs,
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.fromStampMs = fromStampMs;
+ AbsoluteTime5.fromStampMs = fromStampMs;
function fromPreciseTimestamp(t4) {
if (t4.t_s === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -10467,14 +10518,14 @@ var AbsoluteTime;
[opaque_AbsoluteTime]: true
};
}
- AbsoluteTime4.fromPreciseTimestamp = fromPreciseTimestamp;
+ AbsoluteTime5.fromPreciseTimestamp = fromPreciseTimestamp;
function toStampMs(at2) {
if (at2.t_ms === "never") {
return Number.MAX_SAFE_INTEGER;
}
return at2.t_ms;
}
- AbsoluteTime4.toStampMs = toStampMs;
+ AbsoluteTime5.toStampMs = toStampMs;
function toPreciseTimestamp(at2) {
if (at2.t_ms == "never") {
return {
@@ -10488,7 +10539,7 @@ var AbsoluteTime;
off_us
};
}
- AbsoluteTime4.toPreciseTimestamp = toPreciseTimestamp;
+ AbsoluteTime5.toPreciseTimestamp = toPreciseTimestamp;
function toProtocolTimestamp(at2) {
if (at2.t_ms === "never") {
return { t_s: "never" };
@@ -10497,7 +10548,7 @@ var AbsoluteTime;
t_s: Math.floor(at2.t_ms / 1e3)
};
}
- AbsoluteTime4.toProtocolTimestamp = toProtocolTimestamp;
+ AbsoluteTime5.toProtocolTimestamp = toProtocolTimestamp;
function isBetween(t4, start, end) {
if (cmp(t4, start) < 0) {
return false;
@@ -10507,7 +10558,7 @@ var AbsoluteTime;
}
return true;
}
- AbsoluteTime4.isBetween = isBetween;
+ AbsoluteTime5.isBetween = isBetween;
function toIsoString(t4) {
if (t4.t_ms === "never") {
return "<never>";
@@ -10515,14 +10566,14 @@ var AbsoluteTime;
return new Date(t4.t_ms).toISOString();
}
}
- AbsoluteTime4.toIsoString = toIsoString;
+ AbsoluteTime5.toIsoString = toIsoString;
function addDuration(t1, d5) {
if (t1.t_ms === "never" || d5.d_ms === "forever") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
}
return { t_ms: t1.t_ms + d5.d_ms, [opaque_AbsoluteTime]: true };
}
- AbsoluteTime4.addDuration = addDuration;
+ AbsoluteTime5.addDuration = addDuration;
function remaining(t1) {
if (t1.t_ms === "never") {
return Duration.getForever();
@@ -10533,7 +10584,7 @@ var AbsoluteTime;
}
return Duration.fromMilliseconds(Math.max(0, t1.t_ms - stampNow.t_ms));
}
- AbsoluteTime4.remaining = remaining;
+ AbsoluteTime5.remaining = remaining;
function subtractDuraction(t1, d5) {
if (t1.t_ms === "never") {
return { t_ms: "never", [opaque_AbsoluteTime]: true };
@@ -10543,14 +10594,14 @@ var AbsoluteTime;
}
return { t_ms: Math.max(0, t1.t_ms - d5.d_ms), [opaque_AbsoluteTime]: true };
}
- AbsoluteTime4.subtractDuraction = subtractDuraction;
+ AbsoluteTime5.subtractDuraction = subtractDuraction;
function stringify(t4) {
if (t4.t_ms === "never") {
return "never";
}
return new Date(t4.t_ms).toISOString();
}
- AbsoluteTime4.stringify = stringify;
+ AbsoluteTime5.stringify = stringify;
})(AbsoluteTime || (AbsoluteTime = {}));
var SECONDS = 1e3;
var MINUTES = SECONDS * 60;
@@ -10584,6 +10635,9 @@ function durationMul(d5, n2) {
}
var codecForAbsoluteTime = {
decode(x6, c4) {
+ if (x6 === void 0) {
+ throw Error(`got undefined and expected absolute time at ${renderContext(c4)}`);
+ }
const t_ms = x6.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
@@ -10597,6 +10651,9 @@ var codecForAbsoluteTime = {
};
var codecForTimestamp = {
decode(x6, c4) {
+ if (x6 === void 0) {
+ throw Error(`got undefined and expected timestamp at ${renderContext(c4)}`);
+ }
const t_ms = x6.t_ms;
if (typeof t_ms === "string") {
if (t_ms === "never") {
@@ -11545,6 +11602,177 @@ function parsePaytoUri(s5) {
};
}
+// ../taler-util/lib/http-common.js
+var textEncoder = new TextEncoder();
+var logger3 = new Logger("http.ts");
+var DEFAULT_REQUEST_TIMEOUT_MS = 6e4;
+var Headers2 = class {
+ constructor() {
+ this.headerMap = /* @__PURE__ */ new Map();
+ }
+ get(name) {
+ const r3 = this.headerMap.get(name.toLowerCase());
+ if (r3) {
+ return r3;
+ }
+ return null;
+ }
+ set(name, value) {
+ const normalizedName = name.toLowerCase();
+ const existing = this.headerMap.get(normalizedName);
+ if (existing !== void 0) {
+ this.headerMap.set(normalizedName, existing + "," + value);
+ } else {
+ this.headerMap.set(normalizedName, value);
+ }
+ }
+ toJSON() {
+ const m5 = {};
+ this.headerMap.forEach((v3, k5) => m5[k5] = v3);
+ return m5;
+ }
+};
+async function readTalerErrorResponse(httpResponse) {
+ const contentType = httpResponse.headers.get("content-type");
+ if (contentType !== "application/json") {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ contentType: contentType || "<null>"
+ }, "Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.");
+ }
+ let errJson;
+ try {
+ errJson = await httpResponse.json();
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Couldn't parse JSON format from error response");
+ }
+ const talerErrorCode = errJson.code;
+ if (typeof talerErrorCode !== "number") {
+ logger3.warn(`malformed error response (status ${httpResponse.status}): ${j2s(errJson)}`);
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status
+ }, "Error response did not contain error code");
+ }
+ return errJson;
+}
+async function readSuccessResponseJsonOrErrorCode(httpResponse, codec) {
+ if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {
+ return {
+ isError: true,
+ talerErrorResponse: await readTalerErrorResponse(httpResponse)
+ };
+ }
+ let respJson;
+ try {
+ respJson = await httpResponse.json();
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Couldn't parse JSON format from response");
+ }
+ let parsedResponse;
+ try {
+ parsedResponse = codec.decode(respJson);
+ } catch (e4) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e4.toString()
+ }, "Response invalid");
+ }
+ return {
+ isError: false,
+ response: parsedResponse
+ };
+}
+function throwUnexpectedRequestError(httpResponse, talerErrorResponse) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ errorResponse: talerErrorResponse
+ }, `Unexpected HTTP status ${httpResponse.status} in response`);
+}
+async function readSuccessResponseJsonOrThrow(httpResponse, codec) {
+ const r3 = await readSuccessResponseJsonOrErrorCode(httpResponse, codec);
+ if (!r3.isError) {
+ return r3.response;
+ }
+ throwUnexpectedRequestError(httpResponse, r3.talerErrorResponse);
+}
+function encodeBody(body) {
+ if (body == null) {
+ return new ArrayBuffer(0);
+ }
+ if (typeof body === "string") {
+ return textEncoder.encode(body).buffer;
+ } else if (ArrayBuffer.isView(body)) {
+ return body.buffer;
+ } else if (body instanceof ArrayBuffer) {
+ return body;
+ } else if (typeof body === "object") {
+ return textEncoder.encode(JSON.stringify(body)).buffer;
+ }
+ throw new TypeError("unsupported request body type");
+}
+function getDefaultHeaders(method) {
+ const headers = {};
+ if (method === "POST" || method === "PUT" || method === "PATCH") {
+ headers["Content-Type"] = "application/json";
+ }
+ headers["Accept"] = "application/json";
+ return headers;
+}
+function makeBasicAuthHeader(username, password) {
+ const auth = `${username}:${password}`;
+ const authEncoded = base64FromArrayBuffer(stringToBytes(auth));
+ return `Basic ${authEncoded}`;
+}
+
+// ../taler-util/lib/operation.js
+async function opSuccessFromHttp(resp, codec) {
+ const body = await readSuccessResponseJsonOrThrow(resp, codec);
+ return { type: "ok", body };
+}
+function opFixedSuccess(body) {
+ return { type: "ok", body };
+}
+function opEmptySuccess(resp) {
+ return { type: "ok", body: void 0 };
+}
+async function opKnownAlternativeFailure(resp, s5, codec) {
+ const body = await readSuccessResponseJsonOrThrow(resp, codec);
+ return { type: "fail", case: s5, body };
+}
+async function opKnownHttpFailure(s5, resp) {
+ const detail = await readTalerErrorResponse(resp);
+ return { type: "fail", case: s5, detail };
+}
+function opKnownTalerFailure(s5, detail) {
+ return { type: "fail", case: s5, detail };
+}
+function opUnknownFailure(resp, error2) {
+ throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
+ requestUrl: resp.requestUrl,
+ requestMethod: resp.requestMethod,
+ httpStatusCode: resp.status,
+ errorResponse: error2
+ }, `Unexpected HTTP status ${resp.status} in response`);
+}
+
// ../taler-util/lib/taleruri.js
function codecForTalerUriString() {
return {
@@ -11559,24 +11787,33 @@ function codecForTalerUriString() {
}
};
}
-function parseWithdrawUri(s5) {
- const pi = parseProtoInfo(s5, "withdraw");
- if (!pi) {
- return void 0;
+function parseWithdrawUriWithError(s5) {
+ const pi = parseProtoInfoWithError(s5, "withdraw");
+ if (pi.type === "fail") {
+ return pi;
}
- const parts = pi.rest.split("/");
+ const parts = pi.body.rest.split("/");
if (parts.length < 2) {
- return void 0;
+ return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {
+ code: TalerErrorCode.WALLET_TALER_URI_MALFORMED
+ });
}
const host = parts[0].toLowerCase();
const pathSegments = parts.slice(1, parts.length - 1);
const withdrawId = parts[parts.length - 1];
const p4 = [host, ...pathSegments].join("/");
- return {
+ const result = {
type: TalerUriAction.Withdraw,
- bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.innerProto}://${p4}/`),
+ bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.body.innerProto}://${p4}/`),
withdrawalOperationId: withdrawId
};
+ return opFixedSuccess(result);
+}
+function parseWithdrawUri(s5) {
+ const r3 = parseWithdrawUriWithError(s5);
+ if (r3.type === "fail")
+ return void 0;
+ return r3.body;
}
var TalerUriType;
(function(TalerUriType2) {
@@ -11621,6 +11858,30 @@ function parseProtoInfo(s5, action) {
return void 0;
}
}
+function parseProtoInfoWithError(s5, action) {
+ if (!s5.toLowerCase().startsWith("taler://") && !s5.toLowerCase().startsWith("taler+http://")) {
+ return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {
+ code: TalerErrorCode.WALLET_TALER_URI_MALFORMED
+ });
+ }
+ const pfxPlain = `taler://${action}/`;
+ const pfxHttp = `taler+http://${action}/`;
+ if (s5.toLowerCase().startsWith(pfxPlain)) {
+ return opFixedSuccess({
+ innerProto: "https",
+ rest: s5.substring(pfxPlain.length)
+ });
+ } else if (s5.toLowerCase().startsWith(pfxHttp)) {
+ return opFixedSuccess({
+ innerProto: "http",
+ rest: s5.substring(pfxHttp.length)
+ });
+ } else {
+ return opKnownTalerFailure(TalerErrorCode.WALLET_TALER_URI_MALFORMED, {
+ code: TalerErrorCode.WALLET_TALER_URI_MALFORMED
+ });
+ }
+}
var parsers = {
[TalerUriAction.Pay]: parsePayUri,
[TalerUriAction.PayPull]: parsePayPullUri,
@@ -11930,6 +12191,7 @@ function getUrlInfo(baseUrl, params = {}) {
// ../taler-util/lib/http-client/types.js
var codecForAccessToken = codecForString;
var codecForTokenSuccessResponse = () => buildCodecForObject().property("access_token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponse");
+var codecForTokenSuccessResponseMerchant = () => buildCodecForObject().property("token", codecForAccessToken()).property("expiration", codecForTimestamp).build("TalerAuthentication.TokenSuccessResponseMerchant");
var codecForCurrencySpecificiation = () => buildCodecForObject().property("name", codecForString()).property("num_fractional_input_digits", codecForNumber()).property("num_fractional_normal_digits", codecForNumber()).property("num_fractional_trailing_zero_digits", codecForNumber()).property("alt_unit_names", codecForMap(codecForString())).build("CurrencySpecification");
var codecForCoreBankConfig = () => buildCodecForObject().property("name", codecForConstString("libeufin-bank")).property("version", codecForString()).property("bank_name", codecForString()).property("allow_conversion", codecForBoolean()).property("allow_registrations", codecForBoolean()).property("allow_deletions", codecForBoolean()).property("allow_edit_name", codecForBoolean()).property("allow_edit_cashout_payto_uri", codecForBoolean()).property("default_debit_threshold", codecForAmountString()).property("currency", codecForString()).property("currency_specification", codecForCurrencySpecificiation()).property("supported_tan_channels", codecForList(codecForEither(codecForConstString(TalerCorebankApi.TanChannel.SMS), codecForConstString(TalerCorebankApi.TanChannel.EMAIL)))).property("wire_type", codecForString()).build("TalerCorebankApi.Config");
var codecForBalance = () => buildCodecForObject().property("amount", codecForAmountString()).property("credit_debit_indicator", codecForEither(codecForConstString("credit"), codecForConstString("debit"))).build("TalerCorebankApi.Balance");
@@ -11997,68 +12259,68 @@ var TalerMerchantApi;
// ../taler-util/lib/http-status-codes.js
var HttpStatusCode;
-(function(HttpStatusCode2) {
- HttpStatusCode2[HttpStatusCode2["Continue"] = 100] = "Continue";
- HttpStatusCode2[HttpStatusCode2["SwitchingProtocols"] = 101] = "SwitchingProtocols";
- HttpStatusCode2[HttpStatusCode2["Processing"] = 102] = "Processing";
- HttpStatusCode2[HttpStatusCode2["Ok"] = 200] = "Ok";
- HttpStatusCode2[HttpStatusCode2["Created"] = 201] = "Created";
- HttpStatusCode2[HttpStatusCode2["Accepted"] = 202] = "Accepted";
- HttpStatusCode2[HttpStatusCode2["NonAuthoritativeInformation"] = 203] = "NonAuthoritativeInformation";
- HttpStatusCode2[HttpStatusCode2["NoContent"] = 204] = "NoContent";
- HttpStatusCode2[HttpStatusCode2["ResetContent"] = 205] = "ResetContent";
- HttpStatusCode2[HttpStatusCode2["PartialContent"] = 206] = "PartialContent";
- HttpStatusCode2[HttpStatusCode2["MultiStatus"] = 207] = "MultiStatus";
- HttpStatusCode2[HttpStatusCode2["AlreadyReported"] = 208] = "AlreadyReported";
- HttpStatusCode2[HttpStatusCode2["ImUsed"] = 226] = "ImUsed";
- HttpStatusCode2[HttpStatusCode2["MultipleChoices"] = 300] = "MultipleChoices";
- HttpStatusCode2[HttpStatusCode2["MovedPermanently"] = 301] = "MovedPermanently";
- HttpStatusCode2[HttpStatusCode2["Found"] = 302] = "Found";
- HttpStatusCode2[HttpStatusCode2["SeeOther"] = 303] = "SeeOther";
- HttpStatusCode2[HttpStatusCode2["NotModified"] = 304] = "NotModified";
- HttpStatusCode2[HttpStatusCode2["UseProxy"] = 305] = "UseProxy";
- HttpStatusCode2[HttpStatusCode2["SwitchProxy"] = 306] = "SwitchProxy";
- HttpStatusCode2[HttpStatusCode2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
- HttpStatusCode2[HttpStatusCode2["PermanentRedirect"] = 308] = "PermanentRedirect";
- HttpStatusCode2[HttpStatusCode2["BadRequest"] = 400] = "BadRequest";
- HttpStatusCode2[HttpStatusCode2["Unauthorized"] = 401] = "Unauthorized";
- HttpStatusCode2[HttpStatusCode2["PaymentRequired"] = 402] = "PaymentRequired";
- HttpStatusCode2[HttpStatusCode2["Forbidden"] = 403] = "Forbidden";
- HttpStatusCode2[HttpStatusCode2["NotFound"] = 404] = "NotFound";
- HttpStatusCode2[HttpStatusCode2["MethodNotAllowed"] = 405] = "MethodNotAllowed";
- HttpStatusCode2[HttpStatusCode2["NotAcceptable"] = 406] = "NotAcceptable";
- HttpStatusCode2[HttpStatusCode2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
- HttpStatusCode2[HttpStatusCode2["RequestTimeout"] = 408] = "RequestTimeout";
- HttpStatusCode2[HttpStatusCode2["Conflict"] = 409] = "Conflict";
- HttpStatusCode2[HttpStatusCode2["Gone"] = 410] = "Gone";
- HttpStatusCode2[HttpStatusCode2["LengthRequired"] = 411] = "LengthRequired";
- HttpStatusCode2[HttpStatusCode2["PreconditionFailed"] = 412] = "PreconditionFailed";
- HttpStatusCode2[HttpStatusCode2["PayloadTooLarge"] = 413] = "PayloadTooLarge";
- HttpStatusCode2[HttpStatusCode2["UriTooLong"] = 414] = "UriTooLong";
- HttpStatusCode2[HttpStatusCode2["UnsupportedMediaType"] = 415] = "UnsupportedMediaType";
- HttpStatusCode2[HttpStatusCode2["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
- HttpStatusCode2[HttpStatusCode2["ExpectationFailed"] = 417] = "ExpectationFailed";
- HttpStatusCode2[HttpStatusCode2["IAmATeapot"] = 418] = "IAmATeapot";
- HttpStatusCode2[HttpStatusCode2["MisdirectedRequest"] = 421] = "MisdirectedRequest";
- HttpStatusCode2[HttpStatusCode2["UnprocessableEntity"] = 422] = "UnprocessableEntity";
- HttpStatusCode2[HttpStatusCode2["Locked"] = 423] = "Locked";
- HttpStatusCode2[HttpStatusCode2["FailedDependency"] = 424] = "FailedDependency";
- HttpStatusCode2[HttpStatusCode2["UpgradeRequired"] = 426] = "UpgradeRequired";
- HttpStatusCode2[HttpStatusCode2["PreconditionRequired"] = 428] = "PreconditionRequired";
- HttpStatusCode2[HttpStatusCode2["TooManyRequests"] = 429] = "TooManyRequests";
- HttpStatusCode2[HttpStatusCode2["RequestHeaderFieldsTooLarge"] = 431] = "RequestHeaderFieldsTooLarge";
- HttpStatusCode2[HttpStatusCode2["UnavailableForLegalReasons"] = 451] = "UnavailableForLegalReasons";
- HttpStatusCode2[HttpStatusCode2["InternalServerError"] = 500] = "InternalServerError";
- HttpStatusCode2[HttpStatusCode2["NotImplemented"] = 501] = "NotImplemented";
- HttpStatusCode2[HttpStatusCode2["BadGateway"] = 502] = "BadGateway";
- HttpStatusCode2[HttpStatusCode2["ServiceUnavailable"] = 503] = "ServiceUnavailable";
- HttpStatusCode2[HttpStatusCode2["GatewayTimeout"] = 504] = "GatewayTimeout";
- HttpStatusCode2[HttpStatusCode2["HttpVersionNotSupported"] = 505] = "HttpVersionNotSupported";
- HttpStatusCode2[HttpStatusCode2["VariantAlsoNegotiates"] = 506] = "VariantAlsoNegotiates";
- HttpStatusCode2[HttpStatusCode2["InsufficientStorage"] = 507] = "InsufficientStorage";
- HttpStatusCode2[HttpStatusCode2["LoopDetected"] = 508] = "LoopDetected";
- HttpStatusCode2[HttpStatusCode2["NotExtended"] = 510] = "NotExtended";
- HttpStatusCode2[HttpStatusCode2["NetworkAuthenticationRequired"] = 511] = "NetworkAuthenticationRequired";
+(function(HttpStatusCode3) {
+ HttpStatusCode3[HttpStatusCode3["Continue"] = 100] = "Continue";
+ HttpStatusCode3[HttpStatusCode3["SwitchingProtocols"] = 101] = "SwitchingProtocols";
+ HttpStatusCode3[HttpStatusCode3["Processing"] = 102] = "Processing";
+ HttpStatusCode3[HttpStatusCode3["Ok"] = 200] = "Ok";
+ HttpStatusCode3[HttpStatusCode3["Created"] = 201] = "Created";
+ HttpStatusCode3[HttpStatusCode3["Accepted"] = 202] = "Accepted";
+ HttpStatusCode3[HttpStatusCode3["NonAuthoritativeInformation"] = 203] = "NonAuthoritativeInformation";
+ HttpStatusCode3[HttpStatusCode3["NoContent"] = 204] = "NoContent";
+ HttpStatusCode3[HttpStatusCode3["ResetContent"] = 205] = "ResetContent";
+ HttpStatusCode3[HttpStatusCode3["PartialContent"] = 206] = "PartialContent";
+ HttpStatusCode3[HttpStatusCode3["MultiStatus"] = 207] = "MultiStatus";
+ HttpStatusCode3[HttpStatusCode3["AlreadyReported"] = 208] = "AlreadyReported";
+ HttpStatusCode3[HttpStatusCode3["ImUsed"] = 226] = "ImUsed";
+ HttpStatusCode3[HttpStatusCode3["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpStatusCode3[HttpStatusCode3["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpStatusCode3[HttpStatusCode3["Found"] = 302] = "Found";
+ HttpStatusCode3[HttpStatusCode3["SeeOther"] = 303] = "SeeOther";
+ HttpStatusCode3[HttpStatusCode3["NotModified"] = 304] = "NotModified";
+ HttpStatusCode3[HttpStatusCode3["UseProxy"] = 305] = "UseProxy";
+ HttpStatusCode3[HttpStatusCode3["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpStatusCode3[HttpStatusCode3["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpStatusCode3[HttpStatusCode3["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpStatusCode3[HttpStatusCode3["BadRequest"] = 400] = "BadRequest";
+ HttpStatusCode3[HttpStatusCode3["Unauthorized"] = 401] = "Unauthorized";
+ HttpStatusCode3[HttpStatusCode3["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpStatusCode3[HttpStatusCode3["Forbidden"] = 403] = "Forbidden";
+ HttpStatusCode3[HttpStatusCode3["NotFound"] = 404] = "NotFound";
+ HttpStatusCode3[HttpStatusCode3["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpStatusCode3[HttpStatusCode3["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpStatusCode3[HttpStatusCode3["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpStatusCode3[HttpStatusCode3["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpStatusCode3[HttpStatusCode3["Conflict"] = 409] = "Conflict";
+ HttpStatusCode3[HttpStatusCode3["Gone"] = 410] = "Gone";
+ HttpStatusCode3[HttpStatusCode3["LengthRequired"] = 411] = "LengthRequired";
+ HttpStatusCode3[HttpStatusCode3["PreconditionFailed"] = 412] = "PreconditionFailed";
+ HttpStatusCode3[HttpStatusCode3["PayloadTooLarge"] = 413] = "PayloadTooLarge";
+ HttpStatusCode3[HttpStatusCode3["UriTooLong"] = 414] = "UriTooLong";
+ HttpStatusCode3[HttpStatusCode3["UnsupportedMediaType"] = 415] = "UnsupportedMediaType";
+ HttpStatusCode3[HttpStatusCode3["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
+ HttpStatusCode3[HttpStatusCode3["ExpectationFailed"] = 417] = "ExpectationFailed";
+ HttpStatusCode3[HttpStatusCode3["IAmATeapot"] = 418] = "IAmATeapot";
+ HttpStatusCode3[HttpStatusCode3["MisdirectedRequest"] = 421] = "MisdirectedRequest";
+ HttpStatusCode3[HttpStatusCode3["UnprocessableEntity"] = 422] = "UnprocessableEntity";
+ HttpStatusCode3[HttpStatusCode3["Locked"] = 423] = "Locked";
+ HttpStatusCode3[HttpStatusCode3["FailedDependency"] = 424] = "FailedDependency";
+ HttpStatusCode3[HttpStatusCode3["UpgradeRequired"] = 426] = "UpgradeRequired";
+ HttpStatusCode3[HttpStatusCode3["PreconditionRequired"] = 428] = "PreconditionRequired";
+ HttpStatusCode3[HttpStatusCode3["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpStatusCode3[HttpStatusCode3["RequestHeaderFieldsTooLarge"] = 431] = "RequestHeaderFieldsTooLarge";
+ HttpStatusCode3[HttpStatusCode3["UnavailableForLegalReasons"] = 451] = "UnavailableForLegalReasons";
+ HttpStatusCode3[HttpStatusCode3["InternalServerError"] = 500] = "InternalServerError";
+ HttpStatusCode3[HttpStatusCode3["NotImplemented"] = 501] = "NotImplemented";
+ HttpStatusCode3[HttpStatusCode3["BadGateway"] = 502] = "BadGateway";
+ HttpStatusCode3[HttpStatusCode3["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpStatusCode3[HttpStatusCode3["GatewayTimeout"] = 504] = "GatewayTimeout";
+ HttpStatusCode3[HttpStatusCode3["HttpVersionNotSupported"] = 505] = "HttpVersionNotSupported";
+ HttpStatusCode3[HttpStatusCode3["VariantAlsoNegotiates"] = 506] = "VariantAlsoNegotiates";
+ HttpStatusCode3[HttpStatusCode3["InsufficientStorage"] = 507] = "InsufficientStorage";
+ HttpStatusCode3[HttpStatusCode3["LoopDetected"] = 508] = "LoopDetected";
+ HttpStatusCode3[HttpStatusCode3["NotExtended"] = 510] = "NotExtended";
+ HttpStatusCode3[HttpStatusCode3["NetworkAuthenticationRequired"] = 511] = "NetworkAuthenticationRequired";
})(HttpStatusCode || (HttpStatusCode = {}));
// ../taler-util/lib/http-impl.missing.js
@@ -12068,146 +12330,6 @@ var HttpLibImpl = class {
}
};
-// ../taler-util/lib/http-common.js
-var textEncoder = new TextEncoder();
-var logger3 = new Logger("http.ts");
-var DEFAULT_REQUEST_TIMEOUT_MS = 6e4;
-var Headers2 = class {
- constructor() {
- this.headerMap = /* @__PURE__ */ new Map();
- }
- get(name) {
- const r3 = this.headerMap.get(name.toLowerCase());
- if (r3) {
- return r3;
- }
- return null;
- }
- set(name, value) {
- const normalizedName = name.toLowerCase();
- const existing = this.headerMap.get(normalizedName);
- if (existing !== void 0) {
- this.headerMap.set(normalizedName, existing + "," + value);
- } else {
- this.headerMap.set(normalizedName, value);
- }
- }
- toJSON() {
- const m5 = {};
- this.headerMap.forEach((v3, k5) => m5[k5] = v3);
- return m5;
- }
-};
-async function readTalerErrorResponse(httpResponse) {
- const contentType = httpResponse.headers.get("content-type");
- if (contentType !== "application/json") {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status,
- contentType: contentType || "<null>"
- }, "Error response did not even contain JSON. The request URL might be wrong or the service might be unavailable.");
- }
- let errJson;
- try {
- errJson = await httpResponse.json();
- } catch (e4) {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status,
- validationError: e4.toString()
- }, "Couldn't parse JSON format from error response");
- }
- const talerErrorCode = errJson.code;
- if (typeof talerErrorCode !== "number") {
- logger3.warn(`malformed error response (status ${httpResponse.status}): ${j2s(errJson)}`);
- throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status
- }, "Error response did not contain error code");
- }
- return errJson;
-}
-async function readSuccessResponseJsonOrErrorCode(httpResponse, codec) {
- if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {
- return {
- isError: true,
- talerErrorResponse: await readTalerErrorResponse(httpResponse)
- };
- }
- let respJson;
- try {
- respJson = await httpResponse.json();
- } catch (e4) {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status,
- validationError: e4.toString()
- }, "Couldn't parse JSON format from response");
- }
- let parsedResponse;
- try {
- parsedResponse = codec.decode(respJson);
- } catch (e4) {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status,
- validationError: e4.toString()
- }, "Response invalid");
- }
- return {
- isError: false,
- response: parsedResponse
- };
-}
-function throwUnexpectedRequestError(httpResponse, talerErrorResponse) {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
- requestUrl: httpResponse.requestUrl,
- requestMethod: httpResponse.requestMethod,
- httpStatusCode: httpResponse.status,
- errorResponse: talerErrorResponse
- }, `Unexpected HTTP status ${httpResponse.status} in response`);
-}
-async function readSuccessResponseJsonOrThrow(httpResponse, codec) {
- const r3 = await readSuccessResponseJsonOrErrorCode(httpResponse, codec);
- if (!r3.isError) {
- return r3.response;
- }
- throwUnexpectedRequestError(httpResponse, r3.talerErrorResponse);
-}
-function encodeBody(body) {
- if (body == null) {
- return new ArrayBuffer(0);
- }
- if (typeof body === "string") {
- return textEncoder.encode(body).buffer;
- } else if (ArrayBuffer.isView(body)) {
- return body.buffer;
- } else if (body instanceof ArrayBuffer) {
- return body;
- } else if (typeof body === "object") {
- return textEncoder.encode(JSON.stringify(body)).buffer;
- }
- throw new TypeError("unsupported request body type");
-}
-function getDefaultHeaders(method) {
- const headers = {};
- if (method === "POST" || method === "PUT" || method === "PATCH") {
- headers["Content-Type"] = "application/json";
- }
- headers["Accept"] = "application/json";
- return headers;
-}
-function makeBasicAuthHeader(username, password) {
- const auth = `${username}:${password}`;
- const authEncoded = base64FromArrayBuffer(stringToBytes(auth));
- return `Basic ${authEncoded}`;
-}
-
// ../taler-util/lib/http.js
function createPlatformHttpLib(args) {
return new HttpLibImpl(args);
@@ -12249,38 +12371,6 @@ var LibtoolVersion;
LibtoolVersion2.parseVersion = parseVersion;
})(LibtoolVersion || (LibtoolVersion = {}));
-// ../taler-util/lib/operation.js
-async function opSuccessFromHttp(resp, codec) {
- const body = await readSuccessResponseJsonOrThrow(resp, codec);
- return { type: "ok", body };
-}
-function opFixedSuccess(body) {
- return { type: "ok", body };
-}
-function opEmptySuccess(resp) {
- return { type: "ok", body: void 0 };
-}
-async function opKnownAlternativeFailure(resp, s5, codec) {
- const body = await readSuccessResponseJsonOrThrow(resp, codec);
- return { type: "fail", case: s5, body };
-}
-async function opKnownHttpFailure(s5, resp) {
- const detail = await readTalerErrorResponse(resp);
- return { type: "fail", case: s5, detail };
-}
-async function opKnownTalerFailure(s5, resp) {
- const detail = await readTalerErrorResponse(resp);
- return { type: "fail", case: s5, detail };
-}
-function opUnknownFailure(resp, text) {
- throw TalerError.fromDetail(TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, {
- requestUrl: resp.requestUrl,
- requestMethod: resp.requestMethod,
- httpStatusCode: resp.status,
- errorResponse: text
- }, `Unexpected HTTP status ${resp.status} in response`);
-}
-
// ../taler-util/lib/MerchantApiClient.js
var logger4 = new Logger("MerchantApiClient.ts");
@@ -12646,6 +12736,10 @@ function getErrorDetailFromException(e4) {
if (e4 instanceof TalerError) {
return e4.errorDetail;
}
+ if (e4 instanceof CancellationToken.CancellationError) {
+ const err2 = makeErrorDetail(TalerErrorCode.WALLET_CORE_REQUEST_CANCELLED, {});
+ return err2;
+ }
if (e4 instanceof Error) {
const err2 = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {
stack: e4.stack
@@ -12764,12 +12858,19 @@ var TransactionType;
TransactionType2["PeerPullDebit"] = "peer-pull-debit";
TransactionType2["PeerPullCredit"] = "peer-pull-credit";
TransactionType2["Recoup"] = "recoup";
+ TransactionType2["DenomLoss"] = "denom-loss";
})(TransactionType || (TransactionType = {}));
var WithdrawalType;
(function(WithdrawalType2) {
WithdrawalType2["TalerBankIntegrationApi"] = "taler-bank-integration-api";
WithdrawalType2["ManualTransfer"] = "manual-transfer";
})(WithdrawalType || (WithdrawalType = {}));
+var DenomLossEventType;
+(function(DenomLossEventType2) {
+ DenomLossEventType2["DenomExpired"] = "denom-expired";
+ DenomLossEventType2["DenomVanished"] = "denom-vanished";
+ DenomLossEventType2["DenomUnoffered"] = "denom-unoffered";
+})(DenomLossEventType || (DenomLossEventType = {}));
var PaymentStatus;
(function(PaymentStatus2) {
PaymentStatus2["Aborted"] = "aborted";
@@ -12810,6 +12911,7 @@ var ScopeType;
var CoinStatus;
(function(CoinStatus2) {
CoinStatus2["Fresh"] = "fresh";
+ CoinStatus2["DenomLoss"] = "denom-loss";
CoinStatus2["FreshSuspended"] = "fresh-suspended";
CoinStatus2["Dormant"] = "dormant";
})(CoinStatus || (CoinStatus = {}));
@@ -12971,7 +13073,7 @@ var TalerBankConversionHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13011,7 +13113,7 @@ var TalerBankConversionHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13051,7 +13153,7 @@ var TalerBankConversionHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13077,16 +13179,15 @@ var TalerBankConversionHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
};
// ../taler-util/lib/http-client/authentication.js
var TalerAuthenticationHttpClient = class {
- constructor(baseUrl, username, httpClient) {
+ constructor(baseUrl, httpClient) {
this.baseUrl = baseUrl;
- this.username = username;
this.PROTOCOL_VERSION = "0:0:0";
this.httpLib = httpClient ?? createPlatformHttpLib();
}
@@ -13099,12 +13200,12 @@ var TalerAuthenticationHttpClient = class {
*
* @returns
*/
- async createAccessToken(password, body) {
+ async createAccessTokenBasic(username, password, body) {
const url = new URL(`token`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
headers: {
- Authorization: makeBasicAuthHeader(this.username, password)
+ Authorization: makeBasicAuthHeader(username, password)
},
body
});
@@ -13116,7 +13217,31 @@ var TalerAuthenticationHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
+ }
+ }
+ /**
+ *
+ * @returns
+ */
+ async createAccessTokenBearer(token, body) {
+ const url = new URL(`token`, this.baseUrl);
+ const resp = await this.httpLib.fetch(url.href, {
+ method: "POST",
+ headers: {
+ Authorization: makeBearerTokenAuthHeader(token)
+ },
+ body
+ });
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForTokenSuccessResponseMerchant());
+ case HttpStatusCode.Unauthorized:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
async deleteAccessToken(token) {
@@ -13133,7 +13258,7 @@ var TalerAuthenticationHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
};
@@ -13174,8 +13299,10 @@ var TalerCoreBankHttpClient = class {
switch (resp.status) {
case HttpStatusCode.Ok:
return opSuccessFromHttp(resp, codecForCoreBankConfig());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13187,12 +13314,14 @@ var TalerCoreBankHttpClient = class {
*/
async createAccount(auth, body) {
const url = new URL(`accounts`, this.baseUrl);
+ const headers = {};
+ if (auth) {
+ headers.Authorization = makeBearerTokenAuthHeader(auth);
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
body,
- headers: {
- Authorization: makeBearerTokenAuthHeader(auth)
- }
+ headers
});
switch (resp.status) {
case HttpStatusCode.Ok: {
@@ -13204,31 +13333,30 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_MISSING_TAN_INFO:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13254,19 +13382,18 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body = await resp.json();
- const details = codecForTalerErrorDetail().decode(body);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13293,25 +13420,24 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_MISSING_TAN_INFO:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13338,19 +13464,18 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13374,7 +13499,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opFixedSuccess({ public_accounts: [] });
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13401,7 +13526,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13424,7 +13549,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13454,7 +13579,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13477,7 +13602,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13506,23 +13631,22 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_ADMIN_CREDITOR:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_SAME_ACCOUNT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNKNOWN_CREDITOR:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13551,7 +13675,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13577,21 +13701,20 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body = await resp.json();
- const details = codecForTalerErrorDetail().decode(body);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13616,7 +13739,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Conflict:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13640,7 +13763,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13668,35 +13791,33 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_BAD_CONVERSION:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_UNALLOWED_DEBIT:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_CONFIRM_INCOMPLETE:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
case HttpStatusCode.BadGateway: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13719,7 +13840,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13743,7 +13864,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13767,7 +13888,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotImplemented:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13793,17 +13914,16 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.BadGateway: {
- const body = await resp.json();
- const details = codecForTalerErrorDetail().decode(body);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body);
+ return opUnknownFailure(resp, details);
}
}
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
/**
@@ -13827,21 +13947,20 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.NotFound:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body2 = await resp.json();
- const details = codecForTalerErrorDetail().decode(body2);
+ const details = await readTalerErrorResponse(resp);
switch (details.code) {
case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED:
- return opKnownTalerFailure(details.code, resp);
+ return opKnownTalerFailure(details.code, details);
default:
- return opUnknownFailure(resp, body2);
+ return opUnknownFailure(resp, details);
}
}
case HttpStatusCode.TooManyRequests:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13856,8 +13975,11 @@ var TalerCoreBankHttpClient = class {
if (params.timeframe) {
url.searchParams.set("timeframe", TalerCorebankApi.MonitorTimeframeParam[params.timeframe]);
}
- if (params.which) {
- url.searchParams.set("which", String(params.which));
+ if (params.date) {
+ const { t_s: seconds } = AbsoluteTime.toProtocolTimestamp(params.date);
+ if (seconds !== "never") {
+ url.searchParams.set("date_s", String(seconds));
+ }
}
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
@@ -13873,7 +13995,7 @@ var TalerCoreBankHttpClient = class {
case HttpStatusCode.Unauthorized:
return opKnownHttpFailure(resp.status, resp);
default:
- return opUnknownFailure(resp, await resp.text());
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
}
}
//
@@ -13920,10 +14042,37 @@ var TalerCoreBankHttpClient = class {
var TalerMerchantInstanceCacheEviction;
(function(TalerMerchantInstanceCacheEviction2) {
TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_ORDER"] = 0] = "CREATE_ORDER";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_ORDER"] = 1] = "UPDATE_ORDER";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_ORDER"] = 2] = "DELETE_ORDER";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_CURRENT_INSTANCE"] = 3] = "UPDATE_CURRENT_INSTANCE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_CURRENT_INSTANCE"] = 4] = "DELETE_CURRENT_INSTANCE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_BANK_ACCOUNT"] = 5] = "CREATE_BANK_ACCOUNT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_BANK_ACCOUNT"] = 6] = "UPDATE_BANK_ACCOUNT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_BANK_ACCOUNT"] = 7] = "DELETE_BANK_ACCOUNT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_PRODUCT"] = 8] = "CREATE_PRODUCT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_PRODUCT"] = 9] = "UPDATE_PRODUCT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_PRODUCT"] = 10] = "DELETE_PRODUCT";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_TRANSFER"] = 11] = "CREATE_TRANSFER";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_TRANSFER"] = 12] = "DELETE_TRANSFER";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_DEVICE"] = 13] = "CREATE_DEVICE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_DEVICE"] = 14] = "UPDATE_DEVICE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_DEVICE"] = 15] = "DELETE_DEVICE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_TEMPLATE"] = 16] = "CREATE_TEMPLATE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_TEMPLATE"] = 17] = "UPDATE_TEMPLATE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_TEMPLATE"] = 18] = "DELETE_TEMPLATE";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_WEBHOOK"] = 19] = "CREATE_WEBHOOK";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_WEBHOOK"] = 20] = "UPDATE_WEBHOOK";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_WEBHOOK"] = 21] = "DELETE_WEBHOOK";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["CREATE_TOKENFAMILY"] = 22] = "CREATE_TOKENFAMILY";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["UPDATE_TOKENFAMILY"] = 23] = "UPDATE_TOKENFAMILY";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["DELETE_TOKENFAMILY"] = 24] = "DELETE_TOKENFAMILY";
+ TalerMerchantInstanceCacheEviction2[TalerMerchantInstanceCacheEviction2["LAST"] = 25] = "LAST";
})(TalerMerchantInstanceCacheEviction || (TalerMerchantInstanceCacheEviction = {}));
var TalerMerchantManagementCacheEviction;
(function(TalerMerchantManagementCacheEviction2) {
- TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["CREATE_INSTANCE"] = 0] = "CREATE_INSTANCE";
+ TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["CREATE_INSTANCE"] = 26] = "CREATE_INSTANCE";
+ TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["UPDATE_INSTANCE"] = 27] = "UPDATE_INSTANCE";
+ TalerMerchantManagementCacheEviction2[TalerMerchantManagementCacheEviction2["DELETE_INSTANCE"] = 28] = "DELETE_INSTANCE";
})(TalerMerchantManagementCacheEviction || (TalerMerchantManagementCacheEviction = {}));
// ../taler-util/lib/i18n.js
@@ -14048,6 +14197,7 @@ var ObservabilityEventType;
ObservabilityEventType2["CryptoStart"] = "crypto-start";
ObservabilityEventType2["CryptoFinishSuccess"] = "crypto-finish-success";
ObservabilityEventType2["CryptoFinishError"] = "crypto-finish-error";
+ ObservabilityEventType2["Message"] = "message";
})(ObservabilityEventType || (ObservabilityEventType = {}));
// ../taler-util/lib/observability.js
@@ -14972,7 +15122,7 @@ function strToUTF8Arr(sDOMStr) {
async function defaultRequestHandler(baseUrl, endpoint, options = {}) {
const requestHeaders = {};
if (options.token) {
- requestHeaders.Authorization = `Bearer ${options.token}`;
+ requestHeaders.Authorization = `Bearer secret-token:${options.token}`;
} else if (options.basicAuth) {
requestHeaders.Authorization = `Basic ${base64encode(
`${options.basicAuth.username}:${options.basicAuth.password}`
@@ -22521,6 +22671,8 @@ var useTranslationContext = () => q2(Context2);
var ActiviyTracker = class {
constructor() {
this.observers = new Array();
+ this.notify = this.notify.bind(this);
+ this.subscribe = this.subscribe.bind(this);
}
notify(data) {
this.observers.forEach((observer) => observer(data));
@@ -22538,6 +22690,7 @@ var ActiviyTracker = class {
};
var BankContext = B(void 0);
var useBankCoreApiContext = () => q2(BankContext);
+var CONFIG_FAIL_TRY_AGAIN_MS = 5e3;
var BankApiProvider = ({
baseUrl,
children,
@@ -22548,24 +22701,41 @@ var BankApiProvider = ({
const { i18n: i18n2 } = useTranslationContext();
const { getRemoteConfig, VERSION: VERSION2, lib, cancelRequest, onActivity } = buildBankApiClient(baseUrl, evictors);
h2(() => {
- getRemoteConfig().then((config) => {
- if (LibtoolVersion.compare(VERSION2, config.version)) {
- setChecked({ type: "ok", config, hints: [] });
- } else {
- setChecked({
- type: "incompatible",
- result: config,
- supported: VERSION2
- });
- }
- }).catch((error2) => {
- if (error2 instanceof TalerError) {
- setChecked({ type: "error", error: error2 });
+ let keepRetrying = true;
+ async function testConfig() {
+ try {
+ const config = await getRemoteConfig();
+ if (LibtoolVersion.compare(VERSION2, config.version)) {
+ setChecked({ type: "ok", config, hints: [] });
+ } else {
+ setChecked({
+ type: "incompatible",
+ result: config,
+ supported: VERSION2
+ });
+ }
+ } catch (error2) {
+ if (error2 instanceof TalerError) {
+ if (keepRetrying) {
+ setTimeout(() => {
+ testConfig();
+ }, CONFIG_FAIL_TRY_AGAIN_MS);
+ }
+ setChecked({ type: "error", error: error2 });
+ } else {
+ setChecked({ type: "error", error: TalerError.fromException(error2) });
+ }
}
- });
+ }
+ testConfig();
+ return () => {
+ keepRetrying = false;
+ };
}, []);
if (checked === void 0) {
- return h(frameOnError, { children: h("div", {}, "checking compatibility with server...") });
+ return h(frameOnError, {
+ children: h("div", {}, "checking compatibility with server...")
+ });
}
if (checked.type === "error") {
return h(frameOnError, {
@@ -22605,11 +22775,7 @@ function buildBankApiClient(url, evictors) {
tracker.notify(ev);
}
});
- const bank = new TalerCoreBankHttpClient(
- url.href,
- httpLib,
- evictors.bank
- );
+ const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);
const conversion = new TalerBankConversionHttpClient(
bank.getConversionInfoAPI().href,
httpLib,
@@ -22617,11 +22783,13 @@ function buildBankApiClient(url, evictors) {
);
const auth = (user) => new TalerAuthenticationHttpClient(
bank.getAuthenticationAPI(user).href,
- user,
httpLib
);
async function getRemoteConfig() {
const resp = await bank.getConfig();
+ if (resp.type === "fail") {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ }
return resp.body;
}
return {
@@ -24090,7 +24258,10 @@ var codecForSessionState = () => buildCodecForUnion().discriminateOn("status").a
var defaultState = {
status: "loggedOut"
};
-var SESSION_STATE_KEY = buildStorageKey("bank-session", codecForSessionState());
+var SESSION_STATE_KEY = buildStorageKey(
+ "bank-session",
+ codecForSessionState()
+);
function useSessionState() {
const { value: state, update } = useLocalStorage(
SESSION_STATE_KEY,
@@ -24196,7 +24367,8 @@ function undefinedIfEmpty(obj) {
(k5) => obj[k5] !== void 0
) ? obj : void 0;
}
-var PAGE_SIZE = 5;
+var PAGINATED_LIST_SIZE = 5;
+var PAGINATED_LIST_REQUEST = PAGINATED_LIST_SIZE + 1;
var COUNTRY_TABLE = {
AE: "U.A.E.",
AF: "Afghanistan",
@@ -24435,7 +24607,11 @@ function PaytoWireTransferForm({
const [inputType, setInputType] = p3("form");
const isRawPayto = inputType !== "form";
const { state: credentials } = useSessionState();
- const { lib: { bank: api }, config, url } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config,
+ url
+ } = useBankCoreApiContext();
const sendingToFixedAccount = withAccount !== void 0;
const [account, setAccount] = p3(withAccount);
const [subject, setSubject] = p3(withSubject);
@@ -28016,7 +28192,9 @@ function RegistrationForm({
const [repeatPassword, setRepeatPassword] = p3();
const [notification, , handleError] = useLocalNotification();
const settings = useSettingsContext();
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const { i18n: i18n2 } = useTranslationContext();
const errors2 = undefinedIfEmpty({
name: !name ? i18n2.str`Missing name` : void 0,
@@ -28036,7 +28214,7 @@ function RegistrationForm({
});
async function doRegistrationAndLogin(name2, username2, password2, onComplete) {
await handleError(async (onError) => {
- const resp = await api.createAccount("", {
+ const resp = await api.createAccount(void 0, {
name: name2,
username: username2,
password: password2
@@ -28276,7 +28454,9 @@ function LoginForm({
);
const [password, setPassword] = p3();
const { i18n: i18n2 } = useTranslationContext();
- const { lib: { auth: authenticator } } = useBankCoreApiContext();
+ const {
+ lib: { auth: authenticator }
+ } = useBankCoreApiContext();
const [notification, withErrorHandler] = useLocalNotificationHandler();
const { config } = useBankCoreApiContext();
const ref = _2(null);
@@ -28291,8 +28471,7 @@ function LoginForm({
session.logOut();
}
const loginHandler = !username || !password ? void 0 : withErrorHandler(
- async () => authenticator(username).createAccessToken(password, {
- // scope: "readwrite" as "write", // FIX: different than merchant
+ async () => authenticator(username).createAccessTokenBasic(username, password, {
scope: "readwrite",
duration: { d_us: "forever" },
refreshable: true
@@ -28440,7 +28619,9 @@ function revalidateAccountDetails() {
}
function useAccountDetails(account) {
const { state: credentials } = useSessionState();
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
async function fetcher([username, token2]) {
return await api.getAccount({ username, token: token2 });
}
@@ -28453,7 +28634,9 @@ function useAccountDetails(account) {
return void 0;
}
function useWithdrawalDetails(wid) {
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [latestStatus, setLatestStatus] = p3();
async function fetcher([wid2, old_state]) {
return await api.getWithdrawalById(
@@ -28493,12 +28676,14 @@ async function revalidatePublicAccounts() {
}
function usePublicAccounts(filterAccount, initial3) {
const [offset, setOffset] = p3(initial3);
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
async function fetcher([account, txid]) {
return await api.getPublicAccounts(
{ account },
{
- limit: PAGE_SIZE,
+ limit: PAGINATED_LIST_REQUEST,
offset: txid ? String(txid) : void 0,
order: "asc"
}
@@ -28515,32 +28700,39 @@ function usePublicAccounts(filterAccount, initial3) {
shouldRetryOnError: false,
keepPreviousData: true
});
- const isLastPage = data && data.type === "ok" && data.body.public_accounts.length <= PAGE_SIZE;
- const isFirstPage = !offset;
- const result = data && data.type == "ok" ? structuredClone(data.body.public_accounts) : [];
- if (result.length == PAGE_SIZE + 1) {
+ if (error2)
+ return error2;
+ if (data === void 0)
+ return void 0;
+ return buildPaginatedResult(
+ data.body.public_accounts,
+ offset,
+ setOffset,
+ (d5) => d5.row_id ?? 0
+ );
+}
+function buildPaginatedResult(data, offset, setOffset, getId) {
+ const isLastPage = data.length < PAGINATED_LIST_REQUEST;
+ const isFirstPage = offset === void 0;
+ const result = structuredClone(data);
+ if (result.length == PAGINATED_LIST_REQUEST) {
result.pop();
}
- const pagination = {
- result,
+ return {
+ type: "ok",
+ body: result,
isLastPage,
isFirstPage,
loadNext: () => {
if (!result.length)
return;
- setOffset(result[result.length - 1].row_id);
+ const id = getId(result[result.length - 1]);
+ setOffset(id);
},
loadFirst: () => {
- setOffset(0);
+ setOffset(void 0);
}
};
- if (data) {
- return { ok: true, data: data.body, ...pagination };
- }
- if (error2) {
- return error2;
- }
- return void 0;
}
function revalidateTransactions() {
return mutate(
@@ -28553,12 +28745,14 @@ function useTransactions(account, initial3) {
const { state: credentials } = useSessionState();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
const [offset, setOffset] = p3(initial3);
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
async function fetcher([username, token2, txid]) {
return await api.getTransactions(
{ username, token: token2 },
{
- limit: PAGE_SIZE + 1,
+ limit: PAGINATED_LIST_REQUEST,
offset: txid ? String(txid) : void 0,
order: "dec"
}
@@ -28573,32 +28767,18 @@ function useTransactions(account, initial3) {
revalidateOnFocus: false,
revalidateOnReconnect: false
});
- const isLastPage = data && data.type === "ok" && data.body.transactions.length <= PAGE_SIZE;
- const isFirstPage = !offset;
- const result = data && data.type == "ok" ? structuredClone(data.body.transactions) : [];
- if (result.length == PAGE_SIZE + 1) {
- result.pop();
- }
- const pagination = {
- result,
- isLastPage,
- isFirstPage,
- loadNext: () => {
- if (!result.length)
- return;
- setOffset(result[result.length - 1].row_id);
- },
- loadFirst: () => {
- setOffset(0);
- }
- };
- if (data) {
- return { ok: true, data, ...pagination };
- }
- if (error2) {
+ if (error2)
return error2;
- }
- return void 0;
+ if (data === void 0)
+ return void 0;
+ if (data.type !== "ok")
+ return data;
+ return buildPaginatedResult(
+ data.body.transactions,
+ offset,
+ setOffset,
+ (d5) => d5.row_id
+ );
}
// src/pages/AccountPage/state.ts
@@ -28689,20 +28869,26 @@ function useComponentState2({
account,
routeCreateWireTransfer
}) {
- const txResult = useTransactions(account);
- if (!txResult) {
+ const result = useTransactions(account);
+ if (!result) {
return {
status: "loading",
error: void 0
};
}
- if (txResult instanceof TalerError) {
+ if (result instanceof TalerError) {
return {
status: "loading-error",
- error: txResult
+ error: result
+ };
+ }
+ if (result.type === "fail") {
+ return {
+ status: "loading",
+ error: void 0
};
}
- const transactions = txResult.result.map((tx) => {
+ const transactions = result.body.map((tx) => {
const negative = tx.direction === "debit";
const cp = parsePaytoUri(
negative ? tx.creditor_payto_uri : tx.debtor_payto_uri
@@ -28724,8 +28910,8 @@ function useComponentState2({
error: void 0,
routeCreateWireTransfer,
transactions,
- onGoNext: txResult.isLastPage ? void 0 : txResult.loadNext,
- onGoStart: txResult.isFirstPage ? void 0 : txResult.loadFirst
+ onGoNext: result.isLastPage ? void 0 : result.loadNext,
+ onGoStart: result.isFirstPage ? void 0 : result.loadFirst
};
}
@@ -30676,48 +30862,6 @@ function formatISO(date, options) {
return result;
}
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getDate/index.js
-function getDate(dirtyDate) {
- requiredArgs2(1, arguments);
- var date = toDate2(dirtyDate);
- var dayOfMonth = date.getDate();
- return dayOfMonth;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getDaysInMonth/index.js
-function getDaysInMonth(dirtyDate) {
- requiredArgs2(1, arguments);
- var date = toDate2(dirtyDate);
- var year = date.getFullYear();
- var monthIndex = date.getMonth();
- var lastDayOfMonth = /* @__PURE__ */ new Date(0);
- lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);
- lastDayOfMonth.setHours(0, 0, 0, 0);
- return lastDayOfMonth.getDate();
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getHours/index.js
-function getHours(dirtyDate) {
- requiredArgs2(1, arguments);
- var date = toDate2(dirtyDate);
- var hours = date.getHours();
- return hours;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getMonth/index.js
-function getMonth(dirtyDate) {
- requiredArgs2(1, arguments);
- var date = toDate2(dirtyDate);
- var month = date.getMonth();
- return month;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/getYear/index.js
-function getYear(dirtyDate) {
- requiredArgs2(1, arguments);
- return toDate2(dirtyDate).getFullYear();
-}
-
// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/intervalToDuration/index.js
function intervalToDuration(interval) {
requiredArgs2(1, arguments);
@@ -30760,51 +30904,6 @@ function subDays(dirtyDate, dirtyAmount) {
return addDays(dirtyDate, -amount);
}
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setMonth/index.js
-function setMonth(dirtyDate, dirtyMonth) {
- requiredArgs2(2, arguments);
- var date = toDate2(dirtyDate);
- var month = toInteger2(dirtyMonth);
- var year = date.getFullYear();
- var day = date.getDate();
- var dateWithDesiredMonth = /* @__PURE__ */ new Date(0);
- dateWithDesiredMonth.setFullYear(year, month, 15);
- dateWithDesiredMonth.setHours(0, 0, 0, 0);
- var daysInMonth = getDaysInMonth(dateWithDesiredMonth);
- date.setMonth(month, Math.min(day, daysInMonth));
- return date;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setDate/index.js
-function setDate(dirtyDate, dirtyDayOfMonth) {
- requiredArgs2(2, arguments);
- var date = toDate2(dirtyDate);
- var dayOfMonth = toInteger2(dirtyDayOfMonth);
- date.setDate(dayOfMonth);
- return date;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setHours/index.js
-function setHours(dirtyDate, dirtyHours) {
- requiredArgs2(2, arguments);
- var date = toDate2(dirtyDate);
- var hours = toInteger2(dirtyHours);
- date.setHours(hours);
- return date;
-}
-
-// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/setYear/index.js
-function setYear(dirtyDate, dirtyYear) {
- requiredArgs2(2, arguments);
- var date = toDate2(dirtyDate);
- var year = toInteger2(dirtyYear);
- if (isNaN(date.getTime())) {
- return /* @__PURE__ */ new Date(NaN);
- }
- date.setFullYear(year);
- return date;
-}
-
// ../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMonths/index.js
function subMonths(dirtyDate, dirtyAmount) {
requiredArgs2(2, arguments);
@@ -31069,7 +31168,9 @@ function useComponentState3({
const [bankState, updateBankState] = useBankState();
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
- const { lib: { bank } } = useBankCoreApiContext();
+ const {
+ lib: { bank }
+ } = useBankCoreApiContext();
const [failure2, setFailure] = p3();
const amount = settings.maxWithdrawalAmount;
async function doSilentStart() {
@@ -31285,7 +31386,10 @@ function WithdrawalConfirmationQuestion({
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
const [, updateBankState] = useBankState();
const [notification, notify2, handleError] = useLocalNotification();
- const { config, lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ config,
+ lib: { bank: api }
+ } = useBankCoreApiContext();
async function doTransfer() {
await handleError(async () => {
if (!creds)
@@ -31851,7 +31955,10 @@ function OldWithdrawalForm({
const { i18n: i18n2 } = useTranslationContext();
const [settings] = usePreferences();
const [bankState, updateBankState] = useBankState();
- const { lib: { bank: api }, config } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config
+ } = useBankCoreApiContext();
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
const [amountStr, setAmountStr] = p3(
@@ -32368,7 +32475,7 @@ var AccountPage = utils_exports.compose(
// src/pages/BankFrame.tsx
init_preact_module();
init_hooks_module();
-var GIT_HASH = true ? "d57c7effa9ce2488131176c87af9d57ee5b799b1" : void 0;
+var GIT_HASH = true ? "a08ad2c631da0283a5e10189d06977a96665afae" : void 0;
var VERSION = true ? "0.9.3-dev.29" : void 0;
function BankFrame({
children,
@@ -32530,6 +32637,7 @@ function AppActivity() {
case ObservabilityEventType.CryptoStart:
case ObservabilityEventType.CryptoFinishSuccess:
case ObservabilityEventType.CryptoFinishError:
+ case ObservabilityEventType.Message:
return;
default: {
assertUnreachable(ev);
@@ -32626,7 +32734,7 @@ init_hooks_module();
function PublicHistoriesPage() {
const { i18n: i18n2 } = useTranslationContext();
const result = usePublicAccounts(void 0);
- const firstAccount = result && !(result instanceof TalerError) && result.data.public_accounts.length > 0 ? result.data.public_accounts[0].username : void 0;
+ const firstAccount = result && !(result instanceof TalerError) && result.body.length > 0 ? result.body[0].username : void 0;
const [showAccount, setShowAccount] = p3(firstAccount);
if (!result) {
return /* @__PURE__ */ h(Loading, null);
@@ -32634,10 +32742,10 @@ function PublicHistoriesPage() {
if (result instanceof TalerError) {
return /* @__PURE__ */ h(Loading, null);
}
- const { data } = result;
+ const { body: accountList } = result;
const txs = {};
const accountsBar = [];
- for (const account of data.public_accounts) {
+ for (const account of accountList) {
const isSelected = account.username == showAccount;
accountsBar.push(
/* @__PURE__ */ h(
@@ -32699,7 +32807,10 @@ function revalidateConversionInfo() {
);
}
function useConversionInfo() {
- const { lib: { conversion }, config } = useBankCoreApiContext();
+ const {
+ lib: { conversion },
+ config
+ } = useBankCoreApiContext();
async function fetcher() {
return await conversion.getConfig();
}
@@ -32721,7 +32832,9 @@ function useConversionInfo() {
return void 0;
}
function useCashinEstimator() {
- const { lib: { conversion } } = useBankCoreApiContext();
+ const {
+ lib: { conversion }
+ } = useBankCoreApiContext();
return {
estimateByCredit: async (fiatAmount, fee) => {
const resp = await conversion.getCashinRate({
@@ -32772,7 +32885,9 @@ function useCashinEstimator() {
};
}
function useCashoutEstimator() {
- const { lib: { conversion } } = useBankCoreApiContext();
+ const {
+ lib: { conversion }
+ } = useBankCoreApiContext();
return {
estimateByCredit: async (fiatAmount, fee) => {
const resp = await conversion.getCashoutRate({
@@ -32832,15 +32947,17 @@ async function revalidateBusinessAccounts() {
function useBusinessAccounts() {
const { state: credentials } = useSessionState();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [offset, setOffset] = p3();
- function fetcher([token2, offset2]) {
+ function fetcher([token2, aid]) {
return api.getAccounts(
token2,
{},
{
- limit: PAGE_SIZE + 1,
- offset: String(offset2),
+ limit: PAGINATED_LIST_REQUEST,
+ offset: aid ? String(aid) : void 0,
order: "asc"
}
);
@@ -32856,30 +32973,18 @@ function useBusinessAccounts() {
shouldRetryOnError: false,
keepPreviousData: true
});
- const isLastPage = data && data.type === "ok" && data.body.accounts.length <= PAGE_SIZE;
- const isFirstPage = !offset;
- const result = data && data.type == "ok" ? structuredClone(data.body.accounts) : [];
- if (result.length == PAGE_SIZE + 1) {
- result.pop();
- }
- const pagination = {
- result,
- isLastPage,
- isFirstPage,
- loadNext: () => {
- if (!result.length)
- return;
- setOffset(result[result.length - 1].row_id);
- },
- loadFirst: () => {
- setOffset(0);
- }
- };
- if (data)
- return { ok: true, data, ...pagination };
if (error2)
return error2;
- return void 0;
+ if (data === void 0)
+ return void 0;
+ if (data.type !== "ok")
+ return data;
+ return buildPaginatedResult(
+ data.body.accounts,
+ offset,
+ setOffset,
+ (d5) => d5.row_id ?? 0
+ );
}
function notUndefined(c4) {
return c4 !== void 0;
@@ -32891,7 +32996,10 @@ function revalidateCashouts() {
}
function useCashouts(account) {
const { state: credentials } = useSessionState();
- const { lib: { bank: api }, config } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config
+ } = useBankCoreApiContext();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
async function fetcher([username, token2]) {
const list = await api.getAccountCashouts({ username, token: token2 });
@@ -32934,7 +33042,9 @@ function useCashouts(account) {
function useCashoutDetails(cashoutId) {
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
async function fetcher([username, token, id]) {
return api.getCashoutById({ username, token }, id);
}
@@ -32960,13 +33070,15 @@ function useCashoutDetails(cashoutId) {
return void 0;
}
function useLastMonitorInfo(currentMoment, previousMoment, timeframe) {
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const { state: credentials } = useSessionState();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
async function fetcher([token2, timeframe2]) {
const [current, previous] = await Promise.all([
- api.getMonitor(token2, { timeframe: timeframe2, which: currentMoment }),
- api.getMonitor(token2, { timeframe: timeframe2, which: previousMoment })
+ api.getMonitor(token2, { timeframe: timeframe2, date: currentMoment }),
+ api.getMonitor(token2, { timeframe: timeframe2, date: previousMoment })
]);
return {
current,
@@ -33014,7 +33126,9 @@ function QrCodeSection({
walletInegrationApi.publishTalerAction(withdrawUri);
}, []);
const [notification, handleError] = useLocalNotificationHandler();
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const onAbortHandler = handleError(
async () => {
if (!creds)
@@ -33274,7 +33388,9 @@ function SolveChallengePage({
onChallengeCompleted,
routeClose
}) {
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const { i18n: i18n2 } = useTranslationContext();
const [bankState, updateBankState] = useBankState();
const [code, setCode] = p3(void 0);
@@ -33783,7 +33899,9 @@ function WithdrawalOperationPage({
routeClose,
routeWithdrawalDetails
}) {
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const uri = stringifyWithdrawUri({
bankIntegrationApiBaseUrl: api.getIntegrationAPI().href,
withdrawalOperationId: operationId
@@ -34162,7 +34280,11 @@ function CreateCashout({
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
const [, updateBankState] = useBankState();
- const { lib: { bank: api }, config, hints } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config,
+ hints
+ } = useBankCoreApiContext();
const [form, setForm] = p3({ isDebit: true });
const [notification, notify2, handleError] = useLocalNotification();
const info = useConversionInfo();
@@ -35051,7 +35173,9 @@ function ShowAccountDetails({
const { i18n: i18n2 } = useTranslationContext();
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? void 0 : credentials;
- const { lib: { bank } } = useBankCoreApiContext();
+ const {
+ lib: { bank }
+ } = useBankCoreApiContext();
const accountIsTheCurrentUser = credentials.status === "loggedIn" ? credentials.username === account : false;
const [submitAccount, setSubmitAccount] = p3();
const [notification, notify2, handleError] = useLocalNotification();
@@ -35405,7 +35529,9 @@ function UpdateAccountPassword({
const { i18n: i18n2 } = useTranslationContext();
const { state: credentials } = useSessionState();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [current, setCurrent] = p3();
const [password, setPassword] = p3();
const [repeat, setRepeat] = p3();
@@ -35634,17 +35760,17 @@ function AccountList({
if (result instanceof TalerError) {
return /* @__PURE__ */ h(ErrorLoadingWithDebug, { error: result });
}
- if (result.data.type === "fail") {
- switch (result.data.case) {
+ if (result.type === "fail") {
+ switch (result.case) {
case HttpStatusCode.Unauthorized:
return /* @__PURE__ */ h(p2, null);
default:
- assertUnreachable(result.data.case);
+ assertUnreachable(result.case);
}
}
const onGoStart = result.isFirstPage ? void 0 : result.loadFirst;
const onGoNext = result.isLastPage ? void 0 : result.loadNext;
- const accounts = result.result;
+ const accounts = result.body;
return /* @__PURE__ */ h(p2, null, /* @__PURE__ */ h("div", { class: "px-4 sm:px-6 lg:px-8 mt-8" }, /* @__PURE__ */ h("div", { class: "sm:flex sm:items-center" }, /* @__PURE__ */ h("div", { class: "sm:flex-auto" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-6 text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Accounts"))), /* @__PURE__ */ h("div", { class: "mt-4 sm:ml-16 sm:mt-0 sm:flex-none" }, /* @__PURE__ */ h(
"a",
{
@@ -35784,19 +35910,20 @@ function AdminHome({
}
));
}
-function getDateForTimeframe(which, timeframe, locale6) {
- const time = Date.now();
+function getDateForTimeframe(date, timeframe, locale6) {
+ if (date.t_ms === "never")
+ return "--";
switch (timeframe) {
case TalerCorebankApi.MonitorTimeframeParam.hour:
- return `${format(setHours(time, which), "HH", { locale: locale6 })}hs`;
+ return `${format(date.t_ms, "HH", { locale: locale6 })}hs`;
case TalerCorebankApi.MonitorTimeframeParam.day:
- return format(setDate(time, which), "EEEE", { locale: locale6 });
+ return format(date.t_ms, "EEEE", { locale: locale6 });
case TalerCorebankApi.MonitorTimeframeParam.month:
- return format(setMonth(time, which), "MMMM", { locale: locale6 });
+ return format(date.t_ms, "MMMM", { locale: locale6 });
case TalerCorebankApi.MonitorTimeframeParam.year:
- return format(setYear(time, which), "yyyy", { locale: locale6 });
+ return format(date.t_ms, "yyyy", { locale: locale6 });
case TalerCorebankApi.MonitorTimeframeParam.decade:
- return format(setYear(time, which), "yyyy", { locale: locale6 });
+ return format(date.t_ms, "yyyy", { locale: locale6 });
}
assertUnreachable(timeframe);
}
@@ -35804,28 +35931,48 @@ function getTimeframesForDate(time, timeframe) {
switch (timeframe) {
case TalerCorebankApi.MonitorTimeframeParam.hour:
return {
- current: getHours(sub(time, { hours: 1 })),
- previous: getHours(sub(time, { hours: 2 }))
+ current: AbsoluteTime.fromMilliseconds(
+ sub(time, { hours: 1 }).getTime()
+ ),
+ previous: AbsoluteTime.fromMilliseconds(
+ sub(time, { hours: 2 }).getTime()
+ )
};
case TalerCorebankApi.MonitorTimeframeParam.day:
return {
- current: getDate(sub(time, { days: 1 })),
- previous: getDate(sub(time, { days: 2 }))
+ current: AbsoluteTime.fromMilliseconds(
+ sub(time, { days: 1 }).getTime()
+ ),
+ previous: AbsoluteTime.fromMilliseconds(
+ sub(time, { days: 4 }).getTime()
+ )
};
case TalerCorebankApi.MonitorTimeframeParam.month:
return {
- current: getMonth(sub(time, { months: 1 })),
- previous: getMonth(sub(time, { months: 2 }))
+ current: AbsoluteTime.fromMilliseconds(
+ sub(time, { months: 1 }).getTime()
+ ),
+ previous: AbsoluteTime.fromMilliseconds(
+ sub(time, { months: 2 }).getTime()
+ )
};
case TalerCorebankApi.MonitorTimeframeParam.year:
return {
- current: getYear(sub(time, { years: 1 })),
- previous: getYear(sub(time, { years: 2 }))
+ current: AbsoluteTime.fromMilliseconds(
+ sub(time, { years: 1 }).getTime()
+ ),
+ previous: AbsoluteTime.fromMilliseconds(
+ sub(time, { years: 2 }).getTime()
+ )
};
case TalerCorebankApi.MonitorTimeframeParam.decade:
return {
- current: getYear(sub(time, { years: 10 })),
- previous: getYear(sub(time, { years: 20 }))
+ current: AbsoluteTime.fromMilliseconds(
+ sub(time, { years: 10 }).getTime()
+ ),
+ previous: AbsoluteTime.fromMilliseconds(
+ sub(time, { years: 20 }).getTime()
+ )
};
default:
assertUnreachable(timeframe);
@@ -35857,12 +36004,60 @@ function Metrics({
case HttpStatusCode.NotImplemented: {
return /* @__PURE__ */ h(Attention, { type: "danger", title: i18n2.str`Cashout are disabled` }, /* @__PURE__ */ h(i18n2.Translate, null, "Cashout should be enable by configuration and the conversion rate should be initialized with fee, ratio and rounding mode."));
}
- default:
+ default: {
assertUnreachable(respInfo.case);
+ }
}
}
- if (resp.current.type !== "ok" || resp.previous.type !== "ok") {
- return /* @__PURE__ */ h(p2, null);
+ if (resp.current.type !== "ok") {
+ switch (resp.current.case) {
+ case HttpStatusCode.BadRequest:
+ return /* @__PURE__ */ h(
+ Attention,
+ {
+ type: "warning",
+ title: i18n2.str`Querying for the current stats failed`
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "The request parameters are wrong")
+ );
+ case HttpStatusCode.Unauthorized:
+ return /* @__PURE__ */ h(
+ Attention,
+ {
+ type: "warning",
+ title: i18n2.str`Querying for the current stats failed`
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "The user is unauthorized")
+ );
+ default: {
+ assertUnreachable(resp.current);
+ }
+ }
+ }
+ if (resp.previous.type !== "ok") {
+ switch (resp.previous.case) {
+ case HttpStatusCode.BadRequest:
+ return /* @__PURE__ */ h(
+ Attention,
+ {
+ type: "warning",
+ title: i18n2.str`Querying for the previous stats failed`
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "The request parameters are wrong")
+ );
+ case HttpStatusCode.Unauthorized:
+ return /* @__PURE__ */ h(
+ Attention,
+ {
+ type: "warning",
+ title: i18n2.str`Querying for the previous stats failed`
+ },
+ /* @__PURE__ */ h(i18n2.Translate, null, "The user is unauthorized")
+ );
+ default: {
+ assertUnreachable(resp.previous);
+ }
+ }
}
return /* @__PURE__ */ h("div", { class: "px-4 mt-4" }, /* @__PURE__ */ h("div", { class: "sm:flex sm:items-center mb-4" }, /* @__PURE__ */ h("div", { class: "sm:flex-auto" }, /* @__PURE__ */ h("h1", { class: "text-base font-semibold leading-6 text-gray-900" }, /* @__PURE__ */ h(i18n2.Translate, null, "Transaction volume report")))), /* @__PURE__ */ h("div", { class: "sm:hidden" }, /* @__PURE__ */ h("label", { for: "tabs", class: "sr-only" }, /* @__PURE__ */ h(i18n2.Translate, null, "Select a section")), /* @__PURE__ */ h(
"select",
@@ -36133,7 +36328,9 @@ function CreateNewAccount({
const { i18n: i18n2 } = useTranslationContext();
const { state: credentials } = useSessionState();
const token = credentials.status !== "loggedIn" ? void 0 : credentials.token;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [submitAccount, setSubmitAccount] = p3();
const [notification, notify2, handleError] = useLocalNotification();
async function doCreate() {
@@ -36286,7 +36483,9 @@ function DownloadStats({ routeCancel }) {
const { i18n: i18n2 } = useTranslationContext();
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" || !credentials.isUserAdministrator ? void 0 : credentials;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [options, setOptions] = p3({
compareWithPrevious: true,
dayMetric: true,
@@ -36623,14 +36822,14 @@ async function fetchAllStatus(api, token, options, references, progress) {
progress(index, total);
const previous = options.compareWithPrevious ? await api.getMonitor(token, {
timeframe: frame.timeframe,
- which: frame.moment.previous
+ date: frame.moment.previous
}) : void 0;
if (previous && previous.type === "fail" && options.endOnFirstFail) {
throw TalerError.fromUncheckedDetail(previous.detail);
}
const current = await api.getMonitor(token, {
timeframe: frame.timeframe,
- which: frame.moment.current
+ date: frame.moment.current
});
if (current.type === "fail" && options.endOnFirstFail) {
throw TalerError.fromUncheckedDetail(current.detail);
@@ -36720,7 +36919,9 @@ function RemoveAccount({
const [accountName, setAccountName] = p3();
const { state } = useSessionState();
const token = state.status !== "loggedIn" ? void 0 : state.token;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api }
+ } = useBankCoreApiContext();
const [notification, notify2, handleError] = useLocalNotification();
const [, updateBankState] = useBankState();
if (!result) {
@@ -36949,7 +37150,9 @@ function useComponentState5({
}
return function afterComponentLoads() {
const { i18n: i18n3 } = useTranslationContext();
- const { lib: { conversion } } = useBankCoreApiContext();
+ const {
+ lib: { conversion }
+ } = useBankCoreApiContext();
const [notification, notify2, handleError] = useLocalNotification();
const initalState = {
amount: "100",
@@ -37729,7 +37932,7 @@ var publicPages = {
register: urlPattern(/\/register/, () => "#/register"),
publicAccounts: urlPattern(/\/public-accounts/, () => "#/public-accounts"),
operationDetails: urlPattern(
- /\/operation\/(?<wopid>[a-zA-Z0-9]+)/,
+ /\/operation\/(?<wopid>[a-zA-Z0-9-]+)/,
({ wopid }) => `#/operation/${wopid}`
),
solveSecondFactor: urlPattern(/\/2fa/, () => "#/2fa")
@@ -37752,7 +37955,7 @@ function PublicRounting({
}
async function doAutomaticLogin(username, password) {
await handleError(async () => {
- const resp = await lib.auth(username).createAccessToken(password, {
+ const resp = await lib.auth(username).createAccessTokenBasic(username, password, {
scope: "readwrite",
duration: { d_us: "forever" },
refreshable: true
@@ -40394,35 +40597,43 @@ function App() {
de: strings["de"].completeness
}
},
- /* @__PURE__ */ h(BankApiProvider, { baseUrl: new URL("/", baseUrl), frameOnError: BankFrame, evictors: {
- bank: evictBankSwrCache,
- conversion: evictConversionSwrCache
- } }, /* @__PURE__ */ h(
- SWRConfig2,
+ /* @__PURE__ */ h(
+ BankApiProvider,
{
- value: {
- provider: WITH_LOCAL_STORAGE_CACHE ? localStorageProvider : void 0,
- // normally, do not revalidate
- revalidateOnFocus: false,
- revalidateOnReconnect: false,
- revalidateIfStale: false,
- revalidateOnMount: void 0,
- focusThrottleInterval: void 0,
- // normally, do not refresh
- refreshInterval: void 0,
- dedupingInterval: 2e3,
- refreshWhenHidden: false,
- refreshWhenOffline: false,
- // ignore errors
- shouldRetryOnError: false,
- errorRetryCount: 0,
- errorRetryInterval: void 0,
- // do not go to loading again if already has data
- keepPreviousData: true
+ baseUrl: new URL("/", baseUrl),
+ frameOnError: BankFrame,
+ evictors: {
+ bank: evictBankSwrCache,
+ conversion: evictConversionSwrCache
}
},
- /* @__PURE__ */ h(TalerWalletIntegrationBrowserProvider, null, /* @__PURE__ */ h(BrowserHashNavigationProvider, null, /* @__PURE__ */ h(Routing, null)))
- ))
+ /* @__PURE__ */ h(
+ SWRConfig2,
+ {
+ value: {
+ provider: WITH_LOCAL_STORAGE_CACHE ? localStorageProvider : void 0,
+ // normally, do not revalidate
+ revalidateOnFocus: false,
+ revalidateOnReconnect: false,
+ revalidateIfStale: false,
+ revalidateOnMount: void 0,
+ focusThrottleInterval: void 0,
+ // normally, do not refresh
+ refreshInterval: void 0,
+ dedupingInterval: 2e3,
+ refreshWhenHidden: false,
+ refreshWhenOffline: false,
+ // ignore errors
+ shouldRetryOnError: false,
+ errorRetryCount: 0,
+ errorRetryInterval: void 0,
+ // do not go to loading again if already has data
+ keepPreviousData: true
+ }
+ },
+ /* @__PURE__ */ h(TalerWalletIntegrationBrowserProvider, null, /* @__PURE__ */ h(BrowserHashNavigationProvider, null, /* @__PURE__ */ h(Routing, null)))
+ )
+ )
));
}
window.setGlobalLogLevelFromString = setGlobalLogLevelFromString;