@cartanova/qgrid-cli 2.6.6 → 2.6.8
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/bundle/dist/application/monit/monit.frame.js +2 -2
- package/bundle/dist/application/qgrid/expired-token-reminder.js +37 -16
- package/bundle/dist/application/qgrid/oauth.js +1 -1
- package/bundle/dist/application/qgrid/qgrid.frame.js +3 -3
- package/bundle/dist/application/qgrid/slack-user-map.js +5 -14
- package/bundle/dist/application/qgrid/token-death.js +3 -2
- package/bundle/dist/application/qgrid/tool-emulation.js +1 -1
- package/bundle/dist/application/queries.generated.js +8 -2
- package/bundle/dist/application/request-log/request-log.model.js +2 -2
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +236 -0
- package/bundle/dist/application/setting/setting.schema.js +157 -0
- package/bundle/dist/application/setting/setting.store.js +66 -0
- package/bundle/dist/application/setting/setting.types.js +48 -0
- package/bundle/dist/application/sonamu.generated.js +32 -2
- package/bundle/dist/application/sonamu.generated.sso.js +12 -2
- package/bundle/dist/application/token/token.model.js +1 -1
- package/bundle/dist/i18n/en.js +3 -1
- package/bundle/dist/i18n/ko.js +3 -1
- package/bundle/dist/i18n/sd.generated.js +9 -1
- package/bundle/dist/migrations/20260808194708_create__settings.js +24 -0
- package/bundle/dist/sonamu.config.js +8 -2
- package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +21 -6
- package/bundle/dist/utils/quiet-hours.js +43 -0
- package/bundle/dist/utils/slack-notify.js +12 -5
- package/bundle/src/application/qgrid/expired-token-reminder.test.ts +135 -13
- package/bundle/src/application/qgrid/expired-token-reminder.ts +60 -21
- package/bundle/src/application/qgrid/slack-user-map.test.ts +23 -0
- package/bundle/src/application/qgrid/slack-user-map.ts +4 -14
- package/bundle/src/application/qgrid/token-death.ts +2 -0
- package/bundle/src/application/queries.generated.ts +21 -1
- package/bundle/src/application/setting/setting.entity.json +59 -0
- package/bundle/src/application/setting/setting.model.ts +263 -0
- package/bundle/src/application/setting/setting.schema.test.ts +80 -0
- package/bundle/src/application/setting/setting.schema.ts +174 -0
- package/bundle/src/application/setting/setting.store.test.ts +87 -0
- package/bundle/src/application/setting/setting.store.ts +85 -0
- package/bundle/src/application/setting/setting.types.ts +51 -0
- package/bundle/src/application/sonamu.generated.http +47 -0
- package/bundle/src/application/sonamu.generated.sso.ts +21 -0
- package/bundle/src/application/sonamu.generated.ts +51 -0
- package/bundle/src/i18n/en.ts +2 -0
- package/bundle/src/i18n/ko.ts +2 -0
- package/bundle/src/i18n/sd.generated.ts +8 -0
- package/bundle/src/migrations/20260808194708_create__settings.ts +19 -0
- package/bundle/src/sonamu.config.ts +10 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +12 -0
- package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +43 -5
- package/bundle/src/utils/quiet-hours.ts +40 -0
- package/bundle/src/utils/slack-notify.test.ts +88 -20
- package/bundle/src/utils/slack-notify.ts +24 -4
- package/bundle/web-dist/client/assets/index-7SZyiqAx.css +1 -0
- package/bundle/web-dist/client/assets/index-DrsXE13r.js +78 -0
- package/bundle/web-dist/client/assets/{logs-CvmI4KuC.js → logs-e4-6aYnO.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-CUueNzoL.js → monit-eOAlYTK9.js} +1 -1
- package/bundle/web-dist/client/assets/plus-p4vtg6LN.js +1 -0
- package/bundle/web-dist/client/assets/{routes-CAfjRsMY.js → routes-Qie4ogtJ.js} +2 -2
- package/bundle/web-dist/client/assets/{sd.generated-DYdwSB2I.js → sd.generated-Bwa7rses.js} +1 -1
- package/bundle/web-dist/client/assets/services.generated-T4ctVcia.js +1 -0
- package/bundle/web-dist/client/assets/settings-CTVZpAAg.js +1 -0
- package/bundle/web-dist/client/assets/{show-C5vKpp5z.js → show-60iOOM-e.js} +1 -1
- package/bundle/web-dist/client/assets/tokens-DdDccGlX.js +1 -0
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-B3o4CXDW.js → use-oauth-login-flow-0ZGq74bZ.js} +1 -1
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-BaZaveNc.js → lazyRouteComponent-Ws7I6fL-.js} +2 -1
- package/bundle/web-dist/server/assets/{logs-DMOw3SjD.js → logs-DmkzGxGU.js} +4 -4
- package/bundle/web-dist/server/assets/{monit-UmcqHroX.js → monit-DyKLJX4s.js} +3 -2
- package/bundle/web-dist/server/assets/plus-BISXNqRU.js +19 -0
- package/bundle/web-dist/server/assets/react-dom-D7duWOwf.js +462 -0
- package/bundle/web-dist/server/assets/{routes-BfoQmYud.js → routes-g62E9xmC.js} +5 -4
- package/bundle/web-dist/server/assets/{sd.generated-B0xqnHEo.js → sd.generated-LO-h1_16.js} +13 -461
- package/bundle/web-dist/server/assets/{services.generated-DqAKskAS.js → services.generated-DADr9OGH.js} +111 -2
- package/bundle/web-dist/server/assets/settings-CMJKayff.js +332 -0
- package/bundle/web-dist/server/assets/{show-C-oSdzHX.js → show-BGAiCPGq.js} +4 -4
- package/bundle/web-dist/server/assets/{tokens-Dkd_uXEk.js → tokens-DmhIfVct.js} +6 -21
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-YM1nsd-H.js → use-oauth-login-flow-B6MY65IN.js} +2 -2
- package/bundle/web-dist/server/entry-server.generated.js +54 -18
- package/package.json +1 -1
- package/skills/qgrid/references/cli-env-and-server-boot.md +14 -2
- package/skills/qgrid/references/openai-codex-runtime.md +1 -1
- package/skills/qgrid/references/sonamu-api-web-flow.md +2 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +2 -1
- package/bundle/web-dist/client/assets/index-B4GlN1IX.css +0 -1
- package/bundle/web-dist/client/assets/index-qs8K8bOv.js +0 -78
- package/bundle/web-dist/client/assets/services.generated-BsAvotjG.js +0 -1
- package/bundle/web-dist/client/assets/tokens-C9KKP2Yq.js +0 -1
- /package/bundle/web-dist/server/assets/{cost-CSH_t17I.js → cost-DzjfVtUr.js} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { monitLogBuffer } from "./log-buffer.js";
|
|
2
|
-
import { resolveOpenAIWorkerPoolConfig } from "../../utils/providers/openai/openai-worker-pool-config.js";
|
|
3
|
-
import { QgridDispatcher } from "../qgrid/qgrid.dispatcher.js";
|
|
4
2
|
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
5
3
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
4
|
+
import { resolveOpenAIWorkerPoolConfig } from "../../utils/providers/openai/openai-worker-pool-config.js";
|
|
5
|
+
import { QgridDispatcher } from "../qgrid/qgrid.dispatcher.js";
|
|
6
6
|
import { BaseFrameClass, DB, api } from "sonamu";
|
|
7
7
|
//#region src/application/monit/monit.frame.ts
|
|
8
8
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getSetting } from "../setting/setting.store.js";
|
|
1
2
|
import { SLACK_COLOR, notifySlack } from "../../utils/slack-notify.js";
|
|
2
3
|
import { TokenModel } from "../token/token.model.js";
|
|
3
4
|
import { getSlackUserMap, mentionFor } from "./slack-user-map.js";
|
|
@@ -17,38 +18,58 @@ import { getLogger } from "@logtape/logtape";
|
|
|
17
18
|
*/
|
|
18
19
|
const logger = getLogger(["qgrid", "expired-reminder"]);
|
|
19
20
|
const MINUTE_MS = 6e4;
|
|
21
|
+
const defaultDeps = {
|
|
22
|
+
findInactive: () => TokenModel.findInactive("A"),
|
|
23
|
+
getSlackUserMap,
|
|
24
|
+
readSetting: getSetting,
|
|
25
|
+
sendSlack: notifySlack
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* 1건이면 제목(subject)에 토큰명이 이미 있으므로 본문에서는 뺀다 — 같은 이름을 두 번 쓰면
|
|
29
|
+
* 읽는 사람이 다른 정보인 줄 알고 한 번 더 본다. 여러 건이면 제목이 건수라 본문에 남긴다.
|
|
30
|
+
*/
|
|
20
31
|
function buildReminderContext(tokens, userMap) {
|
|
21
|
-
|
|
32
|
+
const showLabel = tokens.length > 1;
|
|
33
|
+
return [...tokens.map((token) => {
|
|
22
34
|
const mention = mentionFor(token.name, userMap);
|
|
23
35
|
const label = token.name ?? "unnamed";
|
|
36
|
+
if (!showLabel) return mention;
|
|
24
37
|
return mention ? `${mention} ${label}` : label;
|
|
25
|
-
}).join("\n");
|
|
38
|
+
}), "재로그인이 필요합니다"].filter(Boolean).join("\n");
|
|
26
39
|
}
|
|
27
|
-
async function sendReminder(
|
|
28
|
-
const inactive = await
|
|
40
|
+
async function sendReminder(deps) {
|
|
41
|
+
const inactive = await deps.findInactive();
|
|
29
42
|
if (inactive.length === 0) return;
|
|
30
|
-
|
|
43
|
+
const userMap = deps.getSlackUserMap();
|
|
44
|
+
await deps.sendSlack({
|
|
31
45
|
title: "세션 만료",
|
|
32
46
|
subject: inactive.length > 1 ? `${inactive.length}건` : inactive[0].name ?? "unnamed",
|
|
33
|
-
context:
|
|
47
|
+
context: buildReminderContext(inactive, userMap),
|
|
34
48
|
color: SLACK_COLOR.bad
|
|
35
49
|
});
|
|
36
50
|
}
|
|
37
51
|
let timer = null;
|
|
52
|
+
function scheduleExpiredTokenReminder(runNow, deps) {
|
|
53
|
+
stopExpiredTokenReminder();
|
|
54
|
+
const minutes = Number(deps.readSetting("slack.expiryReminderMinutes", "SLACK_EXPIRY_REMINDER_INTERVAL_MINUTES") ?? 0);
|
|
55
|
+
if (!Number.isFinite(minutes) || minutes <= 0) return;
|
|
56
|
+
logger.info(`expired token reminder every ${minutes}m (${deps.getSlackUserMap().size} user mappings)`);
|
|
57
|
+
const run = () => sendReminder(deps).catch((e) => logger.warn(`reminder failed: ${e.message}`));
|
|
58
|
+
if (runNow) run();
|
|
59
|
+
timer = setInterval(run, minutes * MINUTE_MS);
|
|
60
|
+
}
|
|
38
61
|
/**
|
|
39
62
|
* `SLACK_EXPIRY_REMINDER_INTERVAL_MINUTES` 가 양수일 때만 켜진다. 미설정·0 이면 비활성.
|
|
40
63
|
*
|
|
41
64
|
* 인스턴스가 여러 개면 각자 보낸다. 만료 순간 알림과 달리 상태 변화가 없어 DB 로 억제할 수
|
|
42
65
|
* 없고, 하루 몇 건 수준이라 중복을 감수하는 편이 잠금 장치를 두는 것보다 낫다.
|
|
43
66
|
*/
|
|
44
|
-
function startExpiredTokenReminder() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
sendReminder(userMap).catch((e) => logger.warn(`reminder failed: ${e.message}`));
|
|
51
|
-
}, minutes * MINUTE_MS);
|
|
67
|
+
function startExpiredTokenReminder(deps = defaultDeps) {
|
|
68
|
+
scheduleExpiredTokenReminder(true, deps);
|
|
69
|
+
}
|
|
70
|
+
/** 설정 변경 시 기존 타이머만 새 주기로 교체한다. 저장 자체가 알림을 보내지는 않는다. */
|
|
71
|
+
function rescheduleExpiredTokenReminder(deps = defaultDeps) {
|
|
72
|
+
scheduleExpiredTokenReminder(false, deps);
|
|
52
73
|
}
|
|
53
74
|
function stopExpiredTokenReminder() {
|
|
54
75
|
if (!timer) return;
|
|
@@ -56,6 +77,6 @@ function stopExpiredTokenReminder() {
|
|
|
56
77
|
timer = null;
|
|
57
78
|
}
|
|
58
79
|
//#endregion
|
|
59
|
-
export { buildReminderContext, startExpiredTokenReminder, stopExpiredTokenReminder };
|
|
80
|
+
export { buildReminderContext, rescheduleExpiredTokenReminder, startExpiredTokenReminder, stopExpiredTokenReminder };
|
|
60
81
|
|
|
61
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJlZC10b2tlbi1yZW1pbmRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvZXhwaXJlZC10b2tlbi1yZW1pbmRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOyEuOyFmCDrp4zro4wg7JWM66a8IOuwmOuztS5cbiAqXG4gKiDrp4zro4wg7Iic6rCE7J2YIOyVjOumvChgdG9rZW4tZGVhdGgudHNgKeydgCDqt7jrlYwg7LGE64SQ7J2EIOuztOyngCDslYrsnLzrqbQg64aT7Lmc64ukLiDsnqzroZzqt7jsnbjsnYAg7IKs656M7J20XG4gKiDtlbTslbwg7ZWY64qUIOydvOydtOudvCDrhpPsuZjrqbQg7Yag7YGw7J20IOqzhOyGjSDruaDsp4Qg7LGE66GcIOuCqOuKlOuLpC4g6re4656Y7IScIOyVhOyngSDsnqzroZzqt7jsnbjrkJjsp4Ag7JWK7J2AXG4gKiDthqDtgbDsnYQg6rCZ7J2AIOusuOq1rOuhnCDri6Tsi5wg7JWM66aw64ukIOKAlCDsgqzqsbTsnbQg7ZWY64KY7J2066+A66GcIOyVjOumvOuPhCDtlZwg7KKF66WY64ukLlxuICpcbiAqIOyXrOufrCDthqDtgbDsnbQg66eM66OM64+
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJlZC10b2tlbi1yZW1pbmRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvZXhwaXJlZC10b2tlbi1yZW1pbmRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOyEuOyFmCDrp4zro4wg7JWM66a8IOuwmOuztS5cbiAqXG4gKiDrp4zro4wg7Iic6rCE7J2YIOyVjOumvChgdG9rZW4tZGVhdGgudHNgKeydgCDqt7jrlYwg7LGE64SQ7J2EIOuztOyngCDslYrsnLzrqbQg64aT7Lmc64ukLiDsnqzroZzqt7jsnbjsnYAg7IKs656M7J20XG4gKiDtlbTslbwg7ZWY64qUIOydvOydtOudvCDrhpPsuZjrqbQg7Yag7YGw7J20IOqzhOyGjSDruaDsp4Qg7LGE66GcIOuCqOuKlOuLpC4g6re4656Y7IScIOyVhOyngSDsnqzroZzqt7jsnbjrkJjsp4Ag7JWK7J2AXG4gKiDthqDtgbDsnYQg6rCZ7J2AIOusuOq1rOuhnCDri6Tsi5wg7JWM66aw64ukIOKAlCDsgqzqsbTsnbQg7ZWY64KY7J2066+A66GcIOyVjOumvOuPhCDtlZwg7KKF66WY64ukLlxuICpcbiAqIOyXrOufrCDthqDtgbDsnbQg66eM66OM64+8IOyeiOycvOuptCDtlZwg66mU7Iuc7KeA7JeQIOuqqOydgOuLpC4g7Yag7YGw66eI64ukIOuplOyLnOyngOulvCDrs7TrgrTrqbQg7LGE64SQ7J20IOyLnOuBhOufrOybjFxuICog7KCV7J6RIOydve2eiOyngCDslYrripTri6QuXG4gKlxuICog67mE7Zmc7ISxIO2GoO2BsOydtCDsl4bsnLzrqbQg67O064K07KeAIOyViuuKlOuLpCDigJQgXCLsnbTsg4Eg7JeG7J2MXCLsnYQg7KO86riw7KCB7Jy866GcIOyVjOumrOuptCDssYTrhJDsnbQg66y0646M7KeE64ukLlxuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBub3RpZnlTbGFjaywgU0xBQ0tfQ09MT1IgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc2xhY2stbm90aWZ5XCI7XG5pbXBvcnQgeyBnZXRTZXR0aW5nIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5zdG9yZVwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0U2xhY2tVc2VyTWFwLCBtZW50aW9uRm9yIH0gZnJvbSBcIi4vc2xhY2stdXNlci1tYXBcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiZXhwaXJlZC1yZW1pbmRlclwiXSk7XG5cbmNvbnN0IE1JTlVURV9NUyA9IDYwXzAwMDtcblxuZXhwb3J0IHR5cGUgRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzID0ge1xuICBmaW5kSW5hY3RpdmU6ICgpID0+IFByb21pc2U8eyBuYW1lOiBzdHJpbmcgfCBudWxsOyBwcm92aWRlcjogc3RyaW5nIH1bXT47XG4gIGdldFNsYWNrVXNlck1hcDogKCkgPT4gTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgcmVhZFNldHRpbmc6IHR5cGVvZiBnZXRTZXR0aW5nO1xuICBzZW5kU2xhY2s6IHR5cGVvZiBub3RpZnlTbGFjaztcbn07XG5cbmNvbnN0IGRlZmF1bHREZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSB7XG4gIGZpbmRJbmFjdGl2ZTogKCkgPT4gVG9rZW5Nb2RlbC5maW5kSW5hY3RpdmUoXCJBXCIpLFxuICBnZXRTbGFja1VzZXJNYXAsXG4gIHJlYWRTZXR0aW5nOiBnZXRTZXR0aW5nLFxuICBzZW5kU2xhY2s6IG5vdGlmeVNsYWNrLFxufTtcblxuLyoqXG4gKiAx6rG07J2066m0IOygnOuqqShzdWJqZWN0KeyXkCDthqDtgbDrqoXsnbQg7J2066+4IOyeiOycvOuvgOuhnCDrs7jrrLjsl5DshJzripQg67qA64ukIOKAlCDqsJnsnYAg7J2066aE7J2EIOuRkCDrsogg7JOw66m0XG4gKiDsnb3ripQg7IKs656M7J20IOuLpOuluCDsoJXrs7Tsnbgg7KSEIOyVjOqzoCDtlZwg67KIIOuNlCDrs7jri6QuIOyXrOufrCDqsbTsnbTrqbQg7KCc66qp7J20IOqxtOyImOudvCDrs7jrrLjsl5Ag64Ko6ri064ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSZW1pbmRlckNvbnRleHQoXG4gIHRva2VuczogeyBuYW1lOiBzdHJpbmcgfCBudWxsOyBwcm92aWRlcjogc3RyaW5nIH1bXSxcbiAgdXNlck1hcDogTWFwPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyB7XG4gIGNvbnN0IHNob3dMYWJlbCA9IHRva2Vucy5sZW5ndGggPiAxO1xuICBjb25zdCBsaW5lcyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG4gICAgY29uc3QgbWVudGlvbiA9IG1lbnRpb25Gb3IodG9rZW4ubmFtZSwgdXNlck1hcCk7XG4gICAgY29uc3QgbGFiZWwgPSB0b2tlbi5uYW1lID8/IFwidW5uYW1lZFwiO1xuICAgIGlmICghc2hvd0xhYmVsKSByZXR1cm4gbWVudGlvbjtcbiAgICByZXR1cm4gbWVudGlvbiA/IGAke21lbnRpb259ICR7bGFiZWx9YCA6IGxhYmVsO1xuICB9KTtcbiAgcmV0dXJuIFsuLi5saW5lcywgXCLsnqzroZzqt7jsnbjsnbQg7ZWE7JqU7ZWp64uI64ukXCJdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kUmVtaW5kZXIoZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGluYWN0aXZlID0gYXdhaXQgZGVwcy5maW5kSW5hY3RpdmUoKTtcbiAgaWYgKGluYWN0aXZlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IHVzZXJNYXAgPSBkZXBzLmdldFNsYWNrVXNlck1hcCgpO1xuXG4gIGF3YWl0IGRlcHMuc2VuZFNsYWNrKHtcbiAgICAvLyDrp4zro4wg7Iic6rCEIOyVjOumvOqzvCDqsJnsnYAg7KCc66qp7J2EIOyTtOuLpC4g6rCZ7J2AIOyCrOqxtOydtOuvgOuhnCDri6Trpbgg7J2066aE7J2EIOu2meydtOuptCDrs4TqsJwg66y47KCc66GcIOydve2ejOuLpC5cbiAgICB0aXRsZTogXCLshLjshZgg66eM66OMXCIsXG4gICAgc3ViamVjdDogaW5hY3RpdmUubGVuZ3RoID4gMSA/IGAke2luYWN0aXZlLmxlbmd0aH3qsbRgIDogKGluYWN0aXZlWzBdIS5uYW1lID8/IFwidW5uYW1lZFwiKSxcbiAgICBjb250ZXh0OiBidWlsZFJlbWluZGVyQ29udGV4dChpbmFjdGl2ZSwgdXNlck1hcCksXG4gICAgY29sb3I6IFNMQUNLX0NPTE9SLmJhZCxcbiAgfSk7XG59XG5cbmxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIocnVuTm93OiBib29sZWFuLCBkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMpOiB2b2lkIHtcbiAgc3RvcEV4cGlyZWRUb2tlblJlbWluZGVyKCk7XG5cbiAgY29uc3QgbWludXRlcyA9IE51bWJlcihcbiAgICBkZXBzLnJlYWRTZXR0aW5nKFwic2xhY2suZXhwaXJ5UmVtaW5kZXJNaW51dGVzXCIsIFwiU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNcIikgPz8gMCxcbiAgKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWludXRlcykgfHwgbWludXRlcyA8PSAwKSByZXR1cm47XG5cbiAgbG9nZ2VyLmluZm8oXG4gICAgYGV4cGlyZWQgdG9rZW4gcmVtaW5kZXIgZXZlcnkgJHttaW51dGVzfW0gKCR7ZGVwcy5nZXRTbGFja1VzZXJNYXAoKS5zaXplfSB1c2VyIG1hcHBpbmdzKWAsXG4gICk7XG5cbiAgY29uc3QgcnVuID0gKCkgPT5cbiAgICBzZW5kUmVtaW5kZXIoZGVwcykuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGByZW1pbmRlciBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuXG4gIGlmIChydW5Ob3cpIHZvaWQgcnVuKCk7XG4gIHRpbWVyID0gc2V0SW50ZXJ2YWwocnVuLCBtaW51dGVzICogTUlOVVRFX01TKTtcbn1cblxuLyoqXG4gKiBgU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNgIOqwgCDslpHsiJjsnbwg65WM66eMIOy8nOynhOuLpC4g66+47ISk7KCVwrcwIOydtOuptCDruYTtmZzshLEuXG4gKlxuICog7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg6rCB7J6QIOuztOuCuOuLpC4g66eM66OMIOyInOqwhCDslYzrprzqs7wg64us66asIOyDge2DnCDrs4DtmZTqsIAg7JeG7Ja0IERCIOuhnCDslrXsoJztlaAg7IiYXG4gKiDsl4bqs6AsIO2VmOujqCDrqocg6rG0IOyImOykgOydtOudvCDspJHrs7XsnYQg6rCQ7IiY7ZWY64qUIO2OuOydtCDsnqDquIgg7J6l7LmY66W8IOuRkOuKlCDqsoPrs7Tri6Qg64Kr64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFeHBpcmVkVG9rZW5SZW1pbmRlcihkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSBkZWZhdWx0RGVwcyk6IHZvaWQge1xuICAvLyDquLDrj5kg7KeB7ZuE7JeQ64+EIO2VnCDrsogg67O064K464ukLiDsnqzquLDrj5nsnYAg67Cw7Y+s64KYIOyepeyVoCDrs7Xqtawg65WMIOydvOyWtOuCmOuKlOuNsCwg6re4IOyLnOygkOyXkCDsnbTrr7hcbiAgLy8g66eM66OM65CcIO2GoO2BsOydtCDsnojsnLzrqbQg7LKrIOyjvOq4sOqwgCDrj4wg65WM6rmM7KeAIOyhsOyaqe2VnCDqsoPsnbQg7J207IOB7ZWY64ukLlxuICBzY2hlZHVsZUV4cGlyZWRUb2tlblJlbWluZGVyKHRydWUsIGRlcHMpO1xufVxuXG4vKiog7ISk7KCVIOuzgOqyvSDsi5wg6riw7KG0IO2DgOydtOuouOunjCDsg4gg7KO86riw66GcIOq1kOyytO2VnOuLpC4g7KCA7J6lIOyekOyytOqwgCDslYzrprzsnYQg67O064K07KeA64qUIOyViuuKlOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIoZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzID0gZGVmYXVsdERlcHMpOiB2b2lkIHtcbiAgc2NoZWR1bGVFeHBpcmVkVG9rZW5SZW1pbmRlcihmYWxzZSwgZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wRXhwaXJlZFRva2VuUmVtaW5kZXIoKTogdm9pZCB7XG4gIGlmICghdGltZXIpIHJldHVybjtcbiAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gIHRpbWVyID0gbnVsbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxrQkFBa0IsQ0FBQztBQUV0RCxNQUFNLFlBQVk7QUFTbEIsTUFBTSxjQUF3QztDQUM1QyxvQkFBb0IsV0FBVyxhQUFhLEdBQUc7Q0FDL0M7Q0FDQSxhQUFhO0NBQ2IsV0FBVztBQUNiOzs7OztBQU1BLFNBQWdCLHFCQUNkLFFBQ0EsU0FDUTtDQUNSLE1BQU0sWUFBWSxPQUFPLFNBQVM7Q0FPbEMsT0FBTyxDQUFDLEdBTk0sT0FBTyxLQUFLLFVBQVU7RUFDbEMsTUFBTSxVQUFVLFdBQVcsTUFBTSxNQUFNLE9BQU87RUFDOUMsTUFBTSxRQUFRLE1BQU0sUUFBUTtFQUM1QixJQUFJLENBQUMsV0FBVyxPQUFPO0VBQ3ZCLE9BQU8sVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVO0NBQzNDLENBQ1csR0FBTyxhQUFhLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtBQUM1RDtBQUVBLGVBQWUsYUFBYSxNQUErQztDQUN6RSxNQUFNLFdBQVcsTUFBTSxLQUFLLGFBQWE7Q0FDekMsSUFBSSxTQUFTLFdBQVcsR0FBRztDQUUzQixNQUFNLFVBQVUsS0FBSyxnQkFBZ0I7Q0FFckMsTUFBTSxLQUFLLFVBQVU7RUFFbkIsT0FBTztFQUNQLFNBQVMsU0FBUyxTQUFTLElBQUksR0FBRyxTQUFTLE9BQU8sS0FBTSxTQUFTLEVBQUUsQ0FBRSxRQUFRO0VBQzdFLFNBQVMscUJBQXFCLFVBQVUsT0FBTztFQUMvQyxPQUFPLFlBQVk7Q0FDckIsQ0FBQztBQUNIO0FBRUEsSUFBSSxRQUErQztBQUVuRCxTQUFTLDZCQUE2QixRQUFpQixNQUFzQztDQUMzRix5QkFBeUI7Q0FFekIsTUFBTSxVQUFVLE9BQ2QsS0FBSyxZQUFZLCtCQUErQix3Q0FBd0MsS0FBSyxDQUMvRjtDQUNBLElBQUksQ0FBQyxPQUFPLFNBQVMsT0FBTyxLQUFLLFdBQVcsR0FBRztDQUUvQyxPQUFPLEtBQ0wsZ0NBQWdDLFFBQVEsS0FBSyxLQUFLLGdCQUFnQixDQUFDLENBQUMsS0FBSyxnQkFDM0U7Q0FFQSxNQUFNLFlBQ0osYUFBYSxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sT0FBTyxLQUFLLG9CQUFxQixFQUFZLFNBQVMsQ0FBQztDQUV6RixJQUFJLFFBQVEsQUFBSyxJQUFJO0NBQ3JCLFFBQVEsWUFBWSxLQUFLLFVBQVUsU0FBUztBQUM5Qzs7Ozs7OztBQVFBLFNBQWdCLDBCQUEwQixPQUFpQyxhQUFtQjtDQUc1Riw2QkFBNkIsTUFBTSxJQUFJO0FBQ3pDOztBQUdBLFNBQWdCLCtCQUErQixPQUFpQyxhQUFtQjtDQUNqRyw2QkFBNkIsT0FBTyxJQUFJO0FBQzFDO0FBRUEsU0FBZ0IsMkJBQWlDO0NBQy9DLElBQUksQ0FBQyxPQUFPO0NBQ1osY0FBYyxLQUFLO0NBQ25CLFFBQVE7QUFDViJ9
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
1
3
|
import { getAccessToken, getExpiresAt, getRefreshToken } from "../../utils/providers/common/credentials.js";
|
|
2
4
|
import { CallerSchemaValidationError } from "../../utils/providers/common/schema-validation.js";
|
|
3
5
|
import { StreamEvents } from "./qgrid.types.js";
|
|
4
6
|
import { ToolSchemaCompositionError } from "./tool-emulation-schema.js";
|
|
5
7
|
import { QgridDispatcher, buildAndValidateStrictOutputSchema } from "./qgrid.dispatcher.js";
|
|
6
|
-
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
7
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
8
8
|
import { TokenModel } from "../token/token.model.js";
|
|
9
9
|
import { CONSOLE_CALLBACK_URL, RefreshFailedError, buildAuthUrl, exchangeCodeForTokens, fetchUsage, generatePKCE, refreshAccessToken } from "./oauth.js";
|
|
10
10
|
import { MICRO_USD, RequestLogModel } from "../request-log/request-log.model.js";
|
|
@@ -12,8 +12,8 @@ import { afterQuery, beforeQuery, finishRunAborted, finishRunWithError } from ".
|
|
|
12
12
|
import { TokenCredentials } from "../token/token.types.js";
|
|
13
13
|
import { deactivateAuthDeadToken, notifyTokenAdded } from "./token-death.js";
|
|
14
14
|
import { BadRequestException, BaseFrameClass, Sonamu, api, stream } from "sonamu";
|
|
15
|
-
import crypto from "node:crypto";
|
|
16
15
|
import { getLogger } from "@logtape/logtape";
|
|
16
|
+
import crypto from "node:crypto";
|
|
17
17
|
import { getCacheManagerRef } from "sonamu/cache";
|
|
18
18
|
//#region src/application/qgrid/qgrid.frame.ts
|
|
19
19
|
const pendingStreams = /* @__PURE__ */ new Map();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getSetting } from "../setting/setting.store.js";
|
|
1
2
|
//#region src/application/qgrid/slack-user-map.ts
|
|
2
3
|
/**
|
|
3
4
|
* 토큰 소유자 → Slack 사용자 멘션.
|
|
@@ -30,20 +31,10 @@ function mentionFor(tokenName, userMap) {
|
|
|
30
31
|
const userId = userMap.get(ownerOf(tokenName));
|
|
31
32
|
return userId ? `<@${userId}>` : "";
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* 호출되므로 캐시해 둔다.
|
|
36
|
-
*/
|
|
37
|
-
let cached = null;
|
|
38
|
-
function getSlackUserMap() {
|
|
39
|
-
cached ??= parseSlackUserMap(process.env.SLACK_USER_MAP);
|
|
40
|
-
return cached;
|
|
41
|
-
}
|
|
42
|
-
/** 테스트에서 env 를 바꿔 끼울 때 쓴다. */
|
|
43
|
-
function resetSlackUserMapCache() {
|
|
44
|
-
cached = null;
|
|
34
|
+
function getSlackUserMap(readSetting = getSetting) {
|
|
35
|
+
return parseSlackUserMap(readSetting("slack.userMap", "SLACK_USER_MAP"));
|
|
45
36
|
}
|
|
46
37
|
//#endregion
|
|
47
|
-
export { getSlackUserMap, mentionFor, ownerOf, parseSlackUserMap
|
|
38
|
+
export { getSlackUserMap, mentionFor, ownerOf, parseSlackUserMap };
|
|
48
39
|
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stdXNlci1tYXAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3NsYWNrLXVzZXItbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog7Yag7YGwIOyGjOycoOyekCDihpIgU2xhY2sg7IKs7Jqp7J6QIOupmOyFmC5cbiAqXG4gKiBTbGFjayDtkZzsi5wg7J2066aE6rO8IO2GoO2BsOuqheydtCDsnpDso7wg7Ja06riL64KYKGhhemXihpJoYXplLmxlZSwgYnllb25nanVu4oaScG90YWRvcykgYHVzZXJzLmxpc3RgXG4gKiDsnpDrj5kg66ek7Lmt7J2AIOyhsOyaqe2eiCDsi6TtjKjtlZzri6QuIOupmOyFmOydtCDruaDsp4DrqbQg7JWM66a87J20IOqwnOyduOyXkOqyjCDri7/sp4Ag7JWK7JWEIOuqqeyggSDsnpDssrTqsIBcbiAqIOyCrOudvOyngOuvgOuhnCBgU0xBQ0tfVVNFUl9NQVBgIOuqheyLnCDrp6TtlZHrp4wg7JO064ukLlxuICpcbiAqIOqzteyaqSDqs4TsoJUoYnlzdWNvLCBkZXYtY29tbW9uIOuTsSnsnYAg66ek7ZWR7JeQIOuEo+
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stdXNlci1tYXAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3NsYWNrLXVzZXItbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog7Yag7YGwIOyGjOycoOyekCDihpIgU2xhY2sg7IKs7Jqp7J6QIOupmOyFmC5cbiAqXG4gKiBTbGFjayDtkZzsi5wg7J2066aE6rO8IO2GoO2BsOuqheydtCDsnpDso7wg7Ja06riL64KYKGhhemXihpJoYXplLmxlZSwgYnllb25nanVu4oaScG90YWRvcykgYHVzZXJzLmxpc3RgXG4gKiDsnpDrj5kg66ek7Lmt7J2AIOyhsOyaqe2eiCDsi6TtjKjtlZzri6QuIOupmOyFmOydtCDruaDsp4DrqbQg7JWM66a87J20IOqwnOyduOyXkOqyjCDri7/sp4Ag7JWK7JWEIOuqqeyggSDsnpDssrTqsIBcbiAqIOyCrOudvOyngOuvgOuhnCBgU0xBQ0tfVVNFUl9NQVBgIOuqheyLnCDrp6TtlZHrp4wg7JO064ukLlxuICpcbiAqIOqzteyaqSDqs4TsoJUoYnlzdWNvLCBkZXYtY29tbW9uIOuTsSnsnYAg66ek7ZWR7JeQIOuEo+yngCDslYrripTri6Qg4oCUIOupmOyFmCDsl4bsnbQg7J2066aE66eMIOuCmOqwgOuKlCDqsoPsnbRcbiAqIOunnuuKlCDrj5nsnpHsnbTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0U2V0dGluZyB9IGZyb20gXCIuLi9zZXR0aW5nL3NldHRpbmcuc3RvcmVcIjtcblxuLyoqIGDthqDtgbDrqoU6U2xhY2tVc2VySWRgIOuqqeuhneydhCDtjIzsi7HtlZzri6QuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTbGFja1VzZXJNYXAocmF3OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgaWYgKCFyYXcpIHJldHVybiBtYXA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiByYXcuc3BsaXQoXCIsXCIpKSB7XG4gICAgY29uc3QgW25hbWUsIHVzZXJJZF0gPSBlbnRyeS5zcGxpdChcIjpcIikubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKG5hbWUgJiYgdXNlcklkKSBtYXAuc2V0KG5hbWUsIHVzZXJJZCk7XG4gIH1cbiAgcmV0dXJuIG1hcDtcbn1cblxuLyoqIGBhbnRocm9waWMveWRzYCDihpIgYHlkc2AuIHByb3ZpZGVyIHByZWZpeCDsl4bsnbQg7KCA7J6l65CcIOydtOumhOuPhCDqt7jrjIDroZwg67Cb64qU64ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bmVyT2YodG9rZW5OYW1lOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKCF0b2tlbk5hbWUpIHJldHVybiBcIlwiO1xuICBjb25zdCBzbGFzaCA9IHRva2VuTmFtZS5pbmRleE9mKFwiL1wiKTtcbiAgcmV0dXJuIHNsYXNoID09PSAtMSA/IHRva2VuTmFtZSA6IHRva2VuTmFtZS5zbGljZShzbGFzaCArIDEpO1xufVxuXG4vKiog66ek7ZWR7J20IOyeiOycvOuptCBgPEBVLi4uPmAsIOyXhuycvOuptCDruYgg66y47J6Q7Je0LiDtmLjstpzrtoDqsIAg66mY7IWYIOycoOustOuhnCDrrLjqtazrpbwg6rOg66W464ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbnRpb25Gb3IodG9rZW5OYW1lOiBzdHJpbmcgfCBudWxsLCB1c2VyTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgdXNlcklkID0gdXNlck1hcC5nZXQob3duZXJPZih0b2tlbk5hbWUpKTtcbiAgcmV0dXJuIHVzZXJJZCA/IGA8QCR7dXNlcklkfT5gIDogXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNsYWNrVXNlck1hcChyZWFkU2V0dGluZzogdHlwZW9mIGdldFNldHRpbmcgPSBnZXRTZXR0aW5nKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBwYXJzZVNsYWNrVXNlck1hcChyZWFkU2V0dGluZyhcInNsYWNrLnVzZXJNYXBcIiwgXCJTTEFDS19VU0VSX01BUFwiKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFnQixrQkFBa0IsS0FBOEM7Q0FDOUUsTUFBTSxzQkFBTSxJQUFJLElBQW9CO0NBQ3BDLElBQUksQ0FBQyxLQUFLLE9BQU87Q0FFakIsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLEdBQUcsR0FBRztFQUNsQyxNQUFNLENBQUMsTUFBTSxVQUFVLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDM0QsSUFBSSxRQUFRLFFBQVEsSUFBSSxJQUFJLE1BQU0sTUFBTTtDQUMxQztDQUNBLE9BQU87QUFDVDs7QUFHQSxTQUFnQixRQUFRLFdBQWtDO0NBQ3hELElBQUksQ0FBQyxXQUFXLE9BQU87Q0FDdkIsTUFBTSxRQUFRLFVBQVUsUUFBUSxHQUFHO0NBQ25DLE9BQU8sVUFBVSxLQUFLLFlBQVksVUFBVSxNQUFNLFFBQVEsQ0FBQztBQUM3RDs7QUFHQSxTQUFnQixXQUFXLFdBQTBCLFNBQXNDO0NBQ3pGLE1BQU0sU0FBUyxRQUFRLElBQUksUUFBUSxTQUFTLENBQUM7Q0FDN0MsT0FBTyxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQ25DO0FBRUEsU0FBZ0IsZ0JBQWdCLGNBQWlDLFlBQWlDO0NBQ2hHLE9BQU8sa0JBQWtCLFlBQVksaUJBQWlCLGdCQUFnQixDQUFDO0FBQ3pFIn0=
|
|
@@ -70,7 +70,8 @@ function notifyLastActiveTokenDying(token, reasonCode) {
|
|
|
70
70
|
token.provider,
|
|
71
71
|
reasonCode
|
|
72
72
|
].filter(Boolean).join(" · ") + " · 풀이 비지 않도록 유지 중입니다. 전 토큰이 동시에 실패했다면 client_id 취소나 OAuth 계약 변경을 의심하세요",
|
|
73
|
-
color: SLACK_COLOR.bad
|
|
73
|
+
color: SLACK_COLOR.bad,
|
|
74
|
+
urgent: true
|
|
74
75
|
});
|
|
75
76
|
}
|
|
76
77
|
/** 로그인이 완료돼 토큰이 저장됐을 때. 신규·재로그인을 가리지 않는다. */
|
|
@@ -90,4 +91,4 @@ function notifyTokenAdded(name, provider) {
|
|
|
90
91
|
//#endregion
|
|
91
92
|
export { deactivateAuthDeadToken, notifyTokenAdded };
|
|
92
93
|
|
|
93
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZGVhdGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLWRlYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog7IS47IWYIOunjOujjChhdXRoLWRlYWQpIO2GoO2BsOydmCDrnbzsmrDtjIUg7KCc7Jm4IOyngOygkC5cbiAqXG4gKiByZWZyZXNoIOqwgCDsnqzroZzqt7jsnbgg7Jm4IOuzteq1rCDrtojqsIDtlZwg7Iuk7Yyo66W8IOuwmO2ZmO2VnCDsiJzqsITsl5Drp4wg7Zi47Lac65Cc64ukLiDruYTtmZzshLHtmZTripRcbiAqIGBhY3RpdmU9dHJ1ZWAg7KGw6rG067aAIOqwseyLoCAx7ZqM7J206rOgLCDqt7gg6rCx7Iug7J2EIOydtOq4tCDtlITroZzshLjsiqTrp4wgU2xhY2sg7JWM66a87J2EIOuztOuCuOuLpCDigJRcbiAqIOqzteycoCBEQiDrpbwg7JOw64qUIOyduOyKpO2EtOyKpOqwgCDrqofsnbTrk6Ag7IKs6rG064u5IOyVjOumvOydgCAx6rG07J2064ukLlxuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBnZXRSZWZyZXNoVG9rZW4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgbm90aWZ5U2xhY2ssIFNMQUNLX0NPTE9SIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3NsYWNrLW5vdGlmeVwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0U2xhY2tVc2VyTWFwLCBtZW50aW9uRm9yIH0gZnJvbSBcIi4vc2xhY2stdXNlci1tYXBcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9rZW4tZGVhdGhcIl0pO1xuXG50eXBlIERlYWRUb2tlblJlZiA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm92aWRlcjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gdXNlZFJlZnJlc2hUb2tlbiDsi6TtjKjtlZwg7JqU7LKt7J20IOyLpOygnOuhnCDsgqzsmqntlZwgcmVmcmVzaCB0b2tlbi5cbiAqICAgcmVmcmVzaCB0b2tlbiDsnYAg7ZqM7KCEIOyggOyepeuQmOuvgOuhnCwg7J2066+4IO2ajOyghOuQnCDsmJsg7Yag7YGw7Jy866GcIOuKpuqyjCDrj4TssKntlZwg7J6s7Iuc64+E6rCAXG4gKiAgIDQwMCDsnYQg67Cb64qUIOqyg+
|
|
94
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZGVhdGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLWRlYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog7IS47IWYIOunjOujjChhdXRoLWRlYWQpIO2GoO2BsOydmCDrnbzsmrDtjIUg7KCc7Jm4IOyngOygkC5cbiAqXG4gKiByZWZyZXNoIOqwgCDsnqzroZzqt7jsnbgg7Jm4IOuzteq1rCDrtojqsIDtlZwg7Iuk7Yyo66W8IOuwmO2ZmO2VnCDsiJzqsITsl5Drp4wg7Zi47Lac65Cc64ukLiDruYTtmZzshLHtmZTripRcbiAqIGBhY3RpdmU9dHJ1ZWAg7KGw6rG067aAIOqwseyLoCAx7ZqM7J206rOgLCDqt7gg6rCx7Iug7J2EIOydtOq4tCDtlITroZzshLjsiqTrp4wgU2xhY2sg7JWM66a87J2EIOuztOuCuOuLpCDigJRcbiAqIOqzteycoCBEQiDrpbwg7JOw64qUIOyduOyKpO2EtOyKpOqwgCDrqofsnbTrk6Ag7IKs6rG064u5IOyVjOumvOydgCAx6rG07J2064ukLlxuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBnZXRSZWZyZXNoVG9rZW4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgbm90aWZ5U2xhY2ssIFNMQUNLX0NPTE9SIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3NsYWNrLW5vdGlmeVwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0U2xhY2tVc2VyTWFwLCBtZW50aW9uRm9yIH0gZnJvbSBcIi4vc2xhY2stdXNlci1tYXBcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9rZW4tZGVhdGhcIl0pO1xuXG50eXBlIERlYWRUb2tlblJlZiA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm92aWRlcjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gdXNlZFJlZnJlc2hUb2tlbiDsi6TtjKjtlZwg7JqU7LKt7J20IOyLpOygnOuhnCDsgqzsmqntlZwgcmVmcmVzaCB0b2tlbi5cbiAqICAgcmVmcmVzaCB0b2tlbiDsnYAg7ZqM7KCEIOyggOyepeuQmOuvgOuhnCwg7J2066+4IO2ajOyghOuQnCDsmJsg7Yag7YGw7Jy866GcIOuKpuqyjCDrj4TssKntlZwg7J6s7Iuc64+E6rCAXG4gKiAgIDQwMCDsnYQg67Cb64qUIOqyg+ydgCDsoJXsg4Eg66CI7J207Iqk64ukLiBEQiDsnZgg7ZiE7J6sIOqwkuqzvCDri6TrpbTrqbQg7IKs66ed7Jy866GcIOuztOyngCDslYrripTri6QuXG4gKiBAcGFyYW0gcmVhc29uQ29kZSBgcHJvdmlkZXI6Y29kZWAg7ZiV7YOc7J2YIOuCtOu2gCDsvZTrk5wuIHByb3ZpZGVyIOydkeuLtSDrs7jrrLjsl5DripQg6rOE7KCVIOydtOuplOydvOydtOuCmFxuICogICDthqDtgbAg7KGw6rCB7J20IOyEnuydvCDsiJgg7J6I7Ja0IHJhdyDrqZTsi5zsp4Drpbwg6re464yA66GcIOyVjOumvOyXkCDsi6Psp4Ag7JWK64qU64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVhY3RpdmF0ZUF1dGhEZWFkVG9rZW4oXG4gIHRva2VuOiBEZWFkVG9rZW5SZWYsXG4gIHVzZWRSZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgcmVhc29uQ29kZTogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQ6IHRva2VuLmlkIH0pO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBjdXJyZW50UmVmcmVzaFRva2VuID0gZ2V0UmVmcmVzaFRva2VuKGN1cnJlbnQuY3JlZGVudGlhbHMpO1xuICBpZiAoY3VycmVudFJlZnJlc2hUb2tlbiAmJiBjdXJyZW50UmVmcmVzaFRva2VuICE9PSB1c2VkUmVmcmVzaFRva2VuKSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgc2tpcHBpbmcgYXV0aC1kZWF0aCBmb3IgJHt0b2tlbi5uYW1lfShpZD0ke3Rva2VuLmlkfSk6IHJlZnJlc2ggdG9rZW4gcm90YXRlZCBzaW5jZSB0aGlzIGF0dGVtcHRgLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBkZWFjdGl2YXRlZCwga2VwdEFzTGFzdEFjdGl2ZSB9ID0gYXdhaXQgVG9rZW5Nb2RlbC5kZWFjdGl2YXRlSWZBY3RpdmUodG9rZW4uaWQpO1xuICBpZiAoIWRlYWN0aXZhdGVkKSB7XG4gICAgaWYgKGtlcHRBc0xhc3RBY3RpdmUpIG5vdGlmeUxhc3RBY3RpdmVUb2tlbkR5aW5nKHRva2VuLCByZWFzb25Db2RlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsb2dnZXIud2FybihgdG9rZW4gZGVhY3RpdmF0ZWQgKGF1dGggZGVhZCk6ICR7dG9rZW4ubmFtZX0oaWQ9JHt0b2tlbi5pZH0pIHJlYXNvbj0ke3JlYXNvbkNvZGV9YCk7XG4gIC8vIOunjOujjCDsp4Htm4TqsIAg7J6s66Gc6re47J247ZWY6riwIOqwgOyepSDsoovsnYAg7YOA7J2067CN7J2064ukLiDshozsnKDsnpDrpbwg66mY7IWY7ZW0IOq3uCDsiJzqsIQg64u57IKs7J6Q7JeQ6rKMXG4gIC8vIOq9guuKlOuLpCDigJQg64uk7J207KCc7Iqk7Yq466W8IOq4sOuLpOumrOuptCDri6TsnYwg7KO86riw6rmM7KeAIO2GoO2BsOydtCDruaDsp4Qg7LGE66GcIOuCqOuKlOuLpC5cbiAgY29uc3QgbWVudGlvbiA9IG1lbnRpb25Gb3IodG9rZW4ubmFtZSwgZ2V0U2xhY2tVc2VyTWFwKCkpO1xuICB2b2lkIG5vdGlmeVNsYWNrKHtcbiAgICB0aXRsZTogXCLshLjshZgg66eM66OMXCIsXG4gICAgc3ViamVjdDogdG9rZW4ubmFtZSxcbiAgICBjb250ZXh0OiBbbWVudGlvbiwgdG9rZW4ucHJvdmlkZXIsIHJlYXNvbkNvZGUsIFwi7J6s66Gc6re47J247J20IO2VhOyalO2VqeuLiOuLpFwiXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIgwrcgXCIpLFxuICAgIGNvbG9yOiBTTEFDS19DT0xPUi5iYWQsXG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiDrp4jsp4Drp4kg7Zmc7ISxIO2GoO2BsOydtCDso73sl4jsnYQg65WM7J2YIOyVjOumvCDsv6jri6TsmrQuXG4gKlxuICog7J20IOqyveyasCDthqDtgbDsnYAg67mE7Zmc7ISx7ZmU65CY7KeAIOyViuqzoCDsgrTslYTrgqjsnLzrr4DroZwsIOuSpOuUsOultOuKlCDsmpTssq3rp4jri6Qg6rCZ7J2AIOyLpO2MqOulvCDrsJjrs7XtlbRcbiAqIOyVjOumvOydtCDtj63so7ztlZzri6QuIOu5hO2ZnOyEse2ZlCDshLHqs7Ug6rK966Gc6rCAIOyhsOqxtOu2gCBVUERBVEUg66GcIOykkeuzteydhCDrp4nripQg6rKD6rO8IOuLrOumrCDsl6zquLDsl5RcbiAqIOyDge2DnCDrs4DtmZTqsIAg7JeG7Ja0IERCIOuhnCDslrXsoJztlaAg7IiYIOyXhuuLpCDigJQgcHJvdmlkZXIg64uo7JyE66GcIOyLnOqwhCDssL3snYQg65GU64ukLlxuICovXG5jb25zdCBMQVNUX0FDVElWRV9BTEVSVF9DT09MRE9XTl9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgbGFzdEFjdGl2ZUFsZXJ0QXQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG5mdW5jdGlvbiBub3RpZnlMYXN0QWN0aXZlVG9rZW5EeWluZyh0b2tlbjogRGVhZFRva2VuUmVmLCByZWFzb25Db2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcHJldmlvdXMgPSBsYXN0QWN0aXZlQWxlcnRBdC5nZXQodG9rZW4ucHJvdmlkZXIpO1xuICBpZiAocHJldmlvdXMgIT09IHVuZGVmaW5lZCAmJiBub3cgLSBwcmV2aW91cyA8IExBU1RfQUNUSVZFX0FMRVJUX0NPT0xET1dOX01TKSByZXR1cm47XG4gIGxhc3RBY3RpdmVBbGVydEF0LnNldCh0b2tlbi5wcm92aWRlciwgbm93KTtcblxuICBjb25zdCBtZW50aW9uID0gbWVudGlvbkZvcih0b2tlbi5uYW1lLCBnZXRTbGFja1VzZXJNYXAoKSk7XG4gIHZvaWQgbm90aWZ5U2xhY2soe1xuICAgIHRpdGxlOiBcIuuniOyngOuniSDthqDtgbAg7IKs66edXCIsXG4gICAgc3ViamVjdDogdG9rZW4ubmFtZSxcbiAgICBjb250ZXh0OlxuICAgICAgW21lbnRpb24sIHRva2VuLnByb3ZpZGVyLCByZWFzb25Db2RlXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiDCtyBcIikgK1xuICAgICAgYCDCtyDtkoDsnbQg67mE7KeAIOyViuuPhOuhnSDsnKDsp4Ag7KSR7J6F64uI64ukLiBgICtcbiAgICAgIGDsoIQg7Yag7YGw7J20IOuPmeyLnOyXkCDsi6TtjKjtlojri6TrqbQgY2xpZW50X2lkIOy3qOyGjOuCmCBPQXV0aCDqs4Tslb0g67OA6rK97J2EIOydmOyLrO2VmOyEuOyalGAsXG4gICAgY29sb3I6IFNMQUNLX0NPTE9SLmJhZCxcbiAgICAvLyBwcm92aWRlciDsoITssrTqsIAg7KO97JeI64uk64qUIOyLoO2YuOuLpC4g7KGw7JqpIOyLnOqwhOyXkCDrrLvtnojrqbQg64uk7J2MIOq3vOustOydvOq5jOyngCDshJzruYTsiqTqsIAg66mI7LaY64ukLlxuICAgIHVyZ2VudDogdHJ1ZSxcbiAgfSk7XG59XG5cbi8qKiDroZzqt7jsnbjsnbQg7JmE66OM64+8IO2GoO2BsOydtCDsoIDsnqXrkJDsnYQg65WMLiDsi6Dqt5zCt+yerOuhnOq3uOyduOydhCDqsIDrpqzsp4Ag7JWK64qU64ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmeVRva2VuQWRkZWQobmFtZTogc3RyaW5nLCBwcm92aWRlcjogc3RyaW5nKTogdm9pZCB7XG4gIGxvZ2dlci5pbmZvKGB0b2tlbiBhZGRlZDogJHtuYW1lfSAoJHtwcm92aWRlcn0pYCk7XG4gIGNvbnN0IG1lbnRpb24gPSBtZW50aW9uRm9yKG5hbWUsIGdldFNsYWNrVXNlck1hcCgpKTtcbiAgdm9pZCBub3RpZnlTbGFjayh7XG4gICAgdGl0bGU6IFwi7Yag7YGwIOy2lOqwgFwiLFxuICAgIHN1YmplY3Q6IG5hbWUsXG4gICAgY29udGV4dDogW21lbnRpb24sIHByb3ZpZGVyLCBcIuyalOyyrSDsspjrpqzsl5Ag7IKs7Jqp65Cp64uI64ukXCJdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIMK3IFwiKSxcbiAgICBjb2xvcjogU0xBQ0tfQ09MT1IuZ29vZCxcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFjQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsYUFBYSxDQUFDOzs7Ozs7OztBQWVqRCxlQUFzQix3QkFDcEIsT0FDQSxrQkFDQSxZQUNrQjtDQUNsQixNQUFNLFVBQVUsTUFBTSxXQUFXLFFBQVEsS0FBSyxFQUFFLElBQUksTUFBTSxHQUFHLENBQUM7Q0FDOUQsSUFBSSxDQUFDLFNBQVMsT0FBTztDQUVyQixNQUFNLHNCQUFzQixnQkFBZ0IsUUFBUSxXQUFXO0NBQy9ELElBQUksdUJBQXVCLHdCQUF3QixrQkFBa0I7RUFDbkUsT0FBTyxLQUNMLDJCQUEyQixNQUFNLEtBQUssTUFBTSxNQUFNLEdBQUcsNENBQ3ZEO0VBQ0EsT0FBTztDQUNUO0NBRUEsTUFBTSxFQUFFLGFBQWEscUJBQXFCLE1BQU0sV0FBVyxtQkFBbUIsTUFBTSxFQUFFO0NBQ3RGLElBQUksQ0FBQyxhQUFhO0VBQ2hCLElBQUksa0JBQWtCLDJCQUEyQixPQUFPLFVBQVU7RUFDbEUsT0FBTztDQUNUO0NBRUEsT0FBTyxLQUFLLGtDQUFrQyxNQUFNLEtBQUssTUFBTSxNQUFNLEdBQUcsV0FBVyxZQUFZO0NBRy9GLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztDQUN4RCxBQUFLLFlBQVk7RUFDZixPQUFPO0VBQ1AsU0FBUyxNQUFNO0VBQ2YsU0FBUztHQUFDO0dBQVMsTUFBTTtHQUFVO0dBQVk7RUFBYSxDQUFDLENBQzFELE9BQU8sT0FBTyxDQUFDLENBQ2YsS0FBSyxLQUFLO0VBQ2IsT0FBTyxZQUFZO0NBQ3JCLENBQUM7Q0FDRCxPQUFPO0FBQ1Q7Ozs7Ozs7O0FBU0EsTUFBTSxnQ0FBZ0MsT0FBVTtBQUNoRCxNQUFNLG9DQUFvQixJQUFJLElBQW9CO0FBRWxELFNBQVMsMkJBQTJCLE9BQXFCLFlBQTBCO0NBQ2pGLE1BQU0sTUFBTSxLQUFLLElBQUk7Q0FDckIsTUFBTSxXQUFXLGtCQUFrQixJQUFJLE1BQU0sUUFBUTtDQUNyRCxJQUFJLGFBQWEsVUFBYSxNQUFNLFdBQVcsK0JBQStCO0NBQzlFLGtCQUFrQixJQUFJLE1BQU0sVUFBVSxHQUFHO0NBRXpDLE1BQU0sVUFBVSxXQUFXLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztDQUN4RCxBQUFLLFlBQVk7RUFDZixPQUFPO0VBQ1AsU0FBUyxNQUFNO0VBQ2YsU0FDRTtHQUFDO0dBQVMsTUFBTTtHQUFVO0VBQVUsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQ2hFO0VBRUYsT0FBTyxZQUFZO0VBRW5CLFFBQVE7Q0FDVixDQUFDO0FBQ0g7O0FBR0EsU0FBZ0IsaUJBQWlCLE1BQWMsVUFBd0I7Q0FDckUsT0FBTyxLQUFLLGdCQUFnQixLQUFLLElBQUksU0FBUyxFQUFFO0NBRWhELEFBQUssWUFBWTtFQUNmLE9BQU87RUFDUCxTQUFTO0VBQ1QsU0FBUztHQUpLLFdBQVcsTUFBTSxnQkFBZ0IsQ0FJckM7R0FBUztHQUFVO0VBQWMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO0VBQ3ZFLE9BQU8sWUFBWTtDQUNyQixDQUFDO0FBQ0gifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { getLogger } from "@logtape/logtape";
|
|
1
2
|
import { Buffer } from "node:buffer";
|
|
2
3
|
import { z } from "zod";
|
|
3
|
-
import { getLogger } from "@logtape/logtape";
|
|
4
4
|
//#region src/application/qgrid/tool-emulation.ts
|
|
5
5
|
const STRUCTURED_ENVELOPE_LIMITS = {
|
|
6
6
|
maxUtf8Bytes: 512 * 1024,
|
|
@@ -13,6 +13,12 @@ let TokenService;
|
|
|
13
13
|
_TokenService.getToken = (subset, id) => createSSRQuery("TokenModel", "findById", [subset, id], ["Token", "getToken"]);
|
|
14
14
|
_TokenService.getTokens = (subset, rawParams) => createSSRQuery("TokenModel", "findMany", [subset, rawParams], ["Token", "getTokens"]);
|
|
15
15
|
})(TokenService || (TokenService = {}));
|
|
16
|
+
let SettingService;
|
|
17
|
+
(function(_SettingService) {
|
|
18
|
+
_SettingService.getSetting = (subset, id) => createSSRQuery("SettingModel", "findById", [subset, id], ["Setting", "getSetting"]);
|
|
19
|
+
_SettingService.getSettings = (subset, rawParams) => createSSRQuery("SettingModel", "findMany", [subset, rawParams], ["Setting", "getSettings"]);
|
|
20
|
+
_SettingService.getSettingList = () => createSSRQuery("SettingModel", "listSettings", [], ["Setting", "getSettingList"]);
|
|
21
|
+
})(SettingService || (SettingService = {}));
|
|
16
22
|
let RequestLogStepService;
|
|
17
23
|
(function(_RequestLogStepService) {
|
|
18
24
|
_RequestLogStepService.getRequestLogStep = (subset, id) => createSSRQuery("RequestLogStepModel", "findById", [subset, id], ["RequestLogStep", "getRequestLogStep"]);
|
|
@@ -38,6 +44,6 @@ let MonitService;
|
|
|
38
44
|
_MonitService.monitInfo = () => createSSRQuery("MonitFrame", "monitInfo", [], ["Monit", "monitInfo"]);
|
|
39
45
|
})(MonitService || (MonitService = {}));
|
|
40
46
|
//#endregion
|
|
41
|
-
export { MonitService, QgridService, RequestLogService, RequestLogStepService, TokenService };
|
|
47
|
+
export { MonitService, QgridService, RequestLogService, RequestLogStepService, SettingService, TokenService };
|
|
42
48
|
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5nZW5lcmF0ZWQuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3F1ZXJpZXMuZ2VuZXJhdGVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGdlbmVyYXRlZFxuICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXG4gKi9cblxuLyogb3hsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHR5cGUgeyBTU1JRdWVyeSB9IGZyb20gXCJzb25hbXUvc3NyXCI7XG5cbi8vIFNTUlF1ZXJ5IO2XrO2NvCDtlajsiJhcbmZ1bmN0aW9uIGNyZWF0ZVNTUlF1ZXJ5KFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBwYXJhbXM6IGFueVtdLFxuICBzZXJ2aWNlS2V5OiBbc3RyaW5nLCBzdHJpbmddLFxuKTogU1NSUXVlcnkge1xuICByZXR1cm4geyBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIHBhcmFtcywgc2VydmljZUtleSwgX19icmFuZDogXCJTU1JRdWVyeVwiIH0gYXMgU1NSUXVlcnk7XG59XG5cbmltcG9ydCB7IFJlcXVlc3RMb2dTdGVwTGlzdFBhcmFtcyB9IGZyb20gXCIuL3JlcXVlc3QtbG9nLXN0ZXAvcmVxdWVzdC1sb2ctc3RlcC50eXBlc1wiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ0xpc3RQYXJhbXMgfSBmcm9tIFwiLi9yZXF1ZXN0LWxvZy9yZXF1ZXN0LWxvZy50eXBlc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RQYXJhbXMgfSBmcm9tIFwiLi9zZXR0aW5nL3NldHRpbmcudHlwZXNcIjtcbmltcG9ydCB7XG4gIFRva2VuU3Vic2V0S2V5LFxuICBTZXR0aW5nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleSxcbiAgUmVxdWVzdExvZ1N1YnNldEtleSxcbn0gZnJvbSBcIi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgVG9rZW5MaXN0UGFyYW1zIH0gZnJvbSBcIi4vdG9rZW4vdG9rZW4udHlwZXNcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBUb2tlblNlcnZpY2Uge1xuICBleHBvcnQgY29uc3QgZ2V0VG9rZW4gPSA8VCBleHRlbmRzIFRva2VuU3Vic2V0S2V5PihzdWJzZXQ6IFQsIGlkOiBudW1iZXIpOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KFwiVG9rZW5Nb2RlbFwiLCBcImZpbmRCeUlkXCIsIFtzdWJzZXQsIGlkXSwgW1wiVG9rZW5cIiwgXCJnZXRUb2tlblwiXSk7XG5cbiAgZXhwb3J0IGNvbnN0IGdldFRva2VucyA9IDxUIGV4dGVuZHMgVG9rZW5TdWJzZXRLZXksIExQIGV4dGVuZHMgVG9rZW5MaXN0UGFyYW1zPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJUb2tlbk1vZGVsXCIsIFwiZmluZE1hbnlcIiwgW3N1YnNldCwgcmF3UGFyYW1zXSwgW1wiVG9rZW5cIiwgXCJnZXRUb2tlbnNcIl0pO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNldHRpbmdTZXJ2aWNlIHtcbiAgZXhwb3J0IGNvbnN0IGdldFNldHRpbmcgPSA8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXk+KHN1YnNldDogVCwgaWQ6IG51bWJlcik6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJTZXR0aW5nTW9kZWxcIiwgXCJmaW5kQnlJZFwiLCBbc3Vic2V0LCBpZF0sIFtcIlNldHRpbmdcIiwgXCJnZXRTZXR0aW5nXCJdKTtcblxuICBleHBvcnQgY29uc3QgZ2V0U2V0dGluZ3MgPSA8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXksIExQIGV4dGVuZHMgU2V0dGluZ0xpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogU1NSUXVlcnkgPT5cbiAgICBjcmVhdGVTU1JRdWVyeShcIlNldHRpbmdNb2RlbFwiLCBcImZpbmRNYW55XCIsIFtzdWJzZXQsIHJhd1BhcmFtc10sIFtcIlNldHRpbmdcIiwgXCJnZXRTZXR0aW5nc1wiXSk7XG5cbiAgZXhwb3J0IGNvbnN0IGdldFNldHRpbmdMaXN0ID0gKCk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJTZXR0aW5nTW9kZWxcIiwgXCJsaXN0U2V0dGluZ3NcIiwgW10sIFtcIlNldHRpbmdcIiwgXCJnZXRTZXR0aW5nTGlzdFwiXSk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUmVxdWVzdExvZ1N0ZXBTZXJ2aWNlIHtcbiAgZXhwb3J0IGNvbnN0IGdldFJlcXVlc3RMb2dTdGVwID0gPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiBudW1iZXIsXG4gICk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXG4gICAgICBcIlJlcXVlc3RMb2dTdGVwTW9kZWxcIixcbiAgICAgIFwiZmluZEJ5SWRcIixcbiAgICAgIFtzdWJzZXQsIGlkXSxcbiAgICAgIFtcIlJlcXVlc3RMb2dTdGVwXCIsIFwiZ2V0UmVxdWVzdExvZ1N0ZXBcIl0sXG4gICAgKTtcblxuICBleHBvcnQgY29uc3QgZ2V0UmVxdWVzdExvZ1N0ZXBzID0gPFxuICAgIFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleSxcbiAgICBMUCBleHRlbmRzIFJlcXVlc3RMb2dTdGVwTGlzdFBhcmFtcyxcbiAgPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXG4gICAgICBcIlJlcXVlc3RMb2dTdGVwTW9kZWxcIixcbiAgICAgIFwiZmluZE1hbnlcIixcbiAgICAgIFtzdWJzZXQsIHJhd1BhcmFtc10sXG4gICAgICBbXCJSZXF1ZXN0TG9nU3RlcFwiLCBcImdldFJlcXVlc3RMb2dTdGVwc1wiXSxcbiAgICApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFJlcXVlc3RMb2dTZXJ2aWNlIHtcbiAgZXhwb3J0IGNvbnN0IGdldFJlcXVlc3RMb2cgPSA8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KHN1YnNldDogVCwgaWQ6IG51bWJlcik6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJSZXF1ZXN0TG9nTW9kZWxcIiwgXCJmaW5kQnlJZFwiLCBbc3Vic2V0LCBpZF0sIFtcIlJlcXVlc3RMb2dcIiwgXCJnZXRSZXF1ZXN0TG9nXCJdKTtcblxuICBleHBvcnQgY29uc3QgZ2V0UmVxdWVzdExvZ3MgPSA8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXksIExQIGV4dGVuZHMgUmVxdWVzdExvZ0xpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogU1NSUXVlcnkgPT5cbiAgICBjcmVhdGVTU1JRdWVyeShcbiAgICAgIFwiUmVxdWVzdExvZ01vZGVsXCIsXG4gICAgICBcImZpbmRNYW55XCIsXG4gICAgICBbc3Vic2V0LCByYXdQYXJhbXNdLFxuICAgICAgW1wiUmVxdWVzdExvZ1wiLCBcImdldFJlcXVlc3RMb2dzXCJdLFxuICAgICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUWdyaWRTZXJ2aWNlIHtcbiAgZXhwb3J0IGNvbnN0IHN0YXRzID0gKCk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJRZ3JpZEZyYW1lXCIsIFwic3RhdHNcIiwgW10sIFtcIlFncmlkXCIsIFwic3RhdHNcIl0pO1xuXG4gIGV4cG9ydCBjb25zdCB0b3RhbENvc3QgPSAocGFyYW1zPzogUmVxdWVzdExvZ0xpc3RQYXJhbXMpOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KFwiUWdyaWRGcmFtZVwiLCBcInRvdGFsQ29zdFwiLCBbcGFyYW1zXSwgW1wiUWdyaWRcIiwgXCJ0b3RhbENvc3RcIl0pO1xuXG4gIGV4cG9ydCBjb25zdCBwcm9qZWN0TmFtZXMgPSAoKTogU1NSUXVlcnkgPT5cbiAgICBjcmVhdGVTU1JRdWVyeShcIlFncmlkRnJhbWVcIiwgXCJwcm9qZWN0TmFtZXNcIiwgW10sIFtcIlFncmlkXCIsIFwicHJvamVjdE5hbWVzXCJdKTtcblxuICBleHBvcnQgY29uc3QgbW9kZWxOYW1lcyA9ICgpOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KFwiUWdyaWRGcmFtZVwiLCBcIm1vZGVsTmFtZXNcIiwgW10sIFtcIlFncmlkXCIsIFwibW9kZWxOYW1lc1wiXSk7XG5cbiAgZXhwb3J0IGNvbnN0IHVzYWdlID0gKHRva2VuSWQ/OiBudW1iZXIpOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KFwiUWdyaWRGcmFtZVwiLCBcInVzYWdlXCIsIFt0b2tlbklkXSwgW1wiUWdyaWRcIiwgXCJ1c2FnZVwiXSk7XG5cbiAgZXhwb3J0IGNvbnN0IGhlYWx0aCA9ICgpOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KFwiUWdyaWRGcmFtZVwiLCBcImhlYWx0aFwiLCBbXSwgW1wiUWdyaWRcIiwgXCJoZWFsdGhcIl0pO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1vbml0U2VydmljZSB7XG4gIGV4cG9ydCBjb25zdCBtb25pdExvZ3MgPSAoY3Vyc29yPzogbnVtYmVyKTogU1NSUXVlcnkgPT5cbiAgICBjcmVhdGVTU1JRdWVyeShcIk1vbml0RnJhbWVcIiwgXCJtb25pdExvZ3NcIiwgW2N1cnNvcl0sIFtcIk1vbml0XCIsIFwibW9uaXRMb2dzXCJdKTtcblxuICBleHBvcnQgY29uc3QgbW9uaXRJbmZvID0gKCk6IFNTUlF1ZXJ5ID0+XG4gICAgY3JlYXRlU1NSUXVlcnkoXCJNb25pdEZyYW1lXCIsIFwibW9uaXRJbmZvXCIsIFtdLCBbXCJNb25pdFwiLCBcIm1vbml0SW5mb1wiXSk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFVQSxTQUFTLGVBQ1AsV0FDQSxZQUNBLFFBQ0EsWUFDVTtDQUNWLE9BQU87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
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { SD } from "../../i18n/sd.generated.js";
|
|
2
|
-
import {
|
|
2
|
+
import { requestLogLoaderQueries, requestLogSubsetQueries } from "../sonamu.generated.sso.js";
|
|
3
3
|
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
4
4
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
5
|
-
import {
|
|
5
|
+
import { calculateCostUsd } from "../../utils/providers/common/model-cost.js";
|
|
6
6
|
import { BadRequestException, BaseModelClass, NotFoundException, Puri, api, asArray, transactional } from "sonamu";
|
|
7
7
|
//#region src/application/request-log/request-log.model.ts
|
|
8
8
|
const MICRO_USD = 1e6;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SD } from "../../i18n/sd.generated.js";
|
|
2
|
+
import { requestLogStepLoaderQueries, requestLogStepSubsetQueries } from "../sonamu.generated.sso.js";
|
|
2
3
|
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
3
4
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
4
|
-
import { requestLogStepLoaderQueries, requestLogStepSubsetQueries } from "../sonamu.generated.sso.js";
|
|
5
5
|
import { BadRequestException, BaseModelClass, NotFoundException, api, asArray, exhaustive } from "sonamu";
|
|
6
6
|
//#region src/application/request-log-step/request-log-step.model.ts
|
|
7
7
|
var RequestLogStepModelClass = class extends BaseModelClass {
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { SETTING_DEFS, findSettingDef, maskSecret, validateSettingValue } from "./setting.schema.js";
|
|
2
|
+
import { SD } from "../../i18n/sd.generated.js";
|
|
3
|
+
import { settingLoaderQueries, settingSubsetQueries } from "../sonamu.generated.sso.js";
|
|
4
|
+
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
|
|
5
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
6
|
+
import { getSetting, isStored, resetSetting, saveSetting } from "./setting.store.js";
|
|
7
|
+
import { BadRequestException, BaseModelClass, NotFoundException, api, asArray, exhaustive } from "sonamu";
|
|
8
|
+
//#region src/application/setting/setting.model.ts
|
|
9
|
+
var SettingModelClass = class extends BaseModelClass {
|
|
10
|
+
constructor() {
|
|
11
|
+
super("Setting", settingSubsetQueries, settingLoaderQueries);
|
|
12
|
+
}
|
|
13
|
+
async findById(subset, id) {
|
|
14
|
+
const { rows } = await this.findMany(subset, {
|
|
15
|
+
id,
|
|
16
|
+
num: 1,
|
|
17
|
+
page: 1
|
|
18
|
+
});
|
|
19
|
+
if (!rows[0]) throw new NotFoundException(SD("error.entityNotFound")("Setting", id));
|
|
20
|
+
return rows[0];
|
|
21
|
+
}
|
|
22
|
+
async findOne(subset, listParams) {
|
|
23
|
+
const { rows } = await this.findMany(subset, {
|
|
24
|
+
...listParams,
|
|
25
|
+
num: 1,
|
|
26
|
+
page: 1
|
|
27
|
+
});
|
|
28
|
+
return rows[0] ?? null;
|
|
29
|
+
}
|
|
30
|
+
async findMany(subset, rawParams) {
|
|
31
|
+
const params = {
|
|
32
|
+
num: 24,
|
|
33
|
+
page: 1,
|
|
34
|
+
search: "key",
|
|
35
|
+
orderBy: "key-asc",
|
|
36
|
+
...rawParams
|
|
37
|
+
};
|
|
38
|
+
const { qb, onSubset: _ } = this.getSubsetQueries(subset);
|
|
39
|
+
if (params.id) qb.whereIn("settings.id", asArray(params.id));
|
|
40
|
+
if (params.key) qb.where("settings.key", params.key);
|
|
41
|
+
if (params.search && params.keyword && params.keyword.length > 0) if (params.search === "key") qb.where("settings.key", "like", `%${params.keyword}%`);
|
|
42
|
+
else throw new BadRequestException(SD("error.unknownSearchField")(params.search));
|
|
43
|
+
if (params.orderBy) if (params.orderBy === "key-asc") qb.orderBy("settings.key", "asc");
|
|
44
|
+
else exhaustive(params.orderBy);
|
|
45
|
+
const enhancers = this.createEnhancers({ A: (row) => ({ ...row }) });
|
|
46
|
+
return this.executeSubsetQuery({
|
|
47
|
+
subset,
|
|
48
|
+
qb,
|
|
49
|
+
params,
|
|
50
|
+
enhancers,
|
|
51
|
+
debug: false
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async save(spa) {
|
|
55
|
+
const wdb = this.getPuri("w");
|
|
56
|
+
spa.forEach((sp) => {
|
|
57
|
+
wdb.ubRegister("settings", sp);
|
|
58
|
+
});
|
|
59
|
+
return wdb.transaction(async (trx) => {
|
|
60
|
+
return await trx.ubUpsert("settings");
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async del(ids) {
|
|
64
|
+
await this.getPuri("w").transaction(async (trx) => {
|
|
65
|
+
return trx.table("settings").whereIn("settings.id", ids).delete();
|
|
66
|
+
});
|
|
67
|
+
return ids.length;
|
|
68
|
+
}
|
|
69
|
+
/** 저장된 설정 전체를 key→value 로. 부팅 시 한 번 읽어 메모리에 올린다. */
|
|
70
|
+
async findAllAsMap() {
|
|
71
|
+
const { rows } = await this.findMany("A", {
|
|
72
|
+
num: 0,
|
|
73
|
+
page: 1
|
|
74
|
+
});
|
|
75
|
+
return new Map(rows.map((r) => [r.key, r.value]));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* key 로 upsert 한다. `save` 는 id 기준이라 key 중복을 걸러내지 못해, 기존 행을 먼저 찾아
|
|
79
|
+
* id 를 실어 보낸다.
|
|
80
|
+
*/
|
|
81
|
+
async setByKey(key, value) {
|
|
82
|
+
const existing = await this.findOne("A", {
|
|
83
|
+
key,
|
|
84
|
+
num: 1,
|
|
85
|
+
page: 1
|
|
86
|
+
});
|
|
87
|
+
await this.save([{
|
|
88
|
+
...existing ? { id: existing.id } : {},
|
|
89
|
+
key,
|
|
90
|
+
value,
|
|
91
|
+
updated_at: /* @__PURE__ */ new Date()
|
|
92
|
+
}]);
|
|
93
|
+
}
|
|
94
|
+
/** 저장값을 지워 env 기본값으로 되돌린다. */
|
|
95
|
+
async clearByKey(key) {
|
|
96
|
+
const existing = await this.findOne("A", {
|
|
97
|
+
key,
|
|
98
|
+
num: 1,
|
|
99
|
+
page: 1
|
|
100
|
+
});
|
|
101
|
+
if (existing) await this.del([existing.id]);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 편집 가능한 설정과 읽기 전용 런타임 정보. 편집 대상은 `SETTING_DEFS` 에 정의된 것뿐이다 —
|
|
105
|
+
* DB 접속 정보나 포트는 서버가 뜨기 전에 필요해 화면에서 바꿀 수 없다.
|
|
106
|
+
*/
|
|
107
|
+
async listSettings() {
|
|
108
|
+
return {
|
|
109
|
+
settings: SETTING_DEFS.map((def) => {
|
|
110
|
+
const stored = isStored(def.key);
|
|
111
|
+
const raw = getSetting(def.key, def.envKey);
|
|
112
|
+
const effective = raw ?? def.fallback;
|
|
113
|
+
const source = stored ? "db" : raw !== void 0 ? "env" : "default";
|
|
114
|
+
return {
|
|
115
|
+
key: def.key,
|
|
116
|
+
group: def.group,
|
|
117
|
+
label: def.label,
|
|
118
|
+
kind: def.kind,
|
|
119
|
+
applies: def.applies,
|
|
120
|
+
value: effective,
|
|
121
|
+
source,
|
|
122
|
+
min: def.min ?? null,
|
|
123
|
+
max: def.max ?? null,
|
|
124
|
+
help: def.help ?? null
|
|
125
|
+
};
|
|
126
|
+
}),
|
|
127
|
+
runtime: this.runtimeInfo()
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
runtimeInfo() {
|
|
131
|
+
const env = process.env;
|
|
132
|
+
const password = env.QGRID_DB_PASSWORD ?? env.SONAMU_DB_PASSWORD ?? "";
|
|
133
|
+
return [
|
|
134
|
+
{
|
|
135
|
+
label: "NODE_ENV",
|
|
136
|
+
value: env.NODE_ENV ?? "-"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
label: "HOST",
|
|
140
|
+
value: env.HOST ?? "localhost"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
label: "PORT",
|
|
144
|
+
value: env.PORT ?? "44900"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
label: "DB Host",
|
|
148
|
+
value: env.QGRID_DB_HOST ?? env.SONAMU_DB_HOST ?? "-"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
label: "DB Port",
|
|
152
|
+
value: env.QGRID_DB_PORT ?? env.SONAMU_DB_PORT ?? "-"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
label: "DB Name",
|
|
156
|
+
value: env.QGRID_DB_NAME ?? env.SONAMU_DB_NAME ?? "-"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
label: "DB User",
|
|
160
|
+
value: env.QGRID_DB_USER ?? env.SONAMU_DB_USER ?? "-"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
label: "DB Password",
|
|
164
|
+
value: password ? maskSecret(password) : "-"
|
|
165
|
+
}
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
async updateSetting(key, value) {
|
|
169
|
+
const def = findSettingDef(key);
|
|
170
|
+
if (!def) throw new BadRequestException(SD("setting.unknownKey")(key));
|
|
171
|
+
const validation = validateSettingValue(def, value);
|
|
172
|
+
if (!validation.ok) throw new BadRequestException(SD("setting.invalidValue")(validation.error));
|
|
173
|
+
await saveSetting(key, validation.value);
|
|
174
|
+
return { applies: def.applies };
|
|
175
|
+
}
|
|
176
|
+
/** 저장값을 지워 env 기본값으로 되돌린다. */
|
|
177
|
+
async resetSetting(key) {
|
|
178
|
+
const def = findSettingDef(key);
|
|
179
|
+
if (!def) throw new BadRequestException(SD("setting.unknownKey")(key));
|
|
180
|
+
await resetSetting(key);
|
|
181
|
+
return { applies: def.applies };
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
__decorate([
|
|
185
|
+
api({
|
|
186
|
+
httpMethod: "GET",
|
|
187
|
+
clients: ["axios", "tanstack-query"],
|
|
188
|
+
resourceName: "Setting"
|
|
189
|
+
}),
|
|
190
|
+
__decorateMetadata("design:type", Function),
|
|
191
|
+
__decorateMetadata("design:paramtypes", [Object, Number]),
|
|
192
|
+
__decorateMetadata("design:returntype", Promise)
|
|
193
|
+
], SettingModelClass.prototype, "findById", null);
|
|
194
|
+
__decorate([
|
|
195
|
+
api({
|
|
196
|
+
httpMethod: "GET",
|
|
197
|
+
clients: ["axios", "tanstack-query"],
|
|
198
|
+
resourceName: "Settings"
|
|
199
|
+
}),
|
|
200
|
+
__decorateMetadata("design:type", Function),
|
|
201
|
+
__decorateMetadata("design:paramtypes", [Object, Object]),
|
|
202
|
+
__decorateMetadata("design:returntype", Promise)
|
|
203
|
+
], SettingModelClass.prototype, "findMany", null);
|
|
204
|
+
__decorate([
|
|
205
|
+
api({
|
|
206
|
+
httpMethod: "GET",
|
|
207
|
+
clients: ["axios", "tanstack-query"],
|
|
208
|
+
resourceName: "SettingList"
|
|
209
|
+
}),
|
|
210
|
+
__decorateMetadata("design:type", Function),
|
|
211
|
+
__decorateMetadata("design:paramtypes", []),
|
|
212
|
+
__decorateMetadata("design:returntype", Promise)
|
|
213
|
+
], SettingModelClass.prototype, "listSettings", null);
|
|
214
|
+
__decorate([
|
|
215
|
+
api({
|
|
216
|
+
httpMethod: "POST",
|
|
217
|
+
clients: ["axios", "tanstack-mutation"]
|
|
218
|
+
}),
|
|
219
|
+
__decorateMetadata("design:type", Function),
|
|
220
|
+
__decorateMetadata("design:paramtypes", [String, String]),
|
|
221
|
+
__decorateMetadata("design:returntype", Promise)
|
|
222
|
+
], SettingModelClass.prototype, "updateSetting", null);
|
|
223
|
+
__decorate([
|
|
224
|
+
api({
|
|
225
|
+
httpMethod: "POST",
|
|
226
|
+
clients: ["axios", "tanstack-mutation"]
|
|
227
|
+
}),
|
|
228
|
+
__decorateMetadata("design:type", Function),
|
|
229
|
+
__decorateMetadata("design:paramtypes", [String]),
|
|
230
|
+
__decorateMetadata("design:returntype", Promise)
|
|
231
|
+
], SettingModelClass.prototype, "resetSetting", null);
|
|
232
|
+
const SettingModel = new SettingModelClass();
|
|
233
|
+
//#endregion
|
|
234
|
+
export { SettingModel };
|
|
235
|
+
|
|
236
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5tb2RlbC5qcyIsIm5hbWVzIjpbInNhdmVTdG9yZWRTZXR0aW5nIiwicmVzZXRTdG9yZWRTZXR0aW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3NldHRpbmcvc2V0dGluZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlTW9kZWxDbGFzcyxcbiAgdHlwZSBMaXN0UmVzdWx0LFxuICBhc0FycmF5LFxuICBOb3RGb3VuZEV4Y2VwdGlvbixcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgYXBpLFxuICBleGhhdXN0aXZlLFxufSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uLy4uL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyB0eXBlIFNldHRpbmdTdWJzZXRLZXksIHR5cGUgU2V0dGluZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgc2V0dGluZ1N1YnNldFF1ZXJpZXMsIHNldHRpbmdMb2FkZXJRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyBmaW5kU2V0dGluZ0RlZiwgbWFza1NlY3JldCwgU0VUVElOR19ERUZTLCB2YWxpZGF0ZVNldHRpbmdWYWx1ZSB9IGZyb20gXCIuL3NldHRpbmcuc2NoZW1hXCI7XG5pbXBvcnQge1xuICBnZXRTZXR0aW5nLFxuICBpc1N0b3JlZCxcbiAgcmVzZXRTZXR0aW5nIGFzIHJlc2V0U3RvcmVkU2V0dGluZyxcbiAgc2F2ZVNldHRpbmcgYXMgc2F2ZVN0b3JlZFNldHRpbmcsXG59IGZyb20gXCIuL3NldHRpbmcuc3RvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgUnVudGltZUluZm9JdGVtLFxuICB0eXBlIFNldHRpbmdBcHBsaWVzLFxuICB0eXBlIFNldHRpbmdJdGVtLFxuICB0eXBlIFNldHRpbmdMaXN0UGFyYW1zLFxuICB0eXBlIFNldHRpbmdTYXZlUGFyYW1zLFxuICB0eXBlIFNldHRpbmdzUmVzcG9uc2UsXG59IGZyb20gXCIuL3NldHRpbmcudHlwZXNcIjtcblxuLypcbiAgU2V0dGluZyBNb2RlbFxuKi9cbmNsYXNzIFNldHRpbmdNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8XG4gIFNldHRpbmdTdWJzZXRLZXksXG4gIFNldHRpbmdTdWJzZXRNYXBwaW5nLFxuICB0eXBlb2Ygc2V0dGluZ1N1YnNldFF1ZXJpZXMsXG4gIHR5cGVvZiBzZXR0aW5nTG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiU2V0dGluZ1wiLCBzZXR0aW5nU3Vic2V0UXVlcmllcywgc2V0dGluZ0xvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJTZXR0aW5nXCIgfSlcbiAgYXN5bmMgZmluZEJ5SWQ8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBpZDogbnVtYmVyLFxuICApOiBQcm9taXNlPFNldHRpbmdTdWJzZXRNYXBwaW5nW1RdPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgaWQsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuICAgIGlmICghcm93c1swXSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFNEKFwiZXJyb3IuZW50aXR5Tm90Rm91bmRcIikoXCJTZXR0aW5nXCIsIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NbMF07XG4gIH1cblxuICBhc3luYyBmaW5kT25lPFQgZXh0ZW5kcyBTZXR0aW5nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogU2V0dGluZ0xpc3RQYXJhbXMsXG4gICk6IFByb21pc2U8U2V0dGluZ1N1YnNldE1hcHBpbmdbVF0gfCBudWxsPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJTZXR0aW5nc1wiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyBTZXR0aW5nU3Vic2V0S2V5LCBMUCBleHRlbmRzIFNldHRpbmdMaXN0UGFyYW1zPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFByb21pc2U8TGlzdFJlc3VsdDxMUCwgU2V0dGluZ1N1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgLy8gcGFyYW1zIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCJrZXlcIiBhcyBjb25zdCxcbiAgICAgIG9yZGVyQnk6IFwia2V5LWFzY1wiIGFzIGNvbnN0LFxuICAgICAgLi4ucmF3UGFyYW1zLFxuICAgIH0gc2F0aXNmaWVzIFNldHRpbmdMaXN0UGFyYW1zO1xuXG4gICAgLy8gYnVpbGQgcXVlcmllc1xuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIC8vIGlkXG4gICAgaWYgKHBhcmFtcy5pZCkge1xuICAgICAgcWIud2hlcmVJbihcInNldHRpbmdzLmlkXCIsIGFzQXJyYXkocGFyYW1zLmlkKSk7XG4gICAgfVxuXG4gICAgLy8ga2V5IOKAlCB0b0ZpbHRlciBwcm9wIOydtOyngOunjCDsiqTsupDtj7TrlKnsnbQg66eM65Ok7Ja07KO87KeAIOyViuyVhCDsp4HsoJEg6rG064ukLlxuICAgIGlmIChwYXJhbXMua2V5KSB7XG4gICAgICBxYi53aGVyZShcInNldHRpbmdzLmtleVwiLCBwYXJhbXMua2V5KTtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2gta2V5d29yZFxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImtleVwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwic2V0dGluZ3Mua2V5XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImtleS1hc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwic2V0dGluZ3Mua2V5XCIsIFwiYXNjXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhoYXVzdGl2ZShwYXJhbXMub3JkZXJCeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5oYW5jZXJzID0gdGhpcy5jcmVhdGVFbmhhbmNlcnMoe1xuICAgICAgQTogKHJvdykgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICAvLyDshJzruIzshYvrs4TroZwgdmlydHVhbCDtlYTrk5wg6rOE7IKw66Gc7KeBIOy2lOqwgFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKHNwYTogU2V0dGluZ1NhdmVQYXJhbXNbXSk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gcmVnaXN0ZXJcbiAgICBzcGEuZm9yRWFjaCgoc3ApID0+IHtcbiAgICAgIHdkYi51YlJlZ2lzdGVyKFwic2V0dGluZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInNldHRpbmdzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGlkczogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwic2V0dGluZ3NcIikud2hlcmVJbihcInNldHRpbmdzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiDsoIDsnqXrkJwg7ISk7KCVIOyghOyytOulvCBrZXnihpJ2YWx1ZSDroZwuIOu2gO2MhSDsi5wg7ZWcIOuyiCDsnb3slrQg66mU66qo66as7JeQIOyYrOumsOuLpC4gKi9cbiAgYXN5bmMgZmluZEFsbEFzTWFwKCk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShcIkFcIiwgeyBudW06IDAsIHBhZ2U6IDEgfSk7XG4gICAgcmV0dXJuIG5ldyBNYXAocm93cy5tYXAoKHIpID0+IFtyLmtleSwgci52YWx1ZV0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBrZXkg66GcIHVwc2VydCDtlZzri6QuIGBzYXZlYCDripQgaWQg6riw7KSA7J206528IGtleSDspJHrs7XsnYQg6rG465+s64K07KeAIOuqu+2VtCwg6riw7KG0IO2WieydhCDrqLzsoIAg7LC+7JWEXG4gICAqIGlkIOulvCDsi6TslrQg67O064K464ukLlxuICAgKi9cbiAgYXN5bmMgc2V0QnlLZXkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZE9uZShcIkFcIiwgeyBrZXksIG51bTogMSwgcGFnZTogMSB9KTtcbiAgICBhd2FpdCB0aGlzLnNhdmUoW1xuICAgICAge1xuICAgICAgICAuLi4oZXhpc3RpbmcgPyB7IGlkOiBleGlzdGluZy5pZCB9IDoge30pLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXqsJLsnYQg7KeA7JuMIGVudiDquLDrs7jqsJLsnLzroZwg65CY64+M66aw64ukLiAqL1xuICBhc3luYyBjbGVhckJ5S2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmZpbmRPbmUoXCJBXCIsIHsga2V5LCBudW06IDEsIHBhZ2U6IDEgfSk7XG4gICAgaWYgKGV4aXN0aW5nKSBhd2FpdCB0aGlzLmRlbChbZXhpc3RpbmcuaWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtjrjsp5Eg6rCA64ql7ZWcIOyEpOygleqzvCDsnb3quLAg7KCE7JqpIOufsO2DgOyehCDsoJXrs7QuIO2OuOynkSDrjIDsg4HsnYAgYFNFVFRJTkdfREVGU2Ag7JeQIOygleydmOuQnCDqsoPrv5DsnbTri6Qg4oCUXG4gICAqIERCIOygkeyGjSDsoJXrs7Trgpgg7Y+s7Yq464qUIOyEnOuyhOqwgCDrnKjquLAg7KCE7JeQIO2VhOyalO2VtCDtmZTrqbTsl5DshJwg67CU6r+AIOyImCDsl4bri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlNldHRpbmdMaXN0XCIgfSlcbiAgYXN5bmMgbGlzdFNldHRpbmdzKCk6IFByb21pc2U8U2V0dGluZ3NSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5nSXRlbVtdID0gU0VUVElOR19ERUZTLm1hcCgoZGVmKSA9PiB7XG4gICAgICAvLyDsoIDsnqXqsJLrj4QgZW52IOuPhCDsl4bsnLzrqbQg7L2U65OcIOq4sOuzuOqwkuydtCDsi6TsoJzroZwg7KCB7JqpIOykkeydtOuLpC4g67mI7Lm47Jy866GcIOuRkOuptCDtmZTrqbTqs7xcbiAgICAgIC8vIOufsO2DgOyehOydtCDslrTquIvrgpgg67O07J2464ukLlxuICAgICAgY29uc3Qgc3RvcmVkID0gaXNTdG9yZWQoZGVmLmtleSk7XG4gICAgICBjb25zdCByYXcgPSBnZXRTZXR0aW5nKGRlZi5rZXksIGRlZi5lbnZLZXkpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlID0gcmF3ID8/IGRlZi5mYWxsYmFjaztcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHN0b3JlZCA/IFwiZGJcIiA6IHJhdyAhPT0gdW5kZWZpbmVkID8gXCJlbnZcIiA6IFwiZGVmYXVsdFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGRlZi5rZXksXG4gICAgICAgIGdyb3VwOiBkZWYuZ3JvdXAsXG4gICAgICAgIGxhYmVsOiBkZWYubGFiZWwsXG4gICAgICAgIGtpbmQ6IGRlZi5raW5kLFxuICAgICAgICBhcHBsaWVzOiBkZWYuYXBwbGllcyxcbiAgICAgICAgLy8g64iIIO2GoOq4gOydhCDsnITtlbQgc2VjcmV0IOuPhCDsm5Drs7jsnYQg64K066Ck67O064K464ukLiDsnbQg7JeU65Oc7Y+s7J247Yq464qUIOuwsO2PrCDqsr3qs4Tsl5DshJwg7J247Kad7ZW07JW8XG4gICAgICAgIC8vIO2VmOupsCwgZGV2MCDripQgQ2FkZHkg7J247Kad7J2EIO2GteqzvO2VnCDsmrTsmIHsnpDrp4wg7KCR6re87ZWgIOyImCDsnojri6QuXG4gICAgICAgIHZhbHVlOiBlZmZlY3RpdmUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbWluOiBkZWYubWluID8/IG51bGwsXG4gICAgICAgIG1heDogZGVmLm1heCA/PyBudWxsLFxuICAgICAgICBoZWxwOiBkZWYuaGVscCA/PyBudWxsLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHNldHRpbmdzLCBydW50aW1lOiB0aGlzLnJ1bnRpbWVJbmZvKCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcnVudGltZUluZm8oKTogUnVudGltZUluZm9JdGVtW10ge1xuICAgIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZW52LlFHUklEX0RCX1BBU1NXT1JEID8/IGVudi5TT05BTVVfREJfUEFTU1dPUkQgPz8gXCJcIjtcbiAgICByZXR1cm4gW1xuICAgICAgeyBsYWJlbDogXCJOT0RFX0VOVlwiLCB2YWx1ZTogZW52Lk5PREVfRU5WID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkhPU1RcIiwgdmFsdWU6IGVudi5IT1NUID8/IFwibG9jYWxob3N0XCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiUE9SVFwiLCB2YWx1ZTogZW52LlBPUlQgPz8gXCI0NDkwMFwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIEhvc3RcIiwgdmFsdWU6IGVudi5RR1JJRF9EQl9IT1NUID8/IGVudi5TT05BTVVfREJfSE9TVCA/PyBcIi1cIiB9LFxuICAgICAgeyBsYWJlbDogXCJEQiBQb3J0XCIsIHZhbHVlOiBlbnYuUUdSSURfREJfUE9SVCA/PyBlbnYuU09OQU1VX0RCX1BPUlQgPz8gXCItXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiREIgTmFtZVwiLCB2YWx1ZTogZW52LlFHUklEX0RCX05BTUUgPz8gZW52LlNPTkFNVV9EQl9OQU1FID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIFVzZXJcIiwgdmFsdWU6IGVudi5RR1JJRF9EQl9VU0VSID8/IGVudi5TT05BTVVfREJfVVNFUiA/PyBcIi1cIiB9LFxuICAgICAgeyBsYWJlbDogXCJEQiBQYXNzd29yZFwiLCB2YWx1ZTogcGFzc3dvcmQgPyBtYXNrU2VjcmV0KHBhc3N3b3JkKSA6IFwiLVwiIH0sXG4gICAgXTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVTZXR0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx7IGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzIH0+IHtcbiAgICBjb25zdCBkZWYgPSBmaW5kU2V0dGluZ0RlZihrZXkpO1xuICAgIGlmICghZGVmKSB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNldHRpbmcudW5rbm93bktleVwiKShrZXkpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZVNldHRpbmdWYWx1ZShkZWYsIHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24ub2spIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIikodmFsaWRhdGlvbi5lcnJvcikpO1xuICAgIH1cblxuICAgIGF3YWl0IHNhdmVTdG9yZWRTZXR0aW5nKGtleSwgdmFsaWRhdGlvbi52YWx1ZSk7XG4gICAgcmV0dXJuIHsgYXBwbGllczogZGVmLmFwcGxpZXMgfTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXqsJLsnYQg7KeA7JuMIGVudiDquLDrs7jqsJLsnLzroZwg65CY64+M66aw64ukLiAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcmVzZXRTZXR0aW5nKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzIH0+IHtcbiAgICBjb25zdCBkZWYgPSBmaW5kU2V0dGluZ0RlZihrZXkpO1xuICAgIGlmICghZGVmKSB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNldHRpbmcudW5rbm93bktleVwiKShrZXkpKTtcblxuICAgIGF3YWl0IHJlc2V0U3RvcmVkU2V0dGluZyhrZXkpO1xuICAgIHJldHVybiB7IGFwcGxpZXM6IGRlZi5hcHBsaWVzIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFNldHRpbmdNb2RlbCA9IG5ldyBTZXR0aW5nTW9kZWxDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWdDQSxJQUFNLG9CQUFOLGNBQWdDLGVBSzlCO0NBQ0EsY0FBYztFQUNaLE1BQU0sV0FBVyxzQkFBc0Isb0JBQW9CO0NBQzdEO0NBRUEsTUFDTSxTQUNKLFFBQ0EsSUFDa0M7RUFDbEMsTUFBTSxFQUFFLFNBQVMsTUFBTSxLQUFLLFNBQVMsUUFBUTtHQUMzQztHQUNBLEtBQUs7R0FDTCxNQUFNO0VBQ1IsQ0FBQztFQUNELElBQUksQ0FBQyxLQUFLLElBQ1IsTUFBTSxJQUFJLGtCQUFrQixHQUFHLHNCQUFzQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFHdkUsT0FBTyxLQUFLO0NBQ2Q7Q0FFQSxNQUFNLFFBQ0osUUFDQSxZQUN5QztF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
|