@relayfile/adapter-confluence 0.1.0 → 0.1.2
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/discovery/confluence/.adapter.md +4 -4
- package/dist/__tests__/alias-slug.test.d.ts +2 -0
- package/dist/__tests__/alias-slug.test.d.ts.map +1 -0
- package/dist/__tests__/alias-slug.test.js +19 -0
- package/dist/__tests__/alias-slug.test.js.map +1 -0
- package/dist/__tests__/confluence-adapter.test.js +263 -11
- package/dist/__tests__/confluence-adapter.test.js.map +1 -1
- package/dist/__tests__/index-emission.test.d.ts +2 -0
- package/dist/__tests__/index-emission.test.d.ts.map +1 -0
- package/dist/__tests__/index-emission.test.js +67 -0
- package/dist/__tests__/index-emission.test.js.map +1 -0
- package/dist/__tests__/layout-prompt.test.d.ts +2 -0
- package/dist/__tests__/layout-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/layout-prompt.test.js +23 -0
- package/dist/__tests__/layout-prompt.test.js.map +1 -0
- package/dist/__tests__/path-mapper.test.d.ts +2 -0
- package/dist/__tests__/path-mapper.test.d.ts.map +1 -0
- package/dist/__tests__/path-mapper.test.js +106 -0
- package/dist/__tests__/path-mapper.test.js.map +1 -0
- package/dist/__tests__/webhook-normalizer.test.d.ts +2 -0
- package/dist/__tests__/webhook-normalizer.test.d.ts.map +1 -0
- package/dist/__tests__/webhook-normalizer.test.js +106 -0
- package/dist/__tests__/webhook-normalizer.test.js.map +1 -0
- package/dist/alias-slug.d.ts +9 -0
- package/dist/alias-slug.d.ts.map +1 -0
- package/dist/alias-slug.js +23 -0
- package/dist/alias-slug.js.map +1 -0
- package/dist/confluence-adapter.d.ts +37 -0
- package/dist/confluence-adapter.d.ts.map +1 -1
- package/dist/confluence-adapter.js +245 -24
- package/dist/confluence-adapter.js.map +1 -1
- package/dist/index-emitter.d.ts +10 -0
- package/dist/index-emitter.d.ts.map +1 -0
- package/dist/index-emitter.js +26 -0
- package/dist/index-emitter.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/layout-prompt.d.ts +7 -0
- package/dist/layout-prompt.d.ts.map +1 -0
- package/dist/layout-prompt.js +75 -0
- package/dist/layout-prompt.js.map +1 -0
- package/dist/path-mapper.d.ts +65 -2
- package/dist/path-mapper.d.ts.map +1 -1
- package/dist/path-mapper.js +186 -10
- package/dist/path-mapper.js.map +1 -1
- package/dist/queries.d.ts +22 -2
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +43 -2
- package/dist/queries.js.map +1 -1
- package/dist/resources.js +2 -2
- package/dist/resources.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/webhook-normalizer.d.ts +59 -0
- package/dist/webhook-normalizer.d.ts.map +1 -0
- package/dist/webhook-normalizer.js +469 -0
- package/dist/webhook-normalizer.js.map +1 -0
- package/dist/writeback.d.ts +1 -2
- package/dist/writeback.d.ts.map +1 -1
- package/dist/writeback.js +1 -1
- package/dist/writeback.js.map +1 -1
- package/package.json +22 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/path-mapper.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
import { aliasCollisionSuffix, slugifyAlias } from './alias-slug.js';
|
|
1
2
|
import { CONFLUENCE_PATH_ROOT } from './types.js';
|
|
3
|
+
export { CONFLUENCE_PATH_ROOT };
|
|
2
4
|
export const CONFLUENCE_OBJECT_TYPES = ['page', 'space'];
|
|
5
|
+
/**
|
|
6
|
+
* Confluence-canonical page statuses, used for the by-state alias scope. The
|
|
7
|
+
* Confluence REST v2 schema (see `discovery/confluence/pages/.schema.json`)
|
|
8
|
+
* pins this to `current | draft`, but real payloads also surface `archived`
|
|
9
|
+
* and `trashed`. We accept any non-empty string and emit it lowercased; the
|
|
10
|
+
* canonical-status list below is informational for downstream readers.
|
|
11
|
+
*/
|
|
12
|
+
export const CONFLUENCE_CANONICAL_PAGE_STATUSES = ['current', 'draft', 'archived', 'trashed'];
|
|
13
|
+
const MAX_HUMAN_READABLE_LENGTH = 80;
|
|
3
14
|
const OBJECT_TYPE_ALIASES = {
|
|
4
15
|
confluencepage: 'page',
|
|
5
16
|
confluencespace: 'space',
|
|
@@ -8,6 +19,17 @@ const OBJECT_TYPE_ALIASES = {
|
|
|
8
19
|
space: 'space',
|
|
9
20
|
spaces: 'space',
|
|
10
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Nango sync record `model` names → canonical Confluence object types. The
|
|
24
|
+
* `confluence-relay` Nango integration emits records under these PascalCase
|
|
25
|
+
* model names; resolving them here lets the cloud's record writer turn a
|
|
26
|
+
* Nango payload into a relayfile path without hardcoding the mapping at the
|
|
27
|
+
* dispatch site.
|
|
28
|
+
*/
|
|
29
|
+
const NANGO_MODEL_MAP = {
|
|
30
|
+
ConfluencePage: 'page',
|
|
31
|
+
ConfluenceSpace: 'space',
|
|
32
|
+
};
|
|
11
33
|
function assertNonEmptySegment(value, label) {
|
|
12
34
|
const trimmed = value.trim();
|
|
13
35
|
if (!trimmed) {
|
|
@@ -19,15 +41,55 @@ export function encodeConfluencePathSegment(value) {
|
|
|
19
41
|
return encodeURIComponent(assertNonEmptySegment(value, 'path segment'));
|
|
20
42
|
}
|
|
21
43
|
function slugify(value) {
|
|
22
|
-
|
|
44
|
+
const ascii = value
|
|
45
|
+
.normalize('NFKD')
|
|
46
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
47
|
+
.replace(/[^\x00-\x7F]+/g, '');
|
|
48
|
+
const slug = ascii
|
|
23
49
|
.replace(/[{}]/g, '')
|
|
24
50
|
.replace(/[^a-zA-Z0-9]+/g, '-')
|
|
25
51
|
.replace(/^-+|-+$/g, '')
|
|
26
52
|
.toLowerCase();
|
|
53
|
+
if (slug.length <= MAX_HUMAN_READABLE_LENGTH) {
|
|
54
|
+
return slug;
|
|
55
|
+
}
|
|
56
|
+
const truncated = slug.slice(0, MAX_HUMAN_READABLE_LENGTH);
|
|
57
|
+
const cutIndex = truncated.lastIndexOf('-');
|
|
58
|
+
const bounded = cutIndex > 0 ? truncated.slice(0, cutIndex) : truncated;
|
|
59
|
+
return bounded.replace(/^-+|-+$/g, '');
|
|
27
60
|
}
|
|
28
|
-
function
|
|
29
|
-
const
|
|
30
|
-
|
|
61
|
+
export function nameWithId(humanReadable, id, opts = {}) {
|
|
62
|
+
const normalizedId = encodeConfluencePathSegment(id);
|
|
63
|
+
const slug = humanReadable ? slugify(humanReadable) : '';
|
|
64
|
+
if (!slug) {
|
|
65
|
+
return normalizedId;
|
|
66
|
+
}
|
|
67
|
+
const existingNames = opts.existingNames;
|
|
68
|
+
const baseName = existingNames?.has(slug)
|
|
69
|
+
? `${slug}-${aliasCollisionSuffix(normalizedId)}`
|
|
70
|
+
: slug;
|
|
71
|
+
existingNames?.add(baseName);
|
|
72
|
+
return `${baseName}__${normalizedId}`;
|
|
73
|
+
}
|
|
74
|
+
// For Confluence `<humanReadable>__<id>` segments, `humanReadable` is the
|
|
75
|
+
// leading prefix and `id` is the trailing identifier.
|
|
76
|
+
export function parseNameWithId(filename) {
|
|
77
|
+
const extIndex = filename.lastIndexOf('.');
|
|
78
|
+
const ext = extIndex > 0 && extIndex < filename.length - 1 ? filename.slice(extIndex + 1) : null;
|
|
79
|
+
const basename = ext ? filename.slice(0, extIndex) : filename;
|
|
80
|
+
const separatorIndex = basename.lastIndexOf('__');
|
|
81
|
+
if (separatorIndex <= 0 || separatorIndex === basename.length - 2) {
|
|
82
|
+
return {
|
|
83
|
+
humanReadable: null,
|
|
84
|
+
id: basename,
|
|
85
|
+
ext,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
humanReadable: basename.slice(0, separatorIndex),
|
|
90
|
+
id: basename.slice(separatorIndex + 2),
|
|
91
|
+
ext,
|
|
92
|
+
};
|
|
31
93
|
}
|
|
32
94
|
export function normalizeConfluenceObjectType(objectType) {
|
|
33
95
|
const normalized = objectType.trim().toLowerCase();
|
|
@@ -37,16 +99,121 @@ export function normalizeConfluenceObjectType(objectType) {
|
|
|
37
99
|
}
|
|
38
100
|
return mapped;
|
|
39
101
|
}
|
|
40
|
-
export function
|
|
41
|
-
|
|
102
|
+
export function tryNormalizeConfluenceObjectType(objectType) {
|
|
103
|
+
try {
|
|
104
|
+
return normalizeConfluenceObjectType(objectType);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
42
109
|
}
|
|
43
|
-
export function
|
|
44
|
-
const
|
|
110
|
+
export function normalizeNangoConfluenceModel(model) {
|
|
111
|
+
const direct = NANGO_MODEL_MAP[model];
|
|
112
|
+
if (direct)
|
|
113
|
+
return direct;
|
|
114
|
+
return normalizeConfluenceObjectType(model);
|
|
115
|
+
}
|
|
116
|
+
export function slugifyStatusName(status) {
|
|
117
|
+
const trimmed = assertNonEmptySegment(status, 'status name');
|
|
118
|
+
let slug = '';
|
|
119
|
+
let previousWasSeparator = false;
|
|
120
|
+
for (const character of trimmed.normalize('NFC').toLowerCase()) {
|
|
121
|
+
if (/\s/u.test(character)) {
|
|
122
|
+
if (!previousWasSeparator && slug.length > 0) {
|
|
123
|
+
slug += '-';
|
|
124
|
+
}
|
|
125
|
+
previousWasSeparator = true;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
previousWasSeparator = false;
|
|
129
|
+
if (/[a-z0-9]/u.test(character)) {
|
|
130
|
+
slug += character;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (character === '-') {
|
|
134
|
+
slug += '%2D';
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
slug += encodeURIComponent(character);
|
|
138
|
+
}
|
|
139
|
+
return assertNonEmptySegment(slug, 'status slug');
|
|
140
|
+
}
|
|
141
|
+
export function confluenceSpacePath(spaceIdOrKey, name, opts) {
|
|
142
|
+
return `${CONFLUENCE_PATH_ROOT}/spaces/${nameWithId(name, spaceIdOrKey, opts)}.json`;
|
|
143
|
+
}
|
|
144
|
+
export function confluencePagePath(pageId, title, spaceId, opts) {
|
|
145
|
+
const pageSegment = nameWithId(title, pageId, opts);
|
|
45
146
|
if (spaceId) {
|
|
46
147
|
return `${CONFLUENCE_PATH_ROOT}/spaces/${encodeConfluencePathSegment(spaceId)}/pages/${pageSegment}.json`;
|
|
47
148
|
}
|
|
48
149
|
return `${CONFLUENCE_PATH_ROOT}/pages/${pageSegment}.json`;
|
|
49
150
|
}
|
|
151
|
+
export function confluencePagesIndexPath() {
|
|
152
|
+
return `${CONFLUENCE_PATH_ROOT}/pages/_index.json`;
|
|
153
|
+
}
|
|
154
|
+
export function confluenceSpacesIndexPath() {
|
|
155
|
+
return `${CONFLUENCE_PATH_ROOT}/spaces/_index.json`;
|
|
156
|
+
}
|
|
157
|
+
export function confluenceProviderRootIndexPath() {
|
|
158
|
+
return `${CONFLUENCE_PATH_ROOT}/_index.json`;
|
|
159
|
+
}
|
|
160
|
+
export function confluencePageByStatePath(status, pageId) {
|
|
161
|
+
return `${CONFLUENCE_PATH_ROOT}/pages/by-state/${slugifyStatusName(status)}/${encodeConfluencePathSegment(pageId)}.json`;
|
|
162
|
+
}
|
|
163
|
+
export function confluenceByTitleAliasPath(scope, title, id, colliding = false) {
|
|
164
|
+
const slug = slugifyAlias(title);
|
|
165
|
+
if (!slug) {
|
|
166
|
+
throw new Error('Confluence alias title must slug to a non-empty string');
|
|
167
|
+
}
|
|
168
|
+
const filename = colliding ? `${slug}-${aliasCollisionSuffix(id)}` : slug;
|
|
169
|
+
return `${scope}/by-title/${encodeConfluencePathSegment(filename)}.json`;
|
|
170
|
+
}
|
|
171
|
+
export function confluenceByIdAliasPath(scope, identifier) {
|
|
172
|
+
return `${scope}/by-id/${encodeConfluencePathSegment(identifier)}.json`;
|
|
173
|
+
}
|
|
174
|
+
export function confluencePageByIdAliasPath(id) {
|
|
175
|
+
return confluenceByIdAliasPath(`${CONFLUENCE_PATH_ROOT}/pages`, id);
|
|
176
|
+
}
|
|
177
|
+
export function confluencePageByTitleAliasPath(title, id, colliding = false) {
|
|
178
|
+
return confluenceByTitleAliasPath(`${CONFLUENCE_PATH_ROOT}/pages`, title, id, colliding);
|
|
179
|
+
}
|
|
180
|
+
export function confluenceSpaceByIdAliasPath(id) {
|
|
181
|
+
return confluenceByIdAliasPath(`${CONFLUENCE_PATH_ROOT}/spaces`, id);
|
|
182
|
+
}
|
|
183
|
+
export function confluenceSpaceByTitleAliasPath(title, id, colliding = false) {
|
|
184
|
+
return confluenceByTitleAliasPath(`${CONFLUENCE_PATH_ROOT}/spaces`, title, id, colliding);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* `by-key/<KEY>.json` resolves a space by its globally-unique Confluence
|
|
188
|
+
* space key (e.g. `ENG`). The v2 `GET /spaces` endpoint accepts `keys=` as a
|
|
189
|
+
* filter so the key is a stable, human-meaningful identifier that agents
|
|
190
|
+
* actually paste — much more useful than the numeric id for spaces. Keys are
|
|
191
|
+
* preserved verbatim (case + punctuation) because Confluence treats them as
|
|
192
|
+
* opaque strings; we only percent-encode for path safety.
|
|
193
|
+
*/
|
|
194
|
+
export function confluenceSpaceByKeyAliasPath(spaceKey) {
|
|
195
|
+
return `${CONFLUENCE_PATH_ROOT}/spaces/by-key/${encodeConfluencePathSegment(spaceKey)}.json`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `by-parent/<parentId>/<pageId>.json` mirrors `by-state` but pivots on the
|
|
199
|
+
* page's parent — the most natural Confluence navigation primitive after the
|
|
200
|
+
* space tree. Pages without a parentId (top-level pages directly under a
|
|
201
|
+
* space's homepage) are not emitted here; consumers should use the canonical
|
|
202
|
+
* space-scoped path instead.
|
|
203
|
+
*/
|
|
204
|
+
export function confluencePageByParentAliasPath(parentId, pageId) {
|
|
205
|
+
return `${CONFLUENCE_PATH_ROOT}/pages/by-parent/${encodeConfluencePathSegment(parentId)}/${encodeConfluencePathSegment(pageId)}.json`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* `by-space/<spaceId>/<pageId>.json` — flat alias keyed only on the space id
|
|
209
|
+
* so an agent can iterate every page in a space without resolving titles.
|
|
210
|
+
* The space-scoped canonical path `/confluence/spaces/<spaceId>/pages/<slug>__<id>.json`
|
|
211
|
+
* is still the human-friendly entry point; this alias is the deterministic
|
|
212
|
+
* lookup variant readers reach for with `ls`.
|
|
213
|
+
*/
|
|
214
|
+
export function confluencePageBySpaceAliasPath(spaceId, pageId) {
|
|
215
|
+
return `${CONFLUENCE_PATH_ROOT}/pages/by-space/${encodeConfluencePathSegment(spaceId)}/${encodeConfluencePathSegment(pageId)}.json`;
|
|
216
|
+
}
|
|
50
217
|
export function computeConfluencePath(objectType, objectId, options = {}) {
|
|
51
218
|
const normalizedType = normalizeConfluenceObjectType(objectType);
|
|
52
219
|
const normalizedId = assertNonEmptySegment(objectId, 'object id');
|
|
@@ -57,9 +224,18 @@ export function computeConfluencePath(objectType, objectId, options = {}) {
|
|
|
57
224
|
return confluenceSpacePath(normalizedId, options.title);
|
|
58
225
|
}
|
|
59
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Decode a Confluence path segment back to its raw identifier. Supports both
|
|
229
|
+
* the v2 `<slug>__<id>` convention (post-PR) and the legacy `<slug>--<id>`
|
|
230
|
+
* convention so existing mounts written before the cutover keep resolving.
|
|
231
|
+
*/
|
|
60
232
|
export function extractConfluenceIdFromPathSegment(segment) {
|
|
61
233
|
const decoded = decodeURIComponent(segment);
|
|
62
|
-
const
|
|
63
|
-
|
|
234
|
+
const v2Match = /__([^/]+)$/u.exec(decoded);
|
|
235
|
+
if (v2Match?.[1]) {
|
|
236
|
+
return v2Match[1];
|
|
237
|
+
}
|
|
238
|
+
const legacyMatch = /--([^/]+)$/u.exec(decoded);
|
|
239
|
+
return legacyMatch?.[1] ? legacyMatch[1] : decoded;
|
|
64
240
|
}
|
|
65
241
|
//# sourceMappingURL=path-mapper.js.map
|
package/dist/path-mapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAC;AAGlE,MAAM,mBAAmB,GAAuD;IAC9E,cAAc,EAAE,MAAM;IACtB,eAAe,EAAE,OAAO;IACxB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,6BAA6B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/queries.d.ts
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
import { type ConfluenceReadRequest } from './types.js';
|
|
2
|
-
export declare const CONFLUENCE_API_PAGES_ROUTE = "/wiki/api/v2/pages";
|
|
1
|
+
import { type ConfluencePage, type ConfluenceSpace, type ConfluenceReadRequest } from './types.js';
|
|
3
2
|
export declare const CONFLUENCE_API_SPACES_ROUTE = "/wiki/api/v2/spaces";
|
|
3
|
+
export interface ConfluenceBaseIndexRow {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
updated: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ConfluencePageIndexRow extends ConfluenceBaseIndexRow {
|
|
9
|
+
spaceId: string;
|
|
10
|
+
status: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConfluenceSpaceIndexRow extends ConfluenceBaseIndexRow {
|
|
13
|
+
key: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function getConfluencePageHumanReadable(page: {
|
|
16
|
+
title?: string | null;
|
|
17
|
+
}): string | undefined;
|
|
18
|
+
export declare function getConfluenceSpaceHumanReadable(space: {
|
|
19
|
+
name?: string | null;
|
|
20
|
+
key?: string | null;
|
|
21
|
+
}): string | undefined;
|
|
22
|
+
export declare function confluencePageIndexRow(page: ConfluencePage): ConfluencePageIndexRow;
|
|
23
|
+
export declare function confluenceSpaceIndexRow(space: ConfluenceSpace): ConfluenceSpaceIndexRow;
|
|
4
24
|
export declare function resolveConfluenceReadRequest(path: string): ConfluenceReadRequest;
|
|
5
25
|
//# sourceMappingURL=queries.d.ts.map
|
package/dist/queries.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAA4D,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE7J,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,GAAG,EAAE,MAAM,CAAC;CACb;AAsBD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAElG;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAExH;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,CAQnF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,uBAAuB,CAOvF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CA0DhF"}
|
package/dist/queries.js
CHANGED
|
@@ -1,7 +1,48 @@
|
|
|
1
1
|
import { extractConfluenceIdFromPathSegment } from './path-mapper.js';
|
|
2
|
-
import { CONFLUENCE_DEFAULT_PAGE_SIZE } from './types.js';
|
|
3
|
-
export const CONFLUENCE_API_PAGES_ROUTE = '/wiki/api/v2/pages';
|
|
2
|
+
import { CONFLUENCE_API_PAGES_ROUTE, CONFLUENCE_DEFAULT_PAGE_SIZE } from './types.js';
|
|
4
3
|
export const CONFLUENCE_API_SPACES_ROUTE = '/wiki/api/v2/spaces';
|
|
4
|
+
function normalizeString(value) {
|
|
5
|
+
if (typeof value !== 'string')
|
|
6
|
+
return undefined;
|
|
7
|
+
const trimmed = value.trim();
|
|
8
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
9
|
+
}
|
|
10
|
+
function normalizeIndexTitle(value) {
|
|
11
|
+
return typeof value === 'string' ? value : '';
|
|
12
|
+
}
|
|
13
|
+
function normalizeUpdated(...values) {
|
|
14
|
+
for (const value of values) {
|
|
15
|
+
if (typeof value === 'string') {
|
|
16
|
+
const trimmed = value.trim();
|
|
17
|
+
if (trimmed.length > 0)
|
|
18
|
+
return trimmed;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
export function getConfluencePageHumanReadable(page) {
|
|
24
|
+
return normalizeString(page.title ?? undefined);
|
|
25
|
+
}
|
|
26
|
+
export function getConfluenceSpaceHumanReadable(space) {
|
|
27
|
+
return normalizeString(space.name ?? undefined) ?? normalizeString(space.key ?? undefined);
|
|
28
|
+
}
|
|
29
|
+
export function confluencePageIndexRow(page) {
|
|
30
|
+
return {
|
|
31
|
+
id: page.id,
|
|
32
|
+
title: normalizeIndexTitle(page.title),
|
|
33
|
+
updated: normalizeUpdated(page.version?.createdAt, page.createdAt),
|
|
34
|
+
spaceId: normalizeIndexTitle(page.spaceId),
|
|
35
|
+
status: normalizeIndexTitle(page.status),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function confluenceSpaceIndexRow(space) {
|
|
39
|
+
return {
|
|
40
|
+
id: space.id,
|
|
41
|
+
title: normalizeIndexTitle(space.name) || normalizeIndexTitle(space.key),
|
|
42
|
+
updated: normalizeUpdated(space.createdAt),
|
|
43
|
+
key: normalizeIndexTitle(space.key),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
5
46
|
export function resolveConfluenceReadRequest(path) {
|
|
6
47
|
const normalized = normalizePath(path);
|
|
7
48
|
if (normalized === '/confluence/pages' || normalized === '/confluence/pages/') {
|
package/dist/queries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
|
package/dist/resources.js
CHANGED
|
@@ -3,7 +3,7 @@ export const resources = [
|
|
|
3
3
|
name: "pages",
|
|
4
4
|
path: "/confluence/pages",
|
|
5
5
|
pathPattern: /^\/confluence\/pages(?:\/[^\/]+(?:\.json)?)?$/,
|
|
6
|
-
idPattern: /^(?:[A-Za-z0-9_.~-]
|
|
6
|
+
idPattern: /^(?:[A-Za-z0-9_.~-]+(?:--|__))?\d+$/,
|
|
7
7
|
schema: "discovery/confluence/pages/.schema.json",
|
|
8
8
|
createExample: "discovery/confluence/pages/.create.example.json",
|
|
9
9
|
},
|
|
@@ -11,7 +11,7 @@ export const resources = [
|
|
|
11
11
|
name: "pages",
|
|
12
12
|
path: "/confluence/spaces/{spaceIdOrKey}/pages",
|
|
13
13
|
pathPattern: /^\/confluence\/spaces\/[^\/]+\/pages(?:\/[^\/]+(?:\.json)?)?$/,
|
|
14
|
-
idPattern: /^(?:[A-Za-z0-9_.~-]
|
|
14
|
+
idPattern: /^(?:[A-Za-z0-9_.~-]+(?:--|__))?\d+$/,
|
|
15
15
|
schema: "discovery/confluence/spaces/{spaceIdOrKey}/pages/.schema.json",
|
|
16
16
|
createExample: "discovery/confluence/spaces/{spaceIdOrKey}/pages/.create.example.json",
|
|
17
17
|
},
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,qCAAqC;QAChD,MAAM,EAAE,yCAAyC;QACjD,aAAa,EAAE,iDAAiD;KACjE;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,+DAA+D;QAC5E,SAAS,EAAE,qCAAqC;QAChD,MAAM,EAAE,+DAA+D;QACvE,aAAa,EAAE,uEAAuE;KACvF;CACkD,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { BulkWriteFile, ConnectionProvider, ProxyRequest, ProxyResponse } from '@relayfile/sdk';
|
|
2
2
|
export declare const CONFLUENCE_PROVIDER_NAME = "confluence";
|
|
3
3
|
export declare const CONFLUENCE_PATH_ROOT = "/confluence";
|
|
4
|
+
export declare const CONFLUENCE_API_PAGES_ROUTE = "/wiki/api/v2/pages";
|
|
4
5
|
export declare const CONFLUENCE_DEFAULT_PAGE_SIZE = 100;
|
|
5
6
|
export type JsonPrimitive = boolean | number | null | string;
|
|
6
7
|
export type JsonValue = JsonArray | JsonObject | JsonPrimitive;
|
|
@@ -93,9 +94,17 @@ export interface DeleteFileInput {
|
|
|
93
94
|
workspaceId: string;
|
|
94
95
|
path: string;
|
|
95
96
|
}
|
|
97
|
+
export interface ReadFileInput {
|
|
98
|
+
workspaceId: string;
|
|
99
|
+
path: string;
|
|
100
|
+
}
|
|
101
|
+
export interface ReadFileResult {
|
|
102
|
+
content: string;
|
|
103
|
+
}
|
|
96
104
|
export interface RelayFileClientLike {
|
|
97
105
|
writeFile(input: WriteFileInput): Promise<WriteFileResult | void>;
|
|
98
106
|
deleteFile?(input: DeleteFileInput): Promise<void> | void;
|
|
107
|
+
readFile?(input: ReadFileInput): Promise<ReadFileResult | null | undefined>;
|
|
99
108
|
}
|
|
100
109
|
export interface ConfluenceNormalizedEvent {
|
|
101
110
|
provider: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ConfluenceNormalizedEvent } from './types.js';
|
|
2
|
+
export declare const CONFLUENCE_PROVIDER = "confluence";
|
|
3
|
+
export declare const CONFLUENCE_SIGNATURE_HEADER = "x-atlassian-webhook-identifier";
|
|
4
|
+
export declare const CONFLUENCE_EVENT_HEADER = "x-atlassian-webhook-event";
|
|
5
|
+
export declare const CONFLUENCE_DELIVERY_HEADER = "x-atlassian-webhook-delivery";
|
|
6
|
+
type ConfluenceRecord = Record<string, unknown>;
|
|
7
|
+
type HeaderValue = boolean | number | readonly string[] | string | null | undefined;
|
|
8
|
+
export type ConfluenceWebhookHeaders = Headers | Iterable<readonly [string, string]> | Record<string, HeaderValue>;
|
|
9
|
+
export interface ConfluenceWebhookConnectionMetadata {
|
|
10
|
+
connectionId?: string;
|
|
11
|
+
deliveryId?: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
providerConfigKey?: string;
|
|
14
|
+
requestId?: string;
|
|
15
|
+
signature?: string;
|
|
16
|
+
webhookId?: string;
|
|
17
|
+
webhookTimestamp?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ConfluenceWebhookSignatureValidationResult {
|
|
20
|
+
expectedSignature?: string;
|
|
21
|
+
ok: boolean;
|
|
22
|
+
reason?: 'invalid-signature' | 'malformed-signature' | 'missing-secret' | 'missing-signature';
|
|
23
|
+
receivedSignature?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ConfluenceWebhookTimestampValidationResult {
|
|
26
|
+
driftMs?: number;
|
|
27
|
+
ok: boolean;
|
|
28
|
+
reason?: 'missing-timestamp' | 'stale-timestamp';
|
|
29
|
+
webhookTimestamp?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Normalize a Confluence webhook payload into the adapter's
|
|
33
|
+
* `ConfluenceNormalizedEvent` shape. The Atlassian webhook contract varies
|
|
34
|
+
* between Cloud Connect apps and Forge webhooks; this normalizer pulls
|
|
35
|
+
* `webhookEvent` or `eventType` from the envelope and resolves the underlying
|
|
36
|
+
* object id from `page.id` / `space.id` / `content.id`. Callers in the cloud
|
|
37
|
+
* webhook router should pass headers; everything else falls back to safe
|
|
38
|
+
* defaults so the normalizer never crashes on partial payloads.
|
|
39
|
+
*
|
|
40
|
+
* NOTE: HMAC signing semantics for Confluence Connect/Forge webhooks are
|
|
41
|
+
* complex (JWT-based for Connect; signed query secret for Forge) and the
|
|
42
|
+
* upstream cloud handler does not validate signatures today. The
|
|
43
|
+
* `validateConfluenceWebhookSignature` helper below implements the same
|
|
44
|
+
* `sha256` HMAC contract Linear uses so it can be wired up symmetrically
|
|
45
|
+
* once Confluence-side signing is enabled — until then the cloud-side
|
|
46
|
+
* handler should skip signature validation.
|
|
47
|
+
*/
|
|
48
|
+
export declare function normalizeConfluenceWebhook(rawPayload: unknown, headers?: ConfluenceWebhookHeaders): ConfluenceNormalizedEvent;
|
|
49
|
+
export declare function parseConfluenceWebhookPayload(rawPayload: unknown): ConfluenceRecord;
|
|
50
|
+
export declare function extractConfluenceEventType(payload: unknown, headers?: ConfluenceWebhookHeaders): string;
|
|
51
|
+
export declare function extractConfluenceObjectType(payload: unknown, headers?: ConfluenceWebhookHeaders, resolvedEventType?: string): string;
|
|
52
|
+
export declare function extractConfluenceObjectId(payload: unknown, objectType?: string): string;
|
|
53
|
+
export declare function extractConfluenceConnectionMetadata(payload: unknown, headers?: ConfluenceWebhookHeaders): ConfluenceWebhookConnectionMetadata;
|
|
54
|
+
export declare function computeConfluenceWebhookSignature(rawPayload: unknown, secret: string): string;
|
|
55
|
+
export declare function validateConfluenceWebhookSignature(rawPayload: unknown, headers: ConfluenceWebhookHeaders, secret: string): ConfluenceWebhookSignatureValidationResult;
|
|
56
|
+
export declare function assertValidConfluenceWebhookSignature(rawPayload: unknown, headers: ConfluenceWebhookHeaders, secret: string): void;
|
|
57
|
+
export declare function validateConfluenceWebhookTimestamp(payload: unknown, toleranceMs?: number, now?: number): ConfluenceWebhookTimestampValidationResult;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=webhook-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-normalizer.d.ts","sourceRoot":"","sources":["../src/webhook-normalizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEtF,eAAO,MAAM,mBAAmB,eAA2B,CAAC;AAC5D,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAC5E,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AA8DzE,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpF,MAAM,MAAM,wBAAwB,GAChC,OAAO,GACP,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhC,MAAM,WAAW,mCAAmC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,0CAA0C;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0CAA0C;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,OAAO,EACnB,OAAO,GAAE,wBAA6B,GACrC,yBAAyB,CAqD3B;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,CAMnF;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAmCR;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,wBAA6B,EACtC,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAuBR;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAevF;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,wBAA6B,GACrC,mCAAmC,CAyErC;AAED,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ7F;AAED,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,MAAM,GACb,0CAA0C,CAgC5C;AAED,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,MAAM,GACb,IAAI,CAON;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,WAAW,SAAS,EACpB,GAAG,SAAa,GACf,0CAA0C,CAqB5C"}
|