n8n-nodes-substack 1.1.1 → 1.2.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.
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.commentOperationHandlers = exports.commentOperations = exports.CommentOperation = void 0;
4
+ const DataFormatters_1 = require("./shared/DataFormatters");
5
+ const OperationUtils_1 = require("./shared/OperationUtils");
4
6
  const SubstackUtils_1 = require("./SubstackUtils");
5
7
  var CommentOperation;
6
8
  (function (CommentOperation) {
@@ -36,44 +38,17 @@ exports.commentOperations = [
36
38
  },
37
39
  ];
38
40
  async function getAll(executeFunctions, client, publicationAddress, itemIndex) {
39
- var _a;
40
41
  try {
41
- const postIdParam = executeFunctions.getNodeParameter('postId', itemIndex);
42
- const postId = typeof postIdParam === 'string' ? parseInt(postIdParam, 10) : postIdParam;
43
- if (!postId || isNaN(postId)) {
44
- throw new Error('Invalid postId: must be a valid number');
45
- }
42
+ const postId = OperationUtils_1.OperationUtils.parseNumericParam(executeFunctions.getNodeParameter('postId', itemIndex), 'postId');
46
43
  const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
47
- let limit = 100;
48
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
49
- limit = Number(limitParam);
50
- }
44
+ const limit = OperationUtils_1.OperationUtils.parseLimit(limitParam);
51
45
  const post = await client.postForId(postId);
52
46
  const commentsIterable = await post.comments();
53
- const formattedComments = [];
54
- let count = 0;
55
- for await (const comment of commentsIterable) {
56
- if (count >= limit)
57
- break;
58
- formattedComments.push({
59
- id: comment.id,
60
- body: comment.body,
61
- createdAt: ((_a = comment.rawData) === null || _a === void 0 ? void 0 : _a.created_at) || comment.createdAt.toISOString(),
62
- parentPostId: postId,
63
- author: {
64
- id: comment.author.id,
65
- name: comment.author.name,
66
- isAdmin: comment.author.isAdmin || false,
67
- },
68
- });
69
- count++;
70
- }
47
+ const results = await OperationUtils_1.OperationUtils.executeAsyncIterable(commentsIterable, limit, (comment, publicationAddress) => DataFormatters_1.DataFormatters.formatComment(comment, postId), publicationAddress);
71
48
  return {
72
49
  success: true,
73
- data: formattedComments,
74
- metadata: {
75
- status: 'success',
76
- },
50
+ data: results,
51
+ metadata: { status: 'success' }
77
52
  };
78
53
  }
79
54
  catch (error) {
@@ -85,27 +60,14 @@ async function getAll(executeFunctions, client, publicationAddress, itemIndex) {
85
60
  }
86
61
  }
87
62
  async function getCommentById(executeFunctions, client, publicationAddress, itemIndex) {
88
- var _a, _b;
89
63
  try {
90
- const commentId = executeFunctions.getNodeParameter('commentId', itemIndex);
91
- const comment = await client.commentForId(parseInt(commentId, 10));
92
- const formattedComment = {
93
- id: comment.id,
94
- body: comment.body,
95
- createdAt: ((_a = comment.rawData) === null || _a === void 0 ? void 0 : _a.created_at) || comment.createdAt.toISOString(),
96
- parentPostId: ((_b = comment.rawData) === null || _b === void 0 ? void 0 : _b.parent_post_id) || 0,
97
- author: {
98
- id: comment.author.id,
99
- name: comment.author.name,
100
- isAdmin: comment.author.isAdmin || false,
101
- },
102
- };
64
+ const commentId = OperationUtils_1.OperationUtils.parseNumericParam(executeFunctions.getNodeParameter('commentId', itemIndex), 'commentId');
65
+ const comment = await client.commentForId(commentId);
66
+ const result = DataFormatters_1.DataFormatters.formatComment(comment);
103
67
  return {
104
68
  success: true,
105
- data: formattedComment,
106
- metadata: {
107
- status: 'success',
108
- },
69
+ data: result,
70
+ metadata: { status: 'success' }
109
71
  };
110
72
  }
111
73
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"Comment.operations.js","sourceRoot":"","sources":["../../../nodes/Substack/Comment.operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Comment.operations.js","sourceRoot":"","sources":["../../../nodes/Substack/Comment.operations.ts"],"names":[],"mappings":";;;AAGA,4DAAyD;AACzD,4DAAyD;AACzD,mDAAgD;AAEhD,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC3B,qCAAiB,CAAA;IACjB,qDAAiC,CAAA;AAClC,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAEY,QAAA,iBAAiB,GAAsB;IACnD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,QAAQ;QACjB,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,QAAQ,EAAE,CAAC,SAAS,CAAC;aACrB;SACD;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,gBAAgB,CAAC,MAAM;gBAC9B,WAAW,EAAE,sCAAsC;gBACnD,MAAM,EAAE,kBAAkB;aAC1B;YACD;gBACC,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,gBAAgB,CAAC,cAAc;gBACtC,WAAW,EAAE,kCAAkC;gBAC/C,MAAM,EAAE,mBAAmB;aAC3B;SACD;KACD;CACD,CAAC;AAEF,KAAK,UAAU,MAAM,CACpB,gBAAmC,EACnC,MAAsB,EACtB,kBAA0B,EAC1B,SAAiB;IAEjB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,+BAAc,CAAC,iBAAiB,CAC9C,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,EACtD,QAAQ,CACR,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,+BAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,+BAAc,CAAC,oBAAoB,CACxD,gBAAgB,EAChB,KAAK,EACL,CAAC,OAAY,EAAE,kBAA0B,EAAE,EAAE,CAAC,+BAAc,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAC3F,kBAAkB,CAClB,CAAC;QAEF,OAAO;YACN,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SAC/B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,6BAAa,CAAC,mBAAmB,CAAC;YACxC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;YAChC,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,KAAK,UAAU,cAAc,CAC5B,gBAAmC,EACnC,MAAsB,EACtB,kBAA0B,EAC1B,SAAiB;IAEjB,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,+BAAc,CAAC,iBAAiB,CACjD,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,EACzD,WAAW,CACX,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,+BAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAErD,OAAO;YACN,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SAC/B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,6BAAa,CAAC,mBAAmB,CAAC;YACxC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;YAChC,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAEY,QAAA,wBAAwB,GAQjC;IACH,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM;IACjC,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc;CACjD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { OwnProfile } from 'substack-api';
2
2
  export declare class MarkdownParser {
3
- static parseMarkdownToNoteStructured(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): ReturnType<OwnProfile['newNote']>;
4
- static parseMarkdownToNote(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): ReturnType<OwnProfile['newNote']>;
3
+ static parseMarkdownToNoteStructured(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): Promise<ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>>;
4
+ static parseMarkdownToNote(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): Promise<ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>>;
5
5
  private static processTokensStructured;
6
6
  private static processHeadingStructured;
7
7
  private static processParagraphStructured;
@@ -1,13 +1,61 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.MarkdownParser = void 0;
4
- const marked_1 = require("marked");
37
+ function decodeHtmlEntities(text) {
38
+ const entityMap = {
39
+ '&#39;': "'",
40
+ '&quot;': '"',
41
+ '&amp;': '&',
42
+ '&lt;': '<',
43
+ '&gt;': '>',
44
+ '&nbsp;': ' '
45
+ };
46
+ return text.replace(/&#?\w+;/g, (entity) => entityMap[entity] || entity);
47
+ }
5
48
  class MarkdownParser {
6
- static parseMarkdownToNoteStructured(markdown, noteBuilder) {
49
+ static async parseMarkdownToNoteStructured(markdown, noteBuilder) {
7
50
  if (!markdown.trim()) {
8
51
  throw new Error('Note body cannot be empty - at least one paragraph with content is required');
9
52
  }
10
- const tokens = marked_1.marked.lexer(markdown);
53
+ const { marked } = await Promise.resolve().then(() => __importStar(require('marked')));
54
+ marked.setOptions({
55
+ gfm: true,
56
+ breaks: false
57
+ });
58
+ const tokens = marked.lexer(markdown);
11
59
  const meaningfulTokens = tokens.filter(token => token.type === 'paragraph' ||
12
60
  token.type === 'heading' ||
13
61
  token.type === 'list');
@@ -15,77 +63,98 @@ class MarkdownParser {
15
63
  throw new Error('Note must contain at least one paragraph with actual content');
16
64
  }
17
65
  const contentTracker = { meaningfulNodesCreated: 0 };
18
- this.processTokensStructured(tokens, noteBuilder, contentTracker);
66
+ let currentBuilder = null;
67
+ currentBuilder = this.processTokensStructured(tokens, noteBuilder, contentTracker);
19
68
  if (contentTracker.meaningfulNodesCreated === 0) {
20
69
  throw new Error('Note must contain at least one paragraph with actual content');
21
70
  }
22
- return noteBuilder;
71
+ if (!currentBuilder) {
72
+ throw new Error('Failed to create note content');
73
+ }
74
+ return currentBuilder;
23
75
  }
24
- static parseMarkdownToNote(markdown, noteBuilder) {
25
- return this.parseMarkdownToNoteStructured(markdown, noteBuilder);
76
+ static async parseMarkdownToNote(markdown, noteBuilder) {
77
+ return await this.parseMarkdownToNoteStructured(markdown, noteBuilder);
26
78
  }
27
79
  static processTokensStructured(tokens, noteBuilder, contentTracker) {
80
+ let currentBuilder = null;
28
81
  for (const token of tokens) {
82
+ let newBuilder = null;
29
83
  switch (token.type) {
30
84
  case 'heading':
31
- this.processHeadingStructured(token, noteBuilder, contentTracker);
85
+ newBuilder = this.processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker);
32
86
  break;
33
87
  case 'paragraph':
34
- this.processParagraphStructured(token, noteBuilder, contentTracker);
88
+ newBuilder = this.processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker);
35
89
  break;
36
90
  case 'list':
37
- this.processListStructured(token, noteBuilder, contentTracker);
91
+ newBuilder = this.processListStructured(token, noteBuilder, currentBuilder, contentTracker);
38
92
  break;
39
93
  case 'space':
40
94
  break;
41
95
  default:
42
96
  if (token.text) {
43
- let paragraphBuilder = noteBuilder.paragraph();
44
- paragraphBuilder = paragraphBuilder.text(token.text);
97
+ const decodedText = decodeHtmlEntities(token.text);
98
+ if (currentBuilder) {
99
+ newBuilder = currentBuilder.paragraph().text(decodedText);
100
+ }
101
+ else {
102
+ newBuilder = noteBuilder.paragraph().text(decodedText);
103
+ }
45
104
  contentTracker.meaningfulNodesCreated++;
46
105
  }
47
106
  break;
48
107
  }
108
+ if (newBuilder) {
109
+ currentBuilder = newBuilder;
110
+ }
49
111
  }
112
+ return currentBuilder;
50
113
  }
51
- static processHeadingStructured(token, noteBuilder, contentTracker) {
114
+ static processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker) {
52
115
  const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
53
116
  (token.text && token.text.trim());
54
117
  if (!hasContent) {
55
- return;
118
+ return currentBuilder;
56
119
  }
57
- let paragraphBuilder = noteBuilder.paragraph();
120
+ let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
58
121
  if (token.tokens && token.tokens.length > 0) {
59
122
  paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder, true);
60
123
  }
61
124
  else if (token.text) {
62
- paragraphBuilder = paragraphBuilder.bold(token.text);
125
+ paragraphBuilder = paragraphBuilder.bold(decodeHtmlEntities(token.text));
63
126
  }
64
127
  contentTracker.meaningfulNodesCreated++;
128
+ return paragraphBuilder;
65
129
  }
66
- static processParagraphStructured(token, noteBuilder, contentTracker) {
130
+ static processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker) {
67
131
  const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
68
132
  (token.text && token.text.trim());
69
133
  if (!hasContent) {
70
- return;
134
+ return currentBuilder;
71
135
  }
72
136
  const text = token.text ? token.text.trim() : '';
73
- const isOnlyListMarker = /^([-*+]|\d+\.)\s*$/.test(text);
74
- if (isOnlyListMarker) {
75
- return;
137
+ const normalizedText = text.replace(/\s+/g, ' ').trim();
138
+ const isOnlyListMarkers = /^([-*+]|(\d+\.))+(\s*([-*+]|(\d+\.)))*$/.test(normalizedText);
139
+ const isEmptyListMarkers = normalizedText === '- * 1.' || /^[-*+\d.\s]+$/.test(normalizedText);
140
+ if (isOnlyListMarkers || isEmptyListMarkers) {
141
+ return currentBuilder;
76
142
  }
77
- let paragraphBuilder = noteBuilder.paragraph();
143
+ let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
78
144
  if (token.tokens && token.tokens.length > 0) {
79
145
  paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder);
80
146
  }
81
147
  else if (token.text) {
82
- paragraphBuilder = paragraphBuilder.text(token.text);
148
+ paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(token.text));
83
149
  }
84
150
  contentTracker.meaningfulNodesCreated++;
151
+ return paragraphBuilder;
85
152
  }
86
- static processListStructured(token, noteBuilder, contentTracker) {
153
+ static processListStructured(token, noteBuilder, currentBuilder, contentTracker) {
87
154
  if (!token.items)
88
- return;
155
+ return currentBuilder;
156
+ let finalBuilder = currentBuilder;
157
+ let listItemNumber = 1;
89
158
  token.items.forEach((item, index) => {
90
159
  const hasContent = (item.tokens && item.tokens.some((t) => t.text && t.text.trim())) ||
91
160
  (item.text && item.text.trim());
@@ -111,9 +180,10 @@ class MarkdownParser {
111
180
  if (!actualContent) {
112
181
  return;
113
182
  }
114
- let paragraphBuilder = noteBuilder.paragraph();
183
+ let paragraphBuilder = finalBuilder ? finalBuilder.paragraph() : noteBuilder.paragraph();
115
184
  if (token.ordered) {
116
- paragraphBuilder = paragraphBuilder.text(`${index + 1}. `);
185
+ paragraphBuilder = paragraphBuilder.text(`${listItemNumber}. `);
186
+ listItemNumber++;
117
187
  }
118
188
  else {
119
189
  paragraphBuilder = paragraphBuilder.text('• ');
@@ -124,14 +194,16 @@ class MarkdownParser {
124
194
  paragraphBuilder = this.processInlineTokensStructured(firstToken.tokens, paragraphBuilder);
125
195
  }
126
196
  else if (firstToken && firstToken.text) {
127
- paragraphBuilder = paragraphBuilder.text(firstToken.text);
197
+ paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(firstToken.text));
128
198
  }
129
199
  }
130
200
  else if (item.text) {
131
- paragraphBuilder = paragraphBuilder.text(item.text);
201
+ paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(item.text));
132
202
  }
133
203
  contentTracker.meaningfulNodesCreated++;
204
+ finalBuilder = paragraphBuilder;
134
205
  });
206
+ return finalBuilder;
135
207
  }
136
208
  static processInlineTokensStructured(tokens, paragraphBuilder, isHeading = false) {
137
209
  let currentBuilder = paragraphBuilder;
@@ -141,25 +213,27 @@ class MarkdownParser {
141
213
  }
142
214
  switch (token.type) {
143
215
  case 'text':
216
+ const decodedText = decodeHtmlEntities(token.text);
144
217
  if (isHeading) {
145
- currentBuilder = currentBuilder.bold(token.text);
218
+ currentBuilder = currentBuilder.bold(decodedText);
146
219
  }
147
220
  else {
148
- currentBuilder = currentBuilder.text(token.text);
221
+ currentBuilder = currentBuilder.text(decodedText);
149
222
  }
150
223
  break;
151
224
  case 'strong':
152
- currentBuilder = currentBuilder.bold(token.text);
225
+ currentBuilder = currentBuilder.bold(decodeHtmlEntities(token.text));
153
226
  break;
154
227
  case 'em':
155
- currentBuilder = currentBuilder.italic(token.text);
228
+ currentBuilder = currentBuilder.italic(decodeHtmlEntities(token.text));
156
229
  break;
157
230
  case 'codespan':
158
- currentBuilder = currentBuilder.code(token.text);
231
+ currentBuilder = currentBuilder.code(decodeHtmlEntities(token.text));
159
232
  break;
160
233
  case 'link':
161
234
  if (token.text) {
162
- currentBuilder = currentBuilder.text(`${token.text} (${token.href})`);
235
+ const decodedLinkText = decodeHtmlEntities(token.text);
236
+ currentBuilder = currentBuilder.text(`${decodedLinkText} (${token.href})`);
163
237
  }
164
238
  else {
165
239
  currentBuilder = currentBuilder.text(token.href);
@@ -167,11 +241,12 @@ class MarkdownParser {
167
241
  break;
168
242
  default:
169
243
  if (token.text) {
244
+ const decodedFallbackText = decodeHtmlEntities(token.text);
170
245
  if (isHeading) {
171
- currentBuilder = currentBuilder.bold(token.text);
246
+ currentBuilder = currentBuilder.bold(decodedFallbackText);
172
247
  }
173
248
  else {
174
- currentBuilder = currentBuilder.text(token.text);
249
+ currentBuilder = currentBuilder.text(decodedFallbackText);
175
250
  }
176
251
  }
177
252
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownParser.js","sourceRoot":"","sources":["../../../nodes/Substack/MarkdownParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownParser.js","sourceRoot":"","sources":["../../../nodes/Substack/MarkdownParser.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.noteOperationHandlers = exports.noteOperations = exports.NoteOperation = void 0;
4
4
  const SubstackUtils_1 = require("./SubstackUtils");
5
5
  const MarkdownParser_1 = require("./MarkdownParser");
6
+ const DataFormatters_1 = require("./shared/DataFormatters");
7
+ const OperationUtils_1 = require("./shared/OperationUtils");
6
8
  var NoteOperation;
7
9
  (function (NoteOperation) {
8
10
  NoteOperation["Create"] = "create";
@@ -58,42 +60,16 @@ exports.noteOperations = [
58
60
  },
59
61
  ];
60
62
  async function get(executeFunctions, client, publicationAddress, itemIndex) {
61
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
62
63
  try {
63
64
  const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
64
- let limit = 100;
65
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
66
- limit = Number(limitParam);
67
- }
65
+ const limit = OperationUtils_1.OperationUtils.parseLimit(limitParam);
68
66
  const ownProfile = await client.ownProfile();
69
67
  const notesIterable = await ownProfile.notes();
70
- const formattedNotes = [];
71
- let count = 0;
72
- for await (const note of notesIterable) {
73
- if (count >= limit)
74
- break;
75
- formattedNotes.push({
76
- noteId: ((_c = (_b = (_a = note.rawData) === null || _a === void 0 ? void 0 : _a.comment) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.toString()) || ((_d = note.id) === null || _d === void 0 ? void 0 : _d.toString()) || 'unknown',
77
- body: note.body || '',
78
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${((_f = (_e = note.rawData) === null || _e === void 0 ? void 0 : _e.comment) === null || _f === void 0 ? void 0 : _f.id) || note.id || 'unknown'}`),
79
- date: ((_h = (_g = note.rawData) === null || _g === void 0 ? void 0 : _g.context) === null || _h === void 0 ? void 0 : _h.timestamp) ||
80
- ((_j = note.publishedAt) === null || _j === void 0 ? void 0 : _j.toISOString()) ||
81
- new Date().toISOString(),
82
- status: 'published',
83
- userId: ((_l = (_k = note.author) === null || _k === void 0 ? void 0 : _k.id) === null || _l === void 0 ? void 0 : _l.toString()) || 'unknown',
84
- likes: note.likesCount || 0,
85
- restacks: ((_o = (_m = note.rawData) === null || _m === void 0 ? void 0 : _m.comment) === null || _o === void 0 ? void 0 : _o.restacks) || 0,
86
- type: 'note',
87
- entityKey: ((_p = note.rawData) === null || _p === void 0 ? void 0 : _p.entity_key) || note.id,
88
- });
89
- count++;
90
- }
68
+ const results = await OperationUtils_1.OperationUtils.executeAsyncIterable(notesIterable, limit, DataFormatters_1.DataFormatters.formatNote, publicationAddress);
91
69
  return {
92
70
  success: true,
93
- data: formattedNotes,
94
- metadata: {
95
- status: 'success',
96
- },
71
+ data: results,
72
+ metadata: { status: 'success' }
97
73
  };
98
74
  }
99
75
  catch (error) {
@@ -105,47 +81,17 @@ async function get(executeFunctions, client, publicationAddress, itemIndex) {
105
81
  }
106
82
  }
107
83
  async function getNotesBySlug(executeFunctions, client, publicationAddress, itemIndex) {
108
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
109
84
  try {
110
85
  const slug = executeFunctions.getNodeParameter('slug', itemIndex);
111
86
  const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
112
- let limit = 100;
113
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
114
- limit = Number(limitParam);
115
- }
87
+ const limit = OperationUtils_1.OperationUtils.parseLimit(limitParam);
116
88
  const profile = await client.profileForSlug(slug);
117
89
  const notesIterable = await profile.notes();
118
- const formattedNotes = [];
119
- let count = 0;
120
- for await (const note of notesIterable) {
121
- if (count >= limit)
122
- break;
123
- try {
124
- formattedNotes.push({
125
- noteId: ((_c = (_b = (_a = note.rawData) === null || _a === void 0 ? void 0 : _a.comment) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.toString()) || ((_d = note.id) === null || _d === void 0 ? void 0 : _d.toString()) || 'unknown',
126
- body: note.body || '',
127
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${((_f = (_e = note.rawData) === null || _e === void 0 ? void 0 : _e.comment) === null || _f === void 0 ? void 0 : _f.id) || note.id || 'unknown'}`),
128
- date: ((_h = (_g = note.rawData) === null || _g === void 0 ? void 0 : _g.context) === null || _h === void 0 ? void 0 : _h.timestamp) ||
129
- ((_j = note.publishedAt) === null || _j === void 0 ? void 0 : _j.toISOString()) ||
130
- new Date().toISOString(),
131
- status: 'published',
132
- userId: ((_l = (_k = note.author) === null || _k === void 0 ? void 0 : _k.id) === null || _l === void 0 ? void 0 : _l.toString()) || 'unknown',
133
- likes: note.likesCount || 0,
134
- restacks: ((_o = (_m = note.rawData) === null || _m === void 0 ? void 0 : _m.comment) === null || _o === void 0 ? void 0 : _o.restacks) || 0,
135
- type: 'note',
136
- entityKey: ((_p = note.rawData) === null || _p === void 0 ? void 0 : _p.entity_key) || note.id,
137
- });
138
- }
139
- catch (error) {
140
- }
141
- count++;
142
- }
90
+ const results = await OperationUtils_1.OperationUtils.executeAsyncIterable(notesIterable, limit, DataFormatters_1.DataFormatters.formatNote, publicationAddress);
143
91
  return {
144
92
  success: true,
145
- data: formattedNotes,
146
- metadata: {
147
- status: 'success',
148
- },
93
+ data: results,
94
+ metadata: { status: 'success' }
149
95
  };
150
96
  }
151
97
  catch (error) {
@@ -157,47 +103,17 @@ async function getNotesBySlug(executeFunctions, client, publicationAddress, item
157
103
  }
158
104
  }
159
105
  async function getNotesById(executeFunctions, client, publicationAddress, itemIndex) {
160
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
161
106
  try {
162
- const userId = executeFunctions.getNodeParameter('userId', itemIndex);
107
+ const userId = OperationUtils_1.OperationUtils.parseNumericParam(executeFunctions.getNodeParameter('userId', itemIndex), 'userId');
163
108
  const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
164
- let limit = 100;
165
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
166
- limit = Number(limitParam);
167
- }
109
+ const limit = OperationUtils_1.OperationUtils.parseLimit(limitParam);
168
110
  const profile = await client.profileForId(userId);
169
111
  const notesIterable = await profile.notes();
170
- const formattedNotes = [];
171
- let count = 0;
172
- for await (const note of notesIterable) {
173
- if (count >= limit)
174
- break;
175
- try {
176
- formattedNotes.push({
177
- noteId: ((_c = (_b = (_a = note.rawData) === null || _a === void 0 ? void 0 : _a.comment) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.toString()) || ((_d = note.id) === null || _d === void 0 ? void 0 : _d.toString()) || 'unknown',
178
- body: note.body || '',
179
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${((_f = (_e = note.rawData) === null || _e === void 0 ? void 0 : _e.comment) === null || _f === void 0 ? void 0 : _f.id) || note.id || 'unknown'}`),
180
- date: ((_h = (_g = note.rawData) === null || _g === void 0 ? void 0 : _g.context) === null || _h === void 0 ? void 0 : _h.timestamp) ||
181
- ((_j = note.publishedAt) === null || _j === void 0 ? void 0 : _j.toISOString()) ||
182
- new Date().toISOString(),
183
- status: 'published',
184
- userId: ((_l = (_k = note.author) === null || _k === void 0 ? void 0 : _k.id) === null || _l === void 0 ? void 0 : _l.toString()) || 'unknown',
185
- likes: note.likesCount || 0,
186
- restacks: ((_o = (_m = note.rawData) === null || _m === void 0 ? void 0 : _m.comment) === null || _o === void 0 ? void 0 : _o.restacks) || 0,
187
- type: 'note',
188
- entityKey: ((_p = note.rawData) === null || _p === void 0 ? void 0 : _p.entity_key) || note.id,
189
- });
190
- }
191
- catch (error) {
192
- }
193
- count++;
194
- }
112
+ const results = await OperationUtils_1.OperationUtils.executeAsyncIterable(notesIterable, limit, DataFormatters_1.DataFormatters.formatNote, publicationAddress);
195
113
  return {
196
114
  success: true,
197
- data: formattedNotes,
198
- metadata: {
199
- status: 'success',
200
- },
115
+ data: results,
116
+ metadata: { status: 'success' }
201
117
  };
202
118
  }
203
119
  catch (error) {
@@ -209,30 +125,14 @@ async function getNotesById(executeFunctions, client, publicationAddress, itemIn
209
125
  }
210
126
  }
211
127
  async function getNoteById(executeFunctions, client, publicationAddress, itemIndex) {
212
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
213
128
  try {
214
- const noteId = executeFunctions.getNodeParameter('noteId', itemIndex);
215
- const note = await client.noteForId(parseInt(noteId, 10));
216
- const formattedNote = {
217
- noteId: ((_c = (_b = (_a = note.rawData) === null || _a === void 0 ? void 0 : _a.comment) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.toString()) || ((_d = note.id) === null || _d === void 0 ? void 0 : _d.toString()) || 'unknown',
218
- body: note.body || '',
219
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${((_f = (_e = note.rawData) === null || _e === void 0 ? void 0 : _e.comment) === null || _f === void 0 ? void 0 : _f.id) || note.id || 'unknown'}`),
220
- date: ((_h = (_g = note.rawData) === null || _g === void 0 ? void 0 : _g.context) === null || _h === void 0 ? void 0 : _h.timestamp) ||
221
- ((_j = note.publishedAt) === null || _j === void 0 ? void 0 : _j.toISOString()) ||
222
- new Date().toISOString(),
223
- status: 'published',
224
- userId: ((_l = (_k = note.author) === null || _k === void 0 ? void 0 : _k.id) === null || _l === void 0 ? void 0 : _l.toString()) || 'unknown',
225
- likes: note.likesCount || 0,
226
- restacks: ((_o = (_m = note.rawData) === null || _m === void 0 ? void 0 : _m.comment) === null || _o === void 0 ? void 0 : _o.restacks) || 0,
227
- type: 'note',
228
- entityKey: ((_p = note.rawData) === null || _p === void 0 ? void 0 : _p.entity_key) || note.id,
229
- };
129
+ const noteId = OperationUtils_1.OperationUtils.parseNumericParam(executeFunctions.getNodeParameter('noteId', itemIndex), 'noteId');
130
+ const note = await client.noteForId(noteId);
131
+ const result = DataFormatters_1.DataFormatters.formatNote(note, publicationAddress);
230
132
  return {
231
133
  success: true,
232
- data: formattedNote,
233
- metadata: {
234
- status: 'success',
235
- },
134
+ data: result,
135
+ metadata: { status: 'success' }
236
136
  };
237
137
  }
238
138
  catch (error) {
@@ -252,7 +152,8 @@ async function createSimpleNote(ownProfile, body, executeFunctions, itemIndex) {
252
152
  });
253
153
  }
254
154
  try {
255
- return await ownProfile.newNote().paragraph().text(body.trim()).publish();
155
+ const finalBuilder = ownProfile.newNote().paragraph().text(body.trim());
156
+ return await finalBuilder.publish();
256
157
  }
257
158
  catch (buildError) {
258
159
  return SubstackUtils_1.SubstackUtils.formatErrorResponse({
@@ -271,7 +172,8 @@ async function createAdvancedNote(ownProfile, body, executeFunctions, itemIndex)
271
172
  });
272
173
  }
273
174
  try {
274
- return await MarkdownParser_1.MarkdownParser.parseMarkdownToNoteStructured(body.trim(), ownProfile.newNote()).publish();
175
+ const finalBuilder = await MarkdownParser_1.MarkdownParser.parseMarkdownToNoteStructured(body.trim(), ownProfile.newNote());
176
+ return await finalBuilder.publish();
275
177
  }
276
178
  catch (error) {
277
179
  let userMessage = error.message;