@dharta/cli 0.6.77 → 0.6.78

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 (293) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +215 -11
  3. package/dist/agent.js +3 -2
  4. package/dist/agent.js.map +1 -1
  5. package/dist/api-error.js +6 -6
  6. package/dist/api-error.js.map +1 -1
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.js +860 -149
  9. package/dist/cli.js.map +1 -1
  10. package/dist/command-tree.d.ts +3 -0
  11. package/dist/command-tree.js +10 -0
  12. package/dist/command-tree.js.map +1 -0
  13. package/dist/commands/agents.d.ts +54 -17
  14. package/dist/commands/agents.js +246 -136
  15. package/dist/commands/agents.js.map +1 -1
  16. package/dist/commands/analytics.js +6 -5
  17. package/dist/commands/analytics.js.map +1 -1
  18. package/dist/commands/api.js +71 -86
  19. package/dist/commands/api.js.map +1 -1
  20. package/dist/commands/appearance.js +5 -6
  21. package/dist/commands/appearance.js.map +1 -1
  22. package/dist/commands/artifact.js +7 -6
  23. package/dist/commands/artifact.js.map +1 -1
  24. package/dist/commands/audit-log.js +2 -1
  25. package/dist/commands/audit-log.js.map +1 -1
  26. package/dist/commands/auth.js +26 -6
  27. package/dist/commands/auth.js.map +1 -1
  28. package/dist/commands/caps.js +11 -15
  29. package/dist/commands/caps.js.map +1 -1
  30. package/dist/commands/deploy.js +25 -10
  31. package/dist/commands/deploy.js.map +1 -1
  32. package/dist/commands/dev.d.ts +10 -1
  33. package/dist/commands/dev.js +56 -25
  34. package/dist/commands/dev.js.map +1 -1
  35. package/dist/commands/doctor.d.ts +2 -0
  36. package/dist/commands/doctor.js +60 -0
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/embed-keys.js +4 -13
  39. package/dist/commands/embed-keys.js.map +1 -1
  40. package/dist/commands/env.js +4 -7
  41. package/dist/commands/env.js.map +1 -1
  42. package/dist/commands/files.js +3 -4
  43. package/dist/commands/files.js.map +1 -1
  44. package/dist/commands/fleet.d.ts +129 -0
  45. package/dist/commands/fleet.js +408 -0
  46. package/dist/commands/fleet.js.map +1 -0
  47. package/dist/commands/genui.d.ts +2 -0
  48. package/dist/commands/genui.js +53 -0
  49. package/dist/commands/genui.js.map +1 -0
  50. package/dist/commands/git-credential.js +2 -3
  51. package/dist/commands/git-credential.js.map +1 -1
  52. package/dist/commands/kartas.d.ts +9 -0
  53. package/dist/commands/kartas.js +33 -11
  54. package/dist/commands/kartas.js.map +1 -1
  55. package/dist/commands/keys.d.ts +17 -18
  56. package/dist/commands/keys.js +108 -19
  57. package/dist/commands/keys.js.map +1 -1
  58. package/dist/commands/login.js +2 -1
  59. package/dist/commands/login.js.map +1 -1
  60. package/dist/commands/members.d.ts +10 -0
  61. package/dist/commands/members.js +20 -6
  62. package/dist/commands/members.js.map +1 -1
  63. package/dist/commands/model-connections.d.ts +44 -0
  64. package/dist/commands/model-connections.js +435 -0
  65. package/dist/commands/model-connections.js.map +1 -0
  66. package/dist/commands/open.d.ts +2 -2
  67. package/dist/commands/open.js +4 -3
  68. package/dist/commands/open.js.map +1 -1
  69. package/dist/commands/org.d.ts +9 -0
  70. package/dist/commands/org.js +42 -0
  71. package/dist/commands/org.js.map +1 -0
  72. package/dist/commands/organization.d.ts +16 -0
  73. package/dist/commands/organization.js +118 -0
  74. package/dist/commands/organization.js.map +1 -0
  75. package/dist/commands/parity.js +1 -3
  76. package/dist/commands/parity.js.map +1 -1
  77. package/dist/commands/repos.d.ts +4 -0
  78. package/dist/commands/repos.js +17 -0
  79. package/dist/commands/repos.js.map +1 -0
  80. package/dist/commands/rollback.js +2 -3
  81. package/dist/commands/rollback.js.map +1 -1
  82. package/dist/commands/schedules.js +26 -21
  83. package/dist/commands/schedules.js.map +1 -1
  84. package/dist/commands/scopes.js +8 -1
  85. package/dist/commands/scopes.js.map +1 -1
  86. package/dist/commands/sessions.js +9 -3
  87. package/dist/commands/sessions.js.map +1 -1
  88. package/dist/commands/setup.js +5 -4
  89. package/dist/commands/setup.js.map +1 -1
  90. package/dist/commands/update.d.ts +1 -0
  91. package/dist/commands/update.js +24 -11
  92. package/dist/commands/update.js.map +1 -1
  93. package/dist/commands/webhooks.d.ts +4 -1
  94. package/dist/commands/webhooks.js +21 -16
  95. package/dist/commands/webhooks.js.map +1 -1
  96. package/dist/completions.js +24 -13
  97. package/dist/completions.js.map +1 -1
  98. package/dist/config.d.ts +12 -0
  99. package/dist/config.js +121 -7
  100. package/dist/config.js.map +1 -1
  101. package/dist/context.d.ts +2 -0
  102. package/dist/context.js +23 -7
  103. package/dist/context.js.map +1 -1
  104. package/dist/docs/cli-reference.d.ts +2 -0
  105. package/dist/docs/cli-reference.js +191 -0
  106. package/dist/docs/cli-reference.js.map +1 -0
  107. package/dist/exit-codes.d.ts +25 -0
  108. package/dist/exit-codes.js +107 -0
  109. package/dist/exit-codes.js.map +1 -0
  110. package/dist/genui.d.ts +178 -0
  111. package/dist/genui.js +1130 -0
  112. package/dist/genui.js.map +1 -0
  113. package/dist/harnesses.js +2 -1
  114. package/dist/harnesses.js.map +1 -1
  115. package/dist/jq.d.ts +4 -0
  116. package/dist/jq.js +91 -0
  117. package/dist/jq.js.map +1 -0
  118. package/dist/login-offer.js +6 -2
  119. package/dist/login-offer.js.map +1 -1
  120. package/dist/manifest.d.ts +12 -0
  121. package/dist/manifest.js +126 -0
  122. package/dist/manifest.js.map +1 -1
  123. package/dist/model-auth.d.ts +29 -0
  124. package/dist/model-auth.js +117 -0
  125. package/dist/model-auth.js.map +1 -0
  126. package/dist/model-settings.d.ts +23 -0
  127. package/dist/model-settings.js +186 -0
  128. package/dist/model-settings.js.map +1 -0
  129. package/dist/money.js +2 -1
  130. package/dist/money.js.map +1 -1
  131. package/dist/output.d.ts +6 -0
  132. package/dist/output.js +54 -0
  133. package/dist/output.js.map +1 -1
  134. package/dist/runtime.d.ts +1 -1
  135. package/dist/runtime.js +1 -1
  136. package/dist/scaffold.js +2 -1
  137. package/dist/scaffold.js.map +1 -1
  138. package/dist/validators.js +17 -11
  139. package/dist/validators.js.map +1 -1
  140. package/dist/version-check.d.ts +1 -1
  141. package/dist/version-check.js +1 -1
  142. package/dist/version-check.js.map +1 -1
  143. package/node_modules/@dharta/contracts/LICENSE +21 -0
  144. package/node_modules/@dharta/contracts/README.md +45 -0
  145. package/node_modules/@dharta/contracts/artifact-runtime.json +750 -0
  146. package/node_modules/@dharta/contracts/dist/activity.d.ts +62 -0
  147. package/node_modules/@dharta/contracts/dist/activity.d.ts.map +1 -0
  148. package/node_modules/@dharta/contracts/dist/activity.js +178 -0
  149. package/node_modules/@dharta/contracts/dist/activity.js.map +1 -0
  150. package/node_modules/@dharta/contracts/dist/artifact-runtime-formats.d.ts +20 -0
  151. package/node_modules/@dharta/contracts/dist/artifact-runtime-formats.d.ts.map +1 -0
  152. package/node_modules/@dharta/contracts/dist/artifact-runtime-formats.js +53 -0
  153. package/node_modules/@dharta/contracts/dist/artifact-runtime-formats.js.map +1 -0
  154. package/node_modules/@dharta/contracts/dist/artifact-runtime-validators.generated.d.ts +37 -0
  155. package/node_modules/@dharta/contracts/dist/artifact-runtime-validators.generated.d.ts.map +1 -0
  156. package/node_modules/@dharta/contracts/dist/artifact-runtime-validators.generated.js +5107 -0
  157. package/node_modules/@dharta/contracts/dist/artifact-runtime-validators.generated.js.map +1 -0
  158. package/node_modules/@dharta/contracts/dist/artifact-runtime.d.ts +154 -0
  159. package/node_modules/@dharta/contracts/dist/artifact-runtime.d.ts.map +1 -0
  160. package/node_modules/@dharta/contracts/dist/artifact-runtime.generated.d.ts +1670 -0
  161. package/node_modules/@dharta/contracts/dist/artifact-runtime.generated.d.ts.map +1 -0
  162. package/node_modules/@dharta/contracts/dist/artifact-runtime.generated.js +1903 -0
  163. package/node_modules/@dharta/contracts/dist/artifact-runtime.generated.js.map +1 -0
  164. package/node_modules/@dharta/contracts/dist/artifact-runtime.js +377 -0
  165. package/node_modules/@dharta/contracts/dist/artifact-runtime.js.map +1 -0
  166. package/node_modules/@dharta/contracts/dist/index.d.ts +6 -0
  167. package/node_modules/@dharta/contracts/dist/index.d.ts.map +1 -0
  168. package/node_modules/@dharta/contracts/dist/index.js +6 -0
  169. package/node_modules/@dharta/contracts/dist/index.js.map +1 -0
  170. package/node_modules/@dharta/contracts/dist/model-auth.d.ts +31 -0
  171. package/node_modules/@dharta/contracts/dist/model-auth.d.ts.map +1 -0
  172. package/node_modules/@dharta/contracts/dist/model-auth.js +45 -0
  173. package/node_modules/@dharta/contracts/dist/model-auth.js.map +1 -0
  174. package/node_modules/@dharta/contracts/dist/tasks.d.ts +44 -0
  175. package/node_modules/@dharta/contracts/dist/tasks.d.ts.map +1 -0
  176. package/node_modules/@dharta/contracts/dist/tasks.js +127 -0
  177. package/node_modules/@dharta/contracts/dist/tasks.js.map +1 -0
  178. package/node_modules/@dharta/contracts/dist/wire-events.d.ts +71 -0
  179. package/node_modules/@dharta/contracts/dist/wire-events.d.ts.map +1 -0
  180. package/node_modules/@dharta/contracts/dist/wire-events.js +48 -0
  181. package/node_modules/@dharta/contracts/dist/wire-events.js.map +1 -0
  182. package/node_modules/@dharta/contracts/model-auth-capabilities-v1.json +168 -0
  183. package/node_modules/@dharta/contracts/model-auth-reasons-v1.json +38 -0
  184. package/node_modules/@dharta/contracts/package.json +44 -0
  185. package/node_modules/@dharta/contracts/src/activity.ts +215 -0
  186. package/node_modules/@dharta/contracts/src/artifact-runtime-formats.ts +54 -0
  187. package/node_modules/@dharta/contracts/src/artifact-runtime-validators.generated.ts +29 -0
  188. package/node_modules/@dharta/contracts/src/artifact-runtime.generated.ts +2093 -0
  189. package/node_modules/@dharta/contracts/src/artifact-runtime.ts +520 -0
  190. package/node_modules/@dharta/contracts/src/index.ts +5 -0
  191. package/node_modules/@dharta/contracts/src/model-auth.ts +82 -0
  192. package/node_modules/@dharta/contracts/src/tasks.ts +142 -0
  193. package/node_modules/@dharta/contracts/src/wire-events.ts +150 -0
  194. package/node_modules/@dharta/contracts/wire-events.json +29 -0
  195. package/node_modules/@dharta/sdk/LICENSE +1 -1
  196. package/node_modules/@dharta/sdk/README.md +22 -8
  197. package/node_modules/@dharta/sdk/dist/errors.d.ts +9 -7
  198. package/node_modules/@dharta/sdk/dist/errors.d.ts.map +1 -1
  199. package/node_modules/@dharta/sdk/dist/errors.js +36 -18
  200. package/node_modules/@dharta/sdk/dist/errors.js.map +1 -1
  201. package/node_modules/@dharta/sdk/dist/fleet.d.ts +69 -0
  202. package/node_modules/@dharta/sdk/dist/fleet.d.ts.map +1 -0
  203. package/node_modules/@dharta/sdk/dist/fleet.js +240 -0
  204. package/node_modules/@dharta/sdk/dist/fleet.js.map +1 -0
  205. package/node_modules/@dharta/sdk/dist/http.d.ts +6 -2
  206. package/node_modules/@dharta/sdk/dist/http.d.ts.map +1 -1
  207. package/node_modules/@dharta/sdk/dist/http.js +71 -12
  208. package/node_modules/@dharta/sdk/dist/http.js.map +1 -1
  209. package/node_modules/@dharta/sdk/dist/idempotency.d.ts +12 -0
  210. package/node_modules/@dharta/sdk/dist/idempotency.d.ts.map +1 -0
  211. package/node_modules/@dharta/sdk/dist/idempotency.js +72 -0
  212. package/node_modules/@dharta/sdk/dist/idempotency.js.map +1 -0
  213. package/node_modules/@dharta/sdk/dist/index.d.ts +20 -6
  214. package/node_modules/@dharta/sdk/dist/index.d.ts.map +1 -1
  215. package/node_modules/@dharta/sdk/dist/index.js +27 -4
  216. package/node_modules/@dharta/sdk/dist/index.js.map +1 -1
  217. package/node_modules/@dharta/sdk/dist/resources.d.ts +108 -13
  218. package/node_modules/@dharta/sdk/dist/resources.d.ts.map +1 -1
  219. package/node_modules/@dharta/sdk/dist/resources.js +403 -57
  220. package/node_modules/@dharta/sdk/dist/resources.js.map +1 -1
  221. package/node_modules/@dharta/sdk/dist/types.d.ts +436 -16
  222. package/node_modules/@dharta/sdk/dist/types.d.ts.map +1 -1
  223. package/node_modules/@dharta/sdk/dist/types.js +31 -2
  224. package/node_modules/@dharta/sdk/dist/types.js.map +1 -1
  225. package/node_modules/@dharta/sdk/package.json +9 -3
  226. package/node_modules/@dharta/sdk/src/errors.ts +41 -18
  227. package/node_modules/@dharta/sdk/src/fleet.ts +339 -0
  228. package/node_modules/@dharta/sdk/src/http.ts +110 -17
  229. package/node_modules/@dharta/sdk/src/idempotency.ts +101 -0
  230. package/node_modules/@dharta/sdk/src/index.ts +50 -11
  231. package/node_modules/@dharta/sdk/src/resources.ts +549 -68
  232. package/node_modules/@dharta/sdk/src/types.ts +629 -20
  233. package/package.json +16 -6
  234. package/src/agent.ts +3 -2
  235. package/src/api-error.ts +6 -5
  236. package/src/cli.ts +978 -163
  237. package/src/command-tree.ts +13 -0
  238. package/src/commands/agents.ts +365 -167
  239. package/src/commands/analytics.ts +6 -5
  240. package/src/commands/api.ts +73 -92
  241. package/src/commands/appearance.ts +5 -6
  242. package/src/commands/artifact.ts +7 -6
  243. package/src/commands/audit-log.ts +2 -1
  244. package/src/commands/auth.ts +25 -5
  245. package/src/commands/caps.ts +11 -15
  246. package/src/commands/deploy.ts +18 -4
  247. package/src/commands/dev.ts +86 -25
  248. package/src/commands/doctor.ts +69 -0
  249. package/src/commands/embed-keys.ts +4 -14
  250. package/src/commands/env.ts +4 -7
  251. package/src/commands/files.ts +3 -4
  252. package/src/commands/fleet.ts +672 -0
  253. package/src/commands/genui.ts +59 -0
  254. package/src/commands/git-credential.ts +2 -3
  255. package/src/commands/kartas.ts +45 -11
  256. package/src/commands/keys.ts +152 -35
  257. package/src/commands/login.ts +2 -1
  258. package/src/commands/members.ts +31 -6
  259. package/src/commands/model-connections.ts +547 -0
  260. package/src/commands/open.ts +5 -4
  261. package/src/commands/org.ts +57 -0
  262. package/src/commands/organization.ts +153 -0
  263. package/src/commands/parity.ts +1 -3
  264. package/src/commands/repos.ts +23 -0
  265. package/src/commands/rollback.ts +2 -3
  266. package/src/commands/schedules.ts +33 -22
  267. package/src/commands/scopes.ts +8 -1
  268. package/src/commands/sessions.ts +9 -3
  269. package/src/commands/setup.ts +5 -4
  270. package/src/commands/update.ts +28 -12
  271. package/src/commands/webhooks.ts +30 -19
  272. package/src/completions.ts +25 -13
  273. package/src/config.ts +141 -9
  274. package/src/context.ts +34 -7
  275. package/src/docs/cli-reference.ts +206 -0
  276. package/src/exit-codes.ts +122 -0
  277. package/src/genui.ts +1398 -0
  278. package/src/harnesses.ts +2 -1
  279. package/src/jq.ts +109 -0
  280. package/src/login-offer.ts +6 -2
  281. package/src/manifest.ts +134 -0
  282. package/src/model-auth.ts +173 -0
  283. package/src/model-settings.ts +222 -0
  284. package/src/money.ts +5 -1
  285. package/src/output.ts +60 -0
  286. package/src/runtime.ts +1 -1
  287. package/src/scaffold.ts +2 -1
  288. package/src/validators.ts +18 -11
  289. package/src/version-check.ts +1 -1
  290. package/dist/commands/model-keys.d.ts +0 -22
  291. package/dist/commands/model-keys.js +0 -222
  292. package/dist/commands/model-keys.js.map +0 -1
  293. package/src/commands/model-keys.ts +0 -278
@@ -0,0 +1,240 @@
1
+ // The fleet mutations (RFC 0048 PR7). Reads stay on the catalog endpoint; this
2
+ // file covers the writes the fleet console makes.
3
+ //
4
+ // Two scopes: `fleet:write` for routine work, and `fleet:operations:write`,
5
+ // which expires within 90 days, for the eight actions that move live releases:
6
+ // every operation verb past the preview, and every rollout verb.
7
+ export class FleetOperationsResource {
8
+ http;
9
+ constructor(http) {
10
+ this.http = http;
11
+ }
12
+ // Freezes the selection and returns a draft. Nothing is applied until
13
+ // `confirm`, so this is safe to call to find out what an action would touch.
14
+ async create(params, options = {}) {
15
+ const res = await this.http.request({
16
+ method: "POST",
17
+ path: "/api/fleet/operations",
18
+ idempotencyKey: options.idempotencyKey,
19
+ body: { operation: params },
20
+ });
21
+ return res.operation;
22
+ }
23
+ // `phrase` is the `confirmation_phrase` the draft returned. It is derived
24
+ // from the frozen manifest, which does not change after the preview, so the
25
+ // phrase proves the caller saw that preview. It says nothing about whether
26
+ // the fleet has moved since.
27
+ async confirm(id, phrase, options = {}) {
28
+ return this.post(id, "confirm", { confirmation_phrase: phrase }, options);
29
+ }
30
+ async cancel(id, options = {}) {
31
+ return this.post(id, "cancel", undefined, options);
32
+ }
33
+ async retry(id, options = {}) {
34
+ return this.post(id, "retry", undefined, options);
35
+ }
36
+ async post(id, action, body, options = {}) {
37
+ const res = await this.http.request({
38
+ method: "POST",
39
+ path: `/api/fleet/operations/${encodeURIComponent(id)}/${action}`,
40
+ idempotencyKey: options.idempotencyKey,
41
+ body,
42
+ });
43
+ return res.operation;
44
+ }
45
+ }
46
+ export class FleetRolloutsResource {
47
+ http;
48
+ constructor(http) {
49
+ this.http = http;
50
+ }
51
+ async advance(id, options = {}) {
52
+ return this.post(id, "advance", options);
53
+ }
54
+ async pause(id, options = {}) {
55
+ return this.post(id, "pause", options);
56
+ }
57
+ async resume(id, options = {}) {
58
+ return this.post(id, "resume", options);
59
+ }
60
+ // Runs the health check now instead of waiting for the next observation
61
+ // window. The rollout comes back as it was read, because the evaluation runs
62
+ // in the background.
63
+ async evaluate(id, options = {}) {
64
+ return this.post(id, "evaluate", options);
65
+ }
66
+ // Answers with the operation it queued as well as the rollout: the rollout is
67
+ // finished at that point, and the operation is the thing still worth watching.
68
+ async rollback(id, options = {}) {
69
+ return this.http.request({
70
+ method: "POST",
71
+ path: `/api/fleet/rollouts/${encodeURIComponent(id)}/rollback`,
72
+ idempotencyKey: options.idempotencyKey,
73
+ });
74
+ }
75
+ async post(id, action, options = {}) {
76
+ const res = await this.http.request({
77
+ method: "POST",
78
+ path: `/api/fleet/rollouts/${encodeURIComponent(id)}/${action}`,
79
+ idempotencyKey: options.idempotencyKey,
80
+ });
81
+ return res.rollout;
82
+ }
83
+ }
84
+ export class FleetFindingsResource {
85
+ http;
86
+ constructor(http) {
87
+ this.http = http;
88
+ }
89
+ async acknowledge(id, options = {}) {
90
+ return this.post(id, "acknowledge", undefined, options);
91
+ }
92
+ async snooze(id, duration, options = {}) {
93
+ return this.post(id, "snooze", duration === undefined ? undefined : { duration }, options);
94
+ }
95
+ async resolve(id, options = {}) {
96
+ return this.post(id, "resolve", undefined, options);
97
+ }
98
+ async reopen(id, options = {}) {
99
+ return this.post(id, "reopen", undefined, options);
100
+ }
101
+ async classify(id, classification, options = {}) {
102
+ return this.post(id, "classify", { classification }, options);
103
+ }
104
+ // Omit `membershipId`, or pass null, to unassign. The wire value for "no
105
+ // owner" is null, which is what the spec declares; the server treats any
106
+ // blank as unassign, but sending null keeps the client honest.
107
+ async assign(id, membershipId, options = {}) {
108
+ return this.post(id, "assign", { membership_id: membershipId ?? null }, options);
109
+ }
110
+ // Raises the finding to an incident so it leaves the routine triage queue.
111
+ async promote(id, options = {}) {
112
+ return this.post(id, "promote", undefined, options);
113
+ }
114
+ // Sets the runbook link. Pass null to clear it; the server also accepts an
115
+ // empty string, which is what the CLI flag sends.
116
+ async updateRunbook(id, runbookUrl, options = {}) {
117
+ const res = await this.http.request({
118
+ method: "PATCH",
119
+ path: `/api/fleet/findings/${encodeURIComponent(id)}`,
120
+ idempotencyKey: options.idempotencyKey,
121
+ body: { runbook_url: runbookUrl },
122
+ });
123
+ return res.finding;
124
+ }
125
+ async post(id, action, body, options = {}) {
126
+ const res = await this.http.request({
127
+ method: "POST",
128
+ path: `/api/fleet/findings/${encodeURIComponent(id)}/${action}`,
129
+ idempotencyKey: options.idempotencyKey,
130
+ body,
131
+ });
132
+ return res.finding;
133
+ }
134
+ }
135
+ export class FleetSavedViewsResource {
136
+ http;
137
+ constructor(http) {
138
+ this.http = http;
139
+ }
140
+ async create(params, options = {}) {
141
+ const res = await this.http.request({
142
+ method: "POST",
143
+ path: "/api/fleet/saved_views",
144
+ idempotencyKey: options.idempotencyKey,
145
+ body: { saved_view: params },
146
+ });
147
+ return res.saved_view;
148
+ }
149
+ async update(id, params, options = {}) {
150
+ const res = await this.http.request({
151
+ method: "PATCH",
152
+ path: `/api/fleet/saved_views/${encodeURIComponent(id)}`,
153
+ idempotencyKey: options.idempotencyKey,
154
+ body: { saved_view: params },
155
+ });
156
+ return res.saved_view;
157
+ }
158
+ async delete(id, options = {}) {
159
+ await this.http.request({
160
+ method: "DELETE",
161
+ path: `/api/fleet/saved_views/${encodeURIComponent(id)}`,
162
+ idempotencyKey: options.idempotencyKey,
163
+ });
164
+ }
165
+ // Favorites are per membership, so this marks the view for the person who
166
+ // created the API key, not for the organization.
167
+ async favorite(id, options = {}) {
168
+ await this.http.request({
169
+ method: "POST",
170
+ path: `/api/fleet/saved_views/${encodeURIComponent(id)}/favorite`,
171
+ idempotencyKey: options.idempotencyKey,
172
+ });
173
+ }
174
+ async unfavorite(id, options = {}) {
175
+ await this.http.request({
176
+ method: "DELETE",
177
+ path: `/api/fleet/saved_views/${encodeURIComponent(id)}/favorite`,
178
+ idempotencyKey: options.idempotencyKey,
179
+ });
180
+ }
181
+ }
182
+ export class FleetAnalyticsResource {
183
+ http;
184
+ constructor(http) {
185
+ this.http = http;
186
+ }
187
+ // Stores an explorer chart as a private saved view pinned to the caller. The
188
+ // parameters are the same ones the console's chart URL carries.
189
+ async save(params, options = {}) {
190
+ const res = await this.http.request({
191
+ method: "POST",
192
+ path: "/api/fleet/analytics/saved_views",
193
+ idempotencyKey: options.idempotencyKey,
194
+ body: params,
195
+ });
196
+ return res.saved_view;
197
+ }
198
+ // Removes the chart from the caller's pinned list. The view itself survives.
199
+ async unpin(id, options = {}) {
200
+ await this.http.request({
201
+ method: "DELETE",
202
+ path: `/api/fleet/analytics/saved_views/${encodeURIComponent(id)}/pin`,
203
+ idempotencyKey: options.idempotencyKey,
204
+ });
205
+ }
206
+ }
207
+ export class FleetExportsResource {
208
+ http;
209
+ constructor(http) {
210
+ this.http = http;
211
+ }
212
+ // Returns the CSV body as a string. `users` and `sessions` exports carry
213
+ // personal data, so they need a membership that may read sessions.
214
+ async create(params, options = {}) {
215
+ return this.http.request({
216
+ method: "POST",
217
+ path: "/api/fleet/exports",
218
+ headers: { Accept: "text/csv" },
219
+ idempotencyKey: options.idempotencyKey,
220
+ body: { export: params },
221
+ });
222
+ }
223
+ }
224
+ export class FleetResource {
225
+ operations;
226
+ rollouts;
227
+ findings;
228
+ savedViews;
229
+ analytics;
230
+ exports;
231
+ constructor(http) {
232
+ this.operations = new FleetOperationsResource(http);
233
+ this.rollouts = new FleetRolloutsResource(http);
234
+ this.findings = new FleetFindingsResource(http);
235
+ this.savedViews = new FleetSavedViewsResource(http);
236
+ this.analytics = new FleetAnalyticsResource(http);
237
+ this.exports = new FleetExportsResource(http);
238
+ }
239
+ }
240
+ //# sourceMappingURL=fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../src/fleet.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kDAAkD;AAClD,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,iEAAiE;AAqCjE,MAAM,OAAO,uBAAuB;IACL,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,sEAAsE;IACtE,6EAA6E;IAC7E,KAAK,CAAC,MAAM,CACV,MAA4B,EAC5B,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YACrD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uBAAuB;YAC7B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,6BAA6B;IAC7B,KAAK,CAAC,OAAO,CACX,EAAU,EACV,MAAc,EACd,OAAO,GAAoB,EAAE;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,EAAU,EACV,MAAc,EACd,IAAc,EACd,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YACrD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,yBAAyB,kBAAkB,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE;YACjE,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IACH,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,wEAAwE;IACxE,6EAA6E;IAC7E,qBAAqB;IACrB,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,8EAA8E;IAC9E,+EAA+E;IAC/E,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAsB;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,WAAW;YAC9D,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,EAAU,EACV,MAAc,EACd,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkB;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE;YAC/D,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IACH,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,QAA8B,EAC9B,OAAO,GAAoB,EAAE;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,EAAU,EACV,cAAsB,EACtB,OAAO,GAAoB,EAAE;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,+DAA+D;IAC/D,KAAK,CAAC,MAAM,CACV,EAAU,EACV,YAAqC,EACrC,OAAO,GAAoB,EAAE;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,YAAY,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,2EAA2E;IAC3E,kDAAkD;IAClD,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,UAAyB,EACzB,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkB;YACnD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACrD,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;SAClC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,EAAU,EACV,MAAc,EACd,IAAc,EACd,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkB;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE;YAC/D,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IACL,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,KAAK,CAAC,MAAM,CACV,MAA4B,EAC5B,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YACrD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wBAAwB;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,MAAqC,EACrC,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YACrD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACxD,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACpD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC5B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACxD,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,iDAAiD;IACjD,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC5B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,WAAW;YACjE,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC5B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,WAAW;YACjE,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IACJ,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,6EAA6E;IAC7E,gEAAgE;IAChE,KAAK,CAAC,IAAI,CACR,MAAgC,EAChC,OAAO,GAAoB,EAAE;QAE7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YACrD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kCAAkC;YACxC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,OAAO,GAAoB,EAAE;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC5B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,oCAAoC,kBAAkB,CAAC,EAAE,CAAC,MAAM;YACtE,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,oBAAoB;IACF,IAAI;IAAjC,YAA6B,IAAgB;oBAAhB,IAAI;IAAe,CAAC;IAEjD,yEAAyE;IACzE,mEAAmE;IACnE,KAAK,CAAC,MAAM,CAAC,MAAyB,EAAE,OAAO,GAAoB,EAAE;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAS;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACf,UAAU,CAA0B;IACpC,QAAQ,CAAwB;IAChC,QAAQ,CAAwB;IAChC,UAAU,CAA0B;IACpC,SAAS,CAAyB;IAClC,OAAO,CAAuB;IAEvC,YAAY,IAAgB;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -1,9 +1,10 @@
1
- export interface KartaOptions {
1
+ export interface DhartaOptions {
2
2
  apiKey: string;
3
3
  baseUrl?: string;
4
4
  fetch?: typeof fetch;
5
5
  formatError?: (status: number, body: unknown) => Error;
6
6
  formatNetworkError?: (url: string, error: unknown) => Error;
7
+ idempotencyKey?: string;
7
8
  }
8
9
  export interface RequestOptions {
9
10
  method?: string;
@@ -11,6 +12,7 @@ export interface RequestOptions {
11
12
  query?: Record<string, string | number | boolean | undefined>;
12
13
  body?: unknown;
13
14
  headers?: Record<string, string>;
15
+ idempotencyKey?: string;
14
16
  }
15
17
  export declare class HttpClient {
16
18
  private readonly apiKey;
@@ -18,9 +20,11 @@ export declare class HttpClient {
18
20
  private readonly fetchImpl;
19
21
  private readonly formatError?;
20
22
  private readonly formatNetworkError?;
21
- constructor(opts: KartaOptions);
23
+ private readonly idempotencyKey?;
24
+ constructor(opts: DhartaOptions);
22
25
  request<T>(opts: RequestOptions): Promise<T>;
23
26
  raw(path: string, init?: RequestInit): Promise<Response>;
27
+ private withIdempotencyKey;
24
28
  private networkError;
25
29
  }
26
30
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAIrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;IAGvD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;CAC7D;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAYD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAyC;IAE7E,YAAY,IAAI,EAAE,YAAY,EAkB7B;IAEK,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAmDjD;IAIK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAc7D;IAED,OAAO,CAAC,YAAY;CAIrB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAIrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;IAGvD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;IAY5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IASjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAkBD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAyC;IAC7E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;IAEzC,YAAY,IAAI,EAAE,aAAa,EAwB9B;IAEK,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAmEjD;IAIK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkB7D;IAWD,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,YAAY;CAIrB"}
@@ -1,4 +1,9 @@
1
- import { errorFor } from "./errors.js";
1
+ import { errorFor, parseRetryAfterSeconds } from "./errors.js";
2
+ import { assertIdempotencyKey, randomIdempotencyKey } from "./idempotency.js";
3
+ const IDEMPOTENCY_HEADER = "Idempotency-Key";
4
+ // The methods the platform installs its idempotency filter on. A read carries
5
+ // the header only when the caller put it there, and never a minted one.
6
+ const MUTATING_METHODS = new Set(["POST", "PUT", "PATCH", "DELETE"]);
2
7
  const PROTECTED_HEADER_NAMES = new Set([
3
8
  "authorization",
4
9
  "host",
@@ -14,6 +19,7 @@ export class HttpClient {
14
19
  fetchImpl;
15
20
  formatError;
16
21
  formatNetworkError;
22
+ idempotencyKey;
17
23
  constructor(opts) {
18
24
  if (!opts.apiKey) {
19
25
  throw new Error("DhartaSDK: `apiKey` is required.");
@@ -30,6 +36,12 @@ export class HttpClient {
30
36
  this.fetchImpl = f.bind(globalThis);
31
37
  this.formatError = opts.formatError;
32
38
  this.formatNetworkError = opts.formatNetworkError;
39
+ // Checked here rather than at first use, so a bad client-wide key fails
40
+ // where it was set instead of on whichever request happens to go first.
41
+ this.idempotencyKey =
42
+ opts.idempotencyKey === undefined
43
+ ? undefined
44
+ : assertIdempotencyKey(opts.idempotencyKey, "idempotencyKey");
33
45
  }
34
46
  async request(opts) {
35
47
  const url = new URL(this.baseUrl + opts.path);
@@ -40,11 +52,11 @@ export class HttpClient {
40
52
  }
41
53
  }
42
54
  const extraHeaders = sanitizeHeaders(opts.headers);
43
- const headers = {
55
+ const headers = this.withIdempotencyKey({
44
56
  Authorization: `Bearer ${this.apiKey}`,
45
57
  Accept: "application/json",
46
58
  ...extraHeaders,
47
- };
59
+ }, opts.method ?? "GET", opts.idempotencyKey);
48
60
  let body;
49
61
  if (opts.body !== undefined) {
50
62
  headers["Content-Type"] = "application/json";
@@ -75,9 +87,21 @@ export class HttpClient {
75
87
  }
76
88
  }
77
89
  if (!res.ok) {
78
- throw this.formatError
90
+ const retryAfterSeconds = parseRetryAfterSeconds(res.headers.get("Retry-After"));
91
+ const error = this.formatError
79
92
  ? this.formatError(res.status, parsed)
80
- : errorFor(res.status, parsed);
93
+ : errorFor(res.status, parsed, retryAfterSeconds);
94
+ // A caller-supplied `formatError` builds its own Error and never sees
95
+ // the response, so attach the delay here too. Otherwise the CLI, which
96
+ // supplies one, would print "you are rate limited" and drop the only
97
+ // part of the answer the user needs: how long to wait.
98
+ if (retryAfterSeconds !== undefined && !("retryAfterSeconds" in error)) {
99
+ Object.defineProperty(error, "retryAfterSeconds", {
100
+ value: retryAfterSeconds,
101
+ enumerable: true,
102
+ });
103
+ }
104
+ throw error;
81
105
  }
82
106
  return parsed;
83
107
  }
@@ -86,19 +110,54 @@ export class HttpClient {
86
110
  async raw(path, init) {
87
111
  const extraHeaders = sanitizeHeaders(init?.headers);
88
112
  const url = this.baseUrl + path;
113
+ // Built OUTSIDE the try. It rejects a malformed Idempotency-Key, and a
114
+ // rejected value is not a transport failure: catching it here would report
115
+ // "could not reach the host" for a key the caller mistyped.
116
+ const headers = this.withIdempotencyKey({
117
+ Authorization: `Bearer ${this.apiKey}`,
118
+ ...extraHeaders,
119
+ }, init?.method ?? "GET");
89
120
  try {
90
- return await this.fetchImpl(url, {
91
- ...init,
92
- headers: {
93
- Authorization: `Bearer ${this.apiKey}`,
94
- ...extraHeaders,
95
- },
96
- });
121
+ return await this.fetchImpl(url, { ...init, headers });
97
122
  }
98
123
  catch (error) {
99
124
  throw this.networkError(url, error);
100
125
  }
101
126
  }
127
+ // One place decides the Idempotency-Key, most specific first: the key this
128
+ // request named, then one a caller wrote as a header by hand, then the
129
+ // client-wide key, then a fresh UUID on a mutation. A read that named none of
130
+ // them carries no key, which is what it did before minting moved here.
131
+ //
132
+ // Whatever wins is written back under the canonical spelling and every other
133
+ // spelling is dropped. HTTP header names are case-insensitive, so leaving a
134
+ // lowercase `idempotency-key` beside the winner would send the value twice
135
+ // and let the server choose.
136
+ withIdempotencyKey(headers, method, requestKey) {
137
+ const merged = {};
138
+ let handWritten;
139
+ for (const [key, value] of Object.entries(headers)) {
140
+ if (key.toLowerCase() === IDEMPOTENCY_HEADER.toLowerCase()) {
141
+ handWritten = value;
142
+ continue;
143
+ }
144
+ merged[key] = value;
145
+ }
146
+ // Both caller-supplied sources are checked, not only the winner: a key that
147
+ // is wrong is worth saying so about, and a caller who supplied two would
148
+ // otherwise learn about the loser's mistake only after changing the winner.
149
+ if (requestKey !== undefined)
150
+ assertIdempotencyKey(requestKey, "idempotencyKey");
151
+ if (handWritten !== undefined)
152
+ assertIdempotencyKey(handWritten, "the Idempotency-Key header");
153
+ const chosen = requestKey
154
+ ?? handWritten
155
+ ?? this.idempotencyKey
156
+ ?? (MUTATING_METHODS.has(method.toUpperCase()) ? randomIdempotencyKey() : undefined);
157
+ if (chosen !== undefined)
158
+ merged[IDEMPOTENCY_HEADER] = chosen;
159
+ return merged;
160
+ }
102
161
  networkError(url, error) {
103
162
  if (this.formatNetworkError)
104
163
  return this.formatNetworkError(url, error);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface MutationOptions {
2
+ idempotencyKey?: string;
3
+ }
4
+ export declare const MAX_IDEMPOTENCY_KEY_LENGTH = 255;
5
+ export declare const INVALID_IDEMPOTENCY_KEY_CODE = "invalid_idempotency_key";
6
+ export declare class InvalidIdempotencyKeyError extends Error {
7
+ readonly code = "invalid_idempotency_key";
8
+ constructor(message: string);
9
+ }
10
+ export declare function assertIdempotencyKey(key: string, source: string): string;
11
+ export declare function randomIdempotencyKey(): string;
12
+ //# sourceMappingURL=idempotency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAkBD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAI9C,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAItE,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,6BAAgC;IAE7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBxE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAoB7C"}
@@ -0,0 +1,72 @@
1
+ // Every Dharta mutation takes an `Idempotency-Key`. The header itself is set by
2
+ // `HttpClient`, which is the one place that can see a caller's key, a
3
+ // client-wide key and the need to mint at the same time; a resource method
4
+ // passes what the caller chose and nothing else.
5
+ // THE rule for an Idempotency-Key, in one place. Every caller-supplied key goes
6
+ // through `assertIdempotencyKey`, wherever it came from: `MutationOptions`, a
7
+ // header a caller wrote by hand, or the client-wide `idempotencyKey` option.
8
+ //
9
+ // 255 is the server's cap (`Idempotent::MAX_KEY_LENGTH`), which it measures with
10
+ // Ruby's `String#length`, counting code points. Printable ASCII is narrower than
11
+ // the server insists on, and deliberately so: the value has to survive an HTTP
12
+ // header, and `fetch` throws a TypeError while BUILDING the request for anything
13
+ // outside ASCII, which surfaces as a message about headers long after the
14
+ // mistake. Excluding the space and the control characters also means a key
15
+ // cannot split a header. Inside 0x21 to 0x7E one character is one byte is one
16
+ // code point, so this cap and the server's measure the same thing.
17
+ //
18
+ // An empty key is rejected rather than passed on. A blank `Idempotency-Key` is
19
+ // how the platform spells "not idempotent", so accepting one would quietly turn
20
+ // the protection OFF for a caller who thought they were turning it on.
21
+ export const MAX_IDEMPOTENCY_KEY_LENGTH = 255;
22
+ const IDEMPOTENCY_KEY_PATTERN = /^[\x21-\x7e]+$/;
23
+ export const INVALID_IDEMPOTENCY_KEY_CODE = "invalid_idempotency_key";
24
+ // Carries a stable `code` so a consumer can map it without matching on English.
25
+ // The CLI maps it to exit 2, the same code every other rejected value gets.
26
+ export class InvalidIdempotencyKeyError extends Error {
27
+ code = INVALID_IDEMPOTENCY_KEY_CODE;
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = "InvalidIdempotencyKeyError";
31
+ }
32
+ }
33
+ // `source` names where the key came from, so a caller with three ways to supply
34
+ // one is told which is wrong. Returns the key, so it reads as a checkpoint.
35
+ export function assertIdempotencyKey(key, source) {
36
+ if (key.length === 0) {
37
+ throw new InvalidIdempotencyKeyError(`${source} cannot be empty. An empty Idempotency-Key turns idempotency off ` +
38
+ "rather than on; omit it to have one minted, or pass a value you keep.");
39
+ }
40
+ if (key.length > MAX_IDEMPOTENCY_KEY_LENGTH) {
41
+ throw new InvalidIdempotencyKeyError(`${source} must be at most ${MAX_IDEMPOTENCY_KEY_LENGTH} characters, got ${key.length}.`);
42
+ }
43
+ if (!IDEMPOTENCY_KEY_PATTERN.test(key)) {
44
+ throw new InvalidIdempotencyKeyError(`${source} must be printable ASCII with no spaces (0x21 to 0x7E). ` +
45
+ "The value travels as an HTTP header, which cannot carry anything else.");
46
+ }
47
+ return key;
48
+ }
49
+ export function randomIdempotencyKey() {
50
+ if (globalThis.crypto?.randomUUID)
51
+ return globalThis.crypto.randomUUID();
52
+ const bytes = new Uint8Array(16);
53
+ if (globalThis.crypto?.getRandomValues) {
54
+ globalThis.crypto.getRandomValues(bytes);
55
+ }
56
+ else {
57
+ for (let i = 0; i < bytes.length; i += 1) {
58
+ bytes[i] = Math.floor(Math.random() * 256);
59
+ }
60
+ }
61
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
62
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
63
+ const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, "0"));
64
+ return [
65
+ hex.slice(0, 4).join(""),
66
+ hex.slice(4, 6).join(""),
67
+ hex.slice(6, 8).join(""),
68
+ hex.slice(8, 10).join(""),
69
+ hex.slice(10, 16).join(""),
70
+ ].join("-");
71
+ }
72
+ //# sourceMappingURL=idempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,29 @@
1
- import { type KartaOptions } from "./http.js";
2
- import { ApiKeysResource, BillingResource, ModelKeysResource, UsageResource, WebhookEndpointsResource } from "./resources.js";
1
+ import { FleetResource } from "./fleet.js";
2
+ import { type DhartaOptions } from "./http.js";
3
+ import { AgentsResource, ApiKeysResource, BillingResource, GithubRepositoriesResource, KartasResource, MembersResource, ModelConnectionsResource, OrganizationResource, ReleasesResource, SourceReposResource, UsageResource, WebhookEndpointsResource } from "./resources.js";
3
4
  export declare class Dharta {
5
+ readonly agents: AgentsResource;
6
+ readonly releases: ReleasesResource;
7
+ readonly githubRepositories: GithubRepositoriesResource;
4
8
  readonly apiKeys: ApiKeysResource;
5
- readonly modelKeys: ModelKeysResource;
9
+ readonly kartas: KartasResource;
10
+ readonly members: MembersResource;
11
+ readonly modelConnections: ModelConnectionsResource;
12
+ readonly organization: OrganizationResource;
13
+ readonly sourceRepos: SourceReposResource;
6
14
  readonly webhookEndpoints: WebhookEndpointsResource;
7
15
  readonly usage: UsageResource;
8
16
  readonly billing: BillingResource;
9
- constructor(opts: KartaOptions);
17
+ readonly fleet: FleetResource;
18
+ constructor(opts: DhartaOptions);
10
19
  }
11
- export type { KartaOptions, RequestOptions } from "./http.js";
20
+ export type { DhartaOptions, RequestOptions } from "./http.js";
21
+ export type { MutationOptions } from "./idempotency.js";
22
+ export { assertIdempotencyKey, InvalidIdempotencyKeyError, INVALID_IDEMPOTENCY_KEY_CODE, MAX_IDEMPOTENCY_KEY_LENGTH, } from "./idempotency.js";
12
23
  export { HttpClient } from "./http.js";
24
+ export type { ModelConnectionApiFormat } from "./types.js";
25
+ export * from "./fleet.js";
13
26
  export * from "./types.js";
14
- export { KartaError, KartaAuthError, KartaForbiddenError, KartaNotFoundError, KartaValidationError, } from "./errors.js";
27
+ export * from "./resources.js";
28
+ export { DhartaError, DhartaAuthError, DhartaForbiddenError, DhartaNotFoundError, DhartaValidationError, } from "./errors.js";
15
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,YAAY,IAAI,EAAE,YAAY,EAO7B;CACF;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,MAAM;IACjB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,YAAY,IAAI,EAAE,aAAa,EAe9B;CACF;AAED,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG/D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC3D,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAI3B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
@@ -1,21 +1,44 @@
1
+ import { FleetResource } from "./fleet.js";
1
2
  import { HttpClient } from "./http.js";
2
- import { ApiKeysResource, BillingResource, ModelKeysResource, UsageResource, WebhookEndpointsResource, } from "./resources.js";
3
+ import { AgentsResource, ApiKeysResource, BillingResource, GithubRepositoriesResource, KartasResource, MembersResource, ModelConnectionsResource, OrganizationResource, ReleasesResource, SourceReposResource, UsageResource, WebhookEndpointsResource, } from "./resources.js";
3
4
  export class Dharta {
5
+ agents;
6
+ releases;
7
+ githubRepositories;
4
8
  apiKeys;
5
- modelKeys;
9
+ kartas;
10
+ members;
11
+ modelConnections;
12
+ organization;
13
+ sourceRepos;
6
14
  webhookEndpoints;
7
15
  usage;
8
16
  billing;
17
+ fleet;
9
18
  constructor(opts) {
10
19
  const http = new HttpClient(opts);
20
+ this.agents = new AgentsResource(http);
21
+ this.releases = new ReleasesResource(http);
22
+ this.githubRepositories = new GithubRepositoriesResource(http);
11
23
  this.apiKeys = new ApiKeysResource(http);
12
- this.modelKeys = new ModelKeysResource(http);
24
+ this.kartas = new KartasResource(http);
25
+ this.members = new MembersResource(http);
26
+ this.modelConnections = new ModelConnectionsResource(http);
27
+ this.organization = new OrganizationResource(http);
28
+ this.sourceRepos = new SourceReposResource(http);
13
29
  this.webhookEndpoints = new WebhookEndpointsResource(http);
14
30
  this.usage = new UsageResource(http);
15
31
  this.billing = new BillingResource(http);
32
+ this.fleet = new FleetResource(http);
16
33
  }
17
34
  }
35
+ export { assertIdempotencyKey, InvalidIdempotencyKeyError, INVALID_IDEMPOTENCY_KEY_CODE, MAX_IDEMPOTENCY_KEY_LENGTH, } from "./idempotency.js";
18
36
  export { HttpClient } from "./http.js";
37
+ export * from "./fleet.js";
19
38
  export * from "./types.js";
20
- export { KartaError, KartaAuthError, KartaForbiddenError, KartaNotFoundError, KartaValidationError, } from "./errors.js";
39
+ // The resource classes and their parameter and result shapes. Consumers reach
40
+ // them through `new Dharta(...)`, but the types have to be nameable: the CLI
41
+ // annotates its command functions with them.
42
+ export * from "./resources.js";
43
+ export { DhartaError, DhartaAuthError, DhartaForbiddenError, DhartaNotFoundError, DhartaValidationError, } from "./errors.js";
21
44
  //# sourceMappingURL=index.js.map