@relayfile/adapter-confluence 0.1.0 → 0.1.1

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 (61) hide show
  1. package/discovery/confluence/.adapter.md +4 -4
  2. package/dist/__tests__/alias-slug.test.d.ts +2 -0
  3. package/dist/__tests__/alias-slug.test.d.ts.map +1 -0
  4. package/dist/__tests__/alias-slug.test.js +19 -0
  5. package/dist/__tests__/alias-slug.test.js.map +1 -0
  6. package/dist/__tests__/confluence-adapter.test.js +8 -8
  7. package/dist/__tests__/index-emission.test.d.ts +2 -0
  8. package/dist/__tests__/index-emission.test.d.ts.map +1 -0
  9. package/dist/__tests__/index-emission.test.js +67 -0
  10. package/dist/__tests__/index-emission.test.js.map +1 -0
  11. package/dist/__tests__/layout-prompt.test.d.ts +2 -0
  12. package/dist/__tests__/layout-prompt.test.d.ts.map +1 -0
  13. package/dist/__tests__/layout-prompt.test.js +18 -0
  14. package/dist/__tests__/layout-prompt.test.js.map +1 -0
  15. package/dist/__tests__/path-mapper.test.d.ts +2 -0
  16. package/dist/__tests__/path-mapper.test.d.ts.map +1 -0
  17. package/dist/__tests__/path-mapper.test.js +90 -0
  18. package/dist/__tests__/path-mapper.test.js.map +1 -0
  19. package/dist/__tests__/webhook-normalizer.test.d.ts +2 -0
  20. package/dist/__tests__/webhook-normalizer.test.d.ts.map +1 -0
  21. package/dist/__tests__/webhook-normalizer.test.js +106 -0
  22. package/dist/__tests__/webhook-normalizer.test.js.map +1 -0
  23. package/dist/alias-slug.d.ts +9 -0
  24. package/dist/alias-slug.d.ts.map +1 -0
  25. package/dist/alias-slug.js +23 -0
  26. package/dist/alias-slug.js.map +1 -0
  27. package/dist/index-emitter.d.ts +10 -0
  28. package/dist/index-emitter.d.ts.map +1 -0
  29. package/dist/index-emitter.js +26 -0
  30. package/dist/index-emitter.js.map +1 -0
  31. package/dist/index.d.ts +12 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +8 -3
  34. package/dist/index.js.map +1 -1
  35. package/dist/layout-prompt.d.ts +7 -0
  36. package/dist/layout-prompt.d.ts.map +1 -0
  37. package/dist/layout-prompt.js +56 -0
  38. package/dist/layout-prompt.js.map +1 -0
  39. package/dist/path-mapper.d.ts +40 -2
  40. package/dist/path-mapper.d.ts.map +1 -1
  41. package/dist/path-mapper.js +155 -10
  42. package/dist/path-mapper.js.map +1 -1
  43. package/dist/queries.d.ts +22 -2
  44. package/dist/queries.d.ts.map +1 -1
  45. package/dist/queries.js +43 -2
  46. package/dist/queries.js.map +1 -1
  47. package/dist/resources.js +2 -2
  48. package/dist/resources.js.map +1 -1
  49. package/dist/types.d.ts +1 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js +1 -0
  52. package/dist/types.js.map +1 -1
  53. package/dist/webhook-normalizer.d.ts +59 -0
  54. package/dist/webhook-normalizer.d.ts.map +1 -0
  55. package/dist/webhook-normalizer.js +469 -0
  56. package/dist/webhook-normalizer.js.map +1 -0
  57. package/dist/writeback.d.ts +1 -2
  58. package/dist/writeback.d.ts.map +1 -1
  59. package/dist/writeback.js +1 -1
  60. package/dist/writeback.js.map +1 -1
  61. package/package.json +22 -2
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 { CONFLUENCE_API_PAGES_ROUTE, CONFLUENCE_API_SPACES_ROUTE, resolveConfluenceReadRequest, } from './queries.js';
4
- export { resolveConfluenceDeleteRequest, resolveConfluenceWritebackRequest, } from './writeback.js';
2
+ export { CONFLUENCE_OBJECT_TYPES, CONFLUENCE_CANONICAL_PAGE_STATUSES, CONFLUENCE_PATH_ROOT, computeConfluencePath, confluenceByIdAliasPath, confluenceByTitleAliasPath, confluencePageByIdAliasPath, confluencePageByStatePath, confluencePageByTitleAliasPath, confluencePagePath, confluencePagesIndexPath, confluenceProviderRootIndexPath, confluenceSpaceByIdAliasPath, 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;AAQjC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,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,yBAAyB,EACzB,8BAA8B,EAC9B,kBAAkB,EAClB,wBAAwB,EACxB,+BAA+B,EAC/B,4BAA4B,EAC5B,+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 alias subtrees.\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## Aliases\n\nPages are addressable through three parallel paths that all resolve to identical JSON bytes:\n\n- Canonical: `/confluence/pages/<title>__<pageId>.json` (or the space-scoped 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 collisions get an 8-char hash suffix.\n- By state: `/confluence/pages/by-state/<status>/<pageId>.json` \u2014 `current`, `draft`, `archived`, or `trashed`.\n\nSpaces follow the same pattern under `/confluence/spaces/by-id/` and `/confluence/spaces/by-title/`.\n\n## JSONL And Querying\n\nConfluence does not emit JSONL in this adapter today. Each page and space is a standalone `.json` record.\n\nExamples:\n\n```bash\nls /confluence/pages\njq '.[0]' /confluence/pages/_index.json\njq '.[] | {id, title, status}' /confluence/pages/_index.json\ngrep -R \"Release plan\" /confluence/pages\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,63DA+CpC,CAAC;AAEF,wBAAgB,0BAA0B;;;;EAMzC"}
@@ -0,0 +1,56 @@
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 alias subtrees.
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
+ ## Aliases
26
+
27
+ Pages are addressable through three parallel paths that all resolve to identical JSON bytes:
28
+
29
+ - Canonical: \`/confluence/pages/<title>__<pageId>.json\` (or the space-scoped 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\` — collisions get an 8-char hash suffix.
32
+ - By state: \`/confluence/pages/by-state/<status>/<pageId>.json\` — \`current\`, \`draft\`, \`archived\`, or \`trashed\`.
33
+
34
+ Spaces follow the same pattern under \`/confluence/spaces/by-id/\` and \`/confluence/spaces/by-title/\`.
35
+
36
+ ## JSONL And Querying
37
+
38
+ Confluence does not emit JSONL in this adapter today. Each page and space is a standalone \`.json\` record.
39
+
40
+ Examples:
41
+
42
+ \`\`\`bash
43
+ ls /confluence/pages
44
+ jq '.[0]' /confluence/pages/_index.json
45
+ jq '.[] | {id, title, status}' /confluence/pages/_index.json
46
+ grep -R "Release plan" /confluence/pages
47
+ \`\`\`
48
+ `;
49
+ export function confluenceLayoutPromptFile() {
50
+ return {
51
+ path: '/confluence/LAYOUT.md',
52
+ contentType: 'text/markdown; charset=utf-8',
53
+ content: CONFLUENCE_LAYOUT_PROMPT.endsWith('\n') ? CONFLUENCE_LAYOUT_PROMPT : `${CONFLUENCE_LAYOUT_PROMPT}\n`,
54
+ };
55
+ }
56
+ //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CvC,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"}
@@ -1,12 +1,50 @@
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 confluenceSpacePath(spaceIdOrKey: string, name?: string): string;
6
- export declare function confluencePagePath(pageId: string, title?: string, spaceId?: string): string;
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;
7
40
  export declare function computeConfluencePath(objectType: string, objectId: string, options?: {
8
41
  title?: string;
9
42
  spaceId?: string;
10
43
  }): string;
44
+ /**
45
+ * Decode a Confluence path segment back to its raw identifier. Supports both
46
+ * the v2 `<slug>__<id>` convention (post-PR) and the legacy `<slug>--<id>`
47
+ * convention so existing mounts written before the cutover keep resolving.
48
+ */
11
49
  export declare function extractConfluenceIdFromPathSegment(segment: string): string;
12
50
  //# sourceMappingURL=path-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,4BAA6B,CAAC;AAClE,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAmBhF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAeD,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,wBAAwB,CAO1F;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3F;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,MAAM,CAUR;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI1E"}
1
+ {"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,16 @@
1
+ import { aliasCollisionSuffix, slugifyAlias } from './alias-slug.js';
1
2
  import { CONFLUENCE_PATH_ROOT } from './types.js';
3
+ export { CONFLUENCE_PATH_ROOT };
2
4
  export const CONFLUENCE_OBJECT_TYPES = ['page', 'space'];
5
+ /**
6
+ * Confluence-canonical page statuses, used for the by-state alias scope. The
7
+ * Confluence REST v2 schema (see `discovery/confluence/pages/.schema.json`)
8
+ * pins this to `current | draft`, but real payloads also surface `archived`
9
+ * and `trashed`. We accept any non-empty string and emit it lowercased; the
10
+ * canonical-status list below is informational for downstream readers.
11
+ */
12
+ export const CONFLUENCE_CANONICAL_PAGE_STATUSES = ['current', 'draft', 'archived', 'trashed'];
13
+ const MAX_HUMAN_READABLE_LENGTH = 80;
3
14
  const OBJECT_TYPE_ALIASES = {
4
15
  confluencepage: 'page',
5
16
  confluencespace: 'space',
@@ -8,6 +19,17 @@ const OBJECT_TYPE_ALIASES = {
8
19
  space: 'space',
9
20
  spaces: 'space',
10
21
  };
22
+ /**
23
+ * Nango sync record `model` names → canonical Confluence object types. The
24
+ * `confluence-relay` Nango integration emits records under these PascalCase
25
+ * model names; resolving them here lets the cloud's record writer turn a
26
+ * Nango payload into a relayfile path without hardcoding the mapping at the
27
+ * dispatch site.
28
+ */
29
+ const NANGO_MODEL_MAP = {
30
+ ConfluencePage: 'page',
31
+ ConfluenceSpace: 'space',
32
+ };
11
33
  function assertNonEmptySegment(value, label) {
12
34
  const trimmed = value.trim();
13
35
  if (!trimmed) {
@@ -19,15 +41,55 @@ export function encodeConfluencePathSegment(value) {
19
41
  return encodeURIComponent(assertNonEmptySegment(value, 'path segment'));
20
42
  }
21
43
  function slugify(value) {
22
- return value
44
+ const ascii = value
45
+ .normalize('NFKD')
46
+ .replace(/[\u0300-\u036f]/g, '')
47
+ .replace(/[^\x00-\x7F]+/g, '');
48
+ const slug = ascii
23
49
  .replace(/[{}]/g, '')
24
50
  .replace(/[^a-zA-Z0-9]+/g, '-')
25
51
  .replace(/^-+|-+$/g, '')
26
52
  .toLowerCase();
53
+ if (slug.length <= MAX_HUMAN_READABLE_LENGTH) {
54
+ return slug;
55
+ }
56
+ const truncated = slug.slice(0, MAX_HUMAN_READABLE_LENGTH);
57
+ const cutIndex = truncated.lastIndexOf('-');
58
+ const bounded = cutIndex > 0 ? truncated.slice(0, cutIndex) : truncated;
59
+ return bounded.replace(/^-+|-+$/g, '');
60
+ }
61
+ export function nameWithId(humanReadable, id, opts = {}) {
62
+ const normalizedId = encodeConfluencePathSegment(id);
63
+ const slug = humanReadable ? slugify(humanReadable) : '';
64
+ if (!slug) {
65
+ return normalizedId;
66
+ }
67
+ const existingNames = opts.existingNames;
68
+ const baseName = existingNames?.has(slug)
69
+ ? `${slug}-${aliasCollisionSuffix(normalizedId)}`
70
+ : slug;
71
+ existingNames?.add(baseName);
72
+ return `${baseName}__${normalizedId}`;
27
73
  }
28
- function titleSegmentWithId(title, id) {
29
- const slug = title ? slugify(title) : '';
30
- return slug ? `${slug}--${encodeConfluencePathSegment(id)}` : encodeConfluencePathSegment(id);
74
+ // For Confluence `<humanReadable>__<id>` segments, `humanReadable` is the
75
+ // leading prefix and `id` is the trailing identifier.
76
+ export function parseNameWithId(filename) {
77
+ const extIndex = filename.lastIndexOf('.');
78
+ const ext = extIndex > 0 && extIndex < filename.length - 1 ? filename.slice(extIndex + 1) : null;
79
+ const basename = ext ? filename.slice(0, extIndex) : filename;
80
+ const separatorIndex = basename.lastIndexOf('__');
81
+ if (separatorIndex <= 0 || separatorIndex === basename.length - 2) {
82
+ return {
83
+ humanReadable: null,
84
+ id: basename,
85
+ ext,
86
+ };
87
+ }
88
+ return {
89
+ humanReadable: basename.slice(0, separatorIndex),
90
+ id: basename.slice(separatorIndex + 2),
91
+ ext,
92
+ };
31
93
  }
32
94
  export function normalizeConfluenceObjectType(objectType) {
33
95
  const normalized = objectType.trim().toLowerCase();
@@ -37,16 +99,90 @@ export function normalizeConfluenceObjectType(objectType) {
37
99
  }
38
100
  return mapped;
39
101
  }
40
- export function confluenceSpacePath(spaceIdOrKey, name) {
41
- return `${CONFLUENCE_PATH_ROOT}/spaces/${titleSegmentWithId(name, spaceIdOrKey)}.json`;
102
+ export function tryNormalizeConfluenceObjectType(objectType) {
103
+ try {
104
+ return normalizeConfluenceObjectType(objectType);
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ export function normalizeNangoConfluenceModel(model) {
111
+ const direct = NANGO_MODEL_MAP[model];
112
+ if (direct)
113
+ return direct;
114
+ return normalizeConfluenceObjectType(model);
115
+ }
116
+ export function slugifyStatusName(status) {
117
+ const trimmed = assertNonEmptySegment(status, 'status name');
118
+ let slug = '';
119
+ let previousWasSeparator = false;
120
+ for (const character of trimmed.normalize('NFC').toLowerCase()) {
121
+ if (/\s/u.test(character)) {
122
+ if (!previousWasSeparator && slug.length > 0) {
123
+ slug += '-';
124
+ }
125
+ previousWasSeparator = true;
126
+ continue;
127
+ }
128
+ previousWasSeparator = false;
129
+ if (/[a-z0-9]/u.test(character)) {
130
+ slug += character;
131
+ continue;
132
+ }
133
+ if (character === '-') {
134
+ slug += '%2D';
135
+ continue;
136
+ }
137
+ slug += encodeURIComponent(character);
138
+ }
139
+ return assertNonEmptySegment(slug, 'status slug');
140
+ }
141
+ export function confluenceSpacePath(spaceIdOrKey, name, opts) {
142
+ return `${CONFLUENCE_PATH_ROOT}/spaces/${nameWithId(name, spaceIdOrKey, opts)}.json`;
42
143
  }
43
- export function confluencePagePath(pageId, title, spaceId) {
44
- const pageSegment = titleSegmentWithId(title, pageId);
144
+ export function confluencePagePath(pageId, title, spaceId, opts) {
145
+ const pageSegment = nameWithId(title, pageId, opts);
45
146
  if (spaceId) {
46
147
  return `${CONFLUENCE_PATH_ROOT}/spaces/${encodeConfluencePathSegment(spaceId)}/pages/${pageSegment}.json`;
47
148
  }
48
149
  return `${CONFLUENCE_PATH_ROOT}/pages/${pageSegment}.json`;
49
150
  }
151
+ export function confluencePagesIndexPath() {
152
+ return `${CONFLUENCE_PATH_ROOT}/pages/_index.json`;
153
+ }
154
+ export function confluenceSpacesIndexPath() {
155
+ return `${CONFLUENCE_PATH_ROOT}/spaces/_index.json`;
156
+ }
157
+ export function confluenceProviderRootIndexPath() {
158
+ return `${CONFLUENCE_PATH_ROOT}/_index.json`;
159
+ }
160
+ export function confluencePageByStatePath(status, pageId) {
161
+ return `${CONFLUENCE_PATH_ROOT}/pages/by-state/${slugifyStatusName(status)}/${encodeConfluencePathSegment(pageId)}.json`;
162
+ }
163
+ export function confluenceByTitleAliasPath(scope, title, id, colliding = false) {
164
+ const slug = slugifyAlias(title);
165
+ if (!slug) {
166
+ throw new Error('Confluence alias title must slug to a non-empty string');
167
+ }
168
+ const filename = colliding ? `${slug}-${aliasCollisionSuffix(id)}` : slug;
169
+ return `${scope}/by-title/${encodeConfluencePathSegment(filename)}.json`;
170
+ }
171
+ export function confluenceByIdAliasPath(scope, identifier) {
172
+ return `${scope}/by-id/${encodeConfluencePathSegment(identifier)}.json`;
173
+ }
174
+ export function confluencePageByIdAliasPath(id) {
175
+ return confluenceByIdAliasPath(`${CONFLUENCE_PATH_ROOT}/pages`, id);
176
+ }
177
+ export function confluencePageByTitleAliasPath(title, id, colliding = false) {
178
+ return confluenceByTitleAliasPath(`${CONFLUENCE_PATH_ROOT}/pages`, title, id, colliding);
179
+ }
180
+ export function confluenceSpaceByIdAliasPath(id) {
181
+ return confluenceByIdAliasPath(`${CONFLUENCE_PATH_ROOT}/spaces`, id);
182
+ }
183
+ export function confluenceSpaceByTitleAliasPath(title, id, colliding = false) {
184
+ return confluenceByTitleAliasPath(`${CONFLUENCE_PATH_ROOT}/spaces`, title, id, colliding);
185
+ }
50
186
  export function computeConfluencePath(objectType, objectId, options = {}) {
51
187
  const normalizedType = normalizeConfluenceObjectType(objectType);
52
188
  const normalizedId = assertNonEmptySegment(objectId, 'object id');
@@ -57,9 +193,18 @@ export function computeConfluencePath(objectType, objectId, options = {}) {
57
193
  return confluenceSpacePath(normalizedId, options.title);
58
194
  }
59
195
  }
196
+ /**
197
+ * Decode a Confluence path segment back to its raw identifier. Supports both
198
+ * the v2 `<slug>__<id>` convention (post-PR) and the legacy `<slug>--<id>`
199
+ * convention so existing mounts written before the cutover keep resolving.
200
+ */
60
201
  export function extractConfluenceIdFromPathSegment(segment) {
61
202
  const decoded = decodeURIComponent(segment);
62
- const suffix = /--([^/]+)$/u.exec(decoded);
63
- return suffix?.[1] ? suffix[1] : decoded;
203
+ const v2Match = /__([^/]+)$/u.exec(decoded);
204
+ if (v2Match?.[1]) {
205
+ return v2Match[1];
206
+ }
207
+ const legacyMatch = /--([^/]+)$/u.exec(decoded);
208
+ return legacyMatch?.[1] ? legacyMatch[1] : decoded;
64
209
  }
65
210
  //# sourceMappingURL=path-mapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
package/dist/queries.d.ts CHANGED
@@ -1,5 +1,25 @@
1
- import { type ConfluenceReadRequest } from './types.js';
2
- export declare const CONFLUENCE_API_PAGES_ROUTE = "/wiki/api/v2/pages";
1
+ import { type ConfluencePage, type ConfluenceSpace, type ConfluenceReadRequest } from './types.js';
3
2
  export declare const CONFLUENCE_API_SPACES_ROUTE = "/wiki/api/v2/spaces";
3
+ export interface ConfluenceBaseIndexRow {
4
+ id: string;
5
+ title: string;
6
+ updated: string;
7
+ }
8
+ export interface ConfluencePageIndexRow extends ConfluenceBaseIndexRow {
9
+ spaceId: string;
10
+ status: string;
11
+ }
12
+ export interface ConfluenceSpaceIndexRow extends ConfluenceBaseIndexRow {
13
+ key: string;
14
+ }
15
+ export declare function getConfluencePageHumanReadable(page: {
16
+ title?: string | null;
17
+ }): string | undefined;
18
+ export declare function getConfluenceSpaceHumanReadable(space: {
19
+ name?: string | null;
20
+ key?: string | null;
21
+ }): string | undefined;
22
+ export declare function confluencePageIndexRow(page: ConfluencePage): ConfluencePageIndexRow;
23
+ export declare function confluenceSpaceIndexRow(space: ConfluenceSpace): ConfluenceSpaceIndexRow;
4
24
  export declare function resolveConfluenceReadRequest(path: string): ConfluenceReadRequest;
5
25
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEtF,eAAO,MAAM,0BAA0B,uBAAuB,CAAC;AAC/D,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CA0DhF"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAA4D,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE7J,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,GAAG,EAAE,MAAM,CAAC;CACb;AAsBD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAElG;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAExH;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,CAQnF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,uBAAuB,CAOvF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CA0DhF"}
package/dist/queries.js CHANGED
@@ -1,7 +1,48 @@
1
1
  import { extractConfluenceIdFromPathSegment } from './path-mapper.js';
2
- import { CONFLUENCE_DEFAULT_PAGE_SIZE } from './types.js';
3
- export const CONFLUENCE_API_PAGES_ROUTE = '/wiki/api/v2/pages';
2
+ import { CONFLUENCE_API_PAGES_ROUTE, CONFLUENCE_DEFAULT_PAGE_SIZE } from './types.js';
4
3
  export const CONFLUENCE_API_SPACES_ROUTE = '/wiki/api/v2/spaces';
4
+ function normalizeString(value) {
5
+ if (typeof value !== 'string')
6
+ return undefined;
7
+ const trimmed = value.trim();
8
+ return trimmed.length > 0 ? trimmed : undefined;
9
+ }
10
+ function normalizeIndexTitle(value) {
11
+ return typeof value === 'string' ? value : '';
12
+ }
13
+ function normalizeUpdated(...values) {
14
+ for (const value of values) {
15
+ if (typeof value === 'string') {
16
+ const trimmed = value.trim();
17
+ if (trimmed.length > 0)
18
+ return trimmed;
19
+ }
20
+ }
21
+ return '';
22
+ }
23
+ export function getConfluencePageHumanReadable(page) {
24
+ return normalizeString(page.title ?? undefined);
25
+ }
26
+ export function getConfluenceSpaceHumanReadable(space) {
27
+ return normalizeString(space.name ?? undefined) ?? normalizeString(space.key ?? undefined);
28
+ }
29
+ export function confluencePageIndexRow(page) {
30
+ return {
31
+ id: page.id,
32
+ title: normalizeIndexTitle(page.title),
33
+ updated: normalizeUpdated(page.version?.createdAt, page.createdAt),
34
+ spaceId: normalizeIndexTitle(page.spaceId),
35
+ status: normalizeIndexTitle(page.status),
36
+ };
37
+ }
38
+ export function confluenceSpaceIndexRow(space) {
39
+ return {
40
+ id: space.id,
41
+ title: normalizeIndexTitle(space.name) || normalizeIndexTitle(space.key),
42
+ updated: normalizeUpdated(space.createdAt),
43
+ key: normalizeIndexTitle(space.key),
44
+ };
45
+ }
5
46
  export function resolveConfluenceReadRequest(path) {
6
47
  const normalized = normalizePath(path);
7
48
  if (normalized === '/confluence/pages' || normalized === '/confluence/pages/') {
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
package/dist/resources.js CHANGED
@@ -3,7 +3,7 @@ export const resources = [
3
3
  name: "pages",
4
4
  path: "/confluence/pages",
5
5
  pathPattern: /^\/confluence\/pages(?:\/[^\/]+(?:\.json)?)?$/,
6
- idPattern: /^(?:[A-Za-z0-9_.~-]+--)?\d+$/,
6
+ idPattern: /^(?:[A-Za-z0-9_.~-]+(?:--|__))?\d+$/,
7
7
  schema: "discovery/confluence/pages/.schema.json",
8
8
  createExample: "discovery/confluence/pages/.create.example.json",
9
9
  },
@@ -11,7 +11,7 @@ export const resources = [
11
11
  name: "pages",
12
12
  path: "/confluence/spaces/{spaceIdOrKey}/pages",
13
13
  pathPattern: /^\/confluence\/spaces\/[^\/]+\/pages(?:\/[^\/]+(?:\.json)?)?$/,
14
- idPattern: /^(?:[A-Za-z0-9_.~-]+--)?\d+$/,
14
+ idPattern: /^(?:[A-Za-z0-9_.~-]+(?:--|__))?\d+$/,
15
15
  schema: "discovery/confluence/spaces/{spaceIdOrKey}/pages/.schema.json",
16
16
  createExample: "discovery/confluence/spaces/{spaceIdOrKey}/pages/.create.example.json",
17
17
  },
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,8BAA8B;QACzC,MAAM,EAAE,yCAAyC;QACjD,aAAa,EAAE,iDAAiD;KACjE;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,+DAA+D;QAC5E,SAAS,EAAE,8BAA8B;QACzC,MAAM,EAAE,+DAA+D;QACvE,aAAa,EAAE,uEAAuE;KACvF;CACkD,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,qCAAqC;QAChD,MAAM,EAAE,yCAAyC;QACjD,aAAa,EAAE,iDAAiD;KACjE;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,+DAA+D;QAC5E,SAAS,EAAE,qCAAqC;QAChD,MAAM,EAAE,+DAA+D;QACvE,aAAa,EAAE,uEAAuE;KACvF;CACkD,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export type { BulkWriteFile, ConnectionProvider, ProxyRequest, ProxyResponse } from '@relayfile/sdk';
2
2
  export declare const CONFLUENCE_PROVIDER_NAME = "confluence";
3
3
  export declare const CONFLUENCE_PATH_ROOT = "/confluence";
4
+ export declare const CONFLUENCE_API_PAGES_ROUTE = "/wiki/api/v2/pages";
4
5
  export declare const CONFLUENCE_DEFAULT_PAGE_SIZE = 100;
5
6
  export type JsonPrimitive = boolean | number | null | string;
6
7
  export type JsonValue = JsonArray | JsonObject | JsonPrimitive;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export const CONFLUENCE_PROVIDER_NAME = 'confluence';
2
2
  export const CONFLUENCE_PATH_ROOT = '/confluence';
3
+ export const CONFLUENCE_API_PAGES_ROUTE = '/wiki/api/v2/pages';
3
4
  export const CONFLUENCE_DEFAULT_PAGE_SIZE = 100;
4
5
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { type ConfluenceNormalizedEvent } from './types.js';
2
+ export declare const CONFLUENCE_PROVIDER = "confluence";
3
+ export declare const CONFLUENCE_SIGNATURE_HEADER = "x-atlassian-webhook-identifier";
4
+ export declare const CONFLUENCE_EVENT_HEADER = "x-atlassian-webhook-event";
5
+ export declare const CONFLUENCE_DELIVERY_HEADER = "x-atlassian-webhook-delivery";
6
+ type ConfluenceRecord = Record<string, unknown>;
7
+ type HeaderValue = boolean | number | readonly string[] | string | null | undefined;
8
+ export type ConfluenceWebhookHeaders = Headers | Iterable<readonly [string, string]> | Record<string, HeaderValue>;
9
+ export interface ConfluenceWebhookConnectionMetadata {
10
+ connectionId?: string;
11
+ deliveryId?: string;
12
+ provider: string;
13
+ providerConfigKey?: string;
14
+ requestId?: string;
15
+ signature?: string;
16
+ webhookId?: string;
17
+ webhookTimestamp?: number;
18
+ }
19
+ export interface ConfluenceWebhookSignatureValidationResult {
20
+ expectedSignature?: string;
21
+ ok: boolean;
22
+ reason?: 'invalid-signature' | 'malformed-signature' | 'missing-secret' | 'missing-signature';
23
+ receivedSignature?: string;
24
+ }
25
+ export interface ConfluenceWebhookTimestampValidationResult {
26
+ driftMs?: number;
27
+ ok: boolean;
28
+ reason?: 'missing-timestamp' | 'stale-timestamp';
29
+ webhookTimestamp?: number;
30
+ }
31
+ /**
32
+ * Normalize a Confluence webhook payload into the adapter's
33
+ * `ConfluenceNormalizedEvent` shape. The Atlassian webhook contract varies
34
+ * between Cloud Connect apps and Forge webhooks; this normalizer pulls
35
+ * `webhookEvent` or `eventType` from the envelope and resolves the underlying
36
+ * object id from `page.id` / `space.id` / `content.id`. Callers in the cloud
37
+ * webhook router should pass headers; everything else falls back to safe
38
+ * defaults so the normalizer never crashes on partial payloads.
39
+ *
40
+ * NOTE: HMAC signing semantics for Confluence Connect/Forge webhooks are
41
+ * complex (JWT-based for Connect; signed query secret for Forge) and the
42
+ * upstream cloud handler does not validate signatures today. The
43
+ * `validateConfluenceWebhookSignature` helper below implements the same
44
+ * `sha256` HMAC contract Linear uses so it can be wired up symmetrically
45
+ * once Confluence-side signing is enabled — until then the cloud-side
46
+ * handler should skip signature validation.
47
+ */
48
+ export declare function normalizeConfluenceWebhook(rawPayload: unknown, headers?: ConfluenceWebhookHeaders): ConfluenceNormalizedEvent;
49
+ export declare function parseConfluenceWebhookPayload(rawPayload: unknown): ConfluenceRecord;
50
+ export declare function extractConfluenceEventType(payload: unknown, headers?: ConfluenceWebhookHeaders): string;
51
+ export declare function extractConfluenceObjectType(payload: unknown, headers?: ConfluenceWebhookHeaders, resolvedEventType?: string): string;
52
+ export declare function extractConfluenceObjectId(payload: unknown, objectType?: string): string;
53
+ export declare function extractConfluenceConnectionMetadata(payload: unknown, headers?: ConfluenceWebhookHeaders): ConfluenceWebhookConnectionMetadata;
54
+ export declare function computeConfluenceWebhookSignature(rawPayload: unknown, secret: string): string;
55
+ export declare function validateConfluenceWebhookSignature(rawPayload: unknown, headers: ConfluenceWebhookHeaders, secret: string): ConfluenceWebhookSignatureValidationResult;
56
+ export declare function assertValidConfluenceWebhookSignature(rawPayload: unknown, headers: ConfluenceWebhookHeaders, secret: string): void;
57
+ export declare function validateConfluenceWebhookTimestamp(payload: unknown, toleranceMs?: number, now?: number): ConfluenceWebhookTimestampValidationResult;
58
+ export {};
59
+ //# sourceMappingURL=webhook-normalizer.d.ts.map