gtypee 1.0.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 (464) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +1442 -0
  3. package/dist/bin/gtypee.d.ts +3 -0
  4. package/dist/bin/gtypee.d.ts.map +1 -0
  5. package/dist/bin/gtypee.js +18 -0
  6. package/dist/bin/gtypee.js.map +1 -0
  7. package/dist/src/authclient/authclient.d.ts +11 -0
  8. package/dist/src/authclient/authclient.d.ts.map +1 -0
  9. package/dist/src/authclient/authclient.js +26 -0
  10. package/dist/src/authclient/authclient.js.map +1 -0
  11. package/dist/src/cmd/agent/commands.d.ts +3 -0
  12. package/dist/src/cmd/agent/commands.d.ts.map +1 -0
  13. package/dist/src/cmd/agent/commands.js +16 -0
  14. package/dist/src/cmd/agent/commands.js.map +1 -0
  15. package/dist/src/cmd/appscript/commands.d.ts +24 -0
  16. package/dist/src/cmd/appscript/commands.d.ts.map +1 -0
  17. package/dist/src/cmd/appscript/commands.js +116 -0
  18. package/dist/src/cmd/appscript/commands.js.map +1 -0
  19. package/dist/src/cmd/appscript/runtime.d.ts +4 -0
  20. package/dist/src/cmd/appscript/runtime.d.ts.map +1 -0
  21. package/dist/src/cmd/appscript/runtime.js +64 -0
  22. package/dist/src/cmd/appscript/runtime.js.map +1 -0
  23. package/dist/src/cmd/auth/commands.d.ts +67 -0
  24. package/dist/src/cmd/auth/commands.d.ts.map +1 -0
  25. package/dist/src/cmd/auth/commands.js +184 -0
  26. package/dist/src/cmd/auth/commands.js.map +1 -0
  27. package/dist/src/cmd/auth/runtime.d.ts +20 -0
  28. package/dist/src/cmd/auth/runtime.d.ts.map +1 -0
  29. package/dist/src/cmd/auth/runtime.js +237 -0
  30. package/dist/src/cmd/auth/runtime.js.map +1 -0
  31. package/dist/src/cmd/calendar/commands.d.ts +58 -0
  32. package/dist/src/cmd/calendar/commands.d.ts.map +1 -0
  33. package/dist/src/cmd/calendar/commands.js +161 -0
  34. package/dist/src/cmd/calendar/commands.js.map +1 -0
  35. package/dist/src/cmd/calendar/runtime.d.ts +4 -0
  36. package/dist/src/cmd/calendar/runtime.d.ts.map +1 -0
  37. package/dist/src/cmd/calendar/runtime.js +164 -0
  38. package/dist/src/cmd/calendar/runtime.js.map +1 -0
  39. package/dist/src/cmd/chat/commands.d.ts +27 -0
  40. package/dist/src/cmd/chat/commands.d.ts.map +1 -0
  41. package/dist/src/cmd/chat/commands.js +113 -0
  42. package/dist/src/cmd/chat/commands.js.map +1 -0
  43. package/dist/src/cmd/chat/runtime.d.ts +4 -0
  44. package/dist/src/cmd/chat/runtime.d.ts.map +1 -0
  45. package/dist/src/cmd/chat/runtime.js +67 -0
  46. package/dist/src/cmd/chat/runtime.js.map +1 -0
  47. package/dist/src/cmd/classroom/commands.d.ts +22 -0
  48. package/dist/src/cmd/classroom/commands.d.ts.map +1 -0
  49. package/dist/src/cmd/classroom/commands.js +91 -0
  50. package/dist/src/cmd/classroom/commands.js.map +1 -0
  51. package/dist/src/cmd/classroom/runtime.d.ts +4 -0
  52. package/dist/src/cmd/classroom/runtime.d.ts.map +1 -0
  53. package/dist/src/cmd/classroom/runtime.js +67 -0
  54. package/dist/src/cmd/classroom/runtime.js.map +1 -0
  55. package/dist/src/cmd/command-registry.d.ts +8 -0
  56. package/dist/src/cmd/command-registry.d.ts.map +1 -0
  57. package/dist/src/cmd/command-registry.js +40 -0
  58. package/dist/src/cmd/command-registry.js.map +1 -0
  59. package/dist/src/cmd/completion/commands.d.ts +3 -0
  60. package/dist/src/cmd/completion/commands.d.ts.map +1 -0
  61. package/dist/src/cmd/completion/commands.js +29 -0
  62. package/dist/src/cmd/completion/commands.js.map +1 -0
  63. package/dist/src/cmd/config/commands.d.ts +10 -0
  64. package/dist/src/cmd/config/commands.d.ts.map +1 -0
  65. package/dist/src/cmd/config/commands.js +106 -0
  66. package/dist/src/cmd/config/commands.js.map +1 -0
  67. package/dist/src/cmd/contacts/commands.d.ts +18 -0
  68. package/dist/src/cmd/contacts/commands.d.ts.map +1 -0
  69. package/dist/src/cmd/contacts/commands.js +79 -0
  70. package/dist/src/cmd/contacts/commands.js.map +1 -0
  71. package/dist/src/cmd/contacts/runtime.d.ts +4 -0
  72. package/dist/src/cmd/contacts/runtime.d.ts.map +1 -0
  73. package/dist/src/cmd/contacts/runtime.js +67 -0
  74. package/dist/src/cmd/contacts/runtime.js.map +1 -0
  75. package/dist/src/cmd/docs/commands.d.ts +24 -0
  76. package/dist/src/cmd/docs/commands.d.ts.map +1 -0
  77. package/dist/src/cmd/docs/commands.js +82 -0
  78. package/dist/src/cmd/docs/commands.js.map +1 -0
  79. package/dist/src/cmd/docs/runtime.d.ts +4 -0
  80. package/dist/src/cmd/docs/runtime.d.ts.map +1 -0
  81. package/dist/src/cmd/docs/runtime.js +77 -0
  82. package/dist/src/cmd/docs/runtime.js.map +1 -0
  83. package/dist/src/cmd/drive/commands.d.ts +112 -0
  84. package/dist/src/cmd/drive/commands.d.ts.map +1 -0
  85. package/dist/src/cmd/drive/commands.js +431 -0
  86. package/dist/src/cmd/drive/commands.js.map +1 -0
  87. package/dist/src/cmd/drive/runtime.d.ts +4 -0
  88. package/dist/src/cmd/drive/runtime.d.ts.map +1 -0
  89. package/dist/src/cmd/drive/runtime.js +336 -0
  90. package/dist/src/cmd/drive/runtime.js.map +1 -0
  91. package/dist/src/cmd/execution-context.d.ts +33 -0
  92. package/dist/src/cmd/execution-context.d.ts.map +1 -0
  93. package/dist/src/cmd/execution-context.js +31 -0
  94. package/dist/src/cmd/execution-context.js.map +1 -0
  95. package/dist/src/cmd/exit-codes/commands.d.ts +5 -0
  96. package/dist/src/cmd/exit-codes/commands.d.ts.map +1 -0
  97. package/dist/src/cmd/exit-codes/commands.js +25 -0
  98. package/dist/src/cmd/exit-codes/commands.js.map +1 -0
  99. package/dist/src/cmd/exit-codes.d.ts +4 -0
  100. package/dist/src/cmd/exit-codes.d.ts.map +1 -0
  101. package/dist/src/cmd/exit-codes.js +4 -0
  102. package/dist/src/cmd/exit-codes.js.map +1 -0
  103. package/dist/src/cmd/exit.d.ts +7 -0
  104. package/dist/src/cmd/exit.d.ts.map +1 -0
  105. package/dist/src/cmd/exit.js +19 -0
  106. package/dist/src/cmd/exit.js.map +1 -0
  107. package/dist/src/cmd/forms/commands.d.ts +19 -0
  108. package/dist/src/cmd/forms/commands.d.ts.map +1 -0
  109. package/dist/src/cmd/forms/commands.js +73 -0
  110. package/dist/src/cmd/forms/commands.js.map +1 -0
  111. package/dist/src/cmd/forms/runtime.d.ts +4 -0
  112. package/dist/src/cmd/forms/runtime.d.ts.map +1 -0
  113. package/dist/src/cmd/forms/runtime.js +38 -0
  114. package/dist/src/cmd/forms/runtime.js.map +1 -0
  115. package/dist/src/cmd/gmail/commands.d.ts +187 -0
  116. package/dist/src/cmd/gmail/commands.d.ts.map +1 -0
  117. package/dist/src/cmd/gmail/commands.js +767 -0
  118. package/dist/src/cmd/gmail/commands.js.map +1 -0
  119. package/dist/src/cmd/gmail/runtime.d.ts +9 -0
  120. package/dist/src/cmd/gmail/runtime.d.ts.map +1 -0
  121. package/dist/src/cmd/gmail/runtime.js +644 -0
  122. package/dist/src/cmd/gmail/runtime.js.map +1 -0
  123. package/dist/src/cmd/groups/commands.d.ts +26 -0
  124. package/dist/src/cmd/groups/commands.d.ts.map +1 -0
  125. package/dist/src/cmd/groups/commands.js +105 -0
  126. package/dist/src/cmd/groups/commands.js.map +1 -0
  127. package/dist/src/cmd/groups/runtime.d.ts +4 -0
  128. package/dist/src/cmd/groups/runtime.d.ts.map +1 -0
  129. package/dist/src/cmd/groups/runtime.js +61 -0
  130. package/dist/src/cmd/groups/runtime.js.map +1 -0
  131. package/dist/src/cmd/keep/commands.d.ts +23 -0
  132. package/dist/src/cmd/keep/commands.d.ts.map +1 -0
  133. package/dist/src/cmd/keep/commands.js +111 -0
  134. package/dist/src/cmd/keep/commands.js.map +1 -0
  135. package/dist/src/cmd/keep/runtime.d.ts +4 -0
  136. package/dist/src/cmd/keep/runtime.d.ts.map +1 -0
  137. package/dist/src/cmd/keep/runtime.js +82 -0
  138. package/dist/src/cmd/keep/runtime.js.map +1 -0
  139. package/dist/src/cmd/people/commands.d.ts +22 -0
  140. package/dist/src/cmd/people/commands.d.ts.map +1 -0
  141. package/dist/src/cmd/people/commands.js +96 -0
  142. package/dist/src/cmd/people/commands.js.map +1 -0
  143. package/dist/src/cmd/people/runtime.d.ts +4 -0
  144. package/dist/src/cmd/people/runtime.d.ts.map +1 -0
  145. package/dist/src/cmd/people/runtime.js +65 -0
  146. package/dist/src/cmd/people/runtime.js.map +1 -0
  147. package/dist/src/cmd/rewrite-desire-path-args.d.ts +2 -0
  148. package/dist/src/cmd/rewrite-desire-path-args.d.ts.map +1 -0
  149. package/dist/src/cmd/rewrite-desire-path-args.js +75 -0
  150. package/dist/src/cmd/rewrite-desire-path-args.js.map +1 -0
  151. package/dist/src/cmd/root.d.ts +10 -0
  152. package/dist/src/cmd/root.d.ts.map +1 -0
  153. package/dist/src/cmd/root.js +341 -0
  154. package/dist/src/cmd/root.js.map +1 -0
  155. package/dist/src/cmd/schema/commands.d.ts +3 -0
  156. package/dist/src/cmd/schema/commands.d.ts.map +1 -0
  157. package/dist/src/cmd/schema/commands.js +21 -0
  158. package/dist/src/cmd/schema/commands.js.map +1 -0
  159. package/dist/src/cmd/script-path.d.ts +2 -0
  160. package/dist/src/cmd/script-path.d.ts.map +1 -0
  161. package/dist/src/cmd/script-path.js +4 -0
  162. package/dist/src/cmd/script-path.js.map +1 -0
  163. package/dist/src/cmd/sheets/commands.d.ts +20 -0
  164. package/dist/src/cmd/sheets/commands.d.ts.map +1 -0
  165. package/dist/src/cmd/sheets/commands.js +79 -0
  166. package/dist/src/cmd/sheets/commands.js.map +1 -0
  167. package/dist/src/cmd/sheets/runtime.d.ts +4 -0
  168. package/dist/src/cmd/sheets/runtime.d.ts.map +1 -0
  169. package/dist/src/cmd/sheets/runtime.js +37 -0
  170. package/dist/src/cmd/sheets/runtime.js.map +1 -0
  171. package/dist/src/cmd/slides/commands.d.ts +24 -0
  172. package/dist/src/cmd/slides/commands.d.ts.map +1 -0
  173. package/dist/src/cmd/slides/commands.js +90 -0
  174. package/dist/src/cmd/slides/commands.js.map +1 -0
  175. package/dist/src/cmd/slides/runtime.d.ts +4 -0
  176. package/dist/src/cmd/slides/runtime.d.ts.map +1 -0
  177. package/dist/src/cmd/slides/runtime.js +92 -0
  178. package/dist/src/cmd/slides/runtime.js.map +1 -0
  179. package/dist/src/cmd/tasks/commands.d.ts +28 -0
  180. package/dist/src/cmd/tasks/commands.d.ts.map +1 -0
  181. package/dist/src/cmd/tasks/commands.js +103 -0
  182. package/dist/src/cmd/tasks/commands.js.map +1 -0
  183. package/dist/src/cmd/tasks/runtime.d.ts +4 -0
  184. package/dist/src/cmd/tasks/runtime.d.ts.map +1 -0
  185. package/dist/src/cmd/tasks/runtime.js +56 -0
  186. package/dist/src/cmd/tasks/runtime.js.map +1 -0
  187. package/dist/src/cmd/time/commands.d.ts +17 -0
  188. package/dist/src/cmd/time/commands.d.ts.map +1 -0
  189. package/dist/src/cmd/time/commands.js +88 -0
  190. package/dist/src/cmd/time/commands.js.map +1 -0
  191. package/dist/src/cmd/version/commands.d.ts +3 -0
  192. package/dist/src/cmd/version/commands.d.ts.map +1 -0
  193. package/dist/src/cmd/version/commands.js +17 -0
  194. package/dist/src/cmd/version/commands.js.map +1 -0
  195. package/dist/src/cmd/workspace/commands.d.ts +222 -0
  196. package/dist/src/cmd/workspace/commands.d.ts.map +1 -0
  197. package/dist/src/cmd/workspace/commands.js +685 -0
  198. package/dist/src/cmd/workspace/commands.js.map +1 -0
  199. package/dist/src/cmd/workspace/runtime.d.ts +8 -0
  200. package/dist/src/cmd/workspace/runtime.d.ts.map +1 -0
  201. package/dist/src/cmd/workspace/runtime.js +852 -0
  202. package/dist/src/cmd/workspace/runtime.js.map +1 -0
  203. package/dist/src/config/clients.d.ts +8 -0
  204. package/dist/src/config/clients.d.ts.map +1 -0
  205. package/dist/src/config/clients.js +95 -0
  206. package/dist/src/config/clients.js.map +1 -0
  207. package/dist/src/config/config.d.ts +11 -0
  208. package/dist/src/config/config.d.ts.map +1 -0
  209. package/dist/src/config/config.js +54 -0
  210. package/dist/src/config/config.js.map +1 -0
  211. package/dist/src/config/credentials.d.ts +16 -0
  212. package/dist/src/config/credentials.d.ts.map +1 -0
  213. package/dist/src/config/credentials.js +97 -0
  214. package/dist/src/config/credentials.js.map +1 -0
  215. package/dist/src/config/migration.d.ts +13 -0
  216. package/dist/src/config/migration.d.ts.map +1 -0
  217. package/dist/src/config/migration.js +70 -0
  218. package/dist/src/config/migration.js.map +1 -0
  219. package/dist/src/config/paths.d.ts +11 -0
  220. package/dist/src/config/paths.d.ts.map +1 -0
  221. package/dist/src/config/paths.js +74 -0
  222. package/dist/src/config/paths.js.map +1 -0
  223. package/dist/src/googleapi/auth-factory.d.ts +46 -0
  224. package/dist/src/googleapi/auth-factory.d.ts.map +1 -0
  225. package/dist/src/googleapi/auth-factory.js +88 -0
  226. package/dist/src/googleapi/auth-factory.js.map +1 -0
  227. package/dist/src/googleapi/calendar.d.ts +3 -0
  228. package/dist/src/googleapi/calendar.d.ts.map +1 -0
  229. package/dist/src/googleapi/calendar.js +21 -0
  230. package/dist/src/googleapi/calendar.js.map +1 -0
  231. package/dist/src/googleapi/circuitbreaker.d.ts +19 -0
  232. package/dist/src/googleapi/circuitbreaker.d.ts.map +1 -0
  233. package/dist/src/googleapi/circuitbreaker.js +43 -0
  234. package/dist/src/googleapi/circuitbreaker.js.map +1 -0
  235. package/dist/src/googleapi/client.d.ts +17 -0
  236. package/dist/src/googleapi/client.d.ts.map +1 -0
  237. package/dist/src/googleapi/client.js +18 -0
  238. package/dist/src/googleapi/client.js.map +1 -0
  239. package/dist/src/googleapi/drive.d.ts +3 -0
  240. package/dist/src/googleapi/drive.d.ts.map +1 -0
  241. package/dist/src/googleapi/drive.js +11 -0
  242. package/dist/src/googleapi/drive.js.map +1 -0
  243. package/dist/src/googleapi/errors.d.ts +37 -0
  244. package/dist/src/googleapi/errors.d.ts.map +1 -0
  245. package/dist/src/googleapi/errors.js +93 -0
  246. package/dist/src/googleapi/errors.js.map +1 -0
  247. package/dist/src/googleapi/retry-constants.d.ts +5 -0
  248. package/dist/src/googleapi/retry-constants.d.ts.map +1 -0
  249. package/dist/src/googleapi/retry-constants.js +5 -0
  250. package/dist/src/googleapi/retry-constants.js.map +1 -0
  251. package/dist/src/googleapi/transport.d.ts +3 -0
  252. package/dist/src/googleapi/transport.d.ts.map +1 -0
  253. package/dist/src/googleapi/transport.js +39 -0
  254. package/dist/src/googleapi/transport.js.map +1 -0
  255. package/dist/src/googleauth/oauth-flow.d.ts +62 -0
  256. package/dist/src/googleauth/oauth-flow.d.ts.map +1 -0
  257. package/dist/src/googleauth/oauth-flow.js +262 -0
  258. package/dist/src/googleauth/oauth-flow.js.map +1 -0
  259. package/dist/src/googleauth/service.d.ts +28 -0
  260. package/dist/src/googleauth/service.d.ts.map +1 -0
  261. package/dist/src/googleauth/service.js +345 -0
  262. package/dist/src/googleauth/service.js.map +1 -0
  263. package/dist/src/index.d.ts +2 -0
  264. package/dist/src/index.d.ts.map +1 -0
  265. package/dist/src/index.js +2 -0
  266. package/dist/src/index.js.map +1 -0
  267. package/dist/src/outfmt/outfmt.d.ts +8 -0
  268. package/dist/src/outfmt/outfmt.d.ts.map +1 -0
  269. package/dist/src/outfmt/outfmt.js +66 -0
  270. package/dist/src/outfmt/outfmt.js.map +1 -0
  271. package/dist/src/secrets/store.d.ts +61 -0
  272. package/dist/src/secrets/store.d.ts.map +1 -0
  273. package/dist/src/secrets/store.js +247 -0
  274. package/dist/src/secrets/store.js.map +1 -0
  275. package/dist/test/authclient/authclient.test.d.ts +2 -0
  276. package/dist/test/authclient/authclient.test.d.ts.map +1 -0
  277. package/dist/test/authclient/authclient.test.js +14 -0
  278. package/dist/test/authclient/authclient.test.js.map +1 -0
  279. package/dist/test/bin/gtypee-entrypoint.test.d.ts +2 -0
  280. package/dist/test/bin/gtypee-entrypoint.test.d.ts.map +1 -0
  281. package/dist/test/bin/gtypee-entrypoint.test.js +17 -0
  282. package/dist/test/bin/gtypee-entrypoint.test.js.map +1 -0
  283. package/dist/test/cmd/agent/commands.test.d.ts +2 -0
  284. package/dist/test/cmd/agent/commands.test.d.ts.map +1 -0
  285. package/dist/test/cmd/agent/commands.test.js +12 -0
  286. package/dist/test/cmd/agent/commands.test.js.map +1 -0
  287. package/dist/test/cmd/appscript/commands.test.d.ts +2 -0
  288. package/dist/test/cmd/appscript/commands.test.d.ts.map +1 -0
  289. package/dist/test/cmd/appscript/commands.test.js +104 -0
  290. package/dist/test/cmd/appscript/commands.test.js.map +1 -0
  291. package/dist/test/cmd/auth/commands.test.d.ts +2 -0
  292. package/dist/test/cmd/auth/commands.test.d.ts.map +1 -0
  293. package/dist/test/cmd/auth/commands.test.js +142 -0
  294. package/dist/test/cmd/auth/commands.test.js.map +1 -0
  295. package/dist/test/cmd/auth/runtime.test.d.ts +2 -0
  296. package/dist/test/cmd/auth/runtime.test.d.ts.map +1 -0
  297. package/dist/test/cmd/auth/runtime.test.js +214 -0
  298. package/dist/test/cmd/auth/runtime.test.js.map +1 -0
  299. package/dist/test/cmd/calendar/commands.test.d.ts +2 -0
  300. package/dist/test/cmd/calendar/commands.test.d.ts.map +1 -0
  301. package/dist/test/cmd/calendar/commands.test.js +121 -0
  302. package/dist/test/cmd/calendar/commands.test.js.map +1 -0
  303. package/dist/test/cmd/chat/commands.test.d.ts +2 -0
  304. package/dist/test/cmd/chat/commands.test.d.ts.map +1 -0
  305. package/dist/test/cmd/chat/commands.test.js +57 -0
  306. package/dist/test/cmd/chat/commands.test.js.map +1 -0
  307. package/dist/test/cmd/classroom/commands.test.d.ts +2 -0
  308. package/dist/test/cmd/classroom/commands.test.d.ts.map +1 -0
  309. package/dist/test/cmd/classroom/commands.test.js +61 -0
  310. package/dist/test/cmd/classroom/commands.test.js.map +1 -0
  311. package/dist/test/cmd/completion/commands.test.d.ts +2 -0
  312. package/dist/test/cmd/completion/commands.test.d.ts.map +1 -0
  313. package/dist/test/cmd/completion/commands.test.js +30 -0
  314. package/dist/test/cmd/completion/commands.test.js.map +1 -0
  315. package/dist/test/cmd/config/commands.test.d.ts +2 -0
  316. package/dist/test/cmd/config/commands.test.d.ts.map +1 -0
  317. package/dist/test/cmd/config/commands.test.js +21 -0
  318. package/dist/test/cmd/config/commands.test.js.map +1 -0
  319. package/dist/test/cmd/contacts/commands.test.d.ts +2 -0
  320. package/dist/test/cmd/contacts/commands.test.d.ts.map +1 -0
  321. package/dist/test/cmd/contacts/commands.test.js +51 -0
  322. package/dist/test/cmd/contacts/commands.test.js.map +1 -0
  323. package/dist/test/cmd/docs/commands.test.d.ts +2 -0
  324. package/dist/test/cmd/docs/commands.test.d.ts.map +1 -0
  325. package/dist/test/cmd/docs/commands.test.js +39 -0
  326. package/dist/test/cmd/docs/commands.test.js.map +1 -0
  327. package/dist/test/cmd/drive/commands.test.d.ts +2 -0
  328. package/dist/test/cmd/drive/commands.test.d.ts.map +1 -0
  329. package/dist/test/cmd/drive/commands.test.js +409 -0
  330. package/dist/test/cmd/drive/commands.test.js.map +1 -0
  331. package/dist/test/cmd/execution-context.test.d.ts +2 -0
  332. package/dist/test/cmd/execution-context.test.d.ts.map +1 -0
  333. package/dist/test/cmd/execution-context.test.js +29 -0
  334. package/dist/test/cmd/execution-context.test.js.map +1 -0
  335. package/dist/test/cmd/exit-codes/commands.test.d.ts +2 -0
  336. package/dist/test/cmd/exit-codes/commands.test.d.ts.map +1 -0
  337. package/dist/test/cmd/exit-codes/commands.test.js +19 -0
  338. package/dist/test/cmd/exit-codes/commands.test.js.map +1 -0
  339. package/dist/test/cmd/exit.test.d.ts +2 -0
  340. package/dist/test/cmd/exit.test.d.ts.map +1 -0
  341. package/dist/test/cmd/exit.test.js +14 -0
  342. package/dist/test/cmd/exit.test.js.map +1 -0
  343. package/dist/test/cmd/forms/commands.test.d.ts +2 -0
  344. package/dist/test/cmd/forms/commands.test.d.ts.map +1 -0
  345. package/dist/test/cmd/forms/commands.test.js +42 -0
  346. package/dist/test/cmd/forms/commands.test.js.map +1 -0
  347. package/dist/test/cmd/gmail/commands.test.d.ts +2 -0
  348. package/dist/test/cmd/gmail/commands.test.d.ts.map +1 -0
  349. package/dist/test/cmd/gmail/commands.test.js +315 -0
  350. package/dist/test/cmd/gmail/commands.test.js.map +1 -0
  351. package/dist/test/cmd/groups/commands.test.d.ts +2 -0
  352. package/dist/test/cmd/groups/commands.test.d.ts.map +1 -0
  353. package/dist/test/cmd/groups/commands.test.js +79 -0
  354. package/dist/test/cmd/groups/commands.test.js.map +1 -0
  355. package/dist/test/cmd/keep/commands.test.d.ts +2 -0
  356. package/dist/test/cmd/keep/commands.test.d.ts.map +1 -0
  357. package/dist/test/cmd/keep/commands.test.js +87 -0
  358. package/dist/test/cmd/keep/commands.test.js.map +1 -0
  359. package/dist/test/cmd/people/commands.test.d.ts +2 -0
  360. package/dist/test/cmd/people/commands.test.d.ts.map +1 -0
  361. package/dist/test/cmd/people/commands.test.js +52 -0
  362. package/dist/test/cmd/people/commands.test.js.map +1 -0
  363. package/dist/test/cmd/rewrite-desire-path-args.test.d.ts +2 -0
  364. package/dist/test/cmd/rewrite-desire-path-args.test.d.ts.map +1 -0
  365. package/dist/test/cmd/rewrite-desire-path-args.test.js +21 -0
  366. package/dist/test/cmd/rewrite-desire-path-args.test.js.map +1 -0
  367. package/dist/test/cmd/root.test.d.ts +2 -0
  368. package/dist/test/cmd/root.test.d.ts.map +1 -0
  369. package/dist/test/cmd/root.test.js +323 -0
  370. package/dist/test/cmd/root.test.js.map +1 -0
  371. package/dist/test/cmd/runtime-scopes.test.d.ts +2 -0
  372. package/dist/test/cmd/runtime-scopes.test.d.ts.map +1 -0
  373. package/dist/test/cmd/runtime-scopes.test.js +133 -0
  374. package/dist/test/cmd/runtime-scopes.test.js.map +1 -0
  375. package/dist/test/cmd/schema/commands.test.d.ts +2 -0
  376. package/dist/test/cmd/schema/commands.test.d.ts.map +1 -0
  377. package/dist/test/cmd/schema/commands.test.js +31 -0
  378. package/dist/test/cmd/schema/commands.test.js.map +1 -0
  379. package/dist/test/cmd/sheets/commands.test.d.ts +2 -0
  380. package/dist/test/cmd/sheets/commands.test.d.ts.map +1 -0
  381. package/dist/test/cmd/sheets/commands.test.js +39 -0
  382. package/dist/test/cmd/sheets/commands.test.js.map +1 -0
  383. package/dist/test/cmd/slides/commands.test.d.ts +2 -0
  384. package/dist/test/cmd/slides/commands.test.d.ts.map +1 -0
  385. package/dist/test/cmd/slides/commands.test.js +48 -0
  386. package/dist/test/cmd/slides/commands.test.js.map +1 -0
  387. package/dist/test/cmd/tasks/commands.test.d.ts +2 -0
  388. package/dist/test/cmd/tasks/commands.test.d.ts.map +1 -0
  389. package/dist/test/cmd/tasks/commands.test.js +74 -0
  390. package/dist/test/cmd/tasks/commands.test.js.map +1 -0
  391. package/dist/test/cmd/time/commands.test.d.ts +2 -0
  392. package/dist/test/cmd/time/commands.test.d.ts.map +1 -0
  393. package/dist/test/cmd/time/commands.test.js +52 -0
  394. package/dist/test/cmd/time/commands.test.js.map +1 -0
  395. package/dist/test/cmd/version/commands.test.d.ts +2 -0
  396. package/dist/test/cmd/version/commands.test.d.ts.map +1 -0
  397. package/dist/test/cmd/version/commands.test.js +12 -0
  398. package/dist/test/cmd/version/commands.test.js.map +1 -0
  399. package/dist/test/cmd/workspace/commands.test.d.ts +2 -0
  400. package/dist/test/cmd/workspace/commands.test.d.ts.map +1 -0
  401. package/dist/test/cmd/workspace/commands.test.js +285 -0
  402. package/dist/test/cmd/workspace/commands.test.js.map +1 -0
  403. package/dist/test/config/clients.test.d.ts +2 -0
  404. package/dist/test/config/clients.test.d.ts.map +1 -0
  405. package/dist/test/config/clients.test.js +42 -0
  406. package/dist/test/config/clients.test.js.map +1 -0
  407. package/dist/test/config/config.test.d.ts +2 -0
  408. package/dist/test/config/config.test.d.ts.map +1 -0
  409. package/dist/test/config/config.test.js +80 -0
  410. package/dist/test/config/config.test.js.map +1 -0
  411. package/dist/test/config/credentials.test.d.ts +2 -0
  412. package/dist/test/config/credentials.test.d.ts.map +1 -0
  413. package/dist/test/config/credentials.test.js +78 -0
  414. package/dist/test/config/credentials.test.js.map +1 -0
  415. package/dist/test/config/migration.test.d.ts +2 -0
  416. package/dist/test/config/migration.test.d.ts.map +1 -0
  417. package/dist/test/config/migration.test.js +136 -0
  418. package/dist/test/config/migration.test.js.map +1 -0
  419. package/dist/test/config/paths.test.d.ts +2 -0
  420. package/dist/test/config/paths.test.d.ts.map +1 -0
  421. package/dist/test/config/paths.test.js +31 -0
  422. package/dist/test/config/paths.test.js.map +1 -0
  423. package/dist/test/googleapi/auth-factory.test.d.ts +2 -0
  424. package/dist/test/googleapi/auth-factory.test.d.ts.map +1 -0
  425. package/dist/test/googleapi/auth-factory.test.js +215 -0
  426. package/dist/test/googleapi/auth-factory.test.js.map +1 -0
  427. package/dist/test/googleapi/circuitbreaker.test.d.ts +2 -0
  428. package/dist/test/googleapi/circuitbreaker.test.d.ts.map +1 -0
  429. package/dist/test/googleapi/circuitbreaker.test.js +30 -0
  430. package/dist/test/googleapi/circuitbreaker.test.js.map +1 -0
  431. package/dist/test/googleapi/client.test.d.ts +2 -0
  432. package/dist/test/googleapi/client.test.d.ts.map +1 -0
  433. package/dist/test/googleapi/client.test.js +16 -0
  434. package/dist/test/googleapi/client.test.js.map +1 -0
  435. package/dist/test/googleapi/errors.test.d.ts +2 -0
  436. package/dist/test/googleapi/errors.test.d.ts.map +1 -0
  437. package/dist/test/googleapi/errors.test.js +21 -0
  438. package/dist/test/googleapi/errors.test.js.map +1 -0
  439. package/dist/test/googleapi/transport.test.d.ts +2 -0
  440. package/dist/test/googleapi/transport.test.d.ts.map +1 -0
  441. package/dist/test/googleapi/transport.test.js +25 -0
  442. package/dist/test/googleapi/transport.test.js.map +1 -0
  443. package/dist/test/googleauth/oauth-flow.test.d.ts +2 -0
  444. package/dist/test/googleauth/oauth-flow.test.d.ts.map +1 -0
  445. package/dist/test/googleauth/oauth-flow.test.js +85 -0
  446. package/dist/test/googleauth/oauth-flow.test.js.map +1 -0
  447. package/dist/test/googleauth/service.test.d.ts +2 -0
  448. package/dist/test/googleauth/service.test.d.ts.map +1 -0
  449. package/dist/test/googleauth/service.test.js +51 -0
  450. package/dist/test/googleauth/service.test.js.map +1 -0
  451. package/dist/test/outfmt/outfmt.test.d.ts +2 -0
  452. package/dist/test/outfmt/outfmt.test.d.ts.map +1 -0
  453. package/dist/test/outfmt/outfmt.test.js +41 -0
  454. package/dist/test/outfmt/outfmt.test.js.map +1 -0
  455. package/dist/test/secrets/store.test.d.ts +2 -0
  456. package/dist/test/secrets/store.test.d.ts.map +1 -0
  457. package/dist/test/secrets/store.test.js +164 -0
  458. package/dist/test/secrets/store.test.js.map +1 -0
  459. package/dist/vitest.config.d.ts +3 -0
  460. package/dist/vitest.config.d.ts.map +1 -0
  461. package/dist/vitest.config.js +11 -0
  462. package/dist/vitest.config.js.map +1 -0
  463. package/logo.svg +16 -0
  464. package/package.json +69 -0
@@ -0,0 +1,767 @@
1
+ import { defaultGmailListQuery } from "../../googleapi/client.js";
2
+ import { toCliApiErrorMessage } from "../../googleapi/errors.js";
3
+ import { buildExecutionContext } from "../execution-context.js";
4
+ const defaultDeps = {
5
+ sendEmail: async () => ({
6
+ id: "",
7
+ threadId: "",
8
+ accepted: false,
9
+ }),
10
+ searchEmails: async () => [],
11
+ listLabels: async () => [],
12
+ getMessage: async () => ({
13
+ id: "",
14
+ threadId: "",
15
+ from: "",
16
+ to: "",
17
+ subject: "",
18
+ date: "",
19
+ body: "",
20
+ }),
21
+ deleteMessage: async () => ({
22
+ id: "",
23
+ applied: false,
24
+ }),
25
+ trashMessage: async () => ({
26
+ id: "",
27
+ applied: false,
28
+ }),
29
+ untrashMessage: async () => ({
30
+ id: "",
31
+ applied: false,
32
+ }),
33
+ modifyMessage: async () => ({
34
+ id: "",
35
+ addedLabels: [],
36
+ removedLabels: [],
37
+ applied: false,
38
+ }),
39
+ };
40
+ const defaultDraftDeps = {
41
+ createDraft: async () => ({
42
+ id: "",
43
+ message: { id: "", threadId: "", subject: "" },
44
+ applied: false,
45
+ }),
46
+ listDrafts: async () => [],
47
+ getDraft: async () => ({
48
+ id: "",
49
+ message: { id: "", threadId: "", from: "", to: "", subject: "", date: "", body: "" },
50
+ }),
51
+ deleteDraft: async () => ({
52
+ id: "",
53
+ applied: false,
54
+ }),
55
+ sendDraft: async () => ({
56
+ id: "",
57
+ threadId: "",
58
+ sent: false,
59
+ }),
60
+ };
61
+ const defaultThreadDeps = {
62
+ listThreads: async () => [],
63
+ getThread: async () => ({
64
+ id: "",
65
+ messages: [],
66
+ }),
67
+ };
68
+ const defaultLabelDeps = {
69
+ createLabel: async () => ({
70
+ id: "",
71
+ name: "",
72
+ applied: false,
73
+ }),
74
+ getLabel: async () => ({
75
+ id: "",
76
+ name: "",
77
+ type: "",
78
+ }),
79
+ updateLabel: async () => ({
80
+ id: "",
81
+ name: "",
82
+ applied: false,
83
+ }),
84
+ deleteLabel: async () => ({
85
+ id: "",
86
+ applied: false,
87
+ }),
88
+ };
89
+ const defaultFilterDeps = {
90
+ listFilters: async () => [],
91
+ createFilter: async () => ({
92
+ id: "",
93
+ query: "",
94
+ addLabelIds: [],
95
+ applied: false,
96
+ }),
97
+ deleteFilter: async () => ({
98
+ id: "",
99
+ applied: false,
100
+ }),
101
+ };
102
+ const defaultSignatureDeps = {
103
+ listSendAs: async () => [],
104
+ getSendAs: async () => ({
105
+ sendAsEmail: "",
106
+ isPrimary: false,
107
+ }),
108
+ setSignature: async () => ({
109
+ email: "",
110
+ applied: false,
111
+ }),
112
+ };
113
+ export function formatGmailLabels(labels, mode) {
114
+ if (mode === "json") {
115
+ return JSON.stringify({ labels }, null, 2);
116
+ }
117
+ if (labels.length === 0) {
118
+ return "No labels found";
119
+ }
120
+ const lines = ["ID\tNAME"];
121
+ for (const label of labels) {
122
+ lines.push(`${label.id}\t${label.name}`);
123
+ }
124
+ return lines.join("\n");
125
+ }
126
+ async function runWithStableApiError(service, call) {
127
+ try {
128
+ return await call();
129
+ }
130
+ catch (error) {
131
+ throw new Error(toCliApiErrorMessage(service, error), { cause: error });
132
+ }
133
+ }
134
+ export function formatGmailSearchResult(messages, mode) {
135
+ if (mode === "json") {
136
+ return JSON.stringify({ messages }, null, 2);
137
+ }
138
+ if (messages.length === 0) {
139
+ return "No messages found";
140
+ }
141
+ const lines = ["ID\tTHREAD\tSUBJECT"];
142
+ for (const message of messages) {
143
+ lines.push(`${message.id}\t${message.threadId}\t${message.subject}`);
144
+ }
145
+ return lines.join("\n");
146
+ }
147
+ export function formatGmailMessageDetail(message, mode) {
148
+ if (mode === "json") {
149
+ return JSON.stringify(message, null, 2);
150
+ }
151
+ const lines = [
152
+ `Message-ID: ${message.id}`,
153
+ `Thread-ID: ${message.threadId}`,
154
+ `From: ${message.from}`,
155
+ `To: ${message.to}`,
156
+ `Subject: ${message.subject}`,
157
+ `Date: ${message.date}`,
158
+ "",
159
+ message.body,
160
+ ];
161
+ return lines.join("\n");
162
+ }
163
+ // Formatter functions for new types
164
+ export function formatGmailDrafts(drafts, mode) {
165
+ if (mode === "json") {
166
+ return JSON.stringify({ drafts }, null, 2);
167
+ }
168
+ if (drafts.length === 0) {
169
+ return "No drafts found";
170
+ }
171
+ const lines = ["DRAFT-ID\tMESSAGE-ID\tSUBJECT"];
172
+ for (const draft of drafts) {
173
+ lines.push(`${draft.id}\t${draft.message.id}\t${draft.message.subject}`);
174
+ }
175
+ return lines.join("\n");
176
+ }
177
+ export function formatGmailDraftDetail(draft, mode) {
178
+ if (mode === "json") {
179
+ return JSON.stringify(draft, null, 2);
180
+ }
181
+ const lines = [
182
+ `Draft-ID: ${draft.id}`,
183
+ `Message-ID: ${draft.message.id}`,
184
+ `Thread-ID: ${draft.message.threadId}`,
185
+ `From: ${draft.message.from}`,
186
+ `To: ${draft.message.to}`,
187
+ `Subject: ${draft.message.subject}`,
188
+ `Date: ${draft.message.date}`,
189
+ "",
190
+ draft.message.body,
191
+ ];
192
+ return lines.join("\n");
193
+ }
194
+ export function formatGmailThreads(threads, mode) {
195
+ if (mode === "json") {
196
+ return JSON.stringify({ threads }, null, 2);
197
+ }
198
+ if (threads.length === 0) {
199
+ return "No threads found";
200
+ }
201
+ const lines = ["THREAD-ID\tMESSAGES\tSNIPPET"];
202
+ for (const thread of threads) {
203
+ const snippet = thread.snippet.length > 50 ? thread.snippet.substring(0, 47) + "..." : thread.snippet;
204
+ lines.push(`${thread.id}\t${thread.messageCount}\t${snippet}`);
205
+ }
206
+ return lines.join("\n");
207
+ }
208
+ export function formatGmailThreadDetail(thread, mode) {
209
+ if (mode === "json") {
210
+ return JSON.stringify(thread, null, 2);
211
+ }
212
+ const lines = [`Thread-ID: ${thread.id}`, `Messages: ${thread.messages.length}`, ""];
213
+ for (let i = 0; i < thread.messages.length; i++) {
214
+ const msg = thread.messages[i];
215
+ if (!msg)
216
+ continue;
217
+ lines.push(`--- Message ${i + 1} ---`);
218
+ lines.push(`From: ${msg.from}`);
219
+ lines.push(`To: ${msg.to}`);
220
+ lines.push(`Subject: ${msg.subject}`);
221
+ lines.push(`Date: ${msg.date}`);
222
+ lines.push("");
223
+ lines.push(msg.body);
224
+ lines.push("");
225
+ }
226
+ return lines.join("\n");
227
+ }
228
+ export function formatGmailLabelDetail(label, mode) {
229
+ if (mode === "json") {
230
+ return JSON.stringify(label, null, 2);
231
+ }
232
+ const lines = [
233
+ `ID: ${label.id}`,
234
+ `Name: ${label.name}`,
235
+ `Type: ${label.type}`,
236
+ ];
237
+ if (label.messagesTotal !== undefined) {
238
+ lines.push(`Total Messages: ${label.messagesTotal}`);
239
+ }
240
+ if (label.messagesUnread !== undefined) {
241
+ lines.push(`Unread Messages: ${label.messagesUnread}`);
242
+ }
243
+ if (label.threadsTotal !== undefined) {
244
+ lines.push(`Total Threads: ${label.threadsTotal}`);
245
+ }
246
+ if (label.threadsUnread !== undefined) {
247
+ lines.push(`Unread Threads: ${label.threadsUnread}`);
248
+ }
249
+ if (label.color) {
250
+ lines.push(`Color: ${label.color.backgroundColor} / ${label.color.textColor}`);
251
+ }
252
+ return lines.join("\n");
253
+ }
254
+ export function formatGmailFilters(filters, mode) {
255
+ if (mode === "json") {
256
+ return JSON.stringify({ filters }, null, 2);
257
+ }
258
+ if (filters.length === 0) {
259
+ return "No filters found";
260
+ }
261
+ const lines = ["FILTER-ID\tQUERY\tADD-LABELS"];
262
+ for (const filter of filters) {
263
+ lines.push(`${filter.id}\t${filter.query}\t${filter.addLabelIds.join(",")}`);
264
+ }
265
+ return lines.join("\n");
266
+ }
267
+ export function formatGmailSendAsAliases(aliases, mode) {
268
+ if (mode === "json") {
269
+ return JSON.stringify({ aliases }, null, 2);
270
+ }
271
+ if (aliases.length === 0) {
272
+ return "No send-as aliases found";
273
+ }
274
+ const lines = ["EMAIL\tDISPLAY-NAME\tPRIMARY\tDEFAULT"];
275
+ for (const alias of aliases) {
276
+ const primary = alias.isPrimary ? "yes" : "no";
277
+ const isDefault = alias.isDefault ? "yes" : "no";
278
+ lines.push(`${alias.sendAsEmail}\t${alias.displayName || ""}\t${primary}\t${isDefault}`);
279
+ }
280
+ return lines.join("\n");
281
+ }
282
+ export function formatGmailSendAsAlias(alias, mode) {
283
+ if (mode === "json") {
284
+ return JSON.stringify(alias, null, 2);
285
+ }
286
+ const lines = [
287
+ `Email: ${alias.sendAsEmail}`,
288
+ `Display Name: ${alias.displayName || "(none)"}`,
289
+ `Primary: ${alias.isPrimary ? "yes" : "no"}`,
290
+ `Default: ${alias.isDefault ? "yes" : "no"}`,
291
+ `Treat as Alias: ${alias.treatAsAlias ? "yes" : "no"}`,
292
+ `Verification Status: ${alias.verificationStatus || "unknown"}`,
293
+ "",
294
+ "Signature:",
295
+ alias.signature || "(no signature)",
296
+ ];
297
+ return lines.join("\n");
298
+ }
299
+ export function registerGmailCommands(gmailCommand, deps = {}) {
300
+ const resolvedDeps = {
301
+ ...defaultDeps,
302
+ ...deps,
303
+ };
304
+ const draftDeps = { ...defaultDraftDeps, ...deps };
305
+ const threadDeps = { ...defaultThreadDeps, ...deps };
306
+ const labelDeps = { ...defaultLabelDeps, ...deps };
307
+ const filterDeps = { ...defaultFilterDeps, ...deps };
308
+ const signatureDeps = { ...defaultSignatureDeps, ...deps };
309
+ gmailCommand
310
+ .command("send")
311
+ .description("Send an email")
312
+ .requiredOption("--to <email>", "Recipient email")
313
+ .requiredOption("--subject <subject>", "Email subject")
314
+ .requiredOption("--body <body>", "Email body")
315
+ .action(async function actionSend() {
316
+ const rootOptions = this.optsWithGlobals();
317
+ const ctx = buildExecutionContext(rootOptions);
318
+ const opts = this.opts();
319
+ const result = await runWithStableApiError("gmail", () => resolvedDeps.sendEmail({
320
+ to: opts.to,
321
+ subject: opts.subject,
322
+ body: opts.body,
323
+ }));
324
+ if (ctx.output.mode === "json") {
325
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
326
+ return;
327
+ }
328
+ process.stdout.write(result.accepted ? `Message sent (id=${result.id || "unknown"})\n` : "Message was not accepted by Gmail\n");
329
+ });
330
+ gmailCommand
331
+ .command("list")
332
+ .description("List messages")
333
+ .option("--query <query>", "Gmail search query")
334
+ .action(async function actionList() {
335
+ const rootOptions = this.optsWithGlobals();
336
+ const ctx = buildExecutionContext(rootOptions);
337
+ const opts = this.opts();
338
+ const query = defaultGmailListQuery(opts.query);
339
+ const messages = await runWithStableApiError("gmail", () => resolvedDeps.searchEmails(query));
340
+ process.stdout.write(`${formatGmailSearchResult(messages, ctx.output.mode)}\n`);
341
+ });
342
+ gmailCommand
343
+ .command("search")
344
+ .description("Search messages")
345
+ .requiredOption("--query <query>", "Gmail search query")
346
+ .action(async function actionSearch() {
347
+ const rootOptions = this.optsWithGlobals();
348
+ const ctx = buildExecutionContext(rootOptions);
349
+ const opts = this.opts();
350
+ const messages = await runWithStableApiError("gmail", () => resolvedDeps.searchEmails(opts.query));
351
+ process.stdout.write(`${formatGmailSearchResult(messages, ctx.output.mode)}\n`);
352
+ });
353
+ gmailCommand
354
+ .command("labels")
355
+ .description("List Gmail labels")
356
+ .action(async function actionLabels() {
357
+ const rootOptions = this.optsWithGlobals();
358
+ const ctx = buildExecutionContext(rootOptions);
359
+ const labels = await runWithStableApiError("gmail", () => resolvedDeps.listLabels());
360
+ process.stdout.write(`${formatGmailLabels(labels, ctx.output.mode)}\n`);
361
+ });
362
+ // gmail get <message-id>
363
+ gmailCommand
364
+ .command("get")
365
+ .description("Get full message content")
366
+ .argument("<message-id>", "Message ID")
367
+ .action(async function actionGet(messageId) {
368
+ const rootOptions = this.optsWithGlobals();
369
+ const ctx = buildExecutionContext(rootOptions);
370
+ const message = await runWithStableApiError("gmail", () => resolvedDeps.getMessage(messageId));
371
+ process.stdout.write(`${formatGmailMessageDetail(message, ctx.output.mode)}\n`);
372
+ });
373
+ // gmail delete <message-id>
374
+ gmailCommand
375
+ .command("delete")
376
+ .description("Permanently delete a message")
377
+ .argument("<message-id>", "Message ID")
378
+ .option("-y, --force", "Skip confirmation", false)
379
+ .action(async function actionDelete(messageId) {
380
+ const rootOptions = this.optsWithGlobals();
381
+ const ctx = buildExecutionContext(rootOptions);
382
+ const opts = this.opts();
383
+ if (!opts.force) {
384
+ process.stdout.write(`Permanently delete message ${messageId}? Use --force to confirm\n`);
385
+ return;
386
+ }
387
+ const result = await runWithStableApiError("gmail", () => resolvedDeps.deleteMessage(messageId));
388
+ if (ctx.output.mode === "json") {
389
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
390
+ return;
391
+ }
392
+ process.stdout.write(result.applied ? `Message deleted: ${result.id}\n` : "Failed to delete message\n");
393
+ });
394
+ // gmail trash <message-id>
395
+ gmailCommand
396
+ .command("trash")
397
+ .description("Move a message to trash")
398
+ .argument("<message-id>", "Message ID")
399
+ .action(async function actionTrash(messageId) {
400
+ const rootOptions = this.optsWithGlobals();
401
+ const ctx = buildExecutionContext(rootOptions);
402
+ const result = await runWithStableApiError("gmail", () => resolvedDeps.trashMessage(messageId));
403
+ if (ctx.output.mode === "json") {
404
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
405
+ return;
406
+ }
407
+ process.stdout.write(result.applied ? `Message moved to trash: ${result.id}\n` : "Failed to trash message\n");
408
+ });
409
+ // gmail untrash <message-id>
410
+ gmailCommand
411
+ .command("untrash")
412
+ .description("Restore a message from trash")
413
+ .argument("<message-id>", "Message ID")
414
+ .action(async function actionUntrash(messageId) {
415
+ const rootOptions = this.optsWithGlobals();
416
+ const ctx = buildExecutionContext(rootOptions);
417
+ const result = await runWithStableApiError("gmail", () => resolvedDeps.untrashMessage(messageId));
418
+ if (ctx.output.mode === "json") {
419
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
420
+ return;
421
+ }
422
+ process.stdout.write(result.applied ? `Message restored from trash: ${result.id}\n` : "Failed to untrash message\n");
423
+ });
424
+ // gmail modify <message-id>
425
+ gmailCommand
426
+ .command("modify")
427
+ .description("Modify message labels")
428
+ .argument("<message-id>", "Message ID")
429
+ .option("--add-label <id>", "Label ID to add (can be repeated)", (val, prev = []) => [...prev, val])
430
+ .option("--remove-label <id>", "Label ID to remove (can be repeated)", (val, prev = []) => [...prev, val])
431
+ .action(async function actionModify(messageId) {
432
+ const rootOptions = this.optsWithGlobals();
433
+ const ctx = buildExecutionContext(rootOptions);
434
+ const opts = this.opts();
435
+ const addLabels = opts.addLabel ?? [];
436
+ const removeLabels = opts.removeLabel ?? [];
437
+ if (addLabels.length === 0 && removeLabels.length === 0) {
438
+ process.stdout.write("No labels specified. Use --add-label and/or --remove-label\n");
439
+ return;
440
+ }
441
+ const result = await runWithStableApiError("gmail", () => resolvedDeps.modifyMessage(messageId, addLabels, removeLabels));
442
+ if (ctx.output.mode === "json") {
443
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
444
+ return;
445
+ }
446
+ if (result.applied) {
447
+ process.stdout.write(`Message labels modified: ${result.id}\n`);
448
+ if (result.addedLabels.length > 0) {
449
+ process.stdout.write(` Added: ${result.addedLabels.join(", ")}\n`);
450
+ }
451
+ if (result.removedLabels.length > 0) {
452
+ process.stdout.write(` Removed: ${result.removedLabels.join(", ")}\n`);
453
+ }
454
+ }
455
+ else {
456
+ process.stdout.write("Failed to modify message labels\n");
457
+ }
458
+ });
459
+ // ========================
460
+ // Draft commands (gmail draft)
461
+ // ========================
462
+ const draftCmd = gmailCommand.command("draft").description("Draft management");
463
+ // gmail draft create --to <email> --subject <subj> --body <text>
464
+ draftCmd
465
+ .command("create")
466
+ .description("Create a draft email")
467
+ .requiredOption("--to <email>", "Recipient email")
468
+ .requiredOption("--subject <subject>", "Email subject")
469
+ .requiredOption("--body <body>", "Email body")
470
+ .action(async function actionCreateDraft() {
471
+ const rootOptions = this.optsWithGlobals();
472
+ const ctx = buildExecutionContext(rootOptions);
473
+ const opts = this.opts();
474
+ const result = await runWithStableApiError("gmail", () => draftDeps.createDraft({
475
+ to: opts.to,
476
+ subject: opts.subject,
477
+ body: opts.body,
478
+ }));
479
+ if (ctx.output.mode === "json") {
480
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
481
+ return;
482
+ }
483
+ process.stdout.write(result.applied ? `Draft created (id=${result.id})\n` : "Failed to create draft\n");
484
+ });
485
+ // gmail draft list
486
+ draftCmd
487
+ .command("list")
488
+ .description("List all drafts")
489
+ .action(async function actionListDrafts() {
490
+ const rootOptions = this.optsWithGlobals();
491
+ const ctx = buildExecutionContext(rootOptions);
492
+ const drafts = await runWithStableApiError("gmail", () => draftDeps.listDrafts());
493
+ process.stdout.write(`${formatGmailDrafts(drafts, ctx.output.mode)}\n`);
494
+ });
495
+ // gmail draft get <draft-id>
496
+ draftCmd
497
+ .command("get")
498
+ .description("Get draft details")
499
+ .argument("<draft-id>", "Draft ID")
500
+ .action(async function actionGetDraft(draftId) {
501
+ const rootOptions = this.optsWithGlobals();
502
+ const ctx = buildExecutionContext(rootOptions);
503
+ const draft = await runWithStableApiError("gmail", () => draftDeps.getDraft(draftId));
504
+ process.stdout.write(`${formatGmailDraftDetail(draft, ctx.output.mode)}\n`);
505
+ });
506
+ // gmail draft delete <draft-id>
507
+ draftCmd
508
+ .command("delete")
509
+ .description("Delete a draft")
510
+ .argument("<draft-id>", "Draft ID")
511
+ .option("-y, --force", "Skip confirmation", false)
512
+ .action(async function actionDeleteDraft(draftId) {
513
+ const rootOptions = this.optsWithGlobals();
514
+ const ctx = buildExecutionContext(rootOptions);
515
+ const opts = this.opts();
516
+ if (!opts.force) {
517
+ process.stdout.write(`Delete draft ${draftId}? Use --force to confirm\n`);
518
+ return;
519
+ }
520
+ const result = await runWithStableApiError("gmail", () => draftDeps.deleteDraft(draftId));
521
+ if (ctx.output.mode === "json") {
522
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
523
+ return;
524
+ }
525
+ process.stdout.write(result.applied ? `Draft deleted: ${result.id}\n` : "Failed to delete draft\n");
526
+ });
527
+ // gmail draft send <draft-id>
528
+ draftCmd
529
+ .command("send")
530
+ .description("Send a draft")
531
+ .argument("<draft-id>", "Draft ID")
532
+ .action(async function actionSendDraft(draftId) {
533
+ const rootOptions = this.optsWithGlobals();
534
+ const ctx = buildExecutionContext(rootOptions);
535
+ const result = await runWithStableApiError("gmail", () => draftDeps.sendDraft(draftId));
536
+ if (ctx.output.mode === "json") {
537
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
538
+ return;
539
+ }
540
+ process.stdout.write(result.sent ? `Draft sent (id=${result.id}, thread=${result.threadId})\n` : "Failed to send draft\n");
541
+ });
542
+ // ========================
543
+ // Thread commands (gmail thread)
544
+ // ========================
545
+ const threadCmd = gmailCommand.command("thread").description("Thread management");
546
+ // gmail thread list [--query <query>]
547
+ threadCmd
548
+ .command("list")
549
+ .description("List email threads")
550
+ .option("--query <query>", "Gmail search query")
551
+ .action(async function actionListThreads() {
552
+ const rootOptions = this.optsWithGlobals();
553
+ const ctx = buildExecutionContext(rootOptions);
554
+ const opts = this.opts();
555
+ const threads = await runWithStableApiError("gmail", () => threadDeps.listThreads(opts.query));
556
+ process.stdout.write(`${formatGmailThreads(threads, ctx.output.mode)}\n`);
557
+ });
558
+ // gmail thread get <thread-id>
559
+ threadCmd
560
+ .command("get")
561
+ .description("Get all messages in a thread")
562
+ .argument("<thread-id>", "Thread ID")
563
+ .action(async function actionGetThread(threadId) {
564
+ const rootOptions = this.optsWithGlobals();
565
+ const ctx = buildExecutionContext(rootOptions);
566
+ const thread = await runWithStableApiError("gmail", () => threadDeps.getThread(threadId));
567
+ process.stdout.write(`${formatGmailThreadDetail(thread, ctx.output.mode)}\n`);
568
+ });
569
+ // ========================
570
+ // Label CRUD commands (gmail label)
571
+ // ========================
572
+ const labelCmd = gmailCommand.command("label").description("Label management");
573
+ // gmail label create --name <name> [--color <bg:text>]
574
+ labelCmd
575
+ .command("create")
576
+ .description("Create a label")
577
+ .requiredOption("--name <name>", "Label name")
578
+ .option("--color <color>", "Label color (format: backgroundColor:textColor)")
579
+ .action(async function actionCreateLabel() {
580
+ const rootOptions = this.optsWithGlobals();
581
+ const ctx = buildExecutionContext(rootOptions);
582
+ const opts = this.opts();
583
+ let textColor;
584
+ let backgroundColor;
585
+ if (opts.color) {
586
+ const parts = opts.color.split(":");
587
+ if (parts.length === 2) {
588
+ backgroundColor = parts[0];
589
+ textColor = parts[1];
590
+ }
591
+ else {
592
+ backgroundColor = opts.color;
593
+ }
594
+ }
595
+ const result = await runWithStableApiError("gmail", () => {
596
+ const input = { name: opts.name };
597
+ if (textColor && backgroundColor) {
598
+ input.textColor = textColor;
599
+ input.backgroundColor = backgroundColor;
600
+ }
601
+ return labelDeps.createLabel(input);
602
+ });
603
+ if (ctx.output.mode === "json") {
604
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
605
+ return;
606
+ }
607
+ process.stdout.write(result.applied ? `Label created: ${result.name} (id=${result.id})\n` : "Failed to create label\n");
608
+ });
609
+ // gmail label get <label-id>
610
+ labelCmd
611
+ .command("get")
612
+ .description("Get label details with counts")
613
+ .argument("<label-id>", "Label ID")
614
+ .action(async function actionGetLabel(labelId) {
615
+ const rootOptions = this.optsWithGlobals();
616
+ const ctx = buildExecutionContext(rootOptions);
617
+ const label = await runWithStableApiError("gmail", () => labelDeps.getLabel(labelId));
618
+ process.stdout.write(`${formatGmailLabelDetail(label, ctx.output.mode)}\n`);
619
+ });
620
+ // gmail label update <label-id> --name <name> [--color <bg:text>]
621
+ labelCmd
622
+ .command("update")
623
+ .description("Update a label")
624
+ .argument("<label-id>", "Label ID")
625
+ .requiredOption("--name <name>", "New label name")
626
+ .option("--color <color>", "Label color (format: backgroundColor:textColor)")
627
+ .action(async function actionUpdateLabel(labelId) {
628
+ const rootOptions = this.optsWithGlobals();
629
+ const ctx = buildExecutionContext(rootOptions);
630
+ const opts = this.opts();
631
+ let textColor;
632
+ let backgroundColor;
633
+ if (opts.color) {
634
+ const parts = opts.color.split(":");
635
+ if (parts.length === 2) {
636
+ backgroundColor = parts[0];
637
+ textColor = parts[1];
638
+ }
639
+ else {
640
+ backgroundColor = opts.color;
641
+ }
642
+ }
643
+ const result = await runWithStableApiError("gmail", () => labelDeps.updateLabel(labelId, opts.name, textColor, backgroundColor));
644
+ if (ctx.output.mode === "json") {
645
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
646
+ return;
647
+ }
648
+ process.stdout.write(result.applied ? `Label updated: ${result.name} (id=${result.id})\n` : "Failed to update label\n");
649
+ });
650
+ // gmail label delete <label-id>
651
+ labelCmd
652
+ .command("delete")
653
+ .description("Delete a custom label")
654
+ .argument("<label-id>", "Label ID")
655
+ .option("-y, --force", "Skip confirmation", false)
656
+ .action(async function actionDeleteLabel(labelId) {
657
+ const rootOptions = this.optsWithGlobals();
658
+ const ctx = buildExecutionContext(rootOptions);
659
+ const opts = this.opts();
660
+ if (!opts.force) {
661
+ process.stdout.write(`Delete label ${labelId}? Use --force to confirm\n`);
662
+ return;
663
+ }
664
+ const result = await runWithStableApiError("gmail", () => labelDeps.deleteLabel(labelId));
665
+ if (ctx.output.mode === "json") {
666
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
667
+ return;
668
+ }
669
+ process.stdout.write(result.applied ? `Label deleted: ${result.id}\n` : "Failed to delete label\n");
670
+ });
671
+ // ========================
672
+ // Filter commands (gmail filter)
673
+ // ========================
674
+ const filterCmd = gmailCommand.command("filter").description("Filter management");
675
+ // gmail filter list
676
+ filterCmd
677
+ .command("list")
678
+ .description("List all filters")
679
+ .action(async function actionListFilters() {
680
+ const rootOptions = this.optsWithGlobals();
681
+ const ctx = buildExecutionContext(rootOptions);
682
+ const filters = await runWithStableApiError("gmail", () => filterDeps.listFilters());
683
+ process.stdout.write(`${formatGmailFilters(filters, ctx.output.mode)}\n`);
684
+ });
685
+ // gmail filter create --query <query> --add-label <id>
686
+ filterCmd
687
+ .command("create")
688
+ .description("Create a filter")
689
+ .requiredOption("--query <query>", "Filter query")
690
+ .requiredOption("--add-label <id>", "Label ID to add (can be repeated)", (val, prev = []) => [...prev, val])
691
+ .action(async function actionCreateFilter() {
692
+ const rootOptions = this.optsWithGlobals();
693
+ const ctx = buildExecutionContext(rootOptions);
694
+ const opts = this.opts();
695
+ const result = await runWithStableApiError("gmail", () => filterDeps.createFilter(opts.query, opts.addLabel));
696
+ if (ctx.output.mode === "json") {
697
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
698
+ return;
699
+ }
700
+ process.stdout.write(result.applied ? `Filter created (id=${result.id})\n` : "Failed to create filter\n");
701
+ });
702
+ // gmail filter delete <filter-id>
703
+ filterCmd
704
+ .command("delete")
705
+ .description("Delete a filter")
706
+ .argument("<filter-id>", "Filter ID")
707
+ .option("-y, --force", "Skip confirmation", false)
708
+ .action(async function actionDeleteFilter(filterId) {
709
+ const rootOptions = this.optsWithGlobals();
710
+ const ctx = buildExecutionContext(rootOptions);
711
+ const opts = this.opts();
712
+ if (!opts.force) {
713
+ process.stdout.write(`Delete filter ${filterId}? Use --force to confirm\n`);
714
+ return;
715
+ }
716
+ const result = await runWithStableApiError("gmail", () => filterDeps.deleteFilter(filterId));
717
+ if (ctx.output.mode === "json") {
718
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
719
+ return;
720
+ }
721
+ process.stdout.write(result.applied ? `Filter deleted: ${result.id}\n` : "Failed to delete filter\n");
722
+ });
723
+ // ========================
724
+ // Signature commands (gmail signature)
725
+ // ========================
726
+ const signatureCmd = gmailCommand.command("signature").description("Signature management");
727
+ // gmail signature list
728
+ signatureCmd
729
+ .command("list")
730
+ .description("List send-as aliases with signatures")
731
+ .action(async function actionListSignatures() {
732
+ const rootOptions = this.optsWithGlobals();
733
+ const ctx = buildExecutionContext(rootOptions);
734
+ const aliases = await runWithStableApiError("gmail", () => signatureDeps.listSendAs());
735
+ process.stdout.write(`${formatGmailSendAsAliases(aliases, ctx.output.mode)}\n`);
736
+ });
737
+ // gmail signature get --email <alias>
738
+ signatureCmd
739
+ .command("get")
740
+ .description("Get signature for alias")
741
+ .requiredOption("--email <alias>", "Send-as email alias")
742
+ .action(async function actionGetSignature() {
743
+ const rootOptions = this.optsWithGlobals();
744
+ const ctx = buildExecutionContext(rootOptions);
745
+ const opts = this.opts();
746
+ const alias = await runWithStableApiError("gmail", () => signatureDeps.getSendAs(opts.email));
747
+ process.stdout.write(`${formatGmailSendAsAlias(alias, ctx.output.mode)}\n`);
748
+ });
749
+ // gmail signature set --email <alias> --signature <text>
750
+ signatureCmd
751
+ .command("set")
752
+ .description("Set signature for alias")
753
+ .requiredOption("--email <alias>", "Send-as email alias")
754
+ .requiredOption("--signature <text>", "Signature text")
755
+ .action(async function actionSetSignature() {
756
+ const rootOptions = this.optsWithGlobals();
757
+ const ctx = buildExecutionContext(rootOptions);
758
+ const opts = this.opts();
759
+ const result = await runWithStableApiError("gmail", () => signatureDeps.setSignature(opts.email, opts.signature));
760
+ if (ctx.output.mode === "json") {
761
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
762
+ return;
763
+ }
764
+ process.stdout.write(result.applied ? `Signature set for ${result.email}\n` : "Failed to set signature\n");
765
+ });
766
+ }
767
+ //# sourceMappingURL=commands.js.map