@whatcha/cli 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +223 -25
- package/dist/auth/session.js +50 -0
- package/dist/auth/session.js.map +1 -1
- package/dist/auth/token-store.js.map +1 -1
- package/dist/cli.js +44 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/diaries.js +14 -3
- package/dist/commands/diaries.js.map +1 -1
- package/dist/commands/diary-cover.js +54 -0
- package/dist/commands/diary-cover.js.map +1 -0
- package/dist/commands/login.js +82 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/profiles.js +187 -11
- package/dist/commands/profiles.js.map +1 -1
- package/dist/commands/publish.js +81 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/read.js +7 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/shared-diary.js +255 -0
- package/dist/commands/shared-diary.js.map +1 -0
- package/dist/commands/whoami.js +50 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/commands/wiki.js +386 -0
- package/dist/commands/wiki.js.map +1 -0
- package/dist/commands/write.js +119 -7
- package/dist/commands/write.js.map +1 -1
- package/dist/http-client.js +16 -0
- package/dist/http-client.js.map +1 -1
- package/dist/lib/append-entry.js +90 -11
- package/dist/lib/append-entry.js.map +1 -1
- package/dist/lib/entry-date.js +22 -2
- package/dist/lib/entry-date.js.map +1 -1
- package/dist/lib/entry-get.js +31 -0
- package/dist/lib/entry-get.js.map +1 -0
- package/dist/lib/image-upload.js +126 -0
- package/dist/lib/image-upload.js.map +1 -0
- package/dist/lib/personal-access-token.js +46 -0
- package/dist/lib/personal-access-token.js.map +1 -0
- package/dist/lib/profile-family.js +29 -0
- package/dist/lib/profile-family.js.map +1 -0
- package/dist/lib/publication.js +55 -0
- package/dist/lib/publication.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDiaryCoverArgs = parseDiaryCoverArgs;
|
|
4
|
+
exports.runDiaryCover = runDiaryCover;
|
|
5
|
+
const node_util_1 = require("node:util");
|
|
6
|
+
const session_1 = require("../auth/session");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const diary_resolve_1 = require("../lib/diary-resolve");
|
|
9
|
+
const image_upload_1 = require("../lib/image-upload");
|
|
10
|
+
const output_1 = require("../lib/output");
|
|
11
|
+
const USAGE = "Usage: whatcha diary-cover <diary> <file> | --clear [--json]";
|
|
12
|
+
function parseDiaryCoverArgs(argv) {
|
|
13
|
+
let values, positionals;
|
|
14
|
+
try {
|
|
15
|
+
({ values, positionals } = (0, node_util_1.parseArgs)({
|
|
16
|
+
args: argv,
|
|
17
|
+
options: {
|
|
18
|
+
json: { type: "boolean", default: false },
|
|
19
|
+
clear: { type: "boolean", default: false },
|
|
20
|
+
},
|
|
21
|
+
allowPositionals: true,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
throw new errors_1.CliUsageError(err.message);
|
|
26
|
+
}
|
|
27
|
+
const [diary, image, extra] = positionals;
|
|
28
|
+
if (!diary)
|
|
29
|
+
throw new errors_1.CliUsageError(USAGE);
|
|
30
|
+
if (extra !== undefined)
|
|
31
|
+
throw new errors_1.CliUsageError(`Unexpected extra argument: "${extra}"`);
|
|
32
|
+
const clear = values.clear;
|
|
33
|
+
if (clear && image !== undefined)
|
|
34
|
+
throw new errors_1.CliUsageError("Give a file or --clear, not both.");
|
|
35
|
+
if (!clear && image === undefined)
|
|
36
|
+
throw new errors_1.CliUsageError(`Which image? Give a file, or --clear to remove the cover.\n${USAGE}`);
|
|
37
|
+
return { json: values.json, diary, image, clear };
|
|
38
|
+
}
|
|
39
|
+
async function runDiaryCover(opts, deps = {}) {
|
|
40
|
+
// Checked before anything is sent, so a wrong file changes nothing.
|
|
41
|
+
const file = opts.image !== undefined ? await (0, image_upload_1.readImageFile)(opts.image) : undefined;
|
|
42
|
+
const client = deps.client ?? (await (0, session_1.authenticatedClient)()).client;
|
|
43
|
+
const diary = await (0, diary_resolve_1.resolveDiary)(client, opts.diary);
|
|
44
|
+
const coverMediaAssetId = file ? await (0, image_upload_1.uploadImage)(client, diary.groupId, file) : null;
|
|
45
|
+
await client.patch(`/diaries/${diary.id}`, { iconKey: coverMediaAssetId ?? "" });
|
|
46
|
+
if (opts.json)
|
|
47
|
+
(0, output_1.printJson)({ ok: true, diaryId: diary.id, coverMediaAssetId });
|
|
48
|
+
else if (coverMediaAssetId)
|
|
49
|
+
(0, output_1.printLine)(`Set the cover of "${diary.name}".`);
|
|
50
|
+
else
|
|
51
|
+
(0, output_1.printLine)(`Removed the cover of "${diary.name}".`);
|
|
52
|
+
return { exitCode: 0 };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=diary-cover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diary-cover.js","sourceRoot":"","sources":["../../src/commands/diary-cover.ts"],"names":[],"mappings":";;AAyBA,kDAqBC;AAED,sCAgBC;AAhED,yCAAsC;AACtC,6CAAsD;AACtD,sCAA0C;AAE1C,wDAAoD;AACpD,sDAAiE;AACjE,0CAAqD;AAiBrD,MAAM,KAAK,GAAG,8DAA8D,CAAC;AAE7E,SAAgB,mBAAmB,CAAC,IAAc;IAChD,IAAI,MAAM,EAAE,WAAW,CAAC;IACxB,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,qBAAS,EAAC;YACnC,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBACzC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC3C;YACD,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,sBAAa,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC;IAC1C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,sBAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,sBAAa,CAAC,+BAA+B,KAAK,GAAG,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgB,CAAC;IACtC,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,sBAAa,CAAC,mCAAmC,CAAC,CAAC;IAC/F,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,sBAAa,CAAC,8DAA8D,KAAK,EAAE,CAAC,CAAC;IAClI,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAe,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,IAAuB,EACvB,OAAmC,EAAE;IAErC,oEAAoE;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAA,4BAAa,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAA,6BAAmB,GAAE,CAAC,CAAC,MAAM,CAAC;IACnE,MAAM,KAAK,GAAG,MAAM,IAAA,4BAAY,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAA,0BAAW,EAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,CAAC;IAEjF,IAAI,IAAI,CAAC,IAAI;QAAE,IAAA,kBAAS,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;SACxE,IAAI,iBAAiB;QAAE,IAAA,kBAAS,EAAC,qBAAqB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;;QACtE,IAAA,kBAAS,EAAC,yBAAyB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/commands/login.js
CHANGED
|
@@ -13,6 +13,7 @@ const errors_1 = require("../errors");
|
|
|
13
13
|
const token_store_1 = require("../auth/token-store");
|
|
14
14
|
const gotrue_client_1 = require("../auth/gotrue-client");
|
|
15
15
|
const jwt_1 = require("../lib/jwt");
|
|
16
|
+
const personal_access_token_1 = require("../lib/personal-access-token");
|
|
16
17
|
const output_1 = require("../lib/output");
|
|
17
18
|
function parseLoginArgs(argv) {
|
|
18
19
|
let values;
|
|
@@ -24,6 +25,7 @@ function parseLoginArgs(argv) {
|
|
|
24
25
|
email: { type: "string" },
|
|
25
26
|
password: { type: "string" },
|
|
26
27
|
token: { type: "string" },
|
|
28
|
+
key: { type: "string" },
|
|
27
29
|
"api-url": { type: "string" },
|
|
28
30
|
},
|
|
29
31
|
allowPositionals: false,
|
|
@@ -37,6 +39,7 @@ function parseLoginArgs(argv) {
|
|
|
37
39
|
email: values.email,
|
|
38
40
|
password: values.password,
|
|
39
41
|
token: values.token,
|
|
42
|
+
key: values.key,
|
|
40
43
|
apiUrl: values["api-url"] ?? (0, config_1.apiBaseUrl)(),
|
|
41
44
|
};
|
|
42
45
|
}
|
|
@@ -84,6 +87,9 @@ async function resolveCredentials(opts) {
|
|
|
84
87
|
return { email, password };
|
|
85
88
|
}
|
|
86
89
|
async function runLogin(opts, deps = {}) {
|
|
90
|
+
const key = resolveKey(opts);
|
|
91
|
+
if (key)
|
|
92
|
+
return finishLogin(await loginWithKey(opts, deps, key), opts, deps);
|
|
87
93
|
const token = opts.token ?? process.env.WHATCHA_TOKEN;
|
|
88
94
|
if (token)
|
|
89
95
|
return finishLogin(await loginWithToken(opts, deps, token), opts, deps);
|
|
@@ -99,6 +105,67 @@ async function runLogin(opts, deps = {}) {
|
|
|
99
105
|
return reportRefusal(err, opts);
|
|
100
106
|
}
|
|
101
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Which personal access key to log in with, if any (#1663).
|
|
110
|
+
*
|
|
111
|
+
* `--key` is the explicit form. `--token` and WHATCHA_TOKEN predate keys and
|
|
112
|
+
* mean a refresh token, but a key is unmistakable by its prefix -- the same
|
|
113
|
+
* prefix the server itself goes by -- so a key handed to either is used as a
|
|
114
|
+
* key rather than sent to /auth/refresh to fail there. WHATCHA_KEY is the
|
|
115
|
+
* environment form of `--key`. Flags win over the environment: a person who
|
|
116
|
+
* typed `--email`, `--password` or `--token` meant that, whatever a
|
|
117
|
+
* WHATCHA_KEY left in the shell says.
|
|
118
|
+
*/
|
|
119
|
+
function resolveKey(opts) {
|
|
120
|
+
if (opts.key !== undefined && opts.token !== undefined) {
|
|
121
|
+
throw new errors_1.CliUsageError("Give --key or --token, not both.");
|
|
122
|
+
}
|
|
123
|
+
if (opts.key !== undefined)
|
|
124
|
+
return checkedKey(opts.key, "--key");
|
|
125
|
+
if (opts.token !== undefined)
|
|
126
|
+
return (0, personal_access_token_1.looksLikePersonalAccessToken)(opts.token) ? checkedKey(opts.token, "--token") : undefined;
|
|
127
|
+
if (opts.email !== undefined || opts.password !== undefined)
|
|
128
|
+
return undefined;
|
|
129
|
+
const envKey = process.env.WHATCHA_KEY?.trim();
|
|
130
|
+
if (envKey)
|
|
131
|
+
return checkedKey(envKey, "WHATCHA_KEY");
|
|
132
|
+
const envToken = process.env.WHATCHA_TOKEN?.trim();
|
|
133
|
+
if (envToken && (0, personal_access_token_1.looksLikePersonalAccessToken)(envToken))
|
|
134
|
+
return checkedKey(envToken, "WHATCHA_TOKEN");
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
function checkedKey(raw, from) {
|
|
138
|
+
const key = raw.trim();
|
|
139
|
+
if (!(0, personal_access_token_1.looksLikePersonalAccessToken)(key)) {
|
|
140
|
+
throw new errors_1.CliUsageError(`${from} takes a personal access key (it starts with "whatcha_pat_"; issue one in ${personal_access_token_1.WHERE_KEYS_ARE_ISSUED}). ` +
|
|
141
|
+
"For a refresh token, use --token / WHATCHA_TOKEN.");
|
|
142
|
+
}
|
|
143
|
+
if (!(0, personal_access_token_1.isWellFormedPersonalAccessToken)(key)) {
|
|
144
|
+
throw new errors_1.CliUsageError(`${from} starts like a personal access key but is not a complete one -- it may have been cut off when it was copied.`);
|
|
145
|
+
}
|
|
146
|
+
return key;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* A personal access key (#1469 / PR #1550) is the Bearer credential itself:
|
|
150
|
+
* nothing to exchange, nothing to refresh, no captcha anywhere on the path.
|
|
151
|
+
* `GET /me` is both the check that the key works and where the id/email for
|
|
152
|
+
* the confirmation line come from. A revoked or expired key surfaces as
|
|
153
|
+
* KEY_REVOKED / KEY_EXPIRED (lib/personal-access-token.ts), straight from
|
|
154
|
+
* here, before anything is saved.
|
|
155
|
+
*/
|
|
156
|
+
async function loginWithKey(opts, deps, key) {
|
|
157
|
+
const client = deps.client ? new session_1.KeyErrorClient(deps.client) : (0, session_1.personalAccessTokenClient)(opts.apiUrl, key);
|
|
158
|
+
const me = await client.get("/me");
|
|
159
|
+
return {
|
|
160
|
+
userId: me.id,
|
|
161
|
+
email: me.email ?? null,
|
|
162
|
+
accessToken: key,
|
|
163
|
+
refreshToken: "",
|
|
164
|
+
// Never consulted for a key (auth/session.ts checks authKind first).
|
|
165
|
+
expiresIn: 0,
|
|
166
|
+
authKind: "key",
|
|
167
|
+
};
|
|
168
|
+
}
|
|
102
169
|
/**
|
|
103
170
|
* The escape hatch issue #1428 asks for: skip the password grant (and
|
|
104
171
|
* whatever captcha it is gated behind) entirely by handing `whatcha` a
|
|
@@ -174,9 +241,9 @@ function reportRefusal(err, opts) {
|
|
|
174
241
|
// a captcha rejection, unlike /auth/login's generic 401.
|
|
175
242
|
message = err.looksLikeCaptchaFailure()
|
|
176
243
|
? "Sign-in needs a captcha challenge (Cloudflare Turnstile) that this terminal cannot solve " +
|
|
177
|
-
"(issue #1428).
|
|
178
|
-
|
|
179
|
-
"
|
|
244
|
+
"(issue #1428). Use a personal access key instead: issue one in " +
|
|
245
|
+
`${personal_access_token_1.WHERE_KEYS_ARE_ISSUED}, then run \`whatcha login --key <key>\` or set WHATCHA_KEY, ` +
|
|
246
|
+
"instead of retrying a password sign-in here."
|
|
180
247
|
: `Sign-in was refused: ${err.message}`;
|
|
181
248
|
}
|
|
182
249
|
else if (err instanceof errors_1.ApiError && err.status === 401) {
|
|
@@ -184,8 +251,8 @@ function reportRefusal(err, opts) {
|
|
|
184
251
|
"Sign-in was refused. This could be a wrong email/password, or it could be that GoTrue is demanding " +
|
|
185
252
|
"a captcha challenge (Cloudflare Turnstile) this terminal cannot solve (issue #1428) -- /auth/login " +
|
|
186
253
|
"answers both the same generic way, so whatcha cannot tell them apart here. If the password is right, " +
|
|
187
|
-
"do not keep retrying it:
|
|
188
|
-
|
|
254
|
+
"do not keep retrying it: use a personal access key instead. Issue one in " +
|
|
255
|
+
`${personal_access_token_1.WHERE_KEYS_ARE_ISSUED}, then run \`whatcha login --key <key>\` or set WHATCHA_KEY.`;
|
|
189
256
|
}
|
|
190
257
|
else {
|
|
191
258
|
throw err;
|
|
@@ -204,13 +271,21 @@ async function finishLogin(session, opts, deps) {
|
|
|
204
271
|
accessToken: session.accessToken,
|
|
205
272
|
refreshToken: session.refreshToken,
|
|
206
273
|
expiresAt: Date.now() + session.expiresIn * 1000,
|
|
274
|
+
authKind: session.authKind ?? "session",
|
|
207
275
|
}, deps.stores ?? (0, token_store_1.candidateStores)());
|
|
208
276
|
// Never the tokens themselves -- see lib/output.ts's header comment.
|
|
209
277
|
if (opts.json) {
|
|
210
|
-
(0, output_1.printJson)({
|
|
278
|
+
(0, output_1.printJson)({
|
|
279
|
+
ok: true,
|
|
280
|
+
userId: session.userId,
|
|
281
|
+
email: session.email,
|
|
282
|
+
credentialStore: store.name,
|
|
283
|
+
...(session.authKind === "key" ? { authKind: "key" } : {}),
|
|
284
|
+
});
|
|
211
285
|
}
|
|
212
286
|
else {
|
|
213
|
-
|
|
287
|
+
const how = session.authKind === "key" ? " with a personal access key" : "";
|
|
288
|
+
(0, output_1.printLine)(`Logged in as ${session.email ?? session.userId}${how}. Session saved to ${store.name}.`);
|
|
214
289
|
}
|
|
215
290
|
return { exitCode: 0 };
|
|
216
291
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,20 @@ exports.parseProfilesArgs = parseProfilesArgs;
|
|
|
4
4
|
exports.runProfiles = runProfiles;
|
|
5
5
|
exports.parseRemoveArgs = parseRemoveArgs;
|
|
6
6
|
exports.runRemove = runRemove;
|
|
7
|
+
exports.parseAddArgs = parseAddArgs;
|
|
8
|
+
exports.parseAvatarArgs = parseAvatarArgs;
|
|
9
|
+
exports.runAvatar = runAvatar;
|
|
10
|
+
exports.runAdd = runAdd;
|
|
7
11
|
exports.parseSwitchArgs = parseSwitchArgs;
|
|
8
12
|
exports.runSwitch = runSwitch;
|
|
9
13
|
const node_util_1 = require("node:util");
|
|
10
14
|
const session_1 = require("../auth/session");
|
|
11
15
|
const token_store_1 = require("../auth/token-store");
|
|
12
16
|
const errors_1 = require("../errors");
|
|
17
|
+
const config_1 = require("../config");
|
|
18
|
+
const image_upload_1 = require("../lib/image-upload");
|
|
13
19
|
const output_1 = require("../lib/output");
|
|
20
|
+
const profile_family_1 = require("../lib/profile-family");
|
|
14
21
|
function parseProfilesArgs(argv) {
|
|
15
22
|
let values;
|
|
16
23
|
try {
|
|
@@ -73,9 +80,8 @@ function parseRemoveArgs(argv) {
|
|
|
73
80
|
async function runRemove(opts, deps = {}) {
|
|
74
81
|
const resolved = deps.client ? null : await (0, session_1.authenticatedClient)();
|
|
75
82
|
const client = deps.client ?? resolved.client;
|
|
76
|
-
const wanted = opts.target.replace(/^@/, "").toLowerCase();
|
|
77
83
|
const switcher = await client.get("/me/profiles");
|
|
78
|
-
const target = switcher.profiles
|
|
84
|
+
const target = (0, profile_family_1.findProfile)(switcher.profiles, opts.target);
|
|
79
85
|
if (!target) {
|
|
80
86
|
throw new errors_1.CliUsageError(`No profile "${opts.target}". Run \`whatcha profiles\` to see them.`);
|
|
81
87
|
}
|
|
@@ -86,6 +92,162 @@ async function runRemove(opts, deps = {}) {
|
|
|
86
92
|
(0, output_1.printLine)(`Deleted @${target.username ?? target.id}.`);
|
|
87
93
|
return { exitCode: 0 };
|
|
88
94
|
}
|
|
95
|
+
/** The API's rules for a sub-profile (sub-profiles-service.ts), checked before anything is sent. */
|
|
96
|
+
const HANDLE_RE = /^[A-Za-z0-9][A-Za-z0-9_-]{2,29}$/;
|
|
97
|
+
const MAX_DISPLAY_NAME = 80;
|
|
98
|
+
/** `POST /me/avatar` takes at most 5 MB -- less than an upload's 40. */
|
|
99
|
+
const MAX_AVATAR_BYTES = 5 * 1024 * 1024;
|
|
100
|
+
function parseAddArgs(argv) {
|
|
101
|
+
let values;
|
|
102
|
+
let positionals;
|
|
103
|
+
try {
|
|
104
|
+
({ values, positionals } = (0, node_util_1.parseArgs)({
|
|
105
|
+
args: argv,
|
|
106
|
+
options: {
|
|
107
|
+
json: { type: "boolean", default: false },
|
|
108
|
+
name: { type: "string" },
|
|
109
|
+
avatar: { type: "string" },
|
|
110
|
+
},
|
|
111
|
+
allowPositionals: true,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
throw new errors_1.CliUsageError(err.message);
|
|
116
|
+
}
|
|
117
|
+
if (!positionals[0]) {
|
|
118
|
+
throw new errors_1.CliUsageError("Which @handle? Run `whatcha profile-add <@handle> --name <display name>`.");
|
|
119
|
+
}
|
|
120
|
+
if (positionals.length > 1) {
|
|
121
|
+
throw new errors_1.CliUsageError(`One @handle per call; quote a --name with spaces (got "${positionals.join(" ")}").`);
|
|
122
|
+
}
|
|
123
|
+
const username = positionals[0].replace(/^@/, "");
|
|
124
|
+
if (!HANDLE_RE.test(username)) {
|
|
125
|
+
throw new errors_1.CliUsageError("A @handle is 3-30 letters, digits, _ or -, and starts with a letter or digit.");
|
|
126
|
+
}
|
|
127
|
+
const displayName = values.name?.trim();
|
|
128
|
+
if (!displayName)
|
|
129
|
+
throw new errors_1.CliUsageError("--name is required: the profile's display name.");
|
|
130
|
+
if (displayName.length > MAX_DISPLAY_NAME) {
|
|
131
|
+
throw new errors_1.CliUsageError(`--name is at most ${MAX_DISPLAY_NAME} characters.`);
|
|
132
|
+
}
|
|
133
|
+
return { username, displayName, avatar: values.avatar, json: values.json };
|
|
134
|
+
}
|
|
135
|
+
/** Reads an avatar file and checks it against `POST /me/avatar`'s limits. */
|
|
136
|
+
async function readAvatarFile(path) {
|
|
137
|
+
const avatar = await (0, image_upload_1.readImageFile)(path);
|
|
138
|
+
if (avatar.bytes.length > MAX_AVATAR_BYTES) {
|
|
139
|
+
throw new errors_1.CliUsageError(`${avatar.path} is over 5 MB; an avatar is at most 5 MB.`);
|
|
140
|
+
}
|
|
141
|
+
return avatar;
|
|
142
|
+
}
|
|
143
|
+
/** `POST /me/avatar` as whoever `client` is. The new avatar's URL. */
|
|
144
|
+
async function setAvatar(client, avatar) {
|
|
145
|
+
const set = await client.post("/me/avatar", {
|
|
146
|
+
fileName: avatar.fileName,
|
|
147
|
+
contentType: avatar.contentType,
|
|
148
|
+
dataBase64: Buffer.from(avatar.bytes).toString("base64"),
|
|
149
|
+
});
|
|
150
|
+
return set.avatarUrl;
|
|
151
|
+
}
|
|
152
|
+
function parseAvatarArgs(argv) {
|
|
153
|
+
let values;
|
|
154
|
+
let positionals;
|
|
155
|
+
try {
|
|
156
|
+
({ values, positionals } = (0, node_util_1.parseArgs)({
|
|
157
|
+
args: argv,
|
|
158
|
+
options: { json: { type: "boolean", default: false } },
|
|
159
|
+
allowPositionals: true,
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
throw new errors_1.CliUsageError(err.message);
|
|
164
|
+
}
|
|
165
|
+
const [target, file, extra] = positionals;
|
|
166
|
+
if (!target || !file)
|
|
167
|
+
throw new errors_1.CliUsageError("Usage: whatcha profile-avatar <@handle> <file> [--json]");
|
|
168
|
+
if (extra !== undefined)
|
|
169
|
+
throw new errors_1.CliUsageError(`Unexpected extra argument: "${extra}"`);
|
|
170
|
+
return { target, file, json: values.json };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Change an existing profile's avatar (#50) -- until now only `profile-add
|
|
174
|
+
* --avatar` could set one, at creation. The profile the CLI is signed in
|
|
175
|
+
* as sets its own; another of this login's sub-profiles is set through a
|
|
176
|
+
* session for it, used once and dropped, as `profile-add` does. The account
|
|
177
|
+
* itself cannot be reached from a sub-profile (the API refuses that on
|
|
178
|
+
* purpose), so that case says to switch back first.
|
|
179
|
+
*/
|
|
180
|
+
async function runAvatar(opts, deps = {}) {
|
|
181
|
+
const avatar = await readAvatarFile(opts.file);
|
|
182
|
+
const resolved = deps.client ? null : await (0, session_1.authenticatedClient)();
|
|
183
|
+
const client = deps.client ?? resolved.client;
|
|
184
|
+
const session = deps.session ?? resolved.session;
|
|
185
|
+
const forToken = deps.clientForToken ?? (0, profile_family_1.bearerClients)(resolved?.session.apiBaseUrl || (0, config_1.apiBaseUrl)());
|
|
186
|
+
const switcher = await client.get("/me/profiles");
|
|
187
|
+
const target = (0, profile_family_1.findProfile)(switcher.profiles, opts.target);
|
|
188
|
+
if (!target) {
|
|
189
|
+
throw new errors_1.CliUsageError(`No profile "${opts.target}". Run \`whatcha profiles\` to see them.`);
|
|
190
|
+
}
|
|
191
|
+
let asTarget;
|
|
192
|
+
if (target.id === session.userId)
|
|
193
|
+
asTarget = client;
|
|
194
|
+
else if (target.parentProfileId === null) {
|
|
195
|
+
throw new errors_1.CliUsageError("That is the account. Run `whatcha switch --account` first, then this again.");
|
|
196
|
+
}
|
|
197
|
+
else
|
|
198
|
+
asTarget = await (0, profile_family_1.clientAsProfile)(client, target.id, forToken);
|
|
199
|
+
const avatarUrl = await setAvatar(asTarget, avatar);
|
|
200
|
+
if (opts.json)
|
|
201
|
+
(0, output_1.printJson)({ ok: true, profileId: target.id, avatarUrl });
|
|
202
|
+
else
|
|
203
|
+
(0, output_1.printLine)(`Changed the avatar of @${target.username ?? target.id}.`);
|
|
204
|
+
return { exitCode: 0 };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create a sub-profile (#1699): `POST /me/profiles`, the call the app's
|
|
208
|
+
* "Add a profile" dialog makes. The plan's limit and a taken @handle are
|
|
209
|
+
* the API's call -- `whatcha profiles --json` shows `remaining`.
|
|
210
|
+
*
|
|
211
|
+
* `--avatar` is set the way the profile would set it itself: a session for
|
|
212
|
+
* the new profile, used once for `POST /me/avatar` and dropped (see
|
|
213
|
+
* lib/profile-family.ts). The CLI stays signed in as it was -- creating a
|
|
214
|
+
* profile is not switching to it. The file is checked before the profile
|
|
215
|
+
* is created, so a wrong file creates nothing; if the profile is created
|
|
216
|
+
* and only the avatar then fails, that is reported (exit status 2) rather
|
|
217
|
+
* than undone -- the profile is real and usable, just without a picture.
|
|
218
|
+
*/
|
|
219
|
+
async function runAdd(opts, deps = {}) {
|
|
220
|
+
const avatar = opts.avatar !== undefined ? await readAvatarFile(opts.avatar) : undefined;
|
|
221
|
+
const resolved = deps.client ? null : await (0, session_1.authenticatedClient)();
|
|
222
|
+
const client = deps.client ?? resolved.client;
|
|
223
|
+
const forToken = deps.clientForToken ?? (0, profile_family_1.bearerClients)(resolved?.session.apiBaseUrl || (0, config_1.apiBaseUrl)());
|
|
224
|
+
let profile = await client.post("/me/profiles", {
|
|
225
|
+
username: opts.username,
|
|
226
|
+
displayName: opts.displayName,
|
|
227
|
+
});
|
|
228
|
+
let avatarError = null;
|
|
229
|
+
if (avatar) {
|
|
230
|
+
try {
|
|
231
|
+
const asProfile = await (0, profile_family_1.clientAsProfile)(client, profile.id, forToken);
|
|
232
|
+
profile = { ...profile, avatarUrl: await setAvatar(asProfile, avatar) };
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
if (!(err instanceof errors_1.ApiError))
|
|
236
|
+
throw err;
|
|
237
|
+
avatarError = { code: err.code, message: err.message };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (opts.json)
|
|
241
|
+
(0, output_1.printJson)({ ok: true, profile, avatarError });
|
|
242
|
+
else
|
|
243
|
+
(0, output_1.printLine)(`Created @${profile.username ?? opts.username} (${label(profile)}). Run \`whatcha switch @${profile.username ?? opts.username}\` to write as it.`);
|
|
244
|
+
if (avatarError) {
|
|
245
|
+
(0, output_1.printErrorLine)(`WARNING: the profile was created, but its avatar could not be set (${avatarError.code}: ${avatarError.message}). ` +
|
|
246
|
+
`Try again with \`whatcha profile-avatar @${profile.username ?? opts.username} <file>\`.`);
|
|
247
|
+
return { exitCode: 2 };
|
|
248
|
+
}
|
|
249
|
+
return { exitCode: 0 };
|
|
250
|
+
}
|
|
89
251
|
function parseSwitchArgs(argv) {
|
|
90
252
|
let values;
|
|
91
253
|
let positionals;
|
|
@@ -118,25 +280,34 @@ async function runSwitch(opts, deps = {}) {
|
|
|
118
280
|
const client = deps.client ?? resolved.client;
|
|
119
281
|
const session = (deps.session ?? resolved.session);
|
|
120
282
|
if (opts.toAccount) {
|
|
283
|
+
const { accountRefreshToken: _dropped, accountKey, ...rest } = session;
|
|
284
|
+
if (accountKey) {
|
|
285
|
+
// Logged in with a personal access key (#1663): the way back is the
|
|
286
|
+
// key itself, which needs no refresh.
|
|
287
|
+
await (0, session_1.saveSession)({ ...rest, accessToken: accountKey, refreshToken: "", expiresAt: 0, authKind: "key" }, stores);
|
|
288
|
+
if (opts.json)
|
|
289
|
+
(0, output_1.printJson)({ ok: true, switchedTo: "account" });
|
|
290
|
+
else
|
|
291
|
+
(0, output_1.printLine)("Back on the account.");
|
|
292
|
+
return { exitCode: 0 };
|
|
293
|
+
}
|
|
121
294
|
const back = session.accountRefreshToken;
|
|
122
295
|
if (!back) {
|
|
123
296
|
throw new errors_1.CliUsageError("Already on the account.");
|
|
124
297
|
}
|
|
125
|
-
const { accountRefreshToken: _dropped, ...rest } = session;
|
|
126
298
|
// An access token cannot be derived here, so the stored one is left
|
|
127
299
|
// expired on purpose: authenticatedClient() refreshes from the refresh
|
|
128
300
|
// token on the very next command, which is the same path a session that
|
|
129
301
|
// sat unused overnight takes.
|
|
130
|
-
await (0, session_1.saveSession)({ ...rest, refreshToken: back, expiresAt: 0 }, stores);
|
|
302
|
+
await (0, session_1.saveSession)({ ...rest, refreshToken: back, expiresAt: 0, authKind: "session" }, stores);
|
|
131
303
|
if (opts.json)
|
|
132
304
|
(0, output_1.printJson)({ ok: true, switchedTo: "account" });
|
|
133
305
|
else
|
|
134
306
|
(0, output_1.printLine)("Back on the account.");
|
|
135
307
|
return { exitCode: 0 };
|
|
136
308
|
}
|
|
137
|
-
const wanted = opts.target.replace(/^@/, "").toLowerCase();
|
|
138
309
|
const switcher = await client.get("/me/profiles");
|
|
139
|
-
const target = switcher.profiles
|
|
310
|
+
const target = (0, profile_family_1.findProfile)(switcher.profiles, opts.target);
|
|
140
311
|
if (!target) {
|
|
141
312
|
throw new errors_1.CliUsageError(`No profile "${opts.target}". Run \`whatcha profiles\` to see them.`);
|
|
142
313
|
}
|
|
@@ -151,12 +322,16 @@ async function runSwitch(opts, deps = {}) {
|
|
|
151
322
|
return { exitCode: 0 };
|
|
152
323
|
}
|
|
153
324
|
const issued = await client.post(`/me/profiles/${target.id}/session`, {});
|
|
154
|
-
// The account's
|
|
325
|
+
// The account's credential is carried over BEFORE the session is
|
|
155
326
|
// replaced: after this save it is the only copy, and losing it would
|
|
156
|
-
// strand the CLI inside a sub-profile.
|
|
157
|
-
|
|
327
|
+
// strand the CLI inside a sub-profile. A key login (#1663) has no refresh
|
|
328
|
+
// token, so what is kept is the key; once switched, the session itself is
|
|
329
|
+
// an ordinary sub-profile session either way.
|
|
330
|
+
const fromKey = session.accountKey ?? (session.authKind === "key" ? session.accessToken : undefined);
|
|
331
|
+
const stash = fromKey ? undefined : (session.accountRefreshToken ?? session.refreshToken);
|
|
332
|
+
const { accountRefreshToken: _r, accountKey: _k, ...base } = session;
|
|
158
333
|
const next = {
|
|
159
|
-
...
|
|
334
|
+
...base,
|
|
160
335
|
userId: issued.profileId,
|
|
161
336
|
// A sub-profile has no address of its own; the internal one the API
|
|
162
337
|
// holds for GoTrue is never handed out and must not be stored here.
|
|
@@ -164,7 +339,8 @@ async function runSwitch(opts, deps = {}) {
|
|
|
164
339
|
accessToken: issued.accessToken,
|
|
165
340
|
refreshToken: issued.refreshToken,
|
|
166
341
|
expiresAt: Date.now() + issued.expiresIn * 1000,
|
|
167
|
-
|
|
342
|
+
authKind: "session",
|
|
343
|
+
...(fromKey ? { accountKey: fromKey } : { accountRefreshToken: stash }),
|
|
168
344
|
};
|
|
169
345
|
await (0, session_1.saveSession)(next, stores);
|
|
170
346
|
if (opts.json)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/commands/profiles.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/commands/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePublishArgs = parsePublishArgs;
|
|
4
|
+
exports.runPublish = runPublish;
|
|
5
|
+
const node_util_1 = require("node:util");
|
|
6
|
+
const session_1 = require("../auth/session");
|
|
7
|
+
const config_1 = require("../config");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const diary_resolve_1 = require("../lib/diary-resolve");
|
|
10
|
+
const output_1 = require("../lib/output");
|
|
11
|
+
const publication_1 = require("../lib/publication");
|
|
12
|
+
function parsePublishArgs(argv) {
|
|
13
|
+
let values;
|
|
14
|
+
let positionals;
|
|
15
|
+
try {
|
|
16
|
+
({ values, positionals } = (0, node_util_1.parseArgs)({
|
|
17
|
+
args: argv,
|
|
18
|
+
options: {
|
|
19
|
+
json: { type: "boolean", default: false },
|
|
20
|
+
off: { type: "boolean", default: false },
|
|
21
|
+
},
|
|
22
|
+
allowPositionals: true,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new errors_1.CliUsageError(err.message);
|
|
27
|
+
}
|
|
28
|
+
if (!positionals[0])
|
|
29
|
+
throw new errors_1.CliUsageError("Which diary? Run `whatcha publish <diary> [--off]`.");
|
|
30
|
+
if (positionals.length > 1) {
|
|
31
|
+
throw new errors_1.CliUsageError(`One diary per call; quote a name with spaces (got "${positionals.join(" ")}").`);
|
|
32
|
+
}
|
|
33
|
+
return { diary: positionals[0], off: values.off, json: values.json };
|
|
34
|
+
}
|
|
35
|
+
async function runPublish(opts, deps = {}) {
|
|
36
|
+
const resolved = deps.client ? null : await (0, session_1.authenticatedClient)();
|
|
37
|
+
const client = deps.client ?? resolved.client;
|
|
38
|
+
const base = deps.apiBaseUrl ?? (resolved?.session.apiBaseUrl || (0, config_1.apiBaseUrl)());
|
|
39
|
+
const diary = await (0, diary_resolve_1.resolveDiary)(client, opts.diary);
|
|
40
|
+
if (diary.groupType === "personal") {
|
|
41
|
+
throw new errors_1.CliUsageError(`"${diary.name}" is on your personal shelf, which cannot be published. ` +
|
|
42
|
+
"Start a diary of its own to publish: whatcha diary-new <name>");
|
|
43
|
+
}
|
|
44
|
+
// The group first: it is the step most likely to be refused (not the
|
|
45
|
+
// owner), and nothing should have changed when it is.
|
|
46
|
+
const publication = await client.put(`/groups/${diary.groupId}/publication`, {
|
|
47
|
+
isPublic: !opts.off,
|
|
48
|
+
});
|
|
49
|
+
let openedToGroup = false;
|
|
50
|
+
if (!opts.off) {
|
|
51
|
+
const detail = await client.get(`/diaries/${diary.id}`);
|
|
52
|
+
if (detail.visibility === "private") {
|
|
53
|
+
await client.put(`/diaries/${diary.id}/visibility`, { visibility: "group" });
|
|
54
|
+
openedToGroup = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const url = publication.isPublic ? (0, publication_1.publicDiaryUrl)(base, diary.id) : null;
|
|
58
|
+
if (opts.json) {
|
|
59
|
+
(0, output_1.printJson)({
|
|
60
|
+
ok: true,
|
|
61
|
+
diaryId: diary.id,
|
|
62
|
+
groupId: diary.groupId,
|
|
63
|
+
groupName: diary.groupName,
|
|
64
|
+
isPublic: publication.isPublic,
|
|
65
|
+
url,
|
|
66
|
+
openedToGroup,
|
|
67
|
+
});
|
|
68
|
+
return { exitCode: 0 };
|
|
69
|
+
}
|
|
70
|
+
if (url) {
|
|
71
|
+
(0, output_1.printLine)(`Published "${diary.name}": ${url}`);
|
|
72
|
+
if (openedToGroup)
|
|
73
|
+
(0, output_1.printLine)("It was kept to its creator; it is now open to the group's members as well.");
|
|
74
|
+
(0, output_1.printLine)(`Publishing is the group's: every diary in "${diary.groupName}" its members can read is public too.`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
(0, output_1.printLine)(`"${diary.name}" is no longer public (nor is anything else in "${diary.groupName}").`);
|
|
78
|
+
}
|
|
79
|
+
return { exitCode: 0 };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|