n8n-nodes-base 2.36.2 → 2.37.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 (167) hide show
  1. package/dist/cjs/build.tsbuildinfo +1 -1
  2. package/dist/credentials/TypeformOAuth2Api.credentials.d.ts.map +1 -1
  3. package/dist/credentials/TypeformOAuth2Api.credentials.js +32 -2
  4. package/dist/credentials/TypeformOAuth2Api.credentials.js.map +1 -1
  5. package/dist/known/credentials.json +2 -0
  6. package/dist/node-definitions/.nodes-hash +1 -1
  7. package/dist/node-definitions/nodes/n8n-nodes-base/googleAnalytics/v2/resource_report/operation_get.ts +2 -2
  8. package/dist/node-definitions/nodes/n8n-nodes-base/grist/v1.schema.js +6 -4
  9. package/dist/node-definitions/nodes/n8n-nodes-base/grist/v1.ts +28 -4
  10. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftOutlook/v2/resource_event/operation_create.ts +2 -2
  11. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/index.ts +3 -1
  12. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/index.schema.js +24 -0
  13. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/index.ts +18 -0
  14. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/index.schema.js +24 -0
  15. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/index.ts +18 -0
  16. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_download.schema.js +26 -0
  17. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_download.ts +49 -0
  18. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_update.schema.js +28 -0
  19. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_update.ts +59 -0
  20. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_upload.schema.js +26 -0
  21. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_file/operation_upload.ts +46 -0
  22. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/index.schema.js +30 -0
  23. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/index.ts +27 -0
  24. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_create.schema.js +25 -0
  25. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_create.ts +47 -0
  26. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_delete.schema.js +25 -0
  27. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_delete.ts +43 -0
  28. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_get.schema.js +26 -0
  29. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_get.ts +48 -0
  30. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_get_all.schema.js +29 -0
  31. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_get_all.ts +68 -0
  32. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_update.schema.js +25 -0
  33. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_update.ts +47 -0
  34. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_upsert.schema.js +25 -0
  35. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_item/operation_upsert.ts +47 -0
  36. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/index.schema.js +22 -0
  37. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/index.ts +15 -0
  38. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/operation_get.schema.js +25 -0
  39. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/operation_get.ts +41 -0
  40. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/operation_get_all.schema.js +26 -0
  41. package/dist/node-definitions/nodes/n8n-nodes-base/microsoftSharePoint/v2/resource_list/operation_get_all.ts +45 -0
  42. package/dist/nodes/Confluence/actions/attachment/getMany.operation.d.ts +32 -0
  43. package/dist/nodes/Confluence/actions/attachment/getMany.operation.d.ts.map +1 -0
  44. package/dist/nodes/Confluence/actions/attachment/getMany.operation.js +98 -0
  45. package/dist/nodes/Confluence/actions/attachment/getMany.operation.js.map +1 -0
  46. package/dist/nodes/Confluence/actions/attachment/index.d.ts +5 -0
  47. package/dist/nodes/Confluence/actions/attachment/index.d.ts.map +1 -0
  48. package/dist/nodes/Confluence/actions/attachment/index.js +62 -0
  49. package/dist/nodes/Confluence/actions/attachment/index.js.map +1 -0
  50. package/dist/nodes/Confluence/actions/common.d.ts +7 -0
  51. package/dist/nodes/Confluence/actions/common.d.ts.map +1 -1
  52. package/dist/nodes/Confluence/actions/common.js +25 -2
  53. package/dist/nodes/Confluence/actions/common.js.map +1 -1
  54. package/dist/nodes/Confluence/actions/description.d.ts.map +1 -1
  55. package/dist/nodes/Confluence/actions/description.js +6 -0
  56. package/dist/nodes/Confluence/actions/description.js.map +1 -1
  57. package/dist/nodes/Confluence/actions/page/append.operation.d.ts +6 -0
  58. package/dist/nodes/Confluence/actions/page/append.operation.d.ts.map +1 -0
  59. package/dist/nodes/Confluence/actions/page/append.operation.js +85 -0
  60. package/dist/nodes/Confluence/actions/page/append.operation.js.map +1 -0
  61. package/dist/nodes/Confluence/actions/page/bodyEnvelope.d.ts +4 -1
  62. package/dist/nodes/Confluence/actions/page/bodyEnvelope.d.ts.map +1 -1
  63. package/dist/nodes/Confluence/actions/page/bodyEnvelope.js +28 -7
  64. package/dist/nodes/Confluence/actions/page/bodyEnvelope.js.map +1 -1
  65. package/dist/nodes/Confluence/actions/page/delete.operation.d.ts +5 -0
  66. package/dist/nodes/Confluence/actions/page/delete.operation.d.ts.map +1 -0
  67. package/dist/nodes/Confluence/actions/page/delete.operation.js +82 -0
  68. package/dist/nodes/Confluence/actions/page/delete.operation.js.map +1 -0
  69. package/dist/nodes/Confluence/actions/page/index.d.ts +4 -1
  70. package/dist/nodes/Confluence/actions/page/index.d.ts.map +1 -1
  71. package/dist/nodes/Confluence/actions/page/index.js +28 -1
  72. package/dist/nodes/Confluence/actions/page/index.js.map +1 -1
  73. package/dist/nodes/Confluence/actions/page/pageWrite.d.ts +17 -0
  74. package/dist/nodes/Confluence/actions/page/pageWrite.d.ts.map +1 -0
  75. package/dist/nodes/Confluence/actions/page/pageWrite.js +70 -0
  76. package/dist/nodes/Confluence/actions/page/pageWrite.js.map +1 -0
  77. package/dist/nodes/Confluence/actions/page/update.operation.d.ts +5 -0
  78. package/dist/nodes/Confluence/actions/page/update.operation.d.ts.map +1 -0
  79. package/dist/nodes/Confluence/actions/page/update.operation.js +72 -0
  80. package/dist/nodes/Confluence/actions/page/update.operation.js.map +1 -0
  81. package/dist/nodes/Confluence/actions/router.d.ts +2 -0
  82. package/dist/nodes/Confluence/actions/router.d.ts.map +1 -1
  83. package/dist/nodes/Confluence/actions/router.js +15 -1
  84. package/dist/nodes/Confluence/actions/router.js.map +1 -1
  85. package/dist/nodes/Confluence/transport/index.d.ts +6 -0
  86. package/dist/nodes/Confluence/transport/index.d.ts.map +1 -1
  87. package/dist/nodes/Confluence/transport/index.js +86 -10
  88. package/dist/nodes/Confluence/transport/index.js.map +1 -1
  89. package/dist/nodes/Files/ExtractFromFile/actions/moveTo.operation.d.ts.map +1 -1
  90. package/dist/nodes/Files/ExtractFromFile/actions/moveTo.operation.js +2 -2
  91. package/dist/nodes/Files/ExtractFromFile/actions/moveTo.operation.js.map +1 -1
  92. package/dist/nodes/Files/ExtractFromFile/actions/parseIcsCalendar.d.ts +3 -0
  93. package/dist/nodes/Files/ExtractFromFile/actions/parseIcsCalendar.d.ts.map +1 -0
  94. package/dist/nodes/Files/ExtractFromFile/actions/parseIcsCalendar.js +10 -0
  95. package/dist/nodes/Files/ExtractFromFile/actions/parseIcsCalendar.js.map +1 -0
  96. package/dist/nodes/Form/Form.node.d.ts.map +1 -1
  97. package/dist/nodes/Form/Form.node.js +8 -0
  98. package/dist/nodes/Form/Form.node.js.map +1 -1
  99. package/dist/nodes/Form/interfaces.d.ts +1 -0
  100. package/dist/nodes/Form/interfaces.d.ts.map +1 -1
  101. package/dist/nodes/Form/interfaces.js.map +1 -1
  102. package/dist/nodes/Form/utils/formCompletionUtils.d.ts.map +1 -1
  103. package/dist/nodes/Form/utils/formCompletionUtils.js +8 -1
  104. package/dist/nodes/Form/utils/formCompletionUtils.js.map +1 -1
  105. package/dist/nodes/Form/utils/formNodeUtils.d.ts.map +1 -1
  106. package/dist/nodes/Form/utils/formNodeUtils.js +14 -3
  107. package/dist/nodes/Form/utils/formNodeUtils.js.map +1 -1
  108. package/dist/nodes/Form/utils/utils.d.ts +49 -9
  109. package/dist/nodes/Form/utils/utils.d.ts.map +1 -1
  110. package/dist/nodes/Form/utils/utils.js +309 -69
  111. package/dist/nodes/Form/utils/utils.js.map +1 -1
  112. package/dist/nodes/Form/v2/FormTriggerV2.node.d.ts +1 -1
  113. package/dist/nodes/Form/v2/FormTriggerV2.node.d.ts.map +1 -1
  114. package/dist/nodes/Form/v2/FormTriggerV2.node.js +0 -1
  115. package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
  116. package/dist/nodes/Google/Calendar/GoogleCalendar.node.d.ts.map +1 -1
  117. package/dist/nodes/Google/Calendar/GoogleCalendar.node.js +7 -0
  118. package/dist/nodes/Google/Calendar/GoogleCalendar.node.js.map +1 -1
  119. package/dist/nodes/Google/Drive/GoogleDriveTrigger.node.d.ts.map +1 -1
  120. package/dist/nodes/Google/Drive/GoogleDriveTrigger.node.js +82 -7
  121. package/dist/nodes/Google/Drive/GoogleDriveTrigger.node.js.map +1 -1
  122. package/dist/nodes/Google/Drive/v2/actions/file/download.operation.js +1 -1
  123. package/dist/nodes/Google/Drive/v2/actions/file/download.operation.js.map +1 -1
  124. package/dist/nodes/Grist/Grist.node.d.ts.map +1 -1
  125. package/dist/nodes/Grist/Grist.node.js +60 -2
  126. package/dist/nodes/Grist/Grist.node.js.map +1 -1
  127. package/dist/nodes/Grist/OperationDescription.d.ts.map +1 -1
  128. package/dist/nodes/Grist/OperationDescription.js +83 -3
  129. package/dist/nodes/Grist/OperationDescription.js.map +1 -1
  130. package/dist/nodes/Grist/types.d.ts +10 -0
  131. package/dist/nodes/Grist/types.d.ts.map +1 -1
  132. package/dist/nodes/MessageAnAgent/MessageAnAgent.node.d.ts.map +1 -1
  133. package/dist/nodes/MessageAnAgent/MessageAnAgent.node.js +5 -3
  134. package/dist/nodes/MessageAnAgent/MessageAnAgent.node.js.map +1 -1
  135. package/dist/nodes/MessageAnAgent/shared.d.ts.map +1 -1
  136. package/dist/nodes/MessageAnAgent/shared.js +146 -4
  137. package/dist/nodes/MessageAnAgent/shared.js.map +1 -1
  138. package/dist/nodes/MessageAnAgent/v2/MessageAnAgentV2.node.d.ts.map +1 -1
  139. package/dist/nodes/MessageAnAgent/v2/MessageAnAgentV2.node.js +4 -3
  140. package/dist/nodes/MessageAnAgent/v2/MessageAnAgentV2.node.js.map +1 -1
  141. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.d.ts.map +1 -1
  142. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +3 -8
  143. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -1
  144. package/dist/nodes/MongoDb/GenericFunctions.d.ts +1 -0
  145. package/dist/nodes/MongoDb/GenericFunctions.d.ts.map +1 -1
  146. package/dist/nodes/MongoDb/GenericFunctions.js +15 -2
  147. package/dist/nodes/MongoDb/GenericFunctions.js.map +1 -1
  148. package/dist/nodes/MongoDb/MongoDb.node.d.ts.map +1 -1
  149. package/dist/nodes/MongoDb/MongoDb.node.js +32 -19
  150. package/dist/nodes/MongoDb/MongoDb.node.js.map +1 -1
  151. package/dist/nodes/PagerDuty/GenericFunctions.d.ts.map +1 -1
  152. package/dist/nodes/PagerDuty/GenericFunctions.js +5 -2
  153. package/dist/nodes/PagerDuty/GenericFunctions.js.map +1 -1
  154. package/dist/nodes/Transform/Aggregate/Aggregate.node.d.ts.map +1 -1
  155. package/dist/nodes/Transform/Aggregate/Aggregate.node.js +1 -4
  156. package/dist/nodes/Transform/Aggregate/Aggregate.node.js.map +1 -1
  157. package/dist/nodes/Transform/SplitOut/utils.d.ts.map +1 -1
  158. package/dist/nodes/Transform/SplitOut/utils.js +2 -4
  159. package/dist/nodes/Transform/SplitOut/utils.js.map +1 -1
  160. package/dist/nodes/Transform/utils/utils.d.ts +6 -0
  161. package/dist/nodes/Transform/utils/utils.d.ts.map +1 -1
  162. package/dist/nodes/Transform/utils/utils.js +15 -1
  163. package/dist/nodes/Transform/utils/utils.js.map +1 -1
  164. package/dist/nodes/Wait/Wait.node.d.ts +1 -1
  165. package/dist/types/credentials.json +3 -3
  166. package/dist/types/nodes.json +9 -8
  167. package/package.json +13 -13
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execute = exports.description = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const transport_1 = require("../../transport");
6
+ const common_1 = require("../common");
7
+ const showOnDelete = { resource: ['page'], operation: ['delete'] };
8
+ exports.description = [
9
+ {
10
+ displayName: "Deleting a page does not delete its child pages — they move up to the deleted page's parent",
11
+ name: 'deleteChildrenNotice',
12
+ type: 'notice',
13
+ default: '',
14
+ displayOptions: { show: showOnDelete },
15
+ },
16
+ {
17
+ ...common_1.optionalSpaceRLC,
18
+ description: 'Limits page selection and By Title lookups to one space. Leave empty or pick "All Spaces" to search across all spaces.',
19
+ displayOptions: { show: showOnDelete },
20
+ },
21
+ {
22
+ ...common_1.pageRLC,
23
+ description: 'The page to delete',
24
+ displayOptions: { show: showOnDelete },
25
+ },
26
+ {
27
+ displayName: 'Permanently Delete (Purge)',
28
+ name: 'purge',
29
+ type: 'boolean',
30
+ default: false,
31
+ description: "Whether to permanently delete the page instead of moving it to trash. This cannot be undone and requires admin permission in the page's space.",
32
+ displayOptions: { show: showOnDelete },
33
+ },
34
+ ];
35
+ const execute = async function (itemIndex) {
36
+ const purge = this.getNodeParameter('purge', itemIndex, false);
37
+ const pageId = await common_1.resolvePageId.call(this, itemIndex);
38
+ const endpoint = `/wiki/api/v2/pages/${encodeURIComponent(pageId)}`;
39
+ try {
40
+ await transport_1.confluenceApiRequest.call(this, 'DELETE', endpoint);
41
+ }
42
+ catch (error) {
43
+ // The OAuth scope is only the ceiling — deleting also needs the space-level permission
44
+ if (error instanceof n8n_workflow_1.NodeApiError && error.httpCode === '403') {
45
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Confluence refused to delete the page', {
46
+ itemIndex,
47
+ description: 'The connected user needs the "Delete pages" permission in the page\'s space; no OAuth scope change can grant it.',
48
+ });
49
+ }
50
+ const notFound = error instanceof n8n_workflow_1.NodeApiError && error.httpCode === '404';
51
+ // Confluence masks permission failures on this endpoint as 404
52
+ if (notFound && !purge) {
53
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Confluence could not delete the page', {
54
+ itemIndex,
55
+ description: 'The page may not exist or may already be in the trash, the connected user may lack view or "Delete pages" permission in the page\'s space (Confluence reports permission failures as "not found"), or the page is an unsaved draft.',
56
+ });
57
+ }
58
+ // A page that is already in the trash 404s on the plain DELETE; when purging,
59
+ // continue so the purge request still runs (a missing page 404s again there)
60
+ if (!notFound) {
61
+ throw error;
62
+ }
63
+ }
64
+ // The API only purges pages that are already trashed, so purge is a second request
65
+ if (purge) {
66
+ try {
67
+ await transport_1.confluenceApiRequest.call(this, 'DELETE', endpoint, {}, { purge: true });
68
+ }
69
+ catch (error) {
70
+ if (error instanceof n8n_workflow_1.NodeApiError && error.httpCode === '403') {
71
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The page was moved to trash, but could not be purged', {
72
+ itemIndex,
73
+ description: 'Permanently deleting a page requires admin permission in its space. The page remains in the trash and can be restored from the Confluence UI.',
74
+ });
75
+ }
76
+ throw error;
77
+ }
78
+ }
79
+ return { deleted: true, pageId, purged: purge };
80
+ };
81
+ exports.execute = execute;
82
+ //# sourceMappingURL=delete.operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.operation.js","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/delete.operation.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import type { INodeProperties } from 'n8n-workflow';
2
+ import * as append from './append.operation';
2
3
  import * as create from './create.operation';
4
+ import * as del from './delete.operation';
3
5
  import * as get from './get.operation';
4
- export { create, get };
6
+ import * as update from './update.operation';
7
+ export { append, create, del as delete, get, update };
5
8
  export declare const description: INodeProperties[];
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAEvB,eAAO,MAAM,WAAW,EAAE,eAAe,EA6BxC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,eAAe,EAkDxC,CAAC"}
@@ -33,11 +33,17 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.description = exports.get = exports.create = void 0;
36
+ exports.description = exports.update = exports.get = exports.delete = exports.create = exports.append = void 0;
37
+ const append = __importStar(require("./append.operation"));
38
+ exports.append = append;
37
39
  const create = __importStar(require("./create.operation"));
38
40
  exports.create = create;
41
+ const del = __importStar(require("./delete.operation"));
42
+ exports.delete = del;
39
43
  const get = __importStar(require("./get.operation"));
40
44
  exports.get = get;
45
+ const update = __importStar(require("./update.operation"));
46
+ exports.update = update;
41
47
  exports.description = [
42
48
  {
43
49
  displayName: 'Operation',
@@ -50,22 +56,43 @@ exports.description = [
50
56
  },
51
57
  },
52
58
  options: [
59
+ {
60
+ name: 'Append',
61
+ value: 'append',
62
+ description: 'Append content to the bottom of an existing page',
63
+ action: 'Append content to a page',
64
+ },
53
65
  {
54
66
  name: 'Create',
55
67
  value: 'create',
56
68
  description: 'Create a new page in a space',
57
69
  action: 'Create a page',
58
70
  },
71
+ {
72
+ name: 'Delete',
73
+ value: 'delete',
74
+ description: 'Move a page to trash, or permanently delete it',
75
+ action: 'Delete a page',
76
+ },
59
77
  {
60
78
  name: 'Get',
61
79
  value: 'get',
62
80
  description: 'Retrieve a page, optionally with its full sub-tree',
63
81
  action: 'Get a page',
64
82
  },
83
+ {
84
+ name: 'Update',
85
+ value: 'update',
86
+ description: 'Replace the title and body of an existing page',
87
+ action: 'Update a page',
88
+ },
65
89
  ],
66
90
  default: 'create',
67
91
  },
92
+ ...append.description,
68
93
  ...create.description,
94
+ ...del.description,
69
95
  ...get.description,
96
+ ...update.description,
70
97
  ];
71
98
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAY,MAAM,+CAA2B;QAGpC,MAAM;AAFf,MAAY,GAAG,4CAAwB;QAEtB,GAAG;AAEP,QAAA,WAAW,GAAsB;IAC7C;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,QAAQ,EAAE,CAAC,MAAM,CAAC;aAClB;SACD;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,eAAe;aACvB;YACD;gBACC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,oDAAoD;gBACjE,MAAM,EAAE,YAAY;aACpB;SACD;QACD,OAAO,EAAE,QAAQ;KACjB;IACD,GAAG,MAAM,CAAC,WAAW;IACrB,GAAG,GAAG,CAAC,WAAW;CAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAY,MAAM,+CAA2B;QAMpC,MAAM;AALf,MAAY,MAAM,+CAA2B;QAK5B,MAAM;AAJvB,MAAY,GAAG,+CAA2B;QAIV,MAAM;AAHtC,MAAY,GAAG,4CAAwB;QAGC,GAAG;AAF3C,MAAY,MAAM,+CAA2B;QAEA,MAAM;AAEtC,QAAA,WAAW,GAAsB;IAC7C;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,QAAQ,EAAE,CAAC,MAAM,CAAC;aAClB;SACD;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,kDAAkD;gBAC/D,MAAM,EAAE,0BAA0B;aAClC;YACD;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,eAAe;aACvB;YACD;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,gDAAgD;gBAC7D,MAAM,EAAE,eAAe;aACvB;YACD;gBACC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,oDAAoD;gBACjE,MAAM,EAAE,YAAY;aACpB;YACD;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,gDAAgD;gBAC7D,MAAM,EAAE,eAAe;aACvB;SACD;QACD,OAAO,EAAE,QAAQ;KACjB;IACD,GAAG,MAAM,CAAC,WAAW;IACrB,GAAG,MAAM,CAAC,WAAW;IACrB,GAAG,GAAG,CAAC,WAAW;IAClB,GAAG,GAAG,CAAC,WAAW;IAClB,GAAG,MAAM,CAAC,WAAW;CACrB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IDataObject, IExecuteFunctions } from 'n8n-workflow';
2
+ import type { ConfluenceBodyEnvelope } from './bodyEnvelope';
3
+ /**
4
+ * Shared fetch → modify → PUT machinery for the Update and Append operations.
5
+ * Confluence uses optimistic locking: every PUT must carry
6
+ * `version.number = current + 1`, so both operations read the page first and
7
+ * a stale number (someone edited in between) surfaces as a 409.
8
+ */
9
+ export interface ConfluencePageSnapshot {
10
+ status: 'current' | 'draft';
11
+ title: string;
12
+ versionNumber: number;
13
+ bodyValue: string;
14
+ }
15
+ export declare function fetchPageForWrite(this: IExecuteFunctions, itemIndex: number, pageId: string, bodyFormat?: ConfluenceBodyEnvelope['representation']): Promise<ConfluencePageSnapshot>;
16
+ export declare function putPage(this: IExecuteFunctions, itemIndex: number, pageId: string, snapshot: ConfluencePageSnapshot, title: string, body: ConfluenceBodyEnvelope, status?: ConfluencePageSnapshot['status']): Promise<IDataObject>;
17
+ //# sourceMappingURL=pageWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageWrite.d.ts","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/pageWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG7D;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,GACnD,OAAO,CAAC,sBAAsB,CAAC,CA0DjC;AAED,wBAAsB,OAAO,CAC5B,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,sBAAsB,EAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,sBAAsB,EAC5B,MAAM,GAAE,sBAAsB,CAAC,QAAQ,CAAmB,GACxD,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchPageForWrite = fetchPageForWrite;
4
+ exports.putPage = putPage;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const transport_1 = require("../../transport");
7
+ async function fetchPageForWrite(itemIndex, pageId, bodyFormat) {
8
+ const qs = {};
9
+ if (bodyFormat !== undefined)
10
+ qs['body-format'] = bodyFormat;
11
+ const page = await transport_1.confluenceApiRequest.call(this, 'GET', `/wiki/api/v2/pages/${encodeURIComponent(pageId)}`, {}, qs);
12
+ const status = typeof page.status === 'string' ? page.status : 'unknown';
13
+ if (status !== 'current' && status !== 'draft') {
14
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The page cannot be changed because its status is "${status}"`, {
15
+ itemIndex,
16
+ description: 'Only pages with "current" or "draft" status can be written to. Restore the page in Confluence first, then run this operation again.',
17
+ });
18
+ }
19
+ const versionNumber = page.version?.number;
20
+ if (typeof versionNumber !== 'number') {
21
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Could not read the current version of the page', {
22
+ itemIndex,
23
+ });
24
+ }
25
+ let bodyValue = '';
26
+ if (bodyFormat !== undefined) {
27
+ const bodyEnvelope = page.body?.[bodyFormat];
28
+ // Empty pages still return value: '' — a missing value must not be
29
+ // mistaken for one, or the write would overwrite the page
30
+ if (typeof bodyEnvelope?.value !== 'string') {
31
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Could not read the current content of the page', {
32
+ itemIndex,
33
+ description: `The API response did not include the page body in the "${bodyFormat}" format. The page was not changed.`,
34
+ });
35
+ }
36
+ bodyValue = bodyEnvelope.value;
37
+ }
38
+ return {
39
+ status,
40
+ title: typeof page.title === 'string' ? page.title : '',
41
+ versionNumber,
42
+ bodyValue,
43
+ };
44
+ }
45
+ async function putPage(itemIndex, pageId, snapshot, title, body, status = snapshot.status) {
46
+ const payload = {
47
+ id: pageId,
48
+ status,
49
+ title,
50
+ body,
51
+ // Drafts are single-version and require version 1; only published-to-published
52
+ // writes increment. See https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-id-put
53
+ version: {
54
+ number: status === 'draft' || snapshot.status === 'draft' ? 1 : snapshot.versionNumber + 1,
55
+ },
56
+ };
57
+ try {
58
+ return await transport_1.confluenceApiRequest.call(this, 'PUT', `/wiki/api/v2/pages/${encodeURIComponent(pageId)}`, payload);
59
+ }
60
+ catch (error) {
61
+ if (error instanceof n8n_workflow_1.NodeApiError && error.httpCode === '409') {
62
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The page was modified concurrently', {
63
+ itemIndex,
64
+ description: 'Someone else changed the page between this operation reading it and saving it. Nothing was overwritten — run the node again to apply the change to the latest version of the page.',
65
+ });
66
+ }
67
+ throw error;
68
+ }
69
+ }
70
+ //# sourceMappingURL=pageWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageWrite.js","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/pageWrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ import type { ConfluenceOperation } from '../router';
3
+ export declare const description: INodeProperties[];
4
+ export declare const execute: ConfluenceOperation;
5
+ //# sourceMappingURL=update.operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.operation.d.ts","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/update.operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,cAAc,CAAC;AAMvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIrD,eAAO,MAAM,WAAW,EAAE,eAAe,EA+CxC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,mBAmCrB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execute = exports.description = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const bodyEnvelope_1 = require("./bodyEnvelope");
6
+ const pageWrite_1 = require("./pageWrite");
7
+ const common_1 = require("../common");
8
+ const showOnUpdate = { resource: ['page'], operation: ['update'] };
9
+ exports.description = [
10
+ {
11
+ ...common_1.optionalSpaceRLC,
12
+ description: 'Limits page selection and By Title lookups to one space. Leave empty or pick "All Spaces" to search across all spaces.',
13
+ displayOptions: { show: showOnUpdate },
14
+ },
15
+ {
16
+ ...common_1.pageRLC,
17
+ description: 'The page to update',
18
+ displayOptions: { show: showOnUpdate },
19
+ },
20
+ {
21
+ displayName: 'New Title',
22
+ name: 'title',
23
+ type: 'string',
24
+ default: '',
25
+ placeholder: 'e.g. Weekly Report',
26
+ description: 'The new title of the page. Leave empty to keep the current title.',
27
+ displayOptions: { show: showOnUpdate },
28
+ },
29
+ ...(0, bodyEnvelope_1.bodyProperties)(['update'], 'Leave empty to keep the current page content'),
30
+ {
31
+ displayName: 'Status',
32
+ name: 'status',
33
+ type: 'options',
34
+ default: 'keep',
35
+ description: 'Whether the page is published or a draft after the update',
36
+ options: [
37
+ {
38
+ name: 'Draft',
39
+ value: 'draft',
40
+ description: 'Save the update as a draft. Replaces any existing draft of the page.',
41
+ },
42
+ {
43
+ name: 'Keep Current Status',
44
+ value: 'keep',
45
+ description: 'A published page stays published, a draft stays a draft',
46
+ },
47
+ {
48
+ name: 'Published',
49
+ value: 'current',
50
+ description: 'Publish the page; use this to publish a page created as a draft',
51
+ },
52
+ ],
53
+ displayOptions: { show: showOnUpdate },
54
+ },
55
+ ];
56
+ const execute = async function (itemIndex) {
57
+ const body = (0, bodyEnvelope_1.readBodyEnvelopeIfProvided)(this, itemIndex);
58
+ const rawTitle = this.getNodeParameter('title', itemIndex, '');
59
+ // An empty title means "keep the current one", so an object from an
60
+ // expression must fail loudly instead of silently keeping the old title
61
+ if (rawTitle !== null && typeof rawTitle === 'object') {
62
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'New Title must be text', { itemIndex });
63
+ }
64
+ const title = rawTitle === null || rawTitle === undefined ? '' : String(rawTitle).trim();
65
+ const pageId = await common_1.resolvePageId.call(this, itemIndex);
66
+ const page = await pageWrite_1.fetchPageForWrite.call(this, itemIndex, pageId, body === undefined ? 'storage' : undefined);
67
+ const statusChoice = this.getNodeParameter('status', itemIndex, 'keep');
68
+ const status = statusChoice === 'current' || statusChoice === 'draft' ? statusChoice : page.status;
69
+ return await pageWrite_1.putPage.call(this, itemIndex, pageId, page, title === '' ? page.title : title, body ?? { representation: 'storage', value: page.bodyValue }, status);
70
+ };
71
+ exports.execute = execute;
72
+ //# sourceMappingURL=update.operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.operation.js","sourceRoot":"","sources":["../../../../../nodes/Confluence/actions/page/update.operation.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,7 @@ import type { IDataObject, IExecuteFunctions, INodeExecutionData } from 'n8n-wor
4
4
  * `<resource>.<operation>.execute.call(this, i)` once per item.
5
5
  */
6
6
  export type ConfluenceOperation = (this: IExecuteFunctions, itemIndex: number) => Promise<IDataObject | IDataObject[]>;
7
+ /** Variant for operations that emit their own execution items (e.g. binary output). */
8
+ export type ConfluenceBinaryOperation = (this: IExecuteFunctions, itemIndex: number) => Promise<INodeExecutionData[]>;
7
9
  export declare function router(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
8
10
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../nodes/Confluence/actions/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CACjC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,KACb,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC;AAE1C,wBAAsB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CA6CrF"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../nodes/Confluence/actions/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAMvF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CACjC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,KACb,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC;AAE1C,uFAAuF;AACvF,MAAM,MAAM,yBAAyB,GAAG,CACvC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,KACb,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEnC,wBAAsB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CA0DrF"}
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.router = router;
37
37
  const n8n_workflow_1 = require("n8n-workflow");
38
+ const attachment = __importStar(require("./attachment"));
38
39
  const page = __importStar(require("./page"));
39
40
  async function router() {
40
41
  const items = this.getInputData();
@@ -44,17 +45,30 @@ async function router() {
44
45
  for (let i = 0; i < items.length; i++) {
45
46
  try {
46
47
  let responseData;
48
+ let responseItems;
47
49
  switch (`${resource}:${operation}`) {
50
+ case 'attachment:getMany':
51
+ responseItems = await attachment.getMany.execute.call(this, i);
52
+ break;
53
+ case 'page:append':
54
+ responseData = await page.append.execute.call(this, i);
55
+ break;
48
56
  case 'page:create':
49
57
  responseData = await page.create.execute.call(this, i);
50
58
  break;
59
+ case 'page:delete':
60
+ responseData = await page.delete.execute.call(this, i);
61
+ break;
51
62
  case 'page:get':
52
63
  responseData = await page.get.execute.call(this, i);
53
64
  break;
65
+ case 'page:update':
66
+ responseData = await page.update.execute.call(this, i);
67
+ break;
54
68
  default:
55
69
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${resource}:${operation}" is not supported`);
56
70
  }
57
- const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
71
+ const executionData = this.helpers.constructExecutionMetaData(responseItems ?? this.helpers.returnJsonArray(responseData ?? []), { itemData: { item: i } });
58
72
  returnData.push.apply(returnData, executionData);
59
73
  }
60
74
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../nodes/Confluence/actions/router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAkD;AAElD,MAAY,IAAI,mCAAe;AAWxB,KAAK;IACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAyB,EAAE,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC;YACJ,IAAI,YAAyC,CAAC;YAE9C,QAAQ,GAAG,QAAQ,IAAI,SAAS,EAAE,EAAE,CAAC;gBACpC,KAAK,aAAa;oBACjB,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACvD,MAAM;gBACP,KAAK,UAAU;oBACd,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACP;oBACC,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,kBAAkB,QAAQ,IAAI,SAAS,oBAAoB,CAC3D,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAC5D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,EAC1C,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CACzB,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CACxD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAChD,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CACzB,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC7C,SAAS;YACV,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../nodes/Confluence/actions/router.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  import type { IDataObject, IExecuteFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
2
2
  export declare const CONFLUENCE_CREDENTIAL_NAME = "confluenceCloudOAuth2Api";
3
3
  export declare function confluenceApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, qs?: IDataObject): Promise<IDataObject>;
4
+ /**
5
+ * Fetches a binary resource (e.g. an attachment's server-relative `downloadLink`)
6
+ * through the gateway and returns its raw bytes. Same base-URL concatenation rule
7
+ * as `confluenceApiRequest`: the endpoint can never change the host.
8
+ */
9
+ export declare function confluenceApiRequestBinary(this: IExecuteFunctions, endpoint: string): Promise<Buffer>;
4
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../nodes/Confluence/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EAEnB,qBAAqB,EAErB,MAAM,cAAc,CAAC;AAKtB,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,EAC/C,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,EACtB,EAAE,GAAE,WAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CAkDtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../nodes/Confluence/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EAEnB,qBAAqB,EAErB,MAAM,cAAc,CAAC;AAKtB,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAuErE,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,EAC/C,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,EACtB,EAAE,GAAE,WAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CAoCtB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC/C,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
@@ -2,9 +2,59 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CONFLUENCE_CREDENTIAL_NAME = void 0;
4
4
  exports.confluenceApiRequest = confluenceApiRequest;
5
+ exports.confluenceApiRequestBinary = confluenceApiRequestBinary;
5
6
  const n8n_workflow_1 = require("n8n-workflow");
6
7
  const atlassian_1 = require("../../../utils/atlassian");
7
8
  exports.CONFLUENCE_CREDENTIAL_NAME = 'confluenceCloudOAuth2Api';
9
+ function extractApiMessage(body) {
10
+ if (typeof body !== 'object' || body === null)
11
+ return undefined;
12
+ const data = body;
13
+ const { errors: v2Errors, message: v1Message } = data;
14
+ const first = Array.isArray(v2Errors)
15
+ ? v2Errors[0]
16
+ : undefined;
17
+ if (typeof first?.title === 'string' && first.title !== '') {
18
+ return {
19
+ message: first.title,
20
+ description: typeof first.detail === 'string' && first.detail !== '' ? first.detail : undefined,
21
+ data,
22
+ };
23
+ }
24
+ if (typeof v1Message === 'string' && v1Message !== '')
25
+ return { message: v1Message, data };
26
+ return undefined;
27
+ }
28
+ // NodeApiError's constructor short-circuits on re-wrap (returns the same
29
+ // instance, dropping any option overrides), so enrichment needs a fresh error.
30
+ function toConfluenceApiError(error) {
31
+ const wrapped = error instanceof n8n_workflow_1.NodeApiError ? error : undefined;
32
+ const body = wrapped ? wrapped.context.data : error.response?.data;
33
+ const extracted = extractApiMessage(body);
34
+ if (extracted !== undefined) {
35
+ let httpCode;
36
+ if (wrapped) {
37
+ httpCode = wrapped.httpCode ?? undefined;
38
+ }
39
+ else {
40
+ const status = error.response?.status;
41
+ httpCode =
42
+ typeof status === 'number' || typeof status === 'string' ? String(status) : undefined;
43
+ }
44
+ const sanitizedError = { message: extracted.message };
45
+ const fresh = new n8n_workflow_1.NodeApiError(this.getNode(), sanitizedError, {
46
+ message: extracted.message,
47
+ description: extracted.description,
48
+ httpCode,
49
+ });
50
+ // Keep the raw response body visible in the NDV's error-data pane
51
+ fresh.context.data = extracted.data;
52
+ return fresh;
53
+ }
54
+ if (wrapped)
55
+ return wrapped;
56
+ return new n8n_workflow_1.NodeApiError(this.getNode(), error);
57
+ }
8
58
  async function confluenceApiRequest(method, endpoint, body = {}, qs = {}) {
9
59
  const credentials = await this.getCredentials(exports.CONFLUENCE_CREDENTIAL_NAME);
10
60
  // Keyed `domain` for backwards compatibility with Jira credentials; labeled "Site URL" in the UI
@@ -26,16 +76,42 @@ async function confluenceApiRequest(method, endpoint, body = {}, qs = {}) {
26
76
  return await this.helpers.httpRequestWithAuthentication.call(this, exports.CONFLUENCE_CREDENTIAL_NAME, options);
27
77
  }
28
78
  catch (error) {
29
- // Atlassian's v2 error envelope sits in response.data.errors; without this,
30
- // NodeApiError stops at Axios's generic "Request failed with status code N"
31
- const envelope = error.response?.data
32
- ?.errors;
33
- const first = Array.isArray(envelope)
34
- ? envelope[0]
35
- : undefined;
36
- const title = typeof first?.title === 'string' && first.title !== '' ? first.title : undefined;
37
- const detail = typeof first?.detail === 'string' && first.detail !== '' ? first.detail : undefined;
38
- throw new n8n_workflow_1.NodeApiError(this.getNode(), error, title ? { message: title, description: detail } : undefined);
79
+ throw toConfluenceApiError.call(this, error);
80
+ }
81
+ }
82
+ /**
83
+ * Fetches a binary resource (e.g. an attachment's server-relative `downloadLink`)
84
+ * through the gateway and returns its raw bytes. Same base-URL concatenation rule
85
+ * as `confluenceApiRequest`: the endpoint can never change the host.
86
+ */
87
+ async function confluenceApiRequestBinary(endpoint) {
88
+ const credentials = await this.getCredentials(exports.CONFLUENCE_CREDENTIAL_NAME);
89
+ const siteUrl = credentials.domain;
90
+ if (typeof siteUrl !== 'string' || siteUrl === '') {
91
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The Confluence credential is missing the Site URL field');
92
+ }
93
+ const cloudId = await atlassian_1.getAtlassianCloudId.call(this, exports.CONFLUENCE_CREDENTIAL_NAME, siteUrl, 'confluence');
94
+ // Downloads 302 to the Atlassian media host, which authenticates the hop via its
95
+ // own signed token in the redirect URL; the OAuth header must not follow cross-origin.
96
+ const options = {
97
+ method: 'GET',
98
+ url: `${(0, atlassian_1.getAtlassianApiBaseUrl)('confluence', cloudId)}${endpoint}`,
99
+ encoding: 'arraybuffer',
100
+ sendCredentialsOnCrossOriginRedirect: false,
101
+ };
102
+ let data;
103
+ try {
104
+ data = await this.helpers.httpRequestWithAuthentication.call(this, exports.CONFLUENCE_CREDENTIAL_NAME, options);
105
+ }
106
+ catch (error) {
107
+ throw toConfluenceApiError.call(this, error);
39
108
  }
109
+ if (Buffer.isBuffer(data))
110
+ return data;
111
+ if (data instanceof ArrayBuffer)
112
+ return Buffer.from(data);
113
+ if (typeof data === 'string')
114
+ return Buffer.from(data);
115
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Confluence returned an unexpected binary response');
40
116
  }
41
117
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nodes/Confluence/transport/index.ts"],"names":[],"mappings":";;;;AAQA,+CAAgE;AAEhE,gDAA+E;AAElE,QAAA,0BAA0B,GAAG,0BAA0B,CAAC;AAE9D,KAAK,+BAEX,MAA2B,EAC3B,QAAgB,EAChB,IAAI,GAAgB,EAAE,EACtB,EAAE,GAAgB,EAAE;IAEpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAA,0BAA0B,CAAC,CAAC;IAC1E,iGAAiG;IACjG,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,yDAAyD,CACzD,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,+BAAmB,CAAC,IAAI,CAC7C,IAAI,EACJ,QAAA,0BAA0B,EAC1B,OAAO,EACP,YAAY,CACZ,CAAC;IAEF,iFAAiF;IACjF,4EAA4E;IAC5E,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,IAAA,kCAAsB,EAAC,YAAY,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE;QAClE,IAAI;QACJ,EAAE;QACF,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,IAAI,CAAC;QACJ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAC3D,IAAI,EACJ,QAAA,0BAA0B,EAC1B,OAAO,CACP,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,QAAQ,GAAI,KAAwD,CAAC,QAAQ,EAAE,IAAI;YACxF,EAAE,MAAM,CAAC;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC,CAAC,CAAE,QAAQ,CAAC,CAAC,CAA2C;YACxD,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,KAAK,GAAG,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,MAAM,MAAM,GACX,OAAO,KAAK,EAAE,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,MAAM,IAAI,2BAAY,CACrB,IAAI,CAAC,OAAO,EAAE,EACd,KAAmB,EACnB,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;IACH,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nodes/Confluence/transport/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"moveTo.operation.d.ts","sourceRoot":"","sources":["../../../../../nodes/Files/ExtractFromFile/actions/moveTo.operation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,MAAM,cAAc,CAAC;AAatB,eAAO,MAAM,UAAU,EAAE,eAAe,EAwEvC,CAAC;AAQF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAmD,CAAC;AAE5E,wBAAsB,OAAO,CAC5B,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,kBAAkB,EAAE,EAC3B,SAAS,EAAE,MAAM,iCA2FjB"}
1
+ {"version":3,"file":"moveTo.operation.d.ts","sourceRoot":"","sources":["../../../../../nodes/Files/ExtractFromFile/actions/moveTo.operation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,MAAM,cAAc,CAAC;AActB,eAAO,MAAM,UAAU,EAAE,eAAe,EAwEvC,CAAC;AAQF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAmD,CAAC;AAE5E,wBAAsB,OAAO,CAC5B,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,kBAAkB,EAAE,EAC3B,SAAS,EAAE,MAAM,iCA2FjB"}
@@ -9,9 +9,9 @@ const iconv_lite_1 = __importDefault(require("iconv-lite"));
9
9
  const set_1 = __importDefault(require("lodash/set"));
10
10
  const unset_1 = __importDefault(require("lodash/unset"));
11
11
  const n8n_workflow_1 = require("n8n-workflow");
12
- const ts_ics_1 = require("ts-ics");
13
12
  const descriptions_1 = require("../../../../utils/descriptions");
14
13
  const utilities_1 = require("../../../../utils/utilities");
14
+ const parseIcsCalendar_1 = require("./parseIcsCalendar");
15
15
  exports.properties = [
16
16
  {
17
17
  displayName: 'Input Binary Field',
@@ -128,7 +128,7 @@ async function execute(items, operation) {
128
128
  }
129
129
  }
130
130
  if (operation === 'fromIcs') {
131
- convertedValue = (0, ts_ics_1.icsCalendarToObject)(convertedValue);
131
+ convertedValue = (0, parseIcsCalendar_1.parseIcsCalendar)(convertedValue);
132
132
  }
133
133
  const destinationKey = this.getNodeParameter('destinationKey', itemIndex, '');
134
134
  (0, set_1.default)(newItem.json, destinationKey, convertedValue);