samva 0.4.0 → 0.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.
Files changed (42) hide show
  1. package/dist/{categories-CsUa8ojo.js → categories-B9Nw2v_F.js} +5 -1
  2. package/dist/client/sdk.gen.d.ts +150 -11
  3. package/dist/client/types.gen.d.ts +893 -37
  4. package/dist/{client-BmZK_uCt.js → client-B7gEkvEq.js} +952 -110
  5. package/dist/{client-attribution-BslSOa_8.js → client-attribution-B2yJBXdZ.js} +2 -2
  6. package/dist/effect/api-keys.js +1 -1
  7. package/dist/effect/campaigns.d.ts +16 -0
  8. package/dist/effect/campaigns.js +1 -1
  9. package/dist/effect/categories.js +1 -1
  10. package/dist/effect/client.js +1 -1
  11. package/dist/effect/contacts.js +1 -1
  12. package/dist/effect/conversations.d.ts +15 -0
  13. package/dist/effect/conversations.js +1 -1
  14. package/dist/effect/design.js +1 -1
  15. package/dist/effect/email.d.ts +700 -2
  16. package/dist/effect/email.js +27 -3
  17. package/dist/effect/generated-metadata.d.ts +4 -0
  18. package/dist/effect/generated.d.ts +4102 -359
  19. package/dist/effect/index.js +2 -2
  20. package/dist/effect/internal/operation.d.ts +13 -3
  21. package/dist/effect/media.d.ts +3 -3
  22. package/dist/effect/media.js +1 -1
  23. package/dist/effect/messages.d.ts +180 -1
  24. package/dist/effect/messages.js +5 -3
  25. package/dist/effect/operations.js +1 -1
  26. package/dist/effect/organizations.js +1 -1
  27. package/dist/effect/retry.js +1 -1
  28. package/dist/effect/scheduled-messages.d.ts +90 -6
  29. package/dist/effect/scheduled-messages.js +5 -3
  30. package/dist/effect/templates.d.ts +12 -0
  31. package/dist/effect/templates.js +2 -2
  32. package/dist/effect/webhooks.d.ts +40 -6
  33. package/dist/effect/webhooks.js +2 -2
  34. package/dist/index.js +2 -2
  35. package/dist/{operation-B1knNlxk.js → operation-B4FjN6wq.js} +50 -2
  36. package/dist/promises/errors.gen.d.ts +21 -2
  37. package/dist/promises/index.d.ts +1 -0
  38. package/dist/promises/index.js +2 -2
  39. package/dist/promises/types.gen.d.ts +1 -1
  40. package/dist/{promises-n1opem5V.js → promises-CP_nxUus.js} +502 -11
  41. package/dist/service-map.d.ts +66 -0
  42. package/package.json +3 -3
@@ -78,6 +78,11 @@ export declare const send: (input: EmailSendInput, options?: SendOptions | undef
78
78
  } | null;
79
79
  }[];
80
80
  readonly deliveries: readonly {
81
+ readonly scheduling: {
82
+ readonly dueAt: string;
83
+ readonly expiresAt: string;
84
+ readonly waitReason: "campaign-paused" | "daily-quota" | "domain-health" | "domain-warming" | "onboarding-review" | "provider-unavailable" | "rate" | "retry" | "tenant-health" | null;
85
+ } | null;
81
86
  readonly id: string;
82
87
  readonly messageId: string;
83
88
  readonly recipientId: string | null;
@@ -138,7 +143,7 @@ export declare const send: (input: EmailSendInput, options?: SendOptions | undef
138
143
  readonly createdAt: string;
139
144
  readonly updatedAt: string;
140
145
  }[];
141
- }, import("./generated").BillingProviderError | import("./generated").ConflictError | import("./generated").ExternalServiceError | import("./generated").FlagDisabledError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").PaymentRequiredError | import("./generated").RateLimitedError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError | import("./generated").WebhookEnqueueError, import("./client").Service>;
146
+ }, import("./generated").BillingProviderError | import("./generated").ConflictError | import("./generated").ExternalServiceError | import("./generated").FlagDisabledError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").OnboardingReviewRequiredError | import("./generated").PaymentRequiredError | import("./generated").RateLimitedError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError | import("./generated").WebhookEnqueueError, import("./client").Service>;
142
147
  export declare const getTrackingDefaults: (_?: never) => import("effect/Effect").Effect<{
143
148
  readonly opens: boolean;
144
149
  readonly clicks: boolean;
@@ -259,6 +264,28 @@ export declare const addDomain: (input: {
259
264
  readonly createdAt: string;
260
265
  readonly updatedAt: string;
261
266
  }, import("./generated").BillingProviderError | import("./generated").ConflictError | import("./generated").EmailChannelError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").PaymentRequiredError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
267
+ export declare const rotateDomainDkim: (input: {
268
+ readonly id: string;
269
+ } & {
270
+ readonly idempotencyKey: string;
271
+ }) => import("effect/Effect").Effect<{
272
+ readonly id: string;
273
+ readonly domainId: string & import("effect/Brand").Brand<"EmailDomainId">;
274
+ readonly phase: "complete" | "cutover" | "staged";
275
+ readonly selector: string;
276
+ readonly record: {
277
+ readonly name: string;
278
+ readonly type: "TXT";
279
+ readonly value: string;
280
+ readonly ttl: string;
281
+ };
282
+ readonly formerRecord: {
283
+ readonly name: string;
284
+ readonly type: "TXT";
285
+ readonly value: string;
286
+ };
287
+ readonly minimumRetainUntil: string | null;
288
+ }, import("./generated").ConflictError | import("./generated").EmailChannelError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
262
289
  export declare const getDomainVerification: (input: {
263
290
  readonly id: string;
264
291
  }) => import("effect/Effect").Effect<{
@@ -295,6 +322,54 @@ export declare const getDomainVerification: (input: {
295
322
  readonly message: string;
296
323
  readonly failedAt: string;
297
324
  } | null;
325
+ readonly health: {
326
+ readonly actionOwner: "customer" | "none" | "provider" | "samva";
327
+ readonly action: string;
328
+ readonly freshness: "current" | "stale" | "unknown";
329
+ readonly observedAt: string | null;
330
+ readonly staleAt: string | null;
331
+ readonly nextRetryAt: string | null;
332
+ readonly reason: "dns-action-required" | "dns-unavailable" | "inactive" | "observation-stale" | "observation-unknown" | "provider-failed" | "provider-ownership-action-required" | "provider-pending" | "ready" | "samva-repair" | "signing-custody-action-required";
333
+ };
334
+ readonly sending: {
335
+ readonly actionOwner: "customer" | "none" | "provider" | "samva";
336
+ readonly action: string;
337
+ readonly freshness: "current" | "stale" | "unknown";
338
+ readonly observedAt: string | null;
339
+ readonly staleAt: string | null;
340
+ readonly nextRetryAt: string | null;
341
+ readonly status: "blocked" | "ready" | "unknown";
342
+ readonly reason: "domain-not-ready" | "domain-observation-stale" | "operator-paused" | "provider-paused" | "ready" | "tenant-health-stale" | "tenant-health-unknown";
343
+ };
344
+ readonly dmarc: {
345
+ readonly status: "invalid" | "missing" | "multiple" | "unknown" | "valid";
346
+ readonly source: "direct" | "none" | "organizational";
347
+ readonly policyDomain: string | null;
348
+ readonly policy: "none" | "quarantine" | "reject" | null;
349
+ readonly subdomainPolicy: "none" | "quarantine" | "reject" | null;
350
+ readonly effectivePolicy: "none" | "quarantine" | "reject" | null;
351
+ readonly observedAt: string | null;
352
+ readonly staleAt: string | null;
353
+ readonly guidance: string;
354
+ };
355
+ readonly rotation: {
356
+ readonly id: string;
357
+ readonly domainId: string & import("effect/Brand").Brand<"EmailDomainId">;
358
+ readonly phase: "complete" | "cutover" | "staged";
359
+ readonly selector: string;
360
+ readonly record: {
361
+ readonly name: string;
362
+ readonly type: "TXT";
363
+ readonly value: string;
364
+ readonly ttl: string;
365
+ };
366
+ readonly formerRecord: {
367
+ readonly name: string;
368
+ readonly type: "TXT";
369
+ readonly value: string;
370
+ };
371
+ readonly minimumRetainUntil: string | null;
372
+ } | null;
298
373
  }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
299
374
  export declare const advanceDomainVerification: (input: {
300
375
  readonly id: string;
@@ -332,6 +407,54 @@ export declare const advanceDomainVerification: (input: {
332
407
  readonly message: string;
333
408
  readonly failedAt: string;
334
409
  } | null;
410
+ readonly health: {
411
+ readonly actionOwner: "customer" | "none" | "provider" | "samva";
412
+ readonly action: string;
413
+ readonly freshness: "current" | "stale" | "unknown";
414
+ readonly observedAt: string | null;
415
+ readonly staleAt: string | null;
416
+ readonly nextRetryAt: string | null;
417
+ readonly reason: "dns-action-required" | "dns-unavailable" | "inactive" | "observation-stale" | "observation-unknown" | "provider-failed" | "provider-ownership-action-required" | "provider-pending" | "ready" | "samva-repair" | "signing-custody-action-required";
418
+ };
419
+ readonly sending: {
420
+ readonly actionOwner: "customer" | "none" | "provider" | "samva";
421
+ readonly action: string;
422
+ readonly freshness: "current" | "stale" | "unknown";
423
+ readonly observedAt: string | null;
424
+ readonly staleAt: string | null;
425
+ readonly nextRetryAt: string | null;
426
+ readonly status: "blocked" | "ready" | "unknown";
427
+ readonly reason: "domain-not-ready" | "domain-observation-stale" | "operator-paused" | "provider-paused" | "ready" | "tenant-health-stale" | "tenant-health-unknown";
428
+ };
429
+ readonly dmarc: {
430
+ readonly status: "invalid" | "missing" | "multiple" | "unknown" | "valid";
431
+ readonly source: "direct" | "none" | "organizational";
432
+ readonly policyDomain: string | null;
433
+ readonly policy: "none" | "quarantine" | "reject" | null;
434
+ readonly subdomainPolicy: "none" | "quarantine" | "reject" | null;
435
+ readonly effectivePolicy: "none" | "quarantine" | "reject" | null;
436
+ readonly observedAt: string | null;
437
+ readonly staleAt: string | null;
438
+ readonly guidance: string;
439
+ };
440
+ readonly rotation: {
441
+ readonly id: string;
442
+ readonly domainId: string & import("effect/Brand").Brand<"EmailDomainId">;
443
+ readonly phase: "complete" | "cutover" | "staged";
444
+ readonly selector: string;
445
+ readonly record: {
446
+ readonly name: string;
447
+ readonly type: "TXT";
448
+ readonly value: string;
449
+ readonly ttl: string;
450
+ };
451
+ readonly formerRecord: {
452
+ readonly name: string;
453
+ readonly type: "TXT";
454
+ readonly value: string;
455
+ };
456
+ readonly minimumRetainUntil: string | null;
457
+ } | null;
335
458
  }, import("./generated").ConflictError | import("./generated").EmailChannelError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").RateLimitedError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
336
459
  export declare const getDomainById: (input: {
337
460
  readonly id: string;
@@ -525,6 +648,557 @@ export declare const disableCustomTracking: (input: {
525
648
  readonly success: boolean;
526
649
  readonly message: string;
527
650
  }, import("./generated").ConflictError | import("./generated").EmailChannelError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
651
+ export declare const getDomainWarming: (input: {
652
+ readonly id: string;
653
+ }) => import("effect/Effect").Effect<{
654
+ readonly domain: {
655
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
656
+ readonly domain: string;
657
+ };
658
+ readonly plan: {
659
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
660
+ readonly status: "active" | "completed" | "paused";
661
+ readonly identity: "migrating" | "new" | "returning";
662
+ readonly initialDailyRecipients: number;
663
+ readonly dailyGrowthPercent: number;
664
+ readonly targetDailyRecipients: number;
665
+ readonly holdReason: string | null;
666
+ readonly heldAt: string | null;
667
+ readonly pausedAt: string | null;
668
+ readonly completedAt: string | null;
669
+ readonly createdAt: string;
670
+ readonly updatedAt: string;
671
+ } | null;
672
+ readonly batches: readonly {
673
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
674
+ readonly sequence: number;
675
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
676
+ readonly startsAt: string;
677
+ readonly endsAt: string;
678
+ readonly allowanceRecipients: number;
679
+ readonly dailyGrowthPercent: number;
680
+ readonly targetDailyRecipients: number;
681
+ readonly reservedRecipients: number;
682
+ readonly acceptedRecipients: number;
683
+ readonly cancelledAt: string | null;
684
+ readonly createdAt: string;
685
+ }[];
686
+ readonly decisions: readonly {
687
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
688
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
689
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
690
+ readonly actor: string;
691
+ readonly note: string | null;
692
+ readonly createdAt: string;
693
+ }[];
694
+ readonly evidence: {
695
+ readonly observedAt: string;
696
+ readonly windowHours: number;
697
+ readonly minimumSends: number;
698
+ readonly sent: number;
699
+ readonly bounced: number;
700
+ readonly complained: number;
701
+ readonly hourly: readonly {
702
+ readonly sent: number;
703
+ readonly bounced: number;
704
+ readonly complained: number;
705
+ }[];
706
+ readonly bounceThreshold: number;
707
+ readonly complaintThreshold: number;
708
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
709
+ readonly thresholdReason: string | null;
710
+ };
711
+ readonly holds: {
712
+ readonly workspacePausedAt: string | null;
713
+ readonly workspacePauseReason: string | null;
714
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
715
+ };
716
+ }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
717
+ export declare const createDomainWarmingPlan: (input: {
718
+ readonly id: string;
719
+ readonly identity: string;
720
+ readonly initialDailyRecipients: number;
721
+ readonly dailyGrowthPercent: number;
722
+ readonly targetDailyRecipients: number;
723
+ }) => import("effect/Effect").Effect<{
724
+ readonly domain: {
725
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
726
+ readonly domain: string;
727
+ };
728
+ readonly plan: {
729
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
730
+ readonly status: "active" | "completed" | "paused";
731
+ readonly identity: "migrating" | "new" | "returning";
732
+ readonly initialDailyRecipients: number;
733
+ readonly dailyGrowthPercent: number;
734
+ readonly targetDailyRecipients: number;
735
+ readonly holdReason: string | null;
736
+ readonly heldAt: string | null;
737
+ readonly pausedAt: string | null;
738
+ readonly completedAt: string | null;
739
+ readonly createdAt: string;
740
+ readonly updatedAt: string;
741
+ } | null;
742
+ readonly batches: readonly {
743
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
744
+ readonly sequence: number;
745
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
746
+ readonly startsAt: string;
747
+ readonly endsAt: string;
748
+ readonly allowanceRecipients: number;
749
+ readonly dailyGrowthPercent: number;
750
+ readonly targetDailyRecipients: number;
751
+ readonly reservedRecipients: number;
752
+ readonly acceptedRecipients: number;
753
+ readonly cancelledAt: string | null;
754
+ readonly createdAt: string;
755
+ }[];
756
+ readonly decisions: readonly {
757
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
758
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
759
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
760
+ readonly actor: string;
761
+ readonly note: string | null;
762
+ readonly createdAt: string;
763
+ }[];
764
+ readonly evidence: {
765
+ readonly observedAt: string;
766
+ readonly windowHours: number;
767
+ readonly minimumSends: number;
768
+ readonly sent: number;
769
+ readonly bounced: number;
770
+ readonly complained: number;
771
+ readonly hourly: readonly {
772
+ readonly sent: number;
773
+ readonly bounced: number;
774
+ readonly complained: number;
775
+ }[];
776
+ readonly bounceThreshold: number;
777
+ readonly complaintThreshold: number;
778
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
779
+ readonly thresholdReason: string | null;
780
+ };
781
+ readonly holds: {
782
+ readonly workspacePausedAt: string | null;
783
+ readonly workspacePauseReason: string | null;
784
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
785
+ };
786
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
787
+ export declare const updateDomainWarmingPolicy: (input: {
788
+ readonly id: string;
789
+ readonly dailyGrowthPercent: number;
790
+ readonly targetDailyRecipients: number;
791
+ readonly note?: string | null | undefined;
792
+ }) => import("effect/Effect").Effect<{
793
+ readonly domain: {
794
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
795
+ readonly domain: string;
796
+ };
797
+ readonly plan: {
798
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
799
+ readonly status: "active" | "completed" | "paused";
800
+ readonly identity: "migrating" | "new" | "returning";
801
+ readonly initialDailyRecipients: number;
802
+ readonly dailyGrowthPercent: number;
803
+ readonly targetDailyRecipients: number;
804
+ readonly holdReason: string | null;
805
+ readonly heldAt: string | null;
806
+ readonly pausedAt: string | null;
807
+ readonly completedAt: string | null;
808
+ readonly createdAt: string;
809
+ readonly updatedAt: string;
810
+ } | null;
811
+ readonly batches: readonly {
812
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
813
+ readonly sequence: number;
814
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
815
+ readonly startsAt: string;
816
+ readonly endsAt: string;
817
+ readonly allowanceRecipients: number;
818
+ readonly dailyGrowthPercent: number;
819
+ readonly targetDailyRecipients: number;
820
+ readonly reservedRecipients: number;
821
+ readonly acceptedRecipients: number;
822
+ readonly cancelledAt: string | null;
823
+ readonly createdAt: string;
824
+ }[];
825
+ readonly decisions: readonly {
826
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
827
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
828
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
829
+ readonly actor: string;
830
+ readonly note: string | null;
831
+ readonly createdAt: string;
832
+ }[];
833
+ readonly evidence: {
834
+ readonly observedAt: string;
835
+ readonly windowHours: number;
836
+ readonly minimumSends: number;
837
+ readonly sent: number;
838
+ readonly bounced: number;
839
+ readonly complained: number;
840
+ readonly hourly: readonly {
841
+ readonly sent: number;
842
+ readonly bounced: number;
843
+ readonly complained: number;
844
+ }[];
845
+ readonly bounceThreshold: number;
846
+ readonly complaintThreshold: number;
847
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
848
+ readonly thresholdReason: string | null;
849
+ };
850
+ readonly holds: {
851
+ readonly workspacePausedAt: string | null;
852
+ readonly workspacePauseReason: string | null;
853
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
854
+ };
855
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
856
+ export declare const cancelDomainWarmingBatch: (input: {
857
+ readonly id: string;
858
+ readonly batchId: string;
859
+ }) => import("effect/Effect").Effect<{
860
+ readonly domain: {
861
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
862
+ readonly domain: string;
863
+ };
864
+ readonly plan: {
865
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
866
+ readonly status: "active" | "completed" | "paused";
867
+ readonly identity: "migrating" | "new" | "returning";
868
+ readonly initialDailyRecipients: number;
869
+ readonly dailyGrowthPercent: number;
870
+ readonly targetDailyRecipients: number;
871
+ readonly holdReason: string | null;
872
+ readonly heldAt: string | null;
873
+ readonly pausedAt: string | null;
874
+ readonly completedAt: string | null;
875
+ readonly createdAt: string;
876
+ readonly updatedAt: string;
877
+ } | null;
878
+ readonly batches: readonly {
879
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
880
+ readonly sequence: number;
881
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
882
+ readonly startsAt: string;
883
+ readonly endsAt: string;
884
+ readonly allowanceRecipients: number;
885
+ readonly dailyGrowthPercent: number;
886
+ readonly targetDailyRecipients: number;
887
+ readonly reservedRecipients: number;
888
+ readonly acceptedRecipients: number;
889
+ readonly cancelledAt: string | null;
890
+ readonly createdAt: string;
891
+ }[];
892
+ readonly decisions: readonly {
893
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
894
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
895
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
896
+ readonly actor: string;
897
+ readonly note: string | null;
898
+ readonly createdAt: string;
899
+ }[];
900
+ readonly evidence: {
901
+ readonly observedAt: string;
902
+ readonly windowHours: number;
903
+ readonly minimumSends: number;
904
+ readonly sent: number;
905
+ readonly bounced: number;
906
+ readonly complained: number;
907
+ readonly hourly: readonly {
908
+ readonly sent: number;
909
+ readonly bounced: number;
910
+ readonly complained: number;
911
+ }[];
912
+ readonly bounceThreshold: number;
913
+ readonly complaintThreshold: number;
914
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
915
+ readonly thresholdReason: string | null;
916
+ };
917
+ readonly holds: {
918
+ readonly workspacePausedAt: string | null;
919
+ readonly workspacePauseReason: string | null;
920
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
921
+ };
922
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
923
+ export declare const pauseDomainWarming: (input: {
924
+ readonly id: string;
925
+ readonly note?: string | null | undefined;
926
+ }) => import("effect/Effect").Effect<{
927
+ readonly domain: {
928
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
929
+ readonly domain: string;
930
+ };
931
+ readonly plan: {
932
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
933
+ readonly status: "active" | "completed" | "paused";
934
+ readonly identity: "migrating" | "new" | "returning";
935
+ readonly initialDailyRecipients: number;
936
+ readonly dailyGrowthPercent: number;
937
+ readonly targetDailyRecipients: number;
938
+ readonly holdReason: string | null;
939
+ readonly heldAt: string | null;
940
+ readonly pausedAt: string | null;
941
+ readonly completedAt: string | null;
942
+ readonly createdAt: string;
943
+ readonly updatedAt: string;
944
+ } | null;
945
+ readonly batches: readonly {
946
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
947
+ readonly sequence: number;
948
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
949
+ readonly startsAt: string;
950
+ readonly endsAt: string;
951
+ readonly allowanceRecipients: number;
952
+ readonly dailyGrowthPercent: number;
953
+ readonly targetDailyRecipients: number;
954
+ readonly reservedRecipients: number;
955
+ readonly acceptedRecipients: number;
956
+ readonly cancelledAt: string | null;
957
+ readonly createdAt: string;
958
+ }[];
959
+ readonly decisions: readonly {
960
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
961
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
962
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
963
+ readonly actor: string;
964
+ readonly note: string | null;
965
+ readonly createdAt: string;
966
+ }[];
967
+ readonly evidence: {
968
+ readonly observedAt: string;
969
+ readonly windowHours: number;
970
+ readonly minimumSends: number;
971
+ readonly sent: number;
972
+ readonly bounced: number;
973
+ readonly complained: number;
974
+ readonly hourly: readonly {
975
+ readonly sent: number;
976
+ readonly bounced: number;
977
+ readonly complained: number;
978
+ }[];
979
+ readonly bounceThreshold: number;
980
+ readonly complaintThreshold: number;
981
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
982
+ readonly thresholdReason: string | null;
983
+ };
984
+ readonly holds: {
985
+ readonly workspacePausedAt: string | null;
986
+ readonly workspacePauseReason: string | null;
987
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
988
+ };
989
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
990
+ export declare const resumeDomainWarming: (input: {
991
+ readonly id: string;
992
+ readonly note?: string | null | undefined;
993
+ }) => import("effect/Effect").Effect<{
994
+ readonly domain: {
995
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
996
+ readonly domain: string;
997
+ };
998
+ readonly plan: {
999
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
1000
+ readonly status: "active" | "completed" | "paused";
1001
+ readonly identity: "migrating" | "new" | "returning";
1002
+ readonly initialDailyRecipients: number;
1003
+ readonly dailyGrowthPercent: number;
1004
+ readonly targetDailyRecipients: number;
1005
+ readonly holdReason: string | null;
1006
+ readonly heldAt: string | null;
1007
+ readonly pausedAt: string | null;
1008
+ readonly completedAt: string | null;
1009
+ readonly createdAt: string;
1010
+ readonly updatedAt: string;
1011
+ } | null;
1012
+ readonly batches: readonly {
1013
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
1014
+ readonly sequence: number;
1015
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
1016
+ readonly startsAt: string;
1017
+ readonly endsAt: string;
1018
+ readonly allowanceRecipients: number;
1019
+ readonly dailyGrowthPercent: number;
1020
+ readonly targetDailyRecipients: number;
1021
+ readonly reservedRecipients: number;
1022
+ readonly acceptedRecipients: number;
1023
+ readonly cancelledAt: string | null;
1024
+ readonly createdAt: string;
1025
+ }[];
1026
+ readonly decisions: readonly {
1027
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
1028
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
1029
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
1030
+ readonly actor: string;
1031
+ readonly note: string | null;
1032
+ readonly createdAt: string;
1033
+ }[];
1034
+ readonly evidence: {
1035
+ readonly observedAt: string;
1036
+ readonly windowHours: number;
1037
+ readonly minimumSends: number;
1038
+ readonly sent: number;
1039
+ readonly bounced: number;
1040
+ readonly complained: number;
1041
+ readonly hourly: readonly {
1042
+ readonly sent: number;
1043
+ readonly bounced: number;
1044
+ readonly complained: number;
1045
+ }[];
1046
+ readonly bounceThreshold: number;
1047
+ readonly complaintThreshold: number;
1048
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
1049
+ readonly thresholdReason: string | null;
1050
+ };
1051
+ readonly holds: {
1052
+ readonly workspacePausedAt: string | null;
1053
+ readonly workspacePauseReason: string | null;
1054
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
1055
+ };
1056
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
1057
+ export declare const completeDomainWarming: (input: {
1058
+ readonly id: string;
1059
+ readonly note?: string | null | undefined;
1060
+ }) => import("effect/Effect").Effect<{
1061
+ readonly domain: {
1062
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainId">;
1063
+ readonly domain: string;
1064
+ };
1065
+ readonly plan: {
1066
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingPlanId">;
1067
+ readonly status: "active" | "completed" | "paused";
1068
+ readonly identity: "migrating" | "new" | "returning";
1069
+ readonly initialDailyRecipients: number;
1070
+ readonly dailyGrowthPercent: number;
1071
+ readonly targetDailyRecipients: number;
1072
+ readonly holdReason: string | null;
1073
+ readonly heldAt: string | null;
1074
+ readonly pausedAt: string | null;
1075
+ readonly completedAt: string | null;
1076
+ readonly createdAt: string;
1077
+ readonly updatedAt: string;
1078
+ } | null;
1079
+ readonly batches: readonly {
1080
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">;
1081
+ readonly sequence: number;
1082
+ readonly state: "cancelled" | "closed" | "open" | "scheduled";
1083
+ readonly startsAt: string;
1084
+ readonly endsAt: string;
1085
+ readonly allowanceRecipients: number;
1086
+ readonly dailyGrowthPercent: number;
1087
+ readonly targetDailyRecipients: number;
1088
+ readonly reservedRecipients: number;
1089
+ readonly acceptedRecipients: number;
1090
+ readonly cancelledAt: string | null;
1091
+ readonly createdAt: string;
1092
+ }[];
1093
+ readonly decisions: readonly {
1094
+ readonly id: string & import("effect/Brand").Brand<"EmailDomainWarmingDecisionId">;
1095
+ readonly kind: "completed" | "held" | "paused" | "plan-created" | "policy-updated" | "resumed" | "window-cancelled" | "window-opened";
1096
+ readonly batchId: (string & import("effect/Brand").Brand<"EmailDomainWarmingBatchId">) | null;
1097
+ readonly actor: string;
1098
+ readonly note: string | null;
1099
+ readonly createdAt: string;
1100
+ }[];
1101
+ readonly evidence: {
1102
+ readonly observedAt: string;
1103
+ readonly windowHours: number;
1104
+ readonly minimumSends: number;
1105
+ readonly sent: number;
1106
+ readonly bounced: number;
1107
+ readonly complained: number;
1108
+ readonly hourly: readonly {
1109
+ readonly sent: number;
1110
+ readonly bounced: number;
1111
+ readonly complained: number;
1112
+ }[];
1113
+ readonly bounceThreshold: number;
1114
+ readonly complaintThreshold: number;
1115
+ readonly verdict: "healthy" | "insufficient-evidence" | "over-threshold";
1116
+ readonly thresholdReason: string | null;
1117
+ };
1118
+ readonly holds: {
1119
+ readonly workspacePausedAt: string | null;
1120
+ readonly workspacePauseReason: string | null;
1121
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
1122
+ };
1123
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
1124
+ export declare const getOnboardingReview: (_?: never) => import("effect/Effect").Effect<{
1125
+ readonly decision: "approved" | "exempt" | "rejected" | "undecided";
1126
+ readonly stage: "automated_review" | "collecting" | "complete" | "information_requested" | "manual_review";
1127
+ readonly generation: number;
1128
+ readonly canSend: boolean;
1129
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1130
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1131
+ readonly canReapply: boolean;
1132
+ readonly informationRequest: {
1133
+ readonly id: string;
1134
+ readonly requestedFields: readonly string[];
1135
+ readonly requestedAt: string;
1136
+ readonly canRespond: boolean;
1137
+ } | null;
1138
+ readonly identities: readonly {
1139
+ readonly identityId: string;
1140
+ readonly decision: "approved" | "rejected" | "undecided";
1141
+ readonly generation: number;
1142
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1143
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1144
+ readonly updatedAt: string;
1145
+ }[];
1146
+ readonly updatedAt: string | null;
1147
+ }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
1148
+ export declare const reapplyOnboardingReview: (input: {
1149
+ readonly expectedGeneration: number;
1150
+ }) => import("effect/Effect").Effect<{
1151
+ readonly decision: "approved" | "exempt" | "rejected" | "undecided";
1152
+ readonly stage: "automated_review" | "collecting" | "complete" | "information_requested" | "manual_review";
1153
+ readonly generation: number;
1154
+ readonly canSend: boolean;
1155
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1156
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1157
+ readonly canReapply: boolean;
1158
+ readonly informationRequest: {
1159
+ readonly id: string;
1160
+ readonly requestedFields: readonly string[];
1161
+ readonly requestedAt: string;
1162
+ readonly canRespond: boolean;
1163
+ } | null;
1164
+ readonly identities: readonly {
1165
+ readonly identityId: string;
1166
+ readonly decision: "approved" | "rejected" | "undecided";
1167
+ readonly generation: number;
1168
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1169
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1170
+ readonly updatedAt: string;
1171
+ }[];
1172
+ readonly updatedAt: string | null;
1173
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
1174
+ export declare const respondToOnboardingInformationRequest: (input: {
1175
+ readonly expectedGeneration: number;
1176
+ readonly responseText: string;
1177
+ readonly evidenceMediaIds: readonly string[];
1178
+ }) => import("effect/Effect").Effect<{
1179
+ readonly decision: "approved" | "exempt" | "rejected" | "undecided";
1180
+ readonly stage: "automated_review" | "collecting" | "complete" | "information_requested" | "manual_review";
1181
+ readonly generation: number;
1182
+ readonly canSend: boolean;
1183
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1184
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1185
+ readonly canReapply: boolean;
1186
+ readonly informationRequest: {
1187
+ readonly id: string;
1188
+ readonly requestedFields: readonly string[];
1189
+ readonly requestedAt: string;
1190
+ readonly canRespond: boolean;
1191
+ } | null;
1192
+ readonly identities: readonly {
1193
+ readonly identityId: string;
1194
+ readonly decision: "approved" | "rejected" | "undecided";
1195
+ readonly generation: number;
1196
+ readonly code: "identity_changed" | "identity_review_rejected" | "identity_review_required" | "information_required" | "review_in_progress" | "review_rejected" | "review_required" | null;
1197
+ readonly nextAction: "contact_support" | "provide_information" | "reapply" | "verify_sending_identity" | "wait_for_review" | null;
1198
+ readonly updatedAt: string;
1199
+ }[];
1200
+ readonly updatedAt: string | null;
1201
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
528
1202
  export declare const listSenders: ((input?: {
529
1203
  readonly page?: string | null | undefined;
530
1204
  readonly limit?: string | null | undefined;
@@ -626,6 +1300,30 @@ export declare const listSenders: ((input?: {
626
1300
  readonly updatedAt: string;
627
1301
  }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
628
1302
  };
1303
+ export declare const getSender: (input: {
1304
+ readonly id: string;
1305
+ }) => import("effect/Effect").Effect<{
1306
+ readonly id: string & import("effect/Brand").Brand<"EmailSenderId">;
1307
+ readonly organizationId: string;
1308
+ readonly email: string;
1309
+ readonly name: string | null;
1310
+ readonly domainId: (string & import("effect/Brand").Brand<"EmailDomainId">) | null;
1311
+ readonly verificationStatus: "failed" | "pending" | "verified";
1312
+ readonly verifiedAt: string | null;
1313
+ readonly verificationToken: string | null;
1314
+ readonly providerLifecycle: "active" | "deleting" | "failed" | "provisioning";
1315
+ readonly providerFailureCode: string | null;
1316
+ readonly isDefault: boolean;
1317
+ readonly replyToEmails: readonly string[] | null;
1318
+ readonly deliverability: {
1319
+ readonly bounceRate: number;
1320
+ readonly complaintRate: number;
1321
+ readonly sendingStatus: "disabled" | "enabled" | "reinstated" | "unknown";
1322
+ };
1323
+ readonly isActive: boolean;
1324
+ readonly createdAt: string;
1325
+ readonly updatedAt: string;
1326
+ }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
629
1327
  export declare const addSender: (input: EmailAddSenderInput, options?: SendOptions | undefined) => import("effect/Effect").Effect<{
630
1328
  readonly id: string & import("effect/Brand").Brand<"EmailSenderId">;
631
1329
  readonly email: string;
@@ -902,7 +1600,7 @@ export declare const createForwardingRule: (input: {
902
1600
  readonly priority: number;
903
1601
  readonly isActive: boolean;
904
1602
  readonly createdAt: string;
905
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
1603
+ }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
906
1604
  export declare const deleteForwardingRule: (input: {
907
1605
  readonly id: string;
908
1606
  }) => import("effect/Effect").Effect<{