@contractspec/bundle.marketing 1.12.0 → 1.14.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 (262) hide show
  1. package/.turbo/turbo-build.log +146 -175
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +57 -0
  4. package/dist/browser/components/marketing/ChangelogPage.js +92 -0
  5. package/dist/browser/components/marketing/CofounderPage.js +581 -0
  6. package/dist/browser/components/marketing/ContactClient.js +1379 -0
  7. package/dist/browser/components/marketing/ContributePage.js +487 -0
  8. package/dist/browser/components/marketing/DesignPartnerPage.js +272 -0
  9. package/dist/browser/components/marketing/LandingPage.js +629 -0
  10. package/dist/browser/components/marketing/PricingClient.js +1972 -0
  11. package/dist/browser/components/marketing/ProductClientPage.js +563 -0
  12. package/dist/browser/components/marketing/index.js +4818 -0
  13. package/dist/browser/components/marketing/pricing-thinking-modal.js +258 -0
  14. package/dist/browser/components/marketing/sections/AudienceSection.js +90 -0
  15. package/dist/browser/components/marketing/sections/CorePositioningSection.js +72 -0
  16. package/dist/browser/components/marketing/sections/CtaSection.js +67 -0
  17. package/dist/browser/components/marketing/sections/DevelopersSection.js +50 -0
  18. package/dist/browser/components/marketing/sections/FearsSection.js +105 -0
  19. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +93 -0
  20. package/dist/browser/components/marketing/sections/IconGridSection.js +63 -0
  21. package/dist/browser/components/marketing/sections/OutputsSection.js +116 -0
  22. package/dist/browser/components/marketing/sections/ProblemSection.js +103 -0
  23. package/dist/browser/components/marketing/sections/SolutionSection.js +103 -0
  24. package/dist/browser/components/marketing/sections/StepsSection.js +109 -0
  25. package/dist/browser/components/marketing/waitlist-section.js +1104 -0
  26. package/dist/browser/components/templates/TemplatesClientPage.js +5662 -0
  27. package/dist/browser/components/templates/TemplatesPage.js +177 -0
  28. package/dist/browser/components/templates/TemplatesPreviewModal.js +124 -0
  29. package/dist/browser/components/templates/index.js +5831 -0
  30. package/dist/browser/index.js +6485 -0
  31. package/dist/browser/libs/email/client.js +122 -0
  32. package/dist/browser/libs/email/contact.js +190 -0
  33. package/dist/browser/libs/email/newsletter.js +215 -0
  34. package/dist/browser/libs/email/types.js +2 -0
  35. package/dist/browser/libs/email/utils.js +16 -0
  36. package/dist/browser/libs/email/waitlist-application.js +295 -0
  37. package/dist/browser/libs/email/waitlist.js +225 -0
  38. package/dist/browser/libs/pricing-examples.js +26 -0
  39. package/dist/browser/registry/engine.js +5293 -0
  40. package/dist/browser/registry/factory.js +52 -0
  41. package/dist/browser/registry/index.js +5358 -0
  42. package/dist/browser/registry/registry-docs.js +343 -0
  43. package/dist/browser/registry/registry-landing.js +4937 -0
  44. package/dist/browser/registry/registry.js +5279 -0
  45. package/dist/browser/registry/types.js +0 -0
  46. package/dist/browser/registry/utils.js +5340 -0
  47. package/dist/components/marketing/ChangelogPage.d.ts +11 -17
  48. package/dist/components/marketing/ChangelogPage.d.ts.map +1 -1
  49. package/dist/components/marketing/ChangelogPage.js +84 -62
  50. package/dist/components/marketing/CofounderPage.d.ts +1 -6
  51. package/dist/components/marketing/CofounderPage.d.ts.map +1 -1
  52. package/dist/components/marketing/CofounderPage.js +544 -436
  53. package/dist/components/marketing/ContactClient.d.ts +1 -6
  54. package/dist/components/marketing/ContactClient.d.ts.map +1 -1
  55. package/dist/components/marketing/ContactClient.js +1371 -155
  56. package/dist/components/marketing/ContributePage.d.ts +3 -8
  57. package/dist/components/marketing/ContributePage.d.ts.map +1 -1
  58. package/dist/components/marketing/ContributePage.js +478 -358
  59. package/dist/components/marketing/DesignPartnerPage.d.ts +3 -8
  60. package/dist/components/marketing/DesignPartnerPage.d.ts.map +1 -1
  61. package/dist/components/marketing/DesignPartnerPage.js +263 -211
  62. package/dist/components/marketing/LandingPage.d.ts +1 -6
  63. package/dist/components/marketing/LandingPage.d.ts.map +1 -1
  64. package/dist/components/marketing/LandingPage.js +623 -37
  65. package/dist/components/marketing/PricingClient.d.ts +1 -6
  66. package/dist/components/marketing/PricingClient.d.ts.map +1 -1
  67. package/dist/components/marketing/PricingClient.js +1962 -516
  68. package/dist/components/marketing/ProductClientPage.d.ts +1 -6
  69. package/dist/components/marketing/ProductClientPage.d.ts.map +1 -1
  70. package/dist/components/marketing/ProductClientPage.js +556 -458
  71. package/dist/components/marketing/index.d.ts +11 -11
  72. package/dist/components/marketing/index.d.ts.map +1 -0
  73. package/dist/components/marketing/index.js +4813 -12
  74. package/dist/components/marketing/pricing-thinking-modal.d.ts +5 -13
  75. package/dist/components/marketing/pricing-thinking-modal.d.ts.map +1 -1
  76. package/dist/components/marketing/pricing-thinking-modal.js +248 -197
  77. package/dist/components/marketing/sections/AudienceSection.d.ts +1 -6
  78. package/dist/components/marketing/sections/AudienceSection.d.ts.map +1 -1
  79. package/dist/components/marketing/sections/AudienceSection.js +80 -63
  80. package/dist/components/marketing/sections/CorePositioningSection.d.ts +1 -6
  81. package/dist/components/marketing/sections/CorePositioningSection.d.ts.map +1 -1
  82. package/dist/components/marketing/sections/CorePositioningSection.js +62 -54
  83. package/dist/components/marketing/sections/CtaSection.d.ts +1 -6
  84. package/dist/components/marketing/sections/CtaSection.d.ts.map +1 -1
  85. package/dist/components/marketing/sections/CtaSection.js +58 -50
  86. package/dist/components/marketing/sections/DevelopersSection.d.ts +1 -6
  87. package/dist/components/marketing/sections/DevelopersSection.d.ts.map +1 -1
  88. package/dist/components/marketing/sections/DevelopersSection.js +40 -40
  89. package/dist/components/marketing/sections/FearsSection.d.ts +1 -6
  90. package/dist/components/marketing/sections/FearsSection.d.ts.map +1 -1
  91. package/dist/components/marketing/sections/FearsSection.js +96 -44
  92. package/dist/components/marketing/sections/HeroMarketingSection.d.ts +1 -6
  93. package/dist/components/marketing/sections/HeroMarketingSection.d.ts.map +1 -1
  94. package/dist/components/marketing/sections/HeroMarketingSection.js +82 -71
  95. package/dist/components/marketing/sections/IconGridSection.d.ts +25 -39
  96. package/dist/components/marketing/sections/IconGridSection.d.ts.map +1 -1
  97. package/dist/components/marketing/sections/IconGridSection.js +55 -41
  98. package/dist/components/marketing/sections/OutputsSection.d.ts +1 -6
  99. package/dist/components/marketing/sections/OutputsSection.d.ts.map +1 -1
  100. package/dist/components/marketing/sections/OutputsSection.js +107 -55
  101. package/dist/components/marketing/sections/ProblemSection.d.ts +1 -6
  102. package/dist/components/marketing/sections/ProblemSection.d.ts.map +1 -1
  103. package/dist/components/marketing/sections/ProblemSection.js +94 -42
  104. package/dist/components/marketing/sections/SolutionSection.d.ts +1 -6
  105. package/dist/components/marketing/sections/SolutionSection.d.ts.map +1 -1
  106. package/dist/components/marketing/sections/SolutionSection.js +94 -42
  107. package/dist/components/marketing/sections/StepsSection.d.ts +1 -6
  108. package/dist/components/marketing/sections/StepsSection.d.ts.map +1 -1
  109. package/dist/components/marketing/sections/StepsSection.js +100 -48
  110. package/dist/components/marketing/waitlist-section.d.ts +5 -12
  111. package/dist/components/marketing/waitlist-section.d.ts.map +1 -1
  112. package/dist/components/marketing/waitlist-section.js +1089 -568
  113. package/dist/components/templates/TemplatesClientPage.d.ts +1 -6
  114. package/dist/components/templates/TemplatesClientPage.d.ts.map +1 -1
  115. package/dist/components/templates/TemplatesClientPage.js +5649 -617
  116. package/dist/components/templates/TemplatesPage.d.ts +1 -6
  117. package/dist/components/templates/TemplatesPage.d.ts.map +1 -1
  118. package/dist/components/templates/TemplatesPage.js +163 -116
  119. package/dist/components/templates/TemplatesPreviewModal.d.ts +5 -12
  120. package/dist/components/templates/TemplatesPreviewModal.d.ts.map +1 -1
  121. package/dist/components/templates/TemplatesPreviewModal.js +113 -131
  122. package/dist/components/templates/index.d.ts +4 -4
  123. package/dist/components/templates/index.d.ts.map +1 -0
  124. package/dist/components/templates/index.js +5825 -4
  125. package/dist/index.d.ts +9 -29
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +6480 -28
  128. package/dist/libs/email/client.d.ts +9 -12
  129. package/dist/libs/email/client.d.ts.map +1 -1
  130. package/dist/libs/email/client.js +109 -105
  131. package/dist/libs/email/client.test.d.ts +2 -0
  132. package/dist/libs/email/client.test.d.ts.map +1 -0
  133. package/dist/libs/email/contact.d.ts +2 -6
  134. package/dist/libs/email/contact.d.ts.map +1 -1
  135. package/dist/libs/email/contact.js +155 -41
  136. package/dist/libs/email/newsletter.d.ts +2 -6
  137. package/dist/libs/email/newsletter.d.ts.map +1 -1
  138. package/dist/libs/email/newsletter.js +169 -54
  139. package/dist/libs/email/types.d.ts +48 -52
  140. package/dist/libs/email/types.d.ts.map +1 -1
  141. package/dist/libs/email/types.js +3 -1
  142. package/dist/libs/email/utils.d.ts +2 -5
  143. package/dist/libs/email/utils.d.ts.map +1 -1
  144. package/dist/libs/email/utils.js +10 -6
  145. package/dist/libs/email/waitlist-application.d.ts +2 -6
  146. package/dist/libs/email/waitlist-application.d.ts.map +1 -1
  147. package/dist/libs/email/waitlist-application.js +191 -71
  148. package/dist/libs/email/waitlist.d.ts +2 -6
  149. package/dist/libs/email/waitlist.d.ts.map +1 -1
  150. package/dist/libs/email/waitlist.js +171 -56
  151. package/dist/libs/pricing-examples.d.ts +13 -16
  152. package/dist/libs/pricing-examples.d.ts.map +1 -1
  153. package/dist/libs/pricing-examples.js +20 -20
  154. package/dist/node/components/marketing/ChangelogPage.js +87 -0
  155. package/dist/node/components/marketing/CofounderPage.js +576 -0
  156. package/dist/node/components/marketing/ContactClient.js +1374 -0
  157. package/dist/node/components/marketing/ContributePage.js +482 -0
  158. package/dist/node/components/marketing/DesignPartnerPage.js +267 -0
  159. package/dist/node/components/marketing/LandingPage.js +624 -0
  160. package/dist/node/components/marketing/PricingClient.js +1967 -0
  161. package/dist/node/components/marketing/ProductClientPage.js +558 -0
  162. package/dist/node/components/marketing/index.js +4813 -0
  163. package/dist/node/components/marketing/pricing-thinking-modal.js +253 -0
  164. package/dist/node/components/marketing/sections/AudienceSection.js +85 -0
  165. package/dist/node/components/marketing/sections/CorePositioningSection.js +67 -0
  166. package/dist/node/components/marketing/sections/CtaSection.js +62 -0
  167. package/dist/node/components/marketing/sections/DevelopersSection.js +45 -0
  168. package/dist/node/components/marketing/sections/FearsSection.js +100 -0
  169. package/dist/node/components/marketing/sections/HeroMarketingSection.js +88 -0
  170. package/dist/node/components/marketing/sections/IconGridSection.js +58 -0
  171. package/dist/node/components/marketing/sections/OutputsSection.js +111 -0
  172. package/dist/node/components/marketing/sections/ProblemSection.js +98 -0
  173. package/dist/node/components/marketing/sections/SolutionSection.js +98 -0
  174. package/dist/node/components/marketing/sections/StepsSection.js +104 -0
  175. package/dist/node/components/marketing/waitlist-section.js +1099 -0
  176. package/dist/node/components/templates/TemplatesClientPage.js +5657 -0
  177. package/dist/node/components/templates/TemplatesPage.js +172 -0
  178. package/dist/node/components/templates/TemplatesPreviewModal.js +119 -0
  179. package/dist/node/components/templates/index.js +5826 -0
  180. package/dist/node/index.js +6480 -0
  181. package/dist/node/libs/email/client.js +117 -0
  182. package/dist/node/libs/email/contact.js +185 -0
  183. package/dist/node/libs/email/newsletter.js +210 -0
  184. package/dist/node/libs/email/types.js +2 -0
  185. package/dist/node/libs/email/utils.js +11 -0
  186. package/dist/node/libs/email/waitlist-application.js +290 -0
  187. package/dist/node/libs/email/waitlist.js +220 -0
  188. package/dist/node/libs/pricing-examples.js +21 -0
  189. package/dist/node/registry/engine.js +5288 -0
  190. package/dist/node/registry/factory.js +47 -0
  191. package/dist/node/registry/index.js +5353 -0
  192. package/dist/node/registry/registry-docs.js +338 -0
  193. package/dist/node/registry/registry-landing.js +4932 -0
  194. package/dist/node/registry/registry.js +5274 -0
  195. package/dist/node/registry/types.js +0 -0
  196. package/dist/node/registry/utils.js +5335 -0
  197. package/dist/registry/engine.d.ts +4 -8
  198. package/dist/registry/engine.d.ts.map +1 -1
  199. package/dist/registry/engine.js +5287 -23
  200. package/dist/registry/factory.d.ts +30 -34
  201. package/dist/registry/factory.d.ts.map +1 -1
  202. package/dist/registry/factory.js +42 -56
  203. package/dist/registry/index.d.ts +8 -8
  204. package/dist/registry/index.d.ts.map +1 -0
  205. package/dist/registry/index.js +5353 -8
  206. package/dist/registry/registry-docs.d.ts +4 -8
  207. package/dist/registry/registry-docs.d.ts.map +1 -1
  208. package/dist/registry/registry-docs.js +242 -209
  209. package/dist/registry/registry-landing.d.ts +5 -9
  210. package/dist/registry/registry-landing.d.ts.map +1 -1
  211. package/dist/registry/registry-landing.js +4930 -93
  212. package/dist/registry/registry.d.ts +7 -11
  213. package/dist/registry/registry.d.ts.map +1 -1
  214. package/dist/registry/registry.js +5262 -49
  215. package/dist/registry/types.d.ts +6 -10
  216. package/dist/registry/types.d.ts.map +1 -1
  217. package/dist/registry/types.js +1 -0
  218. package/dist/registry/utils.d.ts +10 -14
  219. package/dist/registry/utils.d.ts.map +1 -1
  220. package/dist/registry/utils.js +5330 -49
  221. package/package.json +355 -73
  222. package/tsdown.config.js +1 -2
  223. package/.turbo/turbo-build$colon$types.log +0 -1
  224. package/.turbo/turbo-lint.log +0 -3
  225. package/dist/components/marketing/ChangelogPage.js.map +0 -1
  226. package/dist/components/marketing/CofounderPage.js.map +0 -1
  227. package/dist/components/marketing/ContactClient.js.map +0 -1
  228. package/dist/components/marketing/ContributePage.js.map +0 -1
  229. package/dist/components/marketing/DesignPartnerPage.js.map +0 -1
  230. package/dist/components/marketing/LandingPage.js.map +0 -1
  231. package/dist/components/marketing/PricingClient.js.map +0 -1
  232. package/dist/components/marketing/ProductClientPage.js.map +0 -1
  233. package/dist/components/marketing/pricing-thinking-modal.js.map +0 -1
  234. package/dist/components/marketing/sections/AudienceSection.js.map +0 -1
  235. package/dist/components/marketing/sections/CorePositioningSection.js.map +0 -1
  236. package/dist/components/marketing/sections/CtaSection.js.map +0 -1
  237. package/dist/components/marketing/sections/DevelopersSection.js.map +0 -1
  238. package/dist/components/marketing/sections/FearsSection.js.map +0 -1
  239. package/dist/components/marketing/sections/HeroMarketingSection.js.map +0 -1
  240. package/dist/components/marketing/sections/IconGridSection.js.map +0 -1
  241. package/dist/components/marketing/sections/OutputsSection.js.map +0 -1
  242. package/dist/components/marketing/sections/ProblemSection.js.map +0 -1
  243. package/dist/components/marketing/sections/SolutionSection.js.map +0 -1
  244. package/dist/components/marketing/sections/StepsSection.js.map +0 -1
  245. package/dist/components/marketing/waitlist-section.js.map +0 -1
  246. package/dist/components/templates/TemplatesClientPage.js.map +0 -1
  247. package/dist/components/templates/TemplatesPage.js.map +0 -1
  248. package/dist/components/templates/TemplatesPreviewModal.js.map +0 -1
  249. package/dist/libs/email/client.js.map +0 -1
  250. package/dist/libs/email/contact.js.map +0 -1
  251. package/dist/libs/email/newsletter.js.map +0 -1
  252. package/dist/libs/email/utils.js.map +0 -1
  253. package/dist/libs/email/waitlist-application.js.map +0 -1
  254. package/dist/libs/email/waitlist.js.map +0 -1
  255. package/dist/libs/pricing-examples.js.map +0 -1
  256. package/dist/registry/engine.js.map +0 -1
  257. package/dist/registry/factory.js.map +0 -1
  258. package/dist/registry/registry-docs.js.map +0 -1
  259. package/dist/registry/registry-landing.js.map +0 -1
  260. package/dist/registry/registry.js.map +0 -1
  261. package/dist/registry/utils.js.map +0 -1
  262. package/tsconfig.tsbuildinfo +0 -1
@@ -1,32 +1,150 @@
1
- 'use server';
1
+ // @bun
2
+ var __require = import.meta.require;
2
3
 
3
- import { getEmailConfig, sendEmail } from "./client.js";
4
- import { formatMultilineHtml } from "./utils.js";
4
+ // src/libs/email/client.ts
5
+ import { createClient, Temv1alpha1 } from "@scaleway/sdk";
6
+ import { Logger } from "@contractspec/lib.logger";
7
+ var DEFAULT_FROM = {
8
+ email: "noreply@transactional.contractspec.io",
9
+ name: "ContractSpec"
10
+ };
11
+ var DEFAULT_TEAM_INBOX = {
12
+ email: "contact@contractspec.io",
13
+ name: "ContractSpec Team"
14
+ };
15
+ var DEFAULT_REGION = "fr-par";
16
+ var cachedConfig = null;
17
+ var cachedClient = null;
18
+ var apiFactory = (client) => new Temv1alpha1.API(client);
19
+ var mapRegion = (value) => {
20
+ const normalized = value?.trim().toLowerCase();
21
+ if (normalized === "par" || normalized === "fr-par")
22
+ return "fr-par";
23
+ if (normalized === "ams" || normalized === "nl-ams")
24
+ return "nl-ams";
25
+ if (normalized === "waw" || normalized === "pl-waw")
26
+ return "pl-waw";
27
+ return DEFAULT_REGION;
28
+ };
29
+ var getEmailConfig = () => {
30
+ if (cachedConfig) {
31
+ return { ok: true, config: cachedConfig };
32
+ }
33
+ const accessKey = process.env.SCALEWAY_ACCESS_KEY || process.env.SCALEWAY_ACCESS_KEY_QUEUE;
34
+ const secretKey = process.env.SCALEWAY_SECRET_KEY || process.env.SCALEWAY_SECRET_KEY_QUEUE;
35
+ const projectId = process.env.SCALEWAY_PROJECT_ID;
36
+ if (!accessKey || !secretKey || !projectId) {
37
+ return {
38
+ ok: false,
39
+ errorMessage: "Email service is not configured. Please contact us directly at contact@contractspec.io."
40
+ };
41
+ }
42
+ const region = mapRegion(process.env.SCALEWAY_REGION);
43
+ cachedConfig = {
44
+ accessKey,
45
+ secretKey,
46
+ projectId,
47
+ region,
48
+ defaultZone: `${region}-1`,
49
+ from: {
50
+ email: process.env.SCALEWAY_EMAIL_FROM_EMAIL ?? DEFAULT_FROM.email,
51
+ name: process.env.SCALEWAY_EMAIL_FROM_NAME ?? DEFAULT_FROM.name
52
+ },
53
+ teamInbox: {
54
+ email: process.env.SCALEWAY_EMAIL_TEAM_EMAIL ?? DEFAULT_TEAM_INBOX.email,
55
+ name: process.env.SCALEWAY_EMAIL_TEAM_NAME ?? DEFAULT_TEAM_INBOX.name
56
+ }
57
+ };
58
+ return { ok: true, config: cachedConfig };
59
+ };
60
+ var getTemClient = (config) => {
61
+ if (cachedClient) {
62
+ return cachedClient;
63
+ }
64
+ const client = createClient({
65
+ accessKey: config.accessKey,
66
+ secretKey: config.secretKey,
67
+ defaultProjectId: config.projectId,
68
+ defaultRegion: config.region,
69
+ defaultZone: config.defaultZone
70
+ });
71
+ cachedClient = apiFactory(client);
72
+ return cachedClient;
73
+ };
74
+ var sendEmail = async (config, request) => {
75
+ try {
76
+ const client = getTemClient(config);
77
+ await client.createEmail({
78
+ region: config.region,
79
+ projectId: config.projectId,
80
+ from: config.from,
81
+ to: request.to,
82
+ subject: request.subject,
83
+ text: request.text,
84
+ html: request.html || request.text,
85
+ additionalHeaders: request.replyTo ? [{ key: "Reply-To", value: request.replyTo }] : undefined
86
+ });
87
+ return { success: true };
88
+ } catch (error) {
89
+ new Logger().error("scaleway_tem_email_send_failed", {
90
+ context: request.context ?? "email",
91
+ error: error instanceof Error ? error.message : error
92
+ });
93
+ return {
94
+ success: false,
95
+ error,
96
+ errorMessage: "Failed to send email via Scaleway."
97
+ };
98
+ }
99
+ };
100
+ var __internal = {
101
+ resetCaches() {
102
+ cachedClient = null;
103
+ cachedConfig = null;
104
+ apiFactory = (client) => new Temv1alpha1.API(client);
105
+ },
106
+ setApiFactory(factory) {
107
+ apiFactory = factory;
108
+ },
109
+ setClient(client) {
110
+ cachedClient = client;
111
+ }
112
+ };
113
+
114
+ // src/libs/email/utils.ts
115
+ var escapeHtml = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
116
+ var formatMultilineHtml = (value) => escapeHtml(value).replaceAll(`
117
+ `, "<br />");
5
118
 
6
- //#region src/libs/email/newsletter.ts
7
- const NEWSLETTER_MISSING_CONFIG = "Newsletter service is not configured. Please try again later.";
8
- const NEWSLETTER_SEND_ERROR = "Failed to subscribe. Please try again later or contact us directly.";
9
- const subscribeToNewsletter = async (formData) => {
10
- const email = (formData.get("email") ?? "").toString().trim();
11
- if (!email || !email.includes("@")) return {
12
- success: false,
13
- text: "Please enter a valid email address."
14
- };
15
- const configResult = getEmailConfig();
16
- if (!configResult.ok || !configResult.config) return {
17
- success: false,
18
- text: configResult.errorMessage ?? NEWSLETTER_MISSING_CONFIG
19
- };
20
- const welcomeText = `
119
+ // src/libs/email/newsletter.ts
120
+ "use server";
121
+ var NEWSLETTER_MISSING_CONFIG = "Newsletter service is not configured. Please try again later.";
122
+ var NEWSLETTER_SEND_ERROR = "Failed to subscribe. Please try again later or contact us directly.";
123
+ var subscribeToNewsletter = async (formData) => {
124
+ const email = (formData.get("email") ?? "").toString().trim();
125
+ if (!email || !email.includes("@")) {
126
+ return {
127
+ success: false,
128
+ text: "Please enter a valid email address."
129
+ };
130
+ }
131
+ const configResult = getEmailConfig();
132
+ if (!configResult.ok || !configResult.config) {
133
+ return {
134
+ success: false,
135
+ text: configResult.errorMessage ?? NEWSLETTER_MISSING_CONFIG
136
+ };
137
+ }
138
+ const welcomeText = `
21
139
  Welcome to ContractSpec!
22
140
 
23
141
  Thanks for subscribing to our newsletter. You'll receive updates on:
24
142
 
25
- New integrations (Stripe, OpenAI, Qdrant, and more)
26
- Product features and improvements
27
- New templates and examples
28
- Architecture insights and best practices
29
- Documentation updates
143
+ \u2022 New integrations (Stripe, OpenAI, Qdrant, and more)
144
+ \u2022 Product features and improvements
145
+ \u2022 New templates and examples
146
+ \u2022 Architecture insights and best practices
147
+ \u2022 Documentation updates
30
148
 
31
149
  Stay tuned for exciting updates!
32
150
 
@@ -36,11 +154,7 @@ https://contractspec.io
36
154
 
37
155
  Unsubscribe: Reply to this email with "unsubscribe"
38
156
  `.trim();
39
- if (!(await sendEmail(configResult.config, {
40
- to: [{ email }],
41
- subject: "Welcome to ContractSpec Newsletter",
42
- text: welcomeText,
43
- html: `
157
+ const welcomeHtml = `
44
158
  <div style="font-family: sans-serif; max-width: 640px; margin: 0 auto;">
45
159
  <h1 style="color: #8b5cf6;">Welcome to ContractSpec!</h1>
46
160
  <p>Thanks for subscribing to our newsletter. You'll receive updates on:</p>
@@ -61,35 +175,36 @@ Unsubscribe: Reply to this email with "unsubscribe"
61
175
  To unsubscribe, reply to this email with "unsubscribe"
62
176
  </p>
63
177
  </div>
64
- `,
65
- context: "newsletter-welcome"
66
- })).success) return {
67
- success: false,
68
- text: NEWSLETTER_SEND_ERROR
69
- };
70
- const teamNotificationText = `New newsletter subscription from: ${email}`;
71
- const teamNotificationHtml = `
178
+ `;
179
+ const userSend = await sendEmail(configResult.config, {
180
+ to: [{ email }],
181
+ subject: "Welcome to ContractSpec Newsletter",
182
+ text: welcomeText,
183
+ html: welcomeHtml,
184
+ context: "newsletter-welcome"
185
+ });
186
+ if (!userSend.success) {
187
+ return { success: false, text: NEWSLETTER_SEND_ERROR };
188
+ }
189
+ const teamNotificationText = `New newsletter subscription from: ${email}`;
190
+ const teamNotificationHtml = `
72
191
  <div style="font-family: sans-serif; max-width: 640px; margin: 0 auto;">
73
192
  <p style="margin: 0 0 8px;">New newsletter subscription</p>
74
193
  <p style="margin: 0;"><strong>Email:</strong> ${formatMultilineHtml(email)}</p>
75
194
  </div>
76
195
  `;
77
- if (!(await sendEmail(configResult.config, {
78
- to: [configResult.config.teamInbox],
79
- subject: `New Newsletter Subscription: ${email}`,
80
- text: teamNotificationText,
81
- html: teamNotificationHtml,
82
- context: "newsletter-team-notification"
83
- })).success) return {
84
- success: false,
85
- text: NEWSLETTER_SEND_ERROR
86
- };
87
- return {
88
- success: true,
89
- text: "Successfully subscribed!"
90
- };
196
+ const teamSend = await sendEmail(configResult.config, {
197
+ to: [configResult.config.teamInbox],
198
+ subject: `New Newsletter Subscription: ${email}`,
199
+ text: teamNotificationText,
200
+ html: teamNotificationHtml,
201
+ context: "newsletter-team-notification"
202
+ });
203
+ if (!teamSend.success) {
204
+ return { success: false, text: NEWSLETTER_SEND_ERROR };
205
+ }
206
+ return { success: true, text: "Successfully subscribed!" };
207
+ };
208
+ export {
209
+ subscribeToNewsletter
91
210
  };
92
-
93
- //#endregion
94
- export { subscribeToNewsletter };
95
- //# sourceMappingURL=newsletter.js.map
@@ -1,53 +1,49 @@
1
- import { Region } from "@scaleway/sdk-client";
2
-
3
- //#region src/libs/email/types.d.ts
4
- interface SubmitContactFormResult {
5
- success: boolean;
6
- text: string;
7
- }
8
- interface SubmitNewsletterResult {
9
- success: boolean;
10
- text: string;
11
- }
12
- interface SubmitWaitlistResult {
13
- success: boolean;
14
- text: string;
15
- }
16
- interface SubmitWaitlistApplicationResult {
17
- success: boolean;
18
- text: string;
19
- }
20
- interface EmailAddress {
21
- email: string;
22
- name?: string;
23
- }
24
- interface EmailServiceConfig {
25
- accessKey: string;
26
- secretKey: string;
27
- projectId: string;
28
- region: Region;
29
- defaultZone: string;
30
- from: EmailAddress;
31
- teamInbox: EmailAddress;
32
- }
33
- interface EmailConfigResult {
34
- ok: boolean;
35
- config?: EmailServiceConfig;
36
- errorMessage?: string;
37
- }
38
- interface SendEmailRequest {
39
- to: EmailAddress[];
40
- subject: string;
41
- text: string;
42
- html: string;
43
- replyTo?: string;
44
- context?: string;
45
- }
46
- interface EmailSendOutcome {
47
- success: boolean;
48
- error?: unknown;
49
- errorMessage?: string;
50
- }
51
- //#endregion
52
- export { EmailAddress, EmailConfigResult, EmailSendOutcome, EmailServiceConfig, SendEmailRequest, SubmitContactFormResult, SubmitNewsletterResult, SubmitWaitlistApplicationResult, SubmitWaitlistResult };
1
+ import type { Region } from '@scaleway/sdk-client';
2
+ export interface SubmitContactFormResult {
3
+ success: boolean;
4
+ text: string;
5
+ }
6
+ export interface SubmitNewsletterResult {
7
+ success: boolean;
8
+ text: string;
9
+ }
10
+ export interface SubmitWaitlistResult {
11
+ success: boolean;
12
+ text: string;
13
+ }
14
+ export interface SubmitWaitlistApplicationResult {
15
+ success: boolean;
16
+ text: string;
17
+ }
18
+ export interface EmailAddress {
19
+ email: string;
20
+ name?: string;
21
+ }
22
+ export interface EmailServiceConfig {
23
+ accessKey: string;
24
+ secretKey: string;
25
+ projectId: string;
26
+ region: Region;
27
+ defaultZone: string;
28
+ from: EmailAddress;
29
+ teamInbox: EmailAddress;
30
+ }
31
+ export interface EmailConfigResult {
32
+ ok: boolean;
33
+ config?: EmailServiceConfig;
34
+ errorMessage?: string;
35
+ }
36
+ export interface SendEmailRequest {
37
+ to: EmailAddress[];
38
+ subject: string;
39
+ text: string;
40
+ html: string;
41
+ replyTo?: string;
42
+ context?: string;
43
+ }
44
+ export interface EmailSendOutcome {
45
+ success: boolean;
46
+ error?: unknown;
47
+ errorMessage?: string;
48
+ }
53
49
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/libs/email/types.ts"],"mappings":";;;UAIiB,uBAAA;EACf,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,sBAAA;EACf,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,oBAAA;EACf,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,+BAAA;EACf,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,YAAA;EACf,KAAA;EACA,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,SAAA;EACA,SAAA;EACA,SAAA;EACA,MAAA,EAAQ,MAAA;EACR,WAAA;EACA,IAAA,EAAM,YAAA;EACN,SAAA,EAAW,YAAA;AAAA;AAAA,UAGI,iBAAA;EACf,EAAA;EACA,MAAA,GAAS,kBAAA;EACT,YAAA;AAAA;AAAA,UAGe,gBAAA;EACf,EAAA,EAAI,YAAA;EACJ,OAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,OAAA;AAAA;AAAA,UAGe,gBAAA;EACf,OAAA;EACA,KAAA;EACA,YAAA;AAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/libs/email/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,YAAY,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -1 +1,3 @@
1
- 'use server';
1
+ // @bun
2
+ // src/libs/email/types.ts
3
+ "use server";
@@ -1,6 +1,3 @@
1
- //#region src/libs/email/utils.d.ts
2
- declare const escapeHtml: (value: string) => string;
3
- declare const formatMultilineHtml: (value: string) => string;
4
- //#endregion
5
- export { escapeHtml, formatMultilineHtml };
1
+ export declare const escapeHtml: (value: string) => string;
2
+ export declare const formatMultilineHtml: (value: string) => string;
6
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/libs/email/utils.ts"],"mappings":";cAAa,UAAA,GAAc,KAAA;AAAA,cAMd,mBAAA,GAAuB,KAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/libs/email/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAIf,CAAC;AAE7B,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,MACN,CAAC"}
@@ -1,7 +1,11 @@
1
- //#region src/libs/email/utils.ts
2
- const escapeHtml = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
3
- const formatMultilineHtml = (value) => escapeHtml(value).replaceAll("\n", "<br />");
1
+ // @bun
2
+ var __require = import.meta.require;
4
3
 
5
- //#endregion
6
- export { escapeHtml, formatMultilineHtml };
7
- //# sourceMappingURL=utils.js.map
4
+ // src/libs/email/utils.ts
5
+ var escapeHtml = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
6
+ var formatMultilineHtml = (value) => escapeHtml(value).replaceAll(`
7
+ `, "<br />");
8
+ export {
9
+ formatMultilineHtml,
10
+ escapeHtml
11
+ };
@@ -1,7 +1,3 @@
1
- import { SubmitWaitlistApplicationResult } from "./types.js";
2
-
3
- //#region src/libs/email/waitlist-application.d.ts
4
- declare const submitWaitlistApplication: (formData: FormData) => Promise<SubmitWaitlistApplicationResult>;
5
- //#endregion
6
- export { submitWaitlistApplication };
1
+ import type { SubmitWaitlistApplicationResult } from './types';
2
+ export declare const submitWaitlistApplication: (formData: FormData) => Promise<SubmitWaitlistApplicationResult>;
7
3
  //# sourceMappingURL=waitlist-application.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"waitlist-application.d.ts","names":[],"sources":["../../../src/libs/email/waitlist-application.ts"],"mappings":";;;cAWa,yBAAA,GACX,QAAA,EAAU,QAAA,KACT,OAAA,CAAQ,+BAAA"}
1
+ {"version":3,"file":"waitlist-application.d.ts","sourceRoot":"","sources":["../../../src/libs/email/waitlist-application.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAO/D,eAAO,MAAM,yBAAyB,GACpC,UAAU,QAAQ,KACjB,OAAO,CAAC,+BAA+B,CAkLzC,CAAC"}