Skip to content

Commit 45d4e32

Browse files
Add alias update command
1 parent a88cbb0 commit 45d4e32

4 files changed

Lines changed: 195 additions & 12 deletions

File tree

README.md

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ The CLI's structured output enables integration with:
250250
* [`sl alias options`](#sl-alias-options)
251251
* [`sl alias rm ALIAS-ID`](#sl-alias-rm-alias-id)
252252
* [`sl alias search QUERY`](#sl-alias-search-query)
253+
* [`sl alias update ALIAS-ID`](#sl-alias-update-alias-id)
253254
* [`sl config`](#sl-config)
254255
* [`sl help [COMMAND]`](#sl-help-command)
255256
* [`sl login`](#sl-login)
@@ -289,7 +290,7 @@ EXAMPLES
289290
$ sl alias create --mode word --note "Shopping" --format json
290291
```
291292

292-
_See code: [src/commands/alias/create.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/create.ts)_
293+
_See code: [src/commands/alias/create.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/create.ts)_
293294

294295
## `sl alias create-custom PREFIX SUFFIX`
295296

@@ -329,7 +330,7 @@ EXAMPLES
329330
$ sl alias create-custom custom suffix789 --mailbox-ids 1,2,3 --format json
330331
```
331332

332-
_See code: [src/commands/alias/create-custom.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/create-custom.ts)_
333+
_See code: [src/commands/alias/create-custom.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/create-custom.ts)_
333334

334335
## `sl alias custom PREFIX SUFFIX`
335336

@@ -402,7 +403,7 @@ EXAMPLES
402403
$ sl alias rm 123 --confirm
403404
```
404405

405-
_See code: [src/commands/alias/delete.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/delete.ts)_
406+
_See code: [src/commands/alias/delete.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/delete.ts)_
406407

407408
## `sl alias list`
408409

@@ -445,7 +446,7 @@ EXAMPLES
445446
$ sl alias list --format json
446447
```
447448

448-
_See code: [src/commands/alias/list.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/list.ts)_
449+
_See code: [src/commands/alias/list.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/list.ts)_
449450

450451
## `sl alias ls`
451452

@@ -528,7 +529,7 @@ EXAMPLES
528529
$ sl alias options --format json
529530
```
530531

531-
_See code: [src/commands/alias/options.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/options.ts)_
532+
_See code: [src/commands/alias/options.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/options.ts)_
532533

533534
## `sl alias rm ALIAS-ID`
534535

@@ -600,7 +601,51 @@ EXAMPLES
600601
$ sl alias search search --format json
601602
```
602603

603-
_See code: [src/commands/alias/search.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/alias/search.ts)_
604+
_See code: [src/commands/alias/search.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/search.ts)_
605+
606+
## `sl alias update ALIAS-ID`
607+
608+
Update alias settings
609+
610+
```
611+
USAGE
612+
$ sl alias update ALIAS-ID [--config <value>] [--format plain|json|yaml] [--note <value>] [--name <value>]
613+
[--mailbox-id <value>] [--mailbox-ids <value>] [--pinned] [--disable-pgp]
614+
615+
ARGUMENTS
616+
ALIAS-ID Alias ID
617+
618+
FLAGS
619+
--config=<value> [env: SIMPLELOGIN_CONFIG] Path to config file containing credentials
620+
--disable-pgp Disable/enable PGP
621+
--format=<option> [default: plain] Output format
622+
<options: plain|json|yaml>
623+
--mailbox-id=<value> Change primary mailbox
624+
--mailbox-ids=<value> Comma-separated mailbox IDs
625+
--name=<value> Update display name
626+
--note=<value> Update note
627+
--pinned Pin/unpin alias
628+
629+
DESCRIPTION
630+
Update alias settings
631+
632+
EXAMPLES
633+
$ sl alias update 123 --note "Updated note"
634+
635+
$ sl alias update 123 --name "My Alias"
636+
637+
$ sl alias update 123 --mailbox-id 456
638+
639+
$ sl alias update 123 --mailbox-ids "456,789"
640+
641+
$ sl alias update 123 --pinned
642+
643+
$ sl alias update 123 --disable-pgp
644+
645+
$ sl alias update 123 --note "Shopping" --pinned --format json
646+
```
647+
648+
_See code: [src/commands/alias/update.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/alias/update.ts)_
604649

605650
## `sl config`
606651

@@ -627,7 +672,7 @@ EXAMPLES
627672
$ sl config --format json
628673
```
629674

630-
_See code: [src/commands/config.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/config.ts)_
675+
_See code: [src/commands/config.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/config.ts)_
631676

632677
## `sl help [COMMAND]`
633678

@@ -677,7 +722,7 @@ EXAMPLES
677722
$ sl login --key api-key
678723
```
679724

680-
_See code: [src/commands/login.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/login.ts)_
725+
_See code: [src/commands/login.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/login.ts)_
681726

682727
## `sl logout`
683728

@@ -701,7 +746,7 @@ EXAMPLES
701746
$ sl logout --format json
702747
```
703748

704-
_See code: [src/commands/logout.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/logout.ts)_
749+
_See code: [src/commands/logout.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/logout.ts)_
705750

706751
## `sl whoami`
707752

@@ -725,5 +770,5 @@ EXAMPLES
725770
$ sl whoami --format json
726771
```
727772

728-
_See code: [src/commands/whoami.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.1/src/commands/whoami.ts)_
773+
_See code: [src/commands/whoami.ts](https://github.com/KennethWussmann/simplelogin-cli/blob/v0.1.3/src/commands/whoami.ts)_
729774
<!-- commandsstop -->

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@ketrwu/simplelogin-cli",
33
"description": "Unofficial SimpleLogin CLI",
4-
"version": "0.1.3",
4+
"version": "0.2.0",
55
"author": "Kenneth Wußmann",
66
"bin": {
77
"sl": "./bin/run.js"

src/commands/alias/update.ts

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import {Args, Flags} from '@oclif/core'
2+
import {BaseCommand} from '../base.js'
3+
import {AliasApi} from 'simplelogin-client'
4+
import {getSimpleLoginConfig} from '../../utils/simplelogin-client.js'
5+
6+
export default class AliasUpdate extends BaseCommand<typeof AliasUpdate> {
7+
static override hidden = false
8+
static description = 'Update alias settings'
9+
10+
static examples = [
11+
'<%= config.bin %> <%= command.id %> 123 --note "Updated note"',
12+
'<%= config.bin %> <%= command.id %> 123 --name "My Alias"',
13+
'<%= config.bin %> <%= command.id %> 123 --mailbox-id 456',
14+
'<%= config.bin %> <%= command.id %> 123 --mailbox-ids "456,789"',
15+
'<%= config.bin %> <%= command.id %> 123 --pinned',
16+
'<%= config.bin %> <%= command.id %> 123 --disable-pgp',
17+
'<%= config.bin %> <%= command.id %> 123 --note "Shopping" --pinned --format json',
18+
]
19+
20+
static args = {
21+
'alias-id': Args.integer({
22+
description: 'Alias ID',
23+
required: true,
24+
}),
25+
}
26+
27+
static flags = {
28+
...BaseCommand.baseFlags,
29+
note: Flags.string({
30+
description: 'Update note',
31+
}),
32+
name: Flags.string({
33+
description: 'Update display name',
34+
}),
35+
'mailbox-id': Flags.integer({
36+
description: 'Change primary mailbox',
37+
}),
38+
'mailbox-ids': Flags.string({
39+
description: 'Comma-separated mailbox IDs',
40+
}),
41+
pinned: Flags.boolean({
42+
description: 'Pin/unpin alias',
43+
}),
44+
'disable-pgp': Flags.boolean({
45+
description: 'Disable/enable PGP',
46+
}),
47+
}
48+
49+
async run(): Promise<void> {
50+
try {
51+
const {args, flags} = await this.parse(AliasUpdate)
52+
const aliasId = args['alias-id'] as number
53+
const format = this.getFormat()
54+
55+
// Validate that at least one optional parameter is provided
56+
const hasOptionalParam =
57+
flags.note !== undefined ||
58+
flags.name !== undefined ||
59+
flags['mailbox-id'] !== undefined ||
60+
flags['mailbox-ids'] !== undefined ||
61+
flags.pinned !== undefined ||
62+
flags['disable-pgp'] !== undefined
63+
64+
if (!hasOptionalParam) {
65+
this.outputError(
66+
'At least one optional parameter must be provided (--note, --name, --mailbox-id, --mailbox-ids, --pinned, or --disable-pgp)',
67+
'INVALID_ARGUMENTS'
68+
)
69+
this.exit(2)
70+
}
71+
72+
// Require authentication
73+
await this.requireAuth(flags.config as string | undefined)
74+
75+
// Initialize API client
76+
const config = await getSimpleLoginConfig(flags.config as string | undefined)
77+
const api = new AliasApi(config)
78+
79+
// Build update payload
80+
const updatePayload: {
81+
note?: string
82+
name?: string
83+
mailboxId?: number
84+
mailboxIds?: number[]
85+
pinned?: boolean
86+
disablePgp?: boolean
87+
} = {}
88+
89+
if (flags.note !== undefined) {
90+
updatePayload.note = flags.note as string
91+
}
92+
93+
if (flags.name !== undefined) {
94+
updatePayload.name = flags.name as string
95+
}
96+
97+
if (flags['mailbox-id'] !== undefined) {
98+
updatePayload.mailboxId = flags['mailbox-id'] as number
99+
}
100+
101+
if (flags['mailbox-ids'] !== undefined) {
102+
const mailboxIdsStr = flags['mailbox-ids'] as string
103+
updatePayload.mailboxIds = mailboxIdsStr.split(',').map(id => Number.parseInt(id.trim(), 10))
104+
}
105+
106+
if (flags.pinned !== undefined) {
107+
updatePayload.pinned = flags.pinned as boolean
108+
}
109+
110+
if (flags['disable-pgp'] !== undefined) {
111+
updatePayload.disablePgp = flags['disable-pgp'] as boolean
112+
}
113+
114+
// Update the alias
115+
await api.updateAlias({
116+
aliasId,
117+
aliasAliasIdPatch: updatePayload,
118+
})
119+
120+
// Output result
121+
if (format === 'json' || format === 'yaml') {
122+
this.output({
123+
success: true,
124+
})
125+
} else {
126+
this.log(`Alias ${aliasId} updated successfully.`)
127+
}
128+
} catch (error) {
129+
if (error instanceof Error) {
130+
this.outputError(error.message, 'API_ERROR')
131+
} else {
132+
this.outputError('An unknown error occurred', 'API_ERROR')
133+
}
134+
135+
this.exit(4)
136+
}
137+
}
138+
}

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/index.ts","./src/commands/base.ts","./src/commands/config.ts","./src/commands/login.ts","./src/commands/logout.ts","./src/commands/whoami.ts","./src/commands/alias/alias-create-base.ts","./src/commands/alias/alias-list-base.ts","./src/commands/alias/create-custom.ts","./src/commands/alias/create.ts","./src/commands/alias/delete.ts","./src/commands/alias/list.ts","./src/commands/alias/options.ts","./src/commands/alias/search.ts","./src/utils/config.ts","./src/utils/simplelogin-client.ts"],"version":"5.9.3"}
1+
{"root":["./src/index.ts","./src/commands/base.ts","./src/commands/config.ts","./src/commands/login.ts","./src/commands/logout.ts","./src/commands/whoami.ts","./src/commands/alias/alias-create-base.ts","./src/commands/alias/alias-list-base.ts","./src/commands/alias/create-custom.ts","./src/commands/alias/create.ts","./src/commands/alias/delete.ts","./src/commands/alias/list.ts","./src/commands/alias/options.ts","./src/commands/alias/search.ts","./src/commands/alias/update.ts","./src/utils/config.ts","./src/utils/simplelogin-client.ts"],"version":"5.9.3"}

0 commit comments

Comments
 (0)