samva 0.6.0 → 0.7.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 (50) hide show
  1. package/README.md +2 -2
  2. package/dist/{categories-4u9Az4No.js → categories-DvsHUJtX.js} +9 -1
  3. package/dist/client/sdk.gen.d.ts +91 -18
  4. package/dist/client/types.gen.d.ts +510 -94
  5. package/dist/{client-DCM6U0-I.js → client-5O8KsY5Z.js} +490 -165
  6. package/dist/{client-attribution-DYUSAa76.js → client-attribution-27MNycCV.js} +2 -2
  7. package/dist/effect/analytics.js +1 -1
  8. package/dist/effect/api-keys.js +1 -1
  9. package/dist/effect/attachments.js +1 -1
  10. package/dist/effect/brands.d.ts +212 -0
  11. package/dist/effect/brands.js +24 -0
  12. package/dist/effect/campaigns.d.ts +1 -1
  13. package/dist/effect/campaigns.js +1 -1
  14. package/dist/effect/categories.js +1 -1
  15. package/dist/effect/client.js +1 -1
  16. package/dist/effect/contact-groups.js +1 -1
  17. package/dist/effect/contacts.js +1 -1
  18. package/dist/effect/conversations.d.ts +12 -3
  19. package/dist/effect/conversations.js +1 -1
  20. package/dist/effect/custom-fields.js +1 -1
  21. package/dist/effect/email.d.ts +17 -6
  22. package/dist/effect/email.js +2 -2
  23. package/dist/effect/generated-metadata.d.ts +8 -0
  24. package/dist/effect/generated.d.ts +2742 -1810
  25. package/dist/effect/index.d.ts +2 -2
  26. package/dist/effect/index.js +4 -4
  27. package/dist/effect/internal/operation.d.ts +10 -4
  28. package/dist/effect/media.js +1 -1
  29. package/dist/effect/messages.d.ts +22 -6
  30. package/dist/effect/messages.js +1 -1
  31. package/dist/effect/operations.js +1 -1
  32. package/dist/effect/organizations.d.ts +0 -264
  33. package/dist/effect/organizations.js +1 -1
  34. package/dist/effect/retry.js +1 -1
  35. package/dist/effect/scheduled-messages.js +1 -1
  36. package/dist/effect/templates.d.ts +230 -0
  37. package/dist/effect/templates.js +7 -3
  38. package/dist/effect/unsubscribe-groups.js +1 -1
  39. package/dist/effect/webhooks.js +2 -2
  40. package/dist/index.js +2 -2
  41. package/dist/{operation-02YX3hY9.js → operation-Cb5V9FJ7.js} +29 -5
  42. package/dist/promises/errors.gen.d.ts +22 -4
  43. package/dist/promises/index.d.ts +3 -3
  44. package/dist/promises/index.js +2 -2
  45. package/dist/promises/types.gen.d.ts +1 -1
  46. package/dist/{promises-8MaPNAam.js → promises-C2yyw-pf.js} +329 -36
  47. package/dist/service-map.d.ts +36 -6
  48. package/package.json +7 -7
  49. package/dist/effect/design.d.ts +0 -209
  50. package/dist/effect/design.js +0 -13
@@ -1,4 +1,4 @@
1
- import { n as clientAttribution, t as CLIENT_ATTRIBUTION_HEADER } from "./client-attribution-DYUSAa76.js";
1
+ import { n as clientAttribution, t as CLIENT_ATTRIBUTION_HEADER } from "./client-attribution-27MNycCV.js";
2
2
  import { Context, Effect, Layer, Schema, SchemaTransformation } from "effect";
3
3
  import * as Schema$1 from "effect/Schema";
4
4
  import { HttpApi, HttpApiClient, HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema, HttpApiSecurity, OpenApi } from "effect/unstable/httpapi";
@@ -93,6 +93,32 @@ const OrganizationId = Schema$1.String.pipe(Schema$1.brand("OrganizationId")).ch
93
93
  expected: "a string matching the RegExp ^org_[0-9a-hjkmnp-tv-z]{16,24}$",
94
94
  identifier: "OrganizationId"
95
95
  }));
96
+ const BrandId = Schema$1.String.pipe(Schema$1.brand("BrandId")).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^brand_[0-9a-hjkmnp-tv-z]{16,24}$")).annotate({
97
+ expected: "a string matching the RegExp ^brand_[0-9a-hjkmnp-tv-z]{16,24}$",
98
+ identifier: "BrandId"
99
+ }));
100
+ const BrandAssets = Schema$1.Struct({
101
+ logoUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^https:\\/\\/[^\\s]+$")).annotate({ expected: "a string matching the RegExp ^https:\\/\\/[^\\s]+$" })), Schema$1.Null])),
102
+ logoDarkUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^https:\\/\\/[^\\s]+$")).annotate({ expected: "a string matching the RegExp ^https:\\/\\/[^\\s]+$" })), Schema$1.Null])),
103
+ iconUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^https:\\/\\/[^\\s]+$")).annotate({ expected: "a string matching the RegExp ^https:\\/\\/[^\\s]+$" })), Schema$1.Null]))
104
+ }).annotate({ identifier: "BrandAssets" });
105
+ const BrandAddress = Schema$1.Struct({
106
+ street1: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
107
+ street2: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
108
+ city: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
109
+ region: Schema$1.String,
110
+ postalCode: Schema$1.String,
111
+ country: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" }))
112
+ }).annotate({ identifier: "BrandAddress" });
113
+ const BrandSocialLink = Schema$1.Struct({
114
+ label: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(64).annotate({ expected: "a value with a length of at most 64" })),
115
+ url: Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^https:\\/\\/[^\\s]+$")).annotate({ expected: "a string matching the RegExp ^https:\\/\\/[^\\s]+$" }))
116
+ }).annotate({ identifier: "BrandSocialLink" });
117
+ var ConflictError = class extends Schema$1.TaggedError()("ConflictError", Schema$1.Struct({
118
+ message: Schema$1.String,
119
+ resource: Schema$1.String,
120
+ id: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
121
+ })) {};
96
122
  const CampaignId = Schema$1.String.pipe(Schema$1.brand("CampaignId")).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^camp_[0-9a-hjkmnp-tv-z]{16,24}$")).annotate({
97
123
  expected: "a string matching the RegExp ^camp_[0-9a-hjkmnp-tv-z]{16,24}$",
98
124
  identifier: "CampaignId"
@@ -157,15 +183,15 @@ const SendsSeries = Schema$1.Array(Schema$1.Finite.check(Schema$1.isInt().annota
157
183
  identifier: "SendsSeries"
158
184
  });
159
185
  var FlagDisabledError = class extends Schema$1.TaggedError()("FlagDisabledError", Schema$1.Struct({ flag: Schema$1.String })) {};
160
- var ConflictError = class extends Schema$1.TaggedError()("ConflictError", Schema$1.Struct({
161
- message: Schema$1.String,
162
- resource: Schema$1.String,
163
- id: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
164
- })) {};
165
186
  const EmailDomainId = Schema$1.String.pipe(Schema$1.brand("EmailDomainId")).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^dom_[0-9a-hjkmnp-tv-z]{16,24}$")).annotate({
166
187
  expected: "a string matching the RegExp ^dom_[0-9a-hjkmnp-tv-z]{16,24}$",
167
188
  identifier: "EmailDomainId"
168
189
  }));
190
+ var BrandAddressRequiredError = class extends Schema$1.TaggedError()("BrandAddressRequiredError", Schema$1.Struct({
191
+ message: Schema$1.String,
192
+ brand: Schema$1.Union([Schema$1.String, Schema$1.Null])
193
+ })) {};
194
+ var CampaignFooterRequiredError = class extends Schema$1.TaggedError()("CampaignFooterRequiredError", Schema$1.Struct({ message: Schema$1.String })) {};
169
195
  var ExternalServiceError = class extends Schema$1.TaggedError()("ExternalServiceError", Schema$1.Struct({ message: Schema$1.String })) {};
170
196
  const CampaignRecipientId = Schema$1.String.pipe(Schema$1.brand("CampaignRecipientId")).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^crcpt_[0-9a-hjkmnp-tv-z]{16,24}$")).annotate({
171
197
  expected: "a string matching the RegExp ^crcpt_[0-9a-hjkmnp-tv-z]{16,24}$",
@@ -253,7 +279,6 @@ const CustomFieldDefinitionId = Schema$1.String.pipe(Schema$1.brand("CustomField
253
279
  expected: "a string matching the RegExp ^cfield_[0-9a-hjkmnp-tv-z]{16,24}$",
254
280
  identifier: "CustomFieldDefinitionId"
255
281
  }));
256
- const ThemeColors = Schema$1.Record(Schema$1.String, Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^#[0-9a-f]{6}$")).annotate({ expected: "a string matching the RegExp ^#[0-9a-f]{6}$" }))).annotate({ identifier: "ThemeColors" });
257
282
  const BlockedEmailId = Schema$1.String.pipe(Schema$1.brand("BlockedEmailId")).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^blk_[0-9a-hjkmnp-tv-z]{16,24}$")).annotate({
258
283
  expected: "a string matching the RegExp ^blk_[0-9a-hjkmnp-tv-z]{16,24}$",
259
284
  identifier: "BlockedEmailId"
@@ -448,8 +473,7 @@ var OnboardingReviewRequiredError = class extends Schema$1.TaggedError()("Onboar
448
473
  decision: Schema$1.Literals([
449
474
  "undecided",
450
475
  "approved",
451
- "rejected",
452
- "exempt"
476
+ "rejected"
453
477
  ]),
454
478
  stage: Schema$1.Literals([
455
479
  "collecting",
@@ -514,6 +538,11 @@ const TemplateFromDefault = Schema$1.Struct({
514
538
  email: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
515
539
  name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
516
540
  }).annotate({ identifier: "TemplateFromDefault" });
541
+ const TemplatePublicationBrand = Schema$1.Struct({
542
+ slug: Schema$1.String.annotate({ description: "The brand the publication imports." }).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
543
+ digest: Schema$1.String.annotate({ description: "The brand's digest when the publication was built." }),
544
+ stale: Schema$1.Boolean.annotate({ description: "Whether the brand has changed since this publication was built. Publishing the same commit again picks up the change." })
545
+ }).annotate({ identifier: "TemplatePublicationBrand" });
517
546
  const WebhookDeliveryCounts = Schema$1.Struct({
518
547
  total: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" })),
519
548
  pending: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" })),
@@ -540,6 +569,21 @@ const WebhookDailyDeliveries = Schema$1.Struct({
540
569
  exhausted: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" })),
541
570
  cancelled: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" }))
542
571
  }).annotate({ identifier: "WebhookDailyDeliveries" });
572
+ Schema$1.Struct({
573
+ entryPath: Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })),
574
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(200).annotate({ expected: "a value with a length of at most 200" })),
575
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })),
576
+ description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
577
+ category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
578
+ "transactional",
579
+ "marketing",
580
+ "support",
581
+ "notification",
582
+ "verification",
583
+ "reminder",
584
+ "alert"
585
+ ]), Schema$1.Null]), Schema$1.Null]))
586
+ }).annotate({ identifier: "AddTemplateEntryPayload" });
543
587
  Schema$1.Struct({
544
588
  identity: Schema$1.Literals([
545
589
  "new",
@@ -566,6 +610,7 @@ const CreateTemplatePayload = Schema$1.Struct({
566
610
  projectName: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(200).annotate({ expected: "a value with a length of at most 200" })), Schema$1.Null])),
567
611
  slug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })), Schema$1.Null])),
568
612
  galleryTemplateId: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(128).annotate({ expected: "a value with a length of at most 128" })), Schema$1.Null])),
613
+ useBrand: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean.annotate({ description: "With `galleryTemplateId`: whether the new project's `theme.css` imports the organization's default brand (`@import \"samva:brand\";`) over the starter's look. Defaults to false." }), Schema$1.Null])),
569
614
  description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
570
615
  category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
571
616
  "transactional",
@@ -659,6 +704,11 @@ const SubmissionCredential = Schema$1.Union([
659
704
  }),
660
705
  Schema$1.Struct({ kind: Schema$1.Literal("session") })
661
706
  ]).annotate({ identifier: "SubmissionCredential" });
707
+ const BrandFooter = Schema$1.Struct({
708
+ companyName: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(255).annotate({ expected: "a value with a length of at most 255" })), Schema$1.Null])),
709
+ address: Schema$1.optionalKey(Schema$1.Union([BrandAddress, Schema$1.Null])),
710
+ socialLinks: Schema$1.optionalKey(Schema$1.Union([Schema$1.Array(BrandSocialLink).check(Schema$1.isMaxLength(12).annotate({ expected: "a value with a length of at most 12" })), Schema$1.Null]))
711
+ }).annotate({ identifier: "BrandFooter" });
662
712
  const EmailAttachment = Schema$1.Struct({
663
713
  filename: Schema$1.String,
664
714
  content: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$")).annotate({ expected: "a string matching the RegExp ^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$" })), Schema$1.Null])),
@@ -703,6 +753,30 @@ const CampaignPolicy = Schema$1.Struct({
703
753
  unsubscribeGroupId: Schema$1.optionalKey(Schema$1.Union([UnsubscribeId, Schema$1.Null])),
704
754
  pageSize: Schema$1.optionalKey(Schema$1.Union([Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(100).annotate({ expected: "a value greater than or equal to 100" })).check(Schema$1.isLessThanOrEqualTo(1e3).annotate({ expected: "a value less than or equal to 1000" })), Schema$1.Null]))
705
755
  }).annotate({ identifier: "CampaignPolicy" });
756
+ const Organization = Schema$1.Struct({
757
+ id: Schema$1.String,
758
+ billingAccountId: Schema$1.String,
759
+ name: Schema$1.String,
760
+ slug: Schema$1.String,
761
+ countryCode: Schema$1.String,
762
+ timezone: Schema$1.String,
763
+ plan: Schema$1.String,
764
+ isActive: Schema$1.Boolean,
765
+ createdAt: Schema$1.String,
766
+ updatedAt: Schema$1.String,
767
+ metadata: Schema$1.Union([Schema$1.Record(Schema$1.String, JsonValue), Schema$1.Null]),
768
+ replyToDefault: Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]),
769
+ defaultUnsubscribeGroupId: Schema$1.Union([UnsubscribeId, Schema$1.Null]),
770
+ emailFooterEnabledDefault: Schema$1.Union([Schema$1.Boolean, Schema$1.Null]),
771
+ messagesUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
772
+ messagesUsedThisMonth: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
773
+ emailUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
774
+ emailUsedThisMonth: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
775
+ contactsUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
776
+ conversationsUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
777
+ teamMembersUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
778
+ messagesResetAt: Schema$1.Union([Schema$1.String, Schema$1.Null])
779
+ }).annotate({ identifier: "Organization" });
706
780
  const MessageContent = Schema$1.Struct({
707
781
  text: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
708
782
  html: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
@@ -891,58 +965,6 @@ const ConversationParticipant = Schema$1.Struct({
891
965
  ]),
892
966
  contact: MessageContact
893
967
  }).annotate({ identifier: "ConversationParticipant" });
894
- const Design = Schema$1.Struct({
895
- theme: Schema$1.optionalKey(Schema$1.Union([Schema$1.Struct({
896
- colors: Schema$1.optionalKey(Schema$1.Union([ThemeColors, Schema$1.Null])),
897
- colorsDark: Schema$1.optionalKey(Schema$1.Union([ThemeColors, Schema$1.Null])),
898
- radiusPx: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" }))), Schema$1.Null])),
899
- fontFamilies: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Struct({
900
- source: Schema$1.Literals([
901
- "system",
902
- "google",
903
- "custom"
904
- ]),
905
- family: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
906
- fallback: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
907
- faces: Schema$1.optionalKey(Schema$1.Union([Schema$1.Array(Schema$1.Struct({
908
- weight: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThanOrEqualTo(100).annotate({ expected: "a value greater than or equal to 100" })).check(Schema$1.isLessThanOrEqualTo(900).annotate({ expected: "a value less than or equal to 900" })),
909
- style: Schema$1.Literals(["normal", "italic"]),
910
- src: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
911
- unicodeRange: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
912
- })).check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })), Schema$1.Null]))
913
- })), Schema$1.Null])),
914
- fontWeights: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThanOrEqualTo(100).annotate({ expected: "a value greater than or equal to 100" })).check(Schema$1.isLessThanOrEqualTo(900).annotate({ expected: "a value less than or equal to 900" }))), Schema$1.Null])),
915
- text: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Struct({
916
- sizePx: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThan(0).annotate({ expected: "a value greater than 0" })),
917
- lineHeightPx: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThan(0).annotate({ expected: "a value greater than 0" }))
918
- })), Schema$1.Null])),
919
- leading: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" }))), Schema$1.Null])),
920
- spacingPx: Schema$1.optionalKey(Schema$1.Union([Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThan(0).annotate({ expected: "a value greater than 0" })), Schema$1.Null])),
921
- containerPx: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })).check(Schema$1.isGreaterThan(0).annotate({ expected: "a value greater than 0" }))), Schema$1.Null])),
922
- tracking: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" }))), Schema$1.Null]))
923
- }), Schema$1.Null])),
924
- assets: Schema$1.optionalKey(Schema$1.Union([Schema$1.Struct({
925
- logoUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
926
- logoDarkUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
927
- iconUrl: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null]))
928
- }), Schema$1.Null])),
929
- footer: Schema$1.optionalKey(Schema$1.Union([Schema$1.Struct({
930
- companyName: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
931
- address: Schema$1.optionalKey(Schema$1.Union([Schema$1.Struct({
932
- street1: Schema$1.String,
933
- street2: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
934
- city: Schema$1.String,
935
- region: Schema$1.String,
936
- postalCode: Schema$1.String,
937
- country: Schema$1.String
938
- }), Schema$1.Null])),
939
- socialLinks: Schema$1.optionalKey(Schema$1.Union([Schema$1.Array(Schema$1.Struct({
940
- label: Schema$1.String,
941
- url: Schema$1.String
942
- })), Schema$1.Null])),
943
- customHtml: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
944
- }), Schema$1.Null]))
945
- }).annotate({ identifier: "Design" });
946
968
  const WebhookEndpoint = Schema$1.Struct({
947
969
  id: WebhookEndpointId,
948
970
  name: Schema$1.String,
@@ -1117,8 +1139,12 @@ const OnboardingReviewStatus = Schema$1.Struct({
1117
1139
  decision: Schema$1.Literals([
1118
1140
  "undecided",
1119
1141
  "approved",
1120
- "rejected",
1121
- "exempt"
1142
+ "rejected"
1143
+ ]),
1144
+ trustTier: Schema$1.Literals([
1145
+ "screened",
1146
+ "probation",
1147
+ "established"
1122
1148
  ]),
1123
1149
  stage: Schema$1.Literals([
1124
1150
  "collecting",
@@ -1279,6 +1305,24 @@ const TemplateFamily = Schema$1.Struct({
1279
1305
  createdAt: Schema$1.String,
1280
1306
  updatedAt: Schema$1.String
1281
1307
  }).annotate({ identifier: "TemplateFamily" });
1308
+ const UpdateTemplatePayload = Schema$1.Struct({ data: Schema$1.Struct({
1309
+ name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
1310
+ slug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })), Schema$1.Null])),
1311
+ entryPath: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })), Schema$1.Null])),
1312
+ description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
1313
+ category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
1314
+ "transactional",
1315
+ "marketing",
1316
+ "support",
1317
+ "notification",
1318
+ "verification",
1319
+ "reminder",
1320
+ "alert"
1321
+ ]), Schema$1.Null]), Schema$1.Null])),
1322
+ fromDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([TemplateFromDefault, Schema$1.Null]), Schema$1.Null])),
1323
+ replyToDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]), Schema$1.Null])),
1324
+ isActive: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean, Schema$1.Null]))
1325
+ }) }).annotate({ identifier: "UpdateTemplatePayload" });
1282
1326
  const Template = Schema$1.Struct({
1283
1327
  id: TemplateId,
1284
1328
  organizationId: OrganizationId,
@@ -1302,6 +1346,7 @@ const Template = Schema$1.Struct({
1302
1346
  headers: Schema$1.Union([Schema$1.Record(Schema$1.String, Schema$1.String), Schema$1.Null])
1303
1347
  }), Schema$1.Null]),
1304
1348
  publicationId: Schema$1.Union([TemplatePublicationId, Schema$1.Null]),
1349
+ brand: Schema$1.Union([TemplatePublicationBrand, Schema$1.Null]),
1305
1350
  inputContractId: Schema$1.Union([TemplateInputContractId, Schema$1.Null]),
1306
1351
  inputSchema: Schema$1.Union([Schema$1.Record(Schema$1.String, JsonValue), Schema$1.Null]),
1307
1352
  usageCount: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" })),
@@ -1314,23 +1359,6 @@ const Template = Schema$1.Struct({
1314
1359
  createdAt: Schema$1.String,
1315
1360
  updatedAt: Schema$1.String
1316
1361
  }).annotate({ identifier: "Template" });
1317
- const UpdateTemplatePayload = Schema$1.Struct({ data: Schema$1.Struct({
1318
- name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
1319
- slug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })), Schema$1.Null])),
1320
- description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
1321
- category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
1322
- "transactional",
1323
- "marketing",
1324
- "support",
1325
- "notification",
1326
- "verification",
1327
- "reminder",
1328
- "alert"
1329
- ]), Schema$1.Null]), Schema$1.Null])),
1330
- fromDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([TemplateFromDefault, Schema$1.Null]), Schema$1.Null])),
1331
- replyToDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]), Schema$1.Null])),
1332
- isActive: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean, Schema$1.Null]))
1333
- }) }).annotate({ identifier: "UpdateTemplatePayload" });
1334
1362
  const WebhookEndpointListItem = Schema$1.Struct({
1335
1363
  id: WebhookEndpointId,
1336
1364
  name: Schema$1.String,
@@ -1410,6 +1438,33 @@ const MessageSubmission = Schema$1.Struct({
1410
1438
  userId: Schema$1.Union([UserId, Schema$1.Null]),
1411
1439
  client: Schema$1.Union([SubmissionClient, Schema$1.Null])
1412
1440
  }).annotate({ identifier: "MessageSubmission" });
1441
+ const Brand = Schema$1.Struct({
1442
+ id: BrandId,
1443
+ slug: Schema$1.String.annotate({ description: "The brand's handle, unique in the organization; `samva:brand/<slug>` names it." }).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
1444
+ name: Schema$1.String,
1445
+ isDefault: Schema$1.Boolean.annotate({ description: "Whether bare `samva:brand` and domains without a brand resolve to this brand." }),
1446
+ css: Schema$1.String.annotate({ description: "Brand theme CSS: `@theme` variables, one dark-mode `@theme` of colors, and `@font-face` rules with https WOFF2 sources." }),
1447
+ assets: BrandAssets,
1448
+ footer: BrandFooter,
1449
+ digest: Schema$1.String.annotate({ description: "SHA-256 of the brand's css, assets and footer. A publication built against a different digest predates the brand's current content." }),
1450
+ createdAt: Schema$1.String,
1451
+ updatedAt: Schema$1.String
1452
+ }).annotate({ identifier: "Brand" });
1453
+ const CreateBrand = Schema$1.Struct({
1454
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
1455
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(120).annotate({ expected: "a value with a length of at most 120" })),
1456
+ css: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(32768).annotate({ expected: "a value with a length of at most 32768" })), Schema$1.Null])),
1457
+ assets: Schema$1.optionalKey(Schema$1.Union([BrandAssets, Schema$1.Null])),
1458
+ footer: Schema$1.optionalKey(Schema$1.Union([BrandFooter, Schema$1.Null])),
1459
+ isDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean, Schema$1.Null]))
1460
+ }).annotate({ identifier: "CreateBrand" });
1461
+ const UpdateBrand = Schema$1.Struct({
1462
+ newSlug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.annotate({ description: "Renames the brand. Projects importing `samva:brand/<old slug>` stop building until they import the new slug." }).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })), Schema$1.Null])),
1463
+ name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(120).annotate({ expected: "a value with a length of at most 120" })), Schema$1.Null])),
1464
+ css: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(32768).annotate({ expected: "a value with a length of at most 32768" })), Schema$1.Null])),
1465
+ assets: Schema$1.optionalKey(Schema$1.Union([BrandAssets, Schema$1.Null])),
1466
+ footer: Schema$1.optionalKey(Schema$1.Union([BrandFooter, Schema$1.Null]))
1467
+ }).annotate({ identifier: "UpdateBrand" });
1413
1468
  const EmailAttachments = Schema$1.Union([Schema$1.Array(EmailAttachment).check(Schema$1.isMaxLength(10).annotate({ expected: "a value with a length of at most 10" })), Schema$1.Null]).annotate({ identifier: "EmailAttachments" });
1414
1469
  const CompletedMedia = Schema$1.Struct({
1415
1470
  media: Media,
@@ -1593,7 +1648,6 @@ const EmailDomainVerification = Schema$1.Struct({
1593
1648
  "domain-observation-stale",
1594
1649
  "operator-paused",
1595
1650
  "sending-paused",
1596
- "sending-status-stale",
1597
1651
  "sending-status-unknown",
1598
1652
  "ready"
1599
1653
  ])
@@ -1814,35 +1868,6 @@ const ConversationDetail = Schema$1.Struct({
1814
1868
  createdBy: Schema$1.Union([ActorId, Schema$1.Null]),
1815
1869
  participants: Schema$1.Array(ConversationParticipant)
1816
1870
  }).annotate({ identifier: "ConversationDetail" });
1817
- const DesignSettings = Schema$1.Struct({
1818
- design: Schema$1.Union([Design, Schema$1.Null]),
1819
- footerCompleteness: Schema$1.Struct({ missingAddress: Schema$1.Boolean })
1820
- }).annotate({ identifier: "DesignSettings" });
1821
- const Organization = Schema$1.Struct({
1822
- id: Schema$1.String,
1823
- billingAccountId: Schema$1.String,
1824
- name: Schema$1.String,
1825
- slug: Schema$1.String,
1826
- countryCode: Schema$1.String,
1827
- timezone: Schema$1.String,
1828
- plan: Schema$1.String,
1829
- isActive: Schema$1.Boolean,
1830
- createdAt: Schema$1.String,
1831
- updatedAt: Schema$1.String,
1832
- metadata: Schema$1.Union([Schema$1.Record(Schema$1.String, JsonValue), Schema$1.Null]),
1833
- design: Schema$1.Union([Design, Schema$1.Null]),
1834
- replyToDefault: Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]),
1835
- defaultUnsubscribeGroupId: Schema$1.Union([UnsubscribeId, Schema$1.Null]),
1836
- emailFooterEnabledDefault: Schema$1.Union([Schema$1.Boolean, Schema$1.Null]),
1837
- messagesUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1838
- messagesUsedThisMonth: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1839
- emailUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1840
- emailUsedThisMonth: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1841
- contactsUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1842
- conversationsUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1843
- teamMembersUsed: Schema$1.Finite.check(Schema$1.isFinite().annotate({ expected: "a finite number" })),
1844
- messagesResetAt: Schema$1.Union([Schema$1.String, Schema$1.Null])
1845
- }).annotate({ identifier: "Organization" });
1846
1871
  const DomainWarming = Schema$1.Struct({
1847
1872
  domain: DomainWarmingDomainRef,
1848
1873
  plan: Schema$1.Union([DomainWarmingPlan, Schema$1.Null]),
@@ -1933,8 +1958,10 @@ const Message = Schema$1.Struct({
1933
1958
  "retry",
1934
1959
  "campaign-paused",
1935
1960
  "domain-warming",
1936
- "onboarding-review"
1937
- ]), Schema$1.Null])
1961
+ "onboarding-review",
1962
+ "content-review"
1963
+ ]), Schema$1.Null]),
1964
+ reviewExpectedAt: Schema$1.Union([Schema$1.String, Schema$1.Null])
1938
1965
  }), Schema$1.Null]),
1939
1966
  id: Schema$1.String,
1940
1967
  messageId: Schema$1.String,
@@ -2010,8 +2037,22 @@ const Message = Schema$1.Struct({
2010
2037
  processedAt: Schema$1.Union([Schema$1.String, Schema$1.Null]),
2011
2038
  createdAt: Schema$1.String,
2012
2039
  updatedAt: Schema$1.String
2013
- }))
2040
+ })),
2041
+ waitReason: Schema$1.Union([Schema$1.Literals([
2042
+ "rate",
2043
+ "daily-quota",
2044
+ "domain-health",
2045
+ "sending-paused",
2046
+ "upstream-unavailable",
2047
+ "retry",
2048
+ "campaign-paused",
2049
+ "domain-warming",
2050
+ "onboarding-review",
2051
+ "content-review"
2052
+ ]), Schema$1.Null]),
2053
+ reviewExpectedAt: Schema$1.Union([Schema$1.String, Schema$1.Null])
2014
2054
  }).annotate({ identifier: "Message" });
2055
+ const BrandList = Schema$1.Struct({ items: Schema$1.Array(Brand) }).annotate({ identifier: "BrandList" });
2015
2056
  const EmailContent = Schema$1.Struct({
2016
2057
  subject: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
2017
2058
  html: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
@@ -2469,6 +2510,64 @@ const AttachmentsDownloadUrl403 = ForbiddenError;
2469
2510
  const AttachmentsDownloadUrl404 = ResourceNotFoundError;
2470
2511
  const AttachmentsDownloadUrl500 = InternalError;
2471
2512
  const AttachmentsDownloadUrl504 = GatewayTimeoutError;
2513
+ const BrandsList200 = BrandList;
2514
+ const BrandsList401 = UnauthorizedError;
2515
+ const BrandsList403 = ForbiddenError;
2516
+ const BrandsList500 = InternalError;
2517
+ const BrandsList504 = GatewayTimeoutError;
2518
+ const BrandsCreateRequestJson = Schema$1.Struct({
2519
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
2520
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(120).annotate({ expected: "a value with a length of at most 120" })),
2521
+ css: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(32768).annotate({ expected: "a value with a length of at most 32768" })), Schema$1.Null])),
2522
+ assets: Schema$1.optionalKey(Schema$1.Union([BrandAssets, Schema$1.Null])),
2523
+ footer: Schema$1.optionalKey(Schema$1.Union([BrandFooter, Schema$1.Null])),
2524
+ isDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean, Schema$1.Null]))
2525
+ });
2526
+ const BrandsCreate201 = Brand;
2527
+ const BrandsCreate401 = UnauthorizedError;
2528
+ const BrandsCreate403 = ForbiddenError;
2529
+ const BrandsCreate409 = ConflictError;
2530
+ const BrandsCreate422 = ValidationError;
2531
+ const BrandsCreate500 = InternalError;
2532
+ const BrandsCreate504 = GatewayTimeoutError;
2533
+ const BrandsGetPathParams = Schema$1.Struct({ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })) });
2534
+ const BrandsGet200 = Brand;
2535
+ const BrandsGet401 = UnauthorizedError;
2536
+ const BrandsGet403 = ForbiddenError;
2537
+ const BrandsGet404 = ResourceNotFoundError;
2538
+ const BrandsGet500 = InternalError;
2539
+ const BrandsGet504 = GatewayTimeoutError;
2540
+ const BrandsRemovePathParams = Schema$1.Struct({ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })) });
2541
+ const BrandsRemove200 = SuccessResponse;
2542
+ const BrandsRemove401 = UnauthorizedError;
2543
+ const BrandsRemove403 = ForbiddenError;
2544
+ const BrandsRemove404 = ResourceNotFoundError;
2545
+ const BrandsRemove409 = ConflictError;
2546
+ const BrandsRemove500 = InternalError;
2547
+ const BrandsRemove504 = GatewayTimeoutError;
2548
+ const BrandsUpdatePathParams = Schema$1.Struct({ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })) });
2549
+ const BrandsUpdateRequestJson = Schema$1.Struct({
2550
+ newSlug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.annotate({ description: "Renames the brand. Projects importing `samva:brand/<old slug>` stop building until they import the new slug." }).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })), Schema$1.Null])),
2551
+ name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(120).annotate({ expected: "a value with a length of at most 120" })), Schema$1.Null])),
2552
+ css: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(32768).annotate({ expected: "a value with a length of at most 32768" })), Schema$1.Null])),
2553
+ assets: Schema$1.optionalKey(Schema$1.Union([BrandAssets, Schema$1.Null])),
2554
+ footer: Schema$1.optionalKey(Schema$1.Union([BrandFooter, Schema$1.Null]))
2555
+ });
2556
+ const BrandsUpdate200 = Brand;
2557
+ const BrandsUpdate401 = UnauthorizedError;
2558
+ const BrandsUpdate403 = ForbiddenError;
2559
+ const BrandsUpdate404 = ResourceNotFoundError;
2560
+ const BrandsUpdate409 = ConflictError;
2561
+ const BrandsUpdate422 = ValidationError;
2562
+ const BrandsUpdate500 = InternalError;
2563
+ const BrandsUpdate504 = GatewayTimeoutError;
2564
+ const BrandsSetDefaultPathParams = Schema$1.Struct({ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })) });
2565
+ const BrandsSetDefault200 = Brand;
2566
+ const BrandsSetDefault401 = UnauthorizedError;
2567
+ const BrandsSetDefault403 = ForbiddenError;
2568
+ const BrandsSetDefault404 = ResourceNotFoundError;
2569
+ const BrandsSetDefault500 = InternalError;
2570
+ const BrandsSetDefault504 = GatewayTimeoutError;
2472
2571
  const CampaignsListQuery = Schema$1.Struct({
2473
2572
  status: Schema$1.optionalKey(Schema$1.Union([Schema$1.Literals(["draft", "archived"]), Schema$1.Null])),
2474
2573
  page: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
@@ -2558,7 +2657,11 @@ const CampaignsScheduleRun401 = UnauthorizedError;
2558
2657
  const CampaignsScheduleRun403 = Schema$1.Union([FlagDisabledError, ForbiddenError]);
2559
2658
  const CampaignsScheduleRun404 = ResourceNotFoundError;
2560
2659
  const CampaignsScheduleRun409 = ConflictError;
2561
- const CampaignsScheduleRun422 = ValidationError;
2660
+ const CampaignsScheduleRun422 = Schema$1.Union([
2661
+ ValidationError,
2662
+ BrandAddressRequiredError,
2663
+ CampaignFooterRequiredError
2664
+ ]);
2562
2665
  const CampaignsScheduleRun500 = InternalError;
2563
2666
  const CampaignsScheduleRun502 = ExternalServiceError;
2564
2667
  const CampaignsScheduleRun504 = GatewayTimeoutError;
@@ -3513,18 +3616,6 @@ const CustomFieldsUpdate404 = ResourceNotFoundError;
3513
3616
  const CustomFieldsUpdate422 = ValidationError;
3514
3617
  const CustomFieldsUpdate500 = InternalError;
3515
3618
  const CustomFieldsUpdate504 = GatewayTimeoutError;
3516
- const DesignGet200 = DesignSettings;
3517
- const DesignGet401 = UnauthorizedError;
3518
- const DesignGet403 = ForbiddenError;
3519
- const DesignGet500 = InternalError;
3520
- const DesignGet504 = GatewayTimeoutError;
3521
- const DesignUpdateRequestJson = Schema$1.Struct({ design: Schema$1.Union([Design, Schema$1.Null]) });
3522
- const DesignUpdate200 = DesignSettings;
3523
- const DesignUpdate401 = UnauthorizedError;
3524
- const DesignUpdate403 = ForbiddenError;
3525
- const DesignUpdate422 = ValidationError;
3526
- const DesignUpdate500 = InternalError;
3527
- const DesignUpdate504 = GatewayTimeoutError;
3528
3619
  const EmailListBlocksQuery = Schema$1.Struct({
3529
3620
  blockType: Schema$1.optionalKey(Schema$1.Union([Schema$1.Literals(["email", "domain"]), Schema$1.Null])),
3530
3621
  isActive: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.annotate({ contentMediaType: "application/json" }), Schema$1.Null])),
@@ -3739,7 +3830,8 @@ const EmailGetCatchAllStats500 = InternalError;
3739
3830
  const EmailGetCatchAllStats504 = GatewayTimeoutError;
3740
3831
  const EmailListDomainsQuery = Schema$1.Struct({
3741
3832
  page: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
3742
- limit: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
3833
+ limit: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
3834
+ sendable: Schema$1.optionalKey(Schema$1.Union([Schema$1.Literal("true"), Schema$1.Null]))
3743
3835
  });
3744
3836
  const EmailListDomains200 = Schema$1.Struct({
3745
3837
  items: Schema$1.Array(Schema$1.Struct({
@@ -3805,7 +3897,8 @@ const EmailUpdateDomainConfigRequestJson = Schema$1.Struct({
3805
3897
  clickTracking: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Boolean, Schema$1.Null]), Schema$1.Null])),
3806
3898
  replyTo: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]), Schema$1.Null])),
3807
3899
  unsubscribeGroupId: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([UnsubscribeId, Schema$1.Null]), Schema$1.Null])),
3808
- footerEnabled: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Boolean, Schema$1.Null]), Schema$1.Null]))
3900
+ footerEnabled: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Boolean, Schema$1.Null]), Schema$1.Null])),
3901
+ brandSlug: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })), Schema$1.Null]), Schema$1.Null]))
3809
3902
  });
3810
3903
  const EmailUpdateDomainConfig200 = Schema$1.Struct({
3811
3904
  id: EmailDomainId,
@@ -3813,7 +3906,8 @@ const EmailUpdateDomainConfig200 = Schema$1.Struct({
3813
3906
  clickTracking: Schema$1.Union([Schema$1.Boolean, Schema$1.Null]),
3814
3907
  replyTo: Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]),
3815
3908
  unsubscribeGroupId: Schema$1.Union([UnsubscribeId, Schema$1.Null]),
3816
- footerEnabled: Schema$1.Union([Schema$1.Boolean, Schema$1.Null])
3909
+ footerEnabled: Schema$1.Union([Schema$1.Boolean, Schema$1.Null]),
3910
+ brandSlug: Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })), Schema$1.Null])
3817
3911
  });
3818
3912
  const EmailUpdateDomainConfig401 = UnauthorizedError;
3819
3913
  const EmailUpdateDomainConfig403 = ForbiddenError;
@@ -4571,8 +4665,10 @@ const MessagesGetEmail200 = Schema$1.Struct({
4571
4665
  "retry",
4572
4666
  "campaign-paused",
4573
4667
  "domain-warming",
4574
- "onboarding-review"
4575
- ]), Schema$1.Null])
4668
+ "onboarding-review",
4669
+ "content-review"
4670
+ ]), Schema$1.Null]),
4671
+ reviewExpectedAt: Schema$1.Union([Schema$1.String, Schema$1.Null])
4576
4672
  }), Schema$1.Null]),
4577
4673
  id: Schema$1.String,
4578
4674
  messageId: Schema$1.String,
@@ -4892,7 +4988,6 @@ const OrganizationsUpdateRequestJson = Schema$1.Struct({
4892
4988
  timezone: Schema$1.optionalKey(Schema$1.Union([IanaTimezone, Schema$1.Null])),
4893
4989
  isActive: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean, Schema$1.Null])),
4894
4990
  metadata: Schema$1.optionalKey(Schema$1.Union([Schema$1.Record(Schema$1.String, JsonValue), Schema$1.Null])),
4895
- design: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Design, Schema$1.Null]), Schema$1.Null])),
4896
4991
  replyToDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Array(Schema$1.String), Schema$1.Null]), Schema$1.Null])),
4897
4992
  defaultUnsubscribeGroupId: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([UnsubscribeId, Schema$1.Null]), Schema$1.Null])),
4898
4993
  emailFooterEnabledDefault: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Boolean, Schema$1.Null]), Schema$1.Null]))
@@ -4961,6 +5056,7 @@ const TemplatesListQuery = Schema$1.Struct({
4961
5056
  "archived"
4962
5057
  ]), Schema$1.Null])),
4963
5058
  search: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
5059
+ projectId: Schema$1.optionalKey(Schema$1.Union([TemplateProjectId, Schema$1.Null])),
4964
5060
  sortBy: Schema$1.optionalKey(Schema$1.Union([Schema$1.Literals([
4965
5061
  "name",
4966
5062
  "createdAt",
@@ -4983,6 +5079,7 @@ const TemplatesCreateRequestJson = Schema$1.Struct({
4983
5079
  projectName: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(200).annotate({ expected: "a value with a length of at most 200" })), Schema$1.Null])),
4984
5080
  slug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })), Schema$1.Null])),
4985
5081
  galleryTemplateId: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(128).annotate({ expected: "a value with a length of at most 128" })), Schema$1.Null])),
5082
+ useBrand: Schema$1.optionalKey(Schema$1.Union([Schema$1.Boolean.annotate({ description: "With `galleryTemplateId`: whether the new project's `theme.css` imports the organization's default brand (`@import \"samva:brand\";`) over the starter's look. Defaults to false." }), Schema$1.Null])),
4986
5083
  description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
4987
5084
  category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
4988
5085
  "transactional",
@@ -5021,6 +5118,7 @@ const TemplatesUpdatePathParams = Schema$1.Struct({ id: TemplateId });
5021
5118
  const TemplatesUpdateRequestJson = Schema$1.Struct({ data: Schema$1.Struct({
5022
5119
  name: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
5023
5120
  slug: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })), Schema$1.Null])),
5121
+ entryPath: Schema$1.optionalKey(Schema$1.Union([Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })), Schema$1.Null])),
5024
5122
  description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
5025
5123
  category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
5026
5124
  "transactional",
@@ -5081,7 +5179,8 @@ const TemplatesPublishRequestJson = Schema$1.Struct({
5081
5179
  projectId: TemplateProjectId,
5082
5180
  commitSha: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })),
5083
5181
  entryPath: Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })),
5084
- expectedWorkspaceRevision: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" }))
5182
+ expectedWorkspaceRevision: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
5183
+ ifCurrentPublicationId: Schema$1.optionalKey(Schema$1.Union([TemplatePublicationId, Schema$1.Null]))
5085
5184
  });
5086
5185
  const TemplatesPublish201 = Schema$1.Struct({
5087
5186
  id: TemplatePublicationId,
@@ -5131,7 +5230,19 @@ const TemplatesPublish201 = Schema$1.Struct({
5131
5230
  treeSha: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })),
5132
5231
  entryPath: Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })),
5133
5232
  treeDigest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" }))
5134
- })
5233
+ }),
5234
+ brand: Schema$1.optionalKey(Schema$1.Struct({
5235
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
5236
+ css: Schema$1.String,
5237
+ assets: BrandAssets,
5238
+ footer: BrandFooter,
5239
+ digest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5240
+ rendersFooter: Schema$1.Literals([
5241
+ "every",
5242
+ "some",
5243
+ "none"
5244
+ ])
5245
+ }))
5135
5246
  }),
5136
5247
  executable: Schema$1.Struct({
5137
5248
  key: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
@@ -5273,7 +5384,19 @@ const TemplatesGetPublication200 = Schema$1.Struct({
5273
5384
  treeSha: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })),
5274
5385
  entryPath: Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })),
5275
5386
  treeDigest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" }))
5276
- })
5387
+ }),
5388
+ brand: Schema$1.optionalKey(Schema$1.Struct({
5389
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" })),
5390
+ css: Schema$1.String,
5391
+ assets: BrandAssets,
5392
+ footer: BrandFooter,
5393
+ digest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5394
+ rendersFooter: Schema$1.Literals([
5395
+ "every",
5396
+ "some",
5397
+ "none"
5398
+ ])
5399
+ }))
5277
5400
  }),
5278
5401
  executable: Schema$1.Struct({
5279
5402
  key: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })),
@@ -5592,6 +5715,113 @@ const TemplatesPatchWorkspace404 = ResourceNotFoundError;
5592
5715
  const TemplatesPatchWorkspace409 = ConflictError;
5593
5716
  const TemplatesPatchWorkspace500 = InternalError;
5594
5717
  const TemplatesPatchWorkspace504 = GatewayTimeoutError;
5718
+ const TemplatesPutWorkspaceAssetPathParams = Schema$1.Struct({ id: TemplateId });
5719
+ const TemplatesPutWorkspaceAssetRequestJson = Schema$1.Struct({
5720
+ expectedRevision: Schema$1.String,
5721
+ path: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$)).{1,1024}$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$)).{1,1024}$" })),
5722
+ contentBase64: Schema$1.String,
5723
+ replace: Schema$1.Boolean,
5724
+ idempotencyKey: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(255).annotate({ expected: "a value with a length of at most 255" }))
5725
+ });
5726
+ const TemplatesPutWorkspaceAsset200 = Schema$1.Struct({
5727
+ workspace: Schema$1.Struct({
5728
+ projectId: TemplateProjectId,
5729
+ organizationId: Schema$1.Union([OrganizationId, Schema$1.Null]),
5730
+ ownerEpoch: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(0).annotate({ expected: "a value greater than or equal to 0" })),
5731
+ repositoryName: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$")).annotate({ expected: "a string matching the RegExp ^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$" })),
5732
+ defaultBranch: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(255).annotate({ expected: "a value with a length of at most 255" })),
5733
+ baseCommit: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })),
5734
+ remoteHead: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })),
5735
+ pendingRemoteHead: Schema$1.Union([Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{40}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{40}$" })), Schema$1.Null]),
5736
+ revision: Schema$1.String,
5737
+ overlay: Schema$1.Record(Schema$1.String, Schema$1.Union([Schema$1.String, Schema$1.Null])),
5738
+ assetChanges: Schema$1.Array(Schema$1.Struct({
5739
+ path: Schema$1.String,
5740
+ status: Schema$1.Literals([
5741
+ "added",
5742
+ "modified",
5743
+ "deleted"
5744
+ ])
5745
+ })),
5746
+ conflicts: Schema$1.Array(Schema$1.Struct({
5747
+ path: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$)).{1,1024}$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$)).{1,1024}$" })),
5748
+ base: Schema$1.Union([Schema$1.String, Schema$1.Null]),
5749
+ draft: Schema$1.Union([Schema$1.String, Schema$1.Null]),
5750
+ main: Schema$1.Union([Schema$1.String, Schema$1.Null])
5751
+ })),
5752
+ provenance: Schema$1.Struct({ references: Schema$1.Array(Schema$1.Struct({
5753
+ kind: Schema$1.String,
5754
+ digest: Schema$1.String,
5755
+ locator: Schema$1.optionalKey(Schema$1.String)
5756
+ })) }),
5757
+ mounts: Schema$1.Array(Schema$1.Union([
5758
+ Schema$1.Struct({
5759
+ kind: Schema$1.Literal("project"),
5760
+ root: Schema$1.Literal("/project"),
5761
+ access: Schema$1.Literal("read-write")
5762
+ }),
5763
+ Schema$1.Struct({
5764
+ root: Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$")).annotate({ expected: "a string matching the RegExp ^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$" })),
5765
+ digest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5766
+ fileCount: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5767
+ byteSize: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5768
+ kind: Schema$1.Literal("started-from"),
5769
+ access: Schema$1.Literal("read-only"),
5770
+ templateId: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(128).annotate({ expected: "a value with a length of at most 128" })),
5771
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9]+(?:-[a-z0-9]+)*$" })),
5772
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(256).annotate({ expected: "a value with a length of at most 256" }))
5773
+ }),
5774
+ Schema$1.Struct({
5775
+ root: Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$")).annotate({ expected: "a string matching the RegExp ^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$" })),
5776
+ digest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5777
+ fileCount: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5778
+ byteSize: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5779
+ kind: Schema$1.Literal("resource"),
5780
+ access: Schema$1.Literal("read-only"),
5781
+ resourceId: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[A-Za-z0-9._-]{1,128}$")).annotate({ expected: "a string matching the RegExp ^[A-Za-z0-9._-]{1,128}$" })),
5782
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(256).annotate({ expected: "a value with a length of at most 256" }))
5783
+ }),
5784
+ Schema$1.Struct({
5785
+ root: Schema$1.String.check(Schema$1.isMaxLength(2048).annotate({ expected: "a value with a length of at most 2048" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$")).annotate({ expected: "a string matching the RegExp ^\\/(?:project|references\\/started-from\\/[a-f0-9]{64}|resources\\/[A-Za-z0-9._-]+\\/[a-f0-9]{64}|library\\/templates\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/[a-f0-9]{64})(?:\\/(?!\\.{1,2}(?:\\/|$)|\\.git(?:\\/|$))[^\\\\/]+)*$" })),
5786
+ digest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5787
+ fileCount: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5788
+ byteSize: Schema$1.Finite.check(Schema$1.isInt().annotate({ expected: "an integer" })).check(Schema$1.isGreaterThanOrEqualTo(1).annotate({ expected: "a value greater than or equal to 1" })),
5789
+ kind: Schema$1.Literal("library-template"),
5790
+ access: Schema$1.Literal("read-only"),
5791
+ templateId: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(128).annotate({ expected: "a value with a length of at most 128" })),
5792
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^[a-z0-9]+(?:-[a-z0-9]+)*$" })),
5793
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(256).annotate({ expected: "a value with a length of at most 256" }))
5794
+ })
5795
+ ])),
5796
+ libraryManifestDigest: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^[a-f0-9]{64}$")).annotate({ expected: "a string matching the RegExp ^[a-f0-9]{64}$" })),
5797
+ createdAt: Schema$1.String,
5798
+ updatedAt: Schema$1.String,
5799
+ createdBy: Schema$1.Struct({
5800
+ userId: UserId,
5801
+ via: Schema$1.Literals([
5802
+ "api",
5803
+ "mcp",
5804
+ "agent"
5805
+ ])
5806
+ }),
5807
+ updatedBy: Schema$1.Struct({
5808
+ userId: UserId,
5809
+ via: Schema$1.Literals([
5810
+ "api",
5811
+ "mcp",
5812
+ "agent"
5813
+ ])
5814
+ })
5815
+ }),
5816
+ files: Schema$1.Record(Schema$1.String, Schema$1.String)
5817
+ });
5818
+ const TemplatesPutWorkspaceAsset401 = UnauthorizedError;
5819
+ const TemplatesPutWorkspaceAsset403 = ForbiddenError;
5820
+ const TemplatesPutWorkspaceAsset404 = ResourceNotFoundError;
5821
+ const TemplatesPutWorkspaceAsset409 = ConflictError;
5822
+ const TemplatesPutWorkspaceAsset422 = ValidationError;
5823
+ const TemplatesPutWorkspaceAsset500 = InternalError;
5824
+ const TemplatesPutWorkspaceAsset504 = GatewayTimeoutError;
5595
5825
  const TemplatesCheckWorkspacePathParams = Schema$1.Struct({ id: TemplateId });
5596
5826
  const TemplatesCheckWorkspaceRequestJson = Schema$1.Struct({ expectedRevision: Schema$1.String });
5597
5827
  const TemplatesCheckWorkspace200 = Schema$1.Struct({
@@ -6550,6 +6780,30 @@ const TemplatesCreateFamilyFromTemplate409 = ConflictError;
6550
6780
  const TemplatesCreateFamilyFromTemplate422 = ValidationError;
6551
6781
  const TemplatesCreateFamilyFromTemplate500 = InternalError;
6552
6782
  const TemplatesCreateFamilyFromTemplate504 = GatewayTimeoutError;
6783
+ const TemplatesAddEntryPathParams = Schema$1.Struct({ projectId: TemplateProjectId });
6784
+ const TemplatesAddEntryRequestJson = Schema$1.Struct({
6785
+ entryPath: Schema$1.String.check(Schema$1.isMaxLength(1024).annotate({ expected: "a value with a length of at most 1024" })).check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$")).annotate({ expected: "a string matching the RegExp ^(?!\\/)(?!.*\\\\)(?!.*(?:^|\\/)\\.{1,2}(?:\\/|$))(?!.*(?:^|\\/)\\.git(?:\\/|$))emails\\/.+\\.tsx$" })),
6786
+ name: Schema$1.String.check(Schema$1.isMinLength(1).annotate({ expected: "a value with a length of at least 1" })).check(Schema$1.isMaxLength(200).annotate({ expected: "a value with a length of at most 200" })),
6787
+ slug: Schema$1.String.check(Schema$1.isPattern(/* @__PURE__ */ new RegExp("^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$")).annotate({ expected: "a string matching the RegExp ^(?=.{1,100}$)[a-z0-9]+(?:-[a-z0-9]+)*$" })),
6788
+ description: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.String, Schema$1.Null]), Schema$1.Null])),
6789
+ category: Schema$1.optionalKey(Schema$1.Union([Schema$1.Union([Schema$1.Literals([
6790
+ "transactional",
6791
+ "marketing",
6792
+ "support",
6793
+ "notification",
6794
+ "verification",
6795
+ "reminder",
6796
+ "alert"
6797
+ ]), Schema$1.Null]), Schema$1.Null]))
6798
+ });
6799
+ const TemplatesAddEntry201 = Template;
6800
+ const TemplatesAddEntry401 = UnauthorizedError;
6801
+ const TemplatesAddEntry403 = ForbiddenError;
6802
+ const TemplatesAddEntry404 = ResourceNotFoundError;
6803
+ const TemplatesAddEntry409 = ConflictError;
6804
+ const TemplatesAddEntry422 = ValidationError;
6805
+ const TemplatesAddEntry500 = InternalError;
6806
+ const TemplatesAddEntry504 = GatewayTimeoutError;
6553
6807
  const UnsubscribeListQuery = Schema$1.Struct({
6554
6808
  page: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null])),
6555
6809
  limit: Schema$1.optionalKey(Schema$1.Union([Schema$1.String, Schema$1.Null]))
@@ -7092,6 +7346,70 @@ var AttachmentsGroup = class extends HttpApiGroup.make("Attachments").add(HttpAp
7092
7346
  AttachmentsDownloadUrl504.pipe(HttpApiSchema.status(504))
7093
7347
  ]
7094
7348
  }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "attachments.downloadUrl").annotate(OpenApi.Summary, "Get an attachment download URL").annotate(OpenApi.Description, "Generates a presigned, time-limited download URL for the attachment; expiry is configurable via the expiresIn query parameter.")).annotate(OpenApi.Description, "Email attachment metadata and secure download URLs") {};
7349
+ var BrandsGroup = class extends HttpApiGroup.make("Brands").add(HttpApiEndpoint.get("brandsList", "/v1/brands", {
7350
+ success: BrandsList200,
7351
+ error: [
7352
+ BrandsList401.pipe(HttpApiSchema.status(401)),
7353
+ BrandsList403.pipe(HttpApiSchema.status(403)),
7354
+ BrandsList500,
7355
+ BrandsList504.pipe(HttpApiSchema.status(504))
7356
+ ]
7357
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.list").annotate(OpenApi.Summary, "List brands").annotate(OpenApi.Description, "Returns the organization's brands, the default brand first."), HttpApiEndpoint.post("brandsCreate", "/v1/brands", {
7358
+ payload: BrandsCreateRequestJson,
7359
+ success: BrandsCreate201.pipe(HttpApiSchema.status(201)),
7360
+ error: [
7361
+ BrandsCreate401.pipe(HttpApiSchema.status(401)),
7362
+ BrandsCreate403.pipe(HttpApiSchema.status(403)),
7363
+ BrandsCreate409.pipe(HttpApiSchema.status(409)),
7364
+ BrandsCreate422.pipe(HttpApiSchema.status(422)),
7365
+ BrandsCreate500,
7366
+ BrandsCreate504.pipe(HttpApiSchema.status(504))
7367
+ ]
7368
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.create").annotate(OpenApi.Summary, "Create a brand").annotate(OpenApi.Description, "Creates a brand. The CSS must parse as a brand theme; a rejected theme answers 422 with located findings under `fields.css`. With `isDefault`, the new brand becomes the default. An organization holds at most 12 brands; creating one more answers 409 with a `ConflictError`."), HttpApiEndpoint.get("brandsGet", "/v1/brands/:slug", {
7369
+ params: BrandsGetPathParams,
7370
+ success: BrandsGet200,
7371
+ error: [
7372
+ BrandsGet401.pipe(HttpApiSchema.status(401)),
7373
+ BrandsGet403.pipe(HttpApiSchema.status(403)),
7374
+ BrandsGet404.pipe(HttpApiSchema.status(404)),
7375
+ BrandsGet500,
7376
+ BrandsGet504.pipe(HttpApiSchema.status(504))
7377
+ ]
7378
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.get").annotate(OpenApi.Summary, "Get a brand").annotate(OpenApi.Description, "Returns one brand by its slug."), HttpApiEndpoint.delete("brandsRemove", "/v1/brands/:slug", {
7379
+ params: BrandsRemovePathParams,
7380
+ success: BrandsRemove200,
7381
+ error: [
7382
+ BrandsRemove401.pipe(HttpApiSchema.status(401)),
7383
+ BrandsRemove403.pipe(HttpApiSchema.status(403)),
7384
+ BrandsRemove404.pipe(HttpApiSchema.status(404)),
7385
+ BrandsRemove409.pipe(HttpApiSchema.status(409)),
7386
+ BrandsRemove500,
7387
+ BrandsRemove504.pipe(HttpApiSchema.status(504))
7388
+ ]
7389
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.remove").annotate(OpenApi.Summary, "Delete a brand").annotate(OpenApi.Description, "Deletes a brand. The default brand cannot be deleted; domains that used the deleted brand fall back to the default."), HttpApiEndpoint.patch("brandsUpdate", "/v1/brands/:slug", {
7390
+ params: BrandsUpdatePathParams,
7391
+ payload: BrandsUpdateRequestJson,
7392
+ success: BrandsUpdate200,
7393
+ error: [
7394
+ BrandsUpdate401.pipe(HttpApiSchema.status(401)),
7395
+ BrandsUpdate403.pipe(HttpApiSchema.status(403)),
7396
+ BrandsUpdate404.pipe(HttpApiSchema.status(404)),
7397
+ BrandsUpdate409.pipe(HttpApiSchema.status(409)),
7398
+ BrandsUpdate422.pipe(HttpApiSchema.status(422)),
7399
+ BrandsUpdate500,
7400
+ BrandsUpdate504.pipe(HttpApiSchema.status(504))
7401
+ ]
7402
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.update").annotate(OpenApi.Summary, "Update a brand").annotate(OpenApi.Description, "Updates a brand. Each section given replaces that section whole. Published templates keep the brand they were built against until they are republished."), HttpApiEndpoint.post("brandsSetDefault", "/v1/brands/:slug/default", {
7403
+ params: BrandsSetDefaultPathParams,
7404
+ success: BrandsSetDefault200,
7405
+ error: [
7406
+ BrandsSetDefault401.pipe(HttpApiSchema.status(401)),
7407
+ BrandsSetDefault403.pipe(HttpApiSchema.status(403)),
7408
+ BrandsSetDefault404.pipe(HttpApiSchema.status(404)),
7409
+ BrandsSetDefault500,
7410
+ BrandsSetDefault504.pipe(HttpApiSchema.status(504))
7411
+ ]
7412
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "brands.setDefault").annotate(OpenApi.Summary, "Make a brand the default").annotate(OpenApi.Description, "Makes this brand the organization's default: bare `samva:brand` and domains without a brand resolve to it at their next build or send.")).annotate(OpenApi.Description, "Brand themes, logos and footers that templates import with `samva:brand`.") {};
7095
7413
  var CampaignsGroup = class extends HttpApiGroup.make("Campaigns").add(HttpApiEndpoint.get("campaignsList", "/v1/campaigns", {
7096
7414
  query: CampaignsListQuery,
7097
7415
  success: CampaignsList200,
@@ -7170,7 +7488,7 @@ var CampaignsGroup = class extends HttpApiGroup.make("Campaigns").add(HttpApiEnd
7170
7488
  CampaignsScheduleRun502.pipe(HttpApiSchema.status(502)),
7171
7489
  CampaignsScheduleRun504.pipe(HttpApiSchema.status(504))
7172
7490
  ]
7173
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "campaigns.scheduleRun").annotate(OpenApi.Summary, "Schedule a campaign run").annotate(OpenApi.Description, "Schedules an email campaign run at the absolute ISO-8601 instant in scheduledFor, or immediately when omitted. The optional idempotencyKey is scoped to the organization and replays return the original run."), HttpApiEndpoint.get("campaignsGetRun", "/v1/campaigns/:id/runs/:runId", {
7491
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "campaigns.scheduleRun").annotate(OpenApi.Summary, "Schedule a campaign run").annotate(OpenApi.Description, "Schedules an email campaign run at the absolute ISO-8601 instant in scheduledFor, or immediately when omitted. The optional idempotencyKey is scoped to the organization and replays return the original run. An email campaign must carry the brand footer: it is refused with CampaignFooterRequiredError when its footer is off and its template renders no BrandFooter, and with BrandAddressRequiredError when a brand that signs it off has no postal address."), HttpApiEndpoint.get("campaignsGetRun", "/v1/campaigns/:id/runs/:runId", {
7174
7492
  params: CampaignsGetRunPathParams,
7175
7493
  success: CampaignsGetRun200,
7176
7494
  error: [
@@ -7617,25 +7935,6 @@ var CustomFieldsGroup = class extends HttpApiGroup.make("Custom Fields").add(Htt
7617
7935
  CustomFieldsUpdate504.pipe(HttpApiSchema.status(504))
7618
7936
  ]
7619
7937
  }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "customFields.update").annotate(OpenApi.Summary, "Update a custom field").annotate(OpenApi.Description, "Updates an existing custom field definition and returns the updated field.")).annotate(OpenApi.Description, "Custom field definitions for contact metadata") {};
7620
- var DesignGroup = class extends HttpApiGroup.make("Design").add(HttpApiEndpoint.get("designGet", "/v1/design", {
7621
- success: DesignGet200,
7622
- error: [
7623
- DesignGet401.pipe(HttpApiSchema.status(401)),
7624
- DesignGet403.pipe(HttpApiSchema.status(403)),
7625
- DesignGet500,
7626
- DesignGet504.pipe(HttpApiSchema.status(504))
7627
- ]
7628
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "design.get").annotate(OpenApi.Summary, "Get the organization design").annotate(OpenApi.Description, "Returns the organization's configured email design kit (theme, assets, footer), or null when none is set."), HttpApiEndpoint.put("designUpdate", "/v1/design", {
7629
- payload: DesignUpdateRequestJson,
7630
- success: DesignUpdate200,
7631
- error: [
7632
- DesignUpdate401.pipe(HttpApiSchema.status(401)),
7633
- DesignUpdate403.pipe(HttpApiSchema.status(403)),
7634
- DesignUpdate422.pipe(HttpApiSchema.status(422)),
7635
- DesignUpdate500,
7636
- DesignUpdate504.pipe(HttpApiSchema.status(504))
7637
- ]
7638
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "design.update").annotate(OpenApi.Summary, "Update the organization design").annotate(OpenApi.Description, "Validates and saves the organization's email design kit; a null body clears the design back to the base design floor.")).annotate(OpenApi.Description, "Organization email design kit (theme, assets, footer)") {};
7639
7938
  var EmailGroup = class extends HttpApiGroup.make("Email").add(HttpApiEndpoint.get("emailListBlocks", "/v1/email/blocks", {
7640
7939
  query: EmailListBlocksQuery,
7641
7940
  success: EmailListBlocks200,
@@ -7757,7 +8056,7 @@ var EmailGroup = class extends HttpApiGroup.make("Email").add(HttpApiEndpoint.ge
7757
8056
  EmailListDomains500,
7758
8057
  EmailListDomains504.pipe(HttpApiSchema.status(504))
7759
8058
  ]
7760
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.listDomains").annotate(OpenApi.Summary, "List sending domains").annotate(OpenApi.Description, "Returns a paginated list of the organization's sending domains. Each row carries `deliverability` (bounce and complaint rates over the last 24 hours, the window the 5% bounce limit is enforced over) and `series`, the last 14 days of daily email sends attributed to the domain, oldest first."), HttpApiEndpoint.post("emailAddDomain", "/v1/email/domains", {
8059
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.listDomains").annotate(OpenApi.Summary, "List sending domains").annotate(OpenApi.Description, "Returns a paginated list of the organization's sending domains. `sendable=true` lists only domains a send can use now: active, and verified, or verified before and degraded since. Each row carries `deliverability` (bounce and complaint rates over the last 24 hours, the window the 5% bounce limit is enforced over) and `series`, the last 14 days of daily email sends attributed to the domain, oldest first."), HttpApiEndpoint.post("emailAddDomain", "/v1/email/domains", {
7761
8060
  payload: EmailAddDomainRequestJson,
7762
8061
  success: EmailAddDomain201.pipe(HttpApiSchema.status(201)),
7763
8062
  error: [
@@ -7771,7 +8070,7 @@ var EmailGroup = class extends HttpApiGroup.make("Email").add(HttpApiEndpoint.ge
7771
8070
  EmailAddDomain502.pipe(HttpApiSchema.status(502)),
7772
8071
  EmailAddDomain504.pipe(HttpApiSchema.status(504))
7773
8072
  ]
7774
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.addDomain").annotate(OpenApi.Summary, "Add a sending domain").annotate(OpenApi.Description, "Registers a domain for sending and returns it with the DNS records required to verify ownership and configure DKIM. Responds with 201. Supplying a connection attaches the domain to that DNS account; the domain must sit inside the zone given with it. When Samva cannot register another sending domain right now, this responds with 429 and no domain is created."), HttpApiEndpoint.get("emailGetDomainById", "/v1/email/domains/:id", {
8073
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.addDomain").annotate(OpenApi.Summary, "Add a sending domain").annotate(OpenApi.Description, "Registers a domain for sending and returns it with the DNS records required to verify ownership and configure DKIM. Responds with 201. Supplying a connection attaches the domain to that DNS account; the domain must sit inside the zone given with it. When Samva cannot register another sending domain right now, this responds with 429 and no domain is created. A banned organization is refused with 403."), HttpApiEndpoint.get("emailGetDomainById", "/v1/email/domains/:id", {
7775
8074
  params: EmailGetDomainByIdPathParams,
7776
8075
  success: EmailGetDomainById200,
7777
8076
  error: [
@@ -7802,7 +8101,7 @@ var EmailGroup = class extends HttpApiGroup.make("Email").add(HttpApiEndpoint.ge
7802
8101
  EmailUpdateDomainConfig500,
7803
8102
  EmailUpdateDomainConfig504.pipe(HttpApiSchema.status(504))
7804
8103
  ]
7805
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.updateDomainConfig").annotate(OpenApi.Summary, "Update a domain's send-settings config").annotate(OpenApi.Description, "Overrides the domain's open/click tracking, reply-to, and unsubscribe-group defaults for the settings cascade. An omitted field is left unchanged; null clears it back to the organization default. Returns the saved config."), HttpApiEndpoint.get("emailGetCustomTracking", "/v1/email/domains/:id/custom-tracking", {
8104
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "email.updateDomainConfig").annotate(OpenApi.Summary, "Update a domain's send-settings config").annotate(OpenApi.Description, "Overrides the domain's open/click tracking, reply-to, unsubscribe-group defaults, and the brand its mail uses for the settings cascade. An omitted field is left unchanged; null clears it back to the organization default. Returns the saved config."), HttpApiEndpoint.get("emailGetCustomTracking", "/v1/email/domains/:id/custom-tracking", {
7806
8105
  params: EmailGetCustomTrackingPathParams,
7807
8106
  success: EmailGetCustomTracking200,
7808
8107
  error: [
@@ -8556,7 +8855,7 @@ var OrganizationsGroup = class extends HttpApiGroup.make("Organizations").add(Ht
8556
8855
  OrganizationsUpdate500,
8557
8856
  OrganizationsUpdate504.pipe(HttpApiSchema.status(504))
8558
8857
  ]
8559
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "organizations.update").annotate(OpenApi.Summary, "Update the current organization").annotate(OpenApi.Description, "Updates the current organization's profile, regional defaults, design, reply-to, and unsubscribe-group defaults and returns the saved organization. `metadata` and `design` are merged into the stored values; every other field is replaced."), HttpApiEndpoint.post("organizationsDelete", "/v1/organizations/deletion-operations", {
8858
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "organizations.update").annotate(OpenApi.Summary, "Update the current organization").annotate(OpenApi.Description, "Updates the current organization's profile, regional defaults, reply-to, and unsubscribe-group defaults and returns the saved organization. `metadata` is merged into the stored value; every other field is replaced."), HttpApiEndpoint.post("organizationsDelete", "/v1/organizations/deletion-operations", {
8560
8859
  headers: OrganizationsDeleteHeaders,
8561
8860
  payload: OrganizationsDeleteRequestJson,
8562
8861
  success: OrganizationsDelete202.pipe(HttpApiSchema.status(202)),
@@ -8631,7 +8930,7 @@ var TemplatesGroup = class extends HttpApiGroup.make("Templates").add(HttpApiEnd
8631
8930
  TemplatesUpdate500,
8632
8931
  TemplatesUpdate504.pipe(HttpApiSchema.status(504))
8633
8932
  ]
8634
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.update").annotate(OpenApi.Summary, "Update a template").annotate(OpenApi.Description, "Updates template metadata. Source changes use the project workspace API."), HttpApiEndpoint.get("templatesListInputContracts", "/v1/templates/:id/input-contracts", {
8933
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.update").annotate(OpenApi.Summary, "Update a template").annotate(OpenApi.Description, "Updates template metadata. Setting `entryPath` points the template at another file in its project and keeps its id, slug, and publications; move the file in Git separately. Source changes use the project workspace API."), HttpApiEndpoint.get("templatesListInputContracts", "/v1/templates/:id/input-contracts", {
8635
8934
  params: TemplatesListInputContractsPathParams,
8636
8935
  success: TemplatesListInputContracts200,
8637
8936
  error: [
@@ -8720,7 +9019,20 @@ var TemplatesGroup = class extends HttpApiGroup.make("Templates").add(HttpApiEnd
8720
9019
  TemplatesPatchWorkspace500,
8721
9020
  TemplatesPatchWorkspace504.pipe(HttpApiSchema.status(504))
8722
9021
  ]
8723
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.patchWorkspace").annotate(OpenApi.Summary, "Patch template project files").annotate(OpenApi.Description, "Applies revision-checked file patches to the shared project workspace overlay."), HttpApiEndpoint.post("templatesCheckWorkspace", "/v1/templates/:id/workspace/check", {
9022
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.patchWorkspace").annotate(OpenApi.Summary, "Patch template project files").annotate(OpenApi.Description, "Applies revision-checked file patches to the shared project workspace overlay."), HttpApiEndpoint.put("templatesPutWorkspaceAsset", "/v1/templates/:id/workspace/assets", {
9023
+ params: TemplatesPutWorkspaceAssetPathParams,
9024
+ payload: TemplatesPutWorkspaceAssetRequestJson,
9025
+ success: TemplatesPutWorkspaceAsset200,
9026
+ error: [
9027
+ TemplatesPutWorkspaceAsset401.pipe(HttpApiSchema.status(401)),
9028
+ TemplatesPutWorkspaceAsset403.pipe(HttpApiSchema.status(403)),
9029
+ TemplatesPutWorkspaceAsset404.pipe(HttpApiSchema.status(404)),
9030
+ TemplatesPutWorkspaceAsset409.pipe(HttpApiSchema.status(409)),
9031
+ TemplatesPutWorkspaceAsset422.pipe(HttpApiSchema.status(422)),
9032
+ TemplatesPutWorkspaceAsset500,
9033
+ TemplatesPutWorkspaceAsset504.pipe(HttpApiSchema.status(504))
9034
+ ]
9035
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.putWorkspaceAsset").annotate(OpenApi.Summary, "Put a template project asset").annotate(OpenApi.Description, "Writes one image or font (png, jpg, jpeg, gif, webp, or woff2) into the shared project workspace as an unsaved file; Save commits it. The JSON body carries the file as canonical base64 in `contentBase64`, at most 1 MiB decoded, and the bytes must match the extension in `path`. `replace` must be `false` to add a new file and `true` to change an existing one."), HttpApiEndpoint.post("templatesCheckWorkspace", "/v1/templates/:id/workspace/check", {
8724
9036
  params: TemplatesCheckWorkspacePathParams,
8725
9037
  payload: TemplatesCheckWorkspaceRequestJson,
8726
9038
  success: TemplatesCheckWorkspace200,
@@ -8927,7 +9239,20 @@ var TemplatesGroup = class extends HttpApiGroup.make("Templates").add(HttpApiEnd
8927
9239
  TemplatesCreateFamilyFromTemplate500,
8928
9240
  TemplatesCreateFamilyFromTemplate504.pipe(HttpApiSchema.status(504))
8929
9241
  ]
8930
- }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.createFamilyFromTemplate").annotate(OpenApi.Summary, "Create a family from a template").annotate(OpenApi.Description, "Creates a template family containing the specified template and returns the new family with status 201.")).annotate(OpenApi.Description, "Git-backed email template projects, workspace editing, immutable publications, and delivery defaults") {};
9242
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.createFamilyFromTemplate").annotate(OpenApi.Summary, "Create a family from a template").annotate(OpenApi.Description, "Creates a template family containing the specified template and returns the new family with status 201."), HttpApiEndpoint.post("templatesAddEntry", "/v1/templates/projects/:projectId/entries", {
9243
+ params: TemplatesAddEntryPathParams,
9244
+ payload: TemplatesAddEntryRequestJson,
9245
+ success: TemplatesAddEntry201.pipe(HttpApiSchema.status(201)),
9246
+ error: [
9247
+ TemplatesAddEntry401.pipe(HttpApiSchema.status(401)),
9248
+ TemplatesAddEntry403.pipe(HttpApiSchema.status(403)),
9249
+ TemplatesAddEntry404.pipe(HttpApiSchema.status(404)),
9250
+ TemplatesAddEntry409.pipe(HttpApiSchema.status(409)),
9251
+ TemplatesAddEntry422.pipe(HttpApiSchema.status(422)),
9252
+ TemplatesAddEntry500,
9253
+ TemplatesAddEntry504.pipe(HttpApiSchema.status(504))
9254
+ ]
9255
+ }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "templates.addEntry").annotate(OpenApi.Summary, "Add a template entry").annotate(OpenApi.Description, "Registers an `emails/*.tsx` file in an existing template project as its own template and returns it with status 201. The file does not need to exist yet; publishing fails until a commit contains it. Repeating the call with the same entry path, name, and slug returns the existing template.")).annotate(OpenApi.Description, "Git-backed email template projects, workspace editing, immutable publications, and delivery defaults") {};
8931
9256
  var UnsubscribeGroupsGroup = class extends HttpApiGroup.make("Unsubscribe Groups").add(HttpApiEndpoint.get("unsubscribeList", "/v1/unsubscribe-groups", {
8932
9257
  query: UnsubscribeListQuery,
8933
9258
  success: UnsubscribeList200,
@@ -9123,7 +9448,7 @@ var WebhooksGroup = class extends HttpApiGroup.make("Webhooks").add(HttpApiEndpo
9123
9448
  WebhooksGetStats504.pipe(HttpApiSchema.status(504))
9124
9449
  ]
9125
9450
  }).middleware(ApiKeySecurityMiddleware).annotate(OpenApi.Identifier, "webhooks.getStats").annotate(OpenApi.Summary, "Get webhook delivery statistics").annotate(OpenApi.Description, "Returns aggregate pending, delivered, exhausted, and cancelled delivery counts for a webhook endpoint, plus the same counts per organization-local calendar day over the selected period of 7, 30, or 90 days. Deliveries are retained for 90 days, so 90d is the whole history.")).annotate(OpenApi.Description, "Customer event webhook management, testing, and delivery logs") {};
9126
- var SamvaApi = class extends HttpApi.make("SamvaApi").annotate(OpenApi.Title, "Samva API").annotate(OpenApi.Version, "1.0.0").annotate(OpenApi.Description, "Samva is a developer email API for product teams: deliverability, versioned templates, inbound threading, and signed webhooks behind one typed send call.").annotate(OpenApi.Servers, [{ url: "https://api.samva.dev" }]).add(AnalyticsGroup, APIKeysGroup, AttachmentsGroup, CampaignsGroup, ContactGroupsGroup, ContactsGroup, ConversationsGroup, CustomFieldsGroup, DesignGroup, EmailGroup, MediaGroup, MessagesGroup, ScheduledMessagesGroup, OperationsGroup, OrganizationsGroup, TemplatesGroup, UnsubscribeGroupsGroup, WebhooksGroup) {};
9451
+ var SamvaApi = class extends HttpApi.make("SamvaApi").annotate(OpenApi.Title, "Samva API").annotate(OpenApi.Version, "1.0.0").annotate(OpenApi.Description, "Samva is a developer email API for product teams: deliverability, versioned templates, inbound threading, and signed webhooks behind one typed send call.").annotate(OpenApi.Servers, [{ url: "https://api.samva.dev" }]).add(AnalyticsGroup, APIKeysGroup, AttachmentsGroup, BrandsGroup, CampaignsGroup, ContactGroupsGroup, ContactsGroup, ConversationsGroup, CustomFieldsGroup, EmailGroup, MediaGroup, MessagesGroup, ScheduledMessagesGroup, OperationsGroup, OrganizationsGroup, TemplatesGroup, UnsubscribeGroupsGroup, WebhooksGroup) {};
9127
9452
  //#endregion
9128
9453
  //#region src/effect/internal/client.ts
9129
9454
  const DEFAULT_BASE_URL = "https://api.samva.dev";
@@ -9157,6 +9482,6 @@ const layer = (config) => Layer.effect(Service, make(config));
9157
9482
  const layerFetch = (config) => layer(config).pipe(Layer.provide(FetchHttpClient.layer));
9158
9483
  const raw = Effect.map(Service, (client) => client.raw);
9159
9484
  //#endregion
9160
- export { UpdateTemplatePayload as C, UnauthorizedError as S, ValidationError as T, RateLimitedError as _, BillingProviderError as a, TestWebhookPayload as b, CreateWebhookPayload as c, ExternalServiceError as d, FlagDisabledError as f, PaymentRequiredError as g, InternalError as h, raw as i, DeliveryUnavailableError as l, GatewayTimeoutError as m, layer as n, ConflictError as o, ForbiddenError as p, layerFetch as r, CreateTemplatePayload as s, Service as t, EmailChannelError as u, ResourceNotFoundError as v, UpdateWebhookPayload as w, TrackingRecipientEmail as x, SamvaApi as y };
9485
+ export { UpdateWebhookPayload as A, ResourceNotFoundError as C, UnauthorizedError as D, TrackingRecipientEmail as E, UpdateBrand as O, RateLimitedError as S, TestWebhookPayload as T, ForbiddenError as _, AnalyticsQueryError as a, OnboardingReviewRequiredError as b, CampaignFooterRequiredError as c, CreateTemplatePayload as d, CreateWebhookPayload as f, FlagDisabledError as g, ExternalServiceError as h, raw as i, ValidationError as j, UpdateTemplatePayload as k, ConflictError as l, EmailChannelError as m, layer as n, BillingProviderError as o, DeliveryUnavailableError as p, layerFetch as r, BrandAddressRequiredError as s, Service as t, CreateBrand as u, GatewayTimeoutError as v, SamvaApi as w, PaymentRequiredError as x, InternalError as y };
9161
9486
 
9162
- //# sourceMappingURL=client-DCM6U0-I.js.map
9487
+ //# sourceMappingURL=client-5O8KsY5Z.js.map