@revturbine/sdk 0.2.57 → 0.2.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1741,6 +1741,7 @@ declare const PlacementPayloadSchema: z.ZodObject<{
1741
1741
  session: "session";
1742
1742
  }>>;
1743
1743
  cooldown_after_dismiss_days: z.ZodDefault<z.ZodNumber>;
1744
+ remind_later_minutes: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1744
1745
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1745
1746
  custom: "custom";
1746
1747
  next_tier_up: "next_tier_up";
@@ -3716,6 +3717,7 @@ declare const PlacementSettingsCapStateSchema: z.ZodObject<{
3716
3717
  }, z.core.$strip>;
3717
3718
  }, z.core.$strip>>>;
3718
3719
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
3720
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
3719
3721
  testMode: z.ZodDefault<z.ZodEnum<{
3720
3722
  off: "off";
3721
3723
  test_users: "test_users";
@@ -3758,6 +3760,7 @@ declare const PlacementSettingsSchema: z.ZodObject<{
3758
3760
  }, z.core.$strip>;
3759
3761
  }, z.core.$strip>>>;
3760
3762
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
3763
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
3761
3764
  testMode: z.ZodDefault<z.ZodEnum<{
3762
3765
  off: "off";
3763
3766
  test_users: "test_users";
@@ -3773,7 +3776,6 @@ declare const PlacementSettingsSchema: z.ZodObject<{
3773
3776
  }>>>;
3774
3777
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
3775
3778
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
3776
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNumber>;
3777
3779
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
3778
3780
  priority_collision_strategy: z.ZodDefault<z.ZodEnum<{
3779
3781
  highest_priority: "highest_priority";
@@ -3943,6 +3945,7 @@ declare const RevTurbineConfigPlacementSettingsItemSchema: z.ZodObject<{
3943
3945
  }, z.core.$strip>;
3944
3946
  }, z.core.$strip>>>;
3945
3947
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
3948
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
3946
3949
  testMode: z.ZodDefault<z.ZodEnum<{
3947
3950
  off: "off";
3948
3951
  test_users: "test_users";
@@ -3958,7 +3961,6 @@ declare const RevTurbineConfigPlacementSettingsItemSchema: z.ZodObject<{
3958
3961
  }>>>;
3959
3962
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
3960
3963
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
3961
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
3962
3964
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
3963
3965
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
3964
3966
  }, z.core.$strip>;
@@ -4348,6 +4350,7 @@ declare const RevTurbineConfigStudioPayloadSchema: z.ZodObject<{
4348
4350
  cooldown_days: z.ZodOptional<z.ZodNumber>;
4349
4351
  }, z.core.$strip>>;
4350
4352
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
4353
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
4351
4354
  created_at: z.ZodOptional<z.ZodString>;
4352
4355
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
4353
4356
  custom: "custom";
@@ -4501,6 +4504,7 @@ declare const RevTurbineConfigPlacementItemSchema: z.ZodObject<{
4501
4504
  cooldown_days: z.ZodOptional<z.ZodNumber>;
4502
4505
  }, z.core.$strip>>;
4503
4506
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
4507
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
4504
4508
  created_at: z.ZodOptional<z.ZodString>;
4505
4509
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
4506
4510
  custom: "custom";
@@ -4532,6 +4536,7 @@ declare const RevTurbineConfigPlacementPayloadItemSchema: z.ZodObject<{
4532
4536
  }, z.core.$strip>>;
4533
4537
  cooldown_days: z.ZodOptional<z.ZodNumber>;
4534
4538
  }, z.core.$strip>>;
4539
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
4535
4540
  created_at: z.ZodString;
4536
4541
  updated_at: z.ZodOptional<z.ZodString>;
4537
4542
  source_mode: z.ZodEnum<{
@@ -4811,6 +4816,7 @@ declare const PlaybookBodySchema: z.ZodObject<{
4811
4816
  }, z.core.$strip>>;
4812
4817
  cooldown_days: z.ZodOptional<z.ZodNumber>;
4813
4818
  }, z.core.$strip>>;
4819
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
4814
4820
  created_at: z.ZodString;
4815
4821
  updated_at: z.ZodOptional<z.ZodString>;
4816
4822
  source_mode: z.ZodEnum<{
@@ -4950,6 +4956,7 @@ declare const PlaybookBodySchema: z.ZodObject<{
4950
4956
  cooldown_days: z.ZodOptional<z.ZodNumber>;
4951
4957
  }, z.core.$strip>>;
4952
4958
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
4959
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
4953
4960
  created_at: z.ZodOptional<z.ZodString>;
4954
4961
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
4955
4962
  custom: "custom";
@@ -5149,6 +5156,7 @@ declare const PlaybookBodySchema: z.ZodObject<{
5149
5156
  }, z.core.$strip>;
5150
5157
  }, z.core.$strip>>>;
5151
5158
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
5159
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
5152
5160
  testMode: z.ZodDefault<z.ZodEnum<{
5153
5161
  off: "off";
5154
5162
  test_users: "test_users";
@@ -5164,7 +5172,6 @@ declare const PlaybookBodySchema: z.ZodObject<{
5164
5172
  }>>>;
5165
5173
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
5166
5174
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
5167
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
5168
5175
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
5169
5176
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5170
5177
  }, z.core.$strip>>>;
@@ -5455,6 +5462,7 @@ declare const PlaybookObjectSchema: z.ZodObject<{
5455
5462
  }, z.core.$strip>>;
5456
5463
  cooldown_days: z.ZodOptional<z.ZodNumber>;
5457
5464
  }, z.core.$strip>>;
5465
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
5458
5466
  created_at: z.ZodString;
5459
5467
  updated_at: z.ZodOptional<z.ZodString>;
5460
5468
  source_mode: z.ZodEnum<{
@@ -5594,6 +5602,7 @@ declare const PlaybookObjectSchema: z.ZodObject<{
5594
5602
  cooldown_days: z.ZodOptional<z.ZodNumber>;
5595
5603
  }, z.core.$strip>>;
5596
5604
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
5605
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
5597
5606
  created_at: z.ZodOptional<z.ZodString>;
5598
5607
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
5599
5608
  custom: "custom";
@@ -5793,6 +5802,7 @@ declare const PlaybookObjectSchema: z.ZodObject<{
5793
5802
  }, z.core.$strip>;
5794
5803
  }, z.core.$strip>>>;
5795
5804
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
5805
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
5796
5806
  testMode: z.ZodDefault<z.ZodEnum<{
5797
5807
  off: "off";
5798
5808
  test_users: "test_users";
@@ -5808,7 +5818,6 @@ declare const PlaybookObjectSchema: z.ZodObject<{
5808
5818
  }>>>;
5809
5819
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
5810
5820
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
5811
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
5812
5821
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
5813
5822
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
5814
5823
  }, z.core.$strip>>>;
@@ -6086,6 +6095,7 @@ declare const PlaybookSchema: z.ZodPreprocess<z.ZodObject<{
6086
6095
  }, z.core.$strip>>;
6087
6096
  cooldown_days: z.ZodOptional<z.ZodNumber>;
6088
6097
  }, z.core.$strip>>;
6098
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6089
6099
  created_at: z.ZodString;
6090
6100
  updated_at: z.ZodOptional<z.ZodString>;
6091
6101
  source_mode: z.ZodEnum<{
@@ -6225,6 +6235,7 @@ declare const PlaybookSchema: z.ZodPreprocess<z.ZodObject<{
6225
6235
  cooldown_days: z.ZodOptional<z.ZodNumber>;
6226
6236
  }, z.core.$strip>>;
6227
6237
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
6238
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6228
6239
  created_at: z.ZodOptional<z.ZodString>;
6229
6240
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
6230
6241
  custom: "custom";
@@ -6424,6 +6435,7 @@ declare const PlaybookSchema: z.ZodPreprocess<z.ZodObject<{
6424
6435
  }, z.core.$strip>;
6425
6436
  }, z.core.$strip>>>;
6426
6437
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
6438
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
6427
6439
  testMode: z.ZodDefault<z.ZodEnum<{
6428
6440
  off: "off";
6429
6441
  test_users: "test_users";
@@ -6439,7 +6451,6 @@ declare const PlaybookSchema: z.ZodPreprocess<z.ZodObject<{
6439
6451
  }>>>;
6440
6452
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
6441
6453
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
6442
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
6443
6454
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
6444
6455
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
6445
6456
  }, z.core.$strip>>>;
@@ -6735,6 +6746,7 @@ declare const PlaybookStrictSchema: z.ZodPreprocess<z.ZodObject<{
6735
6746
  }, z.core.$strip>>;
6736
6747
  cooldown_days: z.ZodOptional<z.ZodNumber>;
6737
6748
  }, z.core.$strip>>;
6749
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6738
6750
  created_at: z.ZodString;
6739
6751
  updated_at: z.ZodOptional<z.ZodString>;
6740
6752
  source_mode: z.ZodEnum<{
@@ -6874,6 +6886,7 @@ declare const PlaybookStrictSchema: z.ZodPreprocess<z.ZodObject<{
6874
6886
  cooldown_days: z.ZodOptional<z.ZodNumber>;
6875
6887
  }, z.core.$strip>>;
6876
6888
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
6889
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6877
6890
  created_at: z.ZodOptional<z.ZodString>;
6878
6891
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
6879
6892
  custom: "custom";
@@ -7073,6 +7086,7 @@ declare const PlaybookStrictSchema: z.ZodPreprocess<z.ZodObject<{
7073
7086
  }, z.core.$strip>;
7074
7087
  }, z.core.$strip>>>;
7075
7088
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
7089
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
7076
7090
  testMode: z.ZodDefault<z.ZodEnum<{
7077
7091
  off: "off";
7078
7092
  test_users: "test_users";
@@ -7088,7 +7102,6 @@ declare const PlaybookStrictSchema: z.ZodPreprocess<z.ZodObject<{
7088
7102
  }>>>;
7089
7103
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
7090
7104
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
7091
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
7092
7105
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
7093
7106
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
7094
7107
  }, z.core.$strip>>>;
@@ -7363,6 +7376,7 @@ declare const RevTurbineConfigSchema: z.ZodPreprocess<z.ZodObject<{
7363
7376
  }, z.core.$strip>>;
7364
7377
  cooldown_days: z.ZodOptional<z.ZodNumber>;
7365
7378
  }, z.core.$strip>>;
7379
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
7366
7380
  created_at: z.ZodString;
7367
7381
  updated_at: z.ZodOptional<z.ZodString>;
7368
7382
  source_mode: z.ZodEnum<{
@@ -7502,6 +7516,7 @@ declare const RevTurbineConfigSchema: z.ZodPreprocess<z.ZodObject<{
7502
7516
  cooldown_days: z.ZodOptional<z.ZodNumber>;
7503
7517
  }, z.core.$strip>>;
7504
7518
  surface_slot_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
7519
+ remind_later_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
7505
7520
  created_at: z.ZodOptional<z.ZodString>;
7506
7521
  recommendation_strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
7507
7522
  custom: "custom";
@@ -7701,6 +7716,7 @@ declare const RevTurbineConfigSchema: z.ZodPreprocess<z.ZodObject<{
7701
7716
  }, z.core.$strip>;
7702
7717
  }, z.core.$strip>>>;
7703
7718
  sessionCooldownMinutes: z.ZodDefault<z.ZodNumber>;
7719
+ remindLaterMinutes: z.ZodDefault<z.ZodNumber>;
7704
7720
  testMode: z.ZodDefault<z.ZodEnum<{
7705
7721
  off: "off";
7706
7722
  test_users: "test_users";
@@ -7716,7 +7732,6 @@ declare const RevTurbineConfigSchema: z.ZodPreprocess<z.ZodObject<{
7716
7732
  }>>>;
7717
7733
  suppress_for_paid: z.ZodDefault<z.ZodBoolean>;
7718
7734
  suppress_for_trial: z.ZodDefault<z.ZodBoolean>;
7719
- default_dismiss_cooldown_hours: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
7720
7735
  allow_stacking: z.ZodDefault<z.ZodBoolean>;
7721
7736
  priority_collision_strategy: z.ZodDefault<z.ZodNullable<z.ZodString>>;
7722
7737
  }, z.core.$strip>>>;
@@ -9866,7 +9881,7 @@ interface InteractionTrackerOptions {
9866
9881
  storage: RevTurbineStorage;
9867
9882
  tenantId: string;
9868
9883
  userId: string;
9869
- /** Default dismiss cooldown (ms). Default: 24 hours. */
9884
+ /** Default dismiss cooldown (ms). Default: 7 days (`cooldown_after_dismiss_days`). */
9870
9885
  defaultDismissCooldownMs?: number;
9871
9886
  /** Default remind-me-later delay (ms). Default: 1 hour. */
9872
9887
  defaultRemindLaterMs?: number;
@@ -10029,19 +10044,29 @@ declare class DecisionEngine {
10029
10044
  /**
10030
10045
  * Impression history types.
10031
10046
  *
10032
- * Tracks placement impressions and terminal interactions (dismiss, click-through,
10033
- * suppress) so the decision engine can permanently exclude placements the user
10034
- * has already acted on.
10047
+ * Tracks placement impressions and interactions (dismiss, click-through,
10048
+ * conversion, suppress) so the decision engine can exclude placements the user
10049
+ * has already acted on — permanently for a confirmed conversion, or for a
10050
+ * cooldown window for a dismiss / bare click / system suppression.
10035
10051
  */
10036
10052
  /**
10037
10053
  * Interaction outcomes tracked by the impression history system.
10038
10054
  *
10039
- * - `'impressed'` — the placement was shown to the user.
10040
- * - `'dismissed'` — user explicitly closed the placement (permanent).
10041
- * - `'clicked_thru'` user clicked the CTA (permanent).
10042
- * - `'suppressed'` — system or admin suppressed the placement (time-based).
10055
+ * - `'impressed'` — the placement was shown to the user.
10056
+ * - `'dismissed'` — user explicitly closed the placement ("No thanks").
10057
+ * Time-boxed: the placement re-shows after the dismiss cooldown
10058
+ * (`cooldown_after_dismiss_days`, default 7d). Spec: placement-studio-ui.md §
10059
+ * "Cooldown After Dismiss". NOT permanent.
10060
+ * - `'clicked_thru'` — user clicked the CTA but did **not** confirm completion
10061
+ * (e.g. abandoned checkout). Time-boxed like a dismiss — they may return.
10062
+ * - `'cta_completed'` — user confirmed the conversion action. **Permanent** —
10063
+ * a converted user never sees the upsell again.
10064
+ * - `'suppressed'` — system or admin suppressed the placement (time-based).
10065
+ *
10066
+ * See plan 167 (Q-1 ruling): only a confirmed conversion is terminal; a dismiss
10067
+ * or a bare click is a cooldown.
10043
10068
  */
10044
- type ImpressionOutcome = 'impressed' | 'dismissed' | 'clicked_thru' | 'suppressed';
10069
+ type ImpressionOutcome = 'impressed' | 'dismissed' | 'clicked_thru' | 'cta_completed' | 'suppressed';
10045
10070
  /**
10046
10071
  * A single impression/interaction history record.
10047
10072
  */
@@ -10086,14 +10111,16 @@ interface ImpressionHistoryStore {
10086
10111
  query(userId: string, query?: ImpressionQuery): ImpressionRecord[] | Promise<ImpressionRecord[]>;
10087
10112
  /**
10088
10113
  * Return the set of placement IDs that have a terminal outcome
10089
- * for this user (dismissed / clicked_thru).
10114
+ * for this user (`cta_completed` a confirmed conversion).
10090
10115
  *
10091
10116
  * This is the hot-path check used by the resolver.
10092
10117
  */
10093
10118
  getRetiredPlacementIds(userId: string): Set<string> | Promise<Set<string>>;
10094
10119
  /**
10095
10120
  * Return a map of placement IDs → `suppressUntil` ISO timestamps
10096
- * for placements with active suppression windows.
10121
+ * for placements with an active cooldown window — i.e. any record
10122
+ * (`dismissed`, `clicked_thru`, or `suppressed`) carrying a future
10123
+ * `suppressUntil`.
10097
10124
  */
10098
10125
  getSuppressedPlacements(userId: string): Map<string, string> | Promise<Map<string, string>>;
10099
10126
  /** Remove all records for a user. */
@@ -10118,17 +10145,25 @@ interface ImpressionHistoryOptions {
10118
10145
  userId: string;
10119
10146
  /** Default suppression duration in milliseconds. Default: 24 h. */
10120
10147
  defaultSuppressionMs?: number;
10148
+ /**
10149
+ * Default dismiss cooldown in milliseconds — applied to `dismissed` and bare
10150
+ * `clicked_thru` outcomes when no explicit window is supplied. Default: 7 days
10151
+ * (mirrors `cooldown_after_dismiss_days`).
10152
+ */
10153
+ defaultDismissCooldownMs?: number;
10121
10154
  }
10122
10155
  declare class ImpressionHistory {
10123
10156
  private readonly store;
10124
10157
  private userId;
10125
10158
  private readonly defaultSuppressionMs;
10159
+ private readonly defaultDismissCooldownMs;
10126
10160
  /**
10127
- * Hot cache of permanently retired placement IDs (dismissed / clicked_thru).
10161
+ * Hot cache of permanently retired placement IDs (confirmed conversions).
10128
10162
  */
10129
10163
  private retiredCache;
10130
10164
  /**
10131
10165
  * Hot cache of time-suppressed placement IDs → suppressUntil ISO timestamp.
10166
+ * Covers dismiss / bare-click cooldowns and system suppressions.
10132
10167
  */
10133
10168
  private suppressedCache;
10134
10169
  constructor(options: ImpressionHistoryOptions);
@@ -10137,15 +10172,30 @@ declare class ImpressionHistory {
10137
10172
  */
10138
10173
  recordImpression(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>): Promise<void>;
10139
10174
  /**
10140
- * Record a dismissal — the user explicitly closed the placement.
10141
- * The placement is permanently retired for this user.
10175
+ * Record a dismissal — the user explicitly closed the placement ("No thanks").
10176
+ * Time-boxed: the placement is hidden for a cooldown window and re-shows once
10177
+ * it elapses (plan 167, Q-1; spec placement-studio-ui.md:311). NOT permanent.
10178
+ *
10179
+ * @param cooldownMs — cooldown window in ms. Falls back to
10180
+ * `defaultDismissCooldownMs` (7 days). The SDK resolves this from the
10181
+ * placement's `cooldown_after_dismiss_days`.
10142
10182
  */
10143
- recordDismissal(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>): Promise<void>;
10183
+ recordDismissal(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>, cooldownMs?: number): Promise<void>;
10144
10184
  /**
10145
- * Record a click-through — the user engaged with the CTA.
10146
- * The placement is permanently retired for this user.
10185
+ * Record a bare click-through — the user clicked the CTA but did **not**
10186
+ * confirm the conversion (e.g. abandoned checkout). Treated as a cooldown,
10187
+ * identical to a dismiss — they may return (plan 167, Q-1). For a confirmed
10188
+ * conversion use {@link recordConversion} instead.
10189
+ *
10190
+ * @param cooldownMs — cooldown window in ms. Falls back to
10191
+ * `defaultDismissCooldownMs` (7 days).
10192
+ */
10193
+ recordClickThru(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>, cooldownMs?: number): Promise<void>;
10194
+ /**
10195
+ * Record a confirmed conversion — the user completed the CTA action.
10196
+ * The placement is **permanently** retired for this user (plan 167, Q-1).
10147
10197
  */
10148
- recordClickThru(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>): Promise<void>;
10198
+ recordConversion(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: Record<string, unknown>): Promise<void>;
10149
10199
  /**
10150
10200
  * Record a suppression — the system or admin suppressed the placement.
10151
10201
  * The placement is hidden for a configurable duration (not permanent).
@@ -11144,6 +11194,15 @@ interface PlacementSlotProps<C extends ResolvedContent = ResolvedContent> {
11144
11194
  onSecondaryCtaClick?: () => void;
11145
11195
  /** Callback when user dismisses the placement. */
11146
11196
  onDismiss: () => void;
11197
+ /**
11198
+ * Optional callback when the user chooses "Remind me later" (defer). When
11199
+ * provided, dismissible slots render a defer control beside dismiss; the
11200
+ * placement re-queues and reappears after the remind-later window
11201
+ * (`remind_later_minutes`, default 60) rather than the longer dismiss
11202
+ * cooldown (plan 167 REQ-7). **Additive and optional** — omit it and slots
11203
+ * render exactly as before, with no defer control.
11204
+ */
11205
+ onRemindLater?: () => void;
11147
11206
  /** Whether the placement is currently visible. */
11148
11207
  visible: boolean;
11149
11208
  /** Custom CSS class name for styling overrides. */
@@ -12472,6 +12531,13 @@ declare class RevTurbineCustomerSdk {
12472
12531
  private readonly interactionQueue;
12473
12532
  private readonly defaultDecisionTtlMs;
12474
12533
  private readonly defaultDismissCooldownMs;
12534
+ /**
12535
+ * Default dismiss cooldown window — 7 days, matching the engine's
12536
+ * `cooldown_after_dismiss_days` default. Applied to `dismiss` and bare
12537
+ * `cta_clicked` when the payload supplies no explicit `cooldown_ms`
12538
+ * (plan 167 REQ-3 / Q-1). Replaces the legacy 24h dismiss window.
12539
+ */
12540
+ private readonly dismissCooldownDefaultMs;
12475
12541
  private readonly defaultRemindLaterMs;
12476
12542
  private readonly defaultUsageWarningPercent;
12477
12543
  private readonly defaultTrialExpiringDays;
@@ -12965,26 +13031,43 @@ declare class RevTurbineCustomerSdk {
12965
13031
  */
12966
13032
  recordImpression(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata): Promise<void>;
12967
13033
  /**
12968
- * Record a placement dismissal — the user explicitly closed it.
12969
- * The placement is permanently retired for this user; subsequent
12970
- * `getPlacementDecision` calls return `visible: false`.
13034
+ * Record a placement dismissal — the user explicitly closed it ("No thanks").
13035
+ * Time-boxed: the placement is hidden for the dismiss cooldown
13036
+ * (`cooldown_after_dismiss_days`, default 7 days) and re-shows once it elapses
13037
+ * (plan 167). NOT permanent — for a confirmed conversion use
13038
+ * {@link recordConversion}.
12971
13039
  *
12972
13040
  * @param placementId - The placement's stable rule_id.
12973
13041
  * @param payloadId - Optional payload variant id.
12974
13042
  * @param surfaceTemplateId - Optional surface template id.
12975
13043
  * @param metadata - Optional metadata persisted with the record.
13044
+ * @param cooldownMs - Optional explicit cooldown window (ms). Defaults to 7 days.
12976
13045
  */
12977
- recordDismissal(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata): Promise<void>;
13046
+ recordDismissal(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata, cooldownMs?: number): Promise<void>;
12978
13047
  /**
12979
- * Record a placement click-through — the user engaged with the CTA.
12980
- * The placement is permanently retired for this user.
13048
+ * Record a bare placement click-through — the user clicked the CTA but did
13049
+ * not confirm the conversion (e.g. abandoned checkout). Time-boxed like a
13050
+ * dismiss; the placement may return (plan 167). For a confirmed conversion
13051
+ * use {@link recordConversion}.
12981
13052
  *
12982
13053
  * @param placementId - The placement's stable rule_id.
12983
13054
  * @param payloadId - Optional payload variant id.
12984
13055
  * @param surfaceTemplateId - Optional surface template id.
12985
13056
  * @param metadata - Optional metadata persisted with the record.
13057
+ * @param cooldownMs - Optional explicit cooldown window (ms). Defaults to 7 days.
12986
13058
  */
12987
- recordClickThru(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata): Promise<void>;
13059
+ recordClickThru(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata, cooldownMs?: number): Promise<void>;
13060
+ /**
13061
+ * Record a confirmed conversion — the user completed the CTA action. The
13062
+ * placement is **permanently** retired for this user; subsequent
13063
+ * `getPlacementDecision` calls return `visible: false` for good (plan 167).
13064
+ *
13065
+ * @param placementId - The placement's stable rule_id.
13066
+ * @param payloadId - Optional payload variant id.
13067
+ * @param surfaceTemplateId - Optional surface template id.
13068
+ * @param metadata - Optional metadata persisted with the record.
13069
+ */
13070
+ recordConversion(placementId: string, payloadId?: string, surfaceTemplateId?: string, metadata?: RevTurbineImpressionMetadata): Promise<void>;
12988
13071
  getTrialStatus(): Promise<RevTurbineTrialContext>;
12989
13072
  /**
12990
13073
  * Derive and push the user's trial status from their {@link TrialInstance}
@@ -21242,7 +21325,7 @@ type BannerSlotProps = PlacementSlotProps & {
21242
21325
  * />
21243
21326
  * ```
21244
21327
  */
21245
- declare function BannerSlot({ content, onCtaClick, onDismiss, visible, className, style, }: BannerSlotProps): React__default.JSX.Element | null;
21328
+ declare function BannerSlot({ content, onCtaClick, onDismiss, onRemindLater, visible, className, style, }: BannerSlotProps): React__default.JSX.Element | null;
21246
21329
  declare namespace BannerSlot {
21247
21330
  var displayName: string;
21248
21331
  }
@@ -21270,7 +21353,7 @@ type ModalSlotProps = PlacementSlotProps & {
21270
21353
  *
21271
21354
  * **Accessibility:** `role="dialog"`, `aria-modal="true"`, keyboard trap
21272
21355
  */
21273
- declare function ModalSlot({ content, onCtaClick, onSecondaryCtaClick, onDismiss, visible, className, style, }: ModalSlotProps): React__default.JSX.Element | null;
21356
+ declare function ModalSlot({ content, onCtaClick, onSecondaryCtaClick, onDismiss, onRemindLater, visible, className, style, }: ModalSlotProps): React__default.JSX.Element | null;
21274
21357
  declare namespace ModalSlot {
21275
21358
  var displayName: string;
21276
21359
  }
@@ -21312,7 +21395,7 @@ type ToastSlotProps = PlacementSlotProps & {
21312
21395
  /** Screen position for the toast notification. Default `'bottom-right'`. */
21313
21396
  toastPosition?: 'top-right' | 'bottom-right' | 'bottom-center';
21314
21397
  };
21315
- declare function ToastSlot({ content, onCtaClick, onDismiss, visible, className, style, }: ToastSlotProps): React__default.JSX.Element | null;
21398
+ declare function ToastSlot({ content, onCtaClick, onDismiss, onRemindLater, visible, className, style, }: ToastSlotProps): React__default.JSX.Element | null;
21316
21399
  declare namespace ToastSlot {
21317
21400
  var displayName: string;
21318
21401
  }
@@ -21404,7 +21487,7 @@ type TooltipSlotProps = PlacementSlotProps & {
21404
21487
  /** Optional CSS selector used to anchor the tooltip to an on-page element. */
21405
21488
  anchorSelector?: string;
21406
21489
  };
21407
- declare function TooltipSlot({ content, onCtaClick, onDismiss, visible, className, style, }: TooltipSlotProps): React__default.JSX.Element | null;
21490
+ declare function TooltipSlot({ content, onCtaClick, onDismiss, onRemindLater, visible, className, style, }: TooltipSlotProps): React__default.JSX.Element | null;
21408
21491
  declare namespace TooltipSlot {
21409
21492
  var displayName: string;
21410
21493
  }
@@ -21443,6 +21526,12 @@ interface PlacementRendererProps {
21443
21526
  onSecondaryCtaClick?: (uiPath: PlacementUiPath) => void;
21444
21527
  /** Callback when user dismisses the placement. */
21445
21528
  onDismiss?: (outputId: string) => void;
21529
+ /**
21530
+ * Callback when the user chooses "Remind me later" (defer). When provided,
21531
+ * dismissible slots render a defer control; omit it and no defer control
21532
+ * appears (plan 167 REQ-7). Additive/opt-in.
21533
+ */
21534
+ onRemindLater?: (outputId: string) => void;
21446
21535
  /** Callback fired once when the placement is first rendered visible. */
21447
21536
  onImpression?: (outputId: string) => void;
21448
21537
  /** Whether the placement is visible. Default true. */
@@ -21465,7 +21554,7 @@ interface PlacementRendererProps {
21465
21554
  * - UI path and promotion parsing
21466
21555
  * - CTA and dismiss callback wiring
21467
21556
  */
21468
- declare function PlacementRenderer({ placement, personalization, registry, ctaResolvers, onCtaClick, onSecondaryCtaClick, onDismiss, onImpression, visible, className, style, fallback, }: PlacementRendererProps): React__default.JSX.Element;
21557
+ declare function PlacementRenderer({ placement, personalization, registry, ctaResolvers, onCtaClick, onSecondaryCtaClick, onDismiss, onRemindLater, onImpression, visible, className, style, fallback, }: PlacementRendererProps): React__default.JSX.Element;
21469
21558
  declare namespace PlacementRenderer {
21470
21559
  var displayName: string;
21471
21560
  }