@aligndottech/cli 0.1.2 → 0.1.4
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 +151 -54
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +125 -0
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +76 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import/confluence.d.ts.map +1 -1
- package/dist/commands/import/confluence.js +25 -6
- package/dist/commands/import/confluence.js.map +1 -1
- package/dist/commands/import/git.js +1 -1
- package/dist/commands/import/jira.d.ts.map +1 -1
- package/dist/commands/import/jira.js +26 -6
- package/dist/commands/import/jira.js.map +1 -1
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/local.d.ts +3 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +71 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +5 -32
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +34 -12
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +609 -163
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +46 -4
- package/dist/commands/why.js.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts +3 -0
- package/dist/lib/advisory-dedup.d.ts.map +1 -0
- package/dist/lib/advisory-dedup.js +44 -0
- package/dist/lib/advisory-dedup.js.map +1 -0
- package/dist/lib/agent-rules.d.ts +10 -0
- package/dist/lib/agent-rules.d.ts.map +1 -0
- package/dist/lib/agent-rules.js +137 -0
- package/dist/lib/agent-rules.js.map +1 -0
- package/dist/lib/cli-oauth.d.ts +11 -0
- package/dist/lib/cli-oauth.d.ts.map +1 -0
- package/dist/lib/cli-oauth.js +71 -0
- package/dist/lib/cli-oauth.js.map +1 -0
- package/dist/lib/config.d.ts +10 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +36 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +5 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +9 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/fetchers/confluence.d.ts +4 -2
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js +68 -12
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +2 -0
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +2 -0
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +4 -2
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js +30 -15
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js +6 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js +29 -0
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js +26 -0
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js +3 -0
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js +5 -0
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/format-date.d.ts +7 -0
- package/dist/lib/format-date.d.ts.map +1 -0
- package/dist/lib/format-date.js +26 -0
- package/dist/lib/format-date.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +27 -2
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +39 -3
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +33 -16
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/hook-payload.d.ts +20 -0
- package/dist/lib/hook-payload.d.ts.map +1 -0
- package/dist/lib/hook-payload.js +30 -0
- package/dist/lib/hook-payload.js.map +1 -0
- package/dist/lib/local-db.d.ts +51 -0
- package/dist/lib/local-db.d.ts.map +1 -0
- package/dist/lib/local-db.js +89 -0
- package/dist/lib/local-db.js.map +1 -0
- package/dist/lib/local-embeddings.d.ts +3 -0
- package/dist/lib/local-embeddings.d.ts.map +1 -0
- package/dist/lib/local-embeddings.js +20 -0
- package/dist/lib/local-embeddings.js.map +1 -0
- package/dist/lib/local-gateway-client.d.ts +98 -0
- package/dist/lib/local-gateway-client.d.ts.map +1 -0
- package/dist/lib/local-gateway-client.js +151 -0
- package/dist/lib/local-gateway-client.js.map +1 -0
- package/dist/lib/local-mode.d.ts +7 -0
- package/dist/lib/local-mode.d.ts.map +1 -0
- package/dist/lib/local-mode.js +39 -0
- package/dist/lib/local-mode.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +14 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -0
- package/dist/lib/local-relationship-classifier.js +100 -0
- package/dist/lib/local-relationship-classifier.js.map +1 -0
- package/dist/lib/login-flow.d.ts +5 -0
- package/dist/lib/login-flow.d.ts.map +1 -0
- package/dist/lib/login-flow.js +64 -0
- package/dist/lib/login-flow.js.map +1 -0
- package/dist/lib/personal-import.d.ts +4 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +133 -27
- package/dist/lib/personal-import.js.map +1 -1
- package/package.json +31 -12
- package/dist/lib/why-normalise.d.ts +0 -2
- package/dist/lib/why-normalise.d.ts.map +0 -1
- package/dist/lib/why-normalise.js +0 -39
- package/dist/lib/why-normalise.js.map +0 -1
package/dist/lib/config.js
CHANGED
|
@@ -7,7 +7,7 @@ const DEFAULTS = {
|
|
|
7
7
|
export function createConfigStore() {
|
|
8
8
|
const store = new Conf({
|
|
9
9
|
projectName: 'align-cli',
|
|
10
|
-
defaults: { environments: {}, defaultEnv: 'prod' },
|
|
10
|
+
defaults: { environments: {}, defaultEnv: 'prod', connectorTokens: {} },
|
|
11
11
|
});
|
|
12
12
|
const getEnvs = () => store.get('environments');
|
|
13
13
|
return {
|
|
@@ -39,6 +39,41 @@ export function createConfigStore() {
|
|
|
39
39
|
},
|
|
40
40
|
setDefaultEnv(env) { store.set('defaultEnv', env); },
|
|
41
41
|
getDefaultEnv() { return store.get('defaultEnv'); },
|
|
42
|
+
getConnectorToken(env, connectorKey) {
|
|
43
|
+
const tokens = store.get('connectorTokens');
|
|
44
|
+
return tokens[`${env}:${connectorKey}`] ?? null;
|
|
45
|
+
},
|
|
46
|
+
setConnectorToken(env, connectorKey, token) {
|
|
47
|
+
const tokens = store.get('connectorTokens');
|
|
48
|
+
store.set('connectorTokens', { ...tokens, [`${env}:${connectorKey}`]: token });
|
|
49
|
+
},
|
|
50
|
+
getConnectorCloudId(env, connectorKey) {
|
|
51
|
+
const tokens = store.get('connectorTokens');
|
|
52
|
+
return tokens[`${env}:${connectorKey}:cloudId`] ?? null;
|
|
53
|
+
},
|
|
54
|
+
setConnectorCloudId(env, connectorKey, cloudId) {
|
|
55
|
+
const tokens = store.get('connectorTokens');
|
|
56
|
+
store.set('connectorTokens', { ...tokens, [`${env}:${connectorKey}:cloudId`]: cloudId });
|
|
57
|
+
},
|
|
58
|
+
getConnectorSiteBase(env, connectorKey) {
|
|
59
|
+
const tokens = store.get('connectorTokens');
|
|
60
|
+
return tokens[`${env}:${connectorKey}:siteBase`] ?? null;
|
|
61
|
+
},
|
|
62
|
+
setConnectorSiteBase(env, connectorKey, siteBase) {
|
|
63
|
+
const tokens = store.get('connectorTokens');
|
|
64
|
+
store.set('connectorTokens', { ...tokens, [`${env}:${connectorKey}:siteBase`]: siteBase });
|
|
65
|
+
},
|
|
66
|
+
setLocalMode(dbPath) {
|
|
67
|
+
const envs = getEnvs();
|
|
68
|
+
store.set('environments', { ...envs, local: { ...(envs['local'] ?? {}), mode: 'local-embedded', localDbPath: dbPath } });
|
|
69
|
+
},
|
|
70
|
+
clearLocalMode() {
|
|
71
|
+
const envs = getEnvs();
|
|
72
|
+
const updated = { ...(envs['local'] ?? {}) };
|
|
73
|
+
delete updated.localDbPath;
|
|
74
|
+
updated.mode = 'demo';
|
|
75
|
+
store.set('environments', { ...envs, local: updated });
|
|
76
|
+
},
|
|
42
77
|
clear(env) {
|
|
43
78
|
const envs = getEnvs();
|
|
44
79
|
const { [env]: _, ...rest } = envs;
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;aACb,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACb;IAA5B,YAA4B,MAAc;QACxC,KAAK,CAAC,GAAG,MAAM,2DAA2D,CAAC,CAAC;QADlD,WAAM,GAAN,MAAM,CAAQ;QAExC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { PersonalImportItem } from '../personal-import.js';
|
|
2
2
|
export declare function fetchConfluenceItems(opts: {
|
|
3
|
-
email: string;
|
|
4
3
|
token: string;
|
|
5
|
-
|
|
4
|
+
cloudId?: string;
|
|
5
|
+
siteBase?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
domain?: string;
|
|
6
8
|
limit?: number;
|
|
7
9
|
}): Promise<PersonalImportItem[]>;
|
|
8
10
|
//# sourceMappingURL=confluence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmChE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAuDhC"}
|
|
@@ -1,27 +1,83 @@
|
|
|
1
|
+
import { AuthExpiredError } from '../errors.js';
|
|
1
2
|
function stripHtml(html) {
|
|
2
3
|
return html.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
|
|
3
4
|
}
|
|
5
|
+
/** Resolve a Confluence accountId to a display name (cached). Degrades to undefined
|
|
6
|
+
* if the token lacks read:confluence-user or the lookup fails. */
|
|
7
|
+
function makeConfluenceUserResolver(base, headers) {
|
|
8
|
+
const cache = new Map();
|
|
9
|
+
return async (accountId) => {
|
|
10
|
+
if (!accountId)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (cache.has(accountId))
|
|
13
|
+
return cache.get(accountId) ?? undefined;
|
|
14
|
+
try {
|
|
15
|
+
const res = await fetch(`${base}/rest/api/user?accountId=${encodeURIComponent(accountId)}`, { headers });
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
cache.set(accountId, null);
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const u = (await res.json());
|
|
21
|
+
const name = u.displayName || u.publicName;
|
|
22
|
+
const resolved = name ? { name, ...(u.email ? { email: u.email } : {}) } : null;
|
|
23
|
+
cache.set(accountId, resolved);
|
|
24
|
+
return resolved ?? undefined;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
cache.set(accountId, null);
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
4
32
|
export async function fetchConfluenceItems(opts) {
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
33
|
+
const isOAuth = Boolean(opts.cloudId);
|
|
34
|
+
const base = isOAuth
|
|
35
|
+
? `https://api.atlassian.com/ex/confluence/${opts.cloudId}/wiki`
|
|
36
|
+
: `https://${opts.domain}/wiki`;
|
|
37
|
+
const headers = isOAuth
|
|
38
|
+
? { Authorization: `Bearer ${opts.token}`, Accept: 'application/json' }
|
|
39
|
+
: { Authorization: `Basic ${Buffer.from(`${opts.email}:${opts.token}`).toString('base64')}`, Accept: 'application/json' };
|
|
8
40
|
const limit = opts.limit ?? 50;
|
|
9
|
-
|
|
10
|
-
|
|
41
|
+
// Confluence API v2. The classic v1 (/rest/api/content/search) rejects tokens
|
|
42
|
+
// granted only the granular *:confluence OAuth scopes with 401 "scope does not
|
|
43
|
+
// match"; v2 works with them. v2 has no creator=currentUser() filter, so this
|
|
44
|
+
// imports the pages the token can read (fine for a read-only personal import).
|
|
45
|
+
const url = `${base}/api/v2/pages?limit=${limit}&body-format=storage`;
|
|
11
46
|
const res = await fetch(url, { headers });
|
|
12
|
-
if (!res.ok)
|
|
13
|
-
|
|
47
|
+
if (!res.ok) {
|
|
48
|
+
// 401 = token genuinely expired/revoked -> re-auth helps. 403 = the token
|
|
49
|
+
// lacks Confluence scopes or this site has no Confluence -> re-auth will NOT
|
|
50
|
+
// help, so don't raise AuthExpiredError (which triggers a reconnect loop).
|
|
51
|
+
if (res.status === 401)
|
|
52
|
+
throw new AuthExpiredError('Confluence');
|
|
53
|
+
if (res.status === 403) {
|
|
54
|
+
throw new Error('Confluence access denied (403): the token lacks Confluence scopes or this site has no Confluence. ' +
|
|
55
|
+
"Re-auth won't help - check the Atlassian app's Confluence API permissions (or skip Confluence).");
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`Confluence API failed (${res.status}). ${isOAuth ? 'Check your OAuth token.' : 'Check your email, token, and domain.'}`);
|
|
58
|
+
}
|
|
14
59
|
const data = await res.json();
|
|
15
|
-
|
|
60
|
+
// v2 page _links.webui is relative; prefer the response's top-level base
|
|
61
|
+
// (e.g. https://company.atlassian.net/wiki), else derive a human site URL.
|
|
62
|
+
const humanBase = isOAuth ? (opts.siteBase ?? `https://api.atlassian.com/ex/confluence/${opts.cloudId}`) : `https://${opts.domain}`;
|
|
63
|
+
const linkBase = data._links?.base ?? `${humanBase}/wiki`;
|
|
64
|
+
const resolveUser = makeConfluenceUserResolver(base, headers);
|
|
65
|
+
const items = [];
|
|
66
|
+
for (const page of data.results ?? []) {
|
|
16
67
|
const bodyHtml = page.body?.storage?.value ?? '';
|
|
17
68
|
const bodyText = stripHtml(bodyHtml).slice(0, 2000);
|
|
18
|
-
const
|
|
19
|
-
|
|
69
|
+
const webui = page._links?.webui ?? '';
|
|
70
|
+
const pageUrl = webui.startsWith('http') ? webui : `${linkBase}${webui}`;
|
|
71
|
+
// Who to talk to (ALI-119): the page author (resolved from authorId).
|
|
72
|
+
const author = await resolveUser(page.authorId);
|
|
73
|
+
items.push({
|
|
20
74
|
source_url: pageUrl,
|
|
21
75
|
platform: 'confluence',
|
|
22
76
|
raw_text: [page.title, bodyText].filter(Boolean).join('\n\n'),
|
|
23
77
|
title: page.title,
|
|
24
|
-
|
|
25
|
-
|
|
78
|
+
...(author ? { author } : {}),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return items;
|
|
26
82
|
}
|
|
27
83
|
//# sourceMappingURL=confluence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAc1F"}
|
package/dist/lib/fetchers/git.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAc;YACxB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAc;YACxB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,+CAA+C;YAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqDhC"}
|
|
@@ -20,6 +20,7 @@ export async function fetchGitHubItems(opts) {
|
|
|
20
20
|
platform: 'github',
|
|
21
21
|
raw_text: `${pr.title}\n\n${pr.body ?? ''}\n\nStatus: ${pr.state}\nRepo: ${repo}`.trim(),
|
|
22
22
|
title: pr.title,
|
|
23
|
+
...(pr.user ? { author: { name: pr.user.login, handle: pr.user.login, url: pr.user.html_url } } : {}),
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -34,6 +35,7 @@ export async function fetchGitHubItems(opts) {
|
|
|
34
35
|
platform: 'github',
|
|
35
36
|
raw_text: `${issue.title}\n\n${issue.body ?? ''}\n\nStatus: ${issue.state}`.trim(),
|
|
36
37
|
title: issue.title,
|
|
38
|
+
...(issue.user ? { author: { name: issue.user.login, handle: issue.user.login, url: issue.user.html_url } } : {}),
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAGtC;IACC,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;QACrC,MAAM,EAAE,6BAA6B;QACrC,sBAAsB,EAAE,YAAY;KACrC,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,MAAM,uCAAuC,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAuB,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,KAAK,CACvB,iDAAiD,IAAI,CAAC,KAAK,4CAA4C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAC5H,EAAE,OAAO,EAAE,CACZ,CAAC;IACF,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { PersonalImportItem } from '../personal-import.js';
|
|
2
2
|
export declare function fetchJiraItems(opts: {
|
|
3
|
-
email: string;
|
|
4
3
|
token: string;
|
|
5
|
-
|
|
4
|
+
cloudId?: string;
|
|
5
|
+
siteBase?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
domain?: string;
|
|
6
8
|
limit?: number;
|
|
7
9
|
}): Promise<PersonalImportItem[]>;
|
|
8
10
|
//# sourceMappingURL=jira.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAsBhE,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAsDhC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AuthExpiredError } from '../errors.js';
|
|
1
2
|
function extractAdfText(adf) {
|
|
2
3
|
if (!adf)
|
|
3
4
|
return '';
|
|
@@ -7,38 +8,52 @@ function extractAdfText(adf) {
|
|
|
7
8
|
.trim();
|
|
8
9
|
}
|
|
9
10
|
export async function fetchJiraItems(opts) {
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const isOAuth = Boolean(opts.cloudId);
|
|
12
|
+
const base = isOAuth
|
|
13
|
+
? `https://api.atlassian.com/ex/jira/${opts.cloudId}`
|
|
14
|
+
: `https://${opts.domain}`;
|
|
15
|
+
const headers = isOAuth
|
|
16
|
+
? { Authorization: `Bearer ${opts.token}`, Accept: 'application/json' }
|
|
17
|
+
: { Authorization: `Basic ${Buffer.from(`${opts.email}:${opts.token}`).toString('base64')}`, Accept: 'application/json' };
|
|
13
18
|
const limit = opts.limit ?? 100;
|
|
14
19
|
const jql = 'assignee = currentUser() OR reporter = currentUser() ORDER BY updated DESC';
|
|
15
|
-
const
|
|
16
|
-
|
|
20
|
+
const res = await fetch(`${base}/rest/api/3/search/jql`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: { ...headers, 'Content-Type': 'application/json' },
|
|
23
|
+
body: JSON.stringify({ jql, maxResults: limit, fields: ['summary', 'description', 'status', 'key', 'reporter'] }),
|
|
24
|
+
});
|
|
17
25
|
if (!res.ok) {
|
|
26
|
+
// 401 = expired/revoked (re-auth helps). 403 = lacks Jira scopes / no access
|
|
27
|
+
// (re-auth won't help) - don't trigger a reconnect loop.
|
|
28
|
+
if (res.status === 401)
|
|
29
|
+
throw new AuthExpiredError('Jira');
|
|
30
|
+
if (res.status === 403) {
|
|
31
|
+
throw new Error("Jira access denied (403): the token lacks Jira scopes or access. Re-auth won't help - " +
|
|
32
|
+
"check the Atlassian app's Jira API permissions.");
|
|
33
|
+
}
|
|
18
34
|
const text = await res.text();
|
|
19
35
|
throw new Error(`Jira API failed (${res.status}): ${text.slice(0, 200)}`);
|
|
20
36
|
}
|
|
21
37
|
const data = await res.json();
|
|
38
|
+
// For OAuth mode use the human site base URL (e.g. https://company.atlassian.net)
|
|
39
|
+
const browseBase = isOAuth
|
|
40
|
+
? (opts.siteBase ?? `https://api.atlassian.com/ex/jira/${opts.cloudId}`)
|
|
41
|
+
: base;
|
|
22
42
|
return data.issues.map(issue => {
|
|
23
|
-
const comments = (issue.fields.comment?.comments ?? [])
|
|
24
|
-
.slice(-3)
|
|
25
|
-
.map(c => {
|
|
26
|
-
const text = extractAdfText(c.body);
|
|
27
|
-
return `${c.author?.displayName ?? 'Unknown'}: ${text}`;
|
|
28
|
-
})
|
|
29
|
-
.filter(c => c.trim().length > 0)
|
|
30
|
-
.join('\n');
|
|
31
43
|
const desc = extractAdfText(issue.fields.description);
|
|
32
44
|
return {
|
|
33
|
-
source_url: `${
|
|
45
|
+
source_url: `${browseBase}/browse/${issue.key}`,
|
|
34
46
|
platform: 'jira',
|
|
35
47
|
raw_text: [
|
|
36
48
|
`[${issue.key}] ${issue.fields.summary}`,
|
|
37
49
|
desc,
|
|
38
50
|
issue.fields.status?.name ? `Status: ${issue.fields.status.name}` : '',
|
|
39
|
-
comments ? `Comments:\n${comments}` : '',
|
|
40
51
|
].filter(Boolean).join('\n\n'),
|
|
41
52
|
title: `[${issue.key}] ${issue.fields.summary}`,
|
|
53
|
+
// Who to talk to (ALI-118): the issue reporter.
|
|
54
|
+
...(issue.fields.reporter?.displayName
|
|
55
|
+
? { author: { name: issue.fields.reporter.displayName, ...(issue.fields.reporter.emailAddress ? { email: issue.fields.reporter.emailAddress } : {}) } }
|
|
56
|
+
: {}),
|
|
42
57
|
};
|
|
43
58
|
});
|
|
44
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAehD,SAAS,cAAc,CAAC,GAAmF;IACzG,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SACxE,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAOpC;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO;QAClB,CAAC,CAAC,qCAAqC,IAAI,CAAC,OAAO,EAAE;QACrD,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA2B,OAAO;QAC7C,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvE,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAE5H,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,GAAG,GAAG,4EAA4E,CAAC;IAEzF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,wBAAwB,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC3D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;KAClH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,6EAA6E;QAC7E,yDAAyD;QACzD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,wFAAwF;gBACtF,iDAAiD,CACpD,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IAEzD,kFAAkF;IAClF,MAAM,UAAU,GAAG,OAAO;QACxB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,qCAAqC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC;IAET,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtD,OAAO;YACL,UAAU,EAAE,GAAG,UAAU,WAAW,KAAK,CAAC,GAAG,EAAE;YAC/C,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE;gBACR,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;gBACxC,IAAI;gBACJ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aACvE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/C,gDAAgD;YAChD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW;gBACpC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvJ,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiChE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2ChC"}
|
|
@@ -7,11 +7,12 @@ query PersonalIssues($first: Int!) {
|
|
|
7
7
|
id title description url
|
|
8
8
|
state { name }
|
|
9
9
|
team { name }
|
|
10
|
+
creator { name email }
|
|
10
11
|
comments { nodes { body user { name } } }
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
createdIssues(first: $first, orderBy: updatedAt) {
|
|
14
|
-
nodes { id title description url state { name } team { name } }
|
|
15
|
+
nodes { id title description url state { name } team { name } creator { name email } }
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
}`;
|
|
@@ -51,6 +52,10 @@ export async function fetchLinearItems(opts) {
|
|
|
51
52
|
comments ? `Comments:\n${comments}` : '',
|
|
52
53
|
].filter(Boolean).join('\n\n'),
|
|
53
54
|
title: issue.title,
|
|
55
|
+
// Who to talk to (ALI-118): the issue creator.
|
|
56
|
+
...(issue.creator?.name
|
|
57
|
+
? { author: { name: issue.creator.name, ...(issue.creator.email ? { email: issue.creator.email } : {}) } }
|
|
58
|
+
: {}),
|
|
54
59
|
});
|
|
55
60
|
}
|
|
56
61
|
return items.slice(0, limit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmDhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2ChC"}
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/** Resolve a Notion user id to a name (cached). Degrades to undefined on failure. */
|
|
2
|
+
function makeNotionUserResolver(headers) {
|
|
3
|
+
const cache = new Map();
|
|
4
|
+
return async (userId) => {
|
|
5
|
+
if (!userId)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (cache.has(userId))
|
|
8
|
+
return cache.get(userId) ?? undefined;
|
|
9
|
+
try {
|
|
10
|
+
const res = await fetch(`https://api.notion.com/v1/users/${userId}`, { headers });
|
|
11
|
+
if (!res.ok) {
|
|
12
|
+
cache.set(userId, null);
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const u = (await res.json());
|
|
16
|
+
const resolved = u.name ? { name: u.name, ...(u.person?.email ? { email: u.person.email } : {}) } : null;
|
|
17
|
+
cache.set(userId, resolved);
|
|
18
|
+
return resolved ?? undefined;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
cache.set(userId, null);
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
1
26
|
function extractPageTitle(page) {
|
|
2
27
|
return (page.properties?.title?.title?.[0]?.plain_text ??
|
|
3
28
|
page.properties?.Name?.title?.[0]?.plain_text ??
|
|
@@ -22,10 +47,13 @@ export async function fetchNotionItems(opts) {
|
|
|
22
47
|
if (!searchRes.ok)
|
|
23
48
|
throw new Error(`Notion API failed (${searchRes.status}). Check your integration token.`);
|
|
24
49
|
const data = await searchRes.json();
|
|
50
|
+
const resolveUser = makeNotionUserResolver(headers);
|
|
25
51
|
const items = [];
|
|
26
52
|
for (const page of data.results) {
|
|
27
53
|
const title = extractPageTitle(page);
|
|
28
54
|
const pageUrl = page.url ?? `https://notion.so/${page.id.replace(/-/g, '')}`;
|
|
55
|
+
// Who to talk to (ALI-119): the page creator.
|
|
56
|
+
const author = await resolveUser(page.created_by?.id);
|
|
29
57
|
let bodyText = '';
|
|
30
58
|
try {
|
|
31
59
|
const blocksRes = await fetch(`https://api.notion.com/v1/blocks/${page.id}/children?page_size=50`, { headers });
|
|
@@ -40,6 +68,7 @@ export async function fetchNotionItems(opts) {
|
|
|
40
68
|
platform: 'notion',
|
|
41
69
|
raw_text: [title, bodyText].filter(Boolean).join('\n\n').slice(0, 3000),
|
|
42
70
|
title,
|
|
71
|
+
...(author ? { author } : {}),
|
|
43
72
|
});
|
|
44
73
|
}
|
|
45
74
|
return items;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA4ChE,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAuDhC"}
|
|
@@ -8,6 +8,28 @@ async function slackGet(endpoint, token, params = {}) {
|
|
|
8
8
|
throw new Error(`Slack API error on ${endpoint}: ${data.error}`);
|
|
9
9
|
return data;
|
|
10
10
|
}
|
|
11
|
+
/** Resolve a Slack user id to a display name (cached - one users.info call per unique user). */
|
|
12
|
+
function makeUserResolver(token) {
|
|
13
|
+
const cache = new Map();
|
|
14
|
+
return async (userId) => {
|
|
15
|
+
if (!userId)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (cache.has(userId))
|
|
18
|
+
return cache.get(userId) ?? undefined;
|
|
19
|
+
try {
|
|
20
|
+
const data = await slackGet('users.info', token, { user: userId });
|
|
21
|
+
const u = (data.user ?? {});
|
|
22
|
+
const name = u.profile?.real_name || u.real_name || u.profile?.display_name || u.name || userId;
|
|
23
|
+
const resolved = { name, ...(u.name ? { handle: u.name } : {}), ...(u.profile?.email ? { email: u.profile.email } : {}) };
|
|
24
|
+
cache.set(userId, resolved);
|
|
25
|
+
return resolved;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
cache.set(userId, null); // don't retry a failed lookup
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
11
33
|
export async function fetchSlackItems(opts) {
|
|
12
34
|
const limit = opts.limit ?? 50;
|
|
13
35
|
const daysBack = opts.daysBack ?? 90;
|
|
@@ -19,6 +41,7 @@ export async function fetchSlackItems(opts) {
|
|
|
19
41
|
limit: '100',
|
|
20
42
|
});
|
|
21
43
|
const channels = chanData.channels ?? [];
|
|
44
|
+
const resolveUser = makeUserResolver(opts.token);
|
|
22
45
|
const items = [];
|
|
23
46
|
for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {
|
|
24
47
|
const channel = channels[channelIndex];
|
|
@@ -45,11 +68,14 @@ export async function fetchSlackItems(opts) {
|
|
|
45
68
|
});
|
|
46
69
|
const allMsgs = replies.messages ?? [];
|
|
47
70
|
const text = allMsgs.map(m => m.text ?? '').join('\n');
|
|
71
|
+
// Who to talk to (ALI-118): the thread starter (original poster).
|
|
72
|
+
const author = await resolveUser(allMsgs[0]?.user ?? thread.user);
|
|
48
73
|
items.push({
|
|
49
74
|
source_url: `https://slack.com/archives/${channel.id}/p${thread.ts.replace('.', '')}`,
|
|
50
75
|
platform: 'slack',
|
|
51
76
|
raw_text: `[#${channel.name}] Thread:\n${text}`,
|
|
52
77
|
title: (thread.text ?? `Thread in #${channel.name}`).slice(0, 80),
|
|
78
|
+
...(author ? { author } : {}),
|
|
53
79
|
});
|
|
54
80
|
}
|
|
55
81
|
catch { /* skip individual thread errors */ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,QAAQ,CAAC,QAAgB,EAAE,KAAa,EAAE,SAAiC,EAAE;IAC1F,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,yBAAyB,QAAQ,IAAI,EAAE,EAAE,EAAE;QACjE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,KAAK,IAAI,CAAC,KAAe,EAAE,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA0ChE,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0ChC"}
|
|
@@ -46,11 +46,14 @@ export async function fetchTeamsItems(opts) {
|
|
|
46
46
|
mainText,
|
|
47
47
|
...replyTexts,
|
|
48
48
|
].filter(Boolean).join('\n');
|
|
49
|
+
const fromName = msg.from?.user?.displayName;
|
|
49
50
|
items.push({
|
|
50
51
|
source_url: msg.webUrl ?? 'https://teams.microsoft.com',
|
|
51
52
|
platform: 'teams',
|
|
52
53
|
raw_text,
|
|
53
54
|
title: (msg.subject ?? mainText).slice(0, 80) || `Message in ${team.displayName}`,
|
|
55
|
+
// Who to talk to (ALI-118): the message author.
|
|
56
|
+
...(fromName ? { author: { name: fromName } } : {}),
|
|
54
57
|
});
|
|
55
58
|
}
|
|
56
59
|
}
|