@hs-x/cli 0.2.7 → 0.3.6

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 (285) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +25 -8
  3. package/dist/audit-interactive.d.ts +29 -0
  4. package/dist/audit-interactive.d.ts.map +1 -0
  5. package/dist/audit-interactive.js +156 -0
  6. package/dist/audit-interactive.js.map +1 -0
  7. package/dist/bin/hs-x.js.map +1 -1
  8. package/dist/checkpoint-interactive.d.ts +24 -0
  9. package/dist/checkpoint-interactive.d.ts.map +1 -0
  10. package/dist/checkpoint-interactive.js +65 -0
  11. package/dist/checkpoint-interactive.js.map +1 -0
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +266 -39
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/kit.d.ts +1 -1
  16. package/dist/cli/kit.d.ts.map +1 -1
  17. package/dist/cli/kit.js +19 -3
  18. package/dist/cli/kit.js.map +1 -1
  19. package/dist/cloudflare-auth.d.ts +8 -0
  20. package/dist/cloudflare-auth.d.ts.map +1 -1
  21. package/dist/cloudflare-auth.js +12 -2
  22. package/dist/cloudflare-auth.js.map +1 -1
  23. package/dist/cloudflare-oauth-store.d.ts +9 -1
  24. package/dist/cloudflare-oauth-store.d.ts.map +1 -1
  25. package/dist/cloudflare-oauth-store.js +23 -4
  26. package/dist/cloudflare-oauth-store.js.map +1 -1
  27. package/dist/cloudflare-oauth.d.ts +1 -0
  28. package/dist/cloudflare-oauth.d.ts.map +1 -1
  29. package/dist/cloudflare-oauth.js +6 -2
  30. package/dist/cloudflare-oauth.js.map +1 -1
  31. package/dist/commands/account.d.ts +28 -13
  32. package/dist/commands/account.d.ts.map +1 -1
  33. package/dist/commands/account.js +219 -69
  34. package/dist/commands/account.js.map +1 -1
  35. package/dist/commands/api.d.ts.map +1 -1
  36. package/dist/commands/api.js +7 -11
  37. package/dist/commands/api.js.map +1 -1
  38. package/dist/commands/completion.d.ts.map +1 -1
  39. package/dist/commands/completion.js +13 -7
  40. package/dist/commands/completion.js.map +1 -1
  41. package/dist/commands/connect.d.ts.map +1 -1
  42. package/dist/commands/connect.js +239 -125
  43. package/dist/commands/connect.js.map +1 -1
  44. package/dist/commands/control-plane-read.d.ts +71 -10
  45. package/dist/commands/control-plane-read.d.ts.map +1 -1
  46. package/dist/commands/control-plane-read.js +1035 -58
  47. package/dist/commands/control-plane-read.js.map +1 -1
  48. package/dist/commands/deploy-promote.d.ts +25 -3
  49. package/dist/commands/deploy-promote.d.ts.map +1 -1
  50. package/dist/commands/deploy-promote.js +314 -38
  51. package/dist/commands/deploy-promote.js.map +1 -1
  52. package/dist/commands/deploy.d.ts +69 -4
  53. package/dist/commands/deploy.d.ts.map +1 -1
  54. package/dist/commands/deploy.js +1512 -276
  55. package/dist/commands/deploy.js.map +1 -1
  56. package/dist/commands/dev.d.ts +5 -1
  57. package/dist/commands/dev.d.ts.map +1 -1
  58. package/dist/commands/dev.js +502 -107
  59. package/dist/commands/dev.js.map +1 -1
  60. package/dist/commands/doctor.d.ts +14 -0
  61. package/dist/commands/doctor.d.ts.map +1 -1
  62. package/dist/commands/doctor.js +131 -20
  63. package/dist/commands/doctor.js.map +1 -1
  64. package/dist/commands/flags.d.ts +108 -6
  65. package/dist/commands/flags.d.ts.map +1 -1
  66. package/dist/commands/flags.js +996 -75
  67. package/dist/commands/flags.js.map +1 -1
  68. package/dist/commands/help-command.d.ts +14 -0
  69. package/dist/commands/help-command.d.ts.map +1 -1
  70. package/dist/commands/help-command.js +144 -44
  71. package/dist/commands/help-command.js.map +1 -1
  72. package/dist/commands/history.js +14 -10
  73. package/dist/commands/history.js.map +1 -1
  74. package/dist/commands/init.d.ts +4 -2
  75. package/dist/commands/init.d.ts.map +1 -1
  76. package/dist/commands/init.js +98 -17
  77. package/dist/commands/init.js.map +1 -1
  78. package/dist/commands/link.d.ts +2 -3
  79. package/dist/commands/link.d.ts.map +1 -1
  80. package/dist/commands/link.js +201 -101
  81. package/dist/commands/link.js.map +1 -1
  82. package/dist/commands/login.d.ts.map +1 -1
  83. package/dist/commands/login.js +22 -5
  84. package/dist/commands/login.js.map +1 -1
  85. package/dist/commands/migrate.d.ts +37 -17
  86. package/dist/commands/migrate.d.ts.map +1 -1
  87. package/dist/commands/migrate.js +500 -73
  88. package/dist/commands/migrate.js.map +1 -1
  89. package/dist/commands/rollback.d.ts +42 -2
  90. package/dist/commands/rollback.d.ts.map +1 -1
  91. package/dist/commands/rollback.js +422 -58
  92. package/dist/commands/rollback.js.map +1 -1
  93. package/dist/commands/secrets.d.ts +76 -3
  94. package/dist/commands/secrets.d.ts.map +1 -1
  95. package/dist/commands/secrets.js +328 -41
  96. package/dist/commands/secrets.js.map +1 -1
  97. package/dist/commands/status.d.ts +13 -2
  98. package/dist/commands/status.d.ts.map +1 -1
  99. package/dist/commands/status.js +154 -17
  100. package/dist/commands/status.js.map +1 -1
  101. package/dist/commands/unlink.d.ts +2 -2
  102. package/dist/commands/unlink.d.ts.map +1 -1
  103. package/dist/commands/unlink.js +2 -2
  104. package/dist/commands/unlink.js.map +1 -1
  105. package/dist/commands/update.d.ts.map +1 -1
  106. package/dist/commands/update.js +4 -3
  107. package/dist/commands/update.js.map +1 -1
  108. package/dist/commands/validate.d.ts +12 -3
  109. package/dist/commands/validate.d.ts.map +1 -1
  110. package/dist/commands/validate.js +70 -8
  111. package/dist/commands/validate.js.map +1 -1
  112. package/dist/constants.d.ts +1 -1
  113. package/dist/constants.js +1 -1
  114. package/dist/control-plane-fetch.d.ts.map +1 -1
  115. package/dist/control-plane-fetch.js +5 -4
  116. package/dist/control-plane-fetch.js.map +1 -1
  117. package/dist/deploy-revision-capture.d.ts +48 -0
  118. package/dist/deploy-revision-capture.d.ts.map +1 -0
  119. package/dist/deploy-revision-capture.js +125 -0
  120. package/dist/deploy-revision-capture.js.map +1 -0
  121. package/dist/dev/event-bus.d.ts +5 -2
  122. package/dist/dev/event-bus.d.ts.map +1 -1
  123. package/dist/dev/event-bus.js +4 -1
  124. package/dist/dev/event-bus.js.map +1 -1
  125. package/dist/dev/hubspot-logs-poller.d.ts +35 -0
  126. package/dist/dev/hubspot-logs-poller.d.ts.map +1 -0
  127. package/dist/dev/hubspot-logs-poller.js +94 -0
  128. package/dist/dev/hubspot-logs-poller.js.map +1 -0
  129. package/dist/dev/invoke.d.ts +9 -1
  130. package/dist/dev/invoke.d.ts.map +1 -1
  131. package/dist/dev/invoke.js +69 -20
  132. package/dist/dev/invoke.js.map +1 -1
  133. package/dist/dev/keyboard.d.ts +31 -0
  134. package/dist/dev/keyboard.d.ts.map +1 -0
  135. package/dist/dev/keyboard.js +143 -0
  136. package/dist/dev/keyboard.js.map +1 -0
  137. package/dist/dev/log-server.d.ts +7 -0
  138. package/dist/dev/log-server.d.ts.map +1 -1
  139. package/dist/dev/log-server.js +68 -31
  140. package/dist/dev/log-server.js.map +1 -1
  141. package/dist/dev/migrated-card.d.ts +17 -0
  142. package/dist/dev/migrated-card.d.ts.map +1 -0
  143. package/dist/dev/migrated-card.js +114 -0
  144. package/dist/dev/migrated-card.js.map +1 -0
  145. package/dist/dev/stream-filter.d.ts +40 -0
  146. package/dist/dev/stream-filter.d.ts.map +1 -0
  147. package/dist/dev/stream-filter.js +93 -0
  148. package/dist/dev/stream-filter.js.map +1 -0
  149. package/dist/dev/stream-renderer.d.ts +34 -0
  150. package/dist/dev/stream-renderer.d.ts.map +1 -1
  151. package/dist/dev/stream-renderer.js +222 -8
  152. package/dist/dev/stream-renderer.js.map +1 -1
  153. package/dist/errors-registry.d.ts.map +1 -1
  154. package/dist/errors-registry.js +280 -36
  155. package/dist/errors-registry.js.map +1 -1
  156. package/dist/errors.d.ts.map +1 -1
  157. package/dist/errors.js.map +1 -1
  158. package/dist/help.d.ts.map +1 -1
  159. package/dist/help.js +8 -0
  160. package/dist/help.js.map +1 -1
  161. package/dist/hubspot-app-logs.d.ts +76 -0
  162. package/dist/hubspot-app-logs.d.ts.map +1 -0
  163. package/dist/hubspot-app-logs.js +323 -0
  164. package/dist/hubspot-app-logs.js.map +1 -0
  165. package/dist/hubspot-auth.d.ts +8 -2
  166. package/dist/hubspot-auth.d.ts.map +1 -1
  167. package/dist/hubspot-auth.js +9 -9
  168. package/dist/hubspot-auth.js.map +1 -1
  169. package/dist/hubspot-developer-client.js +119 -11
  170. package/dist/hubspot-developer-client.js.map +1 -1
  171. package/dist/index.d.ts +1 -0
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +1 -0
  174. package/dist/index.js.map +1 -1
  175. package/dist/init/templates.d.ts +11 -1
  176. package/dist/init/templates.d.ts.map +1 -1
  177. package/dist/init/templates.js +228 -15
  178. package/dist/init/templates.js.map +1 -1
  179. package/dist/link-migration-journal.d.ts +131 -0
  180. package/dist/link-migration-journal.d.ts.map +1 -0
  181. package/dist/link-migration-journal.js +395 -0
  182. package/dist/link-migration-journal.js.map +1 -0
  183. package/dist/link-preflight.d.ts +78 -0
  184. package/dist/link-preflight.d.ts.map +1 -0
  185. package/dist/link-preflight.js +231 -0
  186. package/dist/link-preflight.js.map +1 -0
  187. package/dist/local-project-picker.d.ts +34 -0
  188. package/dist/local-project-picker.d.ts.map +1 -0
  189. package/dist/local-project-picker.js +121 -0
  190. package/dist/local-project-picker.js.map +1 -0
  191. package/dist/logs-interactive.d.ts +37 -0
  192. package/dist/logs-interactive.d.ts.map +1 -0
  193. package/dist/logs-interactive.js +110 -0
  194. package/dist/logs-interactive.js.map +1 -0
  195. package/dist/output-context.d.ts +13 -0
  196. package/dist/output-context.d.ts.map +1 -0
  197. package/dist/output-context.js +46 -0
  198. package/dist/output-context.js.map +1 -0
  199. package/dist/project-context.d.ts +55 -0
  200. package/dist/project-context.d.ts.map +1 -0
  201. package/dist/project-context.js +115 -0
  202. package/dist/project-context.js.map +1 -0
  203. package/dist/project-picker.d.ts +65 -0
  204. package/dist/project-picker.d.ts.map +1 -0
  205. package/dist/project-picker.js +227 -0
  206. package/dist/project-picker.js.map +1 -0
  207. package/dist/prompt.d.ts +8 -0
  208. package/dist/prompt.d.ts.map +1 -1
  209. package/dist/prompt.js +81 -13
  210. package/dist/prompt.js.map +1 -1
  211. package/dist/reporter/human.d.ts +10 -2
  212. package/dist/reporter/human.d.ts.map +1 -1
  213. package/dist/reporter/human.js +82 -14
  214. package/dist/reporter/human.js.map +1 -1
  215. package/dist/reporter/index.d.ts.map +1 -1
  216. package/dist/reporter/index.js +7 -5
  217. package/dist/reporter/index.js.map +1 -1
  218. package/dist/reporter/json.d.ts +2 -1
  219. package/dist/reporter/json.d.ts.map +1 -1
  220. package/dist/reporter/json.js +10 -7
  221. package/dist/reporter/json.js.map +1 -1
  222. package/dist/reporter/style.d.ts +19 -0
  223. package/dist/reporter/style.d.ts.map +1 -1
  224. package/dist/reporter/style.js +126 -6
  225. package/dist/reporter/style.js.map +1 -1
  226. package/dist/reporter/types.d.ts +34 -4
  227. package/dist/reporter/types.d.ts.map +1 -1
  228. package/dist/reporter/types.js.map +1 -1
  229. package/dist/services/account-store.d.ts +3 -1
  230. package/dist/services/account-store.d.ts.map +1 -1
  231. package/dist/services/account-store.js +2 -1
  232. package/dist/services/account-store.js.map +1 -1
  233. package/dist/services/app-paths.d.ts.map +1 -1
  234. package/dist/services/app-paths.js +3 -1
  235. package/dist/services/app-paths.js.map +1 -1
  236. package/dist/services/cloudflare-auth.d.ts +1 -1
  237. package/dist/services/cloudflare-auth.d.ts.map +1 -1
  238. package/dist/services/cloudflare-auth.js +2 -2
  239. package/dist/services/cloudflare-auth.js.map +1 -1
  240. package/dist/services/cloudflare-kv.d.ts.map +1 -1
  241. package/dist/services/cloudflare-kv.js.map +1 -1
  242. package/dist/services/command-history.d.ts.map +1 -1
  243. package/dist/services/command-history.js.map +1 -1
  244. package/dist/services/config.d.ts.map +1 -1
  245. package/dist/services/config.js +1 -1
  246. package/dist/services/config.js.map +1 -1
  247. package/dist/services/control-plane.d.ts.map +1 -1
  248. package/dist/services/control-plane.js +3 -3
  249. package/dist/services/control-plane.js.map +1 -1
  250. package/dist/services/env-loader.d.ts.map +1 -1
  251. package/dist/services/env-loader.js +1 -3
  252. package/dist/services/env-loader.js.map +1 -1
  253. package/dist/services/http.d.ts.map +1 -1
  254. package/dist/services/http.js.map +1 -1
  255. package/dist/services/hubspot-dev-client.d.ts.map +1 -1
  256. package/dist/services/hubspot-dev-client.js +30 -0
  257. package/dist/services/hubspot-dev-client.js.map +1 -1
  258. package/dist/services/live.d.ts +2 -2
  259. package/dist/services/live.d.ts.map +1 -1
  260. package/dist/services/live.js +1 -1
  261. package/dist/services/live.js.map +1 -1
  262. package/dist/services/machine-id.d.ts.map +1 -1
  263. package/dist/services/machine-id.js.map +1 -1
  264. package/dist/services/reporter.d.ts +8 -5
  265. package/dist/services/reporter.d.ts.map +1 -1
  266. package/dist/services/reporter.js +6 -4
  267. package/dist/services/reporter.js.map +1 -1
  268. package/dist/services/tenant-state.d.ts.map +1 -1
  269. package/dist/services/tenant-state.js.map +1 -1
  270. package/dist/state-store.d.ts +4 -0
  271. package/dist/state-store.d.ts.map +1 -1
  272. package/dist/state-store.js +15 -0
  273. package/dist/state-store.js.map +1 -1
  274. package/dist/status-drilldown.d.ts +24 -0
  275. package/dist/status-drilldown.d.ts.map +1 -0
  276. package/dist/status-drilldown.js +50 -0
  277. package/dist/status-drilldown.js.map +1 -0
  278. package/dist/tenant-state.d.ts.map +1 -1
  279. package/dist/tenant-state.js +3 -2
  280. package/dist/tenant-state.js.map +1 -1
  281. package/dist/token-key-custody.d.ts +91 -0
  282. package/dist/token-key-custody.d.ts.map +1 -0
  283. package/dist/token-key-custody.js +375 -0
  284. package/dist/token-key-custody.js.map +1 -0
  285. package/package.json +14 -15
@@ -1,14 +1,18 @@
1
1
  import * as Command from '@effect/cli/Command';
2
2
  import { HttpClientRequest, Schema, schemas } from '@hs-x/types';
3
3
  import { Config, Effect, Option } from 'effect';
4
- import { isLinked } from '../account-store.js';
5
- import { CliError, cliError } from '../cli-error.js';
6
- import { accountIdOption, controlPlaneUrlOption, deployIdOption, jsonOption, projectIdOption, runHandler, userIdOption, } from '../cli/kit.js';
4
+ import { isLinked, loadStore } from '../account-store.js';
5
+ import { CliError, cliError, exitWith } from '../cli-error.js';
6
+ import { accountIdOption, controlPlaneUrlOption, cwdOption, deployIdOption, forceOption, jsonOption, projectIdOption, runHandler, userIdOption, yesOption, } from '../cli/kit.js';
7
7
  import { controlPlaneAuthHeaders } from '../control-plane-fetch.js';
8
8
  import { executeCliHttp } from '../effect-http.js';
9
+ import { readLocalProjectContext, resolveProjectId } from '../project-context.js';
10
+ import { ProjectPickerCancelled, discoverProjects, resolveAccountId, resolveProjectSelection, } from '../project-picker.js';
11
+ import { isInteractive, promptConfirm, promptSelect } from '../prompt.js';
9
12
  import { createReporter } from '../reporter/index.js';
10
13
  import { AccountStore } from '../services/account-store.js';
11
14
  import { ControlPlaneClient } from '../services/control-plane.js';
15
+ import { Cwd } from '../services/cwd.js';
12
16
  import { CliHttp } from '../services/http.js';
13
17
  import { Reporter } from '../services/reporter.js';
14
18
  const UNLINKED_PROMOTE_HINT = 'Promote is a linked-mode operation tied to control-plane revisioned routing. Unlinked deploys become active automatically when they succeed. Run `hs-x link` to enable the staged promote workflow, or use `hs-x rollback --deploy-id <id>` to move the active pointer in tenant state.';
@@ -26,17 +30,21 @@ const UNLINKED_PROMOTE_HINT = 'Promote is a linked-mode operation tied to contro
26
30
  // so the JSON branches write verbatim via sync stdout writes.
27
31
  // TODO(phase-5): reconcile these bespoke payloads with the standard envelope.
28
32
  export const promoteCmd = Command.make('promote', {
33
+ cwd: cwdOption,
29
34
  json: jsonOption,
30
35
  deployId: deployIdOption,
31
36
  accountId: accountIdOption,
32
37
  projectId: projectIdOption,
33
38
  controlPlaneUrl: controlPlaneUrlOption,
34
39
  userId: userIdOption,
40
+ force: forceOption,
41
+ yes: yesOption,
35
42
  }, (opts) => runHandler('promote', { json: opts.json }, promoteBody(opts)));
36
43
  function promoteBody(opts) {
37
44
  return Effect.gen(function* () {
38
45
  const store = yield* AccountStore;
39
46
  const controlPlane = yield* ControlPlaneClient;
47
+ const http = yield* CliHttp;
40
48
  const reporter = yield* Reporter;
41
49
  const commandName = 'promote';
42
50
  const envControlPlaneUrl = yield* Config.string('HSX_CONTROL_PLANE_URL').pipe(Config.withDefault(''), Effect.orDie);
@@ -66,16 +74,89 @@ function promoteBody(opts) {
66
74
  exitCode: 10,
67
75
  }));
68
76
  }
69
- const deployId = Option.getOrUndefined(opts.deployId);
70
- const accountId = yield* resolveWithEnv(opts.accountId, 'HSX_ACCOUNT_ID');
71
- const projectId = yield* resolveWithEnv(opts.projectId, 'HSX_PROJECT_ID');
72
- const controlPlaneUrl = explicitControlPlaneUrl;
73
- if (!deployId || !accountId || !projectId || !controlPlaneUrl) {
74
- return yield* Effect.fail(cliError('HSX_E_INTERNAL', 'Linked deploy promotion requires --deploy-id, --account-id/HSX_ACCOUNT_ID, --project-id/HSX_PROJECT_ID, and --control-plane-url/HSX_CONTROL_PLANE_URL.'));
77
+ const interactive = !opts.json && reporter.mode !== 'ndjson' && isInteractive();
78
+ if (!opts.yes && !interactive) {
79
+ return yield* Effect.fail(cliError('HSX_E_INPUT_INVALID', 'Promote requires explicit consent in machine or non-interactive mode. Re-run with --yes.'));
75
80
  }
76
- const userIdEnv = yield* Config.string('HSX_USER_ID').pipe(Config.withDefault(''), Effect.orDie);
81
+ const cwd = yield* Cwd;
82
+ const root = Option.getOrElse(opts.cwd, () => cwd);
83
+ const local = yield* Effect.promise(() => readLocalProjectContext(root));
84
+ const stored = yield* store.load;
85
+ const envAccountId = yield* configString('HSX_ACCOUNT_ID');
86
+ const explicitAccountId = Option.getOrUndefined(opts.accountId);
87
+ const accountId = resolveAccountId({
88
+ ...(explicitAccountId ? { explicitAccountId } : {}),
89
+ ...(envAccountId ? { envAccountId } : {}),
90
+ ...(local.projectBinding?.accountId
91
+ ? { localAccountId: local.projectBinding.accountId }
92
+ : {}),
93
+ ...(stored.defaultAccountId ? { defaultAccountId: stored.defaultAccountId } : {}),
94
+ });
95
+ const envProjectId = yield* configString('HSX_PROJECT_ID');
96
+ let projectId = resolveProjectId({
97
+ explicit: Option.getOrUndefined(opts.projectId),
98
+ env: envProjectId || undefined,
99
+ local,
100
+ })?.value;
101
+ let deployId = Option.getOrUndefined(opts.deployId);
102
+ const controlPlaneUrl = explicitControlPlaneUrl;
103
+ const userIdEnv = yield* configString('HSX_USER_ID');
77
104
  const userId = Option.getOrUndefined(opts.userId) ?? (userIdEnv || 'local-cli-user');
105
+ if (!accountId || !controlPlaneUrl || (!projectId && !interactive)) {
106
+ return yield* Effect.fail(missingPromoteContext());
107
+ }
78
108
  const headers = yield* controlPlane.authHeaders(userId);
109
+ if (!projectId) {
110
+ const projects = yield* Effect.tryPromise({
111
+ try: () => discoverProjects({
112
+ accountId,
113
+ controlPlane: controlPlaneAdapter({
114
+ controlPlaneUrl,
115
+ headers,
116
+ execute: (request) => Effect.runPromise(http.execute(request)),
117
+ }),
118
+ }),
119
+ catch: (cause) => cliError('HSX_E_INTERNAL', errorMessage(cause)),
120
+ });
121
+ const selected = yield* Effect.tryPromise({
122
+ try: () => resolveProjectSelection({
123
+ accountId,
124
+ projects,
125
+ allowPrompt: true,
126
+ prompts: { select: promptSelect },
127
+ message: 'Which project should be promoted?',
128
+ }),
129
+ catch: (cause) => cause,
130
+ }).pipe(Effect.catchIf((cause) => cause instanceof ProjectPickerCancelled, () => cancelPromote(reporter)), Effect.mapError((cause) => cause instanceof CliError ? cause : cliError('HSX_E_INTERNAL', errorMessage(cause))));
131
+ projectId = selected.id;
132
+ }
133
+ let reads;
134
+ if (!deployId || (!opts.yes && interactive)) {
135
+ reads = yield* fetchPromotionReadsEff({ controlPlaneUrl, projectId, headers });
136
+ }
137
+ if (!deployId && reads?.revisions) {
138
+ deployId = yield* Effect.tryPromise({
139
+ try: () => selectPromoteRevision(reads.revisions),
140
+ catch: (cause) => cause,
141
+ }).pipe(Effect.catchIf((cause) => cause instanceof ProjectPickerCancelled, () => cancelPromote(reporter)), Effect.mapError((cause) => cause instanceof CliError ? cause : cliError('HSX_E_INTERNAL', errorMessage(cause))));
142
+ }
143
+ if (!deployId)
144
+ return yield* Effect.fail(missingPromoteContext());
145
+ if (!opts.yes) {
146
+ const preview = formatPromotePreview({
147
+ projectId,
148
+ deployId,
149
+ ...(reads ? { reads } : {}),
150
+ });
151
+ yield* reporter.header(projectId);
152
+ yield* reporter.block(preview);
153
+ const confirmed = yield* Effect.promise(() => promptConfirm({
154
+ message: `Promote ${deployId} and move live traffic?`,
155
+ default: false,
156
+ }));
157
+ if (confirmed !== true)
158
+ return yield* cancelPromote(reporter);
159
+ }
79
160
  const promotion = yield* requestControlPlaneDeployPromotionEff({
80
161
  controlPlaneUrl,
81
162
  deployId,
@@ -94,20 +175,95 @@ function promoteBody(opts) {
94
175
  yield* reporter.raw(`${JSON.stringify(result, null, 2)}\n`);
95
176
  return;
96
177
  }
97
- yield* reporter.header(projectId);
178
+ if (opts.yes)
179
+ yield* reporter.header(projectId);
98
180
  const step = yield* reporter.step(`Promoted ${promotion.promoted.deployId}`);
99
181
  yield* step.ok();
100
182
  yield* reporter.done('Promoted');
101
183
  });
102
184
  }
103
- function resolveWithEnv(flag, envKey) {
185
+ function configString(key) {
186
+ return Config.string(key).pipe(Config.withDefault(''), Effect.orDie);
187
+ }
188
+ function missingPromoteContext() {
189
+ return cliError('HSX_E_INTERNAL', 'Linked deploy promotion requires --deploy-id, --account-id/HSX_ACCOUNT_ID, --project-id/HSX_PROJECT_ID (or a checkout binding), and --control-plane-url/HSX_CONTROL_PLANE_URL.');
190
+ }
191
+ function cancelPromote(reporter) {
192
+ return reporter.info('Cancelled.').pipe(Effect.flatMap(() => Effect.fail(exitWith(130))));
193
+ }
194
+ function controlPlaneAdapter(input) {
195
+ return {
196
+ request: ({ path, method, body }) => hostedHttp({
197
+ url: new URL(path, input.controlPlaneUrl),
198
+ ...(method ? { method } : {}),
199
+ headers: input.headers,
200
+ ...(body === undefined ? {} : { body }),
201
+ }, input.execute),
202
+ };
203
+ }
204
+ function fetchPromotionReadsEff(input) {
205
+ const encoded = encodeURIComponent(input.projectId);
206
+ return Effect.all({
207
+ revisions: fetchProjectReadEff(input, `/v1/projects/${encoded}/revisions`, schemas.ProjectRevisionRead),
208
+ drift: fetchProjectReadEff(input, `/v1/projects/${encoded}/drift`, schemas.DriftRead),
209
+ routing: fetchProjectReadEff(input, `/v1/projects/${encoded}/routing`, schemas.ProjectRoutingRead),
210
+ }, { concurrency: 3 }).pipe(Effect.map(({ revisions, drift, routing }) => ({
211
+ ...(revisions ? { revisions } : {}),
212
+ ...(drift ? { drift } : {}),
213
+ ...(routing ? { routing } : {}),
214
+ })));
215
+ }
216
+ function fetchProjectReadEff(input, path, schema) {
104
217
  return Effect.gen(function* () {
105
- const fromFlag = Option.getOrUndefined(flag);
106
- if (fromFlag)
107
- return fromFlag;
108
- const env = yield* Config.string(envKey).pipe(Config.withDefault(''), Effect.orDie);
109
- return env || undefined;
218
+ const http = yield* CliHttp;
219
+ const request = HttpClientRequest.make('GET')(new URL(path, input.controlPlaneUrl)).pipe(HttpClientRequest.setHeaders(input.headers));
220
+ const response = yield* http.execute(request);
221
+ if (!response.ok)
222
+ return undefined;
223
+ const body = yield* Effect.promise(() => response.json());
224
+ const decoded = Schema.decodeUnknownEither(schema)(body);
225
+ return decoded._tag === 'Right' ? decoded.right : undefined;
226
+ }).pipe(Effect.catchAll(() => Effect.succeed(undefined)));
227
+ }
228
+ export async function selectPromoteRevision(revisions, select = promptSelect) {
229
+ const ordered = [...revisions.revisions].sort((left, right) => right.recordedAt.localeCompare(left.recordedAt));
230
+ if (ordered.length === 0) {
231
+ throw new Error('No recorded deploys are available for this project. Run `hs-x deploy` first.');
232
+ }
233
+ const selected = await select({
234
+ message: `Which deploy should become active for ${revisions.projectId}?`,
235
+ options: ordered.map((record) => ({
236
+ value: record.deployId,
237
+ label: record.deployId,
238
+ description: `${record.recordedAt} · ${record.status}${record.deployId === revisions.activeDeployId ? ' · active' : ''}`,
239
+ })),
110
240
  });
241
+ if (selected === undefined)
242
+ throw new ProjectPickerCancelled();
243
+ return selected;
244
+ }
245
+ export function formatPromotePreview(input) {
246
+ const revisions = input.reads?.revisions;
247
+ const activeId = revisions?.activeDeployId;
248
+ const active = revisions?.revisions.find((record) => record.deployId === activeId);
249
+ const target = revisions?.revisions.find((record) => record.deployId === input.deployId);
250
+ const drift = input.reads?.drift?.deployId === input.deployId ? input.reads.drift : undefined;
251
+ const activeRoute = input.reads?.routing?.routes.find((route) => route.activeDeployId === activeId);
252
+ const environment = drift?.environment ?? (activeId === input.deployId ? activeRoute?.environment : undefined);
253
+ return [
254
+ 'Promotion preview',
255
+ `Environment: ${environment ?? 'unknown'}`,
256
+ `Health: ${drift?.state ?? 'unknown'}`,
257
+ `Active: ${formatDeployPreview(activeId, active, activeId)}`,
258
+ `Target: ${formatDeployPreview(input.deployId, target, activeId)}`,
259
+ ].join('\n');
260
+ }
261
+ function formatDeployPreview(deployId, record, activeId) {
262
+ if (!deployId)
263
+ return 'none';
264
+ const status = record?.status ?? 'unknown status';
265
+ const recorded = record?.recordedAt ?? 'recorded time unknown';
266
+ return `${deployId} · ${status} · ${recorded}${deployId === activeId ? ' · active' : ''}`;
111
267
  }
112
268
  /** Effect-native control-plane promote POST over `CliHttp`. */
113
269
  function requestControlPlaneDeployPromotionEff(input) {
@@ -132,7 +288,7 @@ function requestControlPlaneDeployPromotionEff(input) {
132
288
  });
133
289
  });
134
290
  }
135
- export async function deployPromoteCommand({ argv, json, }) {
291
+ export async function deployPromoteCommand({ argv, json, root = process.cwd(), }) {
136
292
  const commandName = argv[0] === 'promote' ? 'promote' : 'deploy promote';
137
293
  const explicitControlPlaneUrl = resolveFlag(argv, '--control-plane-url') ?? process.env.HSX_CONTROL_PLANE_URL;
138
294
  const linked = await isLinked();
@@ -158,20 +314,108 @@ export async function deployPromoteCommand({ argv, json, }) {
158
314
  }
159
315
  return { exitCode: 10 };
160
316
  }
161
- const deployId = resolveFlag(argv, '--deploy-id');
162
- const accountId = resolveFlag(argv, '--account-id') ?? process.env.HSX_ACCOUNT_ID;
163
- const projectId = resolveFlag(argv, '--project-id') ?? process.env.HSX_PROJECT_ID;
164
- const controlPlaneUrl = resolveFlag(argv, '--control-plane-url') ?? process.env.HSX_CONTROL_PLANE_URL;
165
- if (!deployId || !accountId || !projectId || !controlPlaneUrl) {
166
- throw new Error('Linked deploy promotion requires --deploy-id, --account-id/HSX_ACCOUNT_ID, --project-id/HSX_PROJECT_ID, and --control-plane-url/HSX_CONTROL_PLANE_URL.');
317
+ const interactive = !json && isInteractive();
318
+ const yes = hasFlag(argv, '--yes') || hasFlag(argv, '-y');
319
+ if (!yes && !interactive) {
320
+ throw new Error('Promote requires explicit consent in machine or non-interactive mode. Re-run with --yes.');
167
321
  }
168
- const promotion = await requestControlPlaneDeployPromotion({
169
- controlPlaneUrl,
170
- deployId,
171
- accountId,
172
- projectId,
173
- userId: resolveFlag(argv, '--user-id') ?? process.env.HSX_USER_ID ?? 'local-cli-user',
322
+ const local = await readLocalProjectContext(root);
323
+ const stored = await loadStore();
324
+ const explicitAccountId = resolveFlag(argv, '--account-id');
325
+ const accountId = resolveAccountId({
326
+ ...(explicitAccountId ? { explicitAccountId } : {}),
327
+ ...(process.env.HSX_ACCOUNT_ID ? { envAccountId: process.env.HSX_ACCOUNT_ID } : {}),
328
+ ...(local.projectBinding?.accountId ? { localAccountId: local.projectBinding.accountId } : {}),
329
+ ...(stored.defaultAccountId ? { defaultAccountId: stored.defaultAccountId } : {}),
174
330
  });
331
+ let projectId = resolveProjectId({
332
+ explicit: resolveFlag(argv, '--project-id') ?? resolveFlag(argv, '--project'),
333
+ env: process.env.HSX_PROJECT_ID,
334
+ local,
335
+ })?.value;
336
+ let deployId = resolveFlag(argv, '--deploy-id');
337
+ const controlPlaneUrl = resolveFlag(argv, '--control-plane-url') ?? process.env.HSX_CONTROL_PLANE_URL;
338
+ if (!accountId || !controlPlaneUrl || (!projectId && !interactive)) {
339
+ throw new Error(missingPromoteContext().message);
340
+ }
341
+ const userId = resolveFlag(argv, '--user-id') ?? process.env.HSX_USER_ID ?? 'local-cli-user';
342
+ const headers = await controlPlaneAuthHeaders(userId);
343
+ const reporter = json ? undefined : createReporter({ command: commandName, argv });
344
+ if (!projectId) {
345
+ try {
346
+ const projects = await discoverProjects({
347
+ accountId,
348
+ controlPlane: controlPlaneAdapter({ controlPlaneUrl, headers }),
349
+ });
350
+ projectId = (await resolveProjectSelection({
351
+ accountId,
352
+ projects,
353
+ allowPrompt: true,
354
+ prompts: { select: promptSelect },
355
+ message: 'Which project should be promoted?',
356
+ })).id;
357
+ }
358
+ catch (error) {
359
+ if (error instanceof ProjectPickerCancelled) {
360
+ reporter?.info('Cancelled.');
361
+ return { exitCode: 130 };
362
+ }
363
+ throw error;
364
+ }
365
+ }
366
+ if (!projectId)
367
+ throw new Error(missingPromoteContext().message);
368
+ let reads;
369
+ if (!deployId || (!yes && interactive)) {
370
+ reads = await fetchPromotionReads({ controlPlaneUrl, projectId, headers });
371
+ }
372
+ if (!deployId && reads?.revisions) {
373
+ try {
374
+ deployId = await selectPromoteRevision(reads.revisions);
375
+ }
376
+ catch (error) {
377
+ if (error instanceof ProjectPickerCancelled) {
378
+ reporter?.info('Cancelled.');
379
+ return { exitCode: 130 };
380
+ }
381
+ throw error;
382
+ }
383
+ }
384
+ if (!deployId)
385
+ throw new Error(missingPromoteContext().message);
386
+ if (!yes) {
387
+ reporter?.header(projectId);
388
+ reporter?.block(formatPromotePreview({ projectId, deployId, ...(reads ? { reads } : {}) }));
389
+ const confirmed = await promptConfirm({
390
+ message: `Promote ${deployId} and move live traffic?`,
391
+ default: false,
392
+ });
393
+ if (confirmed !== true) {
394
+ reporter?.info('Cancelled.');
395
+ return { exitCode: 130 };
396
+ }
397
+ }
398
+ // Start the step BEFORE the control-plane call so the promotion is visible
399
+ // while it runs; a failure resolves the step in place before the error
400
+ // surfaces. --json keeps its bespoke stdout payload untouched.
401
+ if (yes)
402
+ reporter?.header(projectId);
403
+ const promoteStep = reporter?.step(`Promoting ${deployId}`);
404
+ let promotion;
405
+ try {
406
+ promotion = await requestControlPlaneDeployPromotion({
407
+ controlPlaneUrl,
408
+ deployId,
409
+ accountId,
410
+ projectId,
411
+ userId,
412
+ headers,
413
+ });
414
+ }
415
+ catch (error) {
416
+ promoteStep?.fail((error instanceof Error ? error.message : String(error)).split('\n')[0]);
417
+ throw error;
418
+ }
175
419
  const result = {
176
420
  ok: true,
177
421
  command: commandName,
@@ -182,19 +426,17 @@ export async function deployPromoteCommand({ argv, json, }) {
182
426
  if (json) {
183
427
  process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
184
428
  }
185
- else {
186
- const reporter = createReporter({ command: commandName, argv });
187
- reporter.header(projectId);
188
- reporter.step(`Promoted ${promotion.promoted.deployId}`).ok();
429
+ else if (reporter) {
430
+ promoteStep?.ok(`now active: ${promotion.promoted.deployId}`);
189
431
  reporter.done('Promoted');
190
432
  }
191
433
  return { exitCode: 0 };
192
434
  }
193
- export async function requestControlPlaneDeployPromotion({ controlPlaneUrl, deployId, accountId, projectId, userId, }) {
435
+ export async function requestControlPlaneDeployPromotion({ controlPlaneUrl, deployId, accountId, projectId, userId, headers, }) {
194
436
  const response = await hostedHttp({
195
437
  url: new URL(`/v1/deploys/${encodeURIComponent(deployId)}/promote`, controlPlaneUrl),
196
438
  method: 'POST',
197
- headers: await controlPlaneAuthHeaders(userId),
439
+ headers: headers ?? (await controlPlaneAuthHeaders(userId)),
198
440
  body: { accountId, projectId },
199
441
  });
200
442
  const body = await response.json();
@@ -205,14 +447,45 @@ export async function requestControlPlaneDeployPromotion({ controlPlaneUrl, depl
205
447
  }
206
448
  return Schema.decodeUnknownSync(schemas.DeployPromotionResult)(body);
207
449
  }
208
- async function hostedHttp(input) {
450
+ async function fetchPromotionReads(input) {
451
+ const encoded = encodeURIComponent(input.projectId);
452
+ const read = async (path, schema) => {
453
+ try {
454
+ const response = await hostedHttp({
455
+ url: new URL(path, input.controlPlaneUrl),
456
+ headers: input.headers,
457
+ });
458
+ if (!response.ok)
459
+ return undefined;
460
+ const decoded = Schema.decodeUnknownEither(schema)(await response.json());
461
+ return decoded._tag === 'Right' ? decoded.right : undefined;
462
+ }
463
+ catch {
464
+ return undefined;
465
+ }
466
+ };
467
+ const [revisions, drift, routing] = await Promise.all([
468
+ read(`/v1/projects/${encoded}/revisions`, schemas.ProjectRevisionRead),
469
+ read(`/v1/projects/${encoded}/drift`, schemas.DriftRead),
470
+ read(`/v1/projects/${encoded}/routing`, schemas.ProjectRoutingRead),
471
+ ]);
472
+ return {
473
+ ...(revisions ? { revisions } : {}),
474
+ ...(drift ? { drift } : {}),
475
+ ...(routing ? { routing } : {}),
476
+ };
477
+ }
478
+ async function hostedHttp(input, execute = executeCliHttp) {
209
479
  const headers = { ...(input.headers ?? {}) };
210
480
  let request = HttpClientRequest.make(input.method ?? 'GET')(input.url).pipe(HttpClientRequest.setHeaders(headers));
211
481
  if (input.body !== undefined) {
212
482
  headers['content-type'] = headers['content-type'] ?? 'application/json';
213
483
  request = request.pipe(HttpClientRequest.setHeaders(headers), HttpClientRequest.bodyText(typeof input.body === 'string' ? input.body : JSON.stringify(input.body), headers['content-type']));
214
484
  }
215
- return executeCliHttp(request);
485
+ return execute(request);
486
+ }
487
+ function hasFlag(argv, flag) {
488
+ return argv.includes(flag);
216
489
  }
217
490
  function resolveFlag(argv, flag) {
218
491
  const index = argv.indexOf(flag);
@@ -227,6 +500,9 @@ function resolveFlag(argv, flag) {
227
500
  const value = found.slice(prefix.length);
228
501
  return value.length > 0 ? value : undefined;
229
502
  }
503
+ function errorMessage(cause) {
504
+ return cause instanceof Error ? cause.message : String(cause);
505
+ }
230
506
  function isRecord(value) {
231
507
  return typeof value === 'object' && value !== null;
232
508
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-promote.js","sourceRoot":"","sources":["../../src/commands/deploy-promote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-promote.js","sourceRoot":"","sources":["../../src/commands/deploy-promote.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,58 @@
1
+ import * as Command from '@effect/cli/Command';
1
2
  import { type WorkerManifest } from '@hs-x/codegen';
2
- import type { AppEventDeclaration, AppObjectAssociationDeclaration, AppObjectDeclaration, CardDefinition } from '@hs-x/types';
3
+ import type { AppAlertsConfiguration, AppEventBatchingConfiguration, AppEventDeclaration, AppObjectAssociationDeclaration, AppObjectDeclaration, AppRedactionConfiguration, CardDefinition, HubSpotRateLimitConfiguration, McpServerDefinition } from '@hs-x/types';
4
+ import { Schema, schemas } from '@hs-x/types';
3
5
  import type { AppBillingDeclaration } from '@hs-x/types';
4
- import * as Command from '@effect/cli/Command';
5
6
  import { Option } from 'effect';
6
- import { Cwd } from '../services/cwd.js';
7
7
  import type { CliResult } from '../result.js';
8
+ import { Cwd } from '../services/cwd.js';
9
+ /**
10
+ * Resolve the HubSpot credentials required by the runtime. OAuth installs need
11
+ * the client id + secret for `/oauth-start`; every card backend needs the
12
+ * client secret to verify HubSpot's v3 request signature, regardless of whether
13
+ * the app uses OAuth or static auth. When interactive, prompt for anything
14
+ * required and missing (only on the first worker, to avoid contending for stdin
15
+ * across concurrent worker deploys), then persist answers to the process env so
16
+ * sibling workers reuse them.
17
+ *
18
+ * OAuth-only bootstrap deploys retain the historical warning-only behavior
19
+ * because the Auth page may not exist until after upload. Card backends fail
20
+ * closed before the Worker deploy: shipping one without the HMAC key guarantees
21
+ * that every live `hubspot.fetch` returns 401.
22
+ */
23
+ /** @internal Exported for the deploy credential-gate regression suite. */
24
+ export declare function resolveHubSpotRuntimeCredentials(input: {
25
+ readonly auth: string;
26
+ readonly requiresCardSignatureSecret: boolean;
27
+ readonly dryRun: boolean;
28
+ readonly allowPrompt: boolean;
29
+ readonly hubSpotClientId: string | undefined;
30
+ readonly hubSpotClientSecret: string | undefined;
31
+ readonly authUrl?: string;
32
+ }): Promise<{
33
+ readonly clientId: string | undefined;
34
+ readonly clientSecret: string | undefined;
35
+ }>;
36
+ /** @internal Exported for the deploy credential-gate regression suite. */
37
+ export declare function requireHubSpotCardAppId(hubSpotAppId: HubSpotAppId | undefined, authUrl?: string): HubSpotAppId;
38
+ /**
39
+ * HubSpot cannot reveal an app secret after creation, but its token endpoint
40
+ * authenticates the client before rejecting a deliberately invalid auth code.
41
+ * Use that distinction to catch a copied secret from the wrong app before a
42
+ * Worker ships and turns every card request into a signature 401.
43
+ *
44
+ * No credential or response body is logged. `invalid_grant` (the expected
45
+ * dummy-code response) proves the client pair was accepted; `invalid_client`
46
+ * / BAD_CLIENT_* proves it was not.
47
+ *
48
+ * @internal Exported for the deploy credential-gate regression suite.
49
+ */
50
+ export declare function validateHubSpotClientCredentials(input: {
51
+ readonly clientId: string | undefined;
52
+ readonly clientSecret: string | undefined;
53
+ readonly authUrl?: string;
54
+ readonly fetchImpl?: typeof fetch;
55
+ }): Promise<void>;
8
56
  export declare function deployCommand({ argv, root, json, }: {
9
57
  readonly argv: readonly string[];
10
58
  readonly root: string;
@@ -31,6 +79,7 @@ interface CloudflareDeployResult {
31
79
  readonly deployId: string;
32
80
  readonly workers: readonly CloudflareWorkerDeployResult[];
33
81
  }
82
+ type HubSpotAppId = Schema.Schema.Type<typeof schemas.HubSpotAppId>;
34
83
  export declare function renderWranglerConfig(input: {
35
84
  readonly workerName: string;
36
85
  readonly entrypointPath: string;
@@ -45,8 +94,15 @@ export declare function renderWranglerConfig(input: {
45
94
  readonly checkpointDataset?: string;
46
95
  /** Enable Workers Logs ingestion (linked deploys; read by the dashboard tail). */
47
96
  readonly observability?: boolean;
97
+ /**
98
+ * ADR-023 S04 Cloudflare cron triggers: the deduplicated, normalized cron
99
+ * expressions generated from the worker's declared sync schedules. The
100
+ * generated `scheduled` handler dispatches the syncs for each fired
101
+ * expression.
102
+ */
103
+ readonly crons?: readonly string[];
48
104
  }): string;
49
- export declare function ensureHubSpotRuntimeProjectArtifacts({ argv, root, app, workers, cloudflareDeployResult, needsRuntime, controlPlanePlan, }: {
105
+ export declare function ensureHubSpotRuntimeProjectArtifacts({ argv, root, app, workers, cloudflareDeployResult, needsRuntime, controlPlanePlan, runtimeOrigin, }: {
50
106
  readonly argv: readonly string[];
51
107
  readonly root: string;
52
108
  readonly app: HsxAppConfig;
@@ -58,6 +114,8 @@ export declare function ensureHubSpotRuntimeProjectArtifacts({ argv, root, app,
58
114
  readonly oauthCallbackPath: string;
59
115
  };
60
116
  };
117
+ /** Explicit origin for the upload-first path, before a deploy URL exists. */
118
+ readonly runtimeOrigin?: string;
61
119
  }): Promise<void>;
62
120
  interface HsxAppConfig {
63
121
  readonly appName: string;
@@ -69,9 +127,15 @@ interface HsxAppConfig {
69
127
  readonly appObjects: readonly AppObjectDeclaration[];
70
128
  readonly appObjectAssociations: readonly AppObjectAssociationDeclaration[];
71
129
  readonly appEvents: readonly AppEventDeclaration[];
130
+ readonly appEventBatching?: AppEventBatchingConfiguration | false;
131
+ readonly rateLimits?: HubSpotRateLimitConfiguration;
132
+ readonly alerts?: AppAlertsConfiguration;
133
+ readonly redaction?: AppRedactionConfiguration;
72
134
  readonly cards: readonly CardDefinition[];
135
+ readonly mcpServers: readonly McpServerDefinition[];
73
136
  readonly billing?: AppBillingDeclaration;
74
137
  }
138
+ export declare function readHsxAppConfig(root: string): Promise<HsxAppConfig>;
75
139
  export declare const deployCmd: Command.Command<"deploy", Cwd, import("../cli-error.js").CliError, {
76
140
  readonly json: boolean;
77
141
  readonly cwd: Option.Option<string>;
@@ -110,6 +174,7 @@ export declare const deployCmd: Command.Command<"deploy", Cwd, import("../cli-er
110
174
  readonly applySchema: boolean;
111
175
  readonly heartbeat: boolean;
112
176
  readonly noHeartbeat: boolean;
177
+ readonly noRecord: boolean;
113
178
  readonly portalSchemaLive: boolean;
114
179
  readonly localHubspotSchema: boolean;
115
180
  readonly force: boolean;