zele 0.3.17 → 0.3.21
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/README.md +81 -12
- package/dist/api-utils.d.ts +10 -0
- package/dist/api-utils.js +14 -0
- package/dist/api-utils.js.map +1 -1
- package/dist/cli-types.d.ts +4 -0
- package/dist/cli-types.js +6 -0
- package/dist/cli-types.js.map +1 -0
- package/dist/cli.js +1 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/attachment.d.ts +2 -2
- package/dist/commands/attachment.js.map +1 -1
- package/dist/commands/auth-cmd.d.ts +2 -2
- package/dist/commands/auth-cmd.js +58 -52
- package/dist/commands/auth-cmd.js.map +1 -1
- package/dist/commands/calendar.d.ts +2 -2
- package/dist/commands/calendar.js +13 -14
- package/dist/commands/calendar.js.map +1 -1
- package/dist/commands/draft.d.ts +2 -2
- package/dist/commands/draft.js +62 -15
- package/dist/commands/draft.js.map +1 -1
- package/dist/commands/filter.d.ts +2 -2
- package/dist/commands/filter.js.map +1 -1
- package/dist/commands/label.d.ts +2 -2
- package/dist/commands/label.js +5 -6
- package/dist/commands/label.js.map +1 -1
- package/dist/commands/mail-actions.d.ts +2 -2
- package/dist/commands/mail-actions.js +290 -1
- package/dist/commands/mail-actions.js.map +1 -1
- package/dist/commands/mail.d.ts +2 -2
- package/dist/commands/mail.js +50 -10
- package/dist/commands/mail.js.map +1 -1
- package/dist/commands/profile.d.ts +2 -2
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/watch.d.ts +2 -2
- package/dist/commands/watch.js +2 -2
- package/dist/commands/watch.js.map +1 -1
- package/dist/gmail-client.d.ts +59 -3
- package/dist/gmail-client.js +119 -5
- package/dist/gmail-client.js.map +1 -1
- package/dist/imap-smtp-client.d.ts +75 -4
- package/dist/imap-smtp-client.js +131 -7
- package/dist/imap-smtp-client.js.map +1 -1
- package/dist/unsubscribe.d.ts +76 -0
- package/dist/unsubscribe.js +224 -0
- package/dist/unsubscribe.js.map +1 -0
- package/package.json +3 -2
- package/skills/zele/SKILL.md +32 -124
- package/src/api-utils.ts +14 -0
- package/src/cli-types.ts +8 -0
- package/src/cli.ts +2 -7
- package/src/commands/attachment.ts +2 -2
- package/src/commands/auth-cmd.ts +66 -56
- package/src/commands/calendar.ts +15 -16
- package/src/commands/draft.ts +71 -17
- package/src/commands/filter.ts +2 -2
- package/src/commands/label.ts +7 -8
- package/src/commands/mail-actions.ts +315 -4
- package/src/commands/mail.ts +54 -12
- package/src/commands/profile.ts +2 -2
- package/src/commands/watch.ts +4 -4
- package/src/gmail-client.ts +193 -6
- package/src/imap-smtp-client.ts +186 -7
- package/src/unsubscribe.test.ts +487 -0
- package/src/unsubscribe.ts +255 -0
package/README.md
CHANGED
|
@@ -32,6 +32,27 @@ zele login
|
|
|
32
32
|
|
|
33
33
|
Opens a browser for Google OAuth2. Repeat to add more accounts.
|
|
34
34
|
|
|
35
|
+
#### Remote / headless login (for agents)
|
|
36
|
+
|
|
37
|
+
`zele login` is interactive — it prints an authorization URL and waits for the redirect URL to be pasted back. In agent or headless environments, run it inside a `tmux` session so the process persists and can be driven programmatically:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# start login in a tmux session
|
|
41
|
+
tmux new-session -d -s zele-login 'zele login'
|
|
42
|
+
|
|
43
|
+
# read the authorization URL from tmux output
|
|
44
|
+
tmux capture-pane -t zele-login -p
|
|
45
|
+
|
|
46
|
+
# after the user completes consent in their browser, paste the redirect URL
|
|
47
|
+
tmux send-keys -t zele-login 'http://localhost:...?code=...' Enter
|
|
48
|
+
|
|
49
|
+
# verify login succeeded
|
|
50
|
+
tmux capture-pane -t zele-login -p
|
|
51
|
+
tmux kill-session -t zele-login
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
IMAP/SMTP login is non-interactive and requires no tmux wrapper.
|
|
55
|
+
|
|
35
56
|
### IMAP/SMTP accounts
|
|
36
57
|
|
|
37
58
|
For non-Google providers (Fastmail, Outlook, Gmail with app passwords, any IMAP server):
|
|
@@ -79,14 +100,15 @@ zele logout # remove credentials
|
|
|
79
100
|
### Mail
|
|
80
101
|
|
|
81
102
|
```bash
|
|
82
|
-
zele mail list
|
|
83
|
-
zele mail list --filter "is:unread"
|
|
84
|
-
zele mail
|
|
85
|
-
zele mail
|
|
86
|
-
zele mail
|
|
87
|
-
zele mail
|
|
88
|
-
zele mail
|
|
89
|
-
zele mail
|
|
103
|
+
zele mail list --limit 100 # list up to 100 recent threads
|
|
104
|
+
zele mail list --filter "is:unread" --limit 100 # list unread threads
|
|
105
|
+
zele mail list --filter "is:unread" --limit 100 | yq '.[].id' | xargs zele mail read # read all unread
|
|
106
|
+
zele mail search "from:github" --limit 100 # search with Gmail query syntax
|
|
107
|
+
zele mail read <thread-id> # read a thread
|
|
108
|
+
zele mail send # send an email
|
|
109
|
+
zele mail reply <thread-id> # reply to a thread
|
|
110
|
+
zele mail forward <thread-id> # forward a thread
|
|
111
|
+
zele mail watch # watch for new emails (poll)
|
|
90
112
|
```
|
|
91
113
|
|
|
92
114
|
### Mail actions
|
|
@@ -105,6 +127,27 @@ zele mail label <thread-id>
|
|
|
105
127
|
zele mail trash-spam
|
|
106
128
|
```
|
|
107
129
|
|
|
130
|
+
All action commands accept **one or more thread IDs** and an optional `--account` flag. On Google accounts, archiving removes the `INBOX` label. On IMAP accounts, it moves the message to the server's Archive folder (`Archive`, `Archives`, `All Mail`, `[Gmail]/All Mail`, or `INBOX.Archive`).
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# archive a single thread
|
|
134
|
+
zele mail archive 18f3b7c9d2a1e4f0
|
|
135
|
+
|
|
136
|
+
# archive multiple threads at once
|
|
137
|
+
zele mail archive 18f3b7c9d2a1e4f0 18f3b7c9d2a1e4f1 18f3b7c9d2a1e4f2
|
|
138
|
+
|
|
139
|
+
# archive from a specific account when you have multiple
|
|
140
|
+
zele mail archive 18f3b7c9d2a1e4f0 --account you@example.com
|
|
141
|
+
|
|
142
|
+
# bulk archive: pipe thread IDs from a search
|
|
143
|
+
zele mail search "from:noreply@github.com older_than:7d" --limit 100 \
|
|
144
|
+
| yq '.[].id' \
|
|
145
|
+
| xargs zele mail archive
|
|
146
|
+
|
|
147
|
+
# list archived threads later
|
|
148
|
+
zele mail list --filter "in:archive" --limit 100
|
|
149
|
+
```
|
|
150
|
+
|
|
108
151
|
### Search query syntax
|
|
109
152
|
|
|
110
153
|
For **Google accounts**, `mail search` and `mail list --filter` use [Gmail search operators](https://support.google.com/mail/answer/7190) server-side. For **IMAP accounts**, queries are translated to IMAP SEARCH criteria (a subset is supported).
|
|
@@ -131,10 +174,10 @@ For **Google accounts**, `mail search` and `mail list --filter` use [Gmail searc
|
|
|
131
174
|
| `OR` / `{ }` | `from:a OR from:b` | yes | no |
|
|
132
175
|
|
|
133
176
|
```bash
|
|
134
|
-
zele mail list --filter "is:unread"
|
|
135
|
-
zele mail list --filter "from:github newer_than:7d" --folder sent
|
|
136
|
-
zele mail search "from:github is:unread newer_than:7d"
|
|
137
|
-
zele mail watch --
|
|
177
|
+
zele mail list --filter "is:unread" --limit 100
|
|
178
|
+
zele mail list --filter "from:github newer_than:7d" --folder sent --limit 100
|
|
179
|
+
zele mail search "from:github is:unread newer_than:7d" --limit 100
|
|
180
|
+
zele mail watch --filter "from:github has:attachment"
|
|
138
181
|
```
|
|
139
182
|
|
|
140
183
|
### Drafts
|
|
@@ -231,6 +274,32 @@ Google and IMAP/SMTP accounts work side by side — `mail list` merges results f
|
|
|
231
274
|
|
|
232
275
|
All structured data is output as YAML. In TTY mode, keys are colored for readability. Pipe output to other tools for scripting.
|
|
233
276
|
|
|
277
|
+
## For AI agents
|
|
278
|
+
|
|
279
|
+
**Always run `zele --help` first.** The top-level help already contains every subcommand, option, and flag — there is no need to run `zele <command> --help` separately. The help output is the source of truth. Read it in full — never pipe through `head`, `tail`, or `sed` to truncate.
|
|
280
|
+
|
|
281
|
+
**Never use the TUI.** Running `zele` with no subcommand launches a human-facing terminal UI for browsing email. Agents must use the CLI subcommands (`zele mail list`, `zele cal events`, etc.) which output structured YAML that can be parsed and piped.
|
|
282
|
+
|
|
283
|
+
**Always run `zele whoami` before account-scoped commands.** When the user asks to check email "for a specific account" (e.g. "my work email", "my personal Gmail"), run `zele whoami` first to list connected accounts and find the exact address to pass to `--account`. Never guess the email — pick it from the `whoami` output. The output also shows account type (`google` or `imap_smtp`) and capabilities so you know which features are available.
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# list connected accounts first
|
|
287
|
+
zele whoami
|
|
288
|
+
|
|
289
|
+
# then scope commands to the right account
|
|
290
|
+
zele mail list --account user@work.com
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Prefer YAML parsing over regex.** Pipe command output through `yq` to extract IDs and fields reliably:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# read all unread emails
|
|
297
|
+
zele mail list --filter "is:unread" --limit 100 | yq '.[].id' | xargs zele mail read
|
|
298
|
+
|
|
299
|
+
# bulk archive unread
|
|
300
|
+
zele mail list --filter "is:unread" --limit 100 | yq '.[].id' | xargs zele mail archive
|
|
301
|
+
```
|
|
302
|
+
|
|
234
303
|
## License
|
|
235
304
|
|
|
236
305
|
ISC
|
package/dist/api-utils.d.ts
CHANGED
|
@@ -50,6 +50,16 @@ declare const UnsupportedError_base: errore.FactoryTaggedErrorClass<"Unsupported
|
|
|
50
50
|
/** Returned when a command requires a capability (e.g. gmail labels) that the account doesn't support. */
|
|
51
51
|
export declare class UnsupportedError extends UnsupportedError_base {
|
|
52
52
|
}
|
|
53
|
+
declare const UnsubscribeUnavailableError_base: errore.FactoryTaggedErrorClass<"UnsubscribeUnavailableError", "No List-Unsubscribe header on thread $threadId", Error>;
|
|
54
|
+
/** Returned when a thread has no List-Unsubscribe header (RFC 2369) so no
|
|
55
|
+
* standardized unsubscribe mechanism is available. */
|
|
56
|
+
export declare class UnsubscribeUnavailableError extends UnsubscribeUnavailableError_base {
|
|
57
|
+
}
|
|
58
|
+
declare const UnsubscribeFailedError_base: errore.FactoryTaggedErrorClass<"UnsubscribeFailedError", "Unsubscribe via $mechanism failed: $reason", Error>;
|
|
59
|
+
/** Returned when the unsubscribe attempt itself failed (HTTP error, SMTP
|
|
60
|
+
* send failure, redirect returned when RFC 8058 forbids it, etc.). */
|
|
61
|
+
export declare class UnsubscribeFailedError extends UnsubscribeFailedError_base {
|
|
62
|
+
}
|
|
53
63
|
/** Detect auth-like errors from underlying libraries (tsdav string errors, googleapis structured errors).
|
|
54
64
|
* Used inside clients to decide whether to return an AuthError.
|
|
55
65
|
* NOTE: String matching here is intentional — this is the boundary layer that converts
|
package/dist/api-utils.js
CHANGED
|
@@ -107,6 +107,20 @@ export class UnsupportedError extends errore.createTaggedError({
|
|
|
107
107
|
message: '$feature is not available for $accountType accounts. $hint',
|
|
108
108
|
}) {
|
|
109
109
|
}
|
|
110
|
+
/** Returned when a thread has no List-Unsubscribe header (RFC 2369) so no
|
|
111
|
+
* standardized unsubscribe mechanism is available. */
|
|
112
|
+
export class UnsubscribeUnavailableError extends errore.createTaggedError({
|
|
113
|
+
name: 'UnsubscribeUnavailableError',
|
|
114
|
+
message: 'No List-Unsubscribe header on thread $threadId',
|
|
115
|
+
}) {
|
|
116
|
+
}
|
|
117
|
+
/** Returned when the unsubscribe attempt itself failed (HTTP error, SMTP
|
|
118
|
+
* send failure, redirect returned when RFC 8058 forbids it, etc.). */
|
|
119
|
+
export class UnsubscribeFailedError extends errore.createTaggedError({
|
|
120
|
+
name: 'UnsubscribeFailedError',
|
|
121
|
+
message: 'Unsubscribe via $mechanism failed: $reason',
|
|
122
|
+
}) {
|
|
123
|
+
}
|
|
110
124
|
/** Detect auth-like errors from underlying libraries (tsdav string errors, googleapis structured errors).
|
|
111
125
|
* Used inside clients to decide whether to return an AuthError.
|
|
112
126
|
* NOTE: String matching here is intentional — this is the boundary layer that converts
|
package/dist/api-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-utils.js","sourceRoot":"","sources":["../src/api-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-utils.js","sourceRoot":"","sources":["../src/api-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Shared goke type for the zele CLI, including the global options declared
|
|
2
|
+
// on the root `goke('zele')` instance. Living in its own file avoids the
|
|
3
|
+
// circular import that would arise from command modules importing from
|
|
4
|
+
// `./cli.js` (which itself imports every command module).
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=cli-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-types.js","sourceRoot":"","sources":["../src/cli-types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,0DAA0D"}
|
package/dist/cli.js
CHANGED
|
@@ -18,11 +18,7 @@ import { registerCalendarCommands } from './commands/calendar.js';
|
|
|
18
18
|
import { registerWatchCommands } from './commands/watch.js';
|
|
19
19
|
import { registerFilterCommands } from './commands/filter.js';
|
|
20
20
|
import { handleCommandError } from './output.js';
|
|
21
|
-
const cli = goke('zele');
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
// Global options
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
cli.option('--account <account>', z.array(z.string()).describe('Filter by email account (repeatable)'));
|
|
21
|
+
const cli = goke('zele').option('--account <account>', z.array(z.string()).describe('Filter by email account (repeatable)'));
|
|
26
22
|
// ---------------------------------------------------------------------------
|
|
27
23
|
// Default command (TUI)
|
|
28
24
|
// ---------------------------------------------------------------------------
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,kCAAkC;AAClC,0EAA0E;AAC1E,wEAAwE;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerAttachmentCommands(cli:
|
|
1
|
+
import type { ZeleCli } from '../cli-types.js';
|
|
2
|
+
export declare function registerAttachmentCommands(cli: ZeleCli): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,6DAA6D;AAC7D,yEAAyE;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,6DAA6D;AAC7D,yEAAyE;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,0BAA0B,CAAC,GAAY;IACrD,4EAA4E;IAC5E,kBAAkB;IAClB,4EAA4E;IAE5E,GAAG;SACA,OAAO,CAAC,4BAA4B,EAAE,+CAA+C,CAAC;SACtF,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAEnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAClD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACnC,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,UAAU,EAAE,GAAG,CAAC,EAAE;YAClB,aAAa,EAAE,UAAU,CAAC,YAAY;YACtC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,IAAI,EAAE,UAAU,CAAC,QAAQ;YACzB,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC,CACJ,CAAA;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;YAChD,OAAM;QACR,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAA;QAC9E,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEJ,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E,GAAG;SACA,OAAO,CAAC,2CAA2C,EAAE,wBAAwB,CAAC;SAC9E,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SAClF,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAEnD,gCAAgC;QAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;QAClD,IAAI,GAAG,YAAY,KAAK;YAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;QACxD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,GAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,CAAA;QACzE,MAAM,gBAAgB,GAAG,GAAG,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QACnE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAA;QACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;QAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE3C,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACjE,GAAG,CAAC,KAAK,CAAC,6BAA6B,WAAW,wCAAwC,CAAC,CAAA;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,iEAAiE;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC/D,GAAG,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAA;gBAC9B,OAAM;YACR,CAAC;QACH,CAAC;QAED,WAAW;QACX,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;QAC1E,IAAI,UAAU,YAAY,KAAK;YAAE,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAA;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEhD,iCAAiC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAEjC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACpE,GAAG,CAAC,OAAO,CAAC,UAAU,OAAO,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;AACN,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAA;IACrC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IACjE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,IAAwB,EAAE,QAAgB;IAClE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAEtD,IAAI,SAAS,GAAG,IAAI;QAClB,sEAAsE;SACrE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;QAC3B,2CAA2C;SAC1C,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5B,uEAAuE;SACtE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;QAC9B,iEAAiE;SAChE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IAElC,qEAAqE;IACrE,IAAI,wCAAwC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,SAAS,GAAG,IAAI,SAAS,EAAE,CAAA;IAC7B,CAAC;IAED,gDAAgD;IAChD,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;QACjD,SAAS,GAAG,IAAI,GAAG,GAAG,CAAA;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;AACpD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerAuthCommands(cli:
|
|
1
|
+
import type { ZeleCli } from '../cli-types.js';
|
|
2
|
+
export declare function registerAuthCommands(cli: ZeleCli): void;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// Supports multiple accounts: login adds accounts, logout removes one.
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import pc from 'picocolors';
|
|
6
|
+
import * as clack from '@clack/prompts';
|
|
6
7
|
import { login, loginImap, logout, listAccounts, getAuthStatuses } from '../auth.js';
|
|
7
8
|
import { closePrisma } from '../db.js';
|
|
8
9
|
import * as out from '../output.js';
|
|
@@ -10,55 +11,62 @@ import { handleCommandError } from '../output.js';
|
|
|
10
11
|
export function registerAuthCommands(cli) {
|
|
11
12
|
cli
|
|
12
13
|
.command('login', 'Authenticate with Google (opens browser) or show IMAP/SMTP login instructions')
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
14
|
+
.option('--method <method>', z.enum(['google', 'imap']).optional().describe('Authentication method (google or imap)'))
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
let method = options.method;
|
|
17
|
+
if (!method) {
|
|
18
|
+
if (!process.stdin.isTTY) {
|
|
19
|
+
out.error('Run non-interactively with: zele login --method google|imap');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const choice = await clack.select({
|
|
23
|
+
message: 'Choose authentication method',
|
|
24
|
+
options: [
|
|
25
|
+
{ value: 'google', label: 'Google', hint: 'opens browser for OAuth' },
|
|
26
|
+
{ value: 'imap', label: 'Other', hint: 'IMAP/SMTP with password' },
|
|
27
|
+
],
|
|
23
28
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
console.error(pc.bold('\nTo add an IMAP/SMTP account, run:\n'));
|
|
28
|
-
console.error(pc.dim(' # Fastmail'));
|
|
29
|
-
console.error(` zele login imap \\`);
|
|
30
|
-
console.error(` --email you@fastmail.com \\`);
|
|
31
|
-
console.error(` --imap-host imap.fastmail.com --imap-port 993 \\`);
|
|
32
|
-
console.error(` --smtp-host smtp.fastmail.com --smtp-port 465 \\`);
|
|
33
|
-
console.error(` --password "your-app-password"`);
|
|
34
|
-
console.error();
|
|
35
|
-
console.error(pc.dim(' # Gmail (app password)'));
|
|
36
|
-
console.error(` zele login imap \\`);
|
|
37
|
-
console.error(` --email you@gmail.com \\`);
|
|
38
|
-
console.error(` --imap-host imap.gmail.com --imap-port 993 \\`);
|
|
39
|
-
console.error(` --smtp-host smtp.gmail.com --smtp-port 465 \\`);
|
|
40
|
-
console.error(` --password "your-app-password"`);
|
|
41
|
-
console.error();
|
|
42
|
-
console.error(pc.dim(' # Outlook/Hotmail'));
|
|
43
|
-
console.error(` zele login imap \\`);
|
|
44
|
-
console.error(` --email you@outlook.com \\`);
|
|
45
|
-
console.error(` --imap-host outlook.office365.com --imap-port 993 \\`);
|
|
46
|
-
console.error(` --smtp-host smtp-mail.outlook.com --smtp-port 587 \\`);
|
|
47
|
-
console.error(` --password "your-password"`);
|
|
48
|
-
console.error();
|
|
49
|
-
console.error(pc.dim(' # Generic (any IMAP/SMTP provider)'));
|
|
50
|
-
console.error(` zele login imap \\`);
|
|
51
|
-
console.error(` --email you@example.com \\`);
|
|
52
|
-
console.error(` --imap-host imap.example.com --imap-port 993 \\`);
|
|
53
|
-
console.error(` --smtp-host smtp.example.com --smtp-port 465 \\`);
|
|
54
|
-
console.error(` --password "your-password"`);
|
|
55
|
-
console.error();
|
|
56
|
-
console.error(pc.dim('Omit --smtp-host for read-only (IMAP only, no sending).'));
|
|
57
|
-
console.error(pc.dim('Use --imap-user/--smtp-user if the login username differs from your email.'));
|
|
58
|
-
return;
|
|
29
|
+
if (clack.isCancel(choice)) {
|
|
30
|
+
out.hint('Cancelled');
|
|
31
|
+
process.exit(0);
|
|
59
32
|
}
|
|
33
|
+
method = choice;
|
|
34
|
+
}
|
|
35
|
+
if (method === 'imap') {
|
|
36
|
+
console.error(pc.bold('\nTo add an IMAP/SMTP account, run:\n'));
|
|
37
|
+
console.error(pc.dim(' # Fastmail'));
|
|
38
|
+
console.error(` zele login imap \\`);
|
|
39
|
+
console.error(` --email you@fastmail.com \\`);
|
|
40
|
+
console.error(` --imap-host imap.fastmail.com --imap-port 993 \\`);
|
|
41
|
+
console.error(` --smtp-host smtp.fastmail.com --smtp-port 465 \\`);
|
|
42
|
+
console.error(` --password "your-app-password"`);
|
|
43
|
+
console.error();
|
|
44
|
+
console.error(pc.dim(' # Gmail (app password)'));
|
|
45
|
+
console.error(` zele login imap \\`);
|
|
46
|
+
console.error(` --email you@gmail.com \\`);
|
|
47
|
+
console.error(` --imap-host imap.gmail.com --imap-port 993 \\`);
|
|
48
|
+
console.error(` --smtp-host smtp.gmail.com --smtp-port 465 \\`);
|
|
49
|
+
console.error(` --password "your-app-password"`);
|
|
50
|
+
console.error();
|
|
51
|
+
console.error(pc.dim(' # Outlook/Hotmail'));
|
|
52
|
+
console.error(` zele login imap \\`);
|
|
53
|
+
console.error(` --email you@outlook.com \\`);
|
|
54
|
+
console.error(` --imap-host outlook.office365.com --imap-port 993 \\`);
|
|
55
|
+
console.error(` --smtp-host smtp-mail.outlook.com --smtp-port 587 \\`);
|
|
56
|
+
console.error(` --password "your-password"`);
|
|
57
|
+
console.error();
|
|
58
|
+
console.error(pc.dim(' # Generic (any IMAP/SMTP provider)'));
|
|
59
|
+
console.error(` zele login imap \\`);
|
|
60
|
+
console.error(` --email you@example.com \\`);
|
|
61
|
+
console.error(` --imap-host imap.example.com --imap-port 993 \\`);
|
|
62
|
+
console.error(` --smtp-host smtp.example.com --smtp-port 465 \\`);
|
|
63
|
+
console.error(` --password "your-password"`);
|
|
64
|
+
console.error();
|
|
65
|
+
console.error(pc.dim('Omit --smtp-host for read-only (IMAP only, no sending).'));
|
|
66
|
+
console.error(pc.dim('Use --imap-user/--smtp-user if the login username differs from your email.'));
|
|
67
|
+
return;
|
|
60
68
|
}
|
|
61
|
-
//
|
|
69
|
+
// Google OAuth flow
|
|
62
70
|
const result = await login();
|
|
63
71
|
if (result instanceof Error)
|
|
64
72
|
handleCommandError(result);
|
|
@@ -144,13 +152,11 @@ export function registerAuthCommands(cli) {
|
|
|
144
152
|
out.error('Use --force to logout non-interactively');
|
|
145
153
|
process.exit(1);
|
|
146
154
|
}
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
rl.question(`Remove credentials for ${targetEmail}? [y/N] `, resolve);
|
|
155
|
+
const confirmed = await clack.confirm({
|
|
156
|
+
message: `Remove credentials for ${targetEmail}?`,
|
|
157
|
+
initialValue: false,
|
|
151
158
|
});
|
|
152
|
-
|
|
153
|
-
if (answer.toLowerCase() !== 'y') {
|
|
159
|
+
if (clack.isCancel(confirmed) || !confirmed) {
|
|
154
160
|
out.hint('Cancelled');
|
|
155
161
|
return;
|
|
156
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-cmd.js","sourceRoot":"","sources":["../../src/commands/auth-cmd.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,4EAA4E;AAC5E,uEAAuE;AAGvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-cmd.js","sourceRoot":"","sources":["../../src/commands/auth-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerCalendarCommands(cli:
|
|
1
|
+
import type { ZeleCli } from '../cli-types.js';
|
|
2
|
+
export declare function registerCalendarCommands(cli: ZeleCli): void;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Cache is handled by the client — commands just call methods and use data.
|
|
4
4
|
// Multi-account: list/events fetch all accounts concurrently and merge by start time.
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
import
|
|
6
|
+
import * as clack from '@clack/prompts';
|
|
7
7
|
import { getCalendarClients, getCalendarClient } from '../auth.js';
|
|
8
8
|
import { AuthError } from '../api-utils.js';
|
|
9
9
|
import * as out from '../output.js';
|
|
@@ -66,11 +66,11 @@ export function registerCalendarCommands(cli) {
|
|
|
66
66
|
.option('--week', 'Show this week')
|
|
67
67
|
.option('--days <days>', z.number().describe('Show next N days'))
|
|
68
68
|
.option('--all', 'Fetch from all calendars')
|
|
69
|
-
.option('--
|
|
70
|
-
.option('--
|
|
69
|
+
.option('--filter <filter>', 'Free text search')
|
|
70
|
+
.option('--limit [limit]', 'Max results (default: 20)')
|
|
71
71
|
.option('--page <page>', 'Pagination token (requires --account, only works for a single account)')
|
|
72
72
|
.action(async (options) => {
|
|
73
|
-
const
|
|
73
|
+
const limit = options.limit ? Number(options.limit) : 20;
|
|
74
74
|
const calendarId = options.calendar ?? 'primary';
|
|
75
75
|
if (options.all && options.calendar) {
|
|
76
76
|
out.error('--all and --calendar cannot be used together');
|
|
@@ -105,8 +105,8 @@ export function registerCalendarCommands(cli) {
|
|
|
105
105
|
calendarId: cal.id,
|
|
106
106
|
timeMin,
|
|
107
107
|
timeMax,
|
|
108
|
-
query: options.
|
|
109
|
-
maxResults:
|
|
108
|
+
query: options.filter,
|
|
109
|
+
maxResults: limit,
|
|
110
110
|
});
|
|
111
111
|
if (r instanceof Error)
|
|
112
112
|
return r;
|
|
@@ -130,8 +130,8 @@ export function registerCalendarCommands(cli) {
|
|
|
130
130
|
calendarId,
|
|
131
131
|
timeMin,
|
|
132
132
|
timeMax,
|
|
133
|
-
query: options.
|
|
134
|
-
maxResults:
|
|
133
|
+
query: options.filter,
|
|
134
|
+
maxResults: limit,
|
|
135
135
|
pageToken: options.page,
|
|
136
136
|
});
|
|
137
137
|
if (r instanceof Error)
|
|
@@ -156,7 +156,7 @@ export function registerCalendarCommands(cli) {
|
|
|
156
156
|
const merged = allResults
|
|
157
157
|
.flatMap(({ email, result }) => result.events.map((e) => ({ ...e, account: email })))
|
|
158
158
|
.sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())
|
|
159
|
-
.slice(0,
|
|
159
|
+
.slice(0, limit);
|
|
160
160
|
if (merged.length === 0) {
|
|
161
161
|
out.printList([], { summary: 'No events found' });
|
|
162
162
|
return;
|
|
@@ -390,12 +390,11 @@ export function registerCalendarCommands(cli) {
|
|
|
390
390
|
const calendarId = options.calendar ?? 'primary';
|
|
391
391
|
const { client } = await getCalendarClient(options.account);
|
|
392
392
|
if (!options.force && process.stdin.isTTY) {
|
|
393
|
-
const
|
|
394
|
-
|
|
395
|
-
|
|
393
|
+
const confirmed = await clack.confirm({
|
|
394
|
+
message: `Delete event ${eventId}?`,
|
|
395
|
+
initialValue: false,
|
|
396
396
|
});
|
|
397
|
-
|
|
398
|
-
if (answer.toLowerCase() !== 'y') {
|
|
397
|
+
if (clack.isCancel(confirmed) || !confirmed) {
|
|
399
398
|
out.hint('Cancelled');
|
|
400
399
|
return;
|
|
401
400
|
}
|