patreon-dl 3.7.1 → 3.8.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.
Files changed (53) hide show
  1. package/README.md +12 -0
  2. package/dist/browse/api/CampaignAPIMixin.d.ts +1 -1
  3. package/dist/browse/api/ContentAPIMixin.d.ts +3 -3
  4. package/dist/browse/api/FilterAPIMixin.d.ts +1 -1
  5. package/dist/browse/api/index.d.ts +10 -10
  6. package/dist/browse/db/CampaignDBMixin.d.ts +3 -3
  7. package/dist/browse/db/ContentDBMixin.d.ts +13 -13
  8. package/dist/browse/db/index.d.ts +16 -16
  9. package/dist/browse/web/assets/index-CtZbx-Du.js +218 -0
  10. package/dist/browse/web/index.html +1 -1
  11. package/dist/cli/CommandLineParser.d.ts +4 -0
  12. package/dist/cli/CommandLineParser.js +65 -32
  13. package/dist/cli/CommandLineParser.js.map +1 -1
  14. package/dist/cli/helper/PostList.d.ts +6 -0
  15. package/dist/cli/helper/PostList.js +106 -0
  16. package/dist/cli/helper/PostList.js.map +1 -0
  17. package/dist/cli/index.js +73 -53
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/downloaders/Bootstrap.d.ts +5 -0
  20. package/dist/downloaders/Bootstrap.js +10 -0
  21. package/dist/downloaders/Bootstrap.js.map +1 -1
  22. package/dist/downloaders/Downloader.d.ts +4 -4
  23. package/dist/downloaders/Downloader.js +5 -58
  24. package/dist/downloaders/Downloader.js.map +1 -1
  25. package/dist/downloaders/IncludeCriteriaHelper.d.ts +25 -0
  26. package/dist/downloaders/IncludeCriteriaHelper.js +160 -0
  27. package/dist/downloaders/IncludeCriteriaHelper.js.map +1 -0
  28. package/dist/downloaders/InitialData.js +20 -6
  29. package/dist/downloaders/InitialData.js.map +1 -1
  30. package/dist/downloaders/PostDownloader.js +62 -98
  31. package/dist/downloaders/PostDownloader.js.map +1 -1
  32. package/dist/downloaders/PostsFetcher.js +4 -2
  33. package/dist/downloaders/PostsFetcher.js.map +1 -1
  34. package/dist/downloaders/ProductDownloader.js +31 -21
  35. package/dist/downloaders/ProductDownloader.js.map +1 -1
  36. package/dist/downloaders/task/YouTubeDownloadTask.js +1 -3
  37. package/dist/downloaders/task/YouTubeDownloadTask.js.map +1 -1
  38. package/dist/parsers/PageParser.js +7 -2
  39. package/dist/parsers/PageParser.js.map +1 -1
  40. package/dist/utils/URLHelper.d.ts +4 -0
  41. package/dist/utils/URLHelper.js +17 -0
  42. package/dist/utils/URLHelper.js.map +1 -1
  43. package/dist/utils/YouTubeCredentialsCapturer.js +1 -1
  44. package/dist/utils/YouTubeCredentialsCapturer.js.map +1 -1
  45. package/dist/utils/logging/ConsoleLogger.js +5 -0
  46. package/dist/utils/logging/ConsoleLogger.js.map +1 -1
  47. package/dist/utils/yt/InnertubeLoader.d.ts +4 -6
  48. package/dist/utils/yt/InnertubeLoader.js +14 -14
  49. package/dist/utils/yt/InnertubeLoader.js.map +1 -1
  50. package/dist/utils/yt/PoToken.js +53 -27
  51. package/dist/utils/yt/PoToken.js.map +1 -1
  52. package/package.json +12 -8
  53. package/dist/browse/web/assets/index-B1h15ViZ.js +0 -218
package/README.md CHANGED
@@ -120,6 +120,8 @@ $ patreon-dl [OPTION]... URL
120
120
  | `--dry-run` | | Run without writing files to disk (except logs, if any). Intended for testing / debugging. |
121
121
  | <code><nobr>--list-tiers &lt;creator&gt;</nobr></code> | | <p>List tiers for the given creator(s). Separate multiple creators with a comma.</p>The purpose of this is to let you find out what tier IDs to set for `posts.in.tier` filtering option under `include` section of [configuration file](#configuration-file). |
122
122
  | <code><nobr>--list-tiers-uid &lt;user ID&gt;</nobr></code> | | Same as `--list-tiers`, but takes user ID instead of vanity. |
123
+ | <code><nobr>--list-posts &lt;creator&gt;</nobr></code> | | <p>List posts by the given creator(s). Separate multiple creators with a comma.</p> |
124
+ | <code><nobr>--list-posts-uid &lt;user ID&gt;</nobr></code> | | Same as `--list-posts`, but takes user ID instead of vanity. |
123
125
  | `--configure-youtube` | | <p>Configure YouTube connection.</p>`patreon-dl` supports downloading embedded YouTube videos. If you have a YouTube Premium account, you can connect `patreon-dl` to it for downloading Premium-quality streams. You will also need to connect to an account if you get a "Login required" error message during download.|
124
126
 
125
127
  ### URL
@@ -150,6 +152,10 @@ https://www.patreon.com/collection/<collection_id>
150
152
 
151
153
  ```
152
154
 
155
+ #### Custom URLs
156
+
157
+ Some creators host their Patreon pages on custom domains. You can provide this custom URL to `patreon-dl`, which will download posts from the associated creator.
158
+
153
159
  #### Multiple URLs
154
160
 
155
161
  You may specify multiple URLs by separating them with a comma. E.g.:
@@ -305,6 +311,12 @@ Note the URL shown in the output. Open this URL in a web browser to begin viewin
305
311
 
306
312
  ## Changelog
307
313
 
314
+ 3.8.0
315
+ - Add support for custom URLs (creators hosting Patreon pages on their own domains) ([@lucasoskorep](https://github.com/lucasoskorep) - [PR #129](https://github.com/patrickkfkan/patreon-dl/pull/129)).
316
+ - Fix YT download errors ([#132](https://github.com/patrickkfkan/patreon-dl/issues/132)).
317
+ - Browse: set title tag based on content ([#127](https://github.com/patrickkfkan/patreon-dl/issues/127)).
318
+ - CLI: add `--list-posts` / `--list-posts-uid` ([#126](https://github.com/patrickkfkan/patreon-dl/issues/126)).
319
+
308
320
  3.7.1
309
321
  - Check and skip download of Patreon-hosted videos that are protected by DRM; add `include.protectedMedia` / `protected.media` option.
310
322
  - Fix campaign not found when targeting collections ([#124](https://github.com/patrickkfkan/patreon-dl/issues/124)).
@@ -11,7 +11,7 @@ export declare function CampaignAPIMixin<TBase extends APIConstructor>(Base: TBa
11
11
  withCounts?: false;
12
12
  }): Campaign | null;
13
13
  getCampaign(params: GetCampaignParams): Campaign | CampaignWithCounts | null;
14
- "__#130@#sanitizeCampaign"(campaign: Campaign): void;
14
+ "__#185@#sanitizeCampaign"(campaign: Campaign): void;
15
15
  name: string;
16
16
  db: import("../db").DBInstance;
17
17
  logger?: import("../..").Logger | null;
@@ -14,9 +14,9 @@ export declare function ContentAPIMixin<TBase extends APIConstructor>(Base: TBas
14
14
  } | null;
15
15
  getCollectionList(params: GetCollectionListParams): import("../types/Content.js").CollectionList;
16
16
  getPostTagList(params: GetPostTagListParams): import("../types/Content.js").PostTagList;
17
- "__#131@#processPostContentElements"(post: Post): void;
18
- "__#131@#processInlineMedia"($: CheerioAPI, post: Post): boolean;
19
- "__#131@#processInlineLinks"($: CheerioAPI): boolean;
17
+ "__#186@#processPostContentElements"(post: Post): void;
18
+ "__#186@#processInlineMedia"($: CheerioAPI, post: Post): boolean;
19
+ "__#186@#processInlineLinks"($: CheerioAPI): boolean;
20
20
  name: string;
21
21
  db: import("../db").DBInstance;
22
22
  logger?: import("../..").Logger | null;
@@ -3,7 +3,7 @@ import { type FilterData, type MediaFilterSearchParams, type PostFilterSearchPar
3
3
  export declare function FilterAPIMixin<TBase extends APIConstructor>(Base: TBase): {
4
4
  new (...args: any[]): {
5
5
  getPostFilterData(campaignId: string): FilterData<PostFilterSearchParams>;
6
- "__#132@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
6
+ "__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
7
7
  getProductFilterData(campaignId: string): FilterData<ProductFilterSearchParams>;
8
8
  getMediaFilterData(campaignId: string): FilterData<MediaFilterSearchParams>;
9
9
  name: string;
@@ -10,7 +10,7 @@ export declare class APIBase {
10
10
  constructor(db: DBInstance, logger?: Logger | null);
11
11
  static getInstance(db: DBInstance, logger?: Logger | null): {
12
12
  getPostFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").PostFilterSearchParams>;
13
- "__#132@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
13
+ "__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
14
14
  getProductFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").ProductFilterSearchParams>;
15
15
  getMediaFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").MediaFilterSearchParams>;
16
16
  name: string;
@@ -50,9 +50,9 @@ export declare class APIBase {
50
50
  } | null;
51
51
  getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
52
52
  getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
53
- "__#131@#processPostContentElements"(post: import("../../index.js").Post): void;
54
- "__#131@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
55
- "__#131@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
53
+ "__#186@#processPostContentElements"(post: import("../../index.js").Post): void;
54
+ "__#186@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
55
+ "__#186@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
56
56
  name: string;
57
57
  db: DBInstance;
58
58
  logger?: Logger | null;
@@ -67,7 +67,7 @@ export declare class APIBase {
67
67
  withCounts?: false;
68
68
  }): import("../../index.js").Campaign | null;
69
69
  getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | import("../types/Campaign.js").CampaignWithCounts | null;
70
- "__#130@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
70
+ "__#185@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
71
71
  name: string;
72
72
  db: DBInstance;
73
73
  logger?: Logger | null;
@@ -80,7 +80,7 @@ export declare class APIBase {
80
80
  declare const API: {
81
81
  new (...args: any[]): {
82
82
  getPostFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").PostFilterSearchParams>;
83
- "__#132@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
83
+ "__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
84
84
  getProductFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").ProductFilterSearchParams>;
85
85
  getMediaFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").MediaFilterSearchParams>;
86
86
  name: string;
@@ -126,9 +126,9 @@ declare const API: {
126
126
  } | null;
127
127
  getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
128
128
  getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
129
- "__#131@#processPostContentElements"(post: import("../../index.js").Post): void;
130
- "__#131@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
131
- "__#131@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
129
+ "__#186@#processPostContentElements"(post: import("../../index.js").Post): void;
130
+ "__#186@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
131
+ "__#186@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
132
132
  name: string;
133
133
  db: DBInstance;
134
134
  logger?: Logger | null;
@@ -145,7 +145,7 @@ declare const API: {
145
145
  withCounts?: false;
146
146
  }): import("../../index.js").Campaign | null;
147
147
  getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | import("../types/Campaign.js").CampaignWithCounts | null;
148
- "__#130@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
148
+ "__#185@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
149
149
  name: string;
150
150
  db: DBInstance;
151
151
  logger?: Logger | null;
@@ -7,10 +7,10 @@ export declare function CampaignDBMixin<TBase extends UserDBConstructor>(Base: T
7
7
  new (...args: any[]): {
8
8
  saveCampaign(campaign: Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
9
9
  getCampaign(params: GetCampaignParams): Campaign | null;
10
- "__#114@#saveRewards"(campaign: Campaign): void;
11
- "__#114@#doSaveReward"(campaign: Campaign, reward: Reward): void;
10
+ "__#169@#saveRewards"(campaign: Campaign): void;
11
+ "__#169@#doSaveReward"(campaign: Campaign, reward: Reward): void;
12
12
  getCampaignList(params: GetCampaignListParams): CampaignList;
13
- "__#114@#getCampaignWithCounts"(params: GetCampaignParams): CampaignWithCounts | null;
13
+ "__#169@#getCampaignWithCounts"(params: GetCampaignParams): CampaignWithCounts | null;
14
14
  checkCampaignExists(id: string): boolean;
15
15
  saveUser(user: import("../../index.js").User | null): void;
16
16
  getUserByID(id: string): import("../../index.js").User | null;
@@ -5,13 +5,13 @@ import { type CampaignDBConstructor } from './CampaignDBMixin.js';
5
5
  export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base: TBase): {
6
6
  new (...args: any[]): {
7
7
  saveContent(content: Post | Product): void;
8
- "__#115@#saveContentMedia"(content: Post | Product): void;
9
- "__#115@#savepostMedia"(post: Post): void;
10
- "__#115@#saveProductMedia"(product: Product): void;
11
- "__#115@#doSaveContentMedia"(content: Post | Product, media: Downloadable, mediaIndex: number, isPreview: boolean): void;
12
- "__#115@#publishedAtToTime"(publishedAt: string | null): number | null;
13
- "__#115@#savePostTiers"(post: Post): void;
14
- "__#115@#doSaveTier"(post: Post, tier: Tier): void;
8
+ "__#170@#saveContentMedia"(content: Post | Product): void;
9
+ "__#170@#savepostMedia"(post: Post): void;
10
+ "__#170@#saveProductMedia"(product: Product): void;
11
+ "__#170@#doSaveContentMedia"(content: Post | Product, media: Downloadable, mediaIndex: number, isPreview: boolean): void;
12
+ "__#170@#publishedAtToTime"(publishedAt: string | null): number | null;
13
+ "__#170@#savePostTiers"(post: Post): void;
14
+ "__#170@#doSaveTier"(post: Post, tier: Tier): void;
15
15
  savePostComments(post: Post, comments: Comment[]): void;
16
16
  checkPostCommentsExist(post: Post): boolean;
17
17
  getContent(id: string, contentType: "post"): PostWithComments | null;
@@ -26,7 +26,7 @@ export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base
26
26
  * @param row Must have `details`, `comment_count` and `comments`
27
27
  * @returns
28
28
  */
29
- "__#115@#parseContentRowJoinedComments"(row: any): any;
29
+ "__#170@#parseContentRowJoinedComments"(row: any): any;
30
30
  getContentCountByDate(contentType: ContentType, groupBy: "year" | "month", filter?: {
31
31
  campaign?: Campaign | string | null;
32
32
  date?: Date | null;
@@ -50,19 +50,19 @@ export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base
50
50
  collection: Collection;
51
51
  campaignId: string;
52
52
  } | null;
53
- "__#115@#savePostCollection"(post: Post): void;
53
+ "__#170@#savePostCollection"(post: Post): void;
54
54
  getCollectionList(params: GetCollectionListParams): CollectionList;
55
55
  checkCollectionExists(id: string): boolean;
56
56
  checkPostTagExists(id: string, campaign: Campaign | null): boolean;
57
57
  getPostComments(post: Post | string): Comment[] | null;
58
- "__#115@#savePostTags"(post: Post): void;
58
+ "__#170@#savePostTags"(post: Post): void;
59
59
  getPostTagList(params: GetPostTagListParams): PostTagList;
60
60
  saveCampaign(campaign: Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
61
61
  getCampaign(params: import("../types/Campaign").GetCampaignParams): Campaign | null;
62
- "__#114@#saveRewards"(campaign: Campaign): void;
63
- "__#114@#doSaveReward"(campaign: Campaign, reward: import("../../entities").Reward): void;
62
+ "__#169@#saveRewards"(campaign: Campaign): void;
63
+ "__#169@#doSaveReward"(campaign: Campaign, reward: import("../../entities").Reward): void;
64
64
  getCampaignList(params: import("../types/Campaign").GetCampaignListParams): import("../types/Campaign").CampaignList;
65
- "__#114@#getCampaignWithCounts"(params: import("../types/Campaign").GetCampaignParams): import("../types/Campaign").CampaignWithCounts | null;
65
+ "__#169@#getCampaignWithCounts"(params: import("../types/Campaign").GetCampaignParams): import("../types/Campaign").CampaignWithCounts | null;
66
66
  checkCampaignExists(id: string): boolean;
67
67
  saveUser(user: import("../../entities").User | null): void;
68
68
  getUserByID(id: string): import("../../entities").User | null;
@@ -45,13 +45,13 @@ declare const DB: {
45
45
  } & {
46
46
  new (...args: any[]): {
47
47
  saveContent(content: import("../../index.js").Post | import("../../index.js").Product): void;
48
- "__#115@#saveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product): void;
49
- "__#115@#savepostMedia"(post: import("../../index.js").Post): void;
50
- "__#115@#saveProductMedia"(product: import("../../index.js").Product): void;
51
- "__#115@#doSaveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product, media: import("../../index.js").Downloadable, mediaIndex: number, isPreview: boolean): void;
52
- "__#115@#publishedAtToTime"(publishedAt: string | null): number | null;
53
- "__#115@#savePostTiers"(post: import("../../index.js").Post): void;
54
- "__#115@#doSaveTier"(post: import("../../index.js").Post, tier: import("../../index.js").Tier): void;
48
+ "__#170@#saveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product): void;
49
+ "__#170@#savepostMedia"(post: import("../../index.js").Post): void;
50
+ "__#170@#saveProductMedia"(product: import("../../index.js").Product): void;
51
+ "__#170@#doSaveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product, media: import("../../index.js").Downloadable, mediaIndex: number, isPreview: boolean): void;
52
+ "__#170@#publishedAtToTime"(publishedAt: string | null): number | null;
53
+ "__#170@#savePostTiers"(post: import("../../index.js").Post): void;
54
+ "__#170@#doSaveTier"(post: import("../../index.js").Post, tier: import("../../index.js").Tier): void;
55
55
  savePostComments(post: import("../../index.js").Post, comments: import("../../index.js").Comment[]): void;
56
56
  checkPostCommentsExist(post: import("../../index.js").Post): boolean;
57
57
  getContent(id: string, contentType: "post"): import("../types/Content.js").PostWithComments | null;
@@ -61,7 +61,7 @@ declare const DB: {
61
61
  whereClauses: string[];
62
62
  whereValues: any[];
63
63
  } | undefined, includeTotal?: boolean): import("../types/Content.js").ContentList<T>;
64
- "__#115@#parseContentRowJoinedComments"(row: any): any;
64
+ "__#170@#parseContentRowJoinedComments"(row: any): any;
65
65
  getContentCountByDate(contentType: import("../types/Content.js").ContentType, groupBy: "year" | "month", filter?: {
66
66
  campaign?: import("../../index.js").Campaign | string | null;
67
67
  date?: Date | null;
@@ -85,19 +85,19 @@ declare const DB: {
85
85
  collection: import("../../index.js").Collection;
86
86
  campaignId: string;
87
87
  } | null;
88
- "__#115@#savePostCollection"(post: import("../../index.js").Post): void;
88
+ "__#170@#savePostCollection"(post: import("../../index.js").Post): void;
89
89
  getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
90
90
  checkCollectionExists(id: string): boolean;
91
91
  checkPostTagExists(id: string, campaign: import("../../index.js").Campaign | null): boolean;
92
92
  getPostComments(post: import("../../index.js").Post | string): import("../../index.js").Comment[] | null;
93
- "__#115@#savePostTags"(post: import("../../index.js").Post): void;
93
+ "__#170@#savePostTags"(post: import("../../index.js").Post): void;
94
94
  getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
95
95
  saveCampaign(campaign: import("../../index.js").Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
96
96
  getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | null;
97
- "__#114@#saveRewards"(campaign: import("../../index.js").Campaign): void;
98
- "__#114@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
97
+ "__#169@#saveRewards"(campaign: import("../../index.js").Campaign): void;
98
+ "__#169@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
99
99
  getCampaignList(params: import("../types/Campaign.js").GetCampaignListParams): import("../types/Campaign.js").CampaignList;
100
- "__#114@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
100
+ "__#169@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
101
101
  checkCampaignExists(id: string): boolean;
102
102
  saveUser(user: import("../../index.js").User | null): void;
103
103
  getUserByID(id: string): import("../../index.js").User | null;
@@ -147,10 +147,10 @@ declare const DB: {
147
147
  new (...args: any[]): {
148
148
  saveCampaign(campaign: import("../../index.js").Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
149
149
  getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | null;
150
- "__#114@#saveRewards"(campaign: import("../../index.js").Campaign): void;
151
- "__#114@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
150
+ "__#169@#saveRewards"(campaign: import("../../index.js").Campaign): void;
151
+ "__#169@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
152
152
  getCampaignList(params: import("../types/Campaign.js").GetCampaignListParams): import("../types/Campaign.js").CampaignList;
153
- "__#114@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
153
+ "__#169@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
154
154
  checkCampaignExists(id: string): boolean;
155
155
  saveUser(user: import("../../index.js").User | null): void;
156
156
  getUserByID(id: string): import("../../index.js").User | null;