n8n-nodes-substack 1.1.1 → 1.2.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.
- package/dist/nodes/Substack/Comment.operations.js +12 -50
- package/dist/nodes/Substack/Comment.operations.js.map +1 -1
- package/dist/nodes/Substack/MarkdownParser.d.ts +2 -2
- package/dist/nodes/Substack/MarkdownParser.js +74 -32
- package/dist/nodes/Substack/MarkdownParser.js.map +1 -1
- package/dist/nodes/Substack/Note.operations.js +24 -122
- package/dist/nodes/Substack/Note.operations.js.map +1 -1
- package/dist/nodes/Substack/Post.operations.js +20 -124
- package/dist/nodes/Substack/Post.operations.js.map +1 -1
- package/dist/nodes/Substack/Profile.operations.js +9 -47
- package/dist/nodes/Substack/Profile.operations.js.map +1 -1
- package/dist/nodes/Substack/SubstackUtils.d.ts +10 -3
- package/dist/nodes/Substack/SubstackUtils.js +52 -41
- package/dist/nodes/Substack/SubstackUtils.js.map +1 -1
- package/dist/nodes/Substack/shared/DataFormatters.d.ts +9 -0
- package/dist/nodes/Substack/shared/DataFormatters.js +85 -0
- package/dist/nodes/Substack/shared/DataFormatters.js.map +1 -0
- package/dist/nodes/Substack/shared/OperationUtils.d.ts +5 -0
- package/dist/nodes/Substack/shared/OperationUtils.js +35 -0
- package/dist/nodes/Substack/shared/OperationUtils.js.map +1 -0
- package/dist/nodes/Substack/shared/ResourceOperations.d.ts +25 -0
- package/dist/nodes/Substack/shared/ResourceOperations.js +59 -0
- package/dist/nodes/Substack/shared/ResourceOperations.js.map +1 -0
- package/dist/package.json +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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:
|
|
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(
|
|
92
|
-
const
|
|
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:
|
|
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":";;;AAGA,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
|
|
1
|
+
{"version":3,"file":"Comment.operations.js","sourceRoot":"","sources":["../../../nodes/Substack/Comment.operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -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']>): ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>;
|
|
4
|
+
static parseMarkdownToNote(markdown: string, noteBuilder: ReturnType<OwnProfile['newNote']>): ReturnType<ReturnType<OwnProfile['newNote']>['paragraph']>;
|
|
5
5
|
private static processTokensStructured;
|
|
6
6
|
private static processHeadingStructured;
|
|
7
7
|
private static processParagraphStructured;
|
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MarkdownParser = void 0;
|
|
4
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
|
+
''': "'",
|
|
12
|
+
'"': '"',
|
|
13
|
+
'&': '&',
|
|
14
|
+
'<': '<',
|
|
15
|
+
'>': '>',
|
|
16
|
+
' ': ' '
|
|
17
|
+
};
|
|
18
|
+
return text.replace(/&#?\w+;/g, (entity) => entityMap[entity] || entity);
|
|
19
|
+
}
|
|
5
20
|
class MarkdownParser {
|
|
6
21
|
static parseMarkdownToNoteStructured(markdown, noteBuilder) {
|
|
7
22
|
if (!markdown.trim()) {
|
|
@@ -15,77 +30,98 @@ class MarkdownParser {
|
|
|
15
30
|
throw new Error('Note must contain at least one paragraph with actual content');
|
|
16
31
|
}
|
|
17
32
|
const contentTracker = { meaningfulNodesCreated: 0 };
|
|
18
|
-
|
|
33
|
+
let currentBuilder = null;
|
|
34
|
+
currentBuilder = this.processTokensStructured(tokens, noteBuilder, contentTracker);
|
|
19
35
|
if (contentTracker.meaningfulNodesCreated === 0) {
|
|
20
36
|
throw new Error('Note must contain at least one paragraph with actual content');
|
|
21
37
|
}
|
|
22
|
-
|
|
38
|
+
if (!currentBuilder) {
|
|
39
|
+
throw new Error('Failed to create note content');
|
|
40
|
+
}
|
|
41
|
+
return currentBuilder;
|
|
23
42
|
}
|
|
24
43
|
static parseMarkdownToNote(markdown, noteBuilder) {
|
|
25
44
|
return this.parseMarkdownToNoteStructured(markdown, noteBuilder);
|
|
26
45
|
}
|
|
27
46
|
static processTokensStructured(tokens, noteBuilder, contentTracker) {
|
|
47
|
+
let currentBuilder = null;
|
|
28
48
|
for (const token of tokens) {
|
|
49
|
+
let newBuilder = null;
|
|
29
50
|
switch (token.type) {
|
|
30
51
|
case 'heading':
|
|
31
|
-
this.processHeadingStructured(token, noteBuilder, contentTracker);
|
|
52
|
+
newBuilder = this.processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker);
|
|
32
53
|
break;
|
|
33
54
|
case 'paragraph':
|
|
34
|
-
this.processParagraphStructured(token, noteBuilder, contentTracker);
|
|
55
|
+
newBuilder = this.processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker);
|
|
35
56
|
break;
|
|
36
57
|
case 'list':
|
|
37
|
-
this.processListStructured(token, noteBuilder, contentTracker);
|
|
58
|
+
newBuilder = this.processListStructured(token, noteBuilder, currentBuilder, contentTracker);
|
|
38
59
|
break;
|
|
39
60
|
case 'space':
|
|
40
61
|
break;
|
|
41
62
|
default:
|
|
42
63
|
if (token.text) {
|
|
43
|
-
|
|
44
|
-
|
|
64
|
+
const decodedText = decodeHtmlEntities(token.text);
|
|
65
|
+
if (currentBuilder) {
|
|
66
|
+
newBuilder = currentBuilder.paragraph().text(decodedText);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
newBuilder = noteBuilder.paragraph().text(decodedText);
|
|
70
|
+
}
|
|
45
71
|
contentTracker.meaningfulNodesCreated++;
|
|
46
72
|
}
|
|
47
73
|
break;
|
|
48
74
|
}
|
|
75
|
+
if (newBuilder) {
|
|
76
|
+
currentBuilder = newBuilder;
|
|
77
|
+
}
|
|
49
78
|
}
|
|
79
|
+
return currentBuilder;
|
|
50
80
|
}
|
|
51
|
-
static processHeadingStructured(token, noteBuilder, contentTracker) {
|
|
81
|
+
static processHeadingStructured(token, noteBuilder, currentBuilder, contentTracker) {
|
|
52
82
|
const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
|
|
53
83
|
(token.text && token.text.trim());
|
|
54
84
|
if (!hasContent) {
|
|
55
|
-
return;
|
|
85
|
+
return currentBuilder;
|
|
56
86
|
}
|
|
57
|
-
let paragraphBuilder = noteBuilder.paragraph();
|
|
87
|
+
let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
|
|
58
88
|
if (token.tokens && token.tokens.length > 0) {
|
|
59
89
|
paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder, true);
|
|
60
90
|
}
|
|
61
91
|
else if (token.text) {
|
|
62
|
-
paragraphBuilder = paragraphBuilder.bold(token.text);
|
|
92
|
+
paragraphBuilder = paragraphBuilder.bold(decodeHtmlEntities(token.text));
|
|
63
93
|
}
|
|
64
94
|
contentTracker.meaningfulNodesCreated++;
|
|
95
|
+
return paragraphBuilder;
|
|
65
96
|
}
|
|
66
|
-
static processParagraphStructured(token, noteBuilder, contentTracker) {
|
|
97
|
+
static processParagraphStructured(token, noteBuilder, currentBuilder, contentTracker) {
|
|
67
98
|
const hasContent = (token.tokens && token.tokens.some((t) => t.text && t.text.trim())) ||
|
|
68
99
|
(token.text && token.text.trim());
|
|
69
100
|
if (!hasContent) {
|
|
70
|
-
return;
|
|
101
|
+
return currentBuilder;
|
|
71
102
|
}
|
|
72
103
|
const text = token.text ? token.text.trim() : '';
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
104
|
+
const normalizedText = text.replace(/\s+/g, ' ').trim();
|
|
105
|
+
const isOnlyListMarkers = /^([-*+]|(\d+\.))+(\s*([-*+]|(\d+\.)))*$/.test(normalizedText);
|
|
106
|
+
const isEmptyListMarkers = normalizedText === '- * 1.' || /^[-*+\d.\s]+$/.test(normalizedText);
|
|
107
|
+
if (isOnlyListMarkers || isEmptyListMarkers) {
|
|
108
|
+
return currentBuilder;
|
|
76
109
|
}
|
|
77
|
-
let paragraphBuilder = noteBuilder.paragraph();
|
|
110
|
+
let paragraphBuilder = currentBuilder ? currentBuilder.paragraph() : noteBuilder.paragraph();
|
|
78
111
|
if (token.tokens && token.tokens.length > 0) {
|
|
79
112
|
paragraphBuilder = this.processInlineTokensStructured(token.tokens, paragraphBuilder);
|
|
80
113
|
}
|
|
81
114
|
else if (token.text) {
|
|
82
|
-
paragraphBuilder = paragraphBuilder.text(token.text);
|
|
115
|
+
paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(token.text));
|
|
83
116
|
}
|
|
84
117
|
contentTracker.meaningfulNodesCreated++;
|
|
118
|
+
return paragraphBuilder;
|
|
85
119
|
}
|
|
86
|
-
static processListStructured(token, noteBuilder, contentTracker) {
|
|
120
|
+
static processListStructured(token, noteBuilder, currentBuilder, contentTracker) {
|
|
87
121
|
if (!token.items)
|
|
88
|
-
return;
|
|
122
|
+
return currentBuilder;
|
|
123
|
+
let finalBuilder = currentBuilder;
|
|
124
|
+
let listItemNumber = 1;
|
|
89
125
|
token.items.forEach((item, index) => {
|
|
90
126
|
const hasContent = (item.tokens && item.tokens.some((t) => t.text && t.text.trim())) ||
|
|
91
127
|
(item.text && item.text.trim());
|
|
@@ -111,9 +147,10 @@ class MarkdownParser {
|
|
|
111
147
|
if (!actualContent) {
|
|
112
148
|
return;
|
|
113
149
|
}
|
|
114
|
-
let paragraphBuilder = noteBuilder.paragraph();
|
|
150
|
+
let paragraphBuilder = finalBuilder ? finalBuilder.paragraph() : noteBuilder.paragraph();
|
|
115
151
|
if (token.ordered) {
|
|
116
|
-
paragraphBuilder = paragraphBuilder.text(`${
|
|
152
|
+
paragraphBuilder = paragraphBuilder.text(`${listItemNumber}. `);
|
|
153
|
+
listItemNumber++;
|
|
117
154
|
}
|
|
118
155
|
else {
|
|
119
156
|
paragraphBuilder = paragraphBuilder.text('• ');
|
|
@@ -124,14 +161,16 @@ class MarkdownParser {
|
|
|
124
161
|
paragraphBuilder = this.processInlineTokensStructured(firstToken.tokens, paragraphBuilder);
|
|
125
162
|
}
|
|
126
163
|
else if (firstToken && firstToken.text) {
|
|
127
|
-
paragraphBuilder = paragraphBuilder.text(firstToken.text);
|
|
164
|
+
paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(firstToken.text));
|
|
128
165
|
}
|
|
129
166
|
}
|
|
130
167
|
else if (item.text) {
|
|
131
|
-
paragraphBuilder = paragraphBuilder.text(item.text);
|
|
168
|
+
paragraphBuilder = paragraphBuilder.text(decodeHtmlEntities(item.text));
|
|
132
169
|
}
|
|
133
170
|
contentTracker.meaningfulNodesCreated++;
|
|
171
|
+
finalBuilder = paragraphBuilder;
|
|
134
172
|
});
|
|
173
|
+
return finalBuilder;
|
|
135
174
|
}
|
|
136
175
|
static processInlineTokensStructured(tokens, paragraphBuilder, isHeading = false) {
|
|
137
176
|
let currentBuilder = paragraphBuilder;
|
|
@@ -141,25 +180,27 @@ class MarkdownParser {
|
|
|
141
180
|
}
|
|
142
181
|
switch (token.type) {
|
|
143
182
|
case 'text':
|
|
183
|
+
const decodedText = decodeHtmlEntities(token.text);
|
|
144
184
|
if (isHeading) {
|
|
145
|
-
currentBuilder = currentBuilder.bold(
|
|
185
|
+
currentBuilder = currentBuilder.bold(decodedText);
|
|
146
186
|
}
|
|
147
187
|
else {
|
|
148
|
-
currentBuilder = currentBuilder.text(
|
|
188
|
+
currentBuilder = currentBuilder.text(decodedText);
|
|
149
189
|
}
|
|
150
190
|
break;
|
|
151
191
|
case 'strong':
|
|
152
|
-
currentBuilder = currentBuilder.bold(token.text);
|
|
192
|
+
currentBuilder = currentBuilder.bold(decodeHtmlEntities(token.text));
|
|
153
193
|
break;
|
|
154
194
|
case 'em':
|
|
155
|
-
currentBuilder = currentBuilder.italic(token.text);
|
|
195
|
+
currentBuilder = currentBuilder.italic(decodeHtmlEntities(token.text));
|
|
156
196
|
break;
|
|
157
197
|
case 'codespan':
|
|
158
|
-
currentBuilder = currentBuilder.code(token.text);
|
|
198
|
+
currentBuilder = currentBuilder.code(decodeHtmlEntities(token.text));
|
|
159
199
|
break;
|
|
160
200
|
case 'link':
|
|
161
201
|
if (token.text) {
|
|
162
|
-
|
|
202
|
+
const decodedLinkText = decodeHtmlEntities(token.text);
|
|
203
|
+
currentBuilder = currentBuilder.text(`${decodedLinkText} (${token.href})`);
|
|
163
204
|
}
|
|
164
205
|
else {
|
|
165
206
|
currentBuilder = currentBuilder.text(token.href);
|
|
@@ -167,11 +208,12 @@ class MarkdownParser {
|
|
|
167
208
|
break;
|
|
168
209
|
default:
|
|
169
210
|
if (token.text) {
|
|
211
|
+
const decodedFallbackText = decodeHtmlEntities(token.text);
|
|
170
212
|
if (isHeading) {
|
|
171
|
-
currentBuilder = currentBuilder.bold(
|
|
213
|
+
currentBuilder = currentBuilder.bold(decodedFallbackText);
|
|
172
214
|
}
|
|
173
215
|
else {
|
|
174
|
-
currentBuilder = currentBuilder.text(
|
|
216
|
+
currentBuilder = currentBuilder.text(decodedFallbackText);
|
|
175
217
|
}
|
|
176
218
|
}
|
|
177
219
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownParser.js","sourceRoot":"","sources":["../../../nodes/Substack/MarkdownParser.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
|
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:
|
|
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(
|
|
216
|
-
const
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
175
|
+
const finalBuilder = 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;
|