@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,4 +1,4 @@
|
|
|
1
|
-
import { computeConfluencePath, confluencePagePath, confluenceSpacePath, } from './path-mapper.js';
|
|
1
|
+
import { computeConfluencePath, confluencePageByIdAliasPath, confluencePageByParentAliasPath, confluencePageBySpaceAliasPath, confluencePageByStatePath, confluencePageByTitleAliasPath, confluencePagePath, confluenceSpaceByIdAliasPath, confluenceSpaceByKeyAliasPath, confluenceSpaceByTitleAliasPath, confluenceSpacePath, } from './path-mapper.js';
|
|
2
2
|
import { CONFLUENCE_PROVIDER_NAME, } from './types.js';
|
|
3
3
|
import { resolveConfluenceWritebackRequest } from './writeback.js';
|
|
4
4
|
const JSON_CONTENT_TYPE = 'application/json; charset=utf-8';
|
|
@@ -64,30 +64,19 @@ export class ConfluenceAdapter {
|
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
async ingestWebhook(workspaceId, event) {
|
|
67
|
+
let normalized;
|
|
68
|
+
let canonicalPath;
|
|
69
|
+
let aliasPaths;
|
|
70
|
+
let isDelete;
|
|
71
|
+
let semantics;
|
|
72
|
+
let content;
|
|
67
73
|
try {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
const writeResult = await this.client.writeFile({
|
|
77
|
-
workspaceId,
|
|
78
|
-
path,
|
|
79
|
-
content: this.renderContent(workspaceId, normalized, this.isDeleteEvent(normalized)),
|
|
80
|
-
contentType: JSON_CONTENT_TYPE,
|
|
81
|
-
semantics: this.computeSemantics(normalized.objectType, normalized.objectId, normalized.payload),
|
|
82
|
-
});
|
|
83
|
-
const counts = inferWriteCounts(writeResult, this.isDeleteEvent(normalized));
|
|
84
|
-
return {
|
|
85
|
-
filesWritten: counts.filesWritten,
|
|
86
|
-
filesUpdated: counts.filesUpdated,
|
|
87
|
-
filesDeleted: counts.filesDeleted,
|
|
88
|
-
paths: [path],
|
|
89
|
-
errors: [],
|
|
90
|
-
};
|
|
74
|
+
normalized = this.normalizeEvent(event);
|
|
75
|
+
canonicalPath = this.pathForEvent(normalized);
|
|
76
|
+
aliasPaths = this.aliasPathsForEvent(normalized);
|
|
77
|
+
isDelete = this.isDeleteEvent(normalized);
|
|
78
|
+
semantics = this.computeSemantics(normalized.objectType, normalized.objectId, normalized.payload);
|
|
79
|
+
content = this.renderContent(workspaceId, normalized, isDelete);
|
|
91
80
|
}
|
|
92
81
|
catch (error) {
|
|
93
82
|
return {
|
|
@@ -98,6 +87,194 @@ export class ConfluenceAdapter {
|
|
|
98
87
|
errors: [{ path: '', error: error instanceof Error ? error.message : String(error) }],
|
|
99
88
|
};
|
|
100
89
|
}
|
|
90
|
+
const targetPaths = [canonicalPath, ...aliasPaths];
|
|
91
|
+
if (isDelete) {
|
|
92
|
+
// Best-effort delete of every known path. Each file is independent
|
|
93
|
+
// (canonical bytes are duplicated to each alias), so a 404/transient
|
|
94
|
+
// error on one path must not skip the others — that's how callers
|
|
95
|
+
// end up with half-deleted records that the next sync writes over.
|
|
96
|
+
return this.fanoutDelete(workspaceId, targetPaths);
|
|
97
|
+
}
|
|
98
|
+
// Reconciliation: if the object was previously written, the prior alias
|
|
99
|
+
// set may differ from the new one (rename, status change, parent move,
|
|
100
|
+
// etc.). Read the stable by-id alias to recover the prior payload, then
|
|
101
|
+
// delete any aliases that no longer apply. The by-id alias is keyed only
|
|
102
|
+
// on objectId so it survives every other field change and is the right
|
|
103
|
+
// anchor for "was this record materialized before?".
|
|
104
|
+
const stalePaths = await this.computeStalePaths(workspaceId, normalized, targetPaths);
|
|
105
|
+
return this.fanoutWrite(workspaceId, targetPaths, content, semantics, isDelete, stalePaths);
|
|
106
|
+
}
|
|
107
|
+
// Per-path try/catch so one failure doesn't abandon the rest of the fan-out.
|
|
108
|
+
// Errors are accumulated and returned in `IngestResult.errors`; callers can
|
|
109
|
+
// re-attempt only the failed paths instead of having to re-derive the full
|
|
110
|
+
// set. We deliberately don't roll back successful writes on a later error —
|
|
111
|
+
// best-effort rollback can cascade failures and cloud's sync is idempotent
|
|
112
|
+
// (the next event for the same id will reconcile via `computeStalePaths`).
|
|
113
|
+
async fanoutDelete(workspaceId, paths) {
|
|
114
|
+
let filesDeleted = 0;
|
|
115
|
+
const errors = [];
|
|
116
|
+
const succeeded = [];
|
|
117
|
+
if (!this.client.deleteFile) {
|
|
118
|
+
return {
|
|
119
|
+
filesWritten: 0,
|
|
120
|
+
filesUpdated: 0,
|
|
121
|
+
filesDeleted: 0,
|
|
122
|
+
paths,
|
|
123
|
+
errors: paths.map((path) => ({ path, error: 'deleteFile not supported by client' })),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
for (const path of paths) {
|
|
127
|
+
try {
|
|
128
|
+
await this.client.deleteFile({ workspaceId, path });
|
|
129
|
+
filesDeleted += 1;
|
|
130
|
+
succeeded.push(path);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
errors.push({ path, error: error instanceof Error ? error.message : String(error) });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return { filesWritten: 0, filesUpdated: 0, filesDeleted, paths: succeeded, errors };
|
|
137
|
+
}
|
|
138
|
+
async fanoutWrite(workspaceId, paths, content, semantics, isDelete, stalePaths) {
|
|
139
|
+
let filesWritten = 0;
|
|
140
|
+
let filesUpdated = 0;
|
|
141
|
+
let filesDeleted = 0;
|
|
142
|
+
const errors = [];
|
|
143
|
+
const succeeded = [];
|
|
144
|
+
// Reconciliation deletes first. If a stale path delete fails we log the
|
|
145
|
+
// error and continue — stale aliases are non-fatal (functional state is
|
|
146
|
+
// still correct, just bloated), and we want the canonical write to
|
|
147
|
+
// proceed so the new content is visible.
|
|
148
|
+
if (stalePaths.length > 0 && this.client.deleteFile) {
|
|
149
|
+
for (const path of stalePaths) {
|
|
150
|
+
try {
|
|
151
|
+
await this.client.deleteFile({ workspaceId, path });
|
|
152
|
+
filesDeleted += 1;
|
|
153
|
+
succeeded.push(path);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
errors.push({ path, error: error instanceof Error ? error.message : String(error) });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
for (const path of paths) {
|
|
161
|
+
try {
|
|
162
|
+
const result = await this.client.writeFile({
|
|
163
|
+
workspaceId,
|
|
164
|
+
path,
|
|
165
|
+
content,
|
|
166
|
+
contentType: JSON_CONTENT_TYPE,
|
|
167
|
+
semantics,
|
|
168
|
+
});
|
|
169
|
+
const counts = inferWriteCounts(result, isDelete);
|
|
170
|
+
filesWritten += counts.filesWritten;
|
|
171
|
+
filesUpdated += counts.filesUpdated;
|
|
172
|
+
filesDeleted += counts.filesDeleted;
|
|
173
|
+
succeeded.push(path);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
errors.push({ path, error: error instanceof Error ? error.message : String(error) });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return { filesWritten, filesUpdated, filesDeleted, paths: succeeded, errors };
|
|
180
|
+
}
|
|
181
|
+
// Compute the set of alias/canonical paths that were emitted on a prior
|
|
182
|
+
// write but no longer apply after this update. Requires `readFile` on the
|
|
183
|
+
// client; when absent (legacy clients), returns an empty array and the
|
|
184
|
+
// adapter degrades to "no reconciliation" (matches pre-#69 behavior).
|
|
185
|
+
// Read failures (404, network, parse) are non-fatal — we'd rather leave
|
|
186
|
+
// stale aliases behind than block the canonical write on a stat call.
|
|
187
|
+
async computeStalePaths(workspaceId, normalized, newPaths) {
|
|
188
|
+
if (typeof this.client.readFile !== 'function')
|
|
189
|
+
return [];
|
|
190
|
+
const byIdPath = normalized.objectType === 'page'
|
|
191
|
+
? confluencePageByIdAliasPath(normalized.objectId)
|
|
192
|
+
: normalized.objectType === 'space'
|
|
193
|
+
? confluenceSpaceByIdAliasPath(normalized.objectId)
|
|
194
|
+
: null;
|
|
195
|
+
if (!byIdPath)
|
|
196
|
+
return [];
|
|
197
|
+
let priorPayload = null;
|
|
198
|
+
try {
|
|
199
|
+
const prior = await this.client.readFile({ workspaceId, path: byIdPath });
|
|
200
|
+
if (!prior || typeof prior.content !== 'string')
|
|
201
|
+
return [];
|
|
202
|
+
const wrapper = JSON.parse(prior.content);
|
|
203
|
+
if (!isRecord(wrapper) || !isRecord(wrapper.payload))
|
|
204
|
+
return [];
|
|
205
|
+
priorPayload = wrapper.payload;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return [];
|
|
209
|
+
}
|
|
210
|
+
const priorEvent = {
|
|
211
|
+
provider: CONFLUENCE_PROVIDER_NAME,
|
|
212
|
+
eventType: `${normalized.objectType}.reconcile`,
|
|
213
|
+
objectType: normalized.objectType,
|
|
214
|
+
objectId: normalized.objectId,
|
|
215
|
+
payload: priorPayload,
|
|
216
|
+
};
|
|
217
|
+
const priorCanonical = this.pathForEvent(priorEvent);
|
|
218
|
+
const priorAliases = this.aliasPathsForEvent(priorEvent);
|
|
219
|
+
const priorPaths = new Set([priorCanonical, ...priorAliases]);
|
|
220
|
+
const currentPaths = new Set(newPaths);
|
|
221
|
+
const stale = [];
|
|
222
|
+
for (const p of priorPaths) {
|
|
223
|
+
if (!currentPaths.has(p))
|
|
224
|
+
stale.push(p);
|
|
225
|
+
}
|
|
226
|
+
return stale;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Returns the by-* alias paths that should be written alongside the
|
|
230
|
+
* canonical record for an event. Aliases store the same bytes as the
|
|
231
|
+
* canonical path so any one of them resolves to the same JSON. Callers
|
|
232
|
+
* doing bulk materialization (e.g. `materializePageFiles`) reuse this so
|
|
233
|
+
* write-path and read-path stay symmetrical.
|
|
234
|
+
*
|
|
235
|
+
* Collision handling: `by-title` uses the canonical slugifier; when two
|
|
236
|
+
* pages share a title in the same scope, the second write wins (Confluence
|
|
237
|
+
* agents almost never lean on by-title for round-trip, so we keep the
|
|
238
|
+
* primary alias collision-free instead of forcing every reader to know the
|
|
239
|
+
* hash suffix). Callers that need the disambiguated form can compute it
|
|
240
|
+
* explicitly via `confluencePageByTitleAliasPath(title, id, true)`.
|
|
241
|
+
*/
|
|
242
|
+
aliasPathsForEvent(event) {
|
|
243
|
+
const paths = [];
|
|
244
|
+
const id = event.objectId;
|
|
245
|
+
if (event.objectType === 'page') {
|
|
246
|
+
paths.push(confluencePageByIdAliasPath(id));
|
|
247
|
+
const title = readString(event.payload.title);
|
|
248
|
+
if (title && slugifies(title)) {
|
|
249
|
+
paths.push(confluencePageByTitleAliasPath(title, id));
|
|
250
|
+
}
|
|
251
|
+
const status = readString(event.payload.status);
|
|
252
|
+
if (status) {
|
|
253
|
+
paths.push(confluencePageByStatePath(status, id));
|
|
254
|
+
}
|
|
255
|
+
const spaceId = readString(event.payload.spaceId);
|
|
256
|
+
if (spaceId) {
|
|
257
|
+
paths.push(confluencePageBySpaceAliasPath(spaceId, id));
|
|
258
|
+
}
|
|
259
|
+
const parentId = readString(event.payload.parentId);
|
|
260
|
+
if (parentId) {
|
|
261
|
+
paths.push(confluencePageByParentAliasPath(parentId, id));
|
|
262
|
+
}
|
|
263
|
+
return paths;
|
|
264
|
+
}
|
|
265
|
+
if (event.objectType === 'space') {
|
|
266
|
+
paths.push(confluenceSpaceByIdAliasPath(id));
|
|
267
|
+
const name = readString(event.payload.name) ?? readString(event.payload.title);
|
|
268
|
+
if (name && slugifies(name)) {
|
|
269
|
+
paths.push(confluenceSpaceByTitleAliasPath(name, id));
|
|
270
|
+
}
|
|
271
|
+
const key = readString(event.payload.key);
|
|
272
|
+
if (key) {
|
|
273
|
+
paths.push(confluenceSpaceByKeyAliasPath(key));
|
|
274
|
+
}
|
|
275
|
+
return paths;
|
|
276
|
+
}
|
|
277
|
+
return paths;
|
|
101
278
|
}
|
|
102
279
|
writeBack(path, content) {
|
|
103
280
|
return resolveConfluenceWritebackRequest(path, content);
|
|
@@ -124,6 +301,39 @@ export class ConfluenceAdapter {
|
|
|
124
301
|
},
|
|
125
302
|
};
|
|
126
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Materialize a page into the canonical path plus its by-* alias paths.
|
|
306
|
+
* Callers performing bulk sync (cloud full-resync) should iterate the
|
|
307
|
+
* returned `paths` and write the same `payload` bytes to each — that's
|
|
308
|
+
* how the runtime contract treats aliases (duplicated bytes, single
|
|
309
|
+
* source of truth at the canonical path).
|
|
310
|
+
*/
|
|
311
|
+
materializePageFiles(page) {
|
|
312
|
+
const canonical = this.materializePage(page);
|
|
313
|
+
const aliases = this.aliasPathsForEvent({
|
|
314
|
+
provider: CONFLUENCE_PROVIDER_NAME,
|
|
315
|
+
eventType: 'page.synced',
|
|
316
|
+
objectType: 'page',
|
|
317
|
+
objectId: page.id,
|
|
318
|
+
payload: page,
|
|
319
|
+
});
|
|
320
|
+
return { paths: [canonical.path, ...aliases], payload: canonical.payload };
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Materialize a space into the canonical path plus its by-* alias paths.
|
|
324
|
+
* See {@link materializePageFiles} for the bulk-sync contract.
|
|
325
|
+
*/
|
|
326
|
+
materializeSpaceFiles(space) {
|
|
327
|
+
const canonical = this.materializeSpace(space);
|
|
328
|
+
const aliases = this.aliasPathsForEvent({
|
|
329
|
+
provider: CONFLUENCE_PROVIDER_NAME,
|
|
330
|
+
eventType: 'space.synced',
|
|
331
|
+
objectType: 'space',
|
|
332
|
+
objectId: space.id,
|
|
333
|
+
payload: space,
|
|
334
|
+
});
|
|
335
|
+
return { paths: [canonical.path, ...aliases], payload: canonical.payload };
|
|
336
|
+
}
|
|
127
337
|
normalizeEvent(event) {
|
|
128
338
|
if (isConfluenceNormalizedEvent(event))
|
|
129
339
|
return event;
|
|
@@ -208,6 +418,17 @@ function readString(value) {
|
|
|
208
418
|
function isRecord(value) {
|
|
209
419
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
210
420
|
}
|
|
421
|
+
/**
|
|
422
|
+
* Returns true when the input contains enough alphanumeric content for the
|
|
423
|
+
* shared alias slugifier to produce a non-fallback result. We use this to
|
|
424
|
+
* skip emitting `by-title/untitled.json` aliases that would collide for
|
|
425
|
+
* every emoji-only / punctuation-only title — the by-id alias still resolves
|
|
426
|
+
* those records. Mirrors the NFKD + combining-mark strip from `alias-slug.ts`.
|
|
427
|
+
*/
|
|
428
|
+
function slugifies(value) {
|
|
429
|
+
const normalized = value.normalize('NFKD').replace(/[̀-ͯ]/g, '');
|
|
430
|
+
return /[a-zA-Z0-9]/u.test(normalized);
|
|
431
|
+
}
|
|
211
432
|
function isConfluenceNormalizedEvent(value) {
|
|
212
433
|
return (isRecord(value) &&
|
|
213
434
|
value.provider === CONFLUENCE_PROVIDER_NAME &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence-adapter.js","sourceRoot":"","sources":["../src/confluence-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"confluence-adapter.js","sourceRoot":"","sources":["../src/confluence-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ConfluencePageIndexRow, ConfluenceSpaceIndexRow } from './queries.js';
|
|
2
|
+
export type ConfluenceIndexBucket = 'pages' | 'spaces';
|
|
3
|
+
export interface ConfluenceIndexFile {
|
|
4
|
+
path: string;
|
|
5
|
+
contentType: 'application/json; charset=utf-8';
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildConfluenceIndexFile(bucket: 'pages', rows: ConfluencePageIndexRow[]): ConfluenceIndexFile;
|
|
9
|
+
export declare function buildConfluenceIndexFile(bucket: 'spaces', rows: ConfluenceSpaceIndexRow[]): ConfluenceIndexFile;
|
|
10
|
+
//# sourceMappingURL=index-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-emitter.d.ts","sourceRoot":"","sources":["../src/index-emitter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA0B,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5G,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,iCAAiC,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,sBAAsB,EAAE,GAC7B,mBAAmB,CAAC;AACvB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,uBAAuB,EAAE,GAC9B,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { confluencePagesIndexPath, confluenceSpacesIndexPath, } from './path-mapper.js';
|
|
2
|
+
export function buildConfluenceIndexFile(bucket, rows) {
|
|
3
|
+
const sortedRows = [...rows].sort(compareIndexRows());
|
|
4
|
+
return {
|
|
5
|
+
path: indexPathForBucket(bucket),
|
|
6
|
+
contentType: 'application/json; charset=utf-8',
|
|
7
|
+
content: `${JSON.stringify(sortedRows)}\n`,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function indexPathForBucket(bucket) {
|
|
11
|
+
switch (bucket) {
|
|
12
|
+
case 'pages':
|
|
13
|
+
return confluencePagesIndexPath();
|
|
14
|
+
case 'spaces':
|
|
15
|
+
return confluenceSpacesIndexPath();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function compareIndexRows() {
|
|
19
|
+
return (left, right) => {
|
|
20
|
+
if (left.updated !== right.updated) {
|
|
21
|
+
return right.updated.localeCompare(left.updated);
|
|
22
|
+
}
|
|
23
|
+
return left.id.localeCompare(right.id);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-emitter.js","sourceRoot":"","sources":["../src/index-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAmB1B,MAAM,UAAU,wBAAwB,CACtC,MAA6B,EAC7B,IAAmC;IAEnC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtD,OAAO;QACL,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAChC,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA6B;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,wBAAwB,EAAE,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,yBAAyB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,IAA4B,EAAE,KAA6B,EAAU,EAAE;QAC7E,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
export { ConfluenceAdapter, } from './confluence-adapter.js';
|
|
2
2
|
export type { ConnectionProvider, IngestError, IngestResult, ProxyRequest, ProxyResponse, } from './confluence-adapter.js';
|
|
3
|
-
export { CONFLUENCE_OBJECT_TYPES, computeConfluencePath, confluencePagePath, confluenceSpacePath, encodeConfluencePathSegment, extractConfluenceIdFromPathSegment, normalizeConfluenceObjectType, } from './path-mapper.js';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
3
|
+
export { CONFLUENCE_OBJECT_TYPES, CONFLUENCE_CANONICAL_PAGE_STATUSES, CONFLUENCE_PATH_ROOT, computeConfluencePath, confluenceByIdAliasPath, confluenceByTitleAliasPath, confluencePageByIdAliasPath, confluencePageByParentAliasPath, confluencePageBySpaceAliasPath, confluencePageByStatePath, confluencePageByTitleAliasPath, confluencePagePath, confluencePagesIndexPath, confluenceProviderRootIndexPath, confluenceSpaceByIdAliasPath, confluenceSpaceByKeyAliasPath, confluenceSpaceByTitleAliasPath, confluenceSpacePath, confluenceSpacesIndexPath, encodeConfluencePathSegment, extractConfluenceIdFromPathSegment, nameWithId, normalizeConfluenceObjectType, normalizeNangoConfluenceModel, parseNameWithId, slugifyStatusName, tryNormalizeConfluenceObjectType, } from './path-mapper.js';
|
|
4
|
+
export type { ConfluencePathObjectType, NameWithIdOptions, ParseNameWithIdResult, } from './path-mapper.js';
|
|
5
|
+
export { aliasCollisionSuffix, slugifyAlias, } from './alias-slug.js';
|
|
6
|
+
export { confluenceLayoutPromptFile, CONFLUENCE_LAYOUT_PROMPT, } from './layout-prompt.js';
|
|
7
|
+
export { buildConfluenceIndexFile, } from './index-emitter.js';
|
|
8
|
+
export type { ConfluenceIndexBucket, ConfluenceIndexFile, } from './index-emitter.js';
|
|
9
|
+
export { CONFLUENCE_API_SPACES_ROUTE, confluencePageIndexRow, confluenceSpaceIndexRow, getConfluencePageHumanReadable, getConfluenceSpaceHumanReadable, resolveConfluenceReadRequest, } from './queries.js';
|
|
10
|
+
export type { ConfluenceBaseIndexRow, ConfluencePageIndexRow, ConfluenceSpaceIndexRow, } from './queries.js';
|
|
11
|
+
export { CONFLUENCE_API_PAGES_ROUTE, } from './types.js';
|
|
6
12
|
export type * from './types.js';
|
|
13
|
+
export { ReadOnlyFieldError, resolveConfluenceDeleteRequest, resolveConfluenceWritebackRequest, } from './writeback.js';
|
|
14
|
+
export { assertValidConfluenceWebhookSignature, computeConfluenceWebhookSignature, CONFLUENCE_DELIVERY_HEADER, CONFLUENCE_EVENT_HEADER, CONFLUENCE_PROVIDER, CONFLUENCE_SIGNATURE_HEADER, extractConfluenceConnectionMetadata, extractConfluenceEventType, extractConfluenceObjectId, extractConfluenceObjectType, normalizeConfluenceWebhook, parseConfluenceWebhookPayload, validateConfluenceWebhookSignature, validateConfluenceWebhookTimestamp, } from './webhook-normalizer.js';
|
|
15
|
+
export type { ConfluenceWebhookConnectionMetadata, ConfluenceWebhookHeaders, ConfluenceWebhookSignatureValidationResult, ConfluenceWebhookTimestampValidationResult, } from './webhook-normalizer.js';
|
|
7
16
|
export * from './resources.js';
|
|
8
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,uBAAuB,EACvB,kCAAkC,EAClC,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,kBAAkB,EAClB,wBAAwB,EACxB,+BAA+B,EAC/B,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,UAAU,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qCAAqC,EACrC,iCAAiC,EACjC,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,mCAAmC,EACnC,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,mCAAmC,EACnC,wBAAwB,EACxB,0CAA0C,EAC1C,0CAA0C,GAC3C,MAAM,yBAAyB,CAAC;AAEjC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export { ConfluenceAdapter, } from './confluence-adapter.js';
|
|
2
|
-
export { CONFLUENCE_OBJECT_TYPES, computeConfluencePath, confluencePagePath, confluenceSpacePath, encodeConfluencePathSegment, extractConfluenceIdFromPathSegment, normalizeConfluenceObjectType, } from './path-mapper.js';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
2
|
+
export { CONFLUENCE_OBJECT_TYPES, CONFLUENCE_CANONICAL_PAGE_STATUSES, CONFLUENCE_PATH_ROOT, computeConfluencePath, confluenceByIdAliasPath, confluenceByTitleAliasPath, confluencePageByIdAliasPath, confluencePageByParentAliasPath, confluencePageBySpaceAliasPath, confluencePageByStatePath, confluencePageByTitleAliasPath, confluencePagePath, confluencePagesIndexPath, confluenceProviderRootIndexPath, confluenceSpaceByIdAliasPath, confluenceSpaceByKeyAliasPath, confluenceSpaceByTitleAliasPath, confluenceSpacePath, confluenceSpacesIndexPath, encodeConfluencePathSegment, extractConfluenceIdFromPathSegment, nameWithId, normalizeConfluenceObjectType, normalizeNangoConfluenceModel, parseNameWithId, slugifyStatusName, tryNormalizeConfluenceObjectType, } from './path-mapper.js';
|
|
3
|
+
export { aliasCollisionSuffix, slugifyAlias, } from './alias-slug.js';
|
|
4
|
+
export { confluenceLayoutPromptFile, CONFLUENCE_LAYOUT_PROMPT, } from './layout-prompt.js';
|
|
5
|
+
export { buildConfluenceIndexFile, } from './index-emitter.js';
|
|
6
|
+
export { CONFLUENCE_API_SPACES_ROUTE, confluencePageIndexRow, confluenceSpaceIndexRow, getConfluencePageHumanReadable, getConfluenceSpaceHumanReadable, resolveConfluenceReadRequest, } from './queries.js';
|
|
7
|
+
export { CONFLUENCE_API_PAGES_ROUTE, } from './types.js';
|
|
8
|
+
export { ReadOnlyFieldError, resolveConfluenceDeleteRequest, resolveConfluenceWritebackRequest, } from './writeback.js';
|
|
9
|
+
export { assertValidConfluenceWebhookSignature, computeConfluenceWebhookSignature, CONFLUENCE_DELIVERY_HEADER, CONFLUENCE_EVENT_HEADER, CONFLUENCE_PROVIDER, CONFLUENCE_SIGNATURE_HEADER, extractConfluenceConnectionMetadata, extractConfluenceEventType, extractConfluenceObjectId, extractConfluenceObjectType, normalizeConfluenceWebhook, parseConfluenceWebhookPayload, validateConfluenceWebhookSignature, validateConfluenceWebhookTimestamp, } from './webhook-normalizer.js';
|
|
5
10
|
export * from './resources.js';
|
|
6
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AASjC,OAAO,EACL,uBAAuB,EACvB,kCAAkC,EAClC,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,kBAAkB,EAClB,wBAAwB,EACxB,+BAA+B,EAC/B,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,UAAU,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,oBAAoB,EACpB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qCAAqC,EACrC,iCAAiC,EACjC,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,mCAAmC,EACnC,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,yBAAyB,CAAC;AAQjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const CONFLUENCE_LAYOUT_PROMPT = "# Confluence Mount Layout\n\nAlways run `ls` before constructing a path. v2 standardizes human-readable leaf names to `<sanitized-title>__<id>`, so consumers should inspect the live directory instead of guessing a filename.\n\n## Tree\n\n`/confluence/LAYOUT.md` is this guide.\n`/confluence/pages/` and `/confluence/spaces/` each own their canonical JSON records plus a sibling `_index.json` and the `by-*` alias subtrees described below.\nSpace-scoped pages also materialize under `/confluence/spaces/<spaceId>/pages/<title>__<pageId>.json` so an agent can resolve a page by its containing space.\n\n## Indexes\n\n`/confluence/pages/_index.json` rows use:\n\n```json\n{ \"id\": \"<id>\", \"title\": \"<human-readable>\", \"updated\": \"<iso8601>\", \"spaceId\": \"<spaceId>\", \"status\": \"<page status>\" }\n```\n\n`/confluence/spaces/_index.json` rows use:\n\n```json\n{ \"id\": \"<id>\", \"title\": \"<human-readable>\", \"updated\": \"<iso8601>\", \"key\": \"<space key>\" }\n```\n\n## Page Aliases\n\nEvery page is duplicated into the `by-*` paths below \u2014 they all resolve to identical JSON bytes. Use whichever lookup primitive you have at hand:\n\n- Canonical: `/confluence/pages/<title>__<pageId>.json` (or the space-scoped `/confluence/spaces/<spaceId>/pages/...` variant).\n- By id: `/confluence/pages/by-id/<pageId>.json` \u2014 stable when the title changes.\n- By title: `/confluence/pages/by-title/<sanitized-title>.json` \u2014 last writer wins on title collisions; compute the disambiguated form with `confluencePageByTitleAliasPath(title, id, true)` for guaranteed uniqueness (8-char hex suffix on the id).\n- By state: `/confluence/pages/by-state/<status>/<pageId>.json` \u2014 `current`, `draft`, `archived`, or `trashed` (v2 documents only `current|draft`; archive/trash variants surface in real mounts).\n- By space: `/confluence/pages/by-space/<spaceId>/<pageId>.json` \u2014 flat sibling of the space-scoped canonical tree so `ls` works without slug resolution.\n- By parent: `/confluence/pages/by-parent/<parentId>/<pageId>.json` \u2014 only emitted when `payload.parentId` is present (top-level pages have no parent record).\n\n## Space Aliases\n\n- Canonical: `/confluence/spaces/<name>__<spaceId>.json`.\n- By id: `/confluence/spaces/by-id/<spaceId>.json`.\n- By title: `/confluence/spaces/by-title/<sanitized-name>.json`.\n- By key: `/confluence/spaces/by-key/<KEY>.json` \u2014 the globally-unique human-meaningful space key (e.g. `ENG`). Mirrors the v2 `GET /spaces?keys=` filter.\n\n## JSONL And Querying\n\nConfluence does not emit JSONL in this adapter today. Each page and space is a standalone `.json` record, duplicated verbatim into every alias path it qualifies for.\n\nExamples:\n\n```bash\n# List every page in a space without resolving titles\nls /confluence/pages/by-space/12345/\n\n# Look up a space by its stable Confluence key\njq '.payload | {id, name, homepageId}' /confluence/spaces/by-key/ENG.json\n\n# Iterate drafts pending review\nls /confluence/pages/by-state/draft/\njq '.payload.title' /confluence/pages/by-state/draft/*.json\n\n# Walk a page's children\nls /confluence/pages/by-parent/98765/\njq '.payload | {id, title, status}' /confluence/pages/by-parent/98765/*.json\n\n# Sorted snapshot from the canonical index\njq '.[] | {id, title, status}' /confluence/pages/_index.json\n```\n";
|
|
2
|
+
export declare function confluenceLayoutPromptFile(): {
|
|
3
|
+
path: string;
|
|
4
|
+
contentType: "text/markdown; charset=utf-8";
|
|
5
|
+
content: string;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=layout-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-prompt.d.ts","sourceRoot":"","sources":["../src/layout-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,wxGAkEpC,CAAC;AAEF,wBAAgB,0BAA0B;;;;EAMzC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export const CONFLUENCE_LAYOUT_PROMPT = `# Confluence Mount Layout
|
|
2
|
+
|
|
3
|
+
Always run \`ls\` before constructing a path. v2 standardizes human-readable leaf names to \`<sanitized-title>__<id>\`, so consumers should inspect the live directory instead of guessing a filename.
|
|
4
|
+
|
|
5
|
+
## Tree
|
|
6
|
+
|
|
7
|
+
\`/confluence/LAYOUT.md\` is this guide.
|
|
8
|
+
\`/confluence/pages/\` and \`/confluence/spaces/\` each own their canonical JSON records plus a sibling \`_index.json\` and the \`by-*\` alias subtrees described below.
|
|
9
|
+
Space-scoped pages also materialize under \`/confluence/spaces/<spaceId>/pages/<title>__<pageId>.json\` so an agent can resolve a page by its containing space.
|
|
10
|
+
|
|
11
|
+
## Indexes
|
|
12
|
+
|
|
13
|
+
\`/confluence/pages/_index.json\` rows use:
|
|
14
|
+
|
|
15
|
+
\`\`\`json
|
|
16
|
+
{ "id": "<id>", "title": "<human-readable>", "updated": "<iso8601>", "spaceId": "<spaceId>", "status": "<page status>" }
|
|
17
|
+
\`\`\`
|
|
18
|
+
|
|
19
|
+
\`/confluence/spaces/_index.json\` rows use:
|
|
20
|
+
|
|
21
|
+
\`\`\`json
|
|
22
|
+
{ "id": "<id>", "title": "<human-readable>", "updated": "<iso8601>", "key": "<space key>" }
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
## Page Aliases
|
|
26
|
+
|
|
27
|
+
Every page is duplicated into the \`by-*\` paths below — they all resolve to identical JSON bytes. Use whichever lookup primitive you have at hand:
|
|
28
|
+
|
|
29
|
+
- Canonical: \`/confluence/pages/<title>__<pageId>.json\` (or the space-scoped \`/confluence/spaces/<spaceId>/pages/...\` variant).
|
|
30
|
+
- By id: \`/confluence/pages/by-id/<pageId>.json\` — stable when the title changes.
|
|
31
|
+
- By title: \`/confluence/pages/by-title/<sanitized-title>.json\` — last writer wins on title collisions; compute the disambiguated form with \`confluencePageByTitleAliasPath(title, id, true)\` for guaranteed uniqueness (8-char hex suffix on the id).
|
|
32
|
+
- By state: \`/confluence/pages/by-state/<status>/<pageId>.json\` — \`current\`, \`draft\`, \`archived\`, or \`trashed\` (v2 documents only \`current|draft\`; archive/trash variants surface in real mounts).
|
|
33
|
+
- By space: \`/confluence/pages/by-space/<spaceId>/<pageId>.json\` — flat sibling of the space-scoped canonical tree so \`ls\` works without slug resolution.
|
|
34
|
+
- By parent: \`/confluence/pages/by-parent/<parentId>/<pageId>.json\` — only emitted when \`payload.parentId\` is present (top-level pages have no parent record).
|
|
35
|
+
|
|
36
|
+
## Space Aliases
|
|
37
|
+
|
|
38
|
+
- Canonical: \`/confluence/spaces/<name>__<spaceId>.json\`.
|
|
39
|
+
- By id: \`/confluence/spaces/by-id/<spaceId>.json\`.
|
|
40
|
+
- By title: \`/confluence/spaces/by-title/<sanitized-name>.json\`.
|
|
41
|
+
- By key: \`/confluence/spaces/by-key/<KEY>.json\` — the globally-unique human-meaningful space key (e.g. \`ENG\`). Mirrors the v2 \`GET /spaces?keys=\` filter.
|
|
42
|
+
|
|
43
|
+
## JSONL And Querying
|
|
44
|
+
|
|
45
|
+
Confluence does not emit JSONL in this adapter today. Each page and space is a standalone \`.json\` record, duplicated verbatim into every alias path it qualifies for.
|
|
46
|
+
|
|
47
|
+
Examples:
|
|
48
|
+
|
|
49
|
+
\`\`\`bash
|
|
50
|
+
# List every page in a space without resolving titles
|
|
51
|
+
ls /confluence/pages/by-space/12345/
|
|
52
|
+
|
|
53
|
+
# Look up a space by its stable Confluence key
|
|
54
|
+
jq '.payload | {id, name, homepageId}' /confluence/spaces/by-key/ENG.json
|
|
55
|
+
|
|
56
|
+
# Iterate drafts pending review
|
|
57
|
+
ls /confluence/pages/by-state/draft/
|
|
58
|
+
jq '.payload.title' /confluence/pages/by-state/draft/*.json
|
|
59
|
+
|
|
60
|
+
# Walk a page's children
|
|
61
|
+
ls /confluence/pages/by-parent/98765/
|
|
62
|
+
jq '.payload | {id, title, status}' /confluence/pages/by-parent/98765/*.json
|
|
63
|
+
|
|
64
|
+
# Sorted snapshot from the canonical index
|
|
65
|
+
jq '.[] | {id, title, status}' /confluence/pages/_index.json
|
|
66
|
+
\`\`\`
|
|
67
|
+
`;
|
|
68
|
+
export function confluenceLayoutPromptFile() {
|
|
69
|
+
return {
|
|
70
|
+
path: '/confluence/LAYOUT.md',
|
|
71
|
+
contentType: 'text/markdown; charset=utf-8',
|
|
72
|
+
content: CONFLUENCE_LAYOUT_PROMPT.endsWith('\n') ? CONFLUENCE_LAYOUT_PROMPT : `${CONFLUENCE_LAYOUT_PROMPT}\n`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=layout-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-prompt.js","sourceRoot":"","sources":["../src/layout-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEvC,CAAC;AAEF,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,8BAAuC;QACpD,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,wBAAwB,IAAI;KAC9G,CAAC;AACJ,CAAC"}
|
package/dist/path-mapper.d.ts
CHANGED
|
@@ -1,12 +1,75 @@
|
|
|
1
|
+
import { CONFLUENCE_PATH_ROOT } from './types.js';
|
|
2
|
+
export { CONFLUENCE_PATH_ROOT };
|
|
1
3
|
export declare const CONFLUENCE_OBJECT_TYPES: readonly ["page", "space"];
|
|
2
4
|
export type ConfluencePathObjectType = (typeof CONFLUENCE_OBJECT_TYPES)[number];
|
|
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 declare const CONFLUENCE_CANONICAL_PAGE_STATUSES: readonly ["current", "draft", "archived", "trashed"];
|
|
3
13
|
export declare function encodeConfluencePathSegment(value: string): string;
|
|
14
|
+
export interface NameWithIdOptions {
|
|
15
|
+
existingNames?: Set<string>;
|
|
16
|
+
}
|
|
17
|
+
export interface ParseNameWithIdResult {
|
|
18
|
+
humanReadable: string | null;
|
|
19
|
+
id: string;
|
|
20
|
+
ext: string | null;
|
|
21
|
+
}
|
|
22
|
+
export declare function nameWithId(humanReadable: string | undefined, id: string, opts?: NameWithIdOptions): string;
|
|
23
|
+
export declare function parseNameWithId(filename: string): ParseNameWithIdResult;
|
|
4
24
|
export declare function normalizeConfluenceObjectType(objectType: string): ConfluencePathObjectType;
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
25
|
+
export declare function tryNormalizeConfluenceObjectType(objectType: string): ConfluencePathObjectType | undefined;
|
|
26
|
+
export declare function normalizeNangoConfluenceModel(model: string): ConfluencePathObjectType;
|
|
27
|
+
export declare function slugifyStatusName(status: string): string;
|
|
28
|
+
export declare function confluenceSpacePath(spaceIdOrKey: string, name?: string, opts?: NameWithIdOptions): string;
|
|
29
|
+
export declare function confluencePagePath(pageId: string, title?: string, spaceId?: string, opts?: NameWithIdOptions): string;
|
|
30
|
+
export declare function confluencePagesIndexPath(): string;
|
|
31
|
+
export declare function confluenceSpacesIndexPath(): string;
|
|
32
|
+
export declare function confluenceProviderRootIndexPath(): string;
|
|
33
|
+
export declare function confluencePageByStatePath(status: string, pageId: string): string;
|
|
34
|
+
export declare function confluenceByTitleAliasPath(scope: string, title: string, id: string, colliding?: boolean): string;
|
|
35
|
+
export declare function confluenceByIdAliasPath(scope: string, identifier: string): string;
|
|
36
|
+
export declare function confluencePageByIdAliasPath(id: string): string;
|
|
37
|
+
export declare function confluencePageByTitleAliasPath(title: string, id: string, colliding?: boolean): string;
|
|
38
|
+
export declare function confluenceSpaceByIdAliasPath(id: string): string;
|
|
39
|
+
export declare function confluenceSpaceByTitleAliasPath(title: string, id: string, colliding?: boolean): string;
|
|
40
|
+
/**
|
|
41
|
+
* `by-key/<KEY>.json` resolves a space by its globally-unique Confluence
|
|
42
|
+
* space key (e.g. `ENG`). The v2 `GET /spaces` endpoint accepts `keys=` as a
|
|
43
|
+
* filter so the key is a stable, human-meaningful identifier that agents
|
|
44
|
+
* actually paste — much more useful than the numeric id for spaces. Keys are
|
|
45
|
+
* preserved verbatim (case + punctuation) because Confluence treats them as
|
|
46
|
+
* opaque strings; we only percent-encode for path safety.
|
|
47
|
+
*/
|
|
48
|
+
export declare function confluenceSpaceByKeyAliasPath(spaceKey: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* `by-parent/<parentId>/<pageId>.json` mirrors `by-state` but pivots on the
|
|
51
|
+
* page's parent — the most natural Confluence navigation primitive after the
|
|
52
|
+
* space tree. Pages without a parentId (top-level pages directly under a
|
|
53
|
+
* space's homepage) are not emitted here; consumers should use the canonical
|
|
54
|
+
* space-scoped path instead.
|
|
55
|
+
*/
|
|
56
|
+
export declare function confluencePageByParentAliasPath(parentId: string, pageId: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* `by-space/<spaceId>/<pageId>.json` — flat alias keyed only on the space id
|
|
59
|
+
* so an agent can iterate every page in a space without resolving titles.
|
|
60
|
+
* The space-scoped canonical path `/confluence/spaces/<spaceId>/pages/<slug>__<id>.json`
|
|
61
|
+
* is still the human-friendly entry point; this alias is the deterministic
|
|
62
|
+
* lookup variant readers reach for with `ls`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function confluencePageBySpaceAliasPath(spaceId: string, pageId: string): string;
|
|
7
65
|
export declare function computeConfluencePath(objectType: string, objectId: string, options?: {
|
|
8
66
|
title?: string;
|
|
9
67
|
spaceId?: string;
|
|
10
68
|
}): string;
|
|
69
|
+
/**
|
|
70
|
+
* Decode a Confluence path segment back to its raw identifier. Supports both
|
|
71
|
+
* the v2 `<slug>__<id>` convention (post-PR) and the legacy `<slug>--<id>`
|
|
72
|
+
* convention so existing mounts written before the cutover keep resolving.
|
|
73
|
+
*/
|
|
11
74
|
export declare function extractConfluenceIdFromPathSegment(segment: string): string;
|
|
12
75
|
//# sourceMappingURL=path-mapper.d.ts.map
|