gtypee 1.0.2
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.
- package/LICENSE +15 -0
- package/README.md +1431 -0
- package/dist/bin/gtypee.d.ts +3 -0
- package/dist/bin/gtypee.d.ts.map +1 -0
- package/dist/bin/gtypee.js +18 -0
- package/dist/bin/gtypee.js.map +1 -0
- package/dist/src/authclient/authclient.d.ts +11 -0
- package/dist/src/authclient/authclient.d.ts.map +1 -0
- package/dist/src/authclient/authclient.js +26 -0
- package/dist/src/authclient/authclient.js.map +1 -0
- package/dist/src/cmd/agent/commands.d.ts +3 -0
- package/dist/src/cmd/agent/commands.d.ts.map +1 -0
- package/dist/src/cmd/agent/commands.js +16 -0
- package/dist/src/cmd/agent/commands.js.map +1 -0
- package/dist/src/cmd/appscript/commands.d.ts +24 -0
- package/dist/src/cmd/appscript/commands.d.ts.map +1 -0
- package/dist/src/cmd/appscript/commands.js +116 -0
- package/dist/src/cmd/appscript/commands.js.map +1 -0
- package/dist/src/cmd/appscript/runtime.d.ts +4 -0
- package/dist/src/cmd/appscript/runtime.d.ts.map +1 -0
- package/dist/src/cmd/appscript/runtime.js +64 -0
- package/dist/src/cmd/appscript/runtime.js.map +1 -0
- package/dist/src/cmd/auth/commands.d.ts +67 -0
- package/dist/src/cmd/auth/commands.d.ts.map +1 -0
- package/dist/src/cmd/auth/commands.js +184 -0
- package/dist/src/cmd/auth/commands.js.map +1 -0
- package/dist/src/cmd/auth/runtime.d.ts +20 -0
- package/dist/src/cmd/auth/runtime.d.ts.map +1 -0
- package/dist/src/cmd/auth/runtime.js +237 -0
- package/dist/src/cmd/auth/runtime.js.map +1 -0
- package/dist/src/cmd/calendar/commands.d.ts +58 -0
- package/dist/src/cmd/calendar/commands.d.ts.map +1 -0
- package/dist/src/cmd/calendar/commands.js +161 -0
- package/dist/src/cmd/calendar/commands.js.map +1 -0
- package/dist/src/cmd/calendar/runtime.d.ts +4 -0
- package/dist/src/cmd/calendar/runtime.d.ts.map +1 -0
- package/dist/src/cmd/calendar/runtime.js +164 -0
- package/dist/src/cmd/calendar/runtime.js.map +1 -0
- package/dist/src/cmd/chat/commands.d.ts +27 -0
- package/dist/src/cmd/chat/commands.d.ts.map +1 -0
- package/dist/src/cmd/chat/commands.js +113 -0
- package/dist/src/cmd/chat/commands.js.map +1 -0
- package/dist/src/cmd/chat/runtime.d.ts +4 -0
- package/dist/src/cmd/chat/runtime.d.ts.map +1 -0
- package/dist/src/cmd/chat/runtime.js +67 -0
- package/dist/src/cmd/chat/runtime.js.map +1 -0
- package/dist/src/cmd/classroom/commands.d.ts +22 -0
- package/dist/src/cmd/classroom/commands.d.ts.map +1 -0
- package/dist/src/cmd/classroom/commands.js +91 -0
- package/dist/src/cmd/classroom/commands.js.map +1 -0
- package/dist/src/cmd/classroom/runtime.d.ts +4 -0
- package/dist/src/cmd/classroom/runtime.d.ts.map +1 -0
- package/dist/src/cmd/classroom/runtime.js +67 -0
- package/dist/src/cmd/classroom/runtime.js.map +1 -0
- package/dist/src/cmd/command-registry.d.ts +8 -0
- package/dist/src/cmd/command-registry.d.ts.map +1 -0
- package/dist/src/cmd/command-registry.js +40 -0
- package/dist/src/cmd/command-registry.js.map +1 -0
- package/dist/src/cmd/completion/commands.d.ts +3 -0
- package/dist/src/cmd/completion/commands.d.ts.map +1 -0
- package/dist/src/cmd/completion/commands.js +29 -0
- package/dist/src/cmd/completion/commands.js.map +1 -0
- package/dist/src/cmd/config/commands.d.ts +10 -0
- package/dist/src/cmd/config/commands.d.ts.map +1 -0
- package/dist/src/cmd/config/commands.js +106 -0
- package/dist/src/cmd/config/commands.js.map +1 -0
- package/dist/src/cmd/contacts/commands.d.ts +18 -0
- package/dist/src/cmd/contacts/commands.d.ts.map +1 -0
- package/dist/src/cmd/contacts/commands.js +79 -0
- package/dist/src/cmd/contacts/commands.js.map +1 -0
- package/dist/src/cmd/contacts/runtime.d.ts +4 -0
- package/dist/src/cmd/contacts/runtime.d.ts.map +1 -0
- package/dist/src/cmd/contacts/runtime.js +67 -0
- package/dist/src/cmd/contacts/runtime.js.map +1 -0
- package/dist/src/cmd/docs/commands.d.ts +24 -0
- package/dist/src/cmd/docs/commands.d.ts.map +1 -0
- package/dist/src/cmd/docs/commands.js +82 -0
- package/dist/src/cmd/docs/commands.js.map +1 -0
- package/dist/src/cmd/docs/runtime.d.ts +4 -0
- package/dist/src/cmd/docs/runtime.d.ts.map +1 -0
- package/dist/src/cmd/docs/runtime.js +77 -0
- package/dist/src/cmd/docs/runtime.js.map +1 -0
- package/dist/src/cmd/drive/commands.d.ts +112 -0
- package/dist/src/cmd/drive/commands.d.ts.map +1 -0
- package/dist/src/cmd/drive/commands.js +431 -0
- package/dist/src/cmd/drive/commands.js.map +1 -0
- package/dist/src/cmd/drive/runtime.d.ts +4 -0
- package/dist/src/cmd/drive/runtime.d.ts.map +1 -0
- package/dist/src/cmd/drive/runtime.js +336 -0
- package/dist/src/cmd/drive/runtime.js.map +1 -0
- package/dist/src/cmd/execution-context.d.ts +33 -0
- package/dist/src/cmd/execution-context.d.ts.map +1 -0
- package/dist/src/cmd/execution-context.js +31 -0
- package/dist/src/cmd/execution-context.js.map +1 -0
- package/dist/src/cmd/exit-codes/commands.d.ts +5 -0
- package/dist/src/cmd/exit-codes/commands.d.ts.map +1 -0
- package/dist/src/cmd/exit-codes/commands.js +25 -0
- package/dist/src/cmd/exit-codes/commands.js.map +1 -0
- package/dist/src/cmd/exit-codes.d.ts +4 -0
- package/dist/src/cmd/exit-codes.d.ts.map +1 -0
- package/dist/src/cmd/exit-codes.js +4 -0
- package/dist/src/cmd/exit-codes.js.map +1 -0
- package/dist/src/cmd/exit.d.ts +7 -0
- package/dist/src/cmd/exit.d.ts.map +1 -0
- package/dist/src/cmd/exit.js +19 -0
- package/dist/src/cmd/exit.js.map +1 -0
- package/dist/src/cmd/forms/commands.d.ts +19 -0
- package/dist/src/cmd/forms/commands.d.ts.map +1 -0
- package/dist/src/cmd/forms/commands.js +73 -0
- package/dist/src/cmd/forms/commands.js.map +1 -0
- package/dist/src/cmd/forms/runtime.d.ts +4 -0
- package/dist/src/cmd/forms/runtime.d.ts.map +1 -0
- package/dist/src/cmd/forms/runtime.js +38 -0
- package/dist/src/cmd/forms/runtime.js.map +1 -0
- package/dist/src/cmd/gmail/commands.d.ts +187 -0
- package/dist/src/cmd/gmail/commands.d.ts.map +1 -0
- package/dist/src/cmd/gmail/commands.js +767 -0
- package/dist/src/cmd/gmail/commands.js.map +1 -0
- package/dist/src/cmd/gmail/runtime.d.ts +9 -0
- package/dist/src/cmd/gmail/runtime.d.ts.map +1 -0
- package/dist/src/cmd/gmail/runtime.js +644 -0
- package/dist/src/cmd/gmail/runtime.js.map +1 -0
- package/dist/src/cmd/groups/commands.d.ts +26 -0
- package/dist/src/cmd/groups/commands.d.ts.map +1 -0
- package/dist/src/cmd/groups/commands.js +105 -0
- package/dist/src/cmd/groups/commands.js.map +1 -0
- package/dist/src/cmd/groups/runtime.d.ts +4 -0
- package/dist/src/cmd/groups/runtime.d.ts.map +1 -0
- package/dist/src/cmd/groups/runtime.js +61 -0
- package/dist/src/cmd/groups/runtime.js.map +1 -0
- package/dist/src/cmd/keep/commands.d.ts +23 -0
- package/dist/src/cmd/keep/commands.d.ts.map +1 -0
- package/dist/src/cmd/keep/commands.js +111 -0
- package/dist/src/cmd/keep/commands.js.map +1 -0
- package/dist/src/cmd/keep/runtime.d.ts +4 -0
- package/dist/src/cmd/keep/runtime.d.ts.map +1 -0
- package/dist/src/cmd/keep/runtime.js +82 -0
- package/dist/src/cmd/keep/runtime.js.map +1 -0
- package/dist/src/cmd/people/commands.d.ts +22 -0
- package/dist/src/cmd/people/commands.d.ts.map +1 -0
- package/dist/src/cmd/people/commands.js +96 -0
- package/dist/src/cmd/people/commands.js.map +1 -0
- package/dist/src/cmd/people/runtime.d.ts +4 -0
- package/dist/src/cmd/people/runtime.d.ts.map +1 -0
- package/dist/src/cmd/people/runtime.js +65 -0
- package/dist/src/cmd/people/runtime.js.map +1 -0
- package/dist/src/cmd/rewrite-desire-path-args.d.ts +2 -0
- package/dist/src/cmd/rewrite-desire-path-args.d.ts.map +1 -0
- package/dist/src/cmd/rewrite-desire-path-args.js +75 -0
- package/dist/src/cmd/rewrite-desire-path-args.js.map +1 -0
- package/dist/src/cmd/root.d.ts +10 -0
- package/dist/src/cmd/root.d.ts.map +1 -0
- package/dist/src/cmd/root.js +341 -0
- package/dist/src/cmd/root.js.map +1 -0
- package/dist/src/cmd/schema/commands.d.ts +3 -0
- package/dist/src/cmd/schema/commands.d.ts.map +1 -0
- package/dist/src/cmd/schema/commands.js +21 -0
- package/dist/src/cmd/schema/commands.js.map +1 -0
- package/dist/src/cmd/script-path.d.ts +2 -0
- package/dist/src/cmd/script-path.d.ts.map +1 -0
- package/dist/src/cmd/script-path.js +4 -0
- package/dist/src/cmd/script-path.js.map +1 -0
- package/dist/src/cmd/sheets/commands.d.ts +20 -0
- package/dist/src/cmd/sheets/commands.d.ts.map +1 -0
- package/dist/src/cmd/sheets/commands.js +79 -0
- package/dist/src/cmd/sheets/commands.js.map +1 -0
- package/dist/src/cmd/sheets/runtime.d.ts +4 -0
- package/dist/src/cmd/sheets/runtime.d.ts.map +1 -0
- package/dist/src/cmd/sheets/runtime.js +37 -0
- package/dist/src/cmd/sheets/runtime.js.map +1 -0
- package/dist/src/cmd/slides/commands.d.ts +24 -0
- package/dist/src/cmd/slides/commands.d.ts.map +1 -0
- package/dist/src/cmd/slides/commands.js +90 -0
- package/dist/src/cmd/slides/commands.js.map +1 -0
- package/dist/src/cmd/slides/runtime.d.ts +4 -0
- package/dist/src/cmd/slides/runtime.d.ts.map +1 -0
- package/dist/src/cmd/slides/runtime.js +92 -0
- package/dist/src/cmd/slides/runtime.js.map +1 -0
- package/dist/src/cmd/tasks/commands.d.ts +28 -0
- package/dist/src/cmd/tasks/commands.d.ts.map +1 -0
- package/dist/src/cmd/tasks/commands.js +103 -0
- package/dist/src/cmd/tasks/commands.js.map +1 -0
- package/dist/src/cmd/tasks/runtime.d.ts +4 -0
- package/dist/src/cmd/tasks/runtime.d.ts.map +1 -0
- package/dist/src/cmd/tasks/runtime.js +56 -0
- package/dist/src/cmd/tasks/runtime.js.map +1 -0
- package/dist/src/cmd/time/commands.d.ts +17 -0
- package/dist/src/cmd/time/commands.d.ts.map +1 -0
- package/dist/src/cmd/time/commands.js +88 -0
- package/dist/src/cmd/time/commands.js.map +1 -0
- package/dist/src/cmd/version/commands.d.ts +3 -0
- package/dist/src/cmd/version/commands.d.ts.map +1 -0
- package/dist/src/cmd/version/commands.js +17 -0
- package/dist/src/cmd/version/commands.js.map +1 -0
- package/dist/src/cmd/workspace/commands.d.ts +222 -0
- package/dist/src/cmd/workspace/commands.d.ts.map +1 -0
- package/dist/src/cmd/workspace/commands.js +685 -0
- package/dist/src/cmd/workspace/commands.js.map +1 -0
- package/dist/src/cmd/workspace/runtime.d.ts +8 -0
- package/dist/src/cmd/workspace/runtime.d.ts.map +1 -0
- package/dist/src/cmd/workspace/runtime.js +852 -0
- package/dist/src/cmd/workspace/runtime.js.map +1 -0
- package/dist/src/config/clients.d.ts +8 -0
- package/dist/src/config/clients.d.ts.map +1 -0
- package/dist/src/config/clients.js +95 -0
- package/dist/src/config/clients.js.map +1 -0
- package/dist/src/config/config.d.ts +11 -0
- package/dist/src/config/config.d.ts.map +1 -0
- package/dist/src/config/config.js +54 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/credentials.d.ts +16 -0
- package/dist/src/config/credentials.d.ts.map +1 -0
- package/dist/src/config/credentials.js +97 -0
- package/dist/src/config/credentials.js.map +1 -0
- package/dist/src/config/migration.d.ts +13 -0
- package/dist/src/config/migration.d.ts.map +1 -0
- package/dist/src/config/migration.js +70 -0
- package/dist/src/config/migration.js.map +1 -0
- package/dist/src/config/paths.d.ts +11 -0
- package/dist/src/config/paths.d.ts.map +1 -0
- package/dist/src/config/paths.js +74 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/googleapi/auth-factory.d.ts +46 -0
- package/dist/src/googleapi/auth-factory.d.ts.map +1 -0
- package/dist/src/googleapi/auth-factory.js +88 -0
- package/dist/src/googleapi/auth-factory.js.map +1 -0
- package/dist/src/googleapi/calendar.d.ts +3 -0
- package/dist/src/googleapi/calendar.d.ts.map +1 -0
- package/dist/src/googleapi/calendar.js +21 -0
- package/dist/src/googleapi/calendar.js.map +1 -0
- package/dist/src/googleapi/circuitbreaker.d.ts +19 -0
- package/dist/src/googleapi/circuitbreaker.d.ts.map +1 -0
- package/dist/src/googleapi/circuitbreaker.js +43 -0
- package/dist/src/googleapi/circuitbreaker.js.map +1 -0
- package/dist/src/googleapi/client.d.ts +17 -0
- package/dist/src/googleapi/client.d.ts.map +1 -0
- package/dist/src/googleapi/client.js +18 -0
- package/dist/src/googleapi/client.js.map +1 -0
- package/dist/src/googleapi/drive.d.ts +3 -0
- package/dist/src/googleapi/drive.d.ts.map +1 -0
- package/dist/src/googleapi/drive.js +11 -0
- package/dist/src/googleapi/drive.js.map +1 -0
- package/dist/src/googleapi/errors.d.ts +37 -0
- package/dist/src/googleapi/errors.d.ts.map +1 -0
- package/dist/src/googleapi/errors.js +93 -0
- package/dist/src/googleapi/errors.js.map +1 -0
- package/dist/src/googleapi/retry-constants.d.ts +5 -0
- package/dist/src/googleapi/retry-constants.d.ts.map +1 -0
- package/dist/src/googleapi/retry-constants.js +5 -0
- package/dist/src/googleapi/retry-constants.js.map +1 -0
- package/dist/src/googleapi/transport.d.ts +3 -0
- package/dist/src/googleapi/transport.d.ts.map +1 -0
- package/dist/src/googleapi/transport.js +39 -0
- package/dist/src/googleapi/transport.js.map +1 -0
- package/dist/src/googleauth/oauth-flow.d.ts +62 -0
- package/dist/src/googleauth/oauth-flow.d.ts.map +1 -0
- package/dist/src/googleauth/oauth-flow.js +262 -0
- package/dist/src/googleauth/oauth-flow.js.map +1 -0
- package/dist/src/googleauth/service.d.ts +28 -0
- package/dist/src/googleauth/service.d.ts.map +1 -0
- package/dist/src/googleauth/service.js +345 -0
- package/dist/src/googleauth/service.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/outfmt/outfmt.d.ts +8 -0
- package/dist/src/outfmt/outfmt.d.ts.map +1 -0
- package/dist/src/outfmt/outfmt.js +66 -0
- package/dist/src/outfmt/outfmt.js.map +1 -0
- package/dist/src/secrets/store.d.ts +61 -0
- package/dist/src/secrets/store.d.ts.map +1 -0
- package/dist/src/secrets/store.js +247 -0
- package/dist/src/secrets/store.js.map +1 -0
- package/dist/test/authclient/authclient.test.d.ts +2 -0
- package/dist/test/authclient/authclient.test.d.ts.map +1 -0
- package/dist/test/authclient/authclient.test.js +14 -0
- package/dist/test/authclient/authclient.test.js.map +1 -0
- package/dist/test/bin/gtypee-entrypoint.test.d.ts +2 -0
- package/dist/test/bin/gtypee-entrypoint.test.d.ts.map +1 -0
- package/dist/test/bin/gtypee-entrypoint.test.js +17 -0
- package/dist/test/bin/gtypee-entrypoint.test.js.map +1 -0
- package/dist/test/cmd/agent/commands.test.d.ts +2 -0
- package/dist/test/cmd/agent/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/agent/commands.test.js +12 -0
- package/dist/test/cmd/agent/commands.test.js.map +1 -0
- package/dist/test/cmd/appscript/commands.test.d.ts +2 -0
- package/dist/test/cmd/appscript/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/appscript/commands.test.js +104 -0
- package/dist/test/cmd/appscript/commands.test.js.map +1 -0
- package/dist/test/cmd/auth/commands.test.d.ts +2 -0
- package/dist/test/cmd/auth/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/auth/commands.test.js +142 -0
- package/dist/test/cmd/auth/commands.test.js.map +1 -0
- package/dist/test/cmd/auth/runtime.test.d.ts +2 -0
- package/dist/test/cmd/auth/runtime.test.d.ts.map +1 -0
- package/dist/test/cmd/auth/runtime.test.js +214 -0
- package/dist/test/cmd/auth/runtime.test.js.map +1 -0
- package/dist/test/cmd/calendar/commands.test.d.ts +2 -0
- package/dist/test/cmd/calendar/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/calendar/commands.test.js +121 -0
- package/dist/test/cmd/calendar/commands.test.js.map +1 -0
- package/dist/test/cmd/chat/commands.test.d.ts +2 -0
- package/dist/test/cmd/chat/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/chat/commands.test.js +57 -0
- package/dist/test/cmd/chat/commands.test.js.map +1 -0
- package/dist/test/cmd/classroom/commands.test.d.ts +2 -0
- package/dist/test/cmd/classroom/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/classroom/commands.test.js +61 -0
- package/dist/test/cmd/classroom/commands.test.js.map +1 -0
- package/dist/test/cmd/completion/commands.test.d.ts +2 -0
- package/dist/test/cmd/completion/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/completion/commands.test.js +30 -0
- package/dist/test/cmd/completion/commands.test.js.map +1 -0
- package/dist/test/cmd/config/commands.test.d.ts +2 -0
- package/dist/test/cmd/config/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/config/commands.test.js +21 -0
- package/dist/test/cmd/config/commands.test.js.map +1 -0
- package/dist/test/cmd/contacts/commands.test.d.ts +2 -0
- package/dist/test/cmd/contacts/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/contacts/commands.test.js +51 -0
- package/dist/test/cmd/contacts/commands.test.js.map +1 -0
- package/dist/test/cmd/docs/commands.test.d.ts +2 -0
- package/dist/test/cmd/docs/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/docs/commands.test.js +39 -0
- package/dist/test/cmd/docs/commands.test.js.map +1 -0
- package/dist/test/cmd/drive/commands.test.d.ts +2 -0
- package/dist/test/cmd/drive/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/drive/commands.test.js +409 -0
- package/dist/test/cmd/drive/commands.test.js.map +1 -0
- package/dist/test/cmd/execution-context.test.d.ts +2 -0
- package/dist/test/cmd/execution-context.test.d.ts.map +1 -0
- package/dist/test/cmd/execution-context.test.js +29 -0
- package/dist/test/cmd/execution-context.test.js.map +1 -0
- package/dist/test/cmd/exit-codes/commands.test.d.ts +2 -0
- package/dist/test/cmd/exit-codes/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/exit-codes/commands.test.js +19 -0
- package/dist/test/cmd/exit-codes/commands.test.js.map +1 -0
- package/dist/test/cmd/exit.test.d.ts +2 -0
- package/dist/test/cmd/exit.test.d.ts.map +1 -0
- package/dist/test/cmd/exit.test.js +14 -0
- package/dist/test/cmd/exit.test.js.map +1 -0
- package/dist/test/cmd/forms/commands.test.d.ts +2 -0
- package/dist/test/cmd/forms/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/forms/commands.test.js +42 -0
- package/dist/test/cmd/forms/commands.test.js.map +1 -0
- package/dist/test/cmd/gmail/commands.test.d.ts +2 -0
- package/dist/test/cmd/gmail/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/gmail/commands.test.js +315 -0
- package/dist/test/cmd/gmail/commands.test.js.map +1 -0
- package/dist/test/cmd/groups/commands.test.d.ts +2 -0
- package/dist/test/cmd/groups/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/groups/commands.test.js +79 -0
- package/dist/test/cmd/groups/commands.test.js.map +1 -0
- package/dist/test/cmd/keep/commands.test.d.ts +2 -0
- package/dist/test/cmd/keep/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/keep/commands.test.js +87 -0
- package/dist/test/cmd/keep/commands.test.js.map +1 -0
- package/dist/test/cmd/people/commands.test.d.ts +2 -0
- package/dist/test/cmd/people/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/people/commands.test.js +52 -0
- package/dist/test/cmd/people/commands.test.js.map +1 -0
- package/dist/test/cmd/rewrite-desire-path-args.test.d.ts +2 -0
- package/dist/test/cmd/rewrite-desire-path-args.test.d.ts.map +1 -0
- package/dist/test/cmd/rewrite-desire-path-args.test.js +21 -0
- package/dist/test/cmd/rewrite-desire-path-args.test.js.map +1 -0
- package/dist/test/cmd/root.test.d.ts +2 -0
- package/dist/test/cmd/root.test.d.ts.map +1 -0
- package/dist/test/cmd/root.test.js +323 -0
- package/dist/test/cmd/root.test.js.map +1 -0
- package/dist/test/cmd/runtime-scopes.test.d.ts +2 -0
- package/dist/test/cmd/runtime-scopes.test.d.ts.map +1 -0
- package/dist/test/cmd/runtime-scopes.test.js +133 -0
- package/dist/test/cmd/runtime-scopes.test.js.map +1 -0
- package/dist/test/cmd/schema/commands.test.d.ts +2 -0
- package/dist/test/cmd/schema/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/schema/commands.test.js +31 -0
- package/dist/test/cmd/schema/commands.test.js.map +1 -0
- package/dist/test/cmd/sheets/commands.test.d.ts +2 -0
- package/dist/test/cmd/sheets/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/sheets/commands.test.js +39 -0
- package/dist/test/cmd/sheets/commands.test.js.map +1 -0
- package/dist/test/cmd/slides/commands.test.d.ts +2 -0
- package/dist/test/cmd/slides/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/slides/commands.test.js +48 -0
- package/dist/test/cmd/slides/commands.test.js.map +1 -0
- package/dist/test/cmd/tasks/commands.test.d.ts +2 -0
- package/dist/test/cmd/tasks/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/tasks/commands.test.js +74 -0
- package/dist/test/cmd/tasks/commands.test.js.map +1 -0
- package/dist/test/cmd/time/commands.test.d.ts +2 -0
- package/dist/test/cmd/time/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/time/commands.test.js +52 -0
- package/dist/test/cmd/time/commands.test.js.map +1 -0
- package/dist/test/cmd/version/commands.test.d.ts +2 -0
- package/dist/test/cmd/version/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/version/commands.test.js +12 -0
- package/dist/test/cmd/version/commands.test.js.map +1 -0
- package/dist/test/cmd/workspace/commands.test.d.ts +2 -0
- package/dist/test/cmd/workspace/commands.test.d.ts.map +1 -0
- package/dist/test/cmd/workspace/commands.test.js +285 -0
- package/dist/test/cmd/workspace/commands.test.js.map +1 -0
- package/dist/test/config/clients.test.d.ts +2 -0
- package/dist/test/config/clients.test.d.ts.map +1 -0
- package/dist/test/config/clients.test.js +42 -0
- package/dist/test/config/clients.test.js.map +1 -0
- package/dist/test/config/config.test.d.ts +2 -0
- package/dist/test/config/config.test.d.ts.map +1 -0
- package/dist/test/config/config.test.js +80 -0
- package/dist/test/config/config.test.js.map +1 -0
- package/dist/test/config/credentials.test.d.ts +2 -0
- package/dist/test/config/credentials.test.d.ts.map +1 -0
- package/dist/test/config/credentials.test.js +78 -0
- package/dist/test/config/credentials.test.js.map +1 -0
- package/dist/test/config/migration.test.d.ts +2 -0
- package/dist/test/config/migration.test.d.ts.map +1 -0
- package/dist/test/config/migration.test.js +136 -0
- package/dist/test/config/migration.test.js.map +1 -0
- package/dist/test/config/paths.test.d.ts +2 -0
- package/dist/test/config/paths.test.d.ts.map +1 -0
- package/dist/test/config/paths.test.js +31 -0
- package/dist/test/config/paths.test.js.map +1 -0
- package/dist/test/googleapi/auth-factory.test.d.ts +2 -0
- package/dist/test/googleapi/auth-factory.test.d.ts.map +1 -0
- package/dist/test/googleapi/auth-factory.test.js +215 -0
- package/dist/test/googleapi/auth-factory.test.js.map +1 -0
- package/dist/test/googleapi/circuitbreaker.test.d.ts +2 -0
- package/dist/test/googleapi/circuitbreaker.test.d.ts.map +1 -0
- package/dist/test/googleapi/circuitbreaker.test.js +30 -0
- package/dist/test/googleapi/circuitbreaker.test.js.map +1 -0
- package/dist/test/googleapi/client.test.d.ts +2 -0
- package/dist/test/googleapi/client.test.d.ts.map +1 -0
- package/dist/test/googleapi/client.test.js +16 -0
- package/dist/test/googleapi/client.test.js.map +1 -0
- package/dist/test/googleapi/errors.test.d.ts +2 -0
- package/dist/test/googleapi/errors.test.d.ts.map +1 -0
- package/dist/test/googleapi/errors.test.js +21 -0
- package/dist/test/googleapi/errors.test.js.map +1 -0
- package/dist/test/googleapi/transport.test.d.ts +2 -0
- package/dist/test/googleapi/transport.test.d.ts.map +1 -0
- package/dist/test/googleapi/transport.test.js +25 -0
- package/dist/test/googleapi/transport.test.js.map +1 -0
- package/dist/test/googleauth/oauth-flow.test.d.ts +2 -0
- package/dist/test/googleauth/oauth-flow.test.d.ts.map +1 -0
- package/dist/test/googleauth/oauth-flow.test.js +85 -0
- package/dist/test/googleauth/oauth-flow.test.js.map +1 -0
- package/dist/test/googleauth/service.test.d.ts +2 -0
- package/dist/test/googleauth/service.test.d.ts.map +1 -0
- package/dist/test/googleauth/service.test.js +51 -0
- package/dist/test/googleauth/service.test.js.map +1 -0
- package/dist/test/outfmt/outfmt.test.d.ts +2 -0
- package/dist/test/outfmt/outfmt.test.d.ts.map +1 -0
- package/dist/test/outfmt/outfmt.test.js +41 -0
- package/dist/test/outfmt/outfmt.test.js.map +1 -0
- package/dist/test/secrets/store.test.d.ts +2 -0
- package/dist/test/secrets/store.test.d.ts.map +1 -0
- package/dist/test/secrets/store.test.js +164 -0
- package/dist/test/secrets/store.test.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.config.js.map +1 -0
- package/logo.svg +16 -0
- 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
|