gws-axi 0.4.0 → 0.5.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/dist/src/cli.js +1 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/docs/download.js +1 -1
- package/dist/src/commands/docs/download.js.map +1 -1
- package/dist/src/commands/docs/read.js +1 -1
- package/dist/src/commands/docs/read.js.map +1 -1
- package/dist/src/commands/gmail/download.d.ts +2 -0
- package/dist/src/commands/gmail/download.js +181 -0
- package/dist/src/commands/gmail/download.js.map +1 -0
- package/dist/src/commands/gmail/labels.d.ts +2 -0
- package/dist/src/commands/gmail/labels.js +111 -0
- package/dist/src/commands/gmail/labels.js.map +1 -0
- package/dist/src/commands/gmail/mime.d.ts +30 -0
- package/dist/src/commands/gmail/mime.js +150 -0
- package/dist/src/commands/gmail/mime.js.map +1 -0
- package/dist/src/commands/gmail/mime.test.d.ts +1 -0
- package/dist/src/commands/gmail/mime.test.js +184 -0
- package/dist/src/commands/gmail/mime.test.js.map +1 -0
- package/dist/src/commands/gmail/read.d.ts +2 -0
- package/dist/src/commands/gmail/read.js +391 -0
- package/dist/src/commands/gmail/read.js.map +1 -0
- package/dist/src/commands/gmail/search.d.ts +2 -0
- package/dist/src/commands/gmail/search.js +318 -0
- package/dist/src/commands/gmail/search.js.map +1 -0
- package/dist/src/commands/gmail.d.ts +1 -1
- package/dist/src/commands/gmail.js +121 -19
- package/dist/src/commands/gmail.js.map +1 -1
- package/dist/src/google/client.d.ts +14 -0
- package/dist/src/google/client.js +27 -0
- package/dist/src/google/client.js.map +1 -1
- package/dist/src/util/paths.js.map +1 -0
- package/dist/src/util/paths.test.d.ts +1 -0
- package/dist/src/util/paths.test.js +71 -0
- package/dist/src/util/paths.test.js.map +1 -0
- package/package.json +6 -2
- package/dist/src/commands/docs/paths.js.map +0 -1
- /package/dist/src/{commands/docs → util}/paths.d.ts +0 -0
- /package/dist/src/{commands/docs → util}/paths.js +0 -0
package/dist/src/cli.js
CHANGED
|
@@ -6,7 +6,7 @@ import { homeCommand } from "./commands/home.js";
|
|
|
6
6
|
import { authCommand, AUTH_HELP } from "./commands/auth.js";
|
|
7
7
|
import { doctorCommand, DOCTOR_HELP } from "./commands/doctor.js";
|
|
8
8
|
import { calendarCommand } from "./commands/calendar.js";
|
|
9
|
-
import { gmailCommand
|
|
9
|
+
import { gmailCommand } from "./commands/gmail.js";
|
|
10
10
|
import { docsCommand } from "./commands/docs.js";
|
|
11
11
|
import { driveCommand, DRIVE_HELP } from "./commands/drive.js";
|
|
12
12
|
import { slidesCommand, SLIDES_HELP } from "./commands/slides.js";
|
|
@@ -29,7 +29,6 @@ examples:
|
|
|
29
29
|
const COMMAND_HELP = {
|
|
30
30
|
auth: AUTH_HELP,
|
|
31
31
|
doctor: DOCTOR_HELP,
|
|
32
|
-
gmail: GMAIL_HELP,
|
|
33
32
|
drive: DRIVE_HELP,
|
|
34
33
|
slides: SLIDES_HELP,
|
|
35
34
|
};
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,GACf,yIAAyI,CAAC;AAE5I,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAC;AAEF,0EAA0E;AAC1E,0EAA0E;AAC1E,iEAAiE;AACjE,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,CAAC;QACd,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,QAAQ;QACtB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/B,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,eAAe;YACzB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;SACtB;QACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,SAAS,IAAI;QACtB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;KACvC,EAAE,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAEzD,CAAC;QACF,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { basename, dirname, extname } from "node:path";
|
|
|
3
3
|
import { AxiError } from "axi-sdk-js";
|
|
4
4
|
import { driveClient, translateGoogleError } from "../../google/client.js";
|
|
5
5
|
import { joinBlocks, renderHelp, renderObject } from "../../output/index.js";
|
|
6
|
-
import { resolveOutputPath } from "
|
|
6
|
+
import { resolveOutputPath } from "../../util/paths.js";
|
|
7
7
|
export const DOWNLOAD_HELP = `usage: gws-axi docs download <documentId> [flags]
|
|
8
8
|
args[1]:
|
|
9
9
|
<documentId> The Google Doc / Drive file ID (from the URL after /d/)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/commands/docs/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/commands/docs/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { AxiError } from "axi-sdk-js";
|
|
|
4
4
|
import { docsClient, translateGoogleError } from "../../google/client.js";
|
|
5
5
|
import { field, joinBlocks, renderHelp, renderList, renderObject, } from "../../output/index.js";
|
|
6
6
|
import { renderBodyAsMarkdown } from "./markdown.js";
|
|
7
|
-
import { resolveOutputPath } from "
|
|
7
|
+
import { resolveOutputPath } from "../../util/paths.js";
|
|
8
8
|
export const READ_HELP = `usage: gws-axi docs read <documentId> [flags]
|
|
9
9
|
args[1]:
|
|
10
10
|
<documentId> The Google Doc ID (from the URL after /d/)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/commands/docs/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,GAEb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/commands/docs/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const DOWNLOAD_HELP = "usage: gws-axi gmail download <message-id> <attachment-id> [flags]\nargs[2]:\n <message-id> The ID of the message carrying the attachment\n <attachment-id> The attachment ID (from `gws-axi gmail read` output)\nflags[2]:\n --out <path> Where to save (default: ./<attachment filename>; pass\n a directory to save inside with the native name)\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi gmail download 1a2b3c4d5e6f7890 ANGjdJ...XXX\n gws-axi gmail download 1a2b3c... ANGjdJ... --out /tmp/invoice.pdf\nnotes:\n `gws-axi gmail read <thread-id>` lists every message's attachments with\n their filename, mime, size, and attachment_id \u2014 use that output to drive\n this command. You need both the message ID (not thread ID) and the\n attachment ID to fetch bytes.\n";
|
|
2
|
+
export declare function gmailDownloadCommand(account: string, args: string[]): Promise<string>;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname } from "node:path";
|
|
3
|
+
import { AxiError } from "axi-sdk-js";
|
|
4
|
+
import { gmailClient, translateGoogleError } from "../../google/client.js";
|
|
5
|
+
import { joinBlocks, renderHelp, renderObject } from "../../output/index.js";
|
|
6
|
+
import { resolveOutputPath } from "../../util/paths.js";
|
|
7
|
+
export const DOWNLOAD_HELP = `usage: gws-axi gmail download <message-id> <attachment-id> [flags]
|
|
8
|
+
args[2]:
|
|
9
|
+
<message-id> The ID of the message carrying the attachment
|
|
10
|
+
<attachment-id> The attachment ID (from \`gws-axi gmail read\` output)
|
|
11
|
+
flags[2]:
|
|
12
|
+
--out <path> Where to save (default: ./<attachment filename>; pass
|
|
13
|
+
a directory to save inside with the native name)
|
|
14
|
+
--account <email> Account override when 2+ are configured
|
|
15
|
+
examples:
|
|
16
|
+
gws-axi gmail download 1a2b3c4d5e6f7890 ANGjdJ...XXX
|
|
17
|
+
gws-axi gmail download 1a2b3c... ANGjdJ... --out /tmp/invoice.pdf
|
|
18
|
+
notes:
|
|
19
|
+
\`gws-axi gmail read <thread-id>\` lists every message's attachments with
|
|
20
|
+
their filename, mime, size, and attachment_id — use that output to drive
|
|
21
|
+
this command. You need both the message ID (not thread ID) and the
|
|
22
|
+
attachment ID to fetch bytes.
|
|
23
|
+
`;
|
|
24
|
+
function parseFlags(args) {
|
|
25
|
+
const positional = [];
|
|
26
|
+
let out;
|
|
27
|
+
for (let i = 0; i < args.length; i++) {
|
|
28
|
+
const arg = args[i];
|
|
29
|
+
const next = args[i + 1];
|
|
30
|
+
if (arg === "--out") {
|
|
31
|
+
out = next;
|
|
32
|
+
i++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (!arg.startsWith("--")) {
|
|
36
|
+
positional.push(arg);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (positional.length < 2) {
|
|
40
|
+
throw new AxiError("Missing required arguments", "VALIDATION_ERROR", [
|
|
41
|
+
"Usage: gws-axi gmail download <message-id> <attachment-id>",
|
|
42
|
+
"Get both IDs from `gws-axi gmail read <thread-id>`",
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
messageId: positional[0],
|
|
47
|
+
attachmentId: positional[1],
|
|
48
|
+
out,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function gmailDownloadCommand(account, args) {
|
|
52
|
+
const flags = parseFlags(args);
|
|
53
|
+
const api = await gmailClient(account);
|
|
54
|
+
// Fetch bytes first. Gmail re-mints attachment IDs on every API call, so
|
|
55
|
+
// matching a user-supplied id against the parts tree from a fresh
|
|
56
|
+
// messages.get would fail even though the id the user pasted is still
|
|
57
|
+
// valid — the attachments.get endpoint accepts historical ids. So we
|
|
58
|
+
// skip the walk-for-matching and call attachments.get directly.
|
|
59
|
+
let bytes;
|
|
60
|
+
let sizeBytes;
|
|
61
|
+
try {
|
|
62
|
+
const res = await api.users.messages.attachments.get({
|
|
63
|
+
userId: "me",
|
|
64
|
+
messageId: flags.messageId,
|
|
65
|
+
id: flags.attachmentId,
|
|
66
|
+
});
|
|
67
|
+
const data = res.data.data ?? "";
|
|
68
|
+
bytes = Buffer.from(data, "base64url");
|
|
69
|
+
sizeBytes = res.data.size ?? bytes.length;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const translated = translateGoogleError(err, {
|
|
73
|
+
account,
|
|
74
|
+
operation: "gmail.attachments.get",
|
|
75
|
+
});
|
|
76
|
+
if (translated.code === "NOT_FOUND") {
|
|
77
|
+
throw new AxiError(`Attachment not found — message '${flags.messageId}' doesn't have attachment '${flags.attachmentId.slice(0, 20)}…'`, "ATTACHMENT_NOT_FOUND", [
|
|
78
|
+
`List attachments with \`gws-axi gmail read ${flags.messageId}\``,
|
|
79
|
+
`Double-check both the message-id and the attachment-id are correct`,
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
throw translated;
|
|
83
|
+
}
|
|
84
|
+
// Best-effort filename/mime lookup. Walk the message and narrow matches
|
|
85
|
+
// to parts that could plausibly be this attachment (by size, and by
|
|
86
|
+
// mime-type when we happen to know the expected size alone is ambiguous).
|
|
87
|
+
// Gmail re-mints attachment IDs on every API call, so we can't match on
|
|
88
|
+
// ID. When multiple parts share a size, we try narrowing by mime type.
|
|
89
|
+
// If still ambiguous, we fall back to a generic name and warn — the
|
|
90
|
+
// bytes are still correct; the only loss is filename inference.
|
|
91
|
+
let filename = `attachment-${flags.attachmentId.slice(0, 12)}.bin`;
|
|
92
|
+
let mimeType = "application/octet-stream";
|
|
93
|
+
let ambiguous = false;
|
|
94
|
+
try {
|
|
95
|
+
const msgRes = await api.users.messages.get({
|
|
96
|
+
userId: "me",
|
|
97
|
+
id: flags.messageId,
|
|
98
|
+
format: "full",
|
|
99
|
+
});
|
|
100
|
+
const bySize = [];
|
|
101
|
+
const walk = (part) => {
|
|
102
|
+
if (part.filename &&
|
|
103
|
+
part.body?.attachmentId &&
|
|
104
|
+
part.body?.size === sizeBytes) {
|
|
105
|
+
bySize.push({
|
|
106
|
+
filename: part.filename,
|
|
107
|
+
mimeType: part.mimeType ?? "application/octet-stream",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
for (const p of part.parts ?? [])
|
|
111
|
+
walk(p);
|
|
112
|
+
};
|
|
113
|
+
if (msgRes.data.payload)
|
|
114
|
+
walk(msgRes.data.payload);
|
|
115
|
+
if (bySize.length === 1) {
|
|
116
|
+
filename = bySize[0].filename;
|
|
117
|
+
mimeType = bySize[0].mimeType;
|
|
118
|
+
}
|
|
119
|
+
else if (bySize.length > 1) {
|
|
120
|
+
// Size alone is ambiguous. We don't know the expected mime type
|
|
121
|
+
// directly (attachments.get doesn't return it), but if every
|
|
122
|
+
// candidate happens to share one, we can still confidently match.
|
|
123
|
+
const mimeTypes = new Set(bySize.map((m) => m.mimeType));
|
|
124
|
+
if (mimeTypes.size === 1) {
|
|
125
|
+
// All candidates are the same mime type; any of them is a
|
|
126
|
+
// reasonable choice for display. Pick the first but flag it as
|
|
127
|
+
// ambiguous so users get a warning to pass --out.
|
|
128
|
+
filename = bySize[0].filename;
|
|
129
|
+
mimeType = bySize[0].mimeType;
|
|
130
|
+
ambiguous = true;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
ambiguous = true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Metadata lookup is best-effort; swallow and use fallback filename.
|
|
139
|
+
}
|
|
140
|
+
const outPath = await resolveOutputPath(flags.out, filename);
|
|
141
|
+
await mkdir(dirname(outPath), { recursive: true });
|
|
142
|
+
await writeFile(outPath, bytes);
|
|
143
|
+
const blocks = [];
|
|
144
|
+
blocks.push(renderObject({ account }));
|
|
145
|
+
blocks.push(renderObject({
|
|
146
|
+
attachment: {
|
|
147
|
+
message_id: flags.messageId,
|
|
148
|
+
attachment_id: flags.attachmentId,
|
|
149
|
+
filename,
|
|
150
|
+
mime_type: mimeType,
|
|
151
|
+
size_bytes: sizeBytes,
|
|
152
|
+
},
|
|
153
|
+
}));
|
|
154
|
+
blocks.push(renderObject({ saved: outPath }));
|
|
155
|
+
const suggestions = [];
|
|
156
|
+
if (mimeType === "application/pdf") {
|
|
157
|
+
suggestions.push(`PDF saved — \`pdftotext "${basename(outPath)}" -\` to extract text`);
|
|
158
|
+
}
|
|
159
|
+
else if (mimeType.startsWith("image/")) {
|
|
160
|
+
suggestions.push(`Image saved — \`open "${outPath}"\` to view`);
|
|
161
|
+
}
|
|
162
|
+
else if (mimeType.startsWith("text/")) {
|
|
163
|
+
suggestions.push(`Text file saved — \`cat "${outPath}"\``);
|
|
164
|
+
}
|
|
165
|
+
else if (mimeType ===
|
|
166
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
|
|
167
|
+
suggestions.push(`.docx saved — extract with \`pandoc "${basename(outPath)}" -t plain\``);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
suggestions.push(`Inspect with \`file "${outPath}"\` to identify the format`);
|
|
171
|
+
}
|
|
172
|
+
if (filename.startsWith("attachment-")) {
|
|
173
|
+
suggestions.push(`Could not match this attachment to a filename in the message — pass \`--out <path>\` to name the saved file`);
|
|
174
|
+
}
|
|
175
|
+
else if (ambiguous) {
|
|
176
|
+
suggestions.push(`Multiple attachments in this message share the same size — filename above is a best-guess; pass \`--out <path>\` to name it explicitly if wrong`);
|
|
177
|
+
}
|
|
178
|
+
blocks.push(renderHelp(suggestions));
|
|
179
|
+
return joinBlocks(...blocks);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/commands/gmail/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LABELS_HELP = "usage: gws-axi gmail labels [flags]\nflags[2]:\n --type <kind> Filter by label type: user | system | all (default: all)\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi gmail labels\n gws-axi gmail labels --type user\noutput:\n A `labels[N]{id,name,type,threads_total,threads_unread,messages_total,messages_unread}`\n table. Use any `name` value with `gws-axi gmail search --in <name>` to\n filter by that label.\nnotes:\n System labels (INBOX, SENT, DRAFT, STARRED, UNREAD, TRASH, SPAM, and\n CATEGORY_* auto-filters) are always present; user labels are whatever\n you've created. `threads_unread` on INBOX is a useful at-a-glance\n \"how many unread threads do I have\" metric.\n";
|
|
2
|
+
export declare function gmailLabelsCommand(account: string, args: string[]): Promise<string>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { gmailClient, translateGoogleError } from "../../google/client.js";
|
|
2
|
+
import { field, renderListResponse, } from "../../output/index.js";
|
|
3
|
+
export const LABELS_HELP = `usage: gws-axi gmail labels [flags]
|
|
4
|
+
flags[2]:
|
|
5
|
+
--type <kind> Filter by label type: user | system | all (default: all)
|
|
6
|
+
--account <email> Account override when 2+ are configured
|
|
7
|
+
examples:
|
|
8
|
+
gws-axi gmail labels
|
|
9
|
+
gws-axi gmail labels --type user
|
|
10
|
+
output:
|
|
11
|
+
A \`labels[N]{id,name,type,threads_total,threads_unread,messages_total,messages_unread}\`
|
|
12
|
+
table. Use any \`name\` value with \`gws-axi gmail search --in <name>\` to
|
|
13
|
+
filter by that label.
|
|
14
|
+
notes:
|
|
15
|
+
System labels (INBOX, SENT, DRAFT, STARRED, UNREAD, TRASH, SPAM, and
|
|
16
|
+
CATEGORY_* auto-filters) are always present; user labels are whatever
|
|
17
|
+
you've created. \`threads_unread\` on INBOX is a useful at-a-glance
|
|
18
|
+
"how many unread threads do I have" metric.
|
|
19
|
+
`;
|
|
20
|
+
function parseFlags(args) {
|
|
21
|
+
let type = "all";
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
const next = args[i + 1];
|
|
25
|
+
if (arg === "--type" && next) {
|
|
26
|
+
if (next === "user" || next === "system" || next === "all") {
|
|
27
|
+
type = next;
|
|
28
|
+
}
|
|
29
|
+
i++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { type };
|
|
33
|
+
}
|
|
34
|
+
function labelSchema() {
|
|
35
|
+
return [
|
|
36
|
+
field("id"),
|
|
37
|
+
field("name"),
|
|
38
|
+
field("type"),
|
|
39
|
+
field("threads_total"),
|
|
40
|
+
field("threads_unread"),
|
|
41
|
+
field("messages_total"),
|
|
42
|
+
field("messages_unread"),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
export async function gmailLabelsCommand(account, args) {
|
|
46
|
+
const flags = parseFlags(args);
|
|
47
|
+
const api = await gmailClient(account);
|
|
48
|
+
let data;
|
|
49
|
+
try {
|
|
50
|
+
// labels.list returns only id/name/type/messageListVisibility/
|
|
51
|
+
// labelListVisibility by default. We need to issue per-label get calls
|
|
52
|
+
// to pick up the counts (messagesTotal, threadsUnread, etc.).
|
|
53
|
+
const res = await api.users.labels.list({ userId: "me" });
|
|
54
|
+
data = res.data;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
throw translateGoogleError(err, {
|
|
58
|
+
account,
|
|
59
|
+
operation: "gmail.labels.list",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const all = data.labels ?? [];
|
|
63
|
+
const filtered = all.filter((l) => {
|
|
64
|
+
if (flags.type === "all")
|
|
65
|
+
return true;
|
|
66
|
+
return l.type === flags.type;
|
|
67
|
+
});
|
|
68
|
+
// Fetch full label details (counts) in parallel. Gmail allows plenty of
|
|
69
|
+
// RPS for this — label inventories are typically small.
|
|
70
|
+
const full = await Promise.all(filtered.map((l) => api.users.labels
|
|
71
|
+
.get({ userId: "me", id: l.id ?? "" })
|
|
72
|
+
.then((r) => r.data)
|
|
73
|
+
.catch(() => l)));
|
|
74
|
+
const rows = full.map((l) => ({
|
|
75
|
+
id: l.id ?? "",
|
|
76
|
+
name: l.name ?? "",
|
|
77
|
+
type: l.type ?? "",
|
|
78
|
+
threads_total: l.threadsTotal ?? 0,
|
|
79
|
+
threads_unread: l.threadsUnread ?? 0,
|
|
80
|
+
messages_total: l.messagesTotal ?? 0,
|
|
81
|
+
messages_unread: l.messagesUnread ?? 0,
|
|
82
|
+
}));
|
|
83
|
+
// Sort: system first (INBOX at the very top), then user labels alpha.
|
|
84
|
+
rows.sort((a, b) => {
|
|
85
|
+
if (a.type !== b.type)
|
|
86
|
+
return a.type === "system" ? -1 : 1;
|
|
87
|
+
if (a.id === "INBOX")
|
|
88
|
+
return -1;
|
|
89
|
+
if (b.id === "INBOX")
|
|
90
|
+
return 1;
|
|
91
|
+
return a.name.localeCompare(b.name);
|
|
92
|
+
});
|
|
93
|
+
const suggestions = [];
|
|
94
|
+
if (rows.length > 0) {
|
|
95
|
+
const inbox = rows.find((r) => r.id === "INBOX");
|
|
96
|
+
if (inbox && inbox.threads_unread > 0) {
|
|
97
|
+
suggestions.push(`You have ${inbox.threads_unread} unread threads in INBOX — try \`gws-axi gmail search --query is:unread\``);
|
|
98
|
+
}
|
|
99
|
+
suggestions.push(`Filter search by label with \`gws-axi gmail search --in <name>\` (use any \`name\` value above)`);
|
|
100
|
+
}
|
|
101
|
+
return renderListResponse({
|
|
102
|
+
header: { account },
|
|
103
|
+
summary: { count: rows.length, filter: flags.type },
|
|
104
|
+
name: "labels",
|
|
105
|
+
items: rows,
|
|
106
|
+
schema: labelSchema(),
|
|
107
|
+
suggestions,
|
|
108
|
+
emptyMessage: `no ${flags.type === "all" ? "" : `${flags.type} `}labels found`,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../../../src/commands/gmail/labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { gmail_v1 } from "googleapis";
|
|
2
|
+
export interface ParsedAddress {
|
|
3
|
+
name: string;
|
|
4
|
+
address: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Attachment {
|
|
7
|
+
filename: string;
|
|
8
|
+
mime_type: string;
|
|
9
|
+
size_bytes: number;
|
|
10
|
+
attachment_id: string;
|
|
11
|
+
part_id: string;
|
|
12
|
+
}
|
|
13
|
+
export interface MessageBody {
|
|
14
|
+
content: string;
|
|
15
|
+
source: "plain" | "html" | "empty";
|
|
16
|
+
}
|
|
17
|
+
export interface ParsedMessage {
|
|
18
|
+
headers: Map<string, string>;
|
|
19
|
+
body: MessageBody;
|
|
20
|
+
attachments: Attachment[];
|
|
21
|
+
inline_image_count: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseMessage(msg: gmail_v1.Schema$Message): ParsedMessage;
|
|
24
|
+
/**
|
|
25
|
+
* Parse an RFC 5322 address header (From / To / Cc / Bcc) into a list of
|
|
26
|
+
* `{ name, address }` records. Uses addressparser so display names with
|
|
27
|
+
* commas (e.g., "Doe, John" <j@example.com>) are handled correctly — a
|
|
28
|
+
* naive split on `,` would produce four bogus addresses.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseAddresses(headers: Map<string, string>, name: string): ParsedAddress[];
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import addressparser from "addressparser";
|
|
2
|
+
import TurndownService from "turndown";
|
|
3
|
+
const turndown = new TurndownService({
|
|
4
|
+
headingStyle: "atx",
|
|
5
|
+
codeBlockStyle: "fenced",
|
|
6
|
+
bulletListMarker: "-",
|
|
7
|
+
});
|
|
8
|
+
// Drop style/script blocks entirely rather than leaking their contents as
|
|
9
|
+
// prose; Gmail HTML emails frequently carry inlined CSS as a <style> block
|
|
10
|
+
// inside <head> that turndown would otherwise emit.
|
|
11
|
+
turndown.remove(["style", "script", "head"]);
|
|
12
|
+
export function parseMessage(msg) {
|
|
13
|
+
const headers = new Map();
|
|
14
|
+
for (const h of msg.payload?.headers ?? []) {
|
|
15
|
+
if (h.name && h.value !== undefined && h.value !== null) {
|
|
16
|
+
headers.set(h.name.toLowerCase(), h.value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const textParts = [];
|
|
20
|
+
const attachments = [];
|
|
21
|
+
const stats = { inline_image_count: 0 };
|
|
22
|
+
collectParts(msg.payload, textParts, attachments, stats);
|
|
23
|
+
// Prefer text/plain when both exist. Gmail almost always ships both in
|
|
24
|
+
// multipart/alternative for modern mail; fall back to turndown on
|
|
25
|
+
// text/html only when no plain version exists.
|
|
26
|
+
const plain = textParts.find((p) => p.mimeType === "text/plain");
|
|
27
|
+
const html = textParts.find((p) => p.mimeType === "text/html");
|
|
28
|
+
let body;
|
|
29
|
+
if (plain) {
|
|
30
|
+
body = { content: plain.data, source: "plain" };
|
|
31
|
+
}
|
|
32
|
+
else if (html) {
|
|
33
|
+
body = { content: turndown.turndown(html.data), source: "html" };
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
body = { content: "", source: "empty" };
|
|
37
|
+
}
|
|
38
|
+
return { headers, body, attachments, inline_image_count: stats.inline_image_count };
|
|
39
|
+
}
|
|
40
|
+
function partHeader(part, name) {
|
|
41
|
+
const lower = name.toLowerCase();
|
|
42
|
+
for (const h of part.headers ?? []) {
|
|
43
|
+
if (h.name?.toLowerCase() === lower)
|
|
44
|
+
return h.value ?? undefined;
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
function isInlineDisposition(part) {
|
|
49
|
+
// RFC 2183: Content-Disposition: inline [; filename="..."]
|
|
50
|
+
// Gmail also sets Content-ID on inline parts (referenced from HTML via
|
|
51
|
+
// `src="cid:..."`). Either signal treats the part as embedded rather
|
|
52
|
+
// than a user-facing attachment.
|
|
53
|
+
const disp = partHeader(part, "Content-Disposition")?.toLowerCase() ?? "";
|
|
54
|
+
if (disp.startsWith("inline"))
|
|
55
|
+
return true;
|
|
56
|
+
if (partHeader(part, "Content-ID"))
|
|
57
|
+
return true;
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
function collectParts(part, textParts, attachments, stats) {
|
|
61
|
+
if (!part)
|
|
62
|
+
return;
|
|
63
|
+
const mime = part.mimeType ?? "";
|
|
64
|
+
const filename = part.filename;
|
|
65
|
+
const bodyData = part.body?.data;
|
|
66
|
+
const attachmentId = part.body?.attachmentId;
|
|
67
|
+
// Anything with a filename is a binary part. Classify as attachment vs
|
|
68
|
+
// inline via Content-Disposition / Content-ID headers.
|
|
69
|
+
if (filename && filename.length > 0) {
|
|
70
|
+
if (isInlineDisposition(part)) {
|
|
71
|
+
stats.inline_image_count += 1;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (attachmentId) {
|
|
75
|
+
attachments.push({
|
|
76
|
+
filename,
|
|
77
|
+
mime_type: mime,
|
|
78
|
+
size_bytes: part.body?.size ?? 0,
|
|
79
|
+
attachment_id: attachmentId,
|
|
80
|
+
part_id: part.partId ?? "",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Container parts: recurse into children.
|
|
86
|
+
if (mime.startsWith("multipart/") && part.parts?.length) {
|
|
87
|
+
for (const child of part.parts) {
|
|
88
|
+
collectParts(child, textParts, attachments, stats);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Leaf text parts: decode and stash.
|
|
93
|
+
if ((mime === "text/plain" || mime === "text/html") && bodyData) {
|
|
94
|
+
const charset = parseCharset(partHeader(part, "Content-Type"));
|
|
95
|
+
textParts.push({ mimeType: mime, data: decodeBase64Url(bodyData, charset) });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function decodeBase64Url(data, charset) {
|
|
99
|
+
// Node 22 natively understands base64url — no manual -_/+/ swap needed.
|
|
100
|
+
return Buffer.from(data, "base64url").toString(charset);
|
|
101
|
+
}
|
|
102
|
+
// Map a declared charset string to a Node-supported encoding. Node's
|
|
103
|
+
// Buffer supports: utf8, utf-8, utf16le, latin1, ascii, base64, base64url,
|
|
104
|
+
// hex, ucs-2 — so we can handle the mainstream mail charsets natively.
|
|
105
|
+
// Windows-1252 and other legacy encodings would need iconv-lite; we fall
|
|
106
|
+
// back to utf-8 for those and note it's a lossy best-effort.
|
|
107
|
+
function parseCharset(contentType) {
|
|
108
|
+
if (!contentType)
|
|
109
|
+
return "utf8";
|
|
110
|
+
const match = /charset\s*=\s*"?([^";\s]+)/i.exec(contentType);
|
|
111
|
+
if (!match)
|
|
112
|
+
return "utf8";
|
|
113
|
+
const declared = match[1].toLowerCase();
|
|
114
|
+
switch (declared) {
|
|
115
|
+
case "utf-8":
|
|
116
|
+
case "utf8":
|
|
117
|
+
return "utf8";
|
|
118
|
+
case "us-ascii":
|
|
119
|
+
case "ascii":
|
|
120
|
+
return "ascii";
|
|
121
|
+
case "iso-8859-1":
|
|
122
|
+
case "latin1":
|
|
123
|
+
case "latin-1":
|
|
124
|
+
return "latin1";
|
|
125
|
+
case "utf-16":
|
|
126
|
+
case "utf-16le":
|
|
127
|
+
case "utf16le":
|
|
128
|
+
return "utf16le";
|
|
129
|
+
default:
|
|
130
|
+
// Unknown (e.g., windows-1252, iso-8859-2) — default to utf-8.
|
|
131
|
+
// Mojibake is possible for non-UTF-8 mail in these rarer encodings.
|
|
132
|
+
return "utf8";
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Parse an RFC 5322 address header (From / To / Cc / Bcc) into a list of
|
|
137
|
+
* `{ name, address }` records. Uses addressparser so display names with
|
|
138
|
+
* commas (e.g., "Doe, John" <j@example.com>) are handled correctly — a
|
|
139
|
+
* naive split on `,` would produce four bogus addresses.
|
|
140
|
+
*/
|
|
141
|
+
export function parseAddresses(headers, name) {
|
|
142
|
+
const raw = headers.get(name.toLowerCase());
|
|
143
|
+
if (!raw)
|
|
144
|
+
return [];
|
|
145
|
+
return addressparser(raw).map((a) => ({
|
|
146
|
+
name: a.name ?? "",
|
|
147
|
+
address: a.address ?? "",
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=mime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../../../src/commands/gmail/mime.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,eAAe,CAAC;AAE1C,OAAO,eAAe,MAAM,UAAU,CAAC;AAkCvC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;IACnC,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,GAAG;CACtB,CAAC,CAAC;AACH,0EAA0E;AAC1E,2EAA2E;AAC3E,oDAAoD;AACpD,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7C,MAAM,UAAU,YAAY,CAAC,GAA4B;IACvD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAA8C,EAAE,CAAC;IAChE,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACxC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAEzD,uEAAuE;IACvE,kEAAkE;IAClE,+CAA+C;IAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;IAE/D,IAAI,IAAiB,CAAC;IACtB,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClD,CAAC;SAAM,IAAI,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,UAAU,CACjB,IAAiC,EACjC,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;IACnE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAiC;IAC5D,2DAA2D;IAC3D,uEAAuE;IACvE,qEAAqE;IACrE,iCAAiC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CACnB,IAA6C,EAC7C,SAAoD,EACpD,WAAyB,EACzB,KAAqC;IAErC,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IAE7C,uEAAuE;IACvE,uDAAuD;IACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC;gBACf,QAAQ;gBACR,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;gBAChC,aAAa,EAAE,YAAY;gBAC3B,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,CAAC,IAAI,QAAQ,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,OAAuB;IAC5D,wEAAwE;IACxE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,qEAAqE;AACrE,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,6DAA6D;AAC7D,SAAS,YAAY,CAAC,WAA+B;IACnD,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAChC,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,YAAY,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB;YACE,+DAA+D;YAC/D,oEAAoE;YACpE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA4B,EAC5B,IAAY;IAEZ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;KACzB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|