@kulupu-linku/sona 0.1.10 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -1,6 +1,105 @@
1
- // src/client.ts
2
- import { hc } from "hono/client";
3
- var client = hc("https://api.linku.la/");
1
+ var p = (t, i, e = {}) => {
2
+ let r = `${t}=${i}`;
3
+ return e && typeof e.maxAge == "number" && e.maxAge >= 0 && (r += `; Max-Age=${Math.floor(e.maxAge)}`), e.domain && (r += `; Domain=${e.domain}`), e.path && (r += `; Path=${e.path}`), e.expires && (r += `; Expires=${e.expires.toUTCString()}`), e.httpOnly && (r += "; HttpOnly"), e.secure && (r += "; Secure"), e.sameSite && (r += `; SameSite=${e.sameSite}`), e.partitioned && (r += "; Partitioned"), r;
4
+ }, v = (t, i, e = {}) => (i = encodeURIComponent(i), p(t, i, e)), P = (t, i) => (t = t.replace(/\/+$/, ""), t = t + "/", i = i.replace(/^\/+/, ""), t + i), d = (t, i) => {
5
+ for (const [e, r] of Object.entries(i)) {
6
+ const n = new RegExp("/:" + e + "(?:{[^/]+})?");
7
+ t = t.replace(n, `/${r}`);
8
+ }
9
+ return t;
10
+ }, x = (t) => t.replace(/\/index$/, "/");
11
+ function u(t) {
12
+ return typeof t == "object" && t !== null && !Array.isArray(t);
13
+ }
14
+ function y(t, i) {
15
+ if (!u(t) && !u(i))
16
+ return i;
17
+ const e = { ...t };
18
+ for (const r in i) {
19
+ const n = i[r];
20
+ u(e[r]) && u(n) ? e[r] = y(e[r], n) : e[r] = n;
21
+ }
22
+ return e;
23
+ }
24
+ var l = (t, i) => new Proxy(() => {
25
+ }, {
26
+ get(r, n) {
27
+ if (!(typeof n != "string" || n === "then"))
28
+ return l(t, [...i, n]);
29
+ },
30
+ apply(r, n, h) {
31
+ return t({
32
+ path: i,
33
+ args: h
34
+ });
35
+ }
36
+ }), j = class {
37
+ constructor(t, i) {
38
+ this.queryParams = void 0, this.pathParams = {}, this.cType = void 0, this.fetch = (e, r) => {
39
+ if (e) {
40
+ if (e.query) {
41
+ for (const [s, o] of Object.entries(e.query))
42
+ if (o !== void 0)
43
+ if (this.queryParams || (this.queryParams = new URLSearchParams()), Array.isArray(o))
44
+ for (const f of o)
45
+ this.queryParams.append(s, f);
46
+ else
47
+ this.queryParams.set(s, o);
48
+ }
49
+ if (e.form) {
50
+ const s = new FormData();
51
+ for (const [o, f] of Object.entries(e.form))
52
+ s.append(o, f);
53
+ this.rBody = s;
54
+ }
55
+ e.json && (this.rBody = JSON.stringify(e.json), this.cType = "application/json"), e.param && (this.pathParams = e.param);
56
+ }
57
+ let n = this.method.toUpperCase(), h = !(n === "GET" || n === "HEAD");
58
+ const c = {
59
+ ...(e == null ? void 0 : e.header) ?? {},
60
+ ...r != null && r.headers ? r.headers : {}
61
+ };
62
+ if (e != null && e.cookie) {
63
+ const s = [];
64
+ for (const [o, f] of Object.entries(e.cookie))
65
+ s.push(v(o, f, { path: "/" }));
66
+ c.Cookie = s.join(",");
67
+ }
68
+ this.cType && (c["Content-Type"] = this.cType);
69
+ const m = new Headers(c ?? void 0);
70
+ let a = this.url;
71
+ return a = x(a), a = d(a, this.pathParams), this.queryParams && (a = a + "?" + this.queryParams.toString()), n = this.method.toUpperCase(), h = !(n === "GET" || n === "HEAD"), ((r == null ? void 0 : r.fetch) || fetch)(a, {
72
+ body: h ? this.rBody : void 0,
73
+ method: n,
74
+ headers: m
75
+ });
76
+ }, this.url = t, this.method = i;
77
+ }
78
+ }, $ = (t, i) => l((e) => {
79
+ const r = [...e.path];
80
+ let n = "";
81
+ if (/^\$/.test(r[r.length - 1])) {
82
+ const a = r.pop();
83
+ a && (n = a.replace(/^\$/, ""));
84
+ }
85
+ const h = r.join("/"), c = P(t, h);
86
+ if (n === "url")
87
+ return e.args[0] && e.args[0].param ? new URL(d(c, e.args[0].param)) : new URL(c);
88
+ const m = new j(c, n);
89
+ if (n) {
90
+ i ?? (i = {});
91
+ const a = y(i, { ...e.args[1] ?? {} });
92
+ return m.fetch(e.args[0], a);
93
+ }
94
+ return m;
95
+ }, []);
96
+ const q = ({
97
+ baseUrl: t = "https://api.linku.la/",
98
+ fetchFunc: i = fetch
99
+ }) => $(t, {
100
+ fetch: i
101
+ });
4
102
  export {
5
- client
103
+ q as client
6
104
  };
105
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvLnBucG0vaG9ub0A0LjAuMTAvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC91dGlscy9jb29raWUuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vaG9ub0A0LjAuMTAvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9jbGllbnQvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vaG9ub0A0LjAuMTAvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9jbGllbnQvY2xpZW50LmpzIiwiLi4vc3JjL2xpYi9jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3V0aWxzL2Nvb2tpZS50c1xuaW1wb3J0IHsgZGVjb2RlVVJJQ29tcG9uZW50XyB9IGZyb20gXCIuL3VybC5qc1wiO1xudmFyIGFsZ29yaXRobSA9IHsgbmFtZTogXCJITUFDXCIsIGhhc2g6IFwiU0hBLTI1NlwiIH07XG52YXIgZ2V0Q3J5cHRvS2V5ID0gYXN5bmMgKHNlY3JldCkgPT4ge1xuICBjb25zdCBzZWNyZXRCdWYgPSB0eXBlb2Ygc2VjcmV0ID09PSBcInN0cmluZ1wiID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNlY3JldCkgOiBzZWNyZXQ7XG4gIHJldHVybiBhd2FpdCBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcInJhd1wiLCBzZWNyZXRCdWYsIGFsZ29yaXRobSwgZmFsc2UsIFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl0pO1xufTtcbnZhciBtYWtlU2lnbmF0dXJlID0gYXN5bmMgKHZhbHVlLCBzZWNyZXQpID0+IHtcbiAgY29uc3Qga2V5ID0gYXdhaXQgZ2V0Q3J5cHRvS2V5KHNlY3JldCk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuc2lnbihhbGdvcml0aG0ubmFtZSwga2V5LCBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKTtcbiAgcmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5uZXcgVWludDhBcnJheShzaWduYXR1cmUpKSk7XG59O1xudmFyIHZlcmlmeVNpZ25hdHVyZSA9IGFzeW5jIChiYXNlNjRTaWduYXR1cmUsIHZhbHVlLCBzZWNyZXQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWduYXR1cmVCaW5TdHIgPSBhdG9iKGJhc2U2NFNpZ25hdHVyZSk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlQmluU3RyLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNpZ25hdHVyZUJpblN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgc2lnbmF0dXJlW2ldID0gc2lnbmF0dXJlQmluU3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBjcnlwdG8uc3VidGxlLnZlcmlmeShhbGdvcml0aG0sIHNlY3JldCwgc2lnbmF0dXJlLCBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbnZhciB2YWxpZENvb2tpZU5hbWVSZWdFeCA9IC9eW1xcdyEjJCUmJyouXmB8fistXSskLztcbnZhciB2YWxpZENvb2tpZVZhbHVlUmVnRXggPSAvXlsgISMtOjwtW1xcXS1+XSokLztcbnZhciBwYXJzZSA9IChjb29raWUsIG5hbWUpID0+IHtcbiAgY29uc3QgcGFpcnMgPSBjb29raWUudHJpbSgpLnNwbGl0KFwiO1wiKTtcbiAgcmV0dXJuIHBhaXJzLnJlZHVjZSgocGFyc2VkQ29va2llLCBwYWlyU3RyKSA9PiB7XG4gICAgcGFpclN0ciA9IHBhaXJTdHIudHJpbSgpO1xuICAgIGNvbnN0IHZhbHVlU3RhcnRQb3MgPSBwYWlyU3RyLmluZGV4T2YoXCI9XCIpO1xuICAgIGlmICh2YWx1ZVN0YXJ0UG9zID09PSAtMSkge1xuICAgICAgcmV0dXJuIHBhcnNlZENvb2tpZTtcbiAgICB9XG4gICAgY29uc3QgY29va2llTmFtZSA9IHBhaXJTdHIuc3Vic3RyaW5nKDAsIHZhbHVlU3RhcnRQb3MpLnRyaW0oKTtcbiAgICBpZiAobmFtZSAmJiBuYW1lICE9PSBjb29raWVOYW1lIHx8ICF2YWxpZENvb2tpZU5hbWVSZWdFeC50ZXN0KGNvb2tpZU5hbWUpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkQ29va2llO1xuICAgIH1cbiAgICBsZXQgY29va2llVmFsdWUgPSBwYWlyU3RyLnN1YnN0cmluZyh2YWx1ZVN0YXJ0UG9zICsgMSkudHJpbSgpO1xuICAgIGlmIChjb29raWVWYWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIGNvb2tpZVZhbHVlLmVuZHNXaXRoKCdcIicpKSB7XG4gICAgICBjb29raWVWYWx1ZSA9IGNvb2tpZVZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkQ29va2llVmFsdWVSZWdFeC50ZXN0KGNvb2tpZVZhbHVlKSkge1xuICAgICAgcGFyc2VkQ29va2llW2Nvb2tpZU5hbWVdID0gZGVjb2RlVVJJQ29tcG9uZW50Xyhjb29raWVWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRDb29raWU7XG4gIH0sIHt9KTtcbn07XG52YXIgcGFyc2VTaWduZWQgPSBhc3luYyAoY29va2llLCBzZWNyZXQsIG5hbWUpID0+IHtcbiAgY29uc3QgcGFyc2VkQ29va2llID0ge307XG4gIGNvbnN0IHNlY3JldEtleSA9IGF3YWl0IGdldENyeXB0b0tleShzZWNyZXQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJzZShjb29raWUsIG5hbWUpKSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZVN0YXJ0UG9zID0gdmFsdWUubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChzaWduYXR1cmVTdGFydFBvcyA8IDEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWduZWRWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzaWduYXR1cmVTdGFydFBvcyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdmFsdWUuc3Vic3RyaW5nKHNpZ25hdHVyZVN0YXJ0UG9zICsgMSk7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDQ0IHx8ICFzaWduYXR1cmUuZW5kc1dpdGgoXCI9XCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IHZlcmlmeVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25lZFZhbHVlLCBzZWNyZXRLZXkpO1xuICAgIHBhcnNlZENvb2tpZVtrZXldID0gaXNWZXJpZmllZCA/IHNpZ25lZFZhbHVlIDogZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZENvb2tpZTtcbn07XG52YXIgX3NlcmlhbGl6ZSA9IChuYW1lLCB2YWx1ZSwgb3B0ID0ge30pID0+IHtcbiAgbGV0IGNvb2tpZSA9IGAke25hbWV9PSR7dmFsdWV9YDtcbiAgaWYgKG9wdCAmJiB0eXBlb2Ygb3B0Lm1heEFnZSA9PT0gXCJudW1iZXJcIiAmJiBvcHQubWF4QWdlID49IDApIHtcbiAgICBjb29raWUgKz0gYDsgTWF4LUFnZT0ke01hdGguZmxvb3Iob3B0Lm1heEFnZSl9YDtcbiAgfVxuICBpZiAob3B0LmRvbWFpbikge1xuICAgIGNvb2tpZSArPSBgOyBEb21haW49JHtvcHQuZG9tYWlufWA7XG4gIH1cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgY29va2llICs9IGA7IFBhdGg9JHtvcHQucGF0aH1gO1xuICB9XG4gIGlmIChvcHQuZXhwaXJlcykge1xuICAgIGNvb2tpZSArPSBgOyBFeHBpcmVzPSR7b3B0LmV4cGlyZXMudG9VVENTdHJpbmcoKX1gO1xuICB9XG4gIGlmIChvcHQuaHR0cE9ubHkpIHtcbiAgICBjb29raWUgKz0gXCI7IEh0dHBPbmx5XCI7XG4gIH1cbiAgaWYgKG9wdC5zZWN1cmUpIHtcbiAgICBjb29raWUgKz0gXCI7IFNlY3VyZVwiO1xuICB9XG4gIGlmIChvcHQuc2FtZVNpdGUpIHtcbiAgICBjb29raWUgKz0gYDsgU2FtZVNpdGU9JHtvcHQuc2FtZVNpdGV9YDtcbiAgfVxuICBpZiAob3B0LnBhcnRpdGlvbmVkKSB7XG4gICAgY29va2llICs9IFwiOyBQYXJ0aXRpb25lZFwiO1xuICB9XG4gIHJldHVybiBjb29raWU7XG59O1xudmFyIHNlcmlhbGl6ZSA9IChuYW1lLCB2YWx1ZSwgb3B0ID0ge30pID0+IHtcbiAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICByZXR1cm4gX3NlcmlhbGl6ZShuYW1lLCB2YWx1ZSwgb3B0KTtcbn07XG52YXIgc2VyaWFsaXplU2lnbmVkID0gYXN5bmMgKG5hbWUsIHZhbHVlLCBzZWNyZXQsIG9wdCA9IHt9KSA9PiB7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IG1ha2VTaWduYXR1cmUodmFsdWUsIHNlY3JldCk7XG4gIHZhbHVlID0gYCR7dmFsdWV9LiR7c2lnbmF0dXJlfWA7XG4gIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgcmV0dXJuIF9zZXJpYWxpemUobmFtZSwgdmFsdWUsIG9wdCk7XG59O1xuZXhwb3J0IHtcbiAgcGFyc2UsXG4gIHBhcnNlU2lnbmVkLFxuICBzZXJpYWxpemUsXG4gIHNlcmlhbGl6ZVNpZ25lZFxufTtcbiIsIi8vIHNyYy9jbGllbnQvdXRpbHMudHNcbnZhciBtZXJnZVBhdGggPSAoYmFzZSwgcGF0aCkgPT4ge1xuICBiYXNlID0gYmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICBiYXNlID0gYmFzZSArIFwiL1wiO1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICByZXR1cm4gYmFzZSArIHBhdGg7XG59O1xudmFyIHJlcGxhY2VVcmxQYXJhbSA9ICh1cmxTdHJpbmcsIHBhcmFtcykgPT4ge1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG4gICAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChcIi86XCIgKyBrICsgXCIoPzp7W14vXSt9KT9cIik7XG4gICAgdXJsU3RyaW5nID0gdXJsU3RyaW5nLnJlcGxhY2UocmVnLCBgLyR7dn1gKTtcbiAgfVxuICByZXR1cm4gdXJsU3RyaW5nO1xufTtcbnZhciByZW1vdmVJbmRleFN0cmluZyA9ICh1cmxTdGluZykgPT4ge1xuICByZXR1cm4gdXJsU3RpbmcucmVwbGFjZSgvXFwvaW5kZXgkLywgXCIvXCIpO1xufTtcbmZ1bmN0aW9uIGlzT2JqZWN0KGl0ZW0pIHtcbiAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiICYmIGl0ZW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XG59XG5mdW5jdGlvbiBkZWVwTWVyZ2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKCFpc09iamVjdCh0YXJnZXQpICYmICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICBjb25zdCBtZXJnZWQgPSB7IC4uLnRhcmdldCB9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChpc09iamVjdChtZXJnZWRba2V5XSkgJiYgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBtZXJnZWRba2V5XSA9IGRlZXBNZXJnZShtZXJnZWRba2V5XSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuZXhwb3J0IHtcbiAgZGVlcE1lcmdlLFxuICBtZXJnZVBhdGgsXG4gIHJlbW92ZUluZGV4U3RyaW5nLFxuICByZXBsYWNlVXJsUGFyYW1cbn07XG4iLCIvLyBzcmMvY2xpZW50L2NsaWVudC50c1xuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSBcIi4uL3V0aWxzL2Nvb2tpZS5qc1wiO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBtZXJnZVBhdGgsIHJlbW92ZUluZGV4U3RyaW5nLCByZXBsYWNlVXJsUGFyYW0gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIGNyZWF0ZVByb3h5ID0gKGNhbGxiYWNrLCBwYXRoKSA9PiB7XG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KCgpID0+IHtcbiAgfSwge1xuICAgIGdldChfb2JqLCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcInN0cmluZ1wiIHx8IGtleSA9PT0gXCJ0aGVuXCIpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVQcm94eShjYWxsYmFjaywgWy4uLnBhdGgsIGtleV0pO1xuICAgIH0sXG4gICAgYXBwbHkoXzEsIF8yLCBhcmdzKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgICBwYXRoLFxuICAgICAgICBhcmdzXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJveHk7XG59O1xudmFyIENsaWVudFJlcXVlc3RJbXBsID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcih1cmwsIG1ldGhvZCkge1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoUGFyYW1zID0ge307XG4gICAgdGhpcy5jVHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmZldGNoID0gKGFyZ3MsIG9wdCkgPT4ge1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MucXVlcnkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhcmdzLnF1ZXJ5KSkge1xuICAgICAgICAgICAgaWYgKHYgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXMgfHwgKHRoaXMucXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCkpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2MiBvZiB2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcy5hcHBlbmQoaywgdjIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zLnNldChrLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MuZm9ybSkge1xuICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhcmdzLmZvcm0pKSB7XG4gICAgICAgICAgICBmb3JtLmFwcGVuZChrLCB2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yQm9keSA9IGZvcm07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MuanNvbikge1xuICAgICAgICAgIHRoaXMuckJvZHkgPSBKU09OLnN0cmluZ2lmeShhcmdzLmpzb24pO1xuICAgICAgICAgIHRoaXMuY1R5cGUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5wYXJhbSkge1xuICAgICAgICAgIHRoaXMucGF0aFBhcmFtcyA9IGFyZ3MucGFyYW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBtZXRob2RVcHBlckNhc2UgPSB0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgbGV0IHNldEJvZHkgPSAhKG1ldGhvZFVwcGVyQ2FzZSA9PT0gXCJHRVRcIiB8fCBtZXRob2RVcHBlckNhc2UgPT09IFwiSEVBRFwiKTtcbiAgICAgIGNvbnN0IGhlYWRlclZhbHVlcyA9IHtcbiAgICAgICAgLi4uYXJncz8uaGVhZGVyID8/IHt9LFxuICAgICAgICAuLi5vcHQ/LmhlYWRlcnMgPyBvcHQuaGVhZGVycyA6IHt9XG4gICAgICB9O1xuICAgICAgaWYgKGFyZ3M/LmNvb2tpZSkge1xuICAgICAgICBjb25zdCBjb29raWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MuY29va2llKSkge1xuICAgICAgICAgIGNvb2tpZXMucHVzaChzZXJpYWxpemUoa2V5LCB2YWx1ZSwgeyBwYXRoOiBcIi9cIiB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyVmFsdWVzW1wiQ29va2llXCJdID0gY29va2llcy5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNUeXBlKSB7XG4gICAgICAgIGhlYWRlclZhbHVlc1tcIkNvbnRlbnQtVHlwZVwiXSA9IHRoaXMuY1R5cGU7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaGVhZGVyVmFsdWVzID8/IHZvaWQgMCk7XG4gICAgICBsZXQgdXJsID0gdGhpcy51cmw7XG4gICAgICB1cmwgPSByZW1vdmVJbmRleFN0cmluZyh1cmwpO1xuICAgICAgdXJsID0gcmVwbGFjZVVybFBhcmFtKHVybCwgdGhpcy5wYXRoUGFyYW1zKTtcbiAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHVybCA9IHVybCArIFwiP1wiICsgdGhpcy5xdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgbWV0aG9kVXBwZXJDYXNlID0gdGhpcy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICAgIHNldEJvZHkgPSAhKG1ldGhvZFVwcGVyQ2FzZSA9PT0gXCJHRVRcIiB8fCBtZXRob2RVcHBlckNhc2UgPT09IFwiSEVBRFwiKTtcbiAgICAgIHJldHVybiAob3B0Py5mZXRjaCB8fCBmZXRjaCkodXJsLCB7XG4gICAgICAgIGJvZHk6IHNldEJvZHkgPyB0aGlzLnJCb2R5IDogdm9pZCAwLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZFVwcGVyQ2FzZSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgfVxufTtcbnZhciBoYyA9IChiYXNlVXJsLCBvcHRpb25zKSA9PiBjcmVhdGVQcm94eSgob3B0cykgPT4ge1xuICBjb25zdCBwYXJ0cyA9IFsuLi5vcHRzLnBhdGhdO1xuICBsZXQgbWV0aG9kID0gXCJcIjtcbiAgaWYgKC9eXFwkLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSkge1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbWV0aG9kID0gbGFzdC5yZXBsYWNlKC9eXFwkLywgXCJcIik7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhdGggPSBwYXJ0cy5qb2luKFwiL1wiKTtcbiAgY29uc3QgdXJsID0gbWVyZ2VQYXRoKGJhc2VVcmwsIHBhdGgpO1xuICBpZiAobWV0aG9kID09PSBcInVybFwiKSB7XG4gICAgaWYgKG9wdHMuYXJnc1swXSAmJiBvcHRzLmFyZ3NbMF0ucGFyYW0pIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHJlcGxhY2VVcmxQYXJhbSh1cmwsIG9wdHMuYXJnc1swXS5wYXJhbSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVSTCh1cmwpO1xuICB9XG4gIGNvbnN0IHJlcSA9IG5ldyBDbGllbnRSZXF1ZXN0SW1wbCh1cmwsIG1ldGhvZCk7XG4gIGlmIChtZXRob2QpIHtcbiAgICBvcHRpb25zID8/IChvcHRpb25zID0ge30pO1xuICAgIGNvbnN0IGFyZ3MgPSBkZWVwTWVyZ2Uob3B0aW9ucywgeyAuLi5vcHRzLmFyZ3NbMV0gPz8ge30gfSk7XG4gICAgcmV0dXJuIHJlcS5mZXRjaChvcHRzLmFyZ3NbMF0sIGFyZ3MpO1xuICB9XG4gIHJldHVybiByZXE7XG59LCBbXSk7XG5leHBvcnQge1xuICBoY1xufTtcbiIsImltcG9ydCB7IGhjIH0gZnJvbSBcImhvbm8vY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IEFwcFR5cGUgfSBmcm9tIFwiJHNlcnZlclwiO1xuXG5leHBvcnQgY29uc3QgY2xpZW50ID0gKHtcblx0YmFzZVVybCA9IFwiaHR0cHM6Ly9hcGkubGlua3UubGEvXCIsXG5cdGZldGNoRnVuYyA9IGZldGNoLFxufToge1xuXHRiYXNlVXJsOiBzdHJpbmc7XG5cdGZldGNoRnVuYzogdHlwZW9mIGZldGNoO1xufSkgPT5cblx0aGM8QXBwVHlwZT4oYmFzZVVybCwge1xuXHRcdGZldGNoOiBmZXRjaEZ1bmMsXG5cdH0pO1xuXG5leHBvcnQgdHlwZSBBcGlUeXBlID0gQXBwVHlwZTtcbiJdLCJuYW1lcyI6WyJfc2VyaWFsaXplIiwibmFtZSIsInZhbHVlIiwib3B0IiwiY29va2llIiwic2VyaWFsaXplIiwibWVyZ2VQYXRoIiwiYmFzZSIsInBhdGgiLCJyZXBsYWNlVXJsUGFyYW0iLCJ1cmxTdHJpbmciLCJwYXJhbXMiLCJrIiwidiIsInJlZyIsInJlbW92ZUluZGV4U3RyaW5nIiwidXJsU3RpbmciLCJpc09iamVjdCIsIml0ZW0iLCJkZWVwTWVyZ2UiLCJ0YXJnZXQiLCJzb3VyY2UiLCJtZXJnZWQiLCJrZXkiLCJjcmVhdGVQcm94eSIsImNhbGxiYWNrIiwiX29iaiIsIl8xIiwiXzIiLCJhcmdzIiwiQ2xpZW50UmVxdWVzdEltcGwiLCJ1cmwiLCJtZXRob2QiLCJ2MiIsImZvcm0iLCJtZXRob2RVcHBlckNhc2UiLCJzZXRCb2R5IiwiaGVhZGVyVmFsdWVzIiwiY29va2llcyIsImhlYWRlcnMiLCJoYyIsImJhc2VVcmwiLCJvcHRpb25zIiwib3B0cyIsInBhcnRzIiwibGFzdCIsInJlcSIsImNsaWVudCIsImZldGNoRnVuYyJdLCJtYXBwaW5ncyI6IkFBa0VBLElBQUlBLElBQWEsQ0FBQ0MsR0FBTUMsR0FBT0MsSUFBTSxDQUFBLE1BQU87QUFDMUMsTUFBSUMsSUFBUyxHQUFHSCxDQUFJLElBQUlDLENBQUs7QUFDN0IsU0FBSUMsS0FBTyxPQUFPQSxFQUFJ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QUFDZixhQUFBQSxJQUFNaEIsRUFBa0JnQixDQUFHLEdBQzNCQSxJQUFNdEIsRUFBZ0JzQixHQUFLLEtBQUssVUFBVSxHQUN0QyxLQUFLLGdCQUNQQSxJQUFNQSxJQUFNLE1BQU0sS0FBSyxZQUFZLFNBQVEsSUFFN0NJLElBQWtCLEtBQUssT0FBTyxlQUM5QkMsSUFBVSxFQUFFRCxNQUFvQixTQUFTQSxNQUFvQixXQUNyRGhDLEtBQUEsZ0JBQUFBLEVBQUssVUFBUyxPQUFPNEIsR0FBSztBQUFBLFFBQ2hDLE1BQU1LLElBQVUsS0FBSyxRQUFRO0FBQUEsUUFDN0IsUUFBUUQ7QUFBQSxRQUNSLFNBQUFJO0FBQUEsTUFDUixDQUFPO0FBQUEsSUFDUCxHQUNJLEtBQUssTUFBTVIsR0FDWCxLQUFLLFNBQVNDO0FBQUEsRUFDZjtBQUNILEdBQ0lRLElBQUssQ0FBQ0MsR0FBU0MsTUFBWWxCLEVBQVksQ0FBQ21CLE1BQVM7QUFDbkQsUUFBTUMsSUFBUSxDQUFDLEdBQUdELEVBQUssSUFBSTtBQUMzQixNQUFJWCxJQUFTO0FBQ2IsTUFBSSxNQUFNLEtBQUtZLEVBQU1BLEVBQU0sU0FBUyxDQUFDLENBQUMsR0FBRztBQUN2QyxVQUFNQyxJQUFPRCxFQUFNO0FBQ25CLElBQUlDLE1BQ0ZiLElBQVNhLEVBQUssUUFBUSxPQUFPLEVBQUU7QUFBQSxFQUVsQztBQUNELFFBQU1yQyxJQUFPb0MsRUFBTSxLQUFLLEdBQUcsR0FDckJiLElBQU16QixFQUFVbUMsR0FBU2pDLENBQUk7QUFDbkMsTUFBSXdCLE1BQVc7QUFDYixXQUFJVyxFQUFLLEtBQUssQ0FBQyxLQUFLQSxFQUFLLEtBQUssQ0FBQyxFQUFFLFFBQ3hCLElBQUksSUFBSWxDLEVBQWdCc0IsR0FBS1ksRUFBSyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsSUFFbEQsSUFBSSxJQUFJWixDQUFHO0FBRXBCLFFBQU1lLElBQU0sSUFBSWhCLEVBQWtCQyxHQUFLQyxDQUFNO0FBQzdDLE1BQUlBLEdBQVE7QUFDVixJQUFBVSxNQUFZQSxJQUFVLENBQUE7QUFDdEIsVUFBTWIsSUFBT1YsRUFBVXVCLEdBQVMsRUFBRSxHQUFHQyxFQUFLLEtBQUssQ0FBQyxLQUFLLENBQUUsRUFBQSxDQUFFO0FBQ3pELFdBQU9HLEVBQUksTUFBTUgsRUFBSyxLQUFLLENBQUMsR0FBR2QsQ0FBSTtBQUFBLEVBQ3BDO0FBQ0QsU0FBT2lCO0FBQ1QsR0FBRyxFQUFFO0FDbEhFLE1BQU1DLElBQVMsQ0FBQztBQUFBLEVBQ3RCLFNBQUFOLElBQVU7QUFBQSxFQUNWLFdBQUFPLElBQVk7QUFDYixNQUlDUixFQUFZQyxHQUFTO0FBQUEsRUFDcEIsT0FBT087QUFDUixDQUFDOyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMl19