n8n-nodes-substack 0.6.0 → 0.7.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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/nodes/Substack/Comment.fields.d.ts +2 -0
  3. package/dist/nodes/Substack/Comment.fields.js +50 -0
  4. package/dist/nodes/Substack/Comment.fields.js.map +1 -0
  5. package/dist/nodes/Substack/Comment.operations.d.ts +9 -0
  6. package/dist/nodes/Substack/Comment.operations.js +119 -0
  7. package/dist/nodes/Substack/Comment.operations.js.map +1 -0
  8. package/dist/nodes/Substack/Note.fields.d.ts +2 -0
  9. package/dist/nodes/Substack/Note.fields.js +96 -0
  10. package/dist/nodes/Substack/Note.fields.js.map +1 -0
  11. package/dist/nodes/Substack/Note.operations.d.ts +11 -0
  12. package/dist/nodes/Substack/Note.operations.js +244 -0
  13. package/dist/nodes/Substack/Note.operations.js.map +1 -0
  14. package/dist/nodes/Substack/Post.fields.d.ts +2 -0
  15. package/dist/nodes/Substack/Post.fields.js +96 -0
  16. package/dist/nodes/Substack/Post.fields.js.map +1 -0
  17. package/dist/nodes/Substack/Post.operations.d.ts +11 -0
  18. package/dist/nodes/Substack/Post.operations.js +248 -0
  19. package/dist/nodes/Substack/Post.operations.js.map +1 -0
  20. package/dist/nodes/Substack/Profile.fields.d.ts +2 -0
  21. package/dist/nodes/Substack/Profile.fields.js +75 -0
  22. package/dist/nodes/Substack/Profile.fields.js.map +1 -0
  23. package/dist/nodes/Substack/Profile.operations.d.ts +11 -0
  24. package/dist/nodes/Substack/Profile.operations.js +184 -0
  25. package/dist/nodes/Substack/Profile.operations.js.map +1 -0
  26. package/dist/nodes/Substack/Substack.node.d.ts +6 -0
  27. package/dist/nodes/Substack/Substack.node.js +46 -66
  28. package/dist/nodes/Substack/Substack.node.js.map +1 -1
  29. package/dist/nodes/Substack/Substack.node.json +22 -0
  30. package/dist/package.json +3 -6
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +3 -6
  33. package/dist/nodes/Substack/CommentOperations.d.ts +0 -6
  34. package/dist/nodes/Substack/CommentOperations.js +0 -53
  35. package/dist/nodes/Substack/CommentOperations.js.map +0 -1
  36. package/dist/nodes/Substack/FollowOperations.d.ts +0 -6
  37. package/dist/nodes/Substack/FollowOperations.js +0 -57
  38. package/dist/nodes/Substack/FollowOperations.js.map +0 -1
  39. package/dist/nodes/Substack/NoteOperations.d.ts +0 -7
  40. package/dist/nodes/Substack/NoteOperations.js +0 -90
  41. package/dist/nodes/Substack/NoteOperations.js.map +0 -1
  42. package/dist/nodes/Substack/PostOperations.d.ts +0 -6
  43. package/dist/nodes/Substack/PostOperations.js +0 -57
  44. package/dist/nodes/Substack/PostOperations.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-substack",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "n8n community node for Substack API integration",
5
5
  "keywords": [
6
6
  "n8n-community-node-package"
@@ -28,9 +28,8 @@
28
28
  "prepublishOnly": "npm run build && npx eslint -c eslint.prepublish.config.js nodes credentials package.json",
29
29
  "test": "jest",
30
30
  "test:watch": "jest --watch",
31
- "test:e2e": "jest --config jest.e2e.config.js",
32
- "test:e2e:watch": "jest --config jest.e2e.config.js --watch",
33
- "test:all": "npm run test && npm run test:e2e"
31
+ "test:unit": "jest",
32
+ "test:unit:watch": "jest --watch"
34
33
  },
35
34
  "files": [
36
35
  "dist"
@@ -51,8 +50,6 @@
51
50
  "eslint-plugin-n8n-nodes-base": "^1.16.3",
52
51
  "gulp": "^5.0.0",
53
52
  "jest": "^30.0.3",
54
- "msw": "^2.10.2",
55
- "nock": "^14.0.5",
56
53
  "prettier": "^3.5.3",
57
54
  "ts-jest": "^29.2.5",
58
55
  "typescript": "^5.8.2"
@@ -1,6 +0,0 @@
1
- import { IExecuteFunctions } from 'n8n-workflow';
2
- import { SubstackClient } from 'substack-api';
3
- import { IStandardResponse } from './types';
4
- export declare class CommentOperations {
5
- static getAll(executeFunctions: IExecuteFunctions, client: SubstackClient, publicationAddress: string, itemIndex: number): Promise<IStandardResponse>;
6
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommentOperations = void 0;
4
- const SubstackUtils_1 = require("./SubstackUtils");
5
- class CommentOperations {
6
- static async getAll(executeFunctions, client, publicationAddress, itemIndex) {
7
- var _a;
8
- try {
9
- const postId = executeFunctions.getNodeParameter('postId', itemIndex);
10
- const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
11
- let limit = 100;
12
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
13
- limit = Number(limitParam);
14
- }
15
- const post = await client.postForId(postId.toString());
16
- const commentsIterable = await post.comments();
17
- const formattedComments = [];
18
- let count = 0;
19
- for await (const comment of commentsIterable) {
20
- if (count >= limit)
21
- break;
22
- formattedComments.push({
23
- id: comment.id,
24
- body: comment.body,
25
- createdAt: ((_a = comment.rawData) === null || _a === void 0 ? void 0 : _a.created_at) || comment.createdAt.toISOString(),
26
- parentPostId: postId,
27
- author: {
28
- id: comment.author.id,
29
- name: comment.author.name,
30
- isAdmin: comment.author.isAdmin || false,
31
- },
32
- });
33
- count++;
34
- }
35
- return {
36
- success: true,
37
- data: formattedComments,
38
- metadata: {
39
- status: 'success',
40
- },
41
- };
42
- }
43
- catch (error) {
44
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
45
- message: error.message,
46
- node: executeFunctions.getNode(),
47
- itemIndex,
48
- });
49
- }
50
- }
51
- }
52
- exports.CommentOperations = CommentOperations;
53
- //# sourceMappingURL=CommentOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentOperations.js","sourceRoot":"","sources":["../../../nodes/Substack/CommentOperations.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAEhD,MAAa,iBAAiB;IAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,CAClB,gBAAmC,EACnC,MAAsB,EACtB,kBAA0B,EAC1B,SAAiB;;QAEjB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAW,CAAC;YAChF,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAoB,CAAC;YAGhG,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1E,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YAGD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAuB,EAAE,CAAC;YAGjD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;gBAC9C,IAAI,KAAK,IAAI,KAAK;oBAAE,MAAM;gBAE1B,iBAAiB,CAAC,IAAI,CAAC;oBACtB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,SAAS,EAAE,CAAA,MAAC,OAAe,CAAC,OAAO,0CAAE,UAAU,KAAI,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;oBAClF,YAAY,EAAE,MAAM;oBACpB,MAAM,EAAE;wBACP,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;wBACrB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;wBACzB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;qBACxC;iBACD,CAAC,CAAC;gBACH,KAAK,EAAE,CAAC;YACT,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE;oBACT,MAAM,EAAE,SAAS;iBACjB;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,6BAAa,CAAC,mBAAmB,CAAC;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;gBAChC,SAAS;aACT,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD;AAxDD,8CAwDC"}
@@ -1,6 +0,0 @@
1
- import { IExecuteFunctions } from 'n8n-workflow';
2
- import { SubstackClient } from 'substack-api';
3
- import { IStandardResponse } from './types';
4
- export declare class FollowOperations {
5
- static getFollowing(executeFunctions: IExecuteFunctions, client: SubstackClient, publicationAddress: string, itemIndex: number): Promise<IStandardResponse>;
6
- }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FollowOperations = void 0;
4
- const SubstackUtils_1 = require("./SubstackUtils");
5
- class FollowOperations {
6
- static async getFollowing(executeFunctions, client, publicationAddress, itemIndex) {
7
- try {
8
- const returnType = executeFunctions.getNodeParameter('returnType', itemIndex, 'profiles');
9
- const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
10
- let limit = 100;
11
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
12
- limit = Number(limitParam);
13
- }
14
- let followingData = [];
15
- const ownProfile = await client.ownProfile();
16
- const followeesIterable = await ownProfile.followees();
17
- let count = 0;
18
- for await (const followee of followeesIterable) {
19
- if (count >= limit)
20
- break;
21
- if (returnType === 'ids') {
22
- followingData.push({
23
- id: followee.id,
24
- });
25
- }
26
- else {
27
- followingData.push({
28
- id: followee.id,
29
- name: followee.name,
30
- handle: followee.slug,
31
- bio: followee.bio,
32
- subscriberCount: 0,
33
- subscriberCountString: '',
34
- primaryPublication: undefined,
35
- });
36
- }
37
- count++;
38
- }
39
- return {
40
- success: true,
41
- data: followingData,
42
- metadata: {
43
- status: 'success',
44
- },
45
- };
46
- }
47
- catch (error) {
48
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
49
- message: error.message,
50
- node: executeFunctions.getNode(),
51
- itemIndex,
52
- });
53
- }
54
- }
55
- }
56
- exports.FollowOperations = FollowOperations;
57
- //# sourceMappingURL=FollowOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FollowOperations.js","sourceRoot":"","sources":["../../../nodes/Substack/FollowOperations.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAEhD,MAAa,gBAAgB;IAC5B,MAAM,CAAC,KAAK,CAAC,YAAY,CACxB,gBAAmC,EACnC,MAAsB,EACtB,kBAA0B,EAC1B,SAAiB;QAEjB,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAW,CAAC;YACpG,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAoB,CAAC;YAGhG,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1E,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,aAAa,GAAyB,EAAE,CAAC;YAG7C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YAGvD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;gBAChD,IAAI,KAAK,IAAI,KAAK;oBAAE,MAAM;gBAE1B,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;oBAE1B,aAAa,CAAC,IAAI,CAAC;wBAClB,EAAE,EAAE,QAAQ,CAAC,EAAE;qBACf,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBAEP,aAAa,CAAC,IAAI,CAAC;wBAClB,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,MAAM,EAAE,QAAQ,CAAC,IAAI;wBACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,eAAe,EAAE,CAAC;wBAClB,qBAAqB,EAAE,EAAE;wBACzB,kBAAkB,EAAE,SAAS;qBAC7B,CAAC,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,CAAC;YACT,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACT,MAAM,EAAE,SAAS;iBACjB;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,6BAAa,CAAC,mBAAmB,CAAC;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;gBAChC,SAAS;aACT,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD;AA/DD,4CA+DC"}
@@ -1,7 +0,0 @@
1
- import { IExecuteFunctions } from 'n8n-workflow';
2
- import { SubstackClient } from 'substack-api';
3
- import { IStandardResponse } from './types';
4
- export declare class NoteOperations {
5
- static create(executeFunctions: IExecuteFunctions, client: SubstackClient, publicationAddress: string, itemIndex: number): Promise<IStandardResponse>;
6
- static get(executeFunctions: IExecuteFunctions, client: SubstackClient, publicationAddress: string, itemIndex: number): Promise<IStandardResponse>;
7
- }
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoteOperations = void 0;
4
- const n8n_workflow_1 = require("n8n-workflow");
5
- const SubstackUtils_1 = require("./SubstackUtils");
6
- class NoteOperations {
7
- static async create(executeFunctions, client, publicationAddress, itemIndex) {
8
- var _a, _b;
9
- const body = executeFunctions.getNodeParameter('body', itemIndex);
10
- if (!body) {
11
- throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), 'Body is required', {
12
- itemIndex,
13
- });
14
- }
15
- try {
16
- const ownProfile = await client.ownProfile();
17
- const response = await ownProfile.newNote(body).publish();
18
- const formattedNote = {
19
- noteId: ((_a = response.id) === null || _a === void 0 ? void 0 : _a.toString()) || 'unknown',
20
- body: response.body || body,
21
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${response.id || 'unknown'}`),
22
- date: response.date || new Date().toISOString(),
23
- status: 'published',
24
- userId: ((_b = response.user_id) === null || _b === void 0 ? void 0 : _b.toString()) || 'unknown',
25
- };
26
- return {
27
- success: true,
28
- data: formattedNote,
29
- metadata: {
30
- date: response.date,
31
- status: 'published',
32
- },
33
- };
34
- }
35
- catch (error) {
36
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
37
- message: error.message,
38
- node: executeFunctions.getNode(),
39
- itemIndex,
40
- });
41
- }
42
- }
43
- static async get(executeFunctions, client, publicationAddress, itemIndex) {
44
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
45
- try {
46
- const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
47
- let limit = 100;
48
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
49
- limit = Number(limitParam);
50
- }
51
- const ownProfile = await client.ownProfile();
52
- const notesIterable = await ownProfile.notes();
53
- const formattedNotes = [];
54
- let count = 0;
55
- for await (const note of notesIterable) {
56
- if (count >= limit)
57
- break;
58
- formattedNotes.push({
59
- 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',
60
- body: note.body || '',
61
- 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'}`),
62
- date: ((_h = (_g = note.rawData) === null || _g === void 0 ? void 0 : _g.context) === null || _h === void 0 ? void 0 : _h.timestamp) || ((_j = note.publishedAt) === null || _j === void 0 ? void 0 : _j.toISOString()) || new Date().toISOString(),
63
- status: 'published',
64
- userId: ((_l = (_k = note.author) === null || _k === void 0 ? void 0 : _k.id) === null || _l === void 0 ? void 0 : _l.toString()) || 'unknown',
65
- likes: note.likesCount || 0,
66
- restacks: ((_o = (_m = note.rawData) === null || _m === void 0 ? void 0 : _m.comment) === null || _o === void 0 ? void 0 : _o.restacks) || 0,
67
- type: 'note',
68
- entityKey: ((_p = note.rawData) === null || _p === void 0 ? void 0 : _p.entity_key) || note.id,
69
- });
70
- count++;
71
- }
72
- return {
73
- success: true,
74
- data: formattedNotes,
75
- metadata: {
76
- status: 'success',
77
- },
78
- };
79
- }
80
- catch (error) {
81
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
82
- message: error.message,
83
- node: executeFunctions.getNode(),
84
- itemIndex,
85
- });
86
- }
87
- }
88
- }
89
- exports.NoteOperations = NoteOperations;
90
- //# sourceMappingURL=NoteOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoteOperations.js","sourceRoot":"","sources":["../../../nodes/Substack/NoteOperations.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { IExecuteFunctions } from 'n8n-workflow';
2
- import { SubstackClient } from 'substack-api';
3
- import { IStandardResponse } from './types';
4
- export declare class PostOperations {
5
- static getAll(executeFunctions: IExecuteFunctions, client: SubstackClient, publicationAddress: string, itemIndex: number): Promise<IStandardResponse>;
6
- }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PostOperations = void 0;
4
- const SubstackUtils_1 = require("./SubstackUtils");
5
- class PostOperations {
6
- static async getAll(executeFunctions, client, publicationAddress, itemIndex) {
7
- var _a, _b, _c, _d, _e, _f, _g, _h;
8
- try {
9
- const limitParam = executeFunctions.getNodeParameter('limit', itemIndex, '');
10
- let limit = 100;
11
- if (limitParam !== '' && limitParam !== null && limitParam !== undefined) {
12
- limit = Number(limitParam);
13
- }
14
- const ownProfile = await client.ownProfile();
15
- const postsIterable = await ownProfile.posts();
16
- const formattedPosts = [];
17
- let count = 0;
18
- for await (const post of postsIterable) {
19
- if (count >= limit)
20
- break;
21
- try {
22
- formattedPosts.push({
23
- id: post.id,
24
- title: post.title || '',
25
- subtitle: ((_a = post.rawData) === null || _a === void 0 ? void 0 : _a.subtitle) || '',
26
- url: SubstackUtils_1.SubstackUtils.formatUrl(publicationAddress, `/p/${post.id}`),
27
- postDate: ((_b = post.rawData) === null || _b === void 0 ? void 0 : _b.post_date) || (post.publishedAt && !isNaN(post.publishedAt.getTime()) ? post.publishedAt.toISOString() : new Date().toISOString()),
28
- type: ((_c = post.rawData) === null || _c === void 0 ? void 0 : _c.type) || 'newsletter',
29
- published: (_e = (_d = post.rawData) === null || _d === void 0 ? void 0 : _d.published) !== null && _e !== void 0 ? _e : true,
30
- paywalled: (_g = (_f = post.rawData) === null || _f === void 0 ? void 0 : _f.paywalled) !== null && _g !== void 0 ? _g : false,
31
- description: ((_h = post.rawData) === null || _h === void 0 ? void 0 : _h.description) || post.body || '',
32
- });
33
- }
34
- catch (error) {
35
- console.warn(`Skipped malformed post: ${error.message}`);
36
- }
37
- count++;
38
- }
39
- return {
40
- success: true,
41
- data: formattedPosts,
42
- metadata: {
43
- status: 'success',
44
- },
45
- };
46
- }
47
- catch (error) {
48
- return SubstackUtils_1.SubstackUtils.formatErrorResponse({
49
- message: error.message,
50
- node: executeFunctions.getNode(),
51
- itemIndex,
52
- });
53
- }
54
- }
55
- }
56
- exports.PostOperations = PostOperations;
57
- //# sourceMappingURL=PostOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PostOperations.js","sourceRoot":"","sources":["../../../nodes/Substack/PostOperations.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAEhD,MAAa,cAAc;IAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAClB,gBAAmC,EACnC,MAAsB,EACtB,kBAA0B,EAC1B,SAAiB;;QAEjB,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAoB,CAAC;YAGhG,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1E,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YAGD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,cAAc,GAAoB,EAAE,CAAC;YAG3C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACxC,IAAI,KAAK,IAAI,KAAK;oBAAE,MAAM;gBAE1B,IAAI,CAAC;oBACJ,cAAc,CAAC,IAAI,CAAC;wBACnB,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;wBACvB,QAAQ,EAAE,CAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,QAAQ,KAAI,EAAE;wBAC/C,GAAG,EAAE,6BAAa,CAAC,SAAS,CAAC,kBAAkB,EAAE,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC;wBACjE,QAAQ,EAAE,CAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,SAAS,KAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBAClK,IAAI,EAAE,CAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,IAAI,KAAI,YAAY;wBACjD,SAAS,EAAE,MAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,SAAS,mCAAI,IAAI;wBACnD,SAAS,EAAE,MAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,SAAS,mCAAI,KAAK;wBACpD,WAAW,EAAE,CAAA,MAAC,IAAY,CAAC,OAAO,0CAAE,WAAW,KAAI,IAAI,CAAC,IAAI,IAAI,EAAE;qBAClE,CAAC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAEhB,OAAO,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,KAAK,EAAE,CAAC;YACT,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE;oBACT,MAAM,EAAE,SAAS;iBACjB;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,6BAAa,CAAC,mBAAmB,CAAC;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;gBAChC,SAAS;aACT,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD;AA5DD,wCA4DC"}