post-for-me 0.1.0.pre.alpha.10 → 0.1.0.pre.alpha.12

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +10 -1
  4. data/lib/post_for_me/client.rb +4 -0
  5. data/lib/post_for_me/internal/transport/pooled_net_requester.rb +12 -10
  6. data/lib/post_for_me/internal/util.rb +7 -2
  7. data/lib/post_for_me/models/create_social_post.rb +158 -8
  8. data/lib/post_for_me/models/platform_post.rb +843 -0
  9. data/lib/post_for_me/models/social_account_create_auth_url_params.rb +245 -9
  10. data/lib/post_for_me/models/social_account_feed_list_params.rb +81 -0
  11. data/lib/post_for_me/models/social_account_feed_list_response.rb +58 -0
  12. data/lib/post_for_me/models/social_post.rb +155 -8
  13. data/lib/post_for_me/models/social_post_list_params.rb +9 -1
  14. data/lib/post_for_me/models/social_post_result_list_params.rb +10 -1
  15. data/lib/post_for_me/models/youtube_configuration_dto.rb +31 -1
  16. data/lib/post_for_me/models.rb +4 -0
  17. data/lib/post_for_me/resources/social_account_feeds.rb +51 -0
  18. data/lib/post_for_me/resources/social_accounts.rb +8 -1
  19. data/lib/post_for_me/resources/social_post_results.rb +3 -1
  20. data/lib/post_for_me/resources/social_posts.rb +3 -1
  21. data/lib/post_for_me/version.rb +1 -1
  22. data/lib/post_for_me.rb +5 -0
  23. data/manifest.yaml +1 -0
  24. data/rbi/post_for_me/client.rbi +3 -0
  25. data/rbi/post_for_me/models/create_social_post.rbi +328 -8
  26. data/rbi/post_for_me/models/platform_post.rbi +1287 -0
  27. data/rbi/post_for_me/models/social_account_create_auth_url_params.rbi +545 -15
  28. data/rbi/post_for_me/models/social_account_feed_list_params.rbi +157 -0
  29. data/rbi/post_for_me/models/social_account_feed_list_response.rbi +110 -0
  30. data/rbi/post_for_me/models/social_post.rbi +328 -8
  31. data/rbi/post_for_me/models/social_post_list_params.rbi +11 -0
  32. data/rbi/post_for_me/models/social_post_result_list_params.rbi +13 -0
  33. data/rbi/post_for_me/models/youtube_configuration_dto.rbi +63 -0
  34. data/rbi/post_for_me/models.rbi +4 -0
  35. data/rbi/post_for_me/resources/social_account_feeds.rbi +51 -0
  36. data/rbi/post_for_me/resources/social_accounts.rbi +13 -0
  37. data/rbi/post_for_me/resources/social_post_results.rbi +4 -0
  38. data/rbi/post_for_me/resources/social_posts.rbi +3 -0
  39. data/sig/post_for_me/client.rbs +2 -0
  40. data/sig/post_for_me/models/create_social_post.rbs +120 -8
  41. data/sig/post_for_me/models/platform_post.rbs +660 -0
  42. data/sig/post_for_me/models/social_account_create_auth_url_params.rbs +193 -10
  43. data/sig/post_for_me/models/social_account_feed_list_params.rbs +75 -0
  44. data/sig/post_for_me/models/social_account_feed_list_response.rbs +54 -0
  45. data/sig/post_for_me/models/social_post.rbs +120 -8
  46. data/sig/post_for_me/models/social_post_list_params.rbs +7 -0
  47. data/sig/post_for_me/models/social_post_result_list_params.rbs +8 -1
  48. data/sig/post_for_me/models/youtube_configuration_dto.rbs +22 -0
  49. data/sig/post_for_me/models.rbs +4 -0
  50. data/sig/post_for_me/resources/social_account_feeds.rbs +18 -0
  51. data/sig/post_for_me/resources/social_accounts.rbs +2 -0
  52. data/sig/post_for_me/resources/social_post_results.rbs +1 -0
  53. data/sig/post_for_me/resources/social_posts.rbs +1 -0
  54. metadata +28 -2
@@ -0,0 +1,1287 @@
1
+ # typed: strong
2
+
3
+ module PostForMe
4
+ module Models
5
+ class PlatformPost < PostForMe::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(PostForMe::PlatformPost, PostForMe::Internal::AnyHash)
9
+ end
10
+
11
+ # Caption or text content of the post
12
+ sig { returns(String) }
13
+ attr_accessor :caption
14
+
15
+ # Array of media items attached to the post
16
+ sig { returns(T::Array[T::Array[T.anything]]) }
17
+ attr_accessor :media
18
+
19
+ # Social media platform name
20
+ sig { returns(String) }
21
+ attr_accessor :platform
22
+
23
+ # Platform-specific account ID
24
+ sig { returns(String) }
25
+ attr_accessor :platform_account_id
26
+
27
+ # Platform-specific post ID
28
+ sig { returns(String) }
29
+ attr_accessor :platform_post_id
30
+
31
+ # URL to the post on the platform
32
+ sig { returns(String) }
33
+ attr_accessor :platform_url
34
+
35
+ # ID of the social account
36
+ sig { returns(String) }
37
+ attr_accessor :social_account_id
38
+
39
+ # External account ID from the platform
40
+ sig { returns(T.nilable(String)) }
41
+ attr_accessor :external_account_id
42
+
43
+ # External post ID from the platform
44
+ sig { returns(T.nilable(String)) }
45
+ attr_accessor :external_post_id
46
+
47
+ # Post metrics and analytics data
48
+ sig { returns(T.nilable(PostForMe::PlatformPost::Metrics::Variants)) }
49
+ attr_reader :metrics
50
+
51
+ sig do
52
+ params(
53
+ metrics:
54
+ T.any(
55
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::OrHash,
56
+ PostForMe::PlatformPost::Metrics::TikTokPostMetricsDto::OrHash,
57
+ PostForMe::PlatformPost::Metrics::InstagramPostMetricsDto::OrHash,
58
+ PostForMe::PlatformPost::Metrics::YouTubePostMetricsDto::OrHash
59
+ )
60
+ ).void
61
+ end
62
+ attr_writer :metrics
63
+
64
+ # Date the post was published
65
+ sig { returns(T.nilable(Time)) }
66
+ attr_reader :posted_at
67
+
68
+ sig { params(posted_at: Time).void }
69
+ attr_writer :posted_at
70
+
71
+ # ID of the social post
72
+ sig { returns(T.nilable(String)) }
73
+ attr_accessor :social_post_id
74
+
75
+ # ID of the social post result
76
+ sig { returns(T.nilable(String)) }
77
+ attr_accessor :social_post_result_id
78
+
79
+ sig do
80
+ params(
81
+ caption: String,
82
+ media: T::Array[T::Array[T.anything]],
83
+ platform: String,
84
+ platform_account_id: String,
85
+ platform_post_id: String,
86
+ platform_url: String,
87
+ social_account_id: String,
88
+ external_account_id: T.nilable(String),
89
+ external_post_id: T.nilable(String),
90
+ metrics:
91
+ T.any(
92
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::OrHash,
93
+ PostForMe::PlatformPost::Metrics::TikTokPostMetricsDto::OrHash,
94
+ PostForMe::PlatformPost::Metrics::InstagramPostMetricsDto::OrHash,
95
+ PostForMe::PlatformPost::Metrics::YouTubePostMetricsDto::OrHash
96
+ ),
97
+ posted_at: Time,
98
+ social_post_id: T.nilable(String),
99
+ social_post_result_id: T.nilable(String)
100
+ ).returns(T.attached_class)
101
+ end
102
+ def self.new(
103
+ # Caption or text content of the post
104
+ caption:,
105
+ # Array of media items attached to the post
106
+ media:,
107
+ # Social media platform name
108
+ platform:,
109
+ # Platform-specific account ID
110
+ platform_account_id:,
111
+ # Platform-specific post ID
112
+ platform_post_id:,
113
+ # URL to the post on the platform
114
+ platform_url:,
115
+ # ID of the social account
116
+ social_account_id:,
117
+ # External account ID from the platform
118
+ external_account_id: nil,
119
+ # External post ID from the platform
120
+ external_post_id: nil,
121
+ # Post metrics and analytics data
122
+ metrics: nil,
123
+ # Date the post was published
124
+ posted_at: nil,
125
+ # ID of the social post
126
+ social_post_id: nil,
127
+ # ID of the social post result
128
+ social_post_result_id: nil
129
+ )
130
+ end
131
+
132
+ sig do
133
+ override.returns(
134
+ {
135
+ caption: String,
136
+ media: T::Array[T::Array[T.anything]],
137
+ platform: String,
138
+ platform_account_id: String,
139
+ platform_post_id: String,
140
+ platform_url: String,
141
+ social_account_id: String,
142
+ external_account_id: T.nilable(String),
143
+ external_post_id: T.nilable(String),
144
+ metrics: PostForMe::PlatformPost::Metrics::Variants,
145
+ posted_at: Time,
146
+ social_post_id: T.nilable(String),
147
+ social_post_result_id: T.nilable(String)
148
+ }
149
+ )
150
+ end
151
+ def to_hash
152
+ end
153
+
154
+ # Post metrics and analytics data
155
+ module Metrics
156
+ extend PostForMe::Internal::Type::Union
157
+
158
+ Variants =
159
+ T.type_alias do
160
+ T.any(
161
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto,
162
+ PostForMe::PlatformPost::Metrics::TikTokPostMetricsDto,
163
+ PostForMe::PlatformPost::Metrics::InstagramPostMetricsDto,
164
+ PostForMe::PlatformPost::Metrics::YouTubePostMetricsDto
165
+ )
166
+ end
167
+
168
+ class TikTokBusinessMetricsDto < PostForMe::Internal::Type::BaseModel
169
+ OrHash =
170
+ T.type_alias do
171
+ T.any(
172
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto,
173
+ PostForMe::Internal::AnyHash
174
+ )
175
+ end
176
+
177
+ # Number of address clicks
178
+ sig { returns(Float) }
179
+ attr_accessor :address_clicks
180
+
181
+ # Number of app download clicks
182
+ sig { returns(Float) }
183
+ attr_accessor :app_download_clicks
184
+
185
+ # Audience cities breakdown
186
+ sig do
187
+ returns(
188
+ T::Array[
189
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCity
190
+ ]
191
+ )
192
+ end
193
+ attr_accessor :audience_cities
194
+
195
+ # Audience countries breakdown
196
+ sig do
197
+ returns(
198
+ T::Array[
199
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCountry
200
+ ]
201
+ )
202
+ end
203
+ attr_accessor :audience_countries
204
+
205
+ # Audience genders breakdown
206
+ sig do
207
+ returns(
208
+ T::Array[
209
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceGender
210
+ ]
211
+ )
212
+ end
213
+ attr_accessor :audience_genders
214
+
215
+ # Audience types breakdown
216
+ sig do
217
+ returns(
218
+ T::Array[
219
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceType
220
+ ]
221
+ )
222
+ end
223
+ attr_accessor :audience_types
224
+
225
+ # Average time watched in seconds
226
+ sig { returns(Float) }
227
+ attr_accessor :average_time_watched
228
+
229
+ # Number of comments on the post
230
+ sig { returns(Float) }
231
+ attr_accessor :comments
232
+
233
+ # Number of email clicks
234
+ sig { returns(Float) }
235
+ attr_accessor :email_clicks
236
+
237
+ # Engagement likes data by percentage and time
238
+ sig do
239
+ returns(
240
+ T::Array[
241
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::EngagementLike
242
+ ]
243
+ )
244
+ end
245
+ attr_accessor :engagement_likes
246
+
247
+ # Number of favorites on the post
248
+ sig { returns(Float) }
249
+ attr_accessor :favorites
250
+
251
+ # Rate of full video watches as a percentage
252
+ sig { returns(Float) }
253
+ attr_accessor :full_video_watched_rate
254
+
255
+ # Impression sources breakdown
256
+ sig do
257
+ returns(
258
+ T::Array[
259
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::ImpressionSource
260
+ ]
261
+ )
262
+ end
263
+ attr_accessor :impression_sources
264
+
265
+ # Number of lead submissions
266
+ sig { returns(Float) }
267
+ attr_accessor :lead_submissions
268
+
269
+ # Number of likes on the post
270
+ sig { returns(Float) }
271
+ attr_accessor :likes
272
+
273
+ # Number of new followers gained from the post
274
+ sig { returns(Float) }
275
+ attr_accessor :new_followers
276
+
277
+ # Number of phone number clicks
278
+ sig { returns(Float) }
279
+ attr_accessor :phone_number_clicks
280
+
281
+ # Number of profile views generated
282
+ sig { returns(Float) }
283
+ attr_accessor :profile_views
284
+
285
+ # Total reach of the post
286
+ sig { returns(Float) }
287
+ attr_accessor :reach
288
+
289
+ # Number of shares on the post
290
+ sig { returns(Float) }
291
+ attr_accessor :shares
292
+
293
+ # Total time watched in seconds
294
+ sig { returns(Float) }
295
+ attr_accessor :total_time_watched
296
+
297
+ # Video view retention data by percentage and time
298
+ sig do
299
+ returns(
300
+ T::Array[
301
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::VideoViewRetention
302
+ ]
303
+ )
304
+ end
305
+ attr_accessor :video_view_retention
306
+
307
+ # Total number of video views
308
+ sig { returns(Float) }
309
+ attr_accessor :video_views
310
+
311
+ # Number of website clicks
312
+ sig { returns(Float) }
313
+ attr_accessor :website_clicks
314
+
315
+ sig do
316
+ params(
317
+ address_clicks: Float,
318
+ app_download_clicks: Float,
319
+ audience_cities:
320
+ T::Array[
321
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCity::OrHash
322
+ ],
323
+ audience_countries:
324
+ T::Array[
325
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCountry::OrHash
326
+ ],
327
+ audience_genders:
328
+ T::Array[
329
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceGender::OrHash
330
+ ],
331
+ audience_types:
332
+ T::Array[
333
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceType::OrHash
334
+ ],
335
+ average_time_watched: Float,
336
+ comments: Float,
337
+ email_clicks: Float,
338
+ engagement_likes:
339
+ T::Array[
340
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::EngagementLike::OrHash
341
+ ],
342
+ favorites: Float,
343
+ full_video_watched_rate: Float,
344
+ impression_sources:
345
+ T::Array[
346
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::ImpressionSource::OrHash
347
+ ],
348
+ lead_submissions: Float,
349
+ likes: Float,
350
+ new_followers: Float,
351
+ phone_number_clicks: Float,
352
+ profile_views: Float,
353
+ reach: Float,
354
+ shares: Float,
355
+ total_time_watched: Float,
356
+ video_view_retention:
357
+ T::Array[
358
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::VideoViewRetention::OrHash
359
+ ],
360
+ video_views: Float,
361
+ website_clicks: Float
362
+ ).returns(T.attached_class)
363
+ end
364
+ def self.new(
365
+ # Number of address clicks
366
+ address_clicks:,
367
+ # Number of app download clicks
368
+ app_download_clicks:,
369
+ # Audience cities breakdown
370
+ audience_cities:,
371
+ # Audience countries breakdown
372
+ audience_countries:,
373
+ # Audience genders breakdown
374
+ audience_genders:,
375
+ # Audience types breakdown
376
+ audience_types:,
377
+ # Average time watched in seconds
378
+ average_time_watched:,
379
+ # Number of comments on the post
380
+ comments:,
381
+ # Number of email clicks
382
+ email_clicks:,
383
+ # Engagement likes data by percentage and time
384
+ engagement_likes:,
385
+ # Number of favorites on the post
386
+ favorites:,
387
+ # Rate of full video watches as a percentage
388
+ full_video_watched_rate:,
389
+ # Impression sources breakdown
390
+ impression_sources:,
391
+ # Number of lead submissions
392
+ lead_submissions:,
393
+ # Number of likes on the post
394
+ likes:,
395
+ # Number of new followers gained from the post
396
+ new_followers:,
397
+ # Number of phone number clicks
398
+ phone_number_clicks:,
399
+ # Number of profile views generated
400
+ profile_views:,
401
+ # Total reach of the post
402
+ reach:,
403
+ # Number of shares on the post
404
+ shares:,
405
+ # Total time watched in seconds
406
+ total_time_watched:,
407
+ # Video view retention data by percentage and time
408
+ video_view_retention:,
409
+ # Total number of video views
410
+ video_views:,
411
+ # Number of website clicks
412
+ website_clicks:
413
+ )
414
+ end
415
+
416
+ sig do
417
+ override.returns(
418
+ {
419
+ address_clicks: Float,
420
+ app_download_clicks: Float,
421
+ audience_cities:
422
+ T::Array[
423
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCity
424
+ ],
425
+ audience_countries:
426
+ T::Array[
427
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCountry
428
+ ],
429
+ audience_genders:
430
+ T::Array[
431
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceGender
432
+ ],
433
+ audience_types:
434
+ T::Array[
435
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceType
436
+ ],
437
+ average_time_watched: Float,
438
+ comments: Float,
439
+ email_clicks: Float,
440
+ engagement_likes:
441
+ T::Array[
442
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::EngagementLike
443
+ ],
444
+ favorites: Float,
445
+ full_video_watched_rate: Float,
446
+ impression_sources:
447
+ T::Array[
448
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::ImpressionSource
449
+ ],
450
+ lead_submissions: Float,
451
+ likes: Float,
452
+ new_followers: Float,
453
+ phone_number_clicks: Float,
454
+ profile_views: Float,
455
+ reach: Float,
456
+ shares: Float,
457
+ total_time_watched: Float,
458
+ video_view_retention:
459
+ T::Array[
460
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::VideoViewRetention
461
+ ],
462
+ video_views: Float,
463
+ website_clicks: Float
464
+ }
465
+ )
466
+ end
467
+ def to_hash
468
+ end
469
+
470
+ class AudienceCity < PostForMe::Internal::Type::BaseModel
471
+ OrHash =
472
+ T.type_alias do
473
+ T.any(
474
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCity,
475
+ PostForMe::Internal::AnyHash
476
+ )
477
+ end
478
+
479
+ # City name
480
+ sig { returns(String) }
481
+ attr_accessor :city_name
482
+
483
+ # Percentage of audience from this city
484
+ sig { returns(Float) }
485
+ attr_accessor :percentage
486
+
487
+ sig do
488
+ params(city_name: String, percentage: Float).returns(
489
+ T.attached_class
490
+ )
491
+ end
492
+ def self.new(
493
+ # City name
494
+ city_name:,
495
+ # Percentage of audience from this city
496
+ percentage:
497
+ )
498
+ end
499
+
500
+ sig { override.returns({ city_name: String, percentage: Float }) }
501
+ def to_hash
502
+ end
503
+ end
504
+
505
+ class AudienceCountry < PostForMe::Internal::Type::BaseModel
506
+ OrHash =
507
+ T.type_alias do
508
+ T.any(
509
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceCountry,
510
+ PostForMe::Internal::AnyHash
511
+ )
512
+ end
513
+
514
+ # Country name
515
+ sig { returns(String) }
516
+ attr_accessor :country
517
+
518
+ # Percentage of audience from this country
519
+ sig { returns(Float) }
520
+ attr_accessor :percentage
521
+
522
+ sig do
523
+ params(country: String, percentage: Float).returns(
524
+ T.attached_class
525
+ )
526
+ end
527
+ def self.new(
528
+ # Country name
529
+ country:,
530
+ # Percentage of audience from this country
531
+ percentage:
532
+ )
533
+ end
534
+
535
+ sig { override.returns({ country: String, percentage: Float }) }
536
+ def to_hash
537
+ end
538
+ end
539
+
540
+ class AudienceGender < PostForMe::Internal::Type::BaseModel
541
+ OrHash =
542
+ T.type_alias do
543
+ T.any(
544
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceGender,
545
+ PostForMe::Internal::AnyHash
546
+ )
547
+ end
548
+
549
+ # Gender category
550
+ sig { returns(String) }
551
+ attr_accessor :gender
552
+
553
+ # Percentage of audience of this gender
554
+ sig { returns(Float) }
555
+ attr_accessor :percentage
556
+
557
+ sig do
558
+ params(gender: String, percentage: Float).returns(
559
+ T.attached_class
560
+ )
561
+ end
562
+ def self.new(
563
+ # Gender category
564
+ gender:,
565
+ # Percentage of audience of this gender
566
+ percentage:
567
+ )
568
+ end
569
+
570
+ sig { override.returns({ gender: String, percentage: Float }) }
571
+ def to_hash
572
+ end
573
+ end
574
+
575
+ class AudienceType < PostForMe::Internal::Type::BaseModel
576
+ OrHash =
577
+ T.type_alias do
578
+ T.any(
579
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::AudienceType,
580
+ PostForMe::Internal::AnyHash
581
+ )
582
+ end
583
+
584
+ # Percentage of audience of this type
585
+ sig { returns(Float) }
586
+ attr_accessor :percentage
587
+
588
+ # Type of audience
589
+ sig { returns(String) }
590
+ attr_accessor :type
591
+
592
+ sig do
593
+ params(percentage: Float, type: String).returns(T.attached_class)
594
+ end
595
+ def self.new(
596
+ # Percentage of audience of this type
597
+ percentage:,
598
+ # Type of audience
599
+ type:
600
+ )
601
+ end
602
+
603
+ sig { override.returns({ percentage: Float, type: String }) }
604
+ def to_hash
605
+ end
606
+ end
607
+
608
+ class EngagementLike < PostForMe::Internal::Type::BaseModel
609
+ OrHash =
610
+ T.type_alias do
611
+ T.any(
612
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::EngagementLike,
613
+ PostForMe::Internal::AnyHash
614
+ )
615
+ end
616
+
617
+ # Percentage value for the metric
618
+ sig { returns(Float) }
619
+ attr_accessor :percentage
620
+
621
+ # Time in seconds for the metric
622
+ sig { returns(String) }
623
+ attr_accessor :second
624
+
625
+ sig do
626
+ params(percentage: Float, second: String).returns(
627
+ T.attached_class
628
+ )
629
+ end
630
+ def self.new(
631
+ # Percentage value for the metric
632
+ percentage:,
633
+ # Time in seconds for the metric
634
+ second:
635
+ )
636
+ end
637
+
638
+ sig { override.returns({ percentage: Float, second: String }) }
639
+ def to_hash
640
+ end
641
+ end
642
+
643
+ class ImpressionSource < PostForMe::Internal::Type::BaseModel
644
+ OrHash =
645
+ T.type_alias do
646
+ T.any(
647
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::ImpressionSource,
648
+ PostForMe::Internal::AnyHash
649
+ )
650
+ end
651
+
652
+ # Name of the impression source
653
+ sig { returns(String) }
654
+ attr_accessor :impression_source
655
+
656
+ # Percentage of impressions from this source
657
+ sig { returns(Float) }
658
+ attr_accessor :percentage
659
+
660
+ sig do
661
+ params(impression_source: String, percentage: Float).returns(
662
+ T.attached_class
663
+ )
664
+ end
665
+ def self.new(
666
+ # Name of the impression source
667
+ impression_source:,
668
+ # Percentage of impressions from this source
669
+ percentage:
670
+ )
671
+ end
672
+
673
+ sig do
674
+ override.returns({ impression_source: String, percentage: Float })
675
+ end
676
+ def to_hash
677
+ end
678
+ end
679
+
680
+ class VideoViewRetention < PostForMe::Internal::Type::BaseModel
681
+ OrHash =
682
+ T.type_alias do
683
+ T.any(
684
+ PostForMe::PlatformPost::Metrics::TikTokBusinessMetricsDto::VideoViewRetention,
685
+ PostForMe::Internal::AnyHash
686
+ )
687
+ end
688
+
689
+ # Percentage value for the metric
690
+ sig { returns(Float) }
691
+ attr_accessor :percentage
692
+
693
+ # Time in seconds for the metric
694
+ sig { returns(String) }
695
+ attr_accessor :second
696
+
697
+ sig do
698
+ params(percentage: Float, second: String).returns(
699
+ T.attached_class
700
+ )
701
+ end
702
+ def self.new(
703
+ # Percentage value for the metric
704
+ percentage:,
705
+ # Time in seconds for the metric
706
+ second:
707
+ )
708
+ end
709
+
710
+ sig { override.returns({ percentage: Float, second: String }) }
711
+ def to_hash
712
+ end
713
+ end
714
+ end
715
+
716
+ class TikTokPostMetricsDto < PostForMe::Internal::Type::BaseModel
717
+ OrHash =
718
+ T.type_alias do
719
+ T.any(
720
+ PostForMe::PlatformPost::Metrics::TikTokPostMetricsDto,
721
+ PostForMe::Internal::AnyHash
722
+ )
723
+ end
724
+
725
+ # Number of comments on the video
726
+ sig { returns(Float) }
727
+ attr_accessor :comment_count
728
+
729
+ # Number of likes on the video
730
+ sig { returns(Float) }
731
+ attr_accessor :like_count
732
+
733
+ # Number of shares of the video
734
+ sig { returns(Float) }
735
+ attr_accessor :share_count
736
+
737
+ # Number of views on the video
738
+ sig { returns(Float) }
739
+ attr_accessor :view_count
740
+
741
+ sig do
742
+ params(
743
+ comment_count: Float,
744
+ like_count: Float,
745
+ share_count: Float,
746
+ view_count: Float
747
+ ).returns(T.attached_class)
748
+ end
749
+ def self.new(
750
+ # Number of comments on the video
751
+ comment_count:,
752
+ # Number of likes on the video
753
+ like_count:,
754
+ # Number of shares of the video
755
+ share_count:,
756
+ # Number of views on the video
757
+ view_count:
758
+ )
759
+ end
760
+
761
+ sig do
762
+ override.returns(
763
+ {
764
+ comment_count: Float,
765
+ like_count: Float,
766
+ share_count: Float,
767
+ view_count: Float
768
+ }
769
+ )
770
+ end
771
+ def to_hash
772
+ end
773
+ end
774
+
775
+ class InstagramPostMetricsDto < PostForMe::Internal::Type::BaseModel
776
+ OrHash =
777
+ T.type_alias do
778
+ T.any(
779
+ PostForMe::PlatformPost::Metrics::InstagramPostMetricsDto,
780
+ PostForMe::Internal::AnyHash
781
+ )
782
+ end
783
+
784
+ # Number of comments on the post
785
+ sig { returns(T.nilable(Float)) }
786
+ attr_reader :comments
787
+
788
+ sig { params(comments: Float).void }
789
+ attr_writer :comments
790
+
791
+ # Number of new follows from this post
792
+ sig { returns(T.nilable(Float)) }
793
+ attr_reader :follows
794
+
795
+ sig { params(follows: Float).void }
796
+ attr_writer :follows
797
+
798
+ # Average watch time for Reels (in milliseconds)
799
+ sig { returns(T.nilable(Float)) }
800
+ attr_reader :ig_reels_avg_watch_time
801
+
802
+ sig { params(ig_reels_avg_watch_time: Float).void }
803
+ attr_writer :ig_reels_avg_watch_time
804
+
805
+ # Total watch time for Reels (in milliseconds)
806
+ sig { returns(T.nilable(Float)) }
807
+ attr_reader :ig_reels_video_view_total_time
808
+
809
+ sig { params(ig_reels_video_view_total_time: Float).void }
810
+ attr_writer :ig_reels_video_view_total_time
811
+
812
+ # Number of likes on the post
813
+ sig { returns(T.nilable(Float)) }
814
+ attr_reader :likes
815
+
816
+ sig { params(likes: Float).void }
817
+ attr_writer :likes
818
+
819
+ # Navigation actions taken on the media
820
+ sig { returns(T.nilable(Float)) }
821
+ attr_reader :navigation
822
+
823
+ sig { params(navigation: Float).void }
824
+ attr_writer :navigation
825
+
826
+ # Profile activity generated from this post
827
+ sig { returns(T.nilable(Float)) }
828
+ attr_reader :profile_activity
829
+
830
+ sig { params(profile_activity: Float).void }
831
+ attr_writer :profile_activity
832
+
833
+ # Number of profile visits from this post
834
+ sig { returns(T.nilable(Float)) }
835
+ attr_reader :profile_visits
836
+
837
+ sig { params(profile_visits: Float).void }
838
+ attr_writer :profile_visits
839
+
840
+ # Total number of unique accounts that have seen the media
841
+ sig { returns(T.nilable(Float)) }
842
+ attr_reader :reach
843
+
844
+ sig { params(reach: Float).void }
845
+ attr_writer :reach
846
+
847
+ # Number of replies to the story (story media only)
848
+ sig { returns(T.nilable(Float)) }
849
+ attr_reader :replies
850
+
851
+ sig { params(replies: Float).void }
852
+ attr_writer :replies
853
+
854
+ # Total number of unique accounts that have saved the media
855
+ sig { returns(T.nilable(Float)) }
856
+ attr_reader :saved
857
+
858
+ sig { params(saved: Float).void }
859
+ attr_writer :saved
860
+
861
+ # Total number of shares of the media
862
+ sig { returns(T.nilable(Float)) }
863
+ attr_reader :shares
864
+
865
+ sig { params(shares: Float).void }
866
+ attr_writer :shares
867
+
868
+ # Total interactions on the post
869
+ sig { returns(T.nilable(Float)) }
870
+ attr_reader :total_interactions
871
+
872
+ sig { params(total_interactions: Float).void }
873
+ attr_writer :total_interactions
874
+
875
+ # Number of views on the post
876
+ sig { returns(T.nilable(Float)) }
877
+ attr_reader :views
878
+
879
+ sig { params(views: Float).void }
880
+ attr_writer :views
881
+
882
+ sig do
883
+ params(
884
+ comments: Float,
885
+ follows: Float,
886
+ ig_reels_avg_watch_time: Float,
887
+ ig_reels_video_view_total_time: Float,
888
+ likes: Float,
889
+ navigation: Float,
890
+ profile_activity: Float,
891
+ profile_visits: Float,
892
+ reach: Float,
893
+ replies: Float,
894
+ saved: Float,
895
+ shares: Float,
896
+ total_interactions: Float,
897
+ views: Float
898
+ ).returns(T.attached_class)
899
+ end
900
+ def self.new(
901
+ # Number of comments on the post
902
+ comments: nil,
903
+ # Number of new follows from this post
904
+ follows: nil,
905
+ # Average watch time for Reels (in milliseconds)
906
+ ig_reels_avg_watch_time: nil,
907
+ # Total watch time for Reels (in milliseconds)
908
+ ig_reels_video_view_total_time: nil,
909
+ # Number of likes on the post
910
+ likes: nil,
911
+ # Navigation actions taken on the media
912
+ navigation: nil,
913
+ # Profile activity generated from this post
914
+ profile_activity: nil,
915
+ # Number of profile visits from this post
916
+ profile_visits: nil,
917
+ # Total number of unique accounts that have seen the media
918
+ reach: nil,
919
+ # Number of replies to the story (story media only)
920
+ replies: nil,
921
+ # Total number of unique accounts that have saved the media
922
+ saved: nil,
923
+ # Total number of shares of the media
924
+ shares: nil,
925
+ # Total interactions on the post
926
+ total_interactions: nil,
927
+ # Number of views on the post
928
+ views: nil
929
+ )
930
+ end
931
+
932
+ sig do
933
+ override.returns(
934
+ {
935
+ comments: Float,
936
+ follows: Float,
937
+ ig_reels_avg_watch_time: Float,
938
+ ig_reels_video_view_total_time: Float,
939
+ likes: Float,
940
+ navigation: Float,
941
+ profile_activity: Float,
942
+ profile_visits: Float,
943
+ reach: Float,
944
+ replies: Float,
945
+ saved: Float,
946
+ shares: Float,
947
+ total_interactions: Float,
948
+ views: Float
949
+ }
950
+ )
951
+ end
952
+ def to_hash
953
+ end
954
+ end
955
+
956
+ class YouTubePostMetricsDto < PostForMe::Internal::Type::BaseModel
957
+ OrHash =
958
+ T.type_alias do
959
+ T.any(
960
+ PostForMe::PlatformPost::Metrics::YouTubePostMetricsDto,
961
+ PostForMe::Internal::AnyHash
962
+ )
963
+ end
964
+
965
+ # Number of comments on the video
966
+ sig { returns(Float) }
967
+ attr_accessor :comments
968
+
969
+ # Number of dislikes on the video
970
+ sig { returns(Float) }
971
+ attr_accessor :dislikes
972
+
973
+ # Number of likes on the video
974
+ sig { returns(Float) }
975
+ attr_accessor :likes
976
+
977
+ # Number of views on the video
978
+ sig { returns(Float) }
979
+ attr_accessor :views
980
+
981
+ # Number of clickable annotation impressions
982
+ sig { returns(T.nilable(Float)) }
983
+ attr_reader :annotation_clickable_impressions
984
+
985
+ sig { params(annotation_clickable_impressions: Float).void }
986
+ attr_writer :annotation_clickable_impressions
987
+
988
+ # Number of annotation clicks
989
+ sig { returns(T.nilable(Float)) }
990
+ attr_reader :annotation_clicks
991
+
992
+ sig { params(annotation_clicks: Float).void }
993
+ attr_writer :annotation_clicks
994
+
995
+ # Annotation click-through rate
996
+ sig { returns(T.nilable(Float)) }
997
+ attr_reader :annotation_click_through_rate
998
+
999
+ sig { params(annotation_click_through_rate: Float).void }
1000
+ attr_writer :annotation_click_through_rate
1001
+
1002
+ # Number of closable annotation impressions
1003
+ sig { returns(T.nilable(Float)) }
1004
+ attr_reader :annotation_closable_impressions
1005
+
1006
+ sig { params(annotation_closable_impressions: Float).void }
1007
+ attr_writer :annotation_closable_impressions
1008
+
1009
+ # Annotation close rate
1010
+ sig { returns(T.nilable(Float)) }
1011
+ attr_reader :annotation_close_rate
1012
+
1013
+ sig { params(annotation_close_rate: Float).void }
1014
+ attr_writer :annotation_close_rate
1015
+
1016
+ # Number of annotation closes
1017
+ sig { returns(T.nilable(Float)) }
1018
+ attr_reader :annotation_closes
1019
+
1020
+ sig { params(annotation_closes: Float).void }
1021
+ attr_writer :annotation_closes
1022
+
1023
+ # Number of annotation impressions
1024
+ sig { returns(T.nilable(Float)) }
1025
+ attr_reader :annotation_impressions
1026
+
1027
+ sig { params(annotation_impressions: Float).void }
1028
+ attr_writer :annotation_impressions
1029
+
1030
+ # Average view duration in seconds
1031
+ sig { returns(T.nilable(Float)) }
1032
+ attr_reader :average_view_duration
1033
+
1034
+ sig { params(average_view_duration: Float).void }
1035
+ attr_writer :average_view_duration
1036
+
1037
+ # Average percentage of the video watched
1038
+ sig { returns(T.nilable(Float)) }
1039
+ attr_reader :average_view_percentage
1040
+
1041
+ sig { params(average_view_percentage: Float).void }
1042
+ attr_writer :average_view_percentage
1043
+
1044
+ # Card click-through rate
1045
+ sig { returns(T.nilable(Float)) }
1046
+ attr_reader :card_click_rate
1047
+
1048
+ sig { params(card_click_rate: Float).void }
1049
+ attr_writer :card_click_rate
1050
+
1051
+ # Number of card clicks
1052
+ sig { returns(T.nilable(Float)) }
1053
+ attr_reader :card_clicks
1054
+
1055
+ sig { params(card_clicks: Float).void }
1056
+ attr_writer :card_clicks
1057
+
1058
+ # Number of card impressions
1059
+ sig { returns(T.nilable(Float)) }
1060
+ attr_reader :card_impressions
1061
+
1062
+ sig { params(card_impressions: Float).void }
1063
+ attr_writer :card_impressions
1064
+
1065
+ # Card teaser click-through rate
1066
+ sig { returns(T.nilable(Float)) }
1067
+ attr_reader :card_teaser_click_rate
1068
+
1069
+ sig { params(card_teaser_click_rate: Float).void }
1070
+ attr_writer :card_teaser_click_rate
1071
+
1072
+ # Number of card teaser clicks
1073
+ sig { returns(T.nilable(Float)) }
1074
+ attr_reader :card_teaser_clicks
1075
+
1076
+ sig { params(card_teaser_clicks: Float).void }
1077
+ attr_writer :card_teaser_clicks
1078
+
1079
+ # Number of card teaser impressions
1080
+ sig { returns(T.nilable(Float)) }
1081
+ attr_reader :card_teaser_impressions
1082
+
1083
+ sig { params(card_teaser_impressions: Float).void }
1084
+ attr_writer :card_teaser_impressions
1085
+
1086
+ # Number of engaged views
1087
+ sig { returns(T.nilable(Float)) }
1088
+ attr_reader :engaged_views
1089
+
1090
+ sig { params(engaged_views: Float).void }
1091
+ attr_writer :engaged_views
1092
+
1093
+ # Estimated minutes watched
1094
+ sig { returns(T.nilable(Float)) }
1095
+ attr_reader :estimated_minutes_watched
1096
+
1097
+ sig { params(estimated_minutes_watched: Float).void }
1098
+ attr_writer :estimated_minutes_watched
1099
+
1100
+ # Estimated minutes watched by YouTube Premium (Red) members
1101
+ sig { returns(T.nilable(Float)) }
1102
+ attr_reader :estimated_red_minutes_watched
1103
+
1104
+ sig { params(estimated_red_minutes_watched: Float).void }
1105
+ attr_writer :estimated_red_minutes_watched
1106
+
1107
+ # Number of views from YouTube Premium (Red) members
1108
+ sig { returns(T.nilable(Float)) }
1109
+ attr_reader :red_views
1110
+
1111
+ sig { params(red_views: Float).void }
1112
+ attr_writer :red_views
1113
+
1114
+ # Number of shares
1115
+ sig { returns(T.nilable(Float)) }
1116
+ attr_reader :shares
1117
+
1118
+ sig { params(shares: Float).void }
1119
+ attr_writer :shares
1120
+
1121
+ # Subscribers gained
1122
+ sig { returns(T.nilable(Float)) }
1123
+ attr_reader :subscribers_gained
1124
+
1125
+ sig { params(subscribers_gained: Float).void }
1126
+ attr_writer :subscribers_gained
1127
+
1128
+ # Subscribers lost
1129
+ sig { returns(T.nilable(Float)) }
1130
+ attr_reader :subscribers_lost
1131
+
1132
+ sig { params(subscribers_lost: Float).void }
1133
+ attr_writer :subscribers_lost
1134
+
1135
+ # Number of times the video was added to playlists
1136
+ sig { returns(T.nilable(Float)) }
1137
+ attr_reader :videos_added_to_playlists
1138
+
1139
+ sig { params(videos_added_to_playlists: Float).void }
1140
+ attr_writer :videos_added_to_playlists
1141
+
1142
+ # Number of times the video was removed from playlists
1143
+ sig { returns(T.nilable(Float)) }
1144
+ attr_reader :videos_removed_from_playlists
1145
+
1146
+ sig { params(videos_removed_from_playlists: Float).void }
1147
+ attr_writer :videos_removed_from_playlists
1148
+
1149
+ sig do
1150
+ params(
1151
+ comments: Float,
1152
+ dislikes: Float,
1153
+ likes: Float,
1154
+ views: Float,
1155
+ annotation_clickable_impressions: Float,
1156
+ annotation_clicks: Float,
1157
+ annotation_click_through_rate: Float,
1158
+ annotation_closable_impressions: Float,
1159
+ annotation_close_rate: Float,
1160
+ annotation_closes: Float,
1161
+ annotation_impressions: Float,
1162
+ average_view_duration: Float,
1163
+ average_view_percentage: Float,
1164
+ card_click_rate: Float,
1165
+ card_clicks: Float,
1166
+ card_impressions: Float,
1167
+ card_teaser_click_rate: Float,
1168
+ card_teaser_clicks: Float,
1169
+ card_teaser_impressions: Float,
1170
+ engaged_views: Float,
1171
+ estimated_minutes_watched: Float,
1172
+ estimated_red_minutes_watched: Float,
1173
+ red_views: Float,
1174
+ shares: Float,
1175
+ subscribers_gained: Float,
1176
+ subscribers_lost: Float,
1177
+ videos_added_to_playlists: Float,
1178
+ videos_removed_from_playlists: Float
1179
+ ).returns(T.attached_class)
1180
+ end
1181
+ def self.new(
1182
+ # Number of comments on the video
1183
+ comments:,
1184
+ # Number of dislikes on the video
1185
+ dislikes:,
1186
+ # Number of likes on the video
1187
+ likes:,
1188
+ # Number of views on the video
1189
+ views:,
1190
+ # Number of clickable annotation impressions
1191
+ annotation_clickable_impressions: nil,
1192
+ # Number of annotation clicks
1193
+ annotation_clicks: nil,
1194
+ # Annotation click-through rate
1195
+ annotation_click_through_rate: nil,
1196
+ # Number of closable annotation impressions
1197
+ annotation_closable_impressions: nil,
1198
+ # Annotation close rate
1199
+ annotation_close_rate: nil,
1200
+ # Number of annotation closes
1201
+ annotation_closes: nil,
1202
+ # Number of annotation impressions
1203
+ annotation_impressions: nil,
1204
+ # Average view duration in seconds
1205
+ average_view_duration: nil,
1206
+ # Average percentage of the video watched
1207
+ average_view_percentage: nil,
1208
+ # Card click-through rate
1209
+ card_click_rate: nil,
1210
+ # Number of card clicks
1211
+ card_clicks: nil,
1212
+ # Number of card impressions
1213
+ card_impressions: nil,
1214
+ # Card teaser click-through rate
1215
+ card_teaser_click_rate: nil,
1216
+ # Number of card teaser clicks
1217
+ card_teaser_clicks: nil,
1218
+ # Number of card teaser impressions
1219
+ card_teaser_impressions: nil,
1220
+ # Number of engaged views
1221
+ engaged_views: nil,
1222
+ # Estimated minutes watched
1223
+ estimated_minutes_watched: nil,
1224
+ # Estimated minutes watched by YouTube Premium (Red) members
1225
+ estimated_red_minutes_watched: nil,
1226
+ # Number of views from YouTube Premium (Red) members
1227
+ red_views: nil,
1228
+ # Number of shares
1229
+ shares: nil,
1230
+ # Subscribers gained
1231
+ subscribers_gained: nil,
1232
+ # Subscribers lost
1233
+ subscribers_lost: nil,
1234
+ # Number of times the video was added to playlists
1235
+ videos_added_to_playlists: nil,
1236
+ # Number of times the video was removed from playlists
1237
+ videos_removed_from_playlists: nil
1238
+ )
1239
+ end
1240
+
1241
+ sig do
1242
+ override.returns(
1243
+ {
1244
+ comments: Float,
1245
+ dislikes: Float,
1246
+ likes: Float,
1247
+ views: Float,
1248
+ annotation_clickable_impressions: Float,
1249
+ annotation_clicks: Float,
1250
+ annotation_click_through_rate: Float,
1251
+ annotation_closable_impressions: Float,
1252
+ annotation_close_rate: Float,
1253
+ annotation_closes: Float,
1254
+ annotation_impressions: Float,
1255
+ average_view_duration: Float,
1256
+ average_view_percentage: Float,
1257
+ card_click_rate: Float,
1258
+ card_clicks: Float,
1259
+ card_impressions: Float,
1260
+ card_teaser_click_rate: Float,
1261
+ card_teaser_clicks: Float,
1262
+ card_teaser_impressions: Float,
1263
+ engaged_views: Float,
1264
+ estimated_minutes_watched: Float,
1265
+ estimated_red_minutes_watched: Float,
1266
+ red_views: Float,
1267
+ shares: Float,
1268
+ subscribers_gained: Float,
1269
+ subscribers_lost: Float,
1270
+ videos_added_to_playlists: Float,
1271
+ videos_removed_from_playlists: Float
1272
+ }
1273
+ )
1274
+ end
1275
+ def to_hash
1276
+ end
1277
+ end
1278
+
1279
+ sig do
1280
+ override.returns(T::Array[PostForMe::PlatformPost::Metrics::Variants])
1281
+ end
1282
+ def self.variants
1283
+ end
1284
+ end
1285
+ end
1286
+ end
1287
+ end