@aligndottech/connector-core 0.5.0 → 0.6.1
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/fetchers/confluence.d.ts +2 -1
- package/dist/fetchers/confluence.d.ts.map +1 -1
- package/dist/fetchers/confluence.js +14 -9
- package/dist/fetchers/confluence.js.map +1 -1
- package/dist/fetchers/errors.d.ts +43 -5
- package/dist/fetchers/errors.d.ts.map +1 -1
- package/dist/fetchers/errors.js +115 -6
- package/dist/fetchers/errors.js.map +1 -1
- package/dist/fetchers/git.d.ts +2 -1
- package/dist/fetchers/git.d.ts.map +1 -1
- package/dist/fetchers/git.js +8 -1
- package/dist/fetchers/git.js.map +1 -1
- package/dist/fetchers/github.d.ts +2 -1
- package/dist/fetchers/github.d.ts.map +1 -1
- package/dist/fetchers/github.js +12 -2
- package/dist/fetchers/github.js.map +1 -1
- package/dist/fetchers/gitlab.d.ts +4 -2
- package/dist/fetchers/gitlab.d.ts.map +1 -1
- package/dist/fetchers/gitlab.js +35 -5
- package/dist/fetchers/gitlab.js.map +1 -1
- package/dist/fetchers/index.d.ts +1 -1
- package/dist/fetchers/index.d.ts.map +1 -1
- package/dist/fetchers/index.js +1 -1
- package/dist/fetchers/index.js.map +1 -1
- package/dist/fetchers/jira.d.ts +2 -1
- package/dist/fetchers/jira.d.ts.map +1 -1
- package/dist/fetchers/jira.js +14 -11
- package/dist/fetchers/jira.js.map +1 -1
- package/dist/fetchers/linear.d.ts +2 -1
- package/dist/fetchers/linear.d.ts.map +1 -1
- package/dist/fetchers/linear.js +22 -4
- package/dist/fetchers/linear.js.map +1 -1
- package/dist/fetchers/notion.d.ts +4 -1
- package/dist/fetchers/notion.d.ts.map +1 -1
- package/dist/fetchers/notion.js +64 -30
- package/dist/fetchers/notion.js.map +1 -1
- package/dist/fetchers/slack.d.ts +12 -3
- package/dist/fetchers/slack.d.ts.map +1 -1
- package/dist/fetchers/slack.js +232 -30
- package/dist/fetchers/slack.js.map +1 -1
- package/dist/fetchers/teams.d.ts +2 -1
- package/dist/fetchers/teams.d.ts.map +1 -1
- package/dist/fetchers/teams.js +21 -4
- package/dist/fetchers/teams.js.map +1 -1
- package/dist/fetchers/util/time.d.ts +15 -0
- package/dist/fetchers/util/time.d.ts.map +1 -0
- package/dist/fetchers/util/time.js +24 -0
- package/dist/fetchers/util/time.js.map +1 -0
- package/dist/fetchers/zoom.d.ts +6 -1
- package/dist/fetchers/zoom.d.ts.map +1 -1
- package/dist/fetchers/zoom.js +105 -35
- package/dist/fetchers/zoom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/fetcher.d.ts +54 -0
- package/dist/types/fetcher.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/fetchers/zoom.js
CHANGED
|
@@ -1,4 +1,31 @@
|
|
|
1
1
|
import { fetch } from 'undici';
|
|
2
|
+
import { toIsoOrUndefined } from './util/time.js';
|
|
3
|
+
import { providerError } from './errors.js';
|
|
4
|
+
// Zoom's documented page_size maximum for /users/me/recordings. 30 is the default,
|
|
5
|
+
// and before ALI-828 it was the whole read: one page of 30, whatever the caller
|
|
6
|
+
// asked for. Held constant across next_page_token requests, as Zoom requires.
|
|
7
|
+
const ZOOM_PAGE_MAX = 300;
|
|
8
|
+
// Zoom lists recordings for a from/to window at most a month wide, and with
|
|
9
|
+
// neither parameter it lists only the current day. So a read walks windows back
|
|
10
|
+
// through `daysBack`, newest first; a boundary day can appear in two windows,
|
|
11
|
+
// which is what the uuid dedupe below is for.
|
|
12
|
+
const ZOOM_WINDOW_DAYS = 30;
|
|
13
|
+
const DAY_MS = 86_400_000;
|
|
14
|
+
function isoDay(ms) {
|
|
15
|
+
return new Date(ms).toISOString().slice(0, 10);
|
|
16
|
+
}
|
|
17
|
+
/** Day windows covering the last `daysBack` days, newest first. */
|
|
18
|
+
function recordingWindows(now, daysBack) {
|
|
19
|
+
const windows = [];
|
|
20
|
+
let to = Math.floor(now / DAY_MS) * DAY_MS;
|
|
21
|
+
const oldest = to - daysBack * DAY_MS;
|
|
22
|
+
while (to > oldest) {
|
|
23
|
+
const from = Math.max(to - (ZOOM_WINDOW_DAYS - 1) * DAY_MS, oldest);
|
|
24
|
+
windows.push({ from: isoDay(from), to: isoDay(to) });
|
|
25
|
+
to = from - DAY_MS;
|
|
26
|
+
}
|
|
27
|
+
return windows;
|
|
28
|
+
}
|
|
2
29
|
function parseWebVtt(vtt) {
|
|
3
30
|
return vtt
|
|
4
31
|
.split('\n')
|
|
@@ -18,55 +45,98 @@ async function zoomGet(path, token) {
|
|
|
18
45
|
const res = await fetch(`https://api.zoom.us/v2${path}`, {
|
|
19
46
|
headers: { Authorization: `Bearer ${token}` },
|
|
20
47
|
});
|
|
21
|
-
if (!res.ok)
|
|
22
|
-
|
|
23
|
-
throw new Error(`Zoom API error ${res.status}: ${err.message ?? 'unknown'}`);
|
|
24
|
-
}
|
|
48
|
+
if (!res.ok)
|
|
49
|
+
throw await providerError('Zoom', res);
|
|
25
50
|
return res.json();
|
|
26
51
|
}
|
|
27
52
|
/**
|
|
28
53
|
* Read-only personal Zoom fetcher: cloud-recording transcripts (VTT), parsed to
|
|
29
54
|
* plain text. Author = the meeting host. `uuid` (single meeting) rides on opts.
|
|
55
|
+
* Lists `/users/me/recordings` in 30-day windows back through `daysBack`
|
|
56
|
+
* (default 90), paging each with `next_page_token` up to `limit`; a meeting
|
|
57
|
+
* with no completed transcript, or one whose transcript will not download, is
|
|
58
|
+
* counted into the report rather than dropped in silence.
|
|
30
59
|
*/
|
|
31
60
|
export class ZoomFetcher {
|
|
32
61
|
async fetch(opts) {
|
|
62
|
+
return (await this.fetchWithReport(opts)).items;
|
|
63
|
+
}
|
|
64
|
+
async fetchWithReport(opts) {
|
|
33
65
|
const limit = opts.limit ?? 30;
|
|
66
|
+
const daysBack = opts.daysBack ?? 90;
|
|
34
67
|
const uuid = opts.uuid;
|
|
35
|
-
const
|
|
36
|
-
const data = await zoomGet(path, opts.token);
|
|
37
|
-
const meetings = data.meetings ?? [];
|
|
68
|
+
const pageSize = Math.min(limit, ZOOM_PAGE_MAX);
|
|
38
69
|
const items = [];
|
|
39
|
-
|
|
70
|
+
const seen = new Set();
|
|
71
|
+
let scanned = 0;
|
|
72
|
+
let noTranscript = 0;
|
|
73
|
+
let unreadable = 0;
|
|
74
|
+
// The single-meeting path has no window and is one request by construction.
|
|
75
|
+
const windows = uuid ? [undefined] : recordingWindows(Date.now(), daysBack);
|
|
76
|
+
for (const window of windows) {
|
|
40
77
|
if (items.length >= limit)
|
|
41
78
|
break;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
79
|
+
let pageToken;
|
|
80
|
+
do {
|
|
81
|
+
const path = uuid
|
|
82
|
+
? `/meetings/${encodeMeetingUuid(uuid)}/recordings`
|
|
83
|
+
: `/users/me/recordings?page_size=${pageSize}&from=${window.from}&to=${window.to}` +
|
|
84
|
+
(pageToken ? `&next_page_token=${encodeURIComponent(pageToken)}` : '');
|
|
85
|
+
const data = await zoomGet(path, opts.token);
|
|
86
|
+
// The single-meeting endpoint answers with the meeting itself, recording_files at the
|
|
87
|
+
// top level and no meetings array. Reading meetings[] there returned nothing, always.
|
|
88
|
+
const meetings = data.meetings ?? (data.recording_files ? [data] : []);
|
|
89
|
+
for (const meeting of meetings) {
|
|
90
|
+
if (items.length >= limit)
|
|
91
|
+
break;
|
|
92
|
+
if (seen.has(meeting.uuid))
|
|
93
|
+
continue;
|
|
94
|
+
seen.add(meeting.uuid);
|
|
95
|
+
scanned += 1;
|
|
96
|
+
const vttFile = (meeting.recording_files ?? []).find((f) => f.file_type === 'TRANSCRIPT' && f.status === 'completed');
|
|
97
|
+
if (!vttFile) {
|
|
98
|
+
noTranscript += 1;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const vttRes = await fetch(`${vttFile.download_url}?access_token=${opts.token}`);
|
|
103
|
+
if (!vttRes.ok) {
|
|
104
|
+
unreadable += 1;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const vttText = await vttRes.text();
|
|
108
|
+
const transcript = parseWebVtt(vttText);
|
|
109
|
+
if (!transcript) {
|
|
110
|
+
noTranscript += 1;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const date = meeting.start_time.slice(0, 10);
|
|
114
|
+
const createdAt = toIsoOrUndefined(meeting.start_time);
|
|
115
|
+
const host = meeting.host_email
|
|
116
|
+
? { name: meeting.host_email.split('@')[0], email: meeting.host_email }
|
|
117
|
+
: undefined;
|
|
118
|
+
items.push({
|
|
119
|
+
source_url: `https://zoom.us/recording/${encodeMeetingUuid(meeting.uuid)}`,
|
|
120
|
+
platform: 'zoom',
|
|
121
|
+
raw_text: `[${meeting.topic} - ${date}]\n${transcript}`.slice(0, 4000),
|
|
122
|
+
title: `${meeting.topic} (${date})`.slice(0, 80),
|
|
123
|
+
...(createdAt ? { created_at: createdAt } : {}),
|
|
124
|
+
...(host ? { author: host } : {}),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
unreadable += 1;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
pageToken = uuid ? undefined : data.next_page_token || undefined;
|
|
132
|
+
} while (pageToken && items.length < limit);
|
|
68
133
|
}
|
|
69
|
-
|
|
134
|
+
const skips = [];
|
|
135
|
+
if (noTranscript > 0)
|
|
136
|
+
skips.push({ kind: 'shape', count: noTranscript, detail: 'meetings with no completed transcript' });
|
|
137
|
+
if (unreadable > 0)
|
|
138
|
+
skips.push({ kind: 'error', count: unreadable, detail: 'transcripts that could not be downloaded' });
|
|
139
|
+
return { items, report: { platform: 'zoom', scanned, requested: limit, skips } };
|
|
70
140
|
}
|
|
71
141
|
}
|
|
72
142
|
//# sourceMappingURL=zoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../src/fetchers/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../src/fetchers/zoom.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export * from './types/index.js';
|
|
13
13
|
export { DETERMINISTIC_TEMPERATURE } from './constants.js';
|
|
14
|
-
export type { ConnectorFetcher, ConnectorFetcherOptions, FetcherItem, FetcherPage, DecisionAuthor, } from './types/fetcher.js';
|
|
15
|
-
export { FETCHERS, GitHubFetcher, GitLabFetcher, JiraFetcher, ConfluenceFetcher, SlackFetcher, TeamsFetcher, ZoomFetcher, LinearFetcher, NotionFetcher, GitFetcher, buildCommitUrl, formatCommitAsText, FetcherAuthError, type GitCommitSource, type GitCommit, } from './fetchers/index.js';
|
|
14
|
+
export type { ConnectorFetcher, ConnectorFetcherOptions, FetcherItem, FetcherPage, FetchSkip, FetchReport, FetchResult, DecisionAuthor, } from './types/fetcher.js';
|
|
15
|
+
export { FETCHERS, GitHubFetcher, GitLabFetcher, JiraFetcher, ConfluenceFetcher, SlackFetcher, TeamsFetcher, ZoomFetcher, LinearFetcher, NotionFetcher, GitFetcher, buildCommitUrl, formatCommitAsText, FetcherAuthError, providerError, providerErrorText, type RefusedResponse, type GitCommitSource, type GitCommit, } from './fetchers/index.js';
|
|
16
16
|
export { getContext, tryGetContext, runWithContext, runWithContextAsync, extractBearer, getBearer, type BaseRequestContext, } from './utils/requestContext.js';
|
|
17
17
|
export { UUID_REGEX, isValidUUID, assertValidUUID } from './utils/validation.js';
|
|
18
18
|
export { CommandParser, CommandHelpText } from './parsers/CommandParser.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,EACnC,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,EACnC,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export * from './types/index.js';
|
|
|
15
15
|
export { DETERMINISTIC_TEMPERATURE } from './constants.js';
|
|
16
16
|
// Canonical read-only fetchers (one implementation per provider, shared by the
|
|
17
17
|
// CLI personal import and the paid discover scan).
|
|
18
|
-
export { FETCHERS, GitHubFetcher, GitLabFetcher, JiraFetcher, ConfluenceFetcher, SlackFetcher, TeamsFetcher, ZoomFetcher, LinearFetcher, NotionFetcher, GitFetcher, buildCommitUrl, formatCommitAsText, FetcherAuthError, } from './fetchers/index.js';
|
|
18
|
+
export { FETCHERS, GitHubFetcher, GitLabFetcher, JiraFetcher, ConfluenceFetcher, SlackFetcher, TeamsFetcher, ZoomFetcher, LinearFetcher, NotionFetcher, GitFetcher, buildCommitUrl, formatCommitAsText, FetcherAuthError, providerError, providerErrorText, } from './fetchers/index.js';
|
|
19
19
|
// Utils
|
|
20
20
|
export { getContext, tryGetContext, runWithContext, runWithContextAsync, extractBearer, getBearer, } from './utils/requestContext.js';
|
|
21
21
|
export { UUID_REGEX, isValidUUID, assertValidUUID } from './utils/validation.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAe;AACf,cAAc,kBAAkB,CAAC;AAEjC,+CAA+C;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAe;AACf,cAAc,kBAAkB,CAAC;AAEjC,+CAA+C;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAc3D,+EAA+E;AAC/E,mDAAmD;AACnD,OAAO,EACL,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAIlB,MAAM,qBAAqB,CAAC;AAE7B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,SAAS,GAEV,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEjF,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE5E,mBAAmB;AACnB,OAAO,EACL,aAAa,GAGd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,GAGpC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,GAKtB,MAAM,+BAA+B,CAAC;AAEvC,QAAQ;AACR,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;AAEjC,+EAA+E;AAC/E,OAAO,EACL,+BAA+B,EAiB/B,wBAAwB,GAMzB,MAAM,iBAAiB,CAAC;AAEzB,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/types/fetcher.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ export interface FetcherItem {
|
|
|
26
26
|
title?: string;
|
|
27
27
|
/** Who to talk to about this item (decision owner / author), when resolvable. */
|
|
28
28
|
author?: DecisionAuthor;
|
|
29
|
+
/**
|
|
30
|
+
* The source's own timestamp for this item, ISO-8601 Z: when it was created
|
|
31
|
+
* on most platforms, and for Confluence the current version's date (the page
|
|
32
|
+
* as it now stands), which is what the hosted scan records as decided_at for
|
|
33
|
+
* Confluence too. Never the fetch time: absent means the platform did not
|
|
34
|
+
* say, and a consumer that wants "now" must write it itself where it can be
|
|
35
|
+
* seen, because a plausible wrong date is indistinguishable from a
|
|
36
|
+
* measurement downstream.
|
|
37
|
+
*/
|
|
38
|
+
created_at?: string;
|
|
29
39
|
}
|
|
30
40
|
/**
|
|
31
41
|
* Inputs to a fetch. `token` + `limit` cover the CLI personal import; `cursor`
|
|
@@ -50,10 +60,54 @@ export interface FetcherPage {
|
|
|
50
60
|
items: FetcherItem[];
|
|
51
61
|
nextCursor?: string;
|
|
52
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* What a fetch could NOT reach, in the fetcher's own terms.
|
|
65
|
+
*
|
|
66
|
+
* Plumbing only: a count and a reason the fetcher measured. Never a judgement
|
|
67
|
+
* about whether an item was a decision - that stays on the proprietary side.
|
|
68
|
+
* The CLI prints these verbatim, which is why `detail` is written for a person
|
|
69
|
+
* and reads as a sentence after the count: "12 channels not scanned (...)".
|
|
70
|
+
*/
|
|
71
|
+
export interface FetchSkip {
|
|
72
|
+
/** page_cap: a page or item cap fired; time_budget: the fetcher's own deadline
|
|
73
|
+
* fired; shape: the source object was not the kind this fetcher reads; error:
|
|
74
|
+
* the provider refused or failed the read. */
|
|
75
|
+
kind: 'page_cap' | 'time_budget' | 'shape' | 'error';
|
|
76
|
+
count: number;
|
|
77
|
+
detail: string;
|
|
78
|
+
}
|
|
79
|
+
export interface FetchReport {
|
|
80
|
+
platform: string;
|
|
81
|
+
/** Source objects examined before any filter, in the fetcher's own unit (Slack
|
|
82
|
+
* counts threads). `items.length` is never more than this. */
|
|
83
|
+
scanned: number;
|
|
84
|
+
/** The cap the read was bounded by: `opts.limit`, or the fetcher's default when
|
|
85
|
+
* none was given. Lets a caller say "30 of up to 50" without re-deriving it. */
|
|
86
|
+
requested?: number;
|
|
87
|
+
/**
|
|
88
|
+
* Lines for a person, not terms of an equation. A skip's count is in whatever
|
|
89
|
+
* unit its detail names, which need not be `scanned`'s (Slack's short-message
|
|
90
|
+
* skip counts messages while `scanned` counts threads); skips are not disjoint
|
|
91
|
+
* from `items` (a thread cut at a page cap is kept AND reported) nor from each
|
|
92
|
+
* other. Do not reconcile `scanned - skips = items`.
|
|
93
|
+
*/
|
|
94
|
+
skips: FetchSkip[];
|
|
95
|
+
}
|
|
96
|
+
export interface FetchResult {
|
|
97
|
+
items: FetcherItem[];
|
|
98
|
+
report: FetchReport;
|
|
99
|
+
}
|
|
53
100
|
export interface ConnectorFetcher {
|
|
54
101
|
/** Single-shot read used by the CLI personal import. */
|
|
55
102
|
fetch(opts: ConnectorFetcherOptions): Promise<FetcherItem[]>;
|
|
56
103
|
/** Optional paged read used by the discover scan. Defaults can wrap `fetch`. */
|
|
57
104
|
fetchPage?(opts: ConnectorFetcherOptions): Promise<FetcherPage>;
|
|
105
|
+
/**
|
|
106
|
+
* The same read as {@link fetch}, plus what it could not reach. Optional so
|
|
107
|
+
* every existing implementation (in this repo and in anyone else's) still
|
|
108
|
+
* satisfies the interface unchanged. Where both exist, `fetch` must return
|
|
109
|
+
* exactly `(await fetchWithReport(opts)).items`.
|
|
110
|
+
*/
|
|
111
|
+
fetchWithReport?(opts: ConnectorFetcherOptions): Promise<FetchResult>;
|
|
58
112
|
}
|
|
59
113
|
//# sourceMappingURL=fetcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/types/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/types/fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB;;mDAE+C;IAC/C,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB;mEAC+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB;qFACiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,KAAK,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,gFAAgF;IAChF,SAAS,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChE;;;;;OAKG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACvE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligndottech/connector-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Align connector core: the ConnectorFetcher contract, read-only fetchers, gateway client, and tier definitions. Lightweight (no server deps) - safe for the Align CLI.",
|