@aligndottech/connector-core 0.5.0 → 0.6.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.
Files changed (50) hide show
  1. package/dist/fetchers/confluence.d.ts +2 -1
  2. package/dist/fetchers/confluence.d.ts.map +1 -1
  3. package/dist/fetchers/confluence.js +9 -1
  4. package/dist/fetchers/confluence.js.map +1 -1
  5. package/dist/fetchers/git.d.ts +2 -1
  6. package/dist/fetchers/git.d.ts.map +1 -1
  7. package/dist/fetchers/git.js +8 -1
  8. package/dist/fetchers/git.js.map +1 -1
  9. package/dist/fetchers/github.d.ts +2 -1
  10. package/dist/fetchers/github.d.ts.map +1 -1
  11. package/dist/fetchers/github.js +10 -1
  12. package/dist/fetchers/github.js.map +1 -1
  13. package/dist/fetchers/gitlab.d.ts +4 -2
  14. package/dist/fetchers/gitlab.d.ts.map +1 -1
  15. package/dist/fetchers/gitlab.js +33 -4
  16. package/dist/fetchers/gitlab.js.map +1 -1
  17. package/dist/fetchers/jira.d.ts +2 -1
  18. package/dist/fetchers/jira.d.ts.map +1 -1
  19. package/dist/fetchers/jira.js +10 -2
  20. package/dist/fetchers/jira.js.map +1 -1
  21. package/dist/fetchers/linear.d.ts +2 -1
  22. package/dist/fetchers/linear.d.ts.map +1 -1
  23. package/dist/fetchers/linear.js +10 -2
  24. package/dist/fetchers/linear.js.map +1 -1
  25. package/dist/fetchers/notion.d.ts +4 -1
  26. package/dist/fetchers/notion.d.ts.map +1 -1
  27. package/dist/fetchers/notion.js +61 -30
  28. package/dist/fetchers/notion.js.map +1 -1
  29. package/dist/fetchers/slack.d.ts +12 -3
  30. package/dist/fetchers/slack.d.ts.map +1 -1
  31. package/dist/fetchers/slack.js +222 -28
  32. package/dist/fetchers/slack.js.map +1 -1
  33. package/dist/fetchers/teams.d.ts +2 -1
  34. package/dist/fetchers/teams.d.ts.map +1 -1
  35. package/dist/fetchers/teams.js +9 -1
  36. package/dist/fetchers/teams.js.map +1 -1
  37. package/dist/fetchers/util/time.d.ts +15 -0
  38. package/dist/fetchers/util/time.d.ts.map +1 -0
  39. package/dist/fetchers/util/time.js +24 -0
  40. package/dist/fetchers/util/time.js.map +1 -0
  41. package/dist/fetchers/zoom.d.ts +6 -1
  42. package/dist/fetchers/zoom.d.ts.map +1 -1
  43. package/dist/fetchers/zoom.js +102 -31
  44. package/dist/fetchers/zoom.js.map +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/types/fetcher.d.ts +54 -0
  49. package/dist/types/fetcher.d.ts.map +1 -1
  50. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Normalise a source timestamp to ISO-8601 Z, or undefined.
3
+ *
4
+ * Undefined rather than a fallback: a null date says "unknown", and a plausible
5
+ * wrong date is indistinguishable from a measurement to everything downstream.
6
+ * NaN is checked explicitly because every comparison against NaN is false in
7
+ * both directions, so an unchecked bad date does not error, it silently vacates
8
+ * whatever filter reads it later.
9
+ *
10
+ * One writer for the normalisation, so ten fetchers cannot disagree about what
11
+ * "ISO" means. Accepts epoch milliseconds as a number for sources that hand out
12
+ * a numeric timestamp (Slack's `ts` is epoch seconds; callers multiply).
13
+ */
14
+ export function toIsoOrUndefined(value) {
15
+ if (value === undefined || value === null || value === '')
16
+ return undefined;
17
+ const ms = typeof value === 'number' ? value : Date.parse(value);
18
+ // A zero or negative instant is not a source date either: Number('') is 0, and
19
+ // an epoch stamp in a decision graph is a fabrication with a plausible face.
20
+ if (Number.isNaN(ms) || ms <= 0)
21
+ return undefined;
22
+ return new Date(ms).toISOString();
23
+ }
24
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/fetchers/util/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAyC;IACxE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjE,+EAA+E;IAC/E,6EAA6E;IAC7E,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC"}
@@ -1,9 +1,14 @@
1
- import type { ConnectorFetcher, ConnectorFetcherOptions, FetcherItem } from '../types/fetcher.js';
1
+ import type { ConnectorFetcher, ConnectorFetcherOptions, FetcherItem, FetchResult } from '../types/fetcher.js';
2
2
  /**
3
3
  * Read-only personal Zoom fetcher: cloud-recording transcripts (VTT), parsed to
4
4
  * plain text. Author = the meeting host. `uuid` (single meeting) rides on opts.
5
+ * Lists `/users/me/recordings` in 30-day windows back through `daysBack`
6
+ * (default 90), paging each with `next_page_token` up to `limit`; a meeting
7
+ * with no completed transcript, or one whose transcript will not download, is
8
+ * counted into the report rather than dropped in silence.
5
9
  */
6
10
  export declare class ZoomFetcher implements ConnectorFetcher {
7
11
  fetch(opts: ConnectorFetcherOptions): Promise<FetcherItem[]>;
12
+ fetchWithReport(opts: ConnectorFetcherOptions): Promise<FetchResult>;
8
13
  }
9
14
  //# sourceMappingURL=zoom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../src/fetchers/zoom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgDlG;;;GAGG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IAC5C,KAAK,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAyCnE"}
1
+ {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../src/fetchers/zoom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,WAAW,EAAa,MAAM,qBAAqB,CAAC;AA8E1H;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IAC5C,KAAK,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI5D,eAAe,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;CA8E3E"}
@@ -1,4 +1,30 @@
1
1
  import { fetch } from 'undici';
2
+ import { toIsoOrUndefined } from './util/time.js';
3
+ // Zoom's documented page_size maximum for /users/me/recordings. 30 is the default,
4
+ // and before ALI-828 it was the whole read: one page of 30, whatever the caller
5
+ // asked for. Held constant across next_page_token requests, as Zoom requires.
6
+ const ZOOM_PAGE_MAX = 300;
7
+ // Zoom lists recordings for a from/to window at most a month wide, and with
8
+ // neither parameter it lists only the current day. So a read walks windows back
9
+ // through `daysBack`, newest first; a boundary day can appear in two windows,
10
+ // which is what the uuid dedupe below is for.
11
+ const ZOOM_WINDOW_DAYS = 30;
12
+ const DAY_MS = 86_400_000;
13
+ function isoDay(ms) {
14
+ return new Date(ms).toISOString().slice(0, 10);
15
+ }
16
+ /** Day windows covering the last `daysBack` days, newest first. */
17
+ function recordingWindows(now, daysBack) {
18
+ const windows = [];
19
+ let to = Math.floor(now / DAY_MS) * DAY_MS;
20
+ const oldest = to - daysBack * DAY_MS;
21
+ while (to > oldest) {
22
+ const from = Math.max(to - (ZOOM_WINDOW_DAYS - 1) * DAY_MS, oldest);
23
+ windows.push({ from: isoDay(from), to: isoDay(to) });
24
+ to = from - DAY_MS;
25
+ }
26
+ return windows;
27
+ }
2
28
  function parseWebVtt(vtt) {
3
29
  return vtt
4
30
  .split('\n')
@@ -27,46 +53,91 @@ async function zoomGet(path, token) {
27
53
  /**
28
54
  * Read-only personal Zoom fetcher: cloud-recording transcripts (VTT), parsed to
29
55
  * plain text. Author = the meeting host. `uuid` (single meeting) rides on opts.
56
+ * Lists `/users/me/recordings` in 30-day windows back through `daysBack`
57
+ * (default 90), paging each with `next_page_token` up to `limit`; a meeting
58
+ * with no completed transcript, or one whose transcript will not download, is
59
+ * counted into the report rather than dropped in silence.
30
60
  */
31
61
  export class ZoomFetcher {
32
62
  async fetch(opts) {
63
+ return (await this.fetchWithReport(opts)).items;
64
+ }
65
+ async fetchWithReport(opts) {
33
66
  const limit = opts.limit ?? 30;
67
+ const daysBack = opts.daysBack ?? 90;
34
68
  const uuid = opts.uuid;
35
- const path = uuid ? `/meetings/${encodeMeetingUuid(uuid)}/recordings` : `/users/me/recordings?page_size=30`;
36
- const data = await zoomGet(path, opts.token);
37
- const meetings = data.meetings ?? [];
69
+ const pageSize = Math.min(limit, ZOOM_PAGE_MAX);
38
70
  const items = [];
39
- for (const meeting of meetings) {
71
+ const seen = new Set();
72
+ let scanned = 0;
73
+ let noTranscript = 0;
74
+ let unreadable = 0;
75
+ // The single-meeting path has no window and is one request by construction.
76
+ const windows = uuid ? [undefined] : recordingWindows(Date.now(), daysBack);
77
+ for (const window of windows) {
40
78
  if (items.length >= limit)
41
79
  break;
42
- const vttFile = (meeting.recording_files ?? []).find((f) => f.file_type === 'TRANSCRIPT' && f.status === 'completed');
43
- if (!vttFile)
44
- continue;
45
- try {
46
- const vttRes = await fetch(`${vttFile.download_url}?access_token=${opts.token}`);
47
- if (!vttRes.ok)
48
- continue;
49
- const vttText = await vttRes.text();
50
- const transcript = parseWebVtt(vttText);
51
- if (!transcript)
52
- continue;
53
- const date = meeting.start_time.slice(0, 10);
54
- const host = meeting.host_email
55
- ? { name: meeting.host_email.split('@')[0], email: meeting.host_email }
56
- : undefined;
57
- items.push({
58
- source_url: `https://zoom.us/recording/${encodeMeetingUuid(meeting.uuid)}`,
59
- platform: 'zoom',
60
- raw_text: `[${meeting.topic} - ${date}]\n${transcript}`.slice(0, 4000),
61
- title: `${meeting.topic} (${date})`.slice(0, 80),
62
- ...(host ? { author: host } : {}),
63
- });
64
- }
65
- catch {
66
- /* skip recordings with inaccessible transcripts */
67
- }
80
+ let pageToken;
81
+ do {
82
+ const path = uuid
83
+ ? `/meetings/${encodeMeetingUuid(uuid)}/recordings`
84
+ : `/users/me/recordings?page_size=${pageSize}&from=${window.from}&to=${window.to}` +
85
+ (pageToken ? `&next_page_token=${encodeURIComponent(pageToken)}` : '');
86
+ const data = await zoomGet(path, opts.token);
87
+ // The single-meeting endpoint answers with the meeting itself, recording_files at the
88
+ // top level and no meetings array. Reading meetings[] there returned nothing, always.
89
+ const meetings = data.meetings ?? (data.recording_files ? [data] : []);
90
+ for (const meeting of meetings) {
91
+ if (items.length >= limit)
92
+ break;
93
+ if (seen.has(meeting.uuid))
94
+ continue;
95
+ seen.add(meeting.uuid);
96
+ scanned += 1;
97
+ const vttFile = (meeting.recording_files ?? []).find((f) => f.file_type === 'TRANSCRIPT' && f.status === 'completed');
98
+ if (!vttFile) {
99
+ noTranscript += 1;
100
+ continue;
101
+ }
102
+ try {
103
+ const vttRes = await fetch(`${vttFile.download_url}?access_token=${opts.token}`);
104
+ if (!vttRes.ok) {
105
+ unreadable += 1;
106
+ continue;
107
+ }
108
+ const vttText = await vttRes.text();
109
+ const transcript = parseWebVtt(vttText);
110
+ if (!transcript) {
111
+ noTranscript += 1;
112
+ continue;
113
+ }
114
+ const date = meeting.start_time.slice(0, 10);
115
+ const createdAt = toIsoOrUndefined(meeting.start_time);
116
+ const host = meeting.host_email
117
+ ? { name: meeting.host_email.split('@')[0], email: meeting.host_email }
118
+ : undefined;
119
+ items.push({
120
+ source_url: `https://zoom.us/recording/${encodeMeetingUuid(meeting.uuid)}`,
121
+ platform: 'zoom',
122
+ raw_text: `[${meeting.topic} - ${date}]\n${transcript}`.slice(0, 4000),
123
+ title: `${meeting.topic} (${date})`.slice(0, 80),
124
+ ...(createdAt ? { created_at: createdAt } : {}),
125
+ ...(host ? { author: host } : {}),
126
+ });
127
+ }
128
+ catch {
129
+ unreadable += 1;
130
+ }
131
+ }
132
+ pageToken = uuid ? undefined : data.next_page_token || undefined;
133
+ } while (pageToken && items.length < limit);
68
134
  }
69
- return items;
135
+ const skips = [];
136
+ if (noTranscript > 0)
137
+ skips.push({ kind: 'shape', count: noTranscript, detail: 'meetings with no completed transcript' });
138
+ if (unreadable > 0)
139
+ skips.push({ kind: 'error', count: unreadable, detail: 'transcripts that could not be downloaded' });
140
+ return { items, report: { platform: 'zoom', scanned, requested: limit, skips } };
70
141
  }
71
142
  }
72
143
  //# sourceMappingURL=zoom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../src/fetchers/zoom.ts"],"names":[],"mappings":"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"}
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,7 +11,7 @@
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';
14
+ export type { ConnectorFetcher, ConnectorFetcherOptions, FetcherItem, FetcherPage, FetchSkip, FetchReport, FetchResult, DecisionAuthor, } from './types/fetcher.js';
15
15
  export { FETCHERS, GitHubFetcher, GitLabFetcher, JiraFetcher, ConfluenceFetcher, SlackFetcher, TeamsFetcher, ZoomFetcher, LinearFetcher, NotionFetcher, GitFetcher, buildCommitUrl, formatCommitAsText, FetcherAuthError, 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';
@@ -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,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.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;AAW3D,+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,GAGjB,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"}
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,GAGjB,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"}
@@ -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;CACzB;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,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;CACjE"}
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.5.0",
3
+ "version": "0.6.0",
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.",