@knpkv/confluence-to-markdown 0.4.1 → 0.5.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.
- package/CHANGELOG.md +26 -0
- package/dist/ConfluenceAuth.d.ts.map +1 -1
- package/dist/ConfluenceAuth.js +22 -12
- package/dist/ConfluenceAuth.js.map +1 -1
- package/dist/ConfluenceClient.d.ts +3 -13
- package/dist/ConfluenceClient.d.ts.map +1 -1
- package/dist/ConfluenceClient.js +70 -34
- package/dist/ConfluenceClient.js.map +1 -1
- package/dist/ConfluenceError.d.ts +12 -12
- package/dist/GitError.d.ts +5 -5
- package/dist/SchemaConverterError.d.ts +3 -3
- package/dist/ast/BlockNode.d.ts +33 -48
- package/dist/ast/BlockNode.d.ts.map +1 -1
- package/dist/ast/BlockNode.js +2 -11
- package/dist/ast/BlockNode.js.map +1 -1
- package/dist/ast/Document.d.ts +2 -30
- package/dist/ast/Document.d.ts.map +1 -1
- package/dist/parsers/ConfluenceParser.d.ts.map +1 -1
- package/dist/parsers/ConfluenceParser.js +12 -7
- package/dist/parsers/ConfluenceParser.js.map +1 -1
- package/dist/parsers/MarkdownParser.js +117 -8
- package/dist/parsers/MarkdownParser.js.map +1 -1
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js +10 -2
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js.map +1 -1
- package/dist/serializers/ConfluenceSerializer.js +9 -0
- package/dist/serializers/ConfluenceSerializer.js.map +1 -1
- package/dist/serializers/MarkdownSerializer.js +49 -9
- package/dist/serializers/MarkdownSerializer.js.map +1 -1
- package/package.json +7 -7
- package/src/ConfluenceAuth.ts +22 -12
- package/src/ConfluenceClient.ts +91 -58
- package/src/ast/BlockNode.ts +65 -21
- package/src/parsers/ConfluenceParser.ts +17 -11
- package/src/parsers/MarkdownParser.ts +156 -16
- package/src/schemas/preprocessing/ConfluencePreprocessor.ts +11 -2
- package/src/serializers/ConfluenceSerializer.ts +21 -1
- package/src/serializers/MarkdownSerializer.ts +60 -10
- package/test/parsers/ConfluenceParser.test.ts +169 -0
|
@@ -132,7 +132,14 @@ const serializeImage = (node) => {
|
|
|
132
132
|
*/
|
|
133
133
|
const serializeTable = (node) => Effect.gen(function* () {
|
|
134
134
|
const lines = [];
|
|
135
|
-
//
|
|
135
|
+
// Markdown tables require a header divider. When the source had no <thead>,
|
|
136
|
+
// emit a synthetic empty header so the table still renders. A leading
|
|
137
|
+
// <!--cf:synth-thead--> marker discriminates it from a legitimate empty
|
|
138
|
+
// header — MarkdownParser strips the marker and drops only that synthetic row,
|
|
139
|
+
// so a real Confluence <thead> with empty <th>s round-trips intact.
|
|
140
|
+
const columnCount = node.header?.cells.length ?? node.rows[0]?.cells.length ?? 0;
|
|
141
|
+
const synthMarker = "<!--cf:synth-thead-->";
|
|
142
|
+
let prefix = "";
|
|
136
143
|
if (node.header) {
|
|
137
144
|
const headerCells = [];
|
|
138
145
|
for (const cell of node.header.cells) {
|
|
@@ -141,6 +148,11 @@ const serializeTable = (node) => Effect.gen(function* () {
|
|
|
141
148
|
lines.push(`| ${headerCells.join(" | ")} |`);
|
|
142
149
|
lines.push(`| ${headerCells.map(() => "---").join(" | ")} |`);
|
|
143
150
|
}
|
|
151
|
+
else if (columnCount > 0) {
|
|
152
|
+
prefix = `${synthMarker}\n\n`;
|
|
153
|
+
lines.push(`| ${Array(columnCount).fill("").join(" | ")} |`);
|
|
154
|
+
lines.push(`| ${Array(columnCount).fill("---").join(" | ")} |`);
|
|
155
|
+
}
|
|
144
156
|
// Body rows
|
|
145
157
|
for (const row of node.rows) {
|
|
146
158
|
const cells = [];
|
|
@@ -149,7 +161,7 @@ const serializeTable = (node) => Effect.gen(function* () {
|
|
|
149
161
|
}
|
|
150
162
|
lines.push(`| ${cells.join(" | ")} |`);
|
|
151
163
|
}
|
|
152
|
-
return lines.join("\n")
|
|
164
|
+
return `${prefix}${lines.join("\n")}`;
|
|
153
165
|
});
|
|
154
166
|
/**
|
|
155
167
|
* Serialize list.
|
|
@@ -197,6 +209,8 @@ const serializeSimpleBlock = (node) => Effect.gen(function* () {
|
|
|
197
209
|
const unsupported = node;
|
|
198
210
|
return unsupported.rawMarkdown || unsupported.rawHtml || "";
|
|
199
211
|
}
|
|
212
|
+
case "List":
|
|
213
|
+
return yield* serializeList(node);
|
|
200
214
|
default:
|
|
201
215
|
return "";
|
|
202
216
|
}
|
|
@@ -228,7 +242,11 @@ const serializeInfoPanel = (node) => Effect.gen(function* () {
|
|
|
228
242
|
return lines.join("\n");
|
|
229
243
|
});
|
|
230
244
|
/**
|
|
231
|
-
* Serialize expand macro
|
|
245
|
+
* Serialize expand macro as a GFM-compatible <details> block.
|
|
246
|
+
*
|
|
247
|
+
* The opening and closing HTML tags are recognised on round-trip by
|
|
248
|
+
* MarkdownParser to rebuild the ExpandMacro AST node. Body content is rendered
|
|
249
|
+
* as ordinary markdown so it shows up in viewers (Obsidian, GitHub, etc.).
|
|
232
250
|
*/
|
|
233
251
|
const serializeExpandMacro = (node) => Effect.gen(function* () {
|
|
234
252
|
const title = node.title || "";
|
|
@@ -237,10 +255,11 @@ const serializeExpandMacro = (node) => Effect.gen(function* () {
|
|
|
237
255
|
const serialized = yield* serializeSimpleBlock(child);
|
|
238
256
|
contentParts.push(serialized);
|
|
239
257
|
}
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
return
|
|
258
|
+
const body = contentParts.join("\n\n");
|
|
259
|
+
const summary = `<summary>${escapeHtml(title)}</summary>`;
|
|
260
|
+
return `<details>\n${summary}\n\n${body}\n\n</details>`;
|
|
243
261
|
});
|
|
262
|
+
const escapeHtml = (s) => s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
244
263
|
/**
|
|
245
264
|
* Serialize TOC macro.
|
|
246
265
|
*/
|
|
@@ -331,8 +350,10 @@ const serializeInlineNode = (node) => Effect.gen(function* () {
|
|
|
331
350
|
// Wrap in HTML comment with URL-encoded values
|
|
332
351
|
return `<!--cf:emoticon:${encodeURIComponent(node.shortname)}|${encodeURIComponent(node.emojiId)}|${encodeURIComponent(node.fallback)}-->`;
|
|
333
352
|
case "UserMention":
|
|
334
|
-
//
|
|
335
|
-
|
|
353
|
+
// Render as a markdown link so the mention is visible in viewers.
|
|
354
|
+
// The #cf-user: URL fragment is the round-trip carrier — MarkdownParser
|
|
355
|
+
// rebuilds the UserMention node when it sees a link with that prefix.
|
|
356
|
+
return `[@${node.accountId}](#cf-user:${encodeURIComponent(node.accountId)})`;
|
|
336
357
|
case "DateTime":
|
|
337
358
|
// Wrap in HTML comment to prevent remark from parsing
|
|
338
359
|
return `<!--cf:date:${node.datetime}-->`;
|
|
@@ -346,8 +367,27 @@ const serializeInlineNode = (node) => Effect.gen(function* () {
|
|
|
346
367
|
const content = yield* serializeInlineNodes(node.children);
|
|
347
368
|
return `<span style="background-color: ${node.backgroundColor};">${content}</span>`;
|
|
348
369
|
}
|
|
349
|
-
case "UnsupportedInline":
|
|
370
|
+
case "UnsupportedInline": {
|
|
371
|
+
// Some inline macros are stored as UnsupportedInline carrying a comment-
|
|
372
|
+
// encoded round-trip marker. Rewrite the round-trippable ones as visible
|
|
373
|
+
// markdown links so they show up in viewers; MarkdownParser reverses this.
|
|
374
|
+
// The raw payload is already URL-encoded (ConfluenceParser uses
|
|
375
|
+
// encodeURIComponent), so we decode the title for human-readable link
|
|
376
|
+
// text and pass the encoded value through to the URL fragment as-is.
|
|
377
|
+
const statusMatch = node.raw.match(/^<!--cf:status:([^;]*);([^;]*)-->$/);
|
|
378
|
+
if (statusMatch) {
|
|
379
|
+
const text = decodeURIComponent(statusMatch[1] ?? "");
|
|
380
|
+
const color = statusMatch[2] ?? "";
|
|
381
|
+
return `[${text}](#cf-status:${color})`;
|
|
382
|
+
}
|
|
383
|
+
const tocMatch = node.raw.match(/^<!--cf:toc:([^;]*);([^;]*)-->$/);
|
|
384
|
+
if (tocMatch) {
|
|
385
|
+
const min = tocMatch[1] ?? "";
|
|
386
|
+
const max = tocMatch[2] ?? "";
|
|
387
|
+
return `[Table of Contents](#cf-toc:${min}:${max})`;
|
|
388
|
+
}
|
|
350
389
|
return node.raw;
|
|
390
|
+
}
|
|
351
391
|
default:
|
|
352
392
|
return "";
|
|
353
393
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownSerializer.js","sourceRoot":"","sources":["../../src/serializers/MarkdownSerializer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownSerializer.js","sourceRoot":"","sources":["../../src/serializers/MarkdownSerializer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AA+BvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAa,EACb,UAA4B,EAAE,EACS,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IAC3C,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QACrD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAElC,mEAAmE;IACnE,IAAI,gBAAgB,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACxD,uCAAuC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC1E,OAAO,GAAG,OAAO,kBAAkB,OAAO,KAAK,CAAA;IACjD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,IAAkB,EAAyC,EAAE,CAC1F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,cAAc;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,kBAAkB,CAAC;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAA;QACJ,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,eAAe;YAClB,OAAO,KAAK,CAAA;QACd,KAAK,OAAO;YACV,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;QAC7B,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACzC,KAAK,kBAAkB;YACrB,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAE/C,cAAc;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACxC,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAC1C,KAAK,UAAU;YACb,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAChC,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,aAAa;YAChB,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEhD;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,gBAAgB,GAAG,CACvB,IAA2E,EACpC,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1D,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAA;AAC/B,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,kBAAkB,GAAG,CACzB,IAIC,EACsC,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1D,6DAA6D;IAC7D,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;QAC9D,OAAO,aAAa,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,MAAM,CAAA;IACxD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAqD,EAAU,EAAE;IAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAChC,OAAO,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,UAAU,CAAA;AAC9C,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,IAOvB,EAAU,EAAE;IACX,6EAA6E;IAC7E,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,MAAM,KAAK,GAAkB,EAAE,CAAA;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC/D,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;QACzE,CAAC;QACD,IAAI,IAAI,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7D,IAAI,IAAI,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7D,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC7C,OAAO,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IAC7C,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;IAC1B,OAAO,KAAK,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,CAAA;AACpC,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,CACrB,IAGC,EACsC,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAkB,EAAE,CAAA;IAE/B,4EAA4E;IAC5E,sEAAsE;IACtE,wEAAwE;IACxE,+EAA+E;IAC/E,oEAAoE;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,WAAW,GAAG,uBAAuB,CAAA;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,WAAW,GAAkB,EAAE,CAAA;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,WAAW,MAAM,CAAA;QAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjE,CAAC;IAED,YAAY;IACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAkB,EAAE,CAAA;QAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACxD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACvC,CAAC,CAAC,CAAA;AA4BJ;;GAEG;AACH,MAAM,aAAa,GAAG,CACpB,IAA6F,EACtD,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAE7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEnF,yBAAyB;QACzB,MAAM,SAAS,GAAkB,EAAE,CAAA;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACrD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,eAAe,GAAG,OAAO;aAC5B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;aAC3E,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,IAAiB,EAAyC,EAAE,CACxF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAC5B,IAAwF,CACzF,CAAA;QACH,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAA0D,CAAC,CAAA;QAC9F,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC,IAAkE,CAAC,CAAA;QAC/F,KAAK,eAAe;YAClB,OAAO,KAAK,CAAA;QACd,KAAK,OAAO;YACV,OAAO,cAAc,CAAC,IAAwF,CAAC,CAAA;QACjH,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,CAAC,cAAc,CAC1B,IAGC,CACF,CAAA;QACH,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,IAA6D,CAAA;YACjF,OAAO,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,EAAE,CAAA;QAC7D,CAAC;QACD,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACnC;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAC1B,IAA8C,EACP,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAA;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3E,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,kBAAkB,GAAG,CACzB,IAA6F,EACtD,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAA;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAChD,MAAM,KAAK,GAAkB,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAA;IAEnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAA;QACpE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,CAC3B,IAA0E,EACnC,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAkB,EAAE,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAA;QACpE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,YAAY,UAAU,CAAC,KAAK,CAAC,YAAY,CAAA;IACzD,OAAO,cAAc,OAAO,OAAO,IAAI,gBAAgB,CAAA;AACzD,CAAC,CAAC,CAAA;AAEJ,MAAM,UAAU,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAE9G;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAuE,EAAU,EAAE;IAC5G,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,kBAAkB,GAAG,CACzB,IAAiF,EACzE,EAAE;IACV,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,OAAO,SAAS,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,UAAU,CAAA;AACtD,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,IAAqC,EAAU,EAAE;IAC7E,OAAO,MAAM,IAAI,CAAC,IAAI,KAAK,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CACxB,QAME,EACqC,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnD,kEAAkE;QAClE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,uDAAuD;IACvD,OAAO,mBAAmB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;AAChD,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAC3B,KAAgC,EACO,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAAC,IAAgB,EAAyC,EAAE,CACtF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,KAAK,OAAO,IAAI,CAAA;QACzB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,IAAI,OAAO,GAAG,CAAA;QACvB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,uCAAuC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,MAAM,OAAO,MAAM,CAAA;QAC5B,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,KAAK,OAAO,IAAI,CAAA;QACzB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,uCAAuC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,QAAQ,OAAO,QAAQ,CAAA;QAChC,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,uCAAuC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,QAAQ,OAAO,QAAQ,CAAA;QAChC,CAAC;QACD,KAAK,YAAY;YACf,OAAO,KAAK,IAAI,CAAC,KAAK,IAAI,CAAA;QAC5B,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAClD,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,CAAA;QAC7C,CAAC;QACD,KAAK,WAAW;YACd,OAAO,MAAM,CAAA;QACf,KAAK,UAAU;YACb,+CAA+C;YAC/C,OAAO,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAC9F,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAClC,KAAK,CAAA;QACP,KAAK,aAAa;YAChB,kEAAkE;YAClE,wEAAwE;YACxE,sEAAsE;YACtE,OAAO,KAAK,IAAI,CAAC,SAAS,cAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA;QAC/E,KAAK,UAAU;YACb,sDAAsD;YACtD,OAAO,eAAe,IAAI,CAAC,QAAQ,KAAK,CAAA;QAC1C,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,iCAAiC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,uBAAuB,IAAI,CAAC,KAAK,MAAM,OAAO,SAAS,CAAA;QAChE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,iCAAiC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,OAAO,kCAAkC,IAAI,CAAC,eAAe,MAAM,OAAO,SAAS,CAAA;QACrF,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,yEAAyE;YACzE,yEAAyE;YACzE,2EAA2E;YAC3E,gEAAgE;YAChE,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACxE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACrD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAClC,OAAO,IAAI,IAAI,gBAAgB,KAAK,GAAG,CAAA;YACzC,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAClE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC7B,OAAO,+BAA+B,GAAG,IAAI,GAAG,GAAG,CAAA;YACrD,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAA;QACjB,CAAC;QACD;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/confluence-to-markdown",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Sync Confluence Cloud pages to local GitHub Flavored Markdown files",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "knpkv",
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
77
|
-
"effect": "
|
|
77
|
+
"effect": ">=3.19.3"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@effect/cli": "
|
|
81
|
-
"@effect/platform": "
|
|
82
|
-
"@effect/platform-node": "
|
|
80
|
+
"@effect/cli": "latest",
|
|
81
|
+
"@effect/platform": "latest",
|
|
82
|
+
"@effect/platform-node": "latest",
|
|
83
83
|
"gray-matter": "^4.0.3",
|
|
84
84
|
"rehype-parse": "^9.0.1",
|
|
85
85
|
"rehype-remark": "^10.0.1",
|
|
@@ -89,12 +89,12 @@
|
|
|
89
89
|
"remark-rehype": "^11.1.1",
|
|
90
90
|
"remark-stringify": "^11.0.0",
|
|
91
91
|
"unified": "^11.0.5",
|
|
92
|
-
"@knpkv/confluence-api-client": "^0.2.
|
|
92
|
+
"@knpkv/confluence-api-client": "^0.2.1"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@effect/vitest": "^0.27.0",
|
|
96
96
|
"@types/node": "^22.15.21",
|
|
97
|
-
"effect": "^3.
|
|
97
|
+
"effect": "^3.21.0",
|
|
98
98
|
"typescript": "~5.9.0",
|
|
99
99
|
"vitest": "^4.0.13"
|
|
100
100
|
},
|
package/src/ConfluenceAuth.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* OAuth2 authentication service for Confluence with browser-based login and token refresh.
|
|
3
|
+
*
|
|
4
|
+
* **Mental model**
|
|
5
|
+
*
|
|
6
|
+
* - **Shared OAuth infra**: Delegates to `@knpkv/atlassian-common/auth` for token exchange,
|
|
7
|
+
* refresh, and revocation. This module adds Confluence-specific scopes and the local
|
|
8
|
+
* callback server flow.
|
|
9
|
+
* - **Refresh lock**: Same `Ref<Option<Deferred>>` pattern as Jira CLI to prevent
|
|
10
|
+
* concurrent refresh races.
|
|
3
11
|
*
|
|
4
12
|
* @module
|
|
5
13
|
*/
|
|
@@ -9,6 +17,7 @@ import * as Command from "@effect/platform/Command"
|
|
|
9
17
|
import * as CommandExecutor from "@effect/platform/CommandExecutor"
|
|
10
18
|
import * as HttpClient from "@effect/platform/HttpClient"
|
|
11
19
|
import * as HttpClientRequest from "@effect/platform/HttpClientRequest"
|
|
20
|
+
import * as Console from "effect/Console"
|
|
12
21
|
import * as Context from "effect/Context"
|
|
13
22
|
import * as Deferred from "effect/Deferred"
|
|
14
23
|
import * as Effect from "effect/Effect"
|
|
@@ -373,9 +382,10 @@ const make = Effect.gen(function*() {
|
|
|
373
382
|
)
|
|
374
383
|
const authUrl = buildAuthUrl(config.clientId, state, port)
|
|
375
384
|
|
|
376
|
-
yield*
|
|
385
|
+
yield* Console.log(`Opening browser for Atlassian login (callback on port ${port})...`)
|
|
386
|
+
yield* Console.log(`If browser doesn't open, visit: ${authUrl}`)
|
|
377
387
|
yield* openBrowserImpl(authUrl)
|
|
378
|
-
yield*
|
|
388
|
+
yield* Console.log("Waiting for authorization (press Ctrl+C to cancel)...")
|
|
379
389
|
|
|
380
390
|
const code = yield* codePromise.pipe(
|
|
381
391
|
Effect.timeout("5 minutes"),
|
|
@@ -385,10 +395,10 @@ const make = Effect.gen(function*() {
|
|
|
385
395
|
|
|
386
396
|
yield* shutdown
|
|
387
397
|
|
|
388
|
-
yield*
|
|
398
|
+
yield* Console.log("Exchanging code for tokens...")
|
|
389
399
|
const tokens = yield* exchangeCodeForTokens(code, config, port)
|
|
390
400
|
|
|
391
|
-
yield*
|
|
401
|
+
yield* Console.log("Fetching accessible sites...")
|
|
392
402
|
const sites = yield* getAccessibleResources(tokens.access_token)
|
|
393
403
|
|
|
394
404
|
if (sites.length === 0) {
|
|
@@ -420,18 +430,18 @@ const make = Effect.gen(function*() {
|
|
|
420
430
|
site = matched
|
|
421
431
|
} else {
|
|
422
432
|
// Return sites list for user to choose
|
|
423
|
-
yield*
|
|
433
|
+
yield* Console.log("Multiple Confluence sites found. Please select one:")
|
|
424
434
|
for (const s of sites) {
|
|
425
|
-
yield*
|
|
435
|
+
yield* Console.log(` - ${s.name}: ${s.url}`)
|
|
426
436
|
}
|
|
427
|
-
yield*
|
|
437
|
+
yield* Console.log("\nRun 'confluence auth login --site <url>' to select a site")
|
|
428
438
|
return sites.map((s) => ({ id: s.id, name: s.name, url: s.url }))
|
|
429
439
|
}
|
|
430
440
|
} else {
|
|
431
441
|
site = sites[0]!
|
|
432
442
|
}
|
|
433
443
|
|
|
434
|
-
yield*
|
|
444
|
+
yield* Console.log("Fetching user info...")
|
|
435
445
|
const user = yield* getUserInfo(tokens.access_token)
|
|
436
446
|
|
|
437
447
|
const tokenData: OAuthToken = {
|
|
@@ -449,7 +459,7 @@ const make = Effect.gen(function*() {
|
|
|
449
459
|
}
|
|
450
460
|
|
|
451
461
|
yield* saveTokenOp(tokenData)
|
|
452
|
-
yield*
|
|
462
|
+
yield* Console.log(`Logged in as ${user.name} (${user.email})`)
|
|
453
463
|
return undefined
|
|
454
464
|
})
|
|
455
465
|
|
|
@@ -457,7 +467,7 @@ const make = Effect.gen(function*() {
|
|
|
457
467
|
Effect.gen(function*() {
|
|
458
468
|
const token = yield* loadTokenOp()
|
|
459
469
|
if (token === null) {
|
|
460
|
-
yield*
|
|
470
|
+
yield* Console.log("Not logged in")
|
|
461
471
|
return
|
|
462
472
|
}
|
|
463
473
|
|
|
@@ -500,7 +510,7 @@ const make = Effect.gen(function*() {
|
|
|
500
510
|
yield* Ref.set(refreshLock, Option.some(deferred))
|
|
501
511
|
|
|
502
512
|
const config = yield* getConfig()
|
|
503
|
-
yield*
|
|
513
|
+
yield* Console.log("Token expired, refreshing...")
|
|
504
514
|
|
|
505
515
|
const result = yield* refreshToken(token, config).pipe(
|
|
506
516
|
Effect.tap((refreshed) => Deferred.succeed(deferred, refreshed)),
|
package/src/ConfluenceClient.ts
CHANGED
|
@@ -5,13 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
ConfluenceApiClient,
|
|
11
|
-
ConfluenceApiConfig,
|
|
12
|
-
type V1ApiError,
|
|
13
|
-
type V2ApiError
|
|
14
|
-
} from "@knpkv/confluence-api-client"
|
|
8
|
+
import { ConfluenceApiClient, ConfluenceApiConfig, type FetchClientError, toEffect } from "@knpkv/confluence-api-client"
|
|
15
9
|
import * as Context from "effect/Context"
|
|
16
10
|
import * as Effect from "effect/Effect"
|
|
17
11
|
import * as Layer from "effect/Layer"
|
|
@@ -128,7 +122,7 @@ export class ConfluenceClient extends Context.Tag(
|
|
|
128
122
|
|
|
129
123
|
/**
|
|
130
124
|
* Set editor version for a page (v1 or v2).
|
|
131
|
-
* Uses
|
|
125
|
+
* Uses V2 page properties API.
|
|
132
126
|
*/
|
|
133
127
|
readonly setEditorVersion: (pageId: PageId, version: "v1" | "v2") => Effect.Effect<void, ApiError | RateLimitError>
|
|
134
128
|
}
|
|
@@ -170,7 +164,7 @@ const rateLimitSchedule = Schedule.exponential("1 second").pipe(
|
|
|
170
164
|
/**
|
|
171
165
|
* Map API client errors to domain errors.
|
|
172
166
|
*/
|
|
173
|
-
const mapApiError = (error:
|
|
167
|
+
const mapApiError = (error: FetchClientError, endpoint: string, pageId?: string): ApiError =>
|
|
174
168
|
new ApiError({
|
|
175
169
|
status: error.status,
|
|
176
170
|
message: error.message,
|
|
@@ -183,7 +177,7 @@ const mapApiError = (error: V1ApiError | V2ApiError, endpoint: string, pageId?:
|
|
|
183
177
|
*/
|
|
184
178
|
const make = (
|
|
185
179
|
config: ConfluenceClientConfig
|
|
186
|
-
): Effect.Effect<Context.Tag.Service<typeof ConfluenceClient
|
|
180
|
+
): Effect.Effect<Context.Tag.Service<typeof ConfluenceClient>> =>
|
|
187
181
|
Effect.gen(function*() {
|
|
188
182
|
// Create underlying API client
|
|
189
183
|
const apiConfigLayer = Layer.succeed(ConfluenceApiConfig, {
|
|
@@ -193,22 +187,23 @@ const make = (
|
|
|
193
187
|
: { type: "oauth2", accessToken: Redacted.make(config.auth.accessToken), cloudId: config.auth.cloudId }
|
|
194
188
|
})
|
|
195
189
|
|
|
196
|
-
const httpClient = yield* HttpClient.HttpClient
|
|
197
|
-
|
|
198
190
|
const apiClient = yield* ConfluenceApiClient.pipe(
|
|
199
191
|
Effect.provide(ConfluenceApiClient.layer),
|
|
200
|
-
Effect.provide(apiConfigLayer)
|
|
201
|
-
Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient))
|
|
192
|
+
Effect.provide(apiConfigLayer)
|
|
202
193
|
)
|
|
203
194
|
|
|
204
195
|
const getPage = (id: PageId): Effect.Effect<PageResponse, ApiError | RateLimitError> =>
|
|
205
|
-
apiClient.v2.
|
|
196
|
+
toEffect(apiClient.v2.client.GET("/pages/{id}", {
|
|
197
|
+
params: { path: { id: Number(id) }, query: { "body-format": "storage" } }
|
|
198
|
+
})).pipe(
|
|
206
199
|
Effect.mapError((e) => mapApiError(e, `/pages/${id}`, id)),
|
|
207
200
|
Effect.retry(rateLimitSchedule)
|
|
208
201
|
) as Effect.Effect<PageResponse, ApiError | RateLimitError>
|
|
209
202
|
|
|
210
203
|
const getChildren = (id: PageId): Effect.Effect<PageChildrenResponse, ApiError | RateLimitError> =>
|
|
211
|
-
apiClient.v2.
|
|
204
|
+
toEffect(apiClient.v2.client.GET("/pages/{id}/children", {
|
|
205
|
+
params: { path: { id: Number(id) } }
|
|
206
|
+
})).pipe(
|
|
212
207
|
Effect.mapError((e) => mapApiError(e, `/pages/${id}/children`, id)),
|
|
213
208
|
Effect.retry(rateLimitSchedule)
|
|
214
209
|
) as Effect.Effect<PageChildrenResponse, ApiError | RateLimitError>
|
|
@@ -231,20 +226,21 @@ const make = (
|
|
|
231
226
|
)
|
|
232
227
|
}
|
|
233
228
|
|
|
234
|
-
const response = yield* apiClient.v2.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}).pipe(
|
|
229
|
+
const response = yield* toEffect(apiClient.v2.client.GET("/pages/{id}/children", {
|
|
230
|
+
params: { path: { id: Number(id) }, query: { ...(cursor ? { cursor } : {}) } }
|
|
231
|
+
})).pipe(
|
|
238
232
|
Effect.mapError((e) => mapApiError(e, `/pages/${id}/children`, id)),
|
|
239
233
|
Effect.retry(rateLimitSchedule)
|
|
240
234
|
)
|
|
241
235
|
|
|
242
|
-
for (const child of response.results) {
|
|
243
|
-
allChildren.push(child
|
|
236
|
+
for (const child of (response as { results?: Array<PageListItem> }).results ?? []) {
|
|
237
|
+
allChildren.push(child)
|
|
244
238
|
}
|
|
245
239
|
|
|
246
|
-
cursor = response._links?.next
|
|
247
|
-
? new URL(response._links.next, config.baseUrl).searchParams.get(
|
|
240
|
+
cursor = (response as { _links?: { next?: string } })._links?.next
|
|
241
|
+
? new URL((response as { _links: { next: string } })._links.next, config.baseUrl).searchParams.get(
|
|
242
|
+
"cursor"
|
|
243
|
+
) ?? undefined
|
|
248
244
|
: undefined
|
|
249
245
|
|
|
250
246
|
iterations++
|
|
@@ -254,19 +250,39 @@ const make = (
|
|
|
254
250
|
})
|
|
255
251
|
|
|
256
252
|
const createPage = (req: CreatePageRequest): Effect.Effect<PageResponse, ApiError | RateLimitError> =>
|
|
257
|
-
apiClient.v2.
|
|
253
|
+
toEffect(apiClient.v2.client.POST("/pages", {
|
|
254
|
+
body: {
|
|
255
|
+
spaceId: req.spaceId,
|
|
256
|
+
title: req.title,
|
|
257
|
+
...(req.parentId ? { parentId: req.parentId } : {}),
|
|
258
|
+
body: { representation: req.body.representation, value: req.body.value },
|
|
259
|
+
status: "current"
|
|
260
|
+
}
|
|
261
|
+
})).pipe(
|
|
258
262
|
Effect.mapError((e) => mapApiError(e, "/pages")),
|
|
259
263
|
Effect.retry(rateLimitSchedule)
|
|
260
264
|
) as Effect.Effect<PageResponse, ApiError | RateLimitError>
|
|
261
265
|
|
|
262
266
|
const updatePage = (req: UpdatePageRequest): Effect.Effect<PageResponse, ApiError | RateLimitError> =>
|
|
263
|
-
apiClient.v2.
|
|
267
|
+
toEffect(apiClient.v2.client.PUT("/pages/{id}", {
|
|
268
|
+
params: { path: { id: Number(req.id) } },
|
|
269
|
+
body: {
|
|
270
|
+
id: req.id,
|
|
271
|
+
title: req.title,
|
|
272
|
+
status: req.status ?? "current",
|
|
273
|
+
body: { representation: req.body.representation, value: req.body.value },
|
|
274
|
+
version: { number: req.version.number, ...(req.version.message ? { message: req.version.message } : {}) }
|
|
275
|
+
}
|
|
276
|
+
})).pipe(
|
|
264
277
|
Effect.mapError((e) => mapApiError(e, `/pages/${req.id}`, req.id)),
|
|
265
278
|
Effect.retry(rateLimitSchedule)
|
|
266
279
|
) as Effect.Effect<PageResponse, ApiError | RateLimitError>
|
|
267
280
|
|
|
268
281
|
const deletePage = (id: PageId): Effect.Effect<void, ApiError | RateLimitError> =>
|
|
269
|
-
apiClient.v2.
|
|
282
|
+
toEffect(apiClient.v2.client.DELETE("/pages/{id}", {
|
|
283
|
+
params: { path: { id: Number(id) } }
|
|
284
|
+
})).pipe(
|
|
285
|
+
Effect.map(() => void 0),
|
|
270
286
|
Effect.mapError((e) => mapApiError(e, `/pages/${id}`, id)),
|
|
271
287
|
Effect.retry(rateLimitSchedule)
|
|
272
288
|
)
|
|
@@ -292,23 +308,30 @@ const make = (
|
|
|
292
308
|
)
|
|
293
309
|
}
|
|
294
310
|
|
|
295
|
-
const response = yield* apiClient.v2.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
311
|
+
const response = yield* toEffect(apiClient.v2.client.GET("/pages/{id}/versions", {
|
|
312
|
+
params: {
|
|
313
|
+
path: { id: Number(id) },
|
|
314
|
+
query: {
|
|
315
|
+
...(options?.includeBody ? { "body-format": "storage" as const } : {}),
|
|
316
|
+
...(cursor ? { cursor } : {}),
|
|
317
|
+
limit: VERSIONS_PAGE_SIZE
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
})).pipe(
|
|
300
321
|
Effect.mapError((e) => mapApiError(e, `/pages/${id}/versions`, id)),
|
|
301
322
|
Effect.retry(rateLimitSchedule)
|
|
302
323
|
)
|
|
303
324
|
|
|
304
|
-
for (const version of response.results) {
|
|
325
|
+
for (const version of (response as { results?: Array<PageVersion> }).results ?? []) {
|
|
305
326
|
if (options?.since === undefined || (version.number ?? 0) > options.since) {
|
|
306
|
-
allVersions.push(version
|
|
327
|
+
allVersions.push(version)
|
|
307
328
|
}
|
|
308
329
|
}
|
|
309
330
|
|
|
310
|
-
cursor = response._links?.next
|
|
311
|
-
? new URL(response._links.next, config.baseUrl).searchParams.get(
|
|
331
|
+
cursor = (response as { _links?: { next?: string } })._links?.next
|
|
332
|
+
? new URL((response as { _links: { next: string } })._links.next, config.baseUrl).searchParams.get(
|
|
333
|
+
"cursor"
|
|
334
|
+
) ?? undefined
|
|
312
335
|
: undefined
|
|
313
336
|
|
|
314
337
|
iterations++
|
|
@@ -318,7 +341,9 @@ const make = (
|
|
|
318
341
|
})
|
|
319
342
|
|
|
320
343
|
const getUser = (accountId: string): Effect.Effect<AtlassianUser, ApiError | RateLimitError> =>
|
|
321
|
-
apiClient.v1.
|
|
344
|
+
toEffect(apiClient.v1.client.GET("/wiki/rest/api/user", {
|
|
345
|
+
params: { query: { accountId } }
|
|
346
|
+
})).pipe(
|
|
322
347
|
Effect.mapError((e) => mapApiError(e, `/user?accountId=${accountId}`)),
|
|
323
348
|
Effect.retry(rateLimitSchedule)
|
|
324
349
|
) as Effect.Effect<AtlassianUser, ApiError | RateLimitError>
|
|
@@ -341,29 +366,39 @@ const make = (
|
|
|
341
366
|
|
|
342
367
|
const setEditorVersion = (pageId: PageId, version: "v1" | "v2"): Effect.Effect<void, ApiError | RateLimitError> =>
|
|
343
368
|
Effect.gen(function*() {
|
|
344
|
-
// Try to get
|
|
345
|
-
const
|
|
346
|
-
|
|
369
|
+
// Try to get existing property by key, treat 404 as "not exists"
|
|
370
|
+
const existing = yield* toEffect(apiClient.v2.client.GET("/pages/{page-id}/properties", {
|
|
371
|
+
params: { path: { "page-id": Number(pageId) }, query: { key: "editor" } }
|
|
372
|
+
})).pipe(
|
|
373
|
+
Effect.map((resp) => {
|
|
374
|
+
const results = (resp as { results?: Array<{ id?: string; version?: { number?: number } }> }).results
|
|
375
|
+
return results?.[0]
|
|
376
|
+
}),
|
|
347
377
|
Effect.catchIf(
|
|
348
|
-
(e) => e.status === 404,
|
|
349
|
-
() => Effect.succeed(
|
|
378
|
+
(e: FetchClientError) => e.status === 404,
|
|
379
|
+
() => Effect.succeed(undefined)
|
|
350
380
|
),
|
|
351
|
-
Effect.mapError((e) => mapApiError(e, `/
|
|
381
|
+
Effect.mapError((e) => mapApiError(e, `/pages/${pageId}/properties?key=editor`, pageId))
|
|
352
382
|
)
|
|
353
383
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
384
|
+
if (existing?.id) {
|
|
385
|
+
// Update existing property
|
|
386
|
+
const nextVersion = (existing.version?.number ?? 0) + 1
|
|
387
|
+
yield* toEffect(apiClient.v2.client.PUT("/pages/{page-id}/properties/{property-id}", {
|
|
388
|
+
params: {
|
|
389
|
+
path: { "page-id": Number(pageId), "property-id": Number(existing.id) }
|
|
390
|
+
},
|
|
391
|
+
body: { key: "editor", value: version, version: { number: nextVersion } }
|
|
392
|
+
})).pipe(
|
|
393
|
+
Effect.mapError((e) => mapApiError(e, `/pages/${pageId}/properties/editor`, pageId))
|
|
363
394
|
)
|
|
364
395
|
} else {
|
|
365
|
-
|
|
366
|
-
|
|
396
|
+
// Create new property
|
|
397
|
+
yield* toEffect(apiClient.v2.client.POST("/pages/{page-id}/properties", {
|
|
398
|
+
params: { path: { "page-id": Number(pageId) } },
|
|
399
|
+
body: { key: "editor", value: version }
|
|
400
|
+
})).pipe(
|
|
401
|
+
Effect.mapError((e) => mapApiError(e, `/pages/${pageId}/properties/editor`, pageId))
|
|
367
402
|
)
|
|
368
403
|
}
|
|
369
404
|
}).pipe(Effect.retry(rateLimitSchedule))
|
|
@@ -388,7 +423,6 @@ const make = (
|
|
|
388
423
|
* @example
|
|
389
424
|
* ```typescript
|
|
390
425
|
* import { ConfluenceClient } from "@knpkv/confluence-to-markdown/ConfluenceClient"
|
|
391
|
-
* import { NodeHttpClient } from "@effect/platform-node"
|
|
392
426
|
* import { Effect } from "effect"
|
|
393
427
|
*
|
|
394
428
|
* const program = Effect.gen(function* () {
|
|
@@ -406,8 +440,7 @@ const make = (
|
|
|
406
440
|
* email: "you@example.com",
|
|
407
441
|
* token: process.env.CONFLUENCE_API_KEY
|
|
408
442
|
* }
|
|
409
|
-
* }))
|
|
410
|
-
* Effect.provide(NodeHttpClient.layer)
|
|
443
|
+
* }))
|
|
411
444
|
* )
|
|
412
445
|
* )
|
|
413
446
|
* ```
|
|
@@ -416,4 +449,4 @@ const make = (
|
|
|
416
449
|
*/
|
|
417
450
|
export const layer = (
|
|
418
451
|
config: ConfluenceClientConfig
|
|
419
|
-
): Layer.Layer<ConfluenceClient
|
|
452
|
+
): Layer.Layer<ConfluenceClient> => Layer.effect(ConfluenceClient, make(config))
|