@hoox-sh/hoox-shared 1.4.0 → 1.6.0

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.
Files changed (110) hide show
  1. package/README.md +6 -0
  2. package/dist/agent-config-fields.d.ts +5 -0
  3. package/dist/agent-config-fields.d.ts.map +1 -1
  4. package/dist/agent-config-fields.js +21 -29
  5. package/dist/analytics.d.ts +3 -4
  6. package/dist/analytics.d.ts.map +1 -1
  7. package/dist/analytics.js +64 -19
  8. package/dist/api-client.js +12 -21
  9. package/dist/colors.js +5 -21
  10. package/dist/config.d.ts +10 -2
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +267 -51
  13. package/dist/cron-handler.js +0 -16
  14. package/dist/d1/index.js +8 -25
  15. package/dist/d1/repository.js +3 -19
  16. package/dist/d1/schemas.js +4 -20
  17. package/dist/dashboard-manifest.d.ts +2 -1
  18. package/dist/dashboard-manifest.d.ts.map +1 -1
  19. package/dist/dashboard-manifest.js +37 -33
  20. package/dist/entitlements.d.ts +46 -0
  21. package/dist/entitlements.d.ts.map +1 -0
  22. package/dist/entitlements.js +15 -0
  23. package/dist/errors.d.ts +1 -0
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +7 -23
  26. package/dist/exchange-client.d.ts +0 -19
  27. package/dist/exchange-client.d.ts.map +1 -1
  28. package/dist/exchange-client.js +1 -83
  29. package/dist/exchanges/base-exchange-client.d.ts.map +1 -1
  30. package/dist/exchanges/base-exchange-client.js +4 -19
  31. package/dist/exchanges/index.js +4 -19
  32. package/dist/format-time.js +2 -18
  33. package/dist/formatters.js +12 -28
  34. package/dist/health.js +3 -19
  35. package/dist/index.d.ts +7 -4
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +3568 -3766
  38. package/dist/kill-switch.js +12 -20
  39. package/dist/kvKeys.d.ts +8 -0
  40. package/dist/kvKeys.d.ts.map +1 -1
  41. package/dist/kvKeys.js +42 -46
  42. package/dist/kvUtils.js +8 -24
  43. package/dist/legal.js +5 -21
  44. package/dist/middleware/auth.d.ts +9 -0
  45. package/dist/middleware/auth.d.ts.map +1 -1
  46. package/dist/middleware/auth.js +9 -25
  47. package/dist/middleware/cors.js +4 -20
  48. package/dist/middleware/index.js +144 -165
  49. package/dist/middleware/logger.d.ts +2 -0
  50. package/dist/middleware/logger.d.ts.map +1 -1
  51. package/dist/middleware/logger.js +9 -25
  52. package/dist/middleware/rate-limit.d.ts +7 -0
  53. package/dist/middleware/rate-limit.d.ts.map +1 -1
  54. package/dist/middleware/rate-limit.js +5 -20
  55. package/dist/middleware/security-headers.js +2 -18
  56. package/dist/middleware/validate.d.ts +2 -0
  57. package/dist/middleware/validate.d.ts.map +1 -1
  58. package/dist/middleware/validate.js +5 -21
  59. package/dist/middleware/wait-until.js +2 -18
  60. package/dist/operator-transport.js +13 -17
  61. package/dist/path-utils.d.ts.map +1 -1
  62. package/dist/path-utils.js +28 -34
  63. package/dist/queue-handler.d.ts.map +1 -1
  64. package/dist/queue-handler.js +19 -24
  65. package/dist/router.d.ts +5 -0
  66. package/dist/router.d.ts.map +1 -1
  67. package/dist/router.js +0 -16
  68. package/dist/schemas/index.js +75 -50
  69. package/dist/schemas/registry.d.ts.map +1 -1
  70. package/dist/schemas/registry.js +33 -21
  71. package/dist/schemas/validators.d.ts.map +1 -1
  72. package/dist/schemas/validators.js +41 -43
  73. package/dist/service-bindings.d.ts +4 -0
  74. package/dist/service-bindings.d.ts.map +1 -1
  75. package/dist/service-bindings.js +13 -29
  76. package/dist/session.d.ts +10 -3
  77. package/dist/session.d.ts.map +1 -1
  78. package/dist/session.js +111 -51
  79. package/dist/sse.d.ts.map +1 -1
  80. package/dist/sse.js +34 -24
  81. package/dist/stores/config-store.d.ts +2 -50
  82. package/dist/stores/config-store.d.ts.map +1 -1
  83. package/dist/stores/config-store.js +153 -156
  84. package/dist/stores/service-store.d.ts +2 -192
  85. package/dist/stores/service-store.d.ts.map +1 -1
  86. package/dist/stores/service-store.js +40 -35
  87. package/dist/stores/ui-store.d.ts +2 -48
  88. package/dist/stores/ui-store.d.ts.map +1 -1
  89. package/dist/stores/ui-store.js +0 -16
  90. package/dist/tenant.d.ts +62 -0
  91. package/dist/tenant.d.ts.map +1 -0
  92. package/dist/tenant.js +56 -0
  93. package/dist/test-utils.js +11 -27
  94. package/dist/types.d.ts +10 -3
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +29 -24
  97. package/dist/wizard/engine.d.ts.map +1 -1
  98. package/dist/wizard/engine.js +33 -27
  99. package/dist/wizard/index.d.ts +1 -0
  100. package/dist/wizard/index.d.ts.map +1 -1
  101. package/dist/wizard/index.js +48 -39
  102. package/dist/wizard/persistence.d.ts +4 -0
  103. package/dist/wizard/persistence.d.ts.map +1 -1
  104. package/dist/wizard/persistence.js +7 -19
  105. package/dist/wizard/presets.d.ts.map +1 -1
  106. package/dist/wizard/presets.js +13 -25
  107. package/dist/wizard/types.d.ts +6 -0
  108. package/dist/wizard/types.d.ts.map +1 -1
  109. package/dist/wizard/types.js +5 -0
  110. package/package.json +7 -2
@@ -1,28 +1,15 @@
1
1
  // @bun
2
- var __defProp = Object.defineProperty;
3
- var __returnValue = (v) => v;
4
- function __exportSetter(name, newValue) {
5
- this[name] = __returnValue.bind(null, newValue);
6
- }
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, {
10
- get: all[name],
11
- enumerable: true,
12
- configurable: true,
13
- set: __exportSetter.bind(all, name)
14
- });
15
- };
16
- var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
-
18
2
  // src/schemas/validators.ts
19
3
  import { parse } from "jsonc-parser";
4
+ function parseJsoncDocument(content) {
5
+ const errors = [];
6
+ const value = parse(content, errors, { allowTrailingComma: true });
7
+ return { value, errors };
8
+ }
20
9
  function validateWranglerJsonc(workerName, manifest, jsoncContent) {
21
10
  const errors = [];
22
- let parsed;
23
- try {
24
- parsed = parse(jsoncContent);
25
- } catch {
11
+ const { value: parsed, errors: parseErrors } = parseJsoncDocument(jsoncContent);
12
+ if (parseErrors.length > 0) {
26
13
  errors.push({
27
14
  worker: workerName,
28
15
  severity: "error",
@@ -53,7 +40,7 @@ function validateWranglerJsonc(workerName, manifest, jsoncContent) {
53
40
  }
54
41
  }
55
42
  for (const [name, def] of Object.entries(manifest.vars)) {
56
- if (def.type === "secret" && !name.endsWith("_BINDING") && !name.endsWith("_SECRET") && !name.startsWith("CLOUDFLARE_") && name !== "TELEGRAM_SECRET_TOKEN" && name !== "TELEGRAM_ALLOWED_CHAT_IDS" && name !== "AUTHORIZED_CHAT_IDS" && name !== "MAILGUN_API_KEY" && name !== "EMAIL_SCAN_SUBJECT" && name !== "DASHBOARD_USER" && name !== "DASHBOARD_PASS" && name !== "SESSION_SECRET" && name !== "AGENT_INTERNAL_KEY") {
43
+ if (def.type === "secret" && !name.endsWith("_BINDING") && !name.endsWith("_SECRET") && !name.startsWith("CLOUDFLARE_") && name !== "TELEGRAM_SECRET_TOKEN" && name !== "TELEGRAM_ALLOWED_CHAT_IDS" && name !== "AUTHORIZED_CHAT_IDS" && name !== "MAILGUN_API_KEY" && name !== "EMAIL_SCAN_SUBJECT" && name !== "DASHBOARD_USER" && name !== "DASHBOARD_PASS" && name !== "SESSION_SECRET" && name !== "AGENT_INTERNAL_KEY" && name !== "OPENAI_API_KEY" && name !== "ANTHROPIC_API_KEY" && name !== "GOOGLE_API_KEY") {
57
44
  errors.push({
58
45
  worker: workerName,
59
46
  severity: "warning",
@@ -99,10 +86,8 @@ function validateWranglerJsonc(workerName, manifest, jsoncContent) {
99
86
  }
100
87
  function validateRootSecrets(workerName, manifest, rootJsoncContent) {
101
88
  const errors = [];
102
- let parsed;
103
- try {
104
- parsed = parse(rootJsoncContent);
105
- } catch {
89
+ const { value: parsed, errors: parseErrors } = parseJsoncDocument(rootJsoncContent);
90
+ if (parseErrors.length > 0) {
106
91
  errors.push({
107
92
  worker: workerName,
108
93
  severity: "error",
@@ -160,6 +145,11 @@ function validateDevVars(workerName, manifest, devVarsContent) {
160
145
  }
161
146
  return errors;
162
147
  }
148
+ function queueProducerBinding(queue) {
149
+ if (queue === "trade-execution")
150
+ return "TRADE_QUEUE";
151
+ return queue.replace(/[^A-Za-z0-9]+/g, "_").toUpperCase();
152
+ }
163
153
  function generateWranglerJsonc(manifest) {
164
154
  const parts = [];
165
155
  parts.push(`{`);
@@ -226,21 +216,29 @@ function generateWranglerJsonc(manifest) {
226
216
  parts.push(` ],`);
227
217
  }
228
218
  if (infra.queues) {
229
- if (infra.queues.producer && infra.queues.producer.length > 0) {
230
- parts.push(` "queues": { "producers": [`);
231
- for (const [i, q] of infra.queues.producer.entries()) {
232
- const comma = i < infra.queues.producer.length - 1 ? "," : "";
233
- parts.push(` { "queue": "${q}", "binding": "" }${comma}`);
219
+ const producers = infra.queues.producer ?? [];
220
+ const consumers = infra.queues.consumer ?? [];
221
+ if (producers.length > 0 || consumers.length > 0) {
222
+ const queueParts = [];
223
+ if (producers.length > 0) {
224
+ queueParts.push(` "producers": [`);
225
+ for (const [i, q] of producers.entries()) {
226
+ const comma = i < producers.length - 1 ? "," : "";
227
+ queueParts.push(` { "queue": "${q}", "binding": "${queueProducerBinding(q)}" }${comma}`);
228
+ }
229
+ queueParts.push(consumers.length > 0 ? ` ],` : ` ]`);
234
230
  }
235
- parts.push(` ] },`);
236
- }
237
- if (infra.queues.consumer && infra.queues.consumer.length > 0) {
238
- parts.push(` "queues": { "consumers": [`);
239
- for (const [i, q] of infra.queues.consumer.entries()) {
240
- const comma = i < infra.queues.consumer.length - 1 ? "," : "";
241
- parts.push(` { "queue": "${q}" }${comma}`);
231
+ if (consumers.length > 0) {
232
+ queueParts.push(` "consumers": [`);
233
+ for (const [i, q] of consumers.entries()) {
234
+ const comma = i < consumers.length - 1 ? "," : "";
235
+ queueParts.push(` { "queue": "${q}" }${comma}`);
236
+ }
237
+ queueParts.push(` ]`);
242
238
  }
243
- parts.push(` ] },`);
239
+ parts.push(` "queues": {`);
240
+ parts.push(...queueParts);
241
+ parts.push(` },`);
244
242
  }
245
243
  }
246
244
  if (infra.durableObjects && infra.durableObjects.length > 0) {
@@ -283,10 +281,10 @@ function validateAll(workerName, manifest, files) {
283
281
  };
284
282
  }
285
283
  export {
286
- validateWranglerJsonc,
287
- validateRootSecrets,
288
- validateDevVars,
289
- validateAll,
284
+ generateDevVars,
290
285
  generateWranglerJsonc,
291
- generateDevVars
286
+ validateAll,
287
+ validateDevVars,
288
+ validateRootSecrets,
289
+ validateWranglerJsonc
292
290
  };
@@ -70,6 +70,10 @@ export declare function authenticatedServiceFetch<E extends AuthenticatedService
70
70
  /** Ordered env fields to try when internalKey is not set */
71
71
  internalKeyFields?: InternalAuthKeyName;
72
72
  }): Promise<Response>;
73
+ /**
74
+ * Unauthenticated service-binding fetch. Callers that need mesh auth must
75
+ * use {@link authenticatedServiceFetch}, which injects `X-Internal-Auth-Key`.
76
+ */
73
77
  export declare function serviceFetch(binding: ServiceBinding, path: string, body?: unknown, options?: {
74
78
  method?: string;
75
79
  headers?: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"service-bindings.d.ts","sourceRoot":"","sources":["../src/service-bindings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAmB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzE;AAED,uDAAuD;AACvD,eAAO,MAAM,qBAAqB;;;;;;;;;IAShC,sDAAsD;;;;CAI9C,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,0DAG1B,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,2DAG3B,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,sFAIhC,CAAC;AAEX,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,6DAG7B,CAAC;AAEX,oDAAoD;AACpD,eAAO,MAAM,8BAA8B,oEAGjC,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,8BAA8B,iEAGjC,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,iCAAiC,6EAIpC,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,uCAAuC,sFAI1C,CAAC;AAEX,gDAAgD;AAChD,eAAO,MAAM,wCAAwC,6FAI3C,CAAC;AAEX,0DAA0D;AAC1D,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,mBAAmB,GAC7B,MAAM,GAAG,SAAS,CAEpB;AAED,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,uBAAuB,EACzE,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACzC,GACA,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,QAAQ,CAAC,CAWnB"}
1
+ {"version":3,"file":"service-bindings.d.ts","sourceRoot":"","sources":["../src/service-bindings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAmB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzE;AAED,uDAAuD;AACvD,eAAO,MAAM,qBAAqB;;;;;;;;;IAShC,sDAAsD;;;;CAI9C,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,0DAG1B,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,2DAG3B,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,sFAIhC,CAAC;AAEX,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,6DAG7B,CAAC;AAEX,oDAAoD;AACpD,eAAO,MAAM,8BAA8B,oEAGjC,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,8BAA8B,iEAGjC,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,iCAAiC,6EAIpC,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,uCAAuC,sFAI1C,CAAC;AAEX,gDAAgD;AAChD,eAAO,MAAM,wCAAwC,6FAI3C,CAAC;AAEX,0DAA0D;AAC1D,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,mBAAmB,GAC7B,MAAM,GAAG,SAAS,CAEpB;AAED,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,uBAAuB,EACzE,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACzC,GACA,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,QAAQ,CAAC,CAWnB"}
@@ -1,20 +1,4 @@
1
1
  // @bun
2
- var __defProp = Object.defineProperty;
3
- var __returnValue = (v) => v;
4
- function __exportSetter(name, newValue) {
5
- this[name] = __returnValue.bind(null, newValue);
6
- }
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, {
10
- get: all[name],
11
- enumerable: true,
12
- configurable: true,
13
- set: __exportSetter.bind(all, name)
14
- });
15
- };
16
- var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
-
18
2
  // src/middleware/auth.ts
19
3
  function timingSafeEqual(a, b) {
20
4
  const encoder = new TextEncoder;
@@ -244,18 +228,18 @@ function serviceFetch(binding, path, body, options) {
244
228
  });
245
229
  }
246
230
  export {
247
- serviceFetch,
248
- resolveInternalAuthKey,
249
- authenticatedServiceFetch,
250
- WALLET_EXECUTE_AUTH_KEY_FIELDS,
251
- TRADE_READ_AUTH_KEY_FIELDS,
252
- TRADE_EXECUTE_AUTH_KEY_FIELDS,
253
- TELEGRAM_ALERT_AUTH_KEY_FIELDS,
254
- ServiceAuthError,
255
- InternalAuthKeyFields,
256
- DASHBOARD_TRADE_EXECUTE_AUTH_KEY_FIELDS,
257
- DASHBOARD_TELEGRAM_ALERT_AUTH_KEY_FIELDS,
258
- DASHBOARD_D1_READ_AUTH_KEY_FIELDS,
231
+ D1_READ_AUTH_KEY_FIELDS,
259
232
  D1_WRITE_AUTH_KEY_FIELDS,
260
- D1_READ_AUTH_KEY_FIELDS
233
+ DASHBOARD_D1_READ_AUTH_KEY_FIELDS,
234
+ DASHBOARD_TELEGRAM_ALERT_AUTH_KEY_FIELDS,
235
+ DASHBOARD_TRADE_EXECUTE_AUTH_KEY_FIELDS,
236
+ InternalAuthKeyFields,
237
+ ServiceAuthError,
238
+ TELEGRAM_ALERT_AUTH_KEY_FIELDS,
239
+ TRADE_EXECUTE_AUTH_KEY_FIELDS,
240
+ TRADE_READ_AUTH_KEY_FIELDS,
241
+ WALLET_EXECUTE_AUTH_KEY_FIELDS,
242
+ authenticatedServiceFetch,
243
+ resolveInternalAuthKey,
244
+ serviceFetch
261
245
  };
package/dist/session.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2026 HOOX · HOOX · jango-blockchained (hoox-sh)
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import type { ViewId } from "./types";
5
+ import { type ViewId } from "./types";
6
6
  export interface SessionState {
7
7
  /** Last active view ID (e.g. "dashboard", "workers") */
8
8
  activeView: ViewId;
@@ -18,6 +18,11 @@ export interface SessionState {
18
18
  /** ISO timestamp of when the session was saved */
19
19
  savedAt: string;
20
20
  }
21
+ /** Restore result: on-disk session plus whether a file was actually read. */
22
+ export type RestoredSession = SessionState & {
23
+ /** True when session.json existed and was parsed (even if fields fell back). */
24
+ fromDisk: boolean;
25
+ };
21
26
  /**
22
27
  * Persist the current UI state to $HOME/.hoox/.tui-state/session.json.
23
28
  * Call this on app destroy / clean shutdown.
@@ -33,7 +38,9 @@ export declare function saveSession(activeView: ViewId, sidebarExpanded: boolean
33
38
  * Restore the previous session state from $HOME/.hoox/.tui-state/session.json.
34
39
  * Returns defaults if the file doesn't exist or can't be parsed.
35
40
  *
36
- * @returns The saved session state, or defaults
41
+ * @returns The saved session state, or defaults. `fromDisk` is false when
42
+ * no file existed or JSON was unreadable — callers may then apply
43
+ * `defaultView` from TUI preferences.
37
44
  */
38
- export declare function restoreSession(): Promise<SessionState>;
45
+ export declare function restoreSession(): Promise<RestoredSession>;
39
46
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKtC,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAoDD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,OAAO,EACxB,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAkBf;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA8B5D"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAKhD,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,gFAAgF;IAChF,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAoDF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,OAAO,EACxB,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAkBf;AAID;;;;;;;GAOG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CA+B/D"}
package/dist/session.js CHANGED
@@ -1,20 +1,4 @@
1
1
  // @bun
2
- var __defProp = Object.defineProperty;
3
- var __returnValue = (v) => v;
4
- function __exportSetter(name, newValue) {
5
- this[name] = __returnValue.bind(null, newValue);
6
- }
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, {
10
- get: all[name],
11
- enumerable: true,
12
- configurable: true,
13
- set: __exportSetter.bind(all, name)
14
- });
15
- };
16
- var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
-
18
2
  // src/path-utils.ts
19
3
  import {
20
4
  existsSync,
@@ -24,10 +8,20 @@ import {
24
8
  chmodSync
25
9
  } from "fs";
26
10
  import { homedir } from "os";
27
- import { dirname, join, resolve } from "path";
11
+ import { dirname, join, resolve, sep } from "path";
28
12
  function createHooxPath(path) {
29
13
  return path;
30
14
  }
15
+ function isInsideDir(child, parent) {
16
+ const resolvedChild = resolve(child);
17
+ const resolvedParent = resolve(parent);
18
+ const cmpChild = process.platform === "win32" ? resolvedChild.toLowerCase() : resolvedChild;
19
+ const cmpParent = process.platform === "win32" ? resolvedParent.toLowerCase() : resolvedParent;
20
+ if (cmpChild === cmpParent)
21
+ return true;
22
+ const prefix = cmpParent.endsWith(sep) ? cmpParent : cmpParent + sep;
23
+ return cmpChild.startsWith(prefix);
24
+ }
31
25
  function getHooxHome() {
32
26
  try {
33
27
  const override = process.env.HOOX_HOME?.trim();
@@ -191,7 +185,7 @@ function resolveHooxPath(relativePath) {
191
185
  const fullPath = join(hooxHome, normalizedPath);
192
186
  const resolvedPath = resolve(fullPath);
193
187
  const resolvedHome = resolve(hooxHome);
194
- if (!resolvedPath.startsWith(resolvedHome)) {
188
+ if (!isInsideDir(resolvedPath, resolvedHome)) {
195
189
  throw new Error(`Resolved path "${resolvedPath}" is outside Hoox home directory`);
196
190
  }
197
191
  return createHooxPath(resolvedPath);
@@ -201,7 +195,7 @@ function isWithinHooxHome(path) {
201
195
  const hooxHome = getHooxHome();
202
196
  const resolvedPath = resolve(path);
203
197
  const resolvedHome = resolve(hooxHome);
204
- return resolvedPath.startsWith(resolvedHome);
198
+ return isInsideDir(resolvedPath, resolvedHome);
205
199
  } catch {
206
200
  return false;
207
201
  }
@@ -236,17 +230,99 @@ function getHooxStatePath() {
236
230
  return resolveHooxPath("data/state.json");
237
231
  }
238
232
 
239
- // src/session.ts
233
+ // src/types.ts
240
234
  import { z } from "zod";
241
- var SessionStateFileSchema = z.object({
242
- activeView: z.string().optional(),
243
- sidebarExpanded: z.boolean().optional(),
244
- windowSize: z.object({
245
- cols: z.number().int().positive(),
246
- rows: z.number().int().positive()
235
+ var TradeActionSchema = z.enum([
236
+ "LONG",
237
+ "SHORT",
238
+ "CLOSE_LONG",
239
+ "CLOSE_SHORT"
240
+ ]);
241
+ var MAX_WEBHOOK_LEVERAGE = 125;
242
+ var MAX_WEBHOOK_QUANTITY = 1e6;
243
+ var WebhookPayloadSchema = z.object({
244
+ exchange: z.string().min(1),
245
+ action: TradeActionSchema,
246
+ symbol: z.string().min(1).max(20),
247
+ quantity: z.number().positive().finite().max(MAX_WEBHOOK_QUANTITY),
248
+ price: z.number().positive().finite().optional(),
249
+ orderType: z.string().optional(),
250
+ leverage: z.number().int().positive().max(MAX_WEBHOOK_LEVERAGE).optional(),
251
+ test: z.boolean().optional(),
252
+ tenantId: z.string().min(1).max(64).optional()
253
+ }).strict();
254
+ var TradeQueueMessageSchema = z.object({
255
+ requestId: z.string().min(1).max(128),
256
+ exchange: z.string().min(1).max(64),
257
+ action: TradeActionSchema,
258
+ symbol: z.string().min(1).max(32),
259
+ quantity: z.number().positive().finite().max(MAX_WEBHOOK_QUANTITY),
260
+ price: z.number().positive().finite().optional(),
261
+ leverage: z.number().int().positive().max(MAX_WEBHOOK_LEVERAGE).optional(),
262
+ test: z.boolean().optional(),
263
+ idempotencyKey: z.string().min(1).max(512).optional(),
264
+ tenantId: z.string().min(1).max(64).optional(),
265
+ queuedAt: z.string().min(1).max(64)
266
+ }).strict();
267
+ var TradeSignalSchema = z.object({
268
+ id: z.number().int().positive().optional(),
269
+ source: z.string().min(1),
270
+ symbol: z.string().min(1),
271
+ action: TradeActionSchema,
272
+ price: z.number().positive().finite().optional(),
273
+ quantity: z.number().positive().finite(),
274
+ leverage: z.number().int().positive().optional(),
275
+ status: z.enum(["pending", "executed", "failed", "skipped"]).optional(),
276
+ createdAt: z.string().optional(),
277
+ executedAt: z.string().optional(),
278
+ error: z.string().optional()
279
+ }).strict();
280
+ var PositionSchema = z.object({
281
+ id: z.string(),
282
+ symbol: z.string().min(1),
283
+ side: TradeActionSchema,
284
+ quantity: z.number().positive(),
285
+ entry_price: z.number().positive(),
286
+ current_price: z.number().positive(),
287
+ unrealized_pnl: z.number(),
288
+ timestamp: z.number().int().positive()
289
+ }).strict();
290
+ var BalanceSchema = z.object({
291
+ asset: z.string().min(1),
292
+ free: z.number().min(0),
293
+ locked: z.number().min(0),
294
+ timestamp: z.number().int().positive()
295
+ }).strict();
296
+ var VIEW_IDS = [
297
+ "dashboard",
298
+ "workers",
299
+ "worker-detail",
300
+ "trade-monitor",
301
+ "logs-viewer",
302
+ "service-manager",
303
+ "config-editor",
304
+ "setup-wizard",
305
+ "settings",
306
+ "queue-depth",
307
+ "kv-viewer",
308
+ "secrets-viewer",
309
+ "db-query",
310
+ "ai-chat",
311
+ "edge-topology",
312
+ "worker-settings"
313
+ ];
314
+
315
+ // src/session.ts
316
+ import { z as z2 } from "zod";
317
+ var SessionStateFileSchema = z2.object({
318
+ activeView: z2.string().optional(),
319
+ sidebarExpanded: z2.boolean().optional(),
320
+ windowSize: z2.object({
321
+ cols: z2.number().int().positive(),
322
+ rows: z2.number().int().positive()
247
323
  }).optional(),
248
- lastData: z.number().nonnegative().optional(),
249
- savedAt: z.string().optional()
324
+ lastData: z2.number().nonnegative().optional(),
325
+ savedAt: z2.string().optional()
250
326
  }).strict();
251
327
  var TUI_STATE_DIR = ".tui-state";
252
328
  function getSessionFilePath() {
@@ -283,7 +359,7 @@ async function restoreSession() {
283
359
  const file = Bun.file(getSessionFilePath());
284
360
  const exists = await file.exists();
285
361
  if (!exists)
286
- return { ...DEFAULT_SESSION };
362
+ return { ...DEFAULT_SESSION, fromDisk: false };
287
363
  const raw = await file.text();
288
364
  const result = SessionStateFileSchema.safeParse(JSON.parse(raw));
289
365
  const parsed = result.success ? result.data : {};
@@ -292,34 +368,18 @@ async function restoreSession() {
292
368
  sidebarExpanded: typeof parsed.sidebarExpanded === "boolean" ? parsed.sidebarExpanded : DEFAULT_SESSION.sidebarExpanded,
293
369
  windowSize: parsed.windowSize ?? DEFAULT_SESSION.windowSize,
294
370
  lastData: typeof parsed.lastData === "number" ? parsed.lastData : DEFAULT_SESSION.lastData,
295
- savedAt: parsed.savedAt ?? DEFAULT_SESSION.savedAt
371
+ savedAt: parsed.savedAt ?? DEFAULT_SESSION.savedAt,
372
+ fromDisk: true
296
373
  };
297
374
  } catch {
298
- return { ...DEFAULT_SESSION };
375
+ return { ...DEFAULT_SESSION, fromDisk: false };
299
376
  }
300
377
  }
301
- var VALID_VIEW_IDS = new Set([
302
- "dashboard",
303
- "workers",
304
- "worker-detail",
305
- "trade-monitor",
306
- "logs-viewer",
307
- "service-manager",
308
- "config-editor",
309
- "setup-wizard",
310
- "settings",
311
- "queue-depth",
312
- "kv-viewer",
313
- "secrets-viewer",
314
- "db-query",
315
- "ai-chat",
316
- "edge-topology",
317
- "worker-settings"
318
- ]);
378
+ var VALID_VIEW_IDS = new Set(VIEW_IDS);
319
379
  function validateViewId(id) {
320
380
  return typeof id === "string" && VALID_VIEW_IDS.has(id);
321
381
  }
322
382
  export {
323
- saveSession,
324
- restoreSession
383
+ restoreSession,
384
+ saveSession
325
385
  };
package/dist/sse.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAS9B,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAG,CAC9B,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,KAClD,IAAI,CAAC;AAEV,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,eAAe,CAsFjB"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAS9B,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAG,CAC9B,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,KAClD,IAAI,CAAC;AAEV,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EACxB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,eAAe,CAwGjB"}
package/dist/sse.js CHANGED
@@ -1,19 +1,15 @@
1
1
  // @bun
2
- var __defProp = Object.defineProperty;
3
- var __returnValue = (v) => v;
4
- function __exportSetter(name, newValue) {
5
- this[name] = __returnValue.bind(null, newValue);
6
- }
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, {
10
- get: all[name],
11
- enumerable: true,
12
- configurable: true,
13
- set: __exportSetter.bind(all, name)
14
- });
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
8
+ }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
15
12
  };
16
- var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
13
 
18
14
  // src/operator-transport.ts
19
15
  function stripTrailingSlashes(url) {
@@ -83,12 +79,9 @@ var init_operator_transport = __esm(() => {
83
79
  });
84
80
 
85
81
  // src/sse.ts
86
- var exports_sse = {};
87
- __export(exports_sse, {
88
- subscribeSSE: () => subscribeSSE
89
- });
90
82
  function subscribeSSE(path, callback, onStatus, options) {
91
83
  let aborted = false;
84
+ const ac = new AbortController;
92
85
  const profile = options?.transport ?? (options?.transportEnv ? resolveOperatorTransportProfile(options.transportEnv) : resolveOperatorTransportProfile());
93
86
  const run = async () => {
94
87
  let attempt = 0;
@@ -99,7 +92,8 @@ function subscribeSSE(path, callback, onStatus, options) {
99
92
  headers: {
100
93
  Accept: "text/event-stream",
101
94
  ...buildOperatorAuthHeaders(profile)
102
- }
95
+ },
96
+ signal: ac.signal
103
97
  });
104
98
  if (!response.ok || !response.body) {
105
99
  throw new Error(`SSE connection failed: HTTP ${response.status}`);
@@ -111,17 +105,21 @@ function subscribeSSE(path, callback, onStatus, options) {
111
105
  let buffer = "";
112
106
  while (!aborted) {
113
107
  const { done, value } = await reader.read();
114
- if (done)
115
- break;
108
+ if (done) {
109
+ throw new Error("SSE stream ended");
110
+ }
116
111
  buffer += decoder.decode(value, { stream: true });
117
112
  const lines = buffer.split(`
118
113
  `);
119
114
  buffer = lines.pop() || "";
120
115
  for (const line of lines) {
121
116
  const trimmed = line.trim();
122
- if (trimmed.startsWith("data: ")) {
117
+ if (trimmed.startsWith("data:")) {
118
+ const jsonText = trimmed.slice(5).replace(/^\s/, "");
119
+ if (!jsonText)
120
+ continue;
123
121
  try {
124
- const parsed = JSON.parse(trimmed.slice(6));
122
+ const parsed = JSON.parse(jsonText);
125
123
  callback(parsed);
126
124
  } catch {}
127
125
  }
@@ -133,7 +131,18 @@ function subscribeSSE(path, callback, onStatus, options) {
133
131
  onStatus?.("reconnecting");
134
132
  const delay = Math.min(RECONNECT_BASE_MS * Math.pow(2, attempt), RECONNECT_MAX_MS);
135
133
  attempt++;
136
- await new Promise((resolve) => setTimeout(resolve, delay));
134
+ await new Promise((resolve) => {
135
+ const timer = setTimeout(resolve, delay);
136
+ const onAbort = () => {
137
+ clearTimeout(timer);
138
+ resolve();
139
+ };
140
+ if (ac.signal.aborted) {
141
+ onAbort();
142
+ return;
143
+ }
144
+ ac.signal.addEventListener("abort", onAbort, { once: true });
145
+ });
137
146
  }
138
147
  }
139
148
  if (!aborted) {
@@ -144,6 +153,7 @@ function subscribeSSE(path, callback, onStatus, options) {
144
153
  return {
145
154
  abort: () => {
146
155
  aborted = true;
156
+ ac.abort();
147
157
  }
148
158
  };
149
159
  }
@@ -38,56 +38,8 @@ export declare const useConfigStore: import("zustand").UseBoundStore<Omit<Omit<i
38
38
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<ConfigState & ConfigActions, unknown, unknown>>;
39
39
  };
40
40
  }, "setState"> & {
41
- setState(nextStateOrUpdater: (ConfigState & ConfigActions) | Partial<ConfigState & ConfigActions> | ((state: {
42
- theme: "dark" | "light";
43
- refreshIntervalMs: number;
44
- defaultView: ViewId;
45
- activeExchanges: string[];
46
- keyboardShortcuts: {
47
- [x: string]: string;
48
- };
49
- logFilters: {
50
- levels: import("..").LogLevel[];
51
- workers: string[];
52
- searchText: string;
53
- };
54
- notifications: {
55
- alerts: boolean;
56
- trades: boolean;
57
- debug: boolean;
58
- system: boolean;
59
- };
60
- soundEnabled: boolean;
61
- updateConfig: (partial: Partial<ConfigState>) => void;
62
- resetDefaults: () => void;
63
- setShortcut: (action: string, key: string) => void;
64
- toggleNotification: (channel: keyof NotificationPreferences) => void;
65
- }) => void), shouldReplace?: false): unknown;
66
- setState(nextStateOrUpdater: (ConfigState & ConfigActions) | ((state: {
67
- theme: "dark" | "light";
68
- refreshIntervalMs: number;
69
- defaultView: ViewId;
70
- activeExchanges: string[];
71
- keyboardShortcuts: {
72
- [x: string]: string;
73
- };
74
- logFilters: {
75
- levels: import("..").LogLevel[];
76
- workers: string[];
77
- searchText: string;
78
- };
79
- notifications: {
80
- alerts: boolean;
81
- trades: boolean;
82
- debug: boolean;
83
- system: boolean;
84
- };
85
- soundEnabled: boolean;
86
- updateConfig: (partial: Partial<ConfigState>) => void;
87
- resetDefaults: () => void;
88
- setShortcut: (action: string, key: string) => void;
89
- toggleNotification: (channel: keyof NotificationPreferences) => void;
90
- }) => void), shouldReplace: true): unknown;
41
+ setState(nextStateOrUpdater: (ConfigState & ConfigActions) | Partial<ConfigState & ConfigActions> | ((state: import("immer").WritableNonArrayDraft<ConfigState & ConfigActions>) => void), shouldReplace?: false): unknown;
42
+ setState(nextStateOrUpdater: (ConfigState & ConfigActions) | ((state: import("immer").WritableNonArrayDraft<ConfigState & ConfigActions>) => void), shouldReplace: true): unknown;
91
43
  }>;
92
44
  export {};
93
45
  //# sourceMappingURL=config-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAM3E,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA0ID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,uBAAuB,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,UAAU,aAAa;IACrB,+DAA+D;IAC/D,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtD,8CAA8C;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,yCAAyC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,8CAA8C;IAC9C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI,CAAC;CACtE;AAiBD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;eAtClB,MAAM,GAAG,OAAO;2BACJ,MAAM;qBACZ,MAAM;;;;;;;;;;;;;;;;sBAKL,OAAO;sBAOP,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI;uBAEtC,MAAM,IAAI;qBAEZ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;4BAE9B,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI;;;eApB7D,MAAM,GAAG,OAAO;2BACJ,MAAM;qBACZ,MAAM;;;;;;;;;;;;;;;;sBAKL,OAAO;sBAOP,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI;uBAEtC,MAAM,IAAI;qBAEZ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;4BAE9B,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI;;EA+ErE,CAAC"}
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAM3E,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA0ID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,uBAAuB,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,UAAU,aAAa;IACrB,+DAA+D;IAC/D,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtD,8CAA8C;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,yCAAyC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,8CAA8C;IAC9C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI,CAAC;CACtE;AAiBD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EA6D1B,CAAC"}