ad2app-lib 1.3.0 → 1.5.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.
@@ -4,7 +4,7 @@
4
4
  * Covers subscription tier state, Stripe checkout flows,
5
5
  * and the customer portal redirect.
6
6
  */
7
- export type SchedulingSubscriptionTier = 'free' | 'pro';
7
+ export type SchedulingSubscriptionTier = 'free' | 'starter' | 'pro';
8
8
  export type SchedulingSubscriptionStatus = 'active' | 'canceled' | 'expired';
9
9
  /**
10
10
  * Current subscription state for the authenticated user.
@@ -14,6 +14,7 @@ export declare class SchedulingSubscriptionInfoDTO {
14
14
  tier: SchedulingSubscriptionTier;
15
15
  status: SchedulingSubscriptionStatus;
16
16
  expiresAt: string | null;
17
+ maxPlatforms: number;
17
18
  constructor(data: SchedulingSubscriptionInfoDTO);
18
19
  }
19
20
  /**
@@ -32,6 +33,18 @@ export declare class SchedulingPortalSessionResultDTO {
32
33
  url: string;
33
34
  constructor(data: SchedulingPortalSessionResultDTO);
34
35
  }
36
+ export interface SchedulingPlanPriceDTO {
37
+ tier: 'starter' | 'pro';
38
+ amount: number;
39
+ currency: string;
40
+ interval: string;
41
+ maxPlatforms: number;
42
+ }
43
+ export declare class SchedulingProductPricesDTO {
44
+ starter: SchedulingPlanPriceDTO;
45
+ pro: SchedulingPlanPriceDTO;
46
+ constructor(data: SchedulingProductPricesDTO);
47
+ }
35
48
  /**
36
49
  * Aggregated Pro-upgrade context DTO.
37
50
  * Combines subscription info with action URLs for UI display.
@@ -6,7 +6,7 @@
6
6
  * and the customer portal redirect.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SchedulingProUpgradeDTO = exports.SchedulingPortalSessionResultDTO = exports.SchedulingCheckoutSessionResultDTO = exports.SchedulingSubscriptionInfoDTO = void 0;
9
+ exports.SchedulingProUpgradeDTO = exports.SchedulingProductPricesDTO = exports.SchedulingPortalSessionResultDTO = exports.SchedulingCheckoutSessionResultDTO = exports.SchedulingSubscriptionInfoDTO = void 0;
10
10
  // ── SchedulingSubscriptionInfoDTO ────────────────────────────────────────────
11
11
  /**
12
12
  * Current subscription state for the authenticated user.
@@ -17,6 +17,7 @@ class SchedulingSubscriptionInfoDTO {
17
17
  this.tier = data.tier;
18
18
  this.status = data.status;
19
19
  this.expiresAt = data.expiresAt;
20
+ this.maxPlatforms = data.maxPlatforms;
20
21
  }
21
22
  }
22
23
  exports.SchedulingSubscriptionInfoDTO = SchedulingSubscriptionInfoDTO;
@@ -42,6 +43,14 @@ class SchedulingPortalSessionResultDTO {
42
43
  }
43
44
  }
44
45
  exports.SchedulingPortalSessionResultDTO = SchedulingPortalSessionResultDTO;
46
+ // ── SchedulingProductPricesDTO ────────────────────────────────────────────────
47
+ class SchedulingProductPricesDTO {
48
+ constructor(data) {
49
+ this.starter = data.starter;
50
+ this.pro = data.pro;
51
+ }
52
+ }
53
+ exports.SchedulingProductPricesDTO = SchedulingProductPricesDTO;
45
54
  // ── SchedulingProUpgradeDTO ───────────────────────────────────────────────────
46
55
  /**
47
56
  * Aggregated Pro-upgrade context DTO.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ad2app-lib",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "commonjs",
@@ -30,19 +30,22 @@ export const PRIVACY_SECTIONS: LegalSection[] = [
30
30
  { text: '**Identity & contact data:** first name, last name, email address, business name, phone number (if provided).' },
31
31
  { text: '**Account credentials:** hashed password; OAuth access and refresh tokens when you connect social media accounts — we store tokens, not your passwords.' },
32
32
  {
33
- text: '**Social platform data via OAuth:** when you authorise a connection to a social media account, we receive data from that platform\'s API as permitted by your OAuth consent. The specific data received depends on the platform and the permissions you grant:',
33
+ text: '**Social platform data via OAuth:** when you authorise a connection to one of the social media platforms you choose to connect (currently Instagram, TikTok, X (Twitter), YouTube, LinkedIn, Facebook, Threads, Pinterest, Reddit, and Bluesky), we receive data from that platform\'s API as permitted by your OAuth consent. Across all connected platforms this generally includes your account/profile data (such as user ID, username or handle, display name, avatar, and account statistics where the platform exposes them), the content and media of posts you compose, schedule, or publish through the Service, and performance/analytics data for your published posts. The specific data received depends on the platform and the permissions you grant. For some platforms we describe the data in more detail below; the absence of a platform from the detailed list does not mean less data protection — the same general categories and safeguards apply:',
34
34
  sub: [
35
35
  { text: '**TikTok:** basic profile (user ID, display name, avatar, biography, profile URL), account statistics (follower count, following count, like count, video count), video list and metadata (titles, view counts, engagement metrics), and — where enabled for scheduling features — video upload and publish permissions. We request only the permissions required for the features you actively use.' },
36
36
  { text: '**Instagram:** Instagram Business account data including username, biography, profile picture, account type, and associated business metrics.' },
37
37
  { text: '**Facebook:** public profile information and, where you grant permission, your Facebook email address. Facebook is an independent OAuth provider separate from Instagram.' },
38
38
  { text: '**YouTube:** YouTube channel data (read-only: videos, statistics, channel metadata) and your Google Account profile (name, profile picture URL, Google Account ID) via the Google identity scope used for authentication.' },
39
+ { text: '**Other connected platforms (X (Twitter), LinkedIn, Threads, Pinterest, Reddit, Bluesky):** account/profile data, the post content and media you publish through the Service, and published-post analytics, in each case as permitted by the OAuth permissions you grant on that platform.' },
39
40
  ],
40
41
  },
41
42
  { text: '**Audience data (aggregate only):** demographic and engagement statistics about your social media audience, as provided by the connected platform\'s API. This data is processed exclusively in aggregate statistical form and is not linked to any identified individual within your audience. We have assessed whether this data could constitute special category data under Art. 9 GDPR and confirm that we do not process such special category data — audience data is processed solely as aggregate numeric metrics.' },
42
43
  { text: '**Inbox data:** when you use the platform\'s inbox features, direct message conversations and post comments from your connected social media accounts are fetched and displayed. This includes content sent to you by your followers or other third parties on those platforms. See Section 11 for further detail.' },
43
44
  { text: '**Professional data:** influencer category, social media handles, media kit content.' },
44
45
  { text: '**Campaign & collaboration data:** campaign briefs, offer terms, messages exchanged within the platform between brands and influencers.' },
45
- { text: '**Media & content:** files you upload (images, videos, documents) for campaigns or your profile.' },
46
+ { text: '**Post content & scheduled posts:** the content you compose, schedule, and publish through the Service — including post text, captions, hashtags, links, scheduling times, and the images, videos, and other media you upload for those posts together with the publishing status and metadata of each post.' },
47
+ { text: '**Published-post analytics:** performance and engagement metrics for posts you have published through the Service to your connected accounts (e.g. views, impressions, likes, comments, shares, reach, and other statistics), as provided by the connected platform\'s API.' },
48
+ { text: '**Media & content:** files you upload (images, videos, documents) for posts, campaigns, or your profile.' },
46
49
  { text: '**Technical & usage data:** IP address, browser type and version, operating system, pages visited, referral URLs, timestamps, crash reports, and usage events (e.g. feature interactions tracked via Google Analytics 4).' },
47
50
  { text: '**Billing data:** billing address and payment reference. Payment card details are handled exclusively by Stripe and are never stored by ad2app.' },
48
51
  { text: '**Waitlist data:** if you submit your email address via our waitlist form before registering, we store that email address to notify you when access is available.' },
@@ -62,8 +65,8 @@ export const PRIVACY_SECTIONS: LegalSection[] = [
62
65
  headers: ['Purpose', 'Legal basis (GDPR Art. 6)'],
63
66
  rows: [
64
67
  ['Creating and managing your account', 'Art. 6(1)(b) — performance of contract'],
65
- ['Providing platform features (campaigns, collaborations, messaging, inbox)', 'Art. 6(1)(b) — performance of contract'],
66
- ['Processing social media data received via OAuth connections (audience metrics, engagement data, video metadata, inbox messages)', 'Art. 6(1)(b) — performance of contract: necessary to deliver influencer-brand matching, campaign analytics, and inbox features as contracted. Audience data is processed in aggregate and anonymised form only. No Art. 9 special category data is processed.'],
68
+ ['Providing platform features (scheduling and publishing posts to your connected accounts, post analytics, campaigns, collaborations, messaging, inbox)', 'Art. 6(1)(b) — performance of contract'],
69
+ ['Processing social media data received via OAuth connections (profile/account data, post content and media you publish, published-post analytics, audience metrics, engagement data, video metadata, inbox messages)', 'Art. 6(1)(b) — performance of contract: necessary to deliver post scheduling and publishing, post analytics, influencer-brand matching, campaign analytics, and inbox features as contracted. Audience data is processed in aggregate and anonymised form only. No Art. 9 special category data is processed.'],
67
70
  ['Automated influencer–campaign matching and recommendations (profiling within the meaning of Art. 4(4) GDPR)', 'Art. 6(1)(b) — performance of contract. No binding automated decision with legal or similarly significant effect is made solely by automated means — all matches require affirmative acceptance by both parties. Human review is available on request.'],
68
71
  ['Temporary retention of account data for 30 days following account deletion (account recovery window)', 'Art. 6(1)(f) — legitimate interests: ad2app\'s and the user\'s shared interest in preventing irreversible accidental data loss, balanced against the minimal additional retention period.'],
69
72
  ['Processing payments and issuing invoices (via Stripe)', 'Art. 6(1)(b) & Art. 6(1)(c) — contract & legal obligation'],
@@ -89,6 +92,7 @@ export const PRIVACY_SECTIONS: LegalSection[] = [
89
92
  items: [
90
93
  { text: '**Account data:** for the duration of your account plus 30 days after deletion (account recovery window), then permanently deleted. You may request immediate permanent deletion — waiving the recovery window — by explicitly stating this in your request to kontakt@ad2.app.' },
91
94
  { text: '**Campaign & collaboration data:** for the duration of your account plus 12 months after account deletion to allow dispute resolution, after which it is permanently deleted. Anonymised aggregated analytics may be retained indefinitely.' },
95
+ { text: '**Post content, scheduled posts, and published-post analytics:** retained for the duration of your account and deleted with your account data (subject to the 30-day account recovery window). Anonymised aggregated analytics may be retained indefinitely.' },
92
96
  { text: '**OAuth access and refresh tokens:** revoked and deleted immediately upon disconnection or account deletion, with a maximum retention of 24 hours for revocation processing logs.' },
93
97
  { text: '**Inbox data (DMs and comments):** retained for the duration of your account; deleted with your account data.' },
94
98
  { text: '**Invoices and billing records:** 5 years from the end of the fiscal year (Polish Accounting Act).' },
@@ -207,7 +211,7 @@ export const PRIVACY_SECTIONS: LegalSection[] = [
207
211
  id: 's11',
208
212
  title: '11. Third-Party Links, Social Platforms, and Inbox Data',
209
213
  blocks: [
210
- { kind: 'p', text: 'The Service allows you to connect social media accounts (TikTok, Instagram, Facebook, or YouTube) to enable platform features. When you authorise an OAuth connection, ad2app receives data from that platform\'s API as permitted by your OAuth consent screen. The source of all such data is the respective social media platform\'s API.' },
214
+ { kind: 'p', text: 'The Service allows you to connect the social media accounts you choose to enable platform features. Supported platforms currently include Instagram, TikTok, X (Twitter), YouTube, LinkedIn, Facebook, Threads, Pinterest, Reddit, and Bluesky. When you authorise an OAuth connection, ad2app receives data from that platform\'s API as permitted by your OAuth consent screen. The source of all such data is the respective social media platform\'s API.' },
211
215
  { kind: 'p', text: '**Inbox data and third-party communications:** when you use the inbox features, direct message conversations and post comments from your connected social media accounts are fetched and stored. This includes messages and comments sent by your followers and other third parties on those platforms. Those individuals have not directly provided their data to ad2app. We process this data under Art. 6(1)(b) (to provide the inbox feature you have contracted for) and rely on the exemption in Art. 14(5)(b) GDPR — providing individual notice to each such person would require disproportionate effort given the volume and platform-derived nature of the data. Inbox data is not used for profiling, advertising, or any purpose beyond displaying your social media communications within the platform.' },
212
216
  { kind: 'p', text: '**Audience data (Art. 14 GDPR):** when you connect a social media account, the connected platform may provide aggregate audience data (e.g. demographic statistics about your followers). This data originates from the social platform and relates to individuals who are not in a direct relationship with ad2app. We rely on Art. 14(5)(b) GDPR — individual notification is impossible given the aggregate and platform-derived nature of this data. It is processed solely in aggregated form for influencer–brand matching and campaign analytics, and is not used for any other purpose.' },
213
217
  { kind: 'p', text: 'We are not responsible for the privacy practices of third-party social platforms. Please review their privacy policies before connecting your accounts.' },
@@ -13,7 +13,17 @@ export const TERMS_SECTIONS: LegalSection[] = [
13
13
  id: 's2',
14
14
  title: '2. Service Description',
15
15
  blocks: [
16
- { kind: 'p', text: 'ad2app is a B2B influencer marketing platform that enables brands and agencies ("Advertisers") to discover, manage, and collaborate with content creators and influencers ("Influencers") on marketing campaigns. The Service includes:' },
16
+ { kind: 'p', text: 'ad2app is a social media management platform for content creators. At its core, the Service lets you connect your own social media accounts, compose a post once, schedule and publish it to the platforms you choose, and track the performance of your published posts. The Service includes:' },
17
+ {
18
+ kind: 'ul',
19
+ items: [
20
+ { text: 'Connecting your own social media accounts via authorised access (OAuth) — currently Instagram, TikTok, X (Twitter), YouTube, LinkedIn, Facebook, Threads, Pinterest, Reddit, and Bluesky.' },
21
+ { text: 'Composing a post once and scheduling and publishing it to the connected platforms you select.' },
22
+ { text: 'Analytics and reporting on your published posts.' },
23
+ { text: 'Media and content file management.' },
24
+ ],
25
+ },
26
+ { kind: 'p', text: 'ad2app also operates as a broader B2B influencer marketing platform. Depending on your account type and the features made available to you, the Service may additionally enable brands and agencies ("Advertisers") to discover, manage, and collaborate with content creators and influencers ("Influencers") on marketing campaigns, including:' },
17
27
  {
18
28
  kind: 'ul',
19
29
  items: [
@@ -22,10 +32,9 @@ export const TERMS_SECTIONS: LegalSection[] = [
22
32
  { text: 'Collaboration and offer management workflows.' },
23
33
  { text: 'Messaging between Advertisers and Influencers.' },
24
34
  { text: 'Social media inbox management (DMs and comments from connected platforms).' },
25
- { text: 'Analytics and reporting features.' },
26
- { text: 'Media and content file management.' },
27
35
  ],
28
36
  },
37
+ { kind: 'p', text: 'Not all features described in these Terms are available to every User or in every plan. Where a clause applies only to a particular feature or account type (for example, campaigns or collaborations between Users), it applies to you only to the extent you use that feature.' },
29
38
  { kind: 'p', text: 'We reserve the right to modify, suspend, or discontinue any part of the Service at any time, with reasonable prior notice where technically or commercially practicable.' },
30
39
  ],
31
40
  },
@@ -81,7 +90,7 @@ export const TERMS_SECTIONS: LegalSection[] = [
81
90
  },
82
91
  { kind: 'subheading', text: 'Platform non-liability for User Content' },
83
92
  { kind: 'p', text: '**ad2app does not create, edit, endorse, or control User Content.** We act solely as a hosting intermediary within the meaning of Article 6 of the EU Digital Services Act (Regulation (EU) 2022/2065) and are not liable for User Content unless we have actual knowledge of its illegal nature and fail to act expeditiously to remove or disable access to it.' },
84
- { kind: 'p', text: 'You are **solely and exclusively responsible** for any content you create, publish, share, or distribute through the Service, including — but not limited to — campaign materials, promotional posts, sponsored content, images, videos, captions, hashtags, and any other material posted on third-party platforms (such as TikTok, Instagram, Facebook, or YouTube) using ad2app as a tool or workflow. ad2app assumes no liability for such content regardless of whether it was planned, briefed, or tracked through the platform.' },
93
+ { kind: 'p', text: 'You are **solely and exclusively responsible** for any content you create, publish, share, schedule, or distribute through the Service, including — but not limited to — scheduled posts, captions, images, videos, hashtags, campaign materials, promotional posts, sponsored content, and any other material posted on third-party platforms (including the social media platforms you connect, such as Instagram, TikTok, X (Twitter), YouTube, LinkedIn, Facebook, Threads, Pinterest, Reddit, and Bluesky) using ad2app as a tool or workflow. ad2app assumes no liability for such content regardless of whether it was composed, scheduled, planned, briefed, or tracked through the platform.' },
85
94
  { kind: 'p', text: 'In particular, you are responsible for ensuring that all published content complies with: (a) applicable advertising and marketing laws; (b) platform-specific community guidelines and terms of service of any third-party social media platform; (c) intellectual property rights of third parties; and (d) all applicable laws of the jurisdiction(s) where the content is distributed or viewed.' },
86
95
  { kind: 'subheading', text: 'Digital Services Act — Points of Contact (Art. 11 DSA)' },
87
96
  { kind: 'p', text: 'In accordance with Art. 11 of Regulation (EU) 2022/2065 (Digital Services Act), ad2app designates the following single point of contact for direct communication with Member State authorities, the European Commission, and the European Board for Digital Services: kontakt@ad2.app. Communications may be conducted in Polish or English.' },
@@ -103,7 +112,7 @@ export const TERMS_SECTIONS: LegalSection[] = [
103
112
  id: 's6',
104
113
  title: '6. Intellectual Property',
105
114
  blocks: [
106
- { kind: 'p', text: 'The Service, including its software, design, logos, trademarks, and documentation, is owned by or licensed to ad2app and is protected by intellectual property laws. You are granted a limited, non-exclusive, non-transferable, revocable licence to access and use the Service solely for your internal business purposes in accordance with these Terms. You must not:' },
115
+ { kind: 'p', text: 'The Service, including its software, design, logos, trademarks, and documentation, is owned by or licensed to ad2app and is protected by intellectual property laws. You are granted a limited, non-exclusive, non-transferable, revocable licence to access and use the Service solely for your own purposes in accordance with these Terms. You must not:' },
107
116
  {
108
117
  kind: 'ul',
109
118
  items: [
@@ -118,7 +127,7 @@ export const TERMS_SECTIONS: LegalSection[] = [
118
127
  id: 's7',
119
128
  title: '7. Campaigns and Collaborations Between Users',
120
129
  blocks: [
121
- { kind: 'p', text: 'The Service facilitates agreements between Advertisers and Influencers. ad2app is not a party to any agreement reached between Users through the platform and has no control over the performance, quality, legality, or accuracy of campaigns or content produced. **ad2app is not responsible for any content that Users publish, broadcast, or distribute on any platform — including third-party social media platforms — whether or not that content was planned, briefed, approved, or tracked through the Service.**' },
130
+ { kind: 'p', text: 'This section applies where the Service is used to facilitate campaigns or collaborations between Users; it does not apply to your use of the scheduling, publishing, and analytics features for your own accounts. Where the Service facilitates agreements between Advertisers and Influencers, ad2app is not a party to any agreement reached between Users through the platform and has no control over the performance, quality, legality, or accuracy of campaigns or content produced. **In all cases, ad2app is not responsible for any content that Users publish, broadcast, schedule, or distribute on any platform — including third-party social media platforms — whether or not that content was composed, scheduled, planned, briefed, approved, or tracked through the Service.**' },
122
131
  { kind: 'p', text: 'Each User is solely responsible for:' },
123
132
  {
124
133
  kind: 'ul',