@knpkv/atlassian-common 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/Brand.d.ts.map +1 -1
  3. package/dist/Brand.js +4 -2
  4. package/dist/Brand.js.map +1 -1
  5. package/dist/ast/Document.d.ts +2 -2
  6. package/dist/ast/Document.d.ts.map +1 -1
  7. package/dist/ast/Document.js +1 -1
  8. package/dist/ast/Document.js.map +1 -1
  9. package/dist/ast/MacroNode.d.ts +4 -4
  10. package/dist/ast/MacroNode.d.ts.map +1 -1
  11. package/dist/ast/MacroNode.js +8 -1
  12. package/dist/ast/MacroNode.js.map +1 -1
  13. package/dist/attachments.d.ts +42 -0
  14. package/dist/attachments.d.ts.map +1 -0
  15. package/dist/attachments.js +51 -0
  16. package/dist/attachments.js.map +1 -0
  17. package/dist/auth/OAuthEndpoints.d.ts.map +1 -1
  18. package/dist/auth/OAuthEndpoints.js +2 -0
  19. package/dist/auth/OAuthEndpoints.js.map +1 -1
  20. package/dist/bin.js +1 -1
  21. package/dist/bin.js.map +1 -1
  22. package/dist/config/AuthProfiles.js.map +1 -1
  23. package/dist/config/ProfileManager.d.ts +3 -20
  24. package/dist/config/ProfileManager.d.ts.map +1 -1
  25. package/dist/config/ProfileManager.js +2 -1
  26. package/dist/config/ProfileManager.js.map +1 -1
  27. package/dist/config/TokenStorage.js.map +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/serializers/MarkdownSerializer.d.ts.map +1 -1
  33. package/dist/serializers/MarkdownSerializer.js +9 -6
  34. package/dist/serializers/MarkdownSerializer.js.map +1 -1
  35. package/package.json +11 -7
  36. package/src/Brand.ts +4 -2
  37. package/src/ast/Document.ts +1 -1
  38. package/src/ast/MacroNode.ts +8 -1
  39. package/src/attachments.ts +98 -0
  40. package/src/auth/OAuthEndpoints.ts +2 -0
  41. package/src/bin.ts +1 -1
  42. package/src/config/AuthProfiles.ts +1 -1
  43. package/src/config/ProfileManager.ts +21 -9
  44. package/src/config/TokenStorage.ts +1 -1
  45. package/src/index.ts +3 -0
  46. package/src/serializers/MarkdownSerializer.ts +22 -37
  47. package/test/AuthProfiles.test.ts +1 -1
  48. package/test/OAuthEndpoints.test.ts +14 -1
  49. package/test/ProfileManager.test.ts +1 -1
  50. package/test/attachments.test.ts +75 -0
  51. package/test/fixtures/attachments/inline-attachment.svg +6 -0
  52. package/tsconfig.tsbuildinfo +1 -1
@@ -212,8 +212,7 @@ const serializeList = (node, options) => Effect.gen(function* () {
212
212
  * Serialize simple block (for nested content).
213
213
  */
214
214
  const serializeSimpleBlock = (node, options) => Effect.gen(function* () {
215
- const tagged = node;
216
- switch (tagged._tag) {
215
+ switch (node._tag) {
217
216
  case "Heading":
218
217
  return yield* serializeHeading(node);
219
218
  case "Paragraph":
@@ -226,10 +225,14 @@ const serializeSimpleBlock = (node, options) => Effect.gen(function* () {
226
225
  return serializeImage(node, options);
227
226
  case "Table":
228
227
  return yield* serializeTable(node);
229
- case "UnsupportedBlock": {
230
- const unsupported = node;
231
- return unsupported.rawMarkdown ?? unsupported.rawHtml ?? unsupported.rawAdf ?? "";
232
- }
228
+ case "List":
229
+ return yield* serializeList(node, options);
230
+ case "BlockQuote":
231
+ return yield* serializeBlockQuote(node, options);
232
+ case "TaskList":
233
+ return yield* serializeTaskList(node.children, options);
234
+ case "UnsupportedBlock":
235
+ return node.rawMarkdown ?? node.rawHtml ?? node.rawAdf ?? "";
233
236
  default:
234
237
  return "";
235
238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownSerializer.js","sourceRoot":"","sources":["../../src/serializers/MarkdownSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAiBvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAa,EACb,UAA4B,EAAE,EACS,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,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,EAAE,OAAO,CAAC,CAAA;QAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAElC,wDAAwD;IACxD,IAAI,OAAO,CAAC,gBAAgB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAA;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACtE,OAAO,GAAG,OAAO,WAAW,MAAM,QAAQ,OAAO,KAAK,CAAA;IACxD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAC5B,IAAkB,EAClB,OAAyB,EACc,EAAE,CACzC,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,IAAI,CAAC,CAAA;QACxC,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,eAAe;YAClB,OAAO,KAAK,CAAA;QACd,KAAK,OAAO;YACV,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACtC,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5C,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClD,KAAK,kBAAkB;YACrB,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAE9D,cAAc;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACjD,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACnD,KAAK,UAAU;YACb,OAAO,SAAS,CAAA;QAClB,KAAK,WAAW;YACd,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,aAAa;YAChB,OAAO,MAAM,IAAI,CAAC,IAAI,KAAK,CAAA;QAC7B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAEzD;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,yDAAyD;IACzD,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;;GAEG;AACH,MAAM,cAAc,GAAG,CACrB,IAOC,EACD,OAAyB,EACjB,EAAE;IACV,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAA;IAE7C,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,OAAO,MAAM,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IACpD,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,SAAS;IACT,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;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,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAYJ;;GAEG;AACH,MAAM,aAAa,GAAG,CACpB,IAAwF,EACxF,OAAyB,EACc,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,QAAuC,EAAE,CAAC;QAChE,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,EAAE,OAAO,CAAC,CAAA;YAC9D,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,CAC3B,IAAiB,EACjB,OAAyB,EACc,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,IAAiC,CAAA;IAChD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,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,CACnB,IAAwF,EACxF,OAAO,CACR,CAAA;QACH,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,CAAC,cAAc,CAC1B,IAGC,CACF,CAAA;QACH,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,IAA8E,CAAA;YAClG,OAAO,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,IAAI,EAAE,CAAA;QACnF,CAAC;QACD;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAC1B,IAA0C,EAC1C,OAAyB,EACc,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,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9D,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,IAAyF,EACzF,OAAyB,EACc,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,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9D,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;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAC3B,IAAsE,EACtE,OAAyB,EACc,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAA;IAC7C,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,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9D,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,OAAO,MAAM,WAAW,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAA;AAC9F,CAAC,CAAC,CAAA;AAEJ;;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,iBAAiB,GAAG,CACxB,QAME,EACF,OAAyB,EACc,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAA;IAC7C,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,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,OAAO,OAAO,MAAM,aAAa,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;AACvD,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,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,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,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,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,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,KAAK,aAAa;YAChB,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAA;QAC7B,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,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,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;YACtB,OAAO,IAAI,CAAC,GAAG,CAAA;QACjB;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"MarkdownSerializer.js","sourceRoot":"","sources":["../../src/serializers/MarkdownSerializer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knpkv/atlassian-common",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Shared utilities for Atlassian tools (AST, serializers, auth, config)",
5
5
  "license": "MIT",
6
6
  "author": "knpkv",
@@ -30,6 +30,10 @@
30
30
  "import": "./dist/serializers/index.js",
31
31
  "types": "./dist/serializers/index.d.ts"
32
32
  },
33
+ "./attachments": {
34
+ "import": "./dist/attachments.js",
35
+ "types": "./dist/attachments.d.ts"
36
+ },
33
37
  "./parsers": {
34
38
  "import": "./dist/parsers/index.js",
35
39
  "types": "./dist/parsers/index.d.ts"
@@ -51,20 +55,20 @@
51
55
  "access": "public"
52
56
  },
53
57
  "peerDependencies": {
54
- "effect": "4.0.0-beta.87"
58
+ "effect": "4.0.0-beta.93"
55
59
  },
56
60
  "dependencies": {
61
+ "@effect/platform-node": "4.0.0-beta.93",
57
62
  "remark-gfm": "^4.0.1",
58
63
  "remark-parse": "^11.0.0",
59
64
  "remark-stringify": "^11.0.0",
60
- "unified": "^11.0.5",
61
- "@effect/platform-node": "4.0.0-beta.87"
65
+ "unified": "^11.0.5"
62
66
  },
63
67
  "devDependencies": {
64
- "@effect/platform-node": "4.0.0-beta.87",
65
- "@effect/vitest": "4.0.0-beta.87",
68
+ "@effect/platform-node": "4.0.0-beta.93",
69
+ "@effect/vitest": "4.0.0-beta.93",
66
70
  "@types/node": "latest",
67
- "effect": "4.0.0-beta.87",
71
+ "effect": "4.0.0-beta.93",
68
72
  "typescript": "~6.0.3",
69
73
  "vitest": "^4.1.9"
70
74
  },
package/src/Brand.ts CHANGED
@@ -51,10 +51,11 @@ export const makeBrandedString = <B extends string>(
51
51
  const brand = Brand.make<BrandedType>((s) => pattern.test(s) || `Invalid ${name}: ${s} does not match ${pattern}`)
52
52
 
53
53
  const schema = Schema.String.check(Schema.isPattern(pattern)).pipe(Schema.brand(name))
54
+ const Type: BrandedType = undefined!
54
55
 
55
56
  return Object.assign(brand, {
56
57
  schema,
57
- Type: undefined as unknown as BrandedType
58
+ Type
58
59
  })
59
60
  }
60
61
 
@@ -80,10 +81,11 @@ export const makeBrandedNonEmptyString = <B extends string>(name: B) => {
80
81
  const brand = Brand.make<BrandedType>((s) => s.length > 0 || `${name} cannot be empty`)
81
82
 
82
83
  const schema = Schema.NonEmptyString.pipe(Schema.brand(name))
84
+ const Type: BrandedType = undefined!
83
85
 
84
86
  return Object.assign(brand, {
85
87
  schema,
86
- Type: undefined as unknown as BrandedType
88
+ Type
87
89
  })
88
90
  }
89
91
 
@@ -98,4 +98,4 @@ export const isDocument = (value: unknown): value is Document =>
98
98
  typeof value === "object" &&
99
99
  value !== null &&
100
100
  "children" in value &&
101
- Array.isArray((value as Document).children)
101
+ Array.isArray(Reflect.get(value, "children"))
@@ -19,7 +19,14 @@ import { RawSource, SchemaVersion, SimpleBlockNode } from "./BlockNode.js"
19
19
  *
20
20
  * @category MacroNode
21
21
  */
22
- export const PanelTypes = ["info", "warning", "note", "tip", "error", "panel"] as const
22
+ export const PanelTypes: ReadonlyArray<"info" | "warning" | "note" | "tip" | "error" | "panel"> = [
23
+ "info",
24
+ "warning",
25
+ "note",
26
+ "tip",
27
+ "error",
28
+ "panel"
29
+ ]
23
30
 
24
31
  /**
25
32
  * Panel type for info/warning/note macros.
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Shared attachment reference helpers for Atlassian Markdown surfaces.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ export interface AttachmentPreviewInput {
8
+ readonly id?: string | undefined
9
+ readonly filename: string
10
+ readonly url?: string | undefined
11
+ readonly mediaType?: string | null | undefined
12
+ readonly mimeType?: string | null | undefined
13
+ readonly size?: number | null | undefined
14
+ }
15
+
16
+ export interface AttachmentReferenceInput {
17
+ readonly id: string
18
+ readonly filename: string
19
+ readonly url: string
20
+ readonly mediaType: string | null
21
+ readonly size: number | null
22
+ }
23
+
24
+ export interface AttachmentPlaceholderReplacement {
25
+ readonly content: string
26
+ readonly replacements: number
27
+ }
28
+
29
+ export interface AttachmentPlaceholderMatch {
30
+ readonly label: string
31
+ readonly isImage: boolean
32
+ }
33
+
34
+ const IMAGE_EXTENSION_RE = /\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i
35
+
36
+ /**
37
+ * Returns true when an attachment should render as a Markdown image preview.
38
+ * SVG is previewable even when the remote API reports a generic content type.
39
+ */
40
+ export const isPreviewableAttachment = (attachment: AttachmentPreviewInput): boolean => {
41
+ const type = attachment.mediaType ?? attachment.mimeType ?? ""
42
+ return type.toLowerCase().startsWith("image/") || IMAGE_EXTENSION_RE.test(attachment.filename)
43
+ }
44
+
45
+ export const normalizeAttachmentMediaType = (
46
+ mediaType: string | null | undefined,
47
+ mimeType?: string | null | undefined
48
+ ): string | null => {
49
+ const value = mediaType ?? mimeType
50
+ return value && value.trim().length > 0 ? value : null
51
+ }
52
+
53
+ export const renderAttachmentMarkdown = (
54
+ attachment: AttachmentReferenceInput,
55
+ options?: { readonly label?: string | null | undefined; readonly metadata?: string | null | undefined }
56
+ ): string => {
57
+ const label = escapeMarkdownLabel(options?.label?.trim() || attachment.filename)
58
+ const destination = safeMarkdownDestination(attachment.url)
59
+ const reference = isPreviewableAttachment(attachment)
60
+ ? `![${label}](${destination})`
61
+ : `[${label}](${destination})`
62
+ return options?.metadata ? `${options.metadata}\n${reference}` : reference
63
+ }
64
+
65
+ export const replaceAttachmentPlaceholder = (
66
+ content: string,
67
+ placeholderPath: string,
68
+ renderedAttachment: string | ((match: AttachmentPlaceholderMatch) => string),
69
+ options?: { readonly replaceAll?: boolean | undefined }
70
+ ): AttachmentPlaceholderReplacement => {
71
+ const escapedPath = escapeRegExp(placeholderPath)
72
+ const placeholder = new RegExp(`!?\\[([^\\]]*)\\]\\(${escapedPath}\\)`, "g")
73
+ let replacements = 0
74
+ const replaced = content.replace(placeholder, (match, label: string) => {
75
+ replacements++
76
+ return typeof renderedAttachment === "string"
77
+ ? renderedAttachment
78
+ : renderedAttachment({ isImage: match.startsWith("!"), label })
79
+ })
80
+ if (!options?.replaceAll && replacements > 1) {
81
+ return { content, replacements }
82
+ }
83
+ return { content: replaced, replacements }
84
+ }
85
+
86
+ const escapeMarkdownLabel = (value: string): string =>
87
+ value
88
+ .replace(/\\/g, "\\\\")
89
+ .replace(/\n+/g, " ")
90
+ .replace(/\[/g, "\\[")
91
+ .replace(/]/g, "\\]")
92
+
93
+ const safeMarkdownDestination = (value: string): string =>
94
+ /[\s()<>]/.test(value)
95
+ ? `<${value.replace(/\n/g, "%0A").replace(/</g, "%3C").replace(/>/g, "%3E")}>`
96
+ : value
97
+
98
+ const escapeRegExp = (value: string): string => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
@@ -61,6 +61,8 @@ export const CONFLUENCE_SCOPES = [
61
61
  "read:page:confluence",
62
62
  "write:page:confluence",
63
63
  "delete:page:confluence",
64
+ "read:attachment:confluence",
65
+ "write:attachment:confluence",
64
66
  "read:me",
65
67
  "offline_access"
66
68
  ]
package/src/bin.ts CHANGED
@@ -112,4 +112,4 @@ const program = Effect.gen(function*() {
112
112
  Effect.catch((error: unknown) => Console.error(String(error)).pipe(Effect.andThen(Effect.fail(error))))
113
113
  )
114
114
 
115
- NodeRuntime.runMain(program)
115
+ NodeRuntime.runMain(program, { disableErrorReporting: true })
@@ -73,7 +73,7 @@ const emptyProfiles = (): AuthProfilesFile => ({ profiles: [] })
73
73
 
74
74
  const parseJsonOrNull = (content: string): unknown | null => {
75
75
  try {
76
- return JSON.parse(content) as unknown
76
+ return JSON.parse(content)
77
77
  } catch {
78
78
  return null
79
79
  }
@@ -12,7 +12,14 @@ import * as Schema from "effect/Schema"
12
12
  import type { HttpClient } from "effect/unstable/http"
13
13
  import type { OAuthError } from "../auth/OAuthErrors.js"
14
14
  import { refreshToken } from "../auth/OAuthOperations.js"
15
- import { type AuthProfile, findProfile, loadProfiles, saveProfiles, saveProfileToken } from "./AuthProfiles.js"
15
+ import {
16
+ type AuthProfile,
17
+ type AuthProfilesFile,
18
+ findProfile,
19
+ loadProfiles,
20
+ saveProfiles,
21
+ saveProfileToken
22
+ } from "./AuthProfiles.js"
16
23
  import { getProfilesPath, type HomeDirectoryError, HomeDirectoryTag } from "./ConfigPaths.js"
17
24
  import { type OAuthToken, OAuthTokenSchema } from "./OAuthSchemas.js"
18
25
  import { FileSystemError, isTokenExpired, loadOAuthConfig } from "./TokenStorage.js"
@@ -26,24 +33,24 @@ export interface AtlassianToolDefinition {
26
33
  readonly requiredScopes: ReadonlyArray<string>
27
34
  }
28
35
 
29
- export const JIRA_REQUIRED_SCOPES = [
36
+ export const JIRA_REQUIRED_SCOPES: ReadonlyArray<string> = [
30
37
  "read:jira-work",
31
38
  "write:jira-work",
32
39
  "manage:jira-project",
33
40
  "read:jira-user",
34
41
  "read:me",
35
42
  "offline_access"
36
- ] as const
43
+ ]
37
44
 
38
- export const CONFLUENCE_REQUIRED_SCOPES = [
45
+ export const CONFLUENCE_REQUIRED_SCOPES: ReadonlyArray<string> = [
39
46
  "read:page:confluence",
40
47
  "write:page:confluence",
41
48
  "delete:page:confluence",
42
49
  "read:me",
43
50
  "offline_access"
44
- ] as const
51
+ ]
45
52
 
46
- export const ATLASSIAN_TOOLS = [
53
+ export const ATLASSIAN_TOOLS: ReadonlyArray<AtlassianToolDefinition> = [
47
54
  {
48
55
  toolName: "jira-cli",
49
56
  label: "Jira CLI",
@@ -64,7 +71,7 @@ export const ATLASSIAN_TOOLS = [
64
71
  loginHint: "jcf auth jira login",
65
72
  requiredScopes: JIRA_REQUIRED_SCOPES
66
73
  }
67
- ] as const satisfies ReadonlyArray<AtlassianToolDefinition>
74
+ ]
68
75
 
69
76
  export type ProfileTokenStatus = "valid" | "expired"
70
77
 
@@ -97,6 +104,11 @@ export interface ToolProfileStatus {
97
104
 
98
105
  const authStoreName = (tool: AtlassianToolDefinition): string => tool.authStoreName ?? tool.toolName
99
106
 
107
+ const toolStorePair = (
108
+ tool: AtlassianToolDefinition,
109
+ store: AuthProfilesFile
110
+ ): readonly [AtlassianToolDefinition, AuthProfilesFile] => [tool, store]
111
+
100
112
  const uniqueAuthTools = (tools: ReadonlyArray<AtlassianToolDefinition>): ReadonlyArray<AtlassianToolDefinition> =>
101
113
  tools.filter((tool, index) =>
102
114
  tools.findIndex((candidate) => authStoreName(candidate) === authStoreName(tool)) === index
@@ -122,7 +134,7 @@ const loadLegacyToken = (
122
134
  Effect.mapError((cause) => new FileSystemError({ operation: "read", path: authPath, cause }))
123
135
  )
124
136
  const parsed = yield* Effect.try({
125
- try: () => JSON.parse(content) as unknown,
137
+ try: () => JSON.parse(content),
126
138
  catch: (cause) => cause
127
139
  }).pipe(Effect.catch(() => Effect.succeed(null)))
128
140
  if (parsed === null) return null
@@ -186,7 +198,7 @@ export const useProfileForAllTools = (
186
198
  Effect.gen(function*() {
187
199
  const authTools = uniqueAuthTools(tools)
188
200
  const stores = yield* Effect.forEach(authTools, (tool) =>
189
- loadProfiles(authStoreName(tool)).pipe(Effect.map((store) => [tool, store] as const)))
201
+ loadProfiles(authStoreName(tool)).pipe(Effect.map((store) => toolStorePair(tool, store))))
190
202
  const selected = stores.map(([, store]) =>
191
203
  findProfile(store.profiles, selector)
192
204
  ).find((profile): profile is AuthProfile =>
@@ -29,7 +29,7 @@ import { type OAuthConfig, OAuthConfigSchema, type OAuthToken, OAuthTokenSchema
29
29
 
30
30
  const parseJsonOrNull = (content: string): unknown | null => {
31
31
  try {
32
- return JSON.parse(content) as unknown
32
+ return JSON.parse(content)
33
33
  } catch {
34
34
  return null
35
35
  }
package/src/index.ts CHANGED
@@ -32,3 +32,6 @@ export * from "./config/index.js"
32
32
 
33
33
  // Auth utilities
34
34
  export * from "./auth/index.js"
35
+
36
+ // Attachment utilities
37
+ export * from "./attachments.js"
@@ -22,8 +22,10 @@
22
22
  * @module
23
23
  */
24
24
  import * as Effect from "effect/Effect"
25
+ import type { BlockNode, BlockQuote, List } from "../ast/BlockNode.js"
25
26
  import type { Document, DocumentNode } from "../ast/Document.js"
26
27
  import type { InlineNode } from "../ast/InlineNode.js"
28
+ import type { ExpandMacro, InfoPanel } from "../ast/MacroNode.js"
27
29
  import type { SerializeError } from "../SerializeError.js"
28
30
 
29
31
  /**
@@ -242,28 +244,18 @@ const serializeTable = (
242
244
  return lines.join("\n")
243
245
  })
244
246
 
245
- // Simple block type for list items - use unknown for flexibility
246
- type SimpleBlock = unknown
247
-
248
- // List item type
249
- type ListItemType = {
250
- readonly _tag: "ListItem"
251
- readonly checked?: boolean | undefined
252
- readonly children: ReadonlyArray<unknown>
253
- }
254
-
255
247
  /**
256
248
  * Serialize list.
257
249
  */
258
250
  const serializeList = (
259
- node: { ordered: boolean; start?: number | undefined; children: ReadonlyArray<unknown> },
251
+ node: List,
260
252
  options: SerializeOptions
261
253
  ): Effect.Effect<string, SerializeError> =>
262
254
  Effect.gen(function*() {
263
255
  const lines: Array<string> = []
264
256
  let counter = node.start ?? 1
265
257
 
266
- for (const item of node.children as ReadonlyArray<ListItemType>) {
258
+ for (const item of node.children) {
267
259
  const prefix = node.ordered ? `${counter}.` : "-"
268
260
  const checkbox = item.checked !== undefined ? (item.checked ? "[x] " : "[ ] ") : ""
269
261
 
@@ -291,38 +283,31 @@ const serializeList = (
291
283
  * Serialize simple block (for nested content).
292
284
  */
293
285
  const serializeSimpleBlock = (
294
- node: SimpleBlock,
286
+ node: BlockNode,
295
287
  options: SerializeOptions
296
288
  ): Effect.Effect<string, SerializeError> =>
297
289
  Effect.gen(function*() {
298
- const tagged = node as { readonly _tag: string }
299
- switch (tagged._tag) {
290
+ switch (node._tag) {
300
291
  case "Heading":
301
- return yield* serializeHeading(
302
- node as unknown as { level: 1 | 2 | 3 | 4 | 5 | 6; children: ReadonlyArray<InlineNode> }
303
- )
292
+ return yield* serializeHeading(node)
304
293
  case "Paragraph":
305
- return yield* serializeParagraph(node as unknown as { children: ReadonlyArray<InlineNode> })
294
+ return yield* serializeParagraph(node)
306
295
  case "CodeBlock":
307
- return serializeCodeBlock(node as unknown as { code: string; language?: string | undefined })
296
+ return serializeCodeBlock(node)
308
297
  case "ThematicBreak":
309
298
  return "---"
310
299
  case "Image":
311
- return serializeImage(
312
- node as unknown as { src: string; alt?: string | undefined; title?: string | undefined },
313
- options
314
- )
300
+ return serializeImage(node, options)
315
301
  case "Table":
316
- return yield* serializeTable(
317
- node as unknown as {
318
- header?: { cells: ReadonlyArray<{ children: ReadonlyArray<InlineNode> }> } | undefined
319
- rows: ReadonlyArray<{ cells: ReadonlyArray<{ children: ReadonlyArray<InlineNode> }> }>
320
- }
321
- )
322
- case "UnsupportedBlock": {
323
- const unsupported = node as unknown as { rawMarkdown?: string; rawHtml?: string; rawAdf?: string }
324
- return unsupported.rawMarkdown ?? unsupported.rawHtml ?? unsupported.rawAdf ?? ""
325
- }
302
+ return yield* serializeTable(node)
303
+ case "List":
304
+ return yield* serializeList(node, options)
305
+ case "BlockQuote":
306
+ return yield* serializeBlockQuote(node, options)
307
+ case "TaskList":
308
+ return yield* serializeTaskList(node.children, options)
309
+ case "UnsupportedBlock":
310
+ return node.rawMarkdown ?? node.rawHtml ?? node.rawAdf ?? ""
326
311
  default:
327
312
  return ""
328
313
  }
@@ -332,7 +317,7 @@ const serializeSimpleBlock = (
332
317
  * Serialize block quote.
333
318
  */
334
319
  const serializeBlockQuote = (
335
- node: { children: ReadonlyArray<unknown> },
320
+ node: BlockQuote,
336
321
  options: SerializeOptions
337
322
  ): Effect.Effect<string, SerializeError> =>
338
323
  Effect.gen(function*() {
@@ -349,7 +334,7 @@ const serializeBlockQuote = (
349
334
  * Serialize info panel to container syntax.
350
335
  */
351
336
  const serializeInfoPanel = (
352
- node: { panelType: string; title?: string | undefined; children: ReadonlyArray<unknown> },
337
+ node: InfoPanel,
353
338
  options: SerializeOptions
354
339
  ): Effect.Effect<string, SerializeError> =>
355
340
  Effect.gen(function*() {
@@ -370,7 +355,7 @@ const serializeInfoPanel = (
370
355
  * Serialize expand macro.
371
356
  */
372
357
  const serializeExpandMacro = (
373
- node: { title?: string | undefined; children: ReadonlyArray<unknown> },
358
+ node: ExpandMacro,
374
359
  options: SerializeOptions
375
360
  ): Effect.Effect<string, SerializeError> =>
376
361
  Effect.gen(function*() {
@@ -57,7 +57,7 @@ const makeMockFS = (files: Record<string, string> = {}) => {
57
57
 
58
58
  return {
59
59
  store,
60
- layer: Layer.succeed(FileSystem.FileSystem, FileSystem.FileSystem.of(partial as FileSystem.FileSystem))
60
+ layer: Layer.succeed(FileSystem.FileSystem, FileSystem.FileSystem.of(partial))
61
61
  }
62
62
  }
63
63
 
@@ -2,11 +2,24 @@ import * as NodeCrypto from "@effect/platform-node/NodeCrypto"
2
2
  import { it as effectIt } from "@effect/vitest"
3
3
  import * as Effect from "effect/Effect"
4
4
  import { describe, expect, it } from "vitest"
5
- import { AUTH_URL, buildAuthUrl, computeCodeChallenge, generateCodeVerifier } from "../src/auth/OAuthEndpoints.js"
5
+ import {
6
+ AUTH_URL,
7
+ buildAuthUrl,
8
+ computeCodeChallenge,
9
+ CONFLUENCE_SCOPES,
10
+ generateCodeVerifier
11
+ } from "../src/auth/OAuthEndpoints.js"
6
12
 
7
13
  const withCrypto = <A, E, R>(effect: Effect.Effect<A, E, R>) => effect.pipe(Effect.provide(NodeCrypto.layer))
8
14
 
9
15
  describe("OAuthEndpoints", () => {
16
+ describe("CONFLUENCE_SCOPES", () => {
17
+ it("includes attachment read and write scopes", () => {
18
+ expect(CONFLUENCE_SCOPES).toContain("read:attachment:confluence")
19
+ expect(CONFLUENCE_SCOPES).toContain("write:attachment:confluence")
20
+ })
21
+ })
22
+
10
23
  // ---- PKCE ----
11
24
 
12
25
  describe("generateCodeVerifier", () => {
@@ -64,7 +64,7 @@ const makeMockFS = () => {
64
64
  }
65
65
  return {
66
66
  store,
67
- layer: Layer.succeed(FileSystem.FileSystem, FileSystem.FileSystem.of(partial as FileSystem.FileSystem))
67
+ layer: Layer.succeed(FileSystem.FileSystem, FileSystem.FileSystem.of(partial))
68
68
  }
69
69
  }
70
70
 
@@ -0,0 +1,75 @@
1
+ import { describe, expect, it } from "vitest"
2
+ import { isPreviewableAttachment, renderAttachmentMarkdown, replaceAttachmentPlaceholder } from "../src/attachments.js"
3
+
4
+ describe("attachment helpers", () => {
5
+ it("treats SVG as previewable even with a generic media type", () => {
6
+ expect(isPreviewableAttachment({
7
+ filename: "diagram.svg",
8
+ mediaType: "application/octet-stream"
9
+ })).toBe(true)
10
+ })
11
+
12
+ it("renders image attachments as previews and other attachments as links", () => {
13
+ expect(renderAttachmentMarkdown({
14
+ id: "1",
15
+ filename: "screenshot.png",
16
+ url: "https://example.test/screenshot.png",
17
+ mediaType: "image/png",
18
+ size: 1
19
+ })).toBe("![screenshot.png](https://example.test/screenshot.png)")
20
+
21
+ expect(renderAttachmentMarkdown({
22
+ id: "2",
23
+ filename: "debug.log",
24
+ url: "https://example.test/debug.log",
25
+ mediaType: "text/plain",
26
+ size: 1
27
+ })).toBe("[debug.log](https://example.test/debug.log)")
28
+ })
29
+
30
+ it("escapes labels and wraps unsafe destinations in rendered markdown", () => {
31
+ expect(renderAttachmentMarkdown({
32
+ id: "1",
33
+ filename: "weird ] name\n.svg",
34
+ url: "https://example.test/a file(1).svg",
35
+ mediaType: "image/svg+xml",
36
+ size: 1
37
+ })).toBe("![weird \\] name .svg](<https://example.test/a file(1).svg>)")
38
+ })
39
+
40
+ it("uses an explicit label when rendering attachment markdown", () => {
41
+ expect(renderAttachmentMarkdown({
42
+ id: "1",
43
+ filename: "diagram.svg",
44
+ url: "https://example.test/diagram.svg",
45
+ mediaType: "image/svg+xml",
46
+ size: 1
47
+ }, { label: "Architecture diagram" })).toBe("![Architecture diagram](https://example.test/diagram.svg)")
48
+ })
49
+
50
+ it("replaces a named local Markdown placeholder", () => {
51
+ const result = replaceAttachmentPlaceholder(
52
+ "before\n![Diagram](./diagram.svg)\nafter",
53
+ "./diagram.svg",
54
+ "![diagram.svg](https://example.test/diagram.svg)"
55
+ )
56
+
57
+ expect(result).toEqual({
58
+ replacements: 1,
59
+ content: "before\n![diagram.svg](https://example.test/diagram.svg)\nafter"
60
+ })
61
+ })
62
+
63
+ it("passes the placeholder label to callback replacements", () => {
64
+ const result = replaceAttachmentPlaceholder(
65
+ "before\n![Architecture diagram](./diagram.svg)\nafter",
66
+ "./diagram.svg",
67
+ ({ isImage, label }) => `${isImage ? "!" : ""}[${label}](https://example.test/diagram.svg)`
68
+ )
69
+
70
+ expect(result).toEqual({
71
+ replacements: 1,
72
+ content: "before\n![Architecture diagram](https://example.test/diagram.svg)\nafter"
73
+ })
74
+ })
75
+ })