@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,19 +1,6 @@
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);
2
+ // src/wizard/types.ts
3
+ var CLOUDFLARE_API_TOKEN_PLACEHOLDER = "<USE_CLOUDFLARE_API_TOKEN_ENV_OR_WRANGLER_AUTH>";
17
4
 
18
5
  // src/wizard/presets.ts
19
6
  var PRESETS = [
@@ -99,6 +86,10 @@ var INTEGRATIONS = [
99
86
  secrets: {
100
87
  WALLET_MNEMONIC_SECRET: "Wallet Mnemonic Phrase",
101
88
  WALLET_PK_SECRET: "Wallet Private Key"
89
+ },
90
+ optionalSecrets: {
91
+ SOLANA_PRIVATE_KEY: "Solana private key (base58; leave empty to auto-generate)",
92
+ JUPITER_API_KEY: "Jupiter Swap API key (portal.jup.ag; Solana DEX)"
102
93
  }
103
94
  },
104
95
  {
@@ -126,7 +117,7 @@ var INTEGRATIONS = [
126
117
  label: "OpenAI (AI Agent)",
127
118
  workerName: "agent-worker",
128
119
  secrets: {
129
- AGENT_INTERNAL_KEY: "OpenAI API Key"
120
+ OPENAI_API_KEY: "OpenAI API Key"
130
121
  }
131
122
  },
132
123
  {
@@ -134,7 +125,7 @@ var INTEGRATIONS = [
134
125
  label: "Anthropic (AI Agent)",
135
126
  workerName: "agent-worker",
136
127
  secrets: {
137
- AGENT_INTERNAL_KEY: "Anthropic API Key"
128
+ ANTHROPIC_API_KEY: "Anthropic API Key"
138
129
  }
139
130
  },
140
131
  {
@@ -142,7 +133,7 @@ var INTEGRATIONS = [
142
133
  label: "Google AI (AI Agent)",
143
134
  workerName: "agent-worker",
144
135
  secrets: {
145
- AGENT_INTERNAL_KEY: "Google AI API Key"
136
+ GOOGLE_API_KEY: "Google AI API Key"
146
137
  }
147
138
  },
148
139
  {
@@ -167,7 +158,7 @@ var BASE_WORKERS = {
167
158
  "d1-worker": {
168
159
  enabled: true,
169
160
  path: "workers/d1-worker",
170
- vars: { database_name: "hoox-db" }
161
+ vars: { database_name: "trade-data-db" }
171
162
  },
172
163
  hoox: { enabled: true, path: "workers/hoox-worker", vars: {} },
173
164
  "agent-worker": { enabled: true, path: "workers/agent-worker", vars: {} },
@@ -363,8 +354,9 @@ class WizardEngine {
363
354
  const previousStep = STEP_ORDER[currentIdx - 1];
364
355
  if (previousStep === undefined)
365
356
  return;
357
+ const leaving = this.state.step;
366
358
  this.state.step = previousStep;
367
- this.state.completedSteps = this.state.completedSteps.filter((s) => s !== this.state.step || STEP_ORDER.indexOf(s) <= STEP_ORDER.indexOf(previousStep));
359
+ this.state.completedSteps = this.state.completedSteps.filter((s) => s !== leaving && STEP_ORDER.indexOf(s) < STEP_ORDER.indexOf(previousStep));
368
360
  }
369
361
  this.state.updatedAt = Date.now();
370
362
  }
@@ -374,9 +366,15 @@ class WizardEngine {
374
366
  buildConfig() {
375
367
  const cf = this.state.cloudflareConfig;
376
368
  const workers = {};
369
+ const enabled = new Set(this.state.selectedWorkers);
370
+ for (const key of this.state.selectedIntegrations) {
371
+ const integration = INTEGRATIONS.find((i) => i.key === key);
372
+ if (integration?.workerName)
373
+ enabled.add(integration.workerName);
374
+ }
377
375
  for (const [name, baseCfg] of Object.entries(BASE_WORKERS)) {
378
376
  workers[name] = {
379
- enabled: true,
377
+ enabled: enabled.has(name),
380
378
  path: baseCfg.path,
381
379
  vars: { ...baseCfg.vars },
382
380
  secrets: [...BASE_SECRETS[name] ?? []]
@@ -398,7 +396,10 @@ class WizardEngine {
398
396
  if (integration.vars) {
399
397
  Object.assign(workers[workerName].vars, integration.vars);
400
398
  }
401
- for (const secretName of Object.keys(integration.secrets)) {
399
+ for (const secretName of [
400
+ ...Object.keys(integration.secrets),
401
+ ...Object.keys(integration.optionalSecrets ?? {})
402
+ ]) {
402
403
  if (!workers[workerName].secrets.includes(secretName)) {
403
404
  workers[workerName].secrets.push(secretName);
404
405
  }
@@ -416,7 +417,7 @@ class WizardEngine {
416
417
  }
417
418
  return {
418
419
  global: {
419
- cloudflare_api_token: cf?.apiToken ?? "",
420
+ cloudflare_api_token: CLOUDFLARE_API_TOKEN_PLACEHOLDER,
420
421
  cloudflare_account_id: cf?.accountId ?? "",
421
422
  cloudflare_secret_store_id: cf?.secretStoreId ?? "",
422
423
  subdomain_prefix: cf?.subdomain ?? ""
@@ -429,19 +430,19 @@ class WizardEngine {
429
430
  d1Databases: [],
430
431
  kvNamespaces: [],
431
432
  r2Buckets: [],
432
- queues: []
433
+ queues: [],
434
+ vectorizeIndexes: []
433
435
  };
434
436
  const allWorkers = [
435
- ...Object.keys(BASE_WORKERS),
436
437
  ...this.state.selectedWorkers,
437
438
  ...this.state.selectedIntegrations.map((k) => {
438
- const i = INTEGRATIONS.find((i2) => i2.key === k);
439
+ const i = INTEGRATIONS.find((i) => i.key === k);
439
440
  return i?.workerName ?? "";
440
441
  }).filter(Boolean)
441
442
  ];
442
443
  const workerSet = new Set(allWorkers);
443
444
  if (workerSet.has("d1-worker")) {
444
- plan.d1Databases.push("hoox-db");
445
+ plan.d1Databases.push("trade-data-db");
445
446
  }
446
447
  if (workerSet.has("hoox") || workerSet.has("analytics-worker")) {
447
448
  plan.kvNamespaces.push("CONFIG_KV");
@@ -449,8 +450,13 @@ class WizardEngine {
449
450
  if (workerSet.has("web3-wallet-worker")) {
450
451
  plan.kvNamespaces.push("WEB3_CACHE_KV");
451
452
  }
453
+ if (workerSet.has("hoox") || workerSet.has("telegram-worker")) {
454
+ plan.vectorizeIndexes = plan.vectorizeIndexes ?? [];
455
+ plan.vectorizeIndexes.push("my-rag-index");
456
+ }
452
457
  plan.d1Databases = [...new Set(plan.d1Databases)];
453
458
  plan.kvNamespaces = [...new Set(plan.kvNamespaces)];
459
+ plan.vectorizeIndexes = [...new Set(plan.vectorizeIndexes ?? [])];
454
460
  return plan;
455
461
  }
456
462
  applyInput(input) {
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export type { StepId, WorkerPresetName, WorkerPreset } from "./types";
6
6
  export type { WorkerConfig, WorkersJsonConfig, IntegratedService, ProvisioningPlan, ProvisionResult, WizardCloudflareConfig, WizardState, StepDefinition, } from "./types";
7
+ export { CLOUDFLARE_API_TOKEN_PLACEHOLDER } from "./types";
7
8
  export type { Provisioner } from "./provisioner";
8
9
  export { WizardEngine } from "./engine";
9
10
  export { PRESETS, WORKER_DEPENDENCIES, INTEGRATIONS, BASE_WORKERS, BASE_SECRETS, resolveDependencies, } from "./presets";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
@@ -1,20 +1,6 @@
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
-
2
+ // src/wizard/types.ts
3
+ var CLOUDFLARE_API_TOKEN_PLACEHOLDER = "<USE_CLOUDFLARE_API_TOKEN_ENV_OR_WRANGLER_AUTH>";
18
4
  // src/wizard/presets.ts
19
5
  var PRESETS = [
20
6
  {
@@ -99,6 +85,10 @@ var INTEGRATIONS = [
99
85
  secrets: {
100
86
  WALLET_MNEMONIC_SECRET: "Wallet Mnemonic Phrase",
101
87
  WALLET_PK_SECRET: "Wallet Private Key"
88
+ },
89
+ optionalSecrets: {
90
+ SOLANA_PRIVATE_KEY: "Solana private key (base58; leave empty to auto-generate)",
91
+ JUPITER_API_KEY: "Jupiter Swap API key (portal.jup.ag; Solana DEX)"
102
92
  }
103
93
  },
104
94
  {
@@ -126,7 +116,7 @@ var INTEGRATIONS = [
126
116
  label: "OpenAI (AI Agent)",
127
117
  workerName: "agent-worker",
128
118
  secrets: {
129
- AGENT_INTERNAL_KEY: "OpenAI API Key"
119
+ OPENAI_API_KEY: "OpenAI API Key"
130
120
  }
131
121
  },
132
122
  {
@@ -134,7 +124,7 @@ var INTEGRATIONS = [
134
124
  label: "Anthropic (AI Agent)",
135
125
  workerName: "agent-worker",
136
126
  secrets: {
137
- AGENT_INTERNAL_KEY: "Anthropic API Key"
127
+ ANTHROPIC_API_KEY: "Anthropic API Key"
138
128
  }
139
129
  },
140
130
  {
@@ -142,7 +132,7 @@ var INTEGRATIONS = [
142
132
  label: "Google AI (AI Agent)",
143
133
  workerName: "agent-worker",
144
134
  secrets: {
145
- AGENT_INTERNAL_KEY: "Google AI API Key"
135
+ GOOGLE_API_KEY: "Google AI API Key"
146
136
  }
147
137
  },
148
138
  {
@@ -167,7 +157,7 @@ var BASE_WORKERS = {
167
157
  "d1-worker": {
168
158
  enabled: true,
169
159
  path: "workers/d1-worker",
170
- vars: { database_name: "hoox-db" }
160
+ vars: { database_name: "trade-data-db" }
171
161
  },
172
162
  hoox: { enabled: true, path: "workers/hoox-worker", vars: {} },
173
163
  "agent-worker": { enabled: true, path: "workers/agent-worker", vars: {} },
@@ -363,8 +353,9 @@ class WizardEngine {
363
353
  const previousStep = STEP_ORDER[currentIdx - 1];
364
354
  if (previousStep === undefined)
365
355
  return;
356
+ const leaving = this.state.step;
366
357
  this.state.step = previousStep;
367
- this.state.completedSteps = this.state.completedSteps.filter((s) => s !== this.state.step || STEP_ORDER.indexOf(s) <= STEP_ORDER.indexOf(previousStep));
358
+ this.state.completedSteps = this.state.completedSteps.filter((s) => s !== leaving && STEP_ORDER.indexOf(s) < STEP_ORDER.indexOf(previousStep));
368
359
  }
369
360
  this.state.updatedAt = Date.now();
370
361
  }
@@ -374,9 +365,15 @@ class WizardEngine {
374
365
  buildConfig() {
375
366
  const cf = this.state.cloudflareConfig;
376
367
  const workers = {};
368
+ const enabled = new Set(this.state.selectedWorkers);
369
+ for (const key of this.state.selectedIntegrations) {
370
+ const integration = INTEGRATIONS.find((i) => i.key === key);
371
+ if (integration?.workerName)
372
+ enabled.add(integration.workerName);
373
+ }
377
374
  for (const [name, baseCfg] of Object.entries(BASE_WORKERS)) {
378
375
  workers[name] = {
379
- enabled: true,
376
+ enabled: enabled.has(name),
380
377
  path: baseCfg.path,
381
378
  vars: { ...baseCfg.vars },
382
379
  secrets: [...BASE_SECRETS[name] ?? []]
@@ -398,7 +395,10 @@ class WizardEngine {
398
395
  if (integration.vars) {
399
396
  Object.assign(workers[workerName].vars, integration.vars);
400
397
  }
401
- for (const secretName of Object.keys(integration.secrets)) {
398
+ for (const secretName of [
399
+ ...Object.keys(integration.secrets),
400
+ ...Object.keys(integration.optionalSecrets ?? {})
401
+ ]) {
402
402
  if (!workers[workerName].secrets.includes(secretName)) {
403
403
  workers[workerName].secrets.push(secretName);
404
404
  }
@@ -416,7 +416,7 @@ class WizardEngine {
416
416
  }
417
417
  return {
418
418
  global: {
419
- cloudflare_api_token: cf?.apiToken ?? "",
419
+ cloudflare_api_token: CLOUDFLARE_API_TOKEN_PLACEHOLDER,
420
420
  cloudflare_account_id: cf?.accountId ?? "",
421
421
  cloudflare_secret_store_id: cf?.secretStoreId ?? "",
422
422
  subdomain_prefix: cf?.subdomain ?? ""
@@ -429,19 +429,19 @@ class WizardEngine {
429
429
  d1Databases: [],
430
430
  kvNamespaces: [],
431
431
  r2Buckets: [],
432
- queues: []
432
+ queues: [],
433
+ vectorizeIndexes: []
433
434
  };
434
435
  const allWorkers = [
435
- ...Object.keys(BASE_WORKERS),
436
436
  ...this.state.selectedWorkers,
437
437
  ...this.state.selectedIntegrations.map((k) => {
438
- const i = INTEGRATIONS.find((i2) => i2.key === k);
438
+ const i = INTEGRATIONS.find((i) => i.key === k);
439
439
  return i?.workerName ?? "";
440
440
  }).filter(Boolean)
441
441
  ];
442
442
  const workerSet = new Set(allWorkers);
443
443
  if (workerSet.has("d1-worker")) {
444
- plan.d1Databases.push("hoox-db");
444
+ plan.d1Databases.push("trade-data-db");
445
445
  }
446
446
  if (workerSet.has("hoox") || workerSet.has("analytics-worker")) {
447
447
  plan.kvNamespaces.push("CONFIG_KV");
@@ -449,8 +449,13 @@ class WizardEngine {
449
449
  if (workerSet.has("web3-wallet-worker")) {
450
450
  plan.kvNamespaces.push("WEB3_CACHE_KV");
451
451
  }
452
+ if (workerSet.has("hoox") || workerSet.has("telegram-worker")) {
453
+ plan.vectorizeIndexes = plan.vectorizeIndexes ?? [];
454
+ plan.vectorizeIndexes.push("my-rag-index");
455
+ }
452
456
  plan.d1Databases = [...new Set(plan.d1Databases)];
453
457
  plan.kvNamespaces = [...new Set(plan.kvNamespaces)];
458
+ plan.vectorizeIndexes = [...new Set(plan.vectorizeIndexes ?? [])];
454
459
  return plan;
455
460
  }
456
461
  applyInput(input) {
@@ -503,10 +508,13 @@ class WizardEngine {
503
508
  }
504
509
  }
505
510
  }
506
-
507
511
  // src/wizard/persistence.ts
508
512
  function serializeState(state) {
509
- return JSON.stringify(state, null, 2);
513
+ const copy = {
514
+ ...state,
515
+ cloudflareConfig: state.cloudflareConfig ? { ...state.cloudflareConfig, apiToken: "" } : undefined
516
+ };
517
+ return JSON.stringify(copy, null, 2);
510
518
  }
511
519
  function deserializeState(json) {
512
520
  const parsed = JSON.parse(json);
@@ -514,14 +522,15 @@ function deserializeState(json) {
514
522
  }
515
523
  var WIZARD_STATE_PATH = ".wizard-state.json";
516
524
  export {
517
- serializeState,
518
- resolveDependencies,
519
- deserializeState,
520
- WizardEngine,
521
- WORKER_DEPENDENCIES,
522
- WIZARD_STATE_PATH,
523
- PRESETS,
524
- INTEGRATIONS,
525
+ BASE_SECRETS,
525
526
  BASE_WORKERS,
526
- BASE_SECRETS
527
+ CLOUDFLARE_API_TOKEN_PLACEHOLDER,
528
+ INTEGRATIONS,
529
+ PRESETS,
530
+ WIZARD_STATE_PATH,
531
+ WORKER_DEPENDENCIES,
532
+ WizardEngine,
533
+ deserializeState,
534
+ resolveDependencies,
535
+ serializeState
527
536
  };
@@ -5,6 +5,10 @@
5
5
  import type { WizardState } from "./types";
6
6
  /**
7
7
  * Serialize wizard state to JSON string.
8
+ *
9
+ * The Cloudflare API token is stripped — `.wizard-state.json` must not
10
+ * hold live credentials. Resume re-reads `CLOUDFLARE_API_TOKEN` from the
11
+ * environment (or re-prompts).
8
12
  */
9
13
  export declare function serializeState(state: WizardState): string;
10
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/wizard/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAG1D;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,uBAAuB,CAAC"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/wizard/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAQzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAG1D;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,uBAAuB,CAAC"}
@@ -1,23 +1,11 @@
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/wizard/persistence.ts
19
3
  function serializeState(state) {
20
- return JSON.stringify(state, null, 2);
4
+ const copy = {
5
+ ...state,
6
+ cloudflareConfig: state.cloudflareConfig ? { ...state.cloudflareConfig, apiToken: "" } : undefined
7
+ };
8
+ return JSON.stringify(copy, null, 2);
21
9
  }
22
10
  function deserializeState(json) {
23
11
  const parsed = JSON.parse(json);
@@ -25,7 +13,7 @@ function deserializeState(json) {
25
13
  }
26
14
  var WIZARD_STATE_PATH = ".wizard-state.json";
27
15
  export {
28
- serializeState,
16
+ WIZARD_STATE_PATH,
29
17
  deserializeState,
30
- WIZARD_STATE_PATH
18
+ serializeState
31
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/wizard/presets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI/D,eAAO,MAAM,OAAO,EAAE,YAAY,EAsCjC,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAOxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAkBhE;AAID;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,iBAAiB,EAgF3C,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,MAAM,CAC/B,MAAM,EACN;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAmBjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAIjD,CAAC"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/wizard/presets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI/D,eAAO,MAAM,OAAO,EAAE,YAAY,EAsCjC,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAOxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAkBhE;AAID;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,iBAAiB,EAqF3C,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,MAAM,CAC/B,MAAM,EACN;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAmBjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAIjD,CAAC"}
@@ -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/wizard/presets.ts
19
3
  var PRESETS = [
20
4
  {
@@ -99,6 +83,10 @@ var INTEGRATIONS = [
99
83
  secrets: {
100
84
  WALLET_MNEMONIC_SECRET: "Wallet Mnemonic Phrase",
101
85
  WALLET_PK_SECRET: "Wallet Private Key"
86
+ },
87
+ optionalSecrets: {
88
+ SOLANA_PRIVATE_KEY: "Solana private key (base58; leave empty to auto-generate)",
89
+ JUPITER_API_KEY: "Jupiter Swap API key (portal.jup.ag; Solana DEX)"
102
90
  }
103
91
  },
104
92
  {
@@ -126,7 +114,7 @@ var INTEGRATIONS = [
126
114
  label: "OpenAI (AI Agent)",
127
115
  workerName: "agent-worker",
128
116
  secrets: {
129
- AGENT_INTERNAL_KEY: "OpenAI API Key"
117
+ OPENAI_API_KEY: "OpenAI API Key"
130
118
  }
131
119
  },
132
120
  {
@@ -134,7 +122,7 @@ var INTEGRATIONS = [
134
122
  label: "Anthropic (AI Agent)",
135
123
  workerName: "agent-worker",
136
124
  secrets: {
137
- AGENT_INTERNAL_KEY: "Anthropic API Key"
125
+ ANTHROPIC_API_KEY: "Anthropic API Key"
138
126
  }
139
127
  },
140
128
  {
@@ -142,7 +130,7 @@ var INTEGRATIONS = [
142
130
  label: "Google AI (AI Agent)",
143
131
  workerName: "agent-worker",
144
132
  secrets: {
145
- AGENT_INTERNAL_KEY: "Google AI API Key"
133
+ GOOGLE_API_KEY: "Google AI API Key"
146
134
  }
147
135
  },
148
136
  {
@@ -167,7 +155,7 @@ var BASE_WORKERS = {
167
155
  "d1-worker": {
168
156
  enabled: true,
169
157
  path: "workers/d1-worker",
170
- vars: { database_name: "hoox-db" }
158
+ vars: { database_name: "trade-data-db" }
171
159
  },
172
160
  hoox: { enabled: true, path: "workers/hoox-worker", vars: {} },
173
161
  "agent-worker": { enabled: true, path: "workers/agent-worker", vars: {} },
@@ -188,10 +176,10 @@ var BASE_SECRETS = {
188
176
  "analytics-worker": ["CLOUDFLARE_API_TOKEN"]
189
177
  };
190
178
  export {
191
- resolveDependencies,
192
- WORKER_DEPENDENCIES,
193
- PRESETS,
194
- INTEGRATIONS,
179
+ BASE_SECRETS,
195
180
  BASE_WORKERS,
196
- BASE_SECRETS
181
+ INTEGRATIONS,
182
+ PRESETS,
183
+ WORKER_DEPENDENCIES,
184
+ resolveDependencies
197
185
  };
@@ -20,6 +20,8 @@ export interface IntegratedService {
20
20
  label: string;
21
21
  workerName: string;
22
22
  secrets: Record<string, string>;
23
+ /** Prompted during init; empty is allowed (setup may auto-generate). */
24
+ optionalSecrets?: Record<string, string>;
23
25
  vars?: Record<string, string>;
24
26
  }
25
27
  export interface WorkerConfig {
@@ -28,6 +30,8 @@ export interface WorkerConfig {
28
30
  vars: Record<string, string>;
29
31
  secrets: string[];
30
32
  }
33
+ /** Written to wrangler.jsonc instead of the live API token. */
34
+ export declare const CLOUDFLARE_API_TOKEN_PLACEHOLDER = "<USE_CLOUDFLARE_API_TOKEN_ENV_OR_WRANGLER_AUTH>";
31
35
  export interface WorkersJsonConfig {
32
36
  global: {
33
37
  cloudflare_api_token: string;
@@ -42,6 +46,8 @@ export interface ProvisioningPlan {
42
46
  kvNamespaces: string[];
43
47
  r2Buckets: string[];
44
48
  queues: string[];
49
+ /** Created for gateway/telegram RAG. Optional so older callers compile. */
50
+ vectorizeIndexes?: string[];
45
51
  }
46
52
  export interface ProvisionResult {
47
53
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wizard/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AAEH,MAAM,MAAM,MAAM,GACd,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,cAAc,GACd,SAAS,GACT,cAAc,GACd,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,oBAAoB,EAAE,MAAM,CAAC;QAC7B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,0BAA0B,EAAE,MAAM,CAAC;QACnC,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,mBAAmB,CAAC,EAAE,eAAe,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;CACxE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wizard/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AAEH,MAAM,MAAM,MAAM,GACd,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,cAAc,GACd,SAAS,GACT,cAAc,GACd,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,+DAA+D;AAC/D,eAAO,MAAM,gCAAgC,oDACM,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,oBAAoB,EAAE,MAAM,CAAC;QAC7B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,0BAA0B,EAAE,MAAM,CAAC;QACnC,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,mBAAmB,CAAC,EAAE,eAAe,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;CACxE"}
@@ -1 +1,6 @@
1
1
  // @bun
2
+ // src/wizard/types.ts
3
+ var CLOUDFLARE_API_TOKEN_PLACEHOLDER = "<USE_CLOUDFLARE_API_TOKEN_ENV_OR_WRANGLER_AUTH>";
4
+ export {
5
+ CLOUDFLARE_API_TOKEN_PLACEHOLDER
6
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hoox-sh/hoox-shared",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "Shared utilities, types, and stores for HOOX CLI, TUI, and Cloudflare Workers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -31,6 +31,11 @@
31
31
  "import": "./dist/d1/*.js",
32
32
  "default": "./dist/d1/*.js"
33
33
  },
34
+ "./tenant": {
35
+ "types": "./dist/tenant.d.ts",
36
+ "import": "./dist/tenant.js",
37
+ "default": "./dist/tenant.js"
38
+ },
34
39
  "./schemas": {
35
40
  "types": "./dist/schemas/index.d.ts",
36
41
  "import": "./dist/schemas/index.js",
@@ -108,7 +113,7 @@
108
113
  "author": "jango-blockchained (hoox-sh)",
109
114
  "license": "Apache-2.0",
110
115
  "devDependencies": {
111
- "@cloudflare/workers-types": "^5.20260708.1",
116
+ "@cloudflare/workers-types": "^5.20261001.1",
112
117
  "typescript": "^6.0.3"
113
118
  },
114
119
  "engines": {