n8n-nodes-substack 1.7.1 → 1.7.3
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/SubstackUtils.d.ts +0 -8
- package/dist/nodes/Substack/SubstackUtils.js +2 -33
- package/dist/nodes/Substack/SubstackUtils.js.map +1 -1
- package/dist/nodes/Substack/shared/DataFormatters.js +6 -12
- package/dist/nodes/Substack/shared/DataFormatters.js.map +1 -1
- package/dist/nodes/Substack/types.d.ts +2 -3
- package/dist/package.json +2 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -6
- package/dist/nodes/Substack/shared/ResourceOperations.d.ts +0 -25
- package/dist/nodes/Substack/shared/ResourceOperations.js +0 -59
- package/dist/nodes/Substack/shared/ResourceOperations.js.map +0 -1
|
@@ -2,8 +2,6 @@ import { IExecuteFunctions } from 'n8n-workflow';
|
|
|
2
2
|
import { SubstackClient } from 'substack-api';
|
|
3
3
|
import { IErrorResponse, IStandardResponse } from './types';
|
|
4
4
|
export declare class SubstackUtils {
|
|
5
|
-
private static readonly DEFAULT_CACHE_TTL;
|
|
6
|
-
private static clientCache;
|
|
7
5
|
static initializeClient(executeFunctions: IExecuteFunctions): Promise<{
|
|
8
6
|
client: SubstackClient;
|
|
9
7
|
publicationAddress: string;
|
|
@@ -11,10 +9,4 @@ export declare class SubstackUtils {
|
|
|
11
9
|
static formatUrl(publicationAddress: string, path: string): string;
|
|
12
10
|
static formatErrorResponse({ message, node, itemIndex }: IErrorResponse): IStandardResponse;
|
|
13
11
|
private static extractHostname;
|
|
14
|
-
private static isCacheValid;
|
|
15
|
-
static clearExpiredCache(): void;
|
|
16
|
-
static getCacheStats(): {
|
|
17
|
-
size: number;
|
|
18
|
-
entries: string[];
|
|
19
|
-
};
|
|
20
12
|
}
|
|
@@ -11,22 +11,9 @@ class SubstackUtils {
|
|
|
11
11
|
throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), 'API key is required');
|
|
12
12
|
}
|
|
13
13
|
const hostname = this.extractHostname(publicationAddress, executeFunctions);
|
|
14
|
-
const cacheKey = `${hostname}:${apiKey}`;
|
|
15
|
-
const cached = this.clientCache.get(cacheKey);
|
|
16
|
-
if (cached && this.isCacheValid(cached.timestamp)) {
|
|
17
|
-
return {
|
|
18
|
-
client: cached.client,
|
|
19
|
-
publicationAddress: publicationAddress,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
const token = Buffer.from(JSON.stringify({ substack_sid: apiKey })).toString('base64');
|
|
23
14
|
const client = new substack_api_1.SubstackClient({
|
|
24
|
-
publicationUrl: hostname
|
|
25
|
-
token,
|
|
26
|
-
});
|
|
27
|
-
this.clientCache.set(cacheKey, {
|
|
28
|
-
client,
|
|
29
|
-
timestamp: Date.now(),
|
|
15
|
+
publicationUrl: `https://${hostname}`,
|
|
16
|
+
token: apiKey,
|
|
30
17
|
});
|
|
31
18
|
return {
|
|
32
19
|
client,
|
|
@@ -66,24 +53,6 @@ class SubstackUtils {
|
|
|
66
53
|
throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), `Invalid publication URL provided: ${url}`);
|
|
67
54
|
}
|
|
68
55
|
}
|
|
69
|
-
static isCacheValid(timestamp) {
|
|
70
|
-
return Date.now() - timestamp < this.DEFAULT_CACHE_TTL;
|
|
71
|
-
}
|
|
72
|
-
static clearExpiredCache() {
|
|
73
|
-
for (const [key, cached] of this.clientCache.entries()) {
|
|
74
|
-
if (!this.isCacheValid(cached.timestamp)) {
|
|
75
|
-
this.clientCache.delete(key);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
static getCacheStats() {
|
|
80
|
-
return {
|
|
81
|
-
size: this.clientCache.size,
|
|
82
|
-
entries: Array.from(this.clientCache.keys()),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
56
|
}
|
|
86
57
|
exports.SubstackUtils = SubstackUtils;
|
|
87
|
-
SubstackUtils.DEFAULT_CACHE_TTL = 5 * 60 * 1000;
|
|
88
|
-
SubstackUtils.clientCache = new Map();
|
|
89
58
|
//# sourceMappingURL=SubstackUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubstackUtils.js","sourceRoot":"","sources":["../../../nodes/Substack/SubstackUtils.ts"],"names":[],"mappings":";;;AAAA,+CAAqE;AACrE,+CAA8C;
|
|
1
|
+
{"version":3,"file":"SubstackUtils.js","sourceRoot":"","sources":["../../../nodes/Substack/SubstackUtils.ts"],"names":[],"mappings":";;;AAAA,+CAAqE;AACrE,+CAA8C;AAG9C,MAAa,aAAa;IACzB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAmC;QAChE,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;QAEnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,iCAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,kBAA4B,EAAE,gBAAgB,CAAC,CAAC;QAEtF,MAAM,MAAM,GAAG,IAAI,6BAAc,CAAC;YACjC,cAAc,EAAE,WAAW,QAAQ,EAAE;YACrC,KAAK,EAAE,MAAgB;SACvB,CAAC,CAAC;QAEH,OAAO;YACN,MAAM;YACN,kBAAkB,EAAE,kBAA4B;SAChD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,kBAA0B,EAAE,IAAY;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAG5D,MAAM,WAAW,GAAG,SAAS;aAC3B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,GAAG,YAAY,GAAG,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAkB;QACtE,OAAO;YACN,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE;gBACT,MAAM,EAAE,OAAO;aACf;SACD,CAAC;IACH,CAAC;IAKO,MAAM,CAAC,eAAe,CAAC,GAAW,EAAE,gBAAmC;QAC9E,IAAI,CAAC;YAEJ,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,iCAAkB,CAC3B,gBAAgB,CAAC,OAAO,EAAE,EAC1B,qCAAqC,GAAG,EAAE,CAC1C,CAAC;QACH,CAAC;IACF,CAAC;CAED;AArED,sCAqEC"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.DataFormatters = void 0;
|
|
7
4
|
const SubstackUtils_1 = require("../SubstackUtils");
|
|
8
|
-
const turndown_1 = __importDefault(require("turndown"));
|
|
9
5
|
class DataFormatters {
|
|
10
6
|
static formatNote(note, publicationAddress) {
|
|
11
7
|
var _a, _b, _c;
|
|
@@ -21,9 +17,6 @@ class DataFormatters {
|
|
|
21
17
|
};
|
|
22
18
|
}
|
|
23
19
|
static formatPost(post, publicationAddress) {
|
|
24
|
-
const htmlBody = post.htmlBody || '';
|
|
25
|
-
const turndownService = new turndown_1.default();
|
|
26
|
-
const markdown = htmlBody ? turndownService.turndown(htmlBody) : '';
|
|
27
20
|
return {
|
|
28
21
|
id: post.id,
|
|
29
22
|
title: post.title || '',
|
|
@@ -31,12 +24,9 @@ class DataFormatters {
|
|
|
31
24
|
slug: post.slug,
|
|
32
25
|
url: post.url || SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${post.slug || post.id}`),
|
|
33
26
|
postDate: DataFormatters.formatDate(post.publishedAt || new Date()),
|
|
34
|
-
type: 'newsletter',
|
|
35
|
-
published: true,
|
|
36
|
-
paywalled: false,
|
|
37
27
|
description: post.truncatedBody || post.body || '',
|
|
38
|
-
htmlBody: htmlBody,
|
|
39
|
-
markdown: markdown,
|
|
28
|
+
htmlBody: post.htmlBody || '',
|
|
29
|
+
markdown: post.markdown || '',
|
|
40
30
|
};
|
|
41
31
|
}
|
|
42
32
|
static formatComment(comment, parentPostId) {
|
|
@@ -53,6 +43,8 @@ class DataFormatters {
|
|
|
53
43
|
name: profile.name,
|
|
54
44
|
handle: profile.handle || profile.slug,
|
|
55
45
|
bio: profile.bio,
|
|
46
|
+
url: profile.url,
|
|
47
|
+
avatarUrl: profile.avatarUrl,
|
|
56
48
|
};
|
|
57
49
|
}
|
|
58
50
|
static formatFollowing(followee, returnType) {
|
|
@@ -66,6 +58,8 @@ class DataFormatters {
|
|
|
66
58
|
name: followee.name,
|
|
67
59
|
handle: followee.handle || followee.slug,
|
|
68
60
|
bio: followee.bio,
|
|
61
|
+
url: followee.url,
|
|
62
|
+
avatarUrl: followee.avatarUrl,
|
|
69
63
|
};
|
|
70
64
|
}
|
|
71
65
|
static formatDate(date) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFormatters.js","sourceRoot":"","sources":["../../../../nodes/Substack/shared/DataFormatters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DataFormatters.js","sourceRoot":"","sources":["../../../../nodes/Substack/shared/DataFormatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,9 +26,6 @@ export interface ISubstackPost {
|
|
|
26
26
|
slug?: string;
|
|
27
27
|
url: string;
|
|
28
28
|
postDate: string;
|
|
29
|
-
type: 'newsletter' | 'podcast' | 'thread';
|
|
30
|
-
published?: boolean;
|
|
31
|
-
paywalled?: boolean;
|
|
32
29
|
description?: string;
|
|
33
30
|
htmlBody?: string;
|
|
34
31
|
markdown?: string;
|
|
@@ -44,6 +41,8 @@ export interface ISubstackFollowing {
|
|
|
44
41
|
name?: string;
|
|
45
42
|
handle?: string;
|
|
46
43
|
bio?: string;
|
|
44
|
+
url?: string;
|
|
45
|
+
avatarUrl?: string;
|
|
47
46
|
}
|
|
48
47
|
export interface IErrorResponse {
|
|
49
48
|
message: string;
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-substack",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.3",
|
|
4
4
|
"description": "n8n community node for Substack API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package"
|
|
@@ -45,8 +45,6 @@
|
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/jest": "^30.0.0",
|
|
48
|
-
"@types/marked": "^4.3.2",
|
|
49
|
-
"@types/turndown": "^5.0.5",
|
|
50
48
|
"@typescript-eslint/parser": "~8.56.0",
|
|
51
49
|
"eslint": ">=9.29.0 <10",
|
|
52
50
|
"eslint-plugin-n8n-nodes-base": "^1.16.3",
|
|
@@ -60,8 +58,6 @@
|
|
|
60
58
|
"n8n-workflow": "^1.82.0"
|
|
61
59
|
},
|
|
62
60
|
"dependencies": {
|
|
63
|
-
"
|
|
64
|
-
"substack-api": "^3.1.0",
|
|
65
|
-
"turndown": "^7.2.0"
|
|
61
|
+
"substack-api": "^3.2.0"
|
|
66
62
|
}
|
|
67
63
|
}
|