n8n-nodes-substack 1.6.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/credentials/SubstackApi.credentials.js +1 -1
  2. package/dist/credentials/SubstackApi.credentials.js.map +1 -1
  3. package/dist/nodes/Substack/Comment.fields.js +0 -14
  4. package/dist/nodes/Substack/Comment.fields.js.map +1 -1
  5. package/dist/nodes/Substack/Comment.operations.d.ts +1 -2
  6. package/dist/nodes/Substack/Comment.operations.js +2 -29
  7. package/dist/nodes/Substack/Comment.operations.js.map +1 -1
  8. package/dist/nodes/Substack/Note.fields.js +2 -57
  9. package/dist/nodes/Substack/Note.fields.js.map +1 -1
  10. package/dist/nodes/Substack/Note.operations.d.ts +0 -1
  11. package/dist/nodes/Substack/Note.operations.js +9 -107
  12. package/dist/nodes/Substack/Note.operations.js.map +1 -1
  13. package/dist/nodes/Substack/Post.fields.js +0 -30
  14. package/dist/nodes/Substack/Post.fields.js.map +1 -1
  15. package/dist/nodes/Substack/Post.operations.d.ts +0 -1
  16. package/dist/nodes/Substack/Post.operations.js +2 -32
  17. package/dist/nodes/Substack/Post.operations.js.map +1 -1
  18. package/dist/nodes/Substack/Profile.fields.js +0 -14
  19. package/dist/nodes/Substack/Profile.fields.js.map +1 -1
  20. package/dist/nodes/Substack/Profile.operations.d.ts +0 -1
  21. package/dist/nodes/Substack/Profile.operations.js +1 -30
  22. package/dist/nodes/Substack/Profile.operations.js.map +1 -1
  23. package/dist/nodes/Substack/SubstackUtils.d.ts +0 -8
  24. package/dist/nodes/Substack/SubstackUtils.js +0 -30
  25. package/dist/nodes/Substack/SubstackUtils.js.map +1 -1
  26. package/dist/nodes/Substack/shared/DataFormatters.js +17 -29
  27. package/dist/nodes/Substack/shared/DataFormatters.js.map +1 -1
  28. package/dist/nodes/Substack/types.d.ts +1 -15
  29. package/dist/package.json +5 -5
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +5 -5
  32. package/dist/nodes/Substack/MarkdownParser.d.ts +0 -11
  33. package/dist/nodes/Substack/MarkdownParser.js +0 -228
  34. package/dist/nodes/Substack/MarkdownParser.js.map +0 -1
  35. package/dist/nodes/Substack/shared/ResourceOperations.d.ts +0 -25
  36. package/dist/nodes/Substack/shared/ResourceOperations.js +0 -59
  37. package/dist/nodes/Substack/shared/ResourceOperations.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-substack",
3
- "version": "1.6.0",
3
+ "version": "1.7.2",
4
4
  "description": "n8n community node for Substack API integration",
5
5
  "keywords": [
6
6
  "n8n-community-node-package"
@@ -25,7 +25,7 @@
25
25
  "format": "prettier nodes credentials --write",
26
26
  "lint": "eslint nodes credentials package.json",
27
27
  "lintfix": "eslint nodes credentials package.json --fix",
28
- "prepublishOnly": "pnpm run build && pnpm dlx eslint -c eslint.prepublish.config.js nodes credentials package.json",
28
+ "prepublishOnly": "pnpm run build && eslint -c eslint.prepublish.config.js nodes credentials package.json",
29
29
  "test": "jest",
30
30
  "test:watch": "jest --watch",
31
31
  "test:unit": "jest",
@@ -47,8 +47,8 @@
47
47
  "@types/jest": "^30.0.0",
48
48
  "@types/marked": "^4.3.2",
49
49
  "@types/turndown": "^5.0.5",
50
- "@typescript-eslint/parser": "~8.51.0",
51
- "eslint": "^9.29.0",
50
+ "@typescript-eslint/parser": "~8.56.0",
51
+ "eslint": ">=9.29.0 <10",
52
52
  "eslint-plugin-n8n-nodes-base": "^1.16.3",
53
53
  "gulp": "^5.0.0",
54
54
  "jest": "^30.0.3",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "marked": "^4.3.0",
64
- "substack-api": "^2.2.1",
64
+ "substack-api": "^3.1.0",
65
65
  "turndown": "^7.2.0"
66
66
  }
67
67
  }
@@ -1,11 +0,0 @@
1
- import type { OwnProfile } from 'substack-api';
2
- export declare class MarkdownParser {
3
- static parseMarkdownToNoteStructured(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>;
4
- static parseMarkdownToNote(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>;
5
- private static preprocessMarkdown;
6
- private static processTokensStructured;
7
- private static processHeadingStructured;
8
- private static processParagraphStructured;
9
- private static processListStructured;
10
- private static processInlineTokensStructured;
11
- }
@@ -1,228 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MarkdownParser = void 0;
4
- const marked_1 = require("marked");
5
- marked_1.marked.setOptions({
6
- gfm: true,
7
- breaks: false,
8
- });
9
- function decodeHtmlEntities(text) {
10
- const entityMap = {
11
- '&#39;': "'",
12
- '&quot;': '"',
13
- '&amp;': '&',
14
- '&lt;': '<',
15
- '&gt;': '>',
16
- '&nbsp;': ' ',
17
- };
18
- return text.replace(/&#?\w+;/g, (entity) => entityMap[entity] || entity);
19
- }
20
- class MarkdownParser {
21
- static parseMarkdownToNoteStructured(markdown, noteBuilder) {
22
- if (!markdown.trim()) {
23
- throw new Error('Note body cannot be empty - at least one paragraph with content is required');
24
- }
25
- const processedMarkdown = this.preprocessMarkdown(markdown);
26
- const tokens = marked_1.marked.lexer(processedMarkdown);
27
- const meaningfulTokens = tokens.filter((token) => token.type === 'paragraph' || token.type === 'heading' || token.type === 'list');
28
- if (meaningfulTokens.length === 0) {
29
- throw new Error('Note must contain at least one paragraph with actual content');
30
- }
31
- const contentTracker = { meaningfulNodesCreated: 0 };
32
- let currentBuilder = null;
33
- currentBuilder = this.processTokensStructured(tokens, noteBuilder, contentTracker);
34
- if (contentTracker.meaningfulNodesCreated === 0) {
35
- throw new Error('Note must contain at least one paragraph with actual content');
36
- }
37
- if (!currentBuilder) {
38
- throw new Error('Failed to create note content');
39
- }
40
- return currentBuilder;
41
- }
42
- static parseMarkdownToNote(markdown, noteBuilder) {
43
- return this.parseMarkdownToNoteStructured(markdown, noteBuilder);
44
- }
45
- static preprocessMarkdown(markdown) {
46
- return markdown.replace(/\\n/g, '\n');
47
- }
48
- static processTokensStructured(tokens, noteBuilder, contentTracker) {
49
- let currentBuilder = null;
50
- for (const token of tokens) {
51
- let newBuilder = null;
52
- switch (token.type) {
53
- case 'heading':
54
- newBuilder = this.processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker);
55
- break;
56
- case 'paragraph':
57
- newBuilder = this.processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker);
58
- break;
59
- case 'list':
60
- newBuilder = this.processListStructured(token, noteBuilder, currentBuilder, contentTracker);
61
- break;
62
- case 'space':
63
- break;
64
- default:
65
- if (token.text) {
66
- const decodedText = decodeHtmlEntities(token.text);
67
- if (currentBuilder) {
68
- newBuilder = currentBuilder.paragraph().text(decodedText);
69
- }
70
- else {
71
- newBuilder = noteBuilder.paragraph().text(decodedText);
72
- }
73
- contentTracker.meaningfulNodesCreated++;
74
- }
75
- break;
76
- }
77
- if (newBuilder) {
78
- currentBuilder = newBuilder;
79
- }
80
- }
81
- return currentBuilder;
82
- }
83
- static processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker) {
84
- const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
85
- (token.text && token.text.trim());
86
- if (!hasContent) {
87
- return currentBuilder;
88
- }
89
- let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
90
- if (token.tokens && token.tokens.length > 0) {
91
- paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder, true);
92
- }
93
- else if (token.text) {
94
- paragraphBuilder = paragraphBuilder.bold(decodeHtmlEntities(token.text));
95
- }
96
- contentTracker.meaningfulNodesCreated++;
97
- return paragraphBuilder;
98
- }
99
- static processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker) {
100
- const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
101
- (token.text && token.text.trim());
102
- if (!hasContent) {
103
- return currentBuilder;
104
- }
105
- const text = token.text ? token.text.trim() : '';
106
- const normalizedText = text.replace(/\s+/g, ' ').trim();
107
- const isOnlyListMarkers = /^([-*+]|(\d+\.))+(\s*([-*+]|(\d+\.)))*$/.test(normalizedText);
108
- const isEmptyListMarkers = normalizedText === '- * 1.' || /^[-*+\d.\s]+$/.test(normalizedText);
109
- if (isOnlyListMarkers || isEmptyListMarkers) {
110
- return currentBuilder;
111
- }
112
- let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
113
- if (token.tokens && token.tokens.length > 0) {
114
- paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder);
115
- }
116
- else if (token.text) {
117
- paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(token.text));
118
- }
119
- contentTracker.meaningfulNodesCreated++;
120
- return paragraphBuilder;
121
- }
122
- static processListStructured(token, noteBuilder, currentBuilder, contentTracker) {
123
- if (!token.items)
124
- return currentBuilder;
125
- let finalBuilder = currentBuilder;
126
- let listItemNumber = 1;
127
- token.items.forEach((item, index) => {
128
- const hasContent = (item.tokens && item.tokens.some((t) => t.text && t.text.trim())) ||
129
- (item.text && item.text.trim());
130
- if (!hasContent) {
131
- return;
132
- }
133
- let actualContent = '';
134
- if (item.tokens && item.tokens.length > 0) {
135
- const firstToken = item.tokens[0];
136
- if (firstToken && firstToken.tokens) {
137
- const meaningfulInlineTokens = firstToken.tokens.filter((t) => t.text && t.text.trim());
138
- if (meaningfulInlineTokens.length > 0) {
139
- actualContent = meaningfulInlineTokens.map((t) => t.text.trim()).join('');
140
- }
141
- }
142
- else if (firstToken && firstToken.text && firstToken.text.trim()) {
143
- actualContent = firstToken.text.trim();
144
- }
145
- }
146
- else if (item.text && item.text.trim()) {
147
- actualContent = item.text.trim();
148
- }
149
- if (!actualContent) {
150
- return;
151
- }
152
- let paragraphBuilder = finalBuilder ? finalBuilder.paragraph() : noteBuilder.paragraph();
153
- if (token.ordered) {
154
- paragraphBuilder = paragraphBuilder.text(`${listItemNumber}. `);
155
- listItemNumber++;
156
- }
157
- else {
158
- paragraphBuilder = paragraphBuilder.text('• ');
159
- }
160
- if (item.tokens && item.tokens.length > 0) {
161
- const firstToken = item.tokens[0];
162
- if (firstToken && firstToken.tokens) {
163
- paragraphBuilder = this.processInlineTokensStructured(firstToken.tokens, paragraphBuilder);
164
- }
165
- else if (firstToken && firstToken.text) {
166
- paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(firstToken.text));
167
- }
168
- }
169
- else if (item.text) {
170
- paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(item.text));
171
- }
172
- contentTracker.meaningfulNodesCreated++;
173
- finalBuilder = paragraphBuilder;
174
- });
175
- return finalBuilder;
176
- }
177
- static processInlineTokensStructured(tokens, paragraphBuilder, isHeading = false) {
178
- let currentBuilder = paragraphBuilder;
179
- for (const token of tokens) {
180
- if (!token.text || !token.text.trim()) {
181
- continue;
182
- }
183
- switch (token.type) {
184
- case 'text':
185
- const decodedText = decodeHtmlEntities(token.text);
186
- if (isHeading) {
187
- currentBuilder = currentBuilder.bold(decodedText);
188
- }
189
- else {
190
- currentBuilder = currentBuilder.text(decodedText);
191
- }
192
- break;
193
- case 'strong':
194
- currentBuilder = currentBuilder.bold(decodeHtmlEntities(token.text));
195
- break;
196
- case 'em':
197
- currentBuilder = currentBuilder.italic(decodeHtmlEntities(token.text));
198
- break;
199
- case 'codespan':
200
- currentBuilder = currentBuilder.code(decodeHtmlEntities(token.text));
201
- break;
202
- case 'link':
203
- if (token.text) {
204
- const decodedLinkText = decodeHtmlEntities(token.text);
205
- currentBuilder = currentBuilder.text(`${decodedLinkText} (${token.href})`);
206
- }
207
- else {
208
- currentBuilder = currentBuilder.text(token.href);
209
- }
210
- break;
211
- default:
212
- if (token.text) {
213
- const decodedFallbackText = decodeHtmlEntities(token.text);
214
- if (isHeading) {
215
- currentBuilder = currentBuilder.bold(decodedFallbackText);
216
- }
217
- else {
218
- currentBuilder = currentBuilder.text(decodedFallbackText);
219
- }
220
- }
221
- break;
222
- }
223
- }
224
- return currentBuilder;
225
- }
226
- }
227
- exports.MarkdownParser = MarkdownParser;
228
- //# sourceMappingURL=MarkdownParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkdownParser.js","sourceRoot":"","sources":["../../../nodes/Substack/MarkdownParser.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAIhC,eAAM,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,KAAK;CACb,CAAC,CAAC;AAGH,SAAS,kBAAkB,CAAC,IAAY;IACvC,MAAM,SAAS,GAA2B;QACzC,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,GAAG;KACb,CAAC;IAEF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;AAC1E,CAAC;AAMD,MAAa,cAAc;IAK1B,MAAM,CAAC,6BAA6B,CACnC,QAAgB,EAChB,WAA8C;QAE9C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACd,6EAA6E,CAC7E,CAAC;QACH,CAAC;QAGD,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAG5D,MAAM,MAAM,GAAG,eAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAG/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAC1F,CAAC;QAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACjF,CAAC;QAID,MAAM,cAAc,GAAG,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC;QACrD,IAAI,cAAc,GAAsE,IAAI,CAAC;QAC7F,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAGnF,IAAI,cAAc,CAAC,sBAAsB,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAKD,MAAM,CAAC,mBAAmB,CACzB,QAAgB,EAChB,WAA8C;QAE9C,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAMO,MAAM,CAAC,kBAAkB,CAAC,QAAgB;QAEjD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAMO,MAAM,CAAC,uBAAuB,CACrC,MAAa,EACb,WAA8C,EAC9C,cAAmB;QAEnB,IAAI,cAAc,GAAsE,IAAI,CAAC;QAE7F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,UAAU,GAAsE,IAAI,CAAC;YAEzF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACb,UAAU,GAAG,IAAI,CAAC,wBAAwB,CACzC,KAAK,EACL,WAAW,EACX,cAAc,EACd,cAAc,CACd,CAAC;oBACF,MAAM;gBACP,KAAK,WAAW;oBACf,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAC3C,KAAK,EACL,WAAW,EACX,cAAc,EACd,cAAc,CACd,CAAC;oBACF,MAAM;gBACP,KAAK,MAAM;oBACV,UAAU,GAAG,IAAI,CAAC,qBAAqB,CACtC,KAAK,EACL,WAAW,EACX,cAAc,EACd,cAAc,CACd,CAAC;oBACF,MAAM;gBACP,KAAK,OAAO;oBAEX,MAAM;gBACP;oBAEC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAChB,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACnD,IAAI,cAAc,EAAE,CAAC;4BACpB,UAAU,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC3D,CAAC;6BAAM,CAAC;4BACP,UAAU,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxD,CAAC;wBACD,cAAc,CAAC,sBAAsB,EAAE,CAAC;oBACzC,CAAC;oBACD,MAAM;YACR,CAAC;YAGD,IAAI,UAAU,EAAE,CAAC;gBAChB,cAAc,GAAG,UAAU,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAMO,MAAM,CAAC,wBAAwB,CACtC,KAAU,EACV,WAA8C,EAC9C,cAAiF,EACjF,cAAmB;QAGnB,MAAM,UAAU,GACf,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAEjB,OAAO,cAAc,CAAC;QACvB,CAAC;QAGD,IAAI,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAG7F,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC7F,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACvB,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,cAAc,CAAC,sBAAsB,EAAE,CAAC;QAExC,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAMO,MAAM,CAAC,0BAA0B,CACxC,KAAU,EACV,WAA8C,EAC9C,cAAiF,EACjF,cAAmB;QAGnB,MAAM,UAAU,GACf,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAEjB,OAAO,cAAc,CAAC;QACvB,CAAC;QAGD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAGxD,MAAM,iBAAiB,GAAG,yCAAyC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzF,MAAM,kBAAkB,GAAG,cAAc,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE/F,IAAI,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YAC7C,OAAO,cAAc,CAAC;QACvB,CAAC;QAGD,IAAI,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAG7F,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACvB,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,cAAc,CAAC,sBAAsB,EAAE,CAAC;QAExC,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAMO,MAAM,CAAC,qBAAqB,CACnC,KAAU,EACV,WAA8C,EAC9C,cAAiF,EACjF,cAAmB;QAEnB,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,cAAc,CAAC;QAExC,IAAI,YAAY,GAAG,cAAc,CAAC;QAClC,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,EAAE,EAAE;YAEhD,MAAM,UAAU,GACf,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAEjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO;YACR,CAAC;YAGD,IAAI,aAAa,GAAG,EAAE,CAAC;YAGvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBAErC,MAAM,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CACtD,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CACnC,CAAC;oBACF,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvC,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChF,CAAC;gBACF,CAAC;qBAAM,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpE,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxC,CAAC;YACF,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1C,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,CAAC;YAGD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,OAAO;YACR,CAAC;YAID,IAAI,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAGzF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;gBAChE,cAAc,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACP,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;YAGD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACrC,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CACpD,UAAU,CAAC,MAAM,EACjB,gBAAgB,CAChB,CAAC;gBACH,CAAC;qBAAM,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;oBAC1C,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/E,CAAC;YACF,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,cAAc,CAAC,sBAAsB,EAAE,CAAC;YAGxC,YAAY,GAAG,gBAAgB,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;IACrB,CAAC;IAMO,MAAM,CAAC,6BAA6B,CAC3C,MAAa,EACb,gBAA4E,EAC5E,YAAqB,KAAK;QAE1B,IAAI,cAAc,GAAG,gBAAgB,CAAC;QAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE5B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvC,SAAS;YACV,CAAC;YAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,MAAM;oBACV,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnD,IAAI,SAAS,EAAE,CAAC;wBACf,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACP,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM;gBACP,KAAK,QAAQ;oBACZ,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrE,MAAM;gBACP,KAAK,IAAI;oBACR,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACvE,MAAM;gBACP,KAAK,UAAU;oBACd,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrE,MAAM;gBACP,KAAK,MAAM;oBAEV,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAChB,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACvD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC5E,CAAC;yBAAM,CAAC;wBACP,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClD,CAAC;oBACD,MAAM;gBACP;oBAEC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAChB,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3D,IAAI,SAAS,EAAE,CAAC;4BACf,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAC3D,CAAC;6BAAM,CAAC;4BACP,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAC3D,CAAC;oBACF,CAAC;oBACD,MAAM;YACR,CAAC;QACF,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;CACD;AAvWD,wCAuWC"}
@@ -1,25 +0,0 @@
1
- import { IExecuteFunctions } from 'n8n-workflow';
2
- import { SubstackClient } from 'substack-api';
3
- import { IStandardResponse } from '../types';
4
- export declare class ResourceOperations {
5
- static executeResourceList<T>(config: {
6
- executeFunctions: IExecuteFunctions;
7
- client: SubstackClient;
8
- publicationAddress: string;
9
- itemIndex: number;
10
- getIterable: (client: SubstackClient, params: any) => Promise<AsyncIterable<T>>;
11
- formatter: (item: T, publicationAddress: string, ...args: any[]) => any;
12
- additionalParams?: Record<string, any>;
13
- formatterArgs?: any[];
14
- }): Promise<IStandardResponse>;
15
- static executeSingleResource<T>(config: {
16
- executeFunctions: IExecuteFunctions;
17
- client: SubstackClient;
18
- publicationAddress: string;
19
- itemIndex: number;
20
- getResource: (client: SubstackClient, params: any) => Promise<T>;
21
- formatter: (item: T, publicationAddress: string, ...args: any[]) => any;
22
- additionalParams?: Record<string, any>;
23
- formatterArgs?: any[];
24
- }): Promise<IStandardResponse>;
25
- }
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceOperations = void 0;
4
- const SubstackUtils_1 = require("../SubstackUtils");
5
- const OperationUtils_1 = require("./OperationUtils");
6
- class ResourceOperations {
7
- static async executeResourceList(config) {
8
- try {
9
- const limitParam = config.executeFunctions.getNodeParameter('limit', config.itemIndex, '');
10
- const limit = OperationUtils_1.OperationUtils.parseLimit(limitParam);
11
- const params = {};
12
- if (config.additionalParams) {
13
- for (const [key, defaultValue] of Object.entries(config.additionalParams)) {
14
- params[key] = config.executeFunctions.getNodeParameter(key, config.itemIndex, defaultValue);
15
- }
16
- }
17
- const iterable = await config.getIterable(config.client, params);
18
- const results = await OperationUtils_1.OperationUtils.executeAsyncIterable(iterable, limit, config.formatter, config.publicationAddress, ...(config.formatterArgs || []));
19
- return {
20
- success: true,
21
- data: results,
22
- metadata: { status: 'success' },
23
- };
24
- }
25
- catch (error) {
26
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
27
- message: error.message,
28
- node: config.executeFunctions.getNode(),
29
- itemIndex: config.itemIndex,
30
- });
31
- }
32
- }
33
- static async executeSingleResource(config) {
34
- try {
35
- const params = {};
36
- if (config.additionalParams) {
37
- for (const [key, defaultValue] of Object.entries(config.additionalParams)) {
38
- params[key] = config.executeFunctions.getNodeParameter(key, config.itemIndex, defaultValue);
39
- }
40
- }
41
- const resource = await config.getResource(config.client, params);
42
- const result = config.formatter(resource, config.publicationAddress, ...(config.formatterArgs || []));
43
- return {
44
- success: true,
45
- data: result,
46
- metadata: { status: 'success' },
47
- };
48
- }
49
- catch (error) {
50
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
51
- message: error.message,
52
- node: config.executeFunctions.getNode(),
53
- itemIndex: config.itemIndex,
54
- });
55
- }
56
- }
57
- }
58
- exports.ResourceOperations = ResourceOperations;
59
- //# sourceMappingURL=ResourceOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResourceOperations.js","sourceRoot":"","sources":["../../../../nodes/Substack/shared/ResourceOperations.ts"],"names":[],"mappings":"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"}