@aligndottech/cli 0.50.0 → 0.51.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 (323) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +6 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/config.d.ts +8 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +33 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/connect-agents.d.ts.map +1 -1
  10. package/dist/commands/connect-agents.js +3 -1
  11. package/dist/commands/connect-agents.js.map +1 -1
  12. package/dist/commands/env.d.ts.map +1 -1
  13. package/dist/commands/env.js +11 -0
  14. package/dist/commands/env.js.map +1 -1
  15. package/dist/commands/invite.d.ts +8 -18
  16. package/dist/commands/invite.d.ts.map +1 -1
  17. package/dist/commands/invite.js +23 -46
  18. package/dist/commands/invite.js.map +1 -1
  19. package/dist/commands/join.d.ts +5 -0
  20. package/dist/commands/join.d.ts.map +1 -0
  21. package/dist/commands/join.js +49 -0
  22. package/dist/commands/join.js.map +1 -0
  23. package/dist/commands/local-relink.d.ts +35 -0
  24. package/dist/commands/local-relink.d.ts.map +1 -0
  25. package/dist/commands/local-relink.js +72 -0
  26. package/dist/commands/local-relink.js.map +1 -0
  27. package/dist/commands/local.d.ts.map +1 -1
  28. package/dist/commands/local.js +37 -0
  29. package/dist/commands/local.js.map +1 -1
  30. package/dist/commands/login.d.ts.map +1 -1
  31. package/dist/commands/login.js +21 -2
  32. package/dist/commands/login.js.map +1 -1
  33. package/dist/commands/mcp.d.ts +8 -0
  34. package/dist/commands/mcp.d.ts.map +1 -1
  35. package/dist/commands/mcp.js +12 -5
  36. package/dist/commands/mcp.js.map +1 -1
  37. package/dist/commands/registry.d.ts.map +1 -1
  38. package/dist/commands/registry.js +4 -0
  39. package/dist/commands/registry.js.map +1 -1
  40. package/dist/commands/share.d.ts.map +1 -1
  41. package/dist/commands/share.js +81 -12
  42. package/dist/commands/share.js.map +1 -1
  43. package/dist/commands/status.d.ts.map +1 -1
  44. package/dist/commands/status.js +10 -0
  45. package/dist/commands/status.js.map +1 -1
  46. package/dist/detector/detector-version.d.ts +16 -0
  47. package/dist/detector/detector-version.d.ts.map +1 -0
  48. package/dist/detector/detector-version.js +36 -0
  49. package/dist/detector/detector-version.js.map +1 -0
  50. package/dist/detector/relationship-contract.d.ts +30 -0
  51. package/dist/detector/relationship-contract.d.ts.map +1 -0
  52. package/dist/detector/relationship-contract.js +120 -0
  53. package/dist/detector/relationship-contract.js.map +1 -0
  54. package/dist/detector/relationship-contract.v1.json +53 -0
  55. package/dist/detector/relationship-prompt.d.ts +20 -0
  56. package/dist/detector/relationship-prompt.d.ts.map +1 -0
  57. package/dist/detector/relationship-prompt.js +55 -0
  58. package/dist/detector/relationship-prompt.js.map +1 -0
  59. package/dist/detector/relationship-prompt.v1.json +13 -0
  60. package/dist/detector/resolve-pair.d.ts +39 -0
  61. package/dist/detector/resolve-pair.d.ts.map +1 -0
  62. package/dist/detector/resolve-pair.js +345 -0
  63. package/dist/detector/resolve-pair.js.map +1 -0
  64. package/dist/detector/similar-item.d.ts +20 -0
  65. package/dist/detector/similar-item.d.ts.map +1 -0
  66. package/dist/detector/similar-item.js +16 -0
  67. package/dist/detector/similar-item.js.map +1 -0
  68. package/dist/index.js +29 -11
  69. package/dist/index.js.map +1 -1
  70. package/dist/lib/advisory-dedup.d.ts.map +1 -1
  71. package/dist/lib/advisory-dedup.js +16 -8
  72. package/dist/lib/advisory-dedup.js.map +1 -1
  73. package/dist/lib/advisory-verdict.d.ts +19 -0
  74. package/dist/lib/advisory-verdict.d.ts.map +1 -1
  75. package/dist/lib/advisory-verdict.js +6 -3
  76. package/dist/lib/advisory-verdict.js.map +1 -1
  77. package/dist/lib/backup-exclusion.d.ts +10 -0
  78. package/dist/lib/backup-exclusion.d.ts.map +1 -0
  79. package/dist/lib/backup-exclusion.js +58 -0
  80. package/dist/lib/backup-exclusion.js.map +1 -0
  81. package/dist/lib/cli-oauth.d.ts +2 -0
  82. package/dist/lib/cli-oauth.d.ts.map +1 -1
  83. package/dist/lib/cli-oauth.js +61 -10
  84. package/dist/lib/cli-oauth.js.map +1 -1
  85. package/dist/lib/config.d.ts +41 -1
  86. package/dist/lib/config.d.ts.map +1 -1
  87. package/dist/lib/config.js +106 -1
  88. package/dist/lib/config.js.map +1 -1
  89. package/dist/lib/curation/guardrail.d.ts.map +1 -1
  90. package/dist/lib/curation/guardrail.js +2 -0
  91. package/dist/lib/curation/guardrail.js.map +1 -1
  92. package/dist/lib/curation/judgements-db.d.ts +1 -0
  93. package/dist/lib/curation/judgements-db.d.ts.map +1 -1
  94. package/dist/lib/curation/judgements-db.js +9 -3
  95. package/dist/lib/curation/judgements-db.js.map +1 -1
  96. package/dist/lib/curation/mark.js +4 -2
  97. package/dist/lib/curation/mark.js.map +1 -1
  98. package/dist/lib/destination-name.d.ts +24 -0
  99. package/dist/lib/destination-name.d.ts.map +1 -0
  100. package/dist/lib/destination-name.js +39 -0
  101. package/dist/lib/destination-name.js.map +1 -0
  102. package/dist/lib/destination-summary.d.ts +6 -0
  103. package/dist/lib/destination-summary.d.ts.map +1 -0
  104. package/dist/lib/destination-summary.js +27 -0
  105. package/dist/lib/destination-summary.js.map +1 -0
  106. package/dist/lib/destination-trust.d.ts +54 -0
  107. package/dist/lib/destination-trust.d.ts.map +1 -0
  108. package/dist/lib/destination-trust.js +107 -0
  109. package/dist/lib/destination-trust.js.map +1 -0
  110. package/dist/lib/env-resolver.d.ts.map +1 -1
  111. package/dist/lib/env-resolver.js +3 -0
  112. package/dist/lib/env-resolver.js.map +1 -1
  113. package/dist/lib/fatal.d.ts +11 -0
  114. package/dist/lib/fatal.d.ts.map +1 -0
  115. package/dist/lib/fatal.js +22 -0
  116. package/dist/lib/fatal.js.map +1 -0
  117. package/dist/lib/gateway-client.d.ts +8 -16
  118. package/dist/lib/gateway-client.d.ts.map +1 -1
  119. package/dist/lib/gateway-client.js +30 -20
  120. package/dist/lib/gateway-client.js.map +1 -1
  121. package/dist/lib/invite-prompt.d.ts +4 -4
  122. package/dist/lib/invite-prompt.d.ts.map +1 -1
  123. package/dist/lib/invite-prompt.js +4 -4
  124. package/dist/lib/invite-prompt.js.map +1 -1
  125. package/dist/lib/invite-settings.d.ts +18 -0
  126. package/dist/lib/invite-settings.d.ts.map +1 -0
  127. package/dist/lib/invite-settings.js +29 -0
  128. package/dist/lib/invite-settings.js.map +1 -0
  129. package/dist/lib/join-flow.d.ts +60 -0
  130. package/dist/lib/join-flow.d.ts.map +1 -0
  131. package/dist/lib/join-flow.js +282 -0
  132. package/dist/lib/join-flow.js.map +1 -0
  133. package/dist/lib/launch/mcp-child-env.d.ts.map +1 -1
  134. package/dist/lib/launch/mcp-child-env.js +5 -2
  135. package/dist/lib/launch/mcp-child-env.js.map +1 -1
  136. package/dist/lib/lead-prompt.d.ts +106 -0
  137. package/dist/lib/lead-prompt.d.ts.map +1 -0
  138. package/dist/lib/lead-prompt.js +175 -0
  139. package/dist/lib/lead-prompt.js.map +1 -0
  140. package/dist/lib/local-candidate-classify.d.ts +26 -0
  141. package/dist/lib/local-candidate-classify.d.ts.map +1 -0
  142. package/dist/lib/local-candidate-classify.js +53 -0
  143. package/dist/lib/local-candidate-classify.js.map +1 -0
  144. package/dist/lib/local-db-migrate.d.ts +1 -1
  145. package/dist/lib/local-db-migrate.d.ts.map +1 -1
  146. package/dist/lib/local-db-migrate.js +45 -1
  147. package/dist/lib/local-db-migrate.js.map +1 -1
  148. package/dist/lib/local-db-v12.d.ts +17 -0
  149. package/dist/lib/local-db-v12.d.ts.map +1 -0
  150. package/dist/lib/local-db-v12.js +8 -0
  151. package/dist/lib/local-db-v12.js.map +1 -0
  152. package/dist/lib/local-db.d.ts +13 -13
  153. package/dist/lib/local-db.d.ts.map +1 -1
  154. package/dist/lib/local-db.js +41 -6
  155. package/dist/lib/local-db.js.map +1 -1
  156. package/dist/lib/local-gateway-client.d.ts +1 -0
  157. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  158. package/dist/lib/local-gateway-client.js +31 -20
  159. package/dist/lib/local-gateway-client.js.map +1 -1
  160. package/dist/lib/local-ingest.d.ts +2 -0
  161. package/dist/lib/local-ingest.d.ts.map +1 -1
  162. package/dist/lib/local-ingest.js.map +1 -1
  163. package/dist/lib/local-link-pass.d.ts.map +1 -1
  164. package/dist/lib/local-link-pass.js +25 -29
  165. package/dist/lib/local-link-pass.js.map +1 -1
  166. package/dist/lib/local-llm.d.ts +1 -1
  167. package/dist/lib/local-llm.d.ts.map +1 -1
  168. package/dist/lib/local-llm.js +3 -2
  169. package/dist/lib/local-llm.js.map +1 -1
  170. package/dist/lib/local-mode.d.ts +5 -1
  171. package/dist/lib/local-mode.d.ts.map +1 -1
  172. package/dist/lib/local-mode.js +11 -6
  173. package/dist/lib/local-mode.js.map +1 -1
  174. package/dist/lib/local-relationship-classifier.d.ts +4 -0
  175. package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
  176. package/dist/lib/local-relationship-classifier.js +9 -4
  177. package/dist/lib/local-relationship-classifier.js.map +1 -1
  178. package/dist/lib/local-relink.d.ts +59 -0
  179. package/dist/lib/local-relink.d.ts.map +1 -0
  180. package/dist/lib/local-relink.js +171 -0
  181. package/dist/lib/local-relink.js.map +1 -0
  182. package/dist/lib/local-set-classifier.d.ts +36 -0
  183. package/dist/lib/local-set-classifier.d.ts.map +1 -0
  184. package/dist/lib/local-set-classifier.js +81 -0
  185. package/dist/lib/local-set-classifier.js.map +1 -0
  186. package/dist/lib/local-snapshot-loader.d.ts +29 -0
  187. package/dist/lib/local-snapshot-loader.d.ts.map +1 -0
  188. package/dist/lib/local-snapshot-loader.js +108 -0
  189. package/dist/lib/local-snapshot-loader.js.map +1 -0
  190. package/dist/lib/login-flow.d.ts +15 -0
  191. package/dist/lib/login-flow.d.ts.map +1 -1
  192. package/dist/lib/login-flow.js +80 -4
  193. package/dist/lib/login-flow.js.map +1 -1
  194. package/dist/lib/mcp/share-status-tool.d.ts +13 -0
  195. package/dist/lib/mcp/share-status-tool.d.ts.map +1 -0
  196. package/dist/lib/mcp/share-status-tool.js +116 -0
  197. package/dist/lib/mcp/share-status-tool.js.map +1 -0
  198. package/dist/lib/mcp/share-tool.d.ts +18 -14
  199. package/dist/lib/mcp/share-tool.d.ts.map +1 -1
  200. package/dist/lib/mcp/share-tool.js +127 -21
  201. package/dist/lib/mcp/share-tool.js.map +1 -1
  202. package/dist/lib/model-cache.d.ts +10 -0
  203. package/dist/lib/model-cache.d.ts.map +1 -0
  204. package/dist/lib/model-cache.js +35 -0
  205. package/dist/lib/model-cache.js.map +1 -0
  206. package/dist/lib/next-step.d.ts.map +1 -1
  207. package/dist/lib/next-step.js +2 -1
  208. package/dist/lib/next-step.js.map +1 -1
  209. package/dist/lib/private-files.d.ts +33 -0
  210. package/dist/lib/private-files.d.ts.map +1 -0
  211. package/dist/lib/private-files.js +96 -0
  212. package/dist/lib/private-files.js.map +1 -0
  213. package/dist/lib/redaction-notice.d.ts +7 -0
  214. package/dist/lib/redaction-notice.d.ts.map +1 -0
  215. package/dist/lib/redaction-notice.js +32 -0
  216. package/dist/lib/redaction-notice.js.map +1 -0
  217. package/dist/lib/relink-estimate.d.ts +16 -0
  218. package/dist/lib/relink-estimate.d.ts.map +1 -0
  219. package/dist/lib/relink-estimate.js +30 -0
  220. package/dist/lib/relink-estimate.js.map +1 -0
  221. package/dist/lib/resolve-env.d.ts +15 -1
  222. package/dist/lib/resolve-env.d.ts.map +1 -1
  223. package/dist/lib/resolve-env.js +27 -7
  224. package/dist/lib/resolve-env.js.map +1 -1
  225. package/dist/lib/scope-defaults.d.ts.map +1 -1
  226. package/dist/lib/scope-defaults.js +2 -0
  227. package/dist/lib/scope-defaults.js.map +1 -1
  228. package/dist/lib/scope-real.d.ts +57 -0
  229. package/dist/lib/scope-real.d.ts.map +1 -1
  230. package/dist/lib/setup-route.d.ts +4 -2
  231. package/dist/lib/setup-route.d.ts.map +1 -1
  232. package/dist/lib/setup-route.js +12 -6
  233. package/dist/lib/setup-route.js.map +1 -1
  234. package/dist/lib/share/approval.d.ts +71 -0
  235. package/dist/lib/share/approval.d.ts.map +1 -0
  236. package/dist/lib/share/approval.js +139 -0
  237. package/dist/lib/share/approval.js.map +1 -0
  238. package/dist/lib/share/approve-link.d.ts +31 -0
  239. package/dist/lib/share/approve-link.d.ts.map +1 -0
  240. package/dist/lib/share/approve-link.js +46 -0
  241. package/dist/lib/share/approve-link.js.map +1 -0
  242. package/dist/lib/share/browser-flow.d.ts +85 -0
  243. package/dist/lib/share/browser-flow.d.ts.map +1 -0
  244. package/dist/lib/share/browser-flow.js +168 -0
  245. package/dist/lib/share/browser-flow.js.map +1 -0
  246. package/dist/lib/share/command.d.ts +34 -1
  247. package/dist/lib/share/command.d.ts.map +1 -1
  248. package/dist/lib/share/command.js +153 -11
  249. package/dist/lib/share/command.js.map +1 -1
  250. package/dist/lib/share/delivery-options.d.ts +15 -0
  251. package/dist/lib/share/delivery-options.d.ts.map +1 -0
  252. package/dist/lib/share/delivery-options.js +16 -0
  253. package/dist/lib/share/delivery-options.js.map +1 -0
  254. package/dist/lib/share/delivery.d.ts +83 -0
  255. package/dist/lib/share/delivery.d.ts.map +1 -0
  256. package/dist/lib/share/delivery.js +134 -0
  257. package/dist/lib/share/delivery.js.map +1 -0
  258. package/dist/lib/share/envelope.d.ts +61 -0
  259. package/dist/lib/share/envelope.d.ts.map +1 -0
  260. package/dist/lib/share/envelope.js +99 -0
  261. package/dist/lib/share/envelope.js.map +1 -0
  262. package/dist/lib/share/ledger.d.ts.map +1 -1
  263. package/dist/lib/share/ledger.js +3 -1
  264. package/dist/lib/share/ledger.js.map +1 -1
  265. package/dist/lib/share/payload.d.ts +9 -0
  266. package/dist/lib/share/payload.d.ts.map +1 -1
  267. package/dist/lib/share/payload.js +9 -0
  268. package/dist/lib/share/payload.js.map +1 -1
  269. package/dist/lib/share/pending.d.ts +47 -1
  270. package/dist/lib/share/pending.d.ts.map +1 -1
  271. package/dist/lib/share/pending.js +139 -13
  272. package/dist/lib/share/pending.js.map +1 -1
  273. package/dist/lib/share/preview.d.ts +5 -1
  274. package/dist/lib/share/preview.d.ts.map +1 -1
  275. package/dist/lib/share/preview.js +3 -1
  276. package/dist/lib/share/preview.js.map +1 -1
  277. package/dist/lib/share/qr.d.ts +13 -0
  278. package/dist/lib/share/qr.d.ts.map +1 -0
  279. package/dist/lib/share/qr.js +77 -0
  280. package/dist/lib/share/qr.js.map +1 -0
  281. package/dist/lib/share/requests-client.d.ts +63 -0
  282. package/dist/lib/share/requests-client.d.ts.map +1 -0
  283. package/dist/lib/share/requests-client.js +69 -0
  284. package/dist/lib/share/requests-client.js.map +1 -0
  285. package/dist/lib/share/run.d.ts +20 -1
  286. package/dist/lib/share/run.d.ts.map +1 -1
  287. package/dist/lib/share/run.js +27 -10
  288. package/dist/lib/share/run.js.map +1 -1
  289. package/dist/lib/share/secret-scan.d.ts +5 -0
  290. package/dist/lib/share/secret-scan.d.ts.map +1 -1
  291. package/dist/lib/share/secret-scan.js +43 -2
  292. package/dist/lib/share/secret-scan.js.map +1 -1
  293. package/dist/lib/share/target.d.ts +38 -0
  294. package/dist/lib/share/target.d.ts.map +1 -0
  295. package/dist/lib/share/target.js +80 -0
  296. package/dist/lib/share/target.js.map +1 -0
  297. package/dist/lib/share/tty.d.ts +8 -0
  298. package/dist/lib/share/tty.d.ts.map +1 -1
  299. package/dist/lib/share/tty.js +45 -0
  300. package/dist/lib/share/tty.js.map +1 -1
  301. package/dist/lib/source-sync-state.d.ts.map +1 -1
  302. package/dist/lib/source-sync-state.js +2 -0
  303. package/dist/lib/source-sync-state.js.map +1 -1
  304. package/dist/lib/sync/blocked.d.ts.map +1 -1
  305. package/dist/lib/sync/blocked.js +2 -1
  306. package/dist/lib/sync/blocked.js.map +1 -1
  307. package/dist/lib/sync/classify.d.ts.map +1 -1
  308. package/dist/lib/sync/classify.js +2 -0
  309. package/dist/lib/sync/classify.js.map +1 -1
  310. package/dist/lib/sync/real-env.d.ts +57 -0
  311. package/dist/lib/sync/real-env.d.ts.map +1 -1
  312. package/dist/lib/sync/sync-state.d.ts.map +1 -1
  313. package/dist/lib/sync/sync-state.js +3 -1
  314. package/dist/lib/sync/sync-state.js.map +1 -1
  315. package/dist/lib/usage-telemetry.d.ts +2 -2
  316. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  317. package/dist/lib/usage-telemetry.js +21 -3
  318. package/dist/lib/usage-telemetry.js.map +1 -1
  319. package/package.json +4 -2
  320. package/dist/lib/personal-email-domains.d.ts +0 -8
  321. package/dist/lib/personal-email-domains.d.ts.map +0 -1
  322. package/dist/lib/personal-email-domains.js +0 -39
  323. package/dist/lib/personal-email-domains.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve-link.js","sourceRoot":"","sources":["../../../src/lib/share/approve-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * ALI-1540: `align share` when the person approves in a browser instead of typing y.
3
+ *
4
+ * For each request (at most SHARE_BATCH_ITEMS decisions, and small enough to seal): stage it, print the link and the
5
+ * code, wait, and when the gateway says the person approved, send the approved bytes. The link carries the key in
6
+ * its `#k=` fragment; this module prints it to the terminal the person is at and keeps it nowhere else (the MCP
7
+ * path stores it 0600 in the pending directory; this one holds it in memory).
8
+ *
9
+ * What a run from inside an agent can do here: stage and wait. Its own CLI token cannot approve: the gateway
10
+ * refuses it on the approve route. That is why this path, unlike the typed one, is allowed when ALIGN_WRAPPED is set. It is
11
+ * not a lock: SECURITY.md lists how an agent can still obtain a session.
12
+ */
13
+ import { type PollDeps } from './approval.js';
14
+ import { type RequestKind } from './envelope.js';
15
+ import type { SharePayload } from './payload.js';
16
+ import { type Prepared, type SendHooks, type ShareContext } from './run.js';
17
+ import type { ShareRequestsApi } from './requests-client.js';
18
+ import type { BatchResponse } from './wire.js';
19
+ import { type DeliveryPlan, type PresentDeps } from './delivery.js';
20
+ export interface BrowserFlowDeps extends Omit<PollDeps, 'client'> {
21
+ client: ShareRequestsApi;
22
+ appUrl: string;
23
+ /** This machine's label, shown on the page as client-claimed. */
24
+ label: string;
25
+ agent?: string;
26
+ /** Try to open the link here. The link is printed either way. */
27
+ openUrl?: (url: string, appUrl: string) => Promise<boolean>;
28
+ /** What to do with the link (open, QR). Absent: open when `openUrl` is given, never a QR. */
29
+ plan?: DeliveryPlan;
30
+ /** Build the QR lines for a link. */
31
+ qr?: PresentDeps['qr'];
32
+ /** Terminal width, when known. */
33
+ columns?: number;
34
+ /** --copy */
35
+ copy?: (url: string) => void;
36
+ /** Unfiltered output for the QR lines (they carry colour escapes that `out` would neutralise). */
37
+ raw?: (line: string) => void;
38
+ out: (line: string) => void;
39
+ err: (line: string) => void;
40
+ }
41
+ /** Split into requests of at most SHARE_BATCH_ITEMS decisions that each seal under the size cap. */
42
+ export declare function groupForApproval(payloads: readonly SharePayload[], to: {
43
+ tenantId: string;
44
+ userId: string;
45
+ gatewayUrl: string;
46
+ }): SharePayload[][];
47
+ export type StepResult = {
48
+ ok: true;
49
+ response: BatchResponse;
50
+ } | {
51
+ ok: false;
52
+ exit: number;
53
+ };
54
+ /** One request, end to end: stage, show the link, wait, and send the approved bytes. Prints what happened. */
55
+ export declare function approveOne(d: BrowserFlowDeps, to: {
56
+ tenantId: string;
57
+ userId: string;
58
+ gatewayUrl: string;
59
+ }, spec: {
60
+ kind: RequestKind;
61
+ payloads: readonly SharePayload[];
62
+ confirm?: {
63
+ remoteId: string;
64
+ teamTextHash: string;
65
+ };
66
+ heading?: string;
67
+ tail?: string;
68
+ }): Promise<StepResult>;
69
+ /**
70
+ * The hooks that make `send` use the approvals: the first post of a group is the completion already in hand, and a
71
+ * matched share that waits on the team's text asks for a SECOND approval (kind confirm_team_text), whose page shows
72
+ * the team's text and refuses when its hash is not the one carried here.
73
+ */
74
+ export declare function approvalHooks(d: BrowserFlowDeps, to: {
75
+ tenantId: string;
76
+ userId: string;
77
+ gatewayUrl: string;
78
+ }, firstResponse: BatchResponse): SendHooks;
79
+ /**
80
+ * Run every group through approval and `send`, printing each group's results as soon as they are known (a later
81
+ * group that fails must not hide an earlier one that landed). Stops at the first group that is not approved.
82
+ * Returns the exit code.
83
+ */
84
+ export declare function runBrowserShare(ctx: ShareContext, prep: Prepared, d: BrowserFlowDeps): Promise<number>;
85
+ //# sourceMappingURL=browser-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-flow.d.ts","sourceRoot":"","sources":["../../../src/lib/share/browser-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * ALI-1540: `align share` when the person approves in a browser instead of typing y.
3
+ *
4
+ * For each request (at most SHARE_BATCH_ITEMS decisions, and small enough to seal): stage it, print the link and the
5
+ * code, wait, and when the gateway says the person approved, send the approved bytes. The link carries the key in
6
+ * its `#k=` fragment; this module prints it to the terminal the person is at and keeps it nowhere else (the MCP
7
+ * path stores it 0600 in the pending directory; this one holds it in memory).
8
+ *
9
+ * What a run from inside an agent can do here: stage and wait. Its own CLI token cannot approve: the gateway
10
+ * refuses it on the approve route. That is why this path, unlike the typed one, is allowed when ALIGN_WRAPPED is set. It is
11
+ * not a lock: SECURITY.md lists how an agent can still obtain a session.
12
+ */
13
+ import { approveUrl, completeRequest, CompletionError, pollUntilDecided, stageRequest } from './approval.js';
14
+ import { buildPlaintext, MAX_PLAINTEXT_BYTES } from './envelope.js';
15
+ import { renderResults, send, SHARE_BATCH_ITEMS, ShareError } from './run.js';
16
+ import { presentLink } from './delivery.js';
17
+ import { visible } from './visible.js';
18
+ /** Split into requests of at most SHARE_BATCH_ITEMS decisions that each seal under the size cap. */
19
+ export function groupForApproval(payloads, to) {
20
+ const size = (g) => buildPlaintext({ kind: 'share', ...to, payloads: g }).length;
21
+ // A matched share is followed by a SECOND request (confirm_team_text) for the same item, which carries the `confirm` block and a
22
+ // 64-character hash on every judgement. Size an item by the larger of the two, so the second request cannot be too big after the first landed.
23
+ const confirmSize = (p) => {
24
+ const withHash = { ...p, item: { ...p.item, judgements: p.item.judgements.map((j) => ({ ...j, confirm_team_text_hash: 'f'.repeat(64) })) } };
25
+ return buildPlaintext({ kind: 'confirm_team_text', ...to, payloads: [withHash], confirm: { remoteId: 'f'.repeat(64), teamTextHash: 'f'.repeat(64) } }).length;
26
+ };
27
+ const groups = [];
28
+ let cur = [];
29
+ for (const p of payloads) {
30
+ if (Math.max(size([p]), confirmSize(p)) > MAX_PLAINTEXT_BYTES)
31
+ throw new ShareError(`"${visible(p.item.title)}" is too large to approve in one request (${Math.max(size([p]), confirmSize(p))} bytes sealed, the limit is ${MAX_PLAINTEXT_BYTES}). Nothing was sent. Shorten its text or its notes, then share again.`);
32
+ if (cur.length > 0 && (cur.length >= SHARE_BATCH_ITEMS || size([...cur, p]) > MAX_PLAINTEXT_BYTES)) {
33
+ groups.push(cur);
34
+ cur = [];
35
+ }
36
+ cur.push(p);
37
+ }
38
+ if (cur.length)
39
+ groups.push(cur);
40
+ return groups;
41
+ }
42
+ const minutesLeft = (expiresAt, now) => Math.max(1, Math.round((Date.parse(expiresAt) - now) / 60000));
43
+ /** One request, end to end: stage, show the link, wait, and send the approved bytes. Prints what happened. */
44
+ export async function approveOne(d, to, spec) {
45
+ // What may be said about this step: for the first request nothing has been sent; for a confirmation or a later request, something already was.
46
+ const tail = spec.tail ?? 'Nothing was sent.';
47
+ if (d.signal?.aborted) {
48
+ d.err(`Cancelled before it was staged. ${tail}`);
49
+ return { ok: false, exit: 130 };
50
+ }
51
+ const plaintext = buildPlaintext({ kind: spec.kind, ...to, payloads: spec.payloads, ...(spec.confirm ? { confirm: spec.confirm } : {}) });
52
+ const staged = await stageRequest(d.client, {
53
+ kind: spec.kind, plaintext, tenantId: to.tenantId, userId: to.userId,
54
+ itemCount: spec.payloads.length, judgementCount: spec.payloads.reduce((n, p) => n + p.item.judgements.length, 0),
55
+ label: d.label, ...(d.agent ? { agent: d.agent } : {}),
56
+ }, undefined, d.signal);
57
+ const url = approveUrl(d.appUrl, staged.id, staged.keyB64Url);
58
+ if (spec.heading)
59
+ d.out(spec.heading);
60
+ d.out(`Approve in your browser: ${url}`);
61
+ d.out(`Code: ${staged.userCode} (the page shows the same code. Check they match before you approve.)`);
62
+ d.out(`The link opens on any device where you are signed in to Align. It expires in ${minutesLeft(staged.expiresAt, d.now())} minutes. Nothing is sent until you approve.`);
63
+ await presentLink(url, {
64
+ appUrl: d.appUrl, plan: d.plan ?? { open: d.openUrl !== undefined, qr: false, qrIfOpenFails: false, why: 'default' },
65
+ ...(d.openUrl ? { openUrl: d.openUrl } : {}), ...(d.qr ? { qr: d.qr } : {}), ...(d.columns !== undefined ? { columns: d.columns } : {}),
66
+ ...(d.copy ? { copy: d.copy } : {}), out: d.out, raw: d.raw ?? d.out,
67
+ });
68
+ d.out('Waiting for your approval. Ctrl-C cancels the request.');
69
+ const decision = await pollUntilDecided(staged.id, staged.expiresAt, d);
70
+ switch (decision) {
71
+ case 'approved': break;
72
+ case 'declined':
73
+ d.out(`Declined in your browser. ${tail}`);
74
+ return { ok: false, exit: 0 };
75
+ case 'expired':
76
+ d.err(`The request expired before it was approved. ${tail} Run the share again to start a new one.`);
77
+ return { ok: false, exit: 1 };
78
+ case 'cancelled':
79
+ d.err(`The request was cancelled. ${tail}`);
80
+ return { ok: false, exit: 1 };
81
+ case 'failed':
82
+ d.err(`The gateway marked the request as failed. ${tail} Run the share again.`);
83
+ return { ok: false, exit: 1 };
84
+ case 'aborted': {
85
+ const cancelled = await d.client.cancelShareRequest(staged.id).then(() => true, () => false);
86
+ d.err(cancelled
87
+ ? `Cancelled the request. ${tail}`
88
+ : 'Could not reach the gateway to cancel. The request expires on its own. Nothing can be sent from it, because only this run could finish it and this run has stopped.');
89
+ return { ok: false, exit: 130 };
90
+ }
91
+ }
92
+ d.out('Approved in your browser. Sending...');
93
+ return { ok: true, response: await completeRequest(d.client, staged.id, staged.bytesB64) };
94
+ }
95
+ /**
96
+ * The hooks that make `send` use the approvals: the first post of a group is the completion already in hand, and a
97
+ * matched share that waits on the team's text asks for a SECOND approval (kind confirm_team_text), whose page shows
98
+ * the team's text and refuses when its hash is not the one carried here.
99
+ */
100
+ export function approvalHooks(d, to, firstResponse) {
101
+ let first = true;
102
+ return {
103
+ confirmByApproval: true,
104
+ post: async (batch, phase, confirm) => {
105
+ if (phase === 'share') {
106
+ if (!first)
107
+ throw new ShareError('Internal error: a group was posted twice.');
108
+ first = false;
109
+ return firstResponse;
110
+ }
111
+ d.out('\nYour ratification would sit on the team\'s existing text, so that needs its own approval.');
112
+ const tail = 'The share itself already went through; your ratify is not confirmed. Run the share again to retry.';
113
+ try {
114
+ const step = await approveOne(d, to, { kind: 'confirm_team_text', payloads: batch, tail, ...(confirm ? { confirm } : {}) });
115
+ return step.ok ? step.response : null;
116
+ }
117
+ catch (e) {
118
+ // The first request already landed and is recorded: a failure here (the server's live-request cap, three failed reads, a
119
+ // completion with no verdict) must not turn the run into a report that nothing happened.
120
+ const why = e instanceof CompletionError ? (e.sent === 'maybe' ? 'the gateway did not say whether it finished; check your team graph' : 'the gateway refused it') : visible(e.message);
121
+ d.err(`The confirmation of the team's text did not finish (${why}). ${tail}`);
122
+ return null;
123
+ }
124
+ },
125
+ };
126
+ }
127
+ /**
128
+ * Run every group through approval and `send`, printing each group's results as soon as they are known (a later
129
+ * group that fails must not hide an earlier one that landed). Stops at the first group that is not approved.
130
+ * Returns the exit code.
131
+ */
132
+ export async function runBrowserShare(ctx, prep, d) {
133
+ if (prep.userId === null)
134
+ throw new ShareError('The gateway did not say who you are signed in as, so a request cannot be sealed to you. Nothing was staged. Run: align login');
135
+ const to = { tenantId: prep.tenantId, userId: prep.userId, gatewayUrl: prep.gatewayUrl };
136
+ const groups = groupForApproval(prep.payloads, to);
137
+ let failed = false;
138
+ let landed = 0;
139
+ for (const [i, group] of groups.entries()) {
140
+ const heading = groups.length > 1 ? `\nRequest ${i + 1} of ${groups.length} (${group.length} decision${group.length === 1 ? '' : 's'}):` : undefined;
141
+ let step;
142
+ try {
143
+ step = await approveOne(d, to, { kind: 'share', payloads: group, ...(heading ? { heading } : {}), ...(landed ? { tail: 'Nothing more was sent (the earlier requests in this run were).' } : {}) });
144
+ }
145
+ catch (e) {
146
+ if (landed === 0)
147
+ throw e;
148
+ // Earlier requests are on the team graph and printed above: say this one failed, not that the run sent nothing.
149
+ throw new ShareError(`${e.message} (That is about this request only: ${landed} earlier request${landed === 1 ? ' was' : 's were'} sent, see above.)`);
150
+ }
151
+ if (!step.ok)
152
+ return failed ? 1 : step.exit;
153
+ landed += 1;
154
+ let rows;
155
+ try {
156
+ rows = await send(ctx, { ...prep, payloads: group }, approvalHooks(d, to, step.response));
157
+ }
158
+ catch (e) {
159
+ d.err(`The gateway completed this request, so it is on your team graph, but this run could not finish recording it (${visible(e.message)}). \`align share --retract\` may not find it until you share the same decision again. That is safe: it will not make a second copy.`);
160
+ return 1;
161
+ }
162
+ d.out(`\n${renderResults(rows)}`);
163
+ if (rows.some((r) => r.outcome.kind === 'refused' || r.outcome.kind === 'unknown'))
164
+ failed = true;
165
+ }
166
+ return failed ? 1 : 0;
167
+ }
168
+ //# sourceMappingURL=browser-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-flow.js","sourceRoot":"","sources":["../../../src/lib/share/browser-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAiB,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAoB,MAAM,eAAe,CAAC;AAEtF,OAAO,EAAiB,aAAa,EAAE,IAAI,EAAkB,iBAAiB,EAAqB,UAAU,EAAE,MAAM,UAAU,CAAC;AAGhI,OAAO,EAAuC,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAwBvC,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,QAAiC,EAAE,EAA4D;IAC9H,MAAM,IAAI,GAAG,CAAC,CAA0B,EAAU,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAClH,iIAAiI;IACjI,+IAA+I;IAC/I,MAAM,WAAW,GAAG,CAAC,CAAe,EAAU,EAAE;QAC9C,MAAM,QAAQ,GAAiB,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3J,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;IAChK,CAAC,CAAC;IACF,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,GAAG,GAAmB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB;YAAE,MAAM,IAAI,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,6CAA6C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,+BAA+B,mBAAmB,uEAAuE,CAAC,CAAC;QACxT,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,iBAAiB,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,GAAG,GAAG,EAAE,CAAC;QAAC,CAAC;QACnI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAE/H,8GAA8G;AAC9G,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,CAAkB,EAClB,EAA4D,EAC5D,IAAqJ;IAErJ,+IAA+I;IAC/I,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC;IAC9C,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,CAAC;IAC7G,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1I,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE;QAC1C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;QACpE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAChH,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,OAAO;QAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,GAAG,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,wEAAwE,CAAC,CAAC;IACxG,CAAC,CAAC,GAAG,CAAC,gFAAgF,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,8CAA8C,CAAC,CAAC;IAC5K,MAAM,WAAW,CAAC,GAAG,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE;QACpH,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG;KACrE,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IAEhE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,MAAM;QACvB,KAAK,UAAU;YAAE,CAAC,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3F,KAAK,SAAS;YAAE,CAAC,CAAC,GAAG,CAAC,+CAA+C,IAAI,0CAA0C,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpJ,KAAK,WAAW;YAAE,CAAC,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7F,KAAK,QAAQ;YAAE,CAAC,CAAC,GAAG,CAAC,6CAA6C,IAAI,uBAAuB,CAAC,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9H,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC7F,CAAC,CAAC,GAAG,CAAC,SAAS;gBACb,CAAC,CAAC,0BAA0B,IAAI,EAAE;gBAClC,CAAC,CAAC,qKAAqK,CAAC,CAAC;YAC3K,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IACD,CAAC,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAkB,EAAE,EAA4D,EAAE,aAA4B;IAC1I,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,OAAO;QACL,iBAAiB,EAAE,IAAI;QACvB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACpC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;gBAC9E,KAAK,GAAG,KAAK,CAAC;gBACd,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;YACrG,MAAM,IAAI,GAAG,oGAAoG,CAAC;YAClH,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5H,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yHAAyH;gBACzH,yFAAyF;gBACzF,MAAM,GAAG,GAAG,CAAC,YAAY,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oEAAoE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;gBAClM,CAAC,CAAC,GAAG,CAAC,uDAAuD,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC9E,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAiB,EAAE,IAAc,EAAE,CAAkB;IACzF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,8HAA8H,CAAC,CAAC;IAC/K,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACzF,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACrJ,IAAI,IAAgB,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gEAAgE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,CAAC;YAC1B,gHAAgH;YAChH,MAAM,IAAI,UAAU,CAAC,GAAI,CAAW,CAAC,OAAO,sCAAsC,MAAM,mBAAmB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,oBAAoB,CAAC,CAAC;QACnK,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,GAAG,CAAC,gHAAgH,OAAO,CAAE,CAAW,CAAC,OAAO,CAAC,qIAAqI,CAAC,CAAC;YAC1R,OAAO,CAAC,CAAC;QACX,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC;IACpG,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type EnvironmentConfig } from '../config.js';
2
+ import { type DeliveryPlan, type PresentDeps } from './delivery.js';
2
3
  import { type ShareClient } from './run.js';
3
4
  import type { Judge } from '../curation/judgements-db.js';
4
5
  export interface ShareOptions {
@@ -8,10 +9,36 @@ export interface ShareOptions {
8
9
  sinceIso?: string;
9
10
  confirm?: string;
10
11
  retract?: string;
12
+ /** Use the typed-yes flow although the gateway offers browser approval (refused when it requires it). */
13
+ typed?: boolean;
14
+ /** --open <request id>: re-open or re-print the link of a request an agent staged on this machine. */
15
+ openRequest?: string;
11
16
  envName: string;
12
17
  }
18
+ /** Everything the browser flow needs from the outside world, so tests drive it with a fake clock and no browser. */
19
+ export interface ApprovalDeps {
20
+ /** The web app's base URL (the link's origin), from the environment. */
21
+ appUrl: string;
22
+ /** This machine's label, shown on the page as client-claimed. */
23
+ label: string;
24
+ openUrl?: (url: string, appUrl: string) => Promise<boolean>;
25
+ /** Open and/or QR for the link: see decideDelivery. */
26
+ plan?: DeliveryPlan;
27
+ qr?: PresentDeps['qr'];
28
+ columns?: number;
29
+ copy?: (url: string) => void;
30
+ sleep: (ms: number, signal?: AbortSignal) => Promise<void>;
31
+ now: () => number;
32
+ /**
33
+ * Runs the waiting part with a signal that aborts on Ctrl-C (the request is then cancelled and nothing is sent),
34
+ * and takes the handler away afterwards. Absent, nothing can interrupt the wait but the expiry.
35
+ */
36
+ guard?: <T>(run: (signal: AbortSignal | undefined) => Promise<T>) => Promise<T>;
37
+ }
13
38
  export interface ShareDeps {
14
39
  cloudEnv: EnvironmentConfig;
40
+ /** Set for a team destination: the web app saved when it was joined. Approval links use it, and a gateway that disagrees stops the share. */
41
+ teamAppUrl?: string;
15
42
  /** This install's salt for the opaque client_key. */
16
43
  salt: string;
17
44
  /** The environment's default gateway URL: anything else is shown in the preview. */
@@ -21,12 +48,18 @@ export interface ShareDeps {
21
48
  judge: () => Promise<Judge>;
22
49
  /** The person's own git identity: `--all-ratified` shares only what they ratified. */
23
50
  owner: () => Promise<string>;
24
- /** True inside an agent that `align` launched (ALIGN_WRAPPED): a share is then refused, as a speed bump. */
51
+ /** True inside an agent that `align` launched (ALIGN_WRAPPED): the TYPED flow is then refused, as a speed bump. Asking for browser approval is not. */
25
52
  wrapped: boolean;
53
+ approval: ApprovalDeps;
26
54
  /** Show `shown` and ask on the controlling terminal; null when there is no interactive terminal. */
27
55
  ttyConfirm: (shown: string, question: string) => Promise<boolean | null>;
28
56
  out: (line: string) => void;
29
57
  err: (line: string) => void;
58
+ /**
59
+ * The optional work-email prompt (lib/lead-prompt.ts). Called ONLY on the no-team-login path of this human command,
60
+ * after the upgrade line. Absent in the MCP tools, which never ask a person for an email.
61
+ */
62
+ leadPrompt?: () => Promise<unknown>;
30
63
  }
31
64
  export declare function runShare(opts: ShareOptions, deps: ShareDeps): Promise<number>;
32
65
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAqG,KAAK,WAAW,EAAc,MAAM,UAAU,CAAC;AAC3J,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,sFAAsF;IACtF,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,4GAA4G;IAC5G,OAAO,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAID,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA4FnF"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAe,MAAM,eAAe,CAAC;AAKjF,OAAO,EAAqG,KAAK,WAAW,EAAc,MAAM,UAAU,CAAC;AAC3J,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oHAAoH;AACpH,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,uDAAuD;IACvD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,6IAA6I;IAC7I,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,sFAAsF;IACtF,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,uJAAuJ;IACvJ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,oGAAoG;IACpG,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAOD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAiInF"}
@@ -2,34 +2,63 @@
2
2
  * L9: `align share` as a function of injected dependencies, returning an exit code. The commander
3
3
  * wrapper (commands/share.ts) wires the real config, gateway client and prompts; tests wire fakes.
4
4
  *
5
- * Who may complete a share: a person at a terminal. EVERY path (a plain `align share` and
6
- * `align share --confirm <code>`) shows the preview on the CONTROLLING terminal and needs a typed
7
- * yes there (default No). There is no `--yes`: a flag is exactly what an agent would pass. A caller
8
- * with no controlling terminal is refused. The known gap (an agent that allocates its own
9
- * pseudo-terminal) is stated in SECURITY.md.
5
+ * Who may complete a share depends on what the gateway says (GET /share-requests/config, ALI-1540):
6
+ *
7
+ * - `required`, or `available` without `--typed`: the person approves in a BROWSER session. This process stages
8
+ * an encrypted request, prints a link and a code, waits, and sends only what the gateway says was approved.
9
+ * It never prompts on a terminal and never calls shareBatch. It may run inside an agent (ALIGN_WRAPPED): an
10
+ * agent can ask, and its own CLI token cannot approve, because the approve route refuses it. A browser session can (SECURITY.md lists how an agent may get one), so this is not a lock.
11
+ * - `off`, a gateway with no such route (404), or `available` with `--typed`: today's flow. EVERY path (a plain
12
+ * `align share` and `align share --confirm <code>`) shows the preview on the CONTROLLING terminal and needs a
13
+ * typed yes there (default No). There is no `--yes`: a flag is exactly what an agent would pass. A caller with
14
+ * no controlling terminal, or inside an agent align launched, is refused. The known gap (an agent that
15
+ * allocates its own pseudo-terminal) is stated in SECURITY.md. `required` never reaches this branch.
10
16
  */
11
17
  import { visible } from './visible.js';
12
18
  import { teamCtaLine } from '../team-cta.js';
13
- import { combinedHash, consumeCode, lookupCode, sweepPending } from './pending.js';
19
+ import { runBrowserShare } from './browser-flow.js';
20
+ import { presentLink } from './delivery.js';
21
+ import { approveUrl } from './approval.js';
22
+ import { combinedHash, consumeCode, loadRequest, lookupCode, sweepPending } from './pending.js';
23
+ import { isAlignHost } from '../destination-trust.js';
24
+ import { resolveApprovalAppUrl } from './target.js';
14
25
  import { prepare, ratifiedRows, renderResults, renderTeamText, retract, secretRefusal, send, ShareError } from './run.js';
15
- const NO_TERMINAL = 'Confirm this in your own terminal: there is no interactive terminal here (an agent shell, a pipe and a hook have none). Nothing was sent.';
26
+ const WRAPPED = 'align share needs you to type your answer at a terminal, and this run is inside an agent that align launched, so it cannot ask you. Open a normal terminal of your own and run it there. Nothing was sent.';
27
+ const WRAPPED_FOREIGN = 'This destination is not an Align address, so a share to it needs your own answer typed at a terminal here, and this is run from inside an agent that align launched. Open a normal terminal of your own and run it there. Nothing was sent.';
28
+ const hostOf = (url) => { try {
29
+ return new URL(url).host;
30
+ }
31
+ catch {
32
+ return '';
33
+ } };
34
+ const NO_TERMINAL = 'Confirm this in your own terminal. There is no interactive terminal here (an agent shell, a pipe and a hook have none). Nothing was sent.';
16
35
  export async function runShare(opts, deps) {
17
36
  // Every line this prints can carry text a stranger wrote (a remote id, a tenant name, a server error, a
18
37
  // pending file's env). visible() is idempotent, so lines that were already escaped pass through unchanged.
19
38
  const out = (l) => deps.out(visible(l, { keepNewline: true }));
20
39
  const err = (l) => deps.err(visible(l, { keepNewline: true }));
21
- if (deps.wrapped) {
22
- err('align share is not run from inside an agent that align launched. Open a normal terminal of your own and run it there. Nothing was sent.');
23
- return 1;
24
- }
25
40
  if (deps.cloudEnv.mode === 'demo') {
26
41
  err('align share needs a team account, and this environment is in demo mode. Run: align login');
27
42
  return 1;
28
43
  }
29
44
  if (deps.cloudEnv.mode === 'local-embedded' || !deps.cloudEnv.authToken) {
30
45
  err(`align share sends decisions from your local graph to your team's.\n ${teamCtaLine()}\n Already have a team? Run: align login`);
46
+ try {
47
+ await deps.leadPrompt?.();
48
+ }
49
+ catch { /* an optional prompt never changes what the person sees from the command */ }
50
+ return 1;
51
+ }
52
+ // A gateway that is not Align's is not an independent approver: its own web page "approving" proves nothing about the person.
53
+ // So a share to one needs the person at a terminal, in either mode, and an agent is refused before any request goes out.
54
+ // --open is refused too: an agent re-opening an approval link for a foreign gateway is the same hole.
55
+ const foreignGateway = !isAlignHost(hostOf(deps.cloudEnv.gatewayUrl));
56
+ if (foreignGateway && deps.wrapped) {
57
+ err(WRAPPED_FOREIGN);
31
58
  return 1;
32
59
  }
60
+ if (opts.openRequest !== undefined)
61
+ return await reopenRequest(opts, deps, out, err);
33
62
  if (!deps.localDbPath) {
34
63
  err('There is no local graph on this machine to share from. `align setup --local` creates one.');
35
64
  return 1;
@@ -39,10 +68,40 @@ export async function runShare(opts, deps) {
39
68
  const ctx = async () => ({ dbPath, envName: opts.envName, client: deps.client(), judge: await deps.judge(), salt: deps.salt, gatewayUrl: deps.cloudEnv.gatewayUrl, defaultGatewayUrl: deps.defaultGatewayUrl });
40
69
  try {
41
70
  if (opts.retract !== undefined) {
71
+ if (deps.wrapped) {
72
+ err(WRAPPED);
73
+ return 1;
74
+ }
42
75
  const r = await retract(await ctx(), opts.retract);
43
76
  (r.ok ? out : err)(r.message);
44
77
  return r.ok ? 0 : 1;
45
78
  }
79
+ // Who approves is the gateway's call. A 404 is an older gateway (the typed flow); any other failure stops here
80
+ // and does NOT fall back, so a broken answer can never loosen the rule.
81
+ const cfg = await deps.client().shareRequestsConfig();
82
+ const mode = cfg?.mode ?? 'off';
83
+ if (mode === 'required' && (opts.typed || opts.confirm !== undefined)) {
84
+ err('This workspace requires approval in your browser, so --typed and --confirm are not accepted. Run: align share <id>. Nothing was sent.');
85
+ return 1;
86
+ }
87
+ const browser = mode === 'required' || (mode === 'available' && !opts.typed);
88
+ if (browser && opts.confirm !== undefined) {
89
+ err('Shares are approved in your browser on this gateway, so a confirmation code does not apply. Run: align share <id>. (Or add --typed to answer at this terminal.) Nothing was sent.');
90
+ return 1;
91
+ }
92
+ if (!browser && deps.wrapped) {
93
+ err(WRAPPED);
94
+ return 1;
95
+ }
96
+ // Where the approval link opens is settled before anything is prepared or staged: the link carries the share's key.
97
+ const appChoice = browser ? resolveApprovalAppUrl({ stored: deps.teamAppUrl ?? null, cfgAppUrl: cfg?.appUrl ?? null, guessed: deps.approval.appUrl }) : null;
98
+ if (appChoice && !appChoice.ok) {
99
+ err(appChoice.message);
100
+ return 1;
101
+ }
102
+ // No silent downgrade: when the typed flow runs because the gateway has no browser approval, say so.
103
+ if (!browser && !opts.typed)
104
+ out(cfg === null ? 'This gateway does not offer browser approval (it has no such route), so this uses the typed answer at your terminal.' : 'This gateway has browser approval turned off, so this uses the typed answer at your terminal.');
46
105
  let ids = opts.ids;
47
106
  let pendingCode;
48
107
  if (opts.confirm !== undefined) {
@@ -79,6 +138,25 @@ export async function runShare(opts, deps) {
79
138
  out(`Already shared as ${visible(a.remoteId)}: ${visible(a.title)}`);
80
139
  if (prep.payloads.length === 0)
81
140
  return 0;
141
+ if (browser) {
142
+ if (foreignGateway) {
143
+ const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)} at ${visible(prep.dest.gatewayHost)}?`);
144
+ if (yes === null) {
145
+ err(NO_TERMINAL);
146
+ return 1;
147
+ }
148
+ if (!yes) {
149
+ out('Nothing was sent.');
150
+ return 0;
151
+ }
152
+ }
153
+ else {
154
+ out(prep.preview);
155
+ }
156
+ const { guard, ...rest } = deps.approval;
157
+ const maxWaitMs = ((cfg?.pendingTtlS ?? 900) + (cfg?.completeTtlS ?? 600)) * 1000;
158
+ return await (guard ?? ((run) => run(undefined)))((signal) => runBrowserShare(c, prep, { ...rest, appUrl: appChoice?.ok ? appChoice.appUrl : rest.appUrl, raw: deps.out, signal, maxWaitMs, client: c.client, out, err, ...(deps.wrapped ? { agent: 'wrapped' } : {}) }));
159
+ }
82
160
  if (pendingCode !== undefined) {
83
161
  const found = lookupCode(pendingCode);
84
162
  if (!found.ok) {
@@ -133,4 +211,68 @@ export async function runShare(opts, deps) {
133
211
  return 1;
134
212
  }
135
213
  }
214
+ /**
215
+ * `align share --open <id>`. The key for an agent-staged request rests in one place, the 0600 pending file on the machine
216
+ * that staged it, so this works there and nowhere else. Every refusal below prints no key. It only shows the link again: the
217
+ * person approves in the browser, and the agent's own status call finishes the share.
218
+ */
219
+ async function reopenRequest(opts, deps, out, err) {
220
+ sweepPending();
221
+ const rec = loadRequest(opts.openRequest);
222
+ if (rec === null) {
223
+ err('No pending request with that id on this machine. A request can only be re-opened on the machine that staged it, and only until it expires. Ask your agent to start the share again.');
224
+ return 1;
225
+ }
226
+ if (!(Date.parse(rec.expiresAt) > Date.now())) {
227
+ err('That request has expired. Ask your agent to start the share again.');
228
+ return 1;
229
+ }
230
+ if (rec.envName !== opts.envName) {
231
+ err(`That request was staged for ${rec.envName}, not ${opts.envName}. Run: align share --open ${rec.requestId} --to ${rec.envName}`);
232
+ return 1;
233
+ }
234
+ // Fails closed: a sign-in with no tenant id cannot show the request belongs to this workspace, so it is not shown.
235
+ if (rec.gatewayUrl !== deps.cloudEnv.gatewayUrl || !deps.cloudEnv.tenantId || rec.tenantId !== deps.cloudEnv.tenantId) {
236
+ err('That request was staged for a different workspace or gateway than the one you are signed in to now, so it was not shown.');
237
+ return 1;
238
+ }
239
+ let state;
240
+ try {
241
+ state = (await deps.client().getShareRequest(rec.requestId)).state;
242
+ }
243
+ catch (e) {
244
+ err(`Could not ask the gateway about that request (${visible(e.message)}), so the link was not shown. Try again in a moment.`);
245
+ return 1;
246
+ }
247
+ if (state !== 'pending') {
248
+ err(`That request is ${visible(state)}, so there is nothing to approve. Ask your agent to start the share again if you still want it.`);
249
+ return 1;
250
+ }
251
+ // Worked out again with the staging order (a team destination's saved app, else the gateway's app_url, else the guess); the record does not store it.
252
+ let cfgAppUrl;
253
+ try {
254
+ cfgAppUrl = (await deps.client().shareRequestsConfig())?.appUrl ?? null;
255
+ }
256
+ catch (e) {
257
+ err(`Could not ask the gateway about that request (${visible(e.message)}), so the link was not shown. Try again in a moment.`);
258
+ return 1;
259
+ }
260
+ const app = resolveApprovalAppUrl({ stored: deps.teamAppUrl ?? null, cfgAppUrl, guessed: deps.approval.appUrl });
261
+ if (!app.ok) {
262
+ err(app.message);
263
+ return 1;
264
+ }
265
+ const url = approveUrl(app.appUrl, rec.requestId, rec.keyB64Url);
266
+ const minutes = Math.max(1, Math.round((Date.parse(rec.expiresAt) - Date.now()) / 60000));
267
+ out(`Approve in your browser: ${url}`);
268
+ out(`Code: ${rec.userCode} (the page shows the same code. Check they match before you approve.)`);
269
+ out(`It expires in ${minutes} minutes. Nothing is sent until you approve. When you have, tell your agent so it can finish the share.`);
270
+ const a = deps.approval;
271
+ await presentLink(url, {
272
+ appUrl: app.appUrl, plan: a.plan ?? { open: a.openUrl !== undefined, qr: false, qrIfOpenFails: false, why: 'default' },
273
+ ...(a.openUrl ? { openUrl: a.openUrl } : {}), ...(a.qr ? { qr: a.qr } : {}), ...(a.columns !== undefined ? { columns: a.columns } : {}),
274
+ ...(a.copy ? { copy: a.copy } : {}), out, raw: deps.out,
275
+ });
276
+ return 0;
277
+ }
136
278
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** The command-line flags that steer how the approval link is delivered, declared once so a test can parse them without running a share. */
2
+ import type { Command } from 'commander';
3
+ import type { DeliveryFlags } from './delivery.js';
4
+ export interface DeliveryOpts {
5
+ /** `--no-open` gives false; `--open <id>` gives the id. */
6
+ open?: string | boolean;
7
+ /** `--qr` gives true, `--no-qr` false. */
8
+ qr?: boolean;
9
+ copy?: boolean;
10
+ }
11
+ export declare function addDeliveryOptions(cmd: Command): Command;
12
+ export declare function deliveryFlagsFrom(o: DeliveryOpts): DeliveryFlags;
13
+ /** Both `--qr` and `--no-qr` is a mistake worth stopping on, rather than guessing which one was meant. */
14
+ export declare function conflictingDeliveryFlags(argv: readonly string[]): boolean;
15
+ //# sourceMappingURL=delivery-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-options.d.ts","sourceRoot":"","sources":["../../../src/lib/share/delivery-options.ts"],"names":[],"mappings":"AAAA,4IAA4I;AAC5I,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOxD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,YAAY,GAAG,aAAa,CAEhE;AAED,0GAA0G;AAC1G,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEzE"}