@djangocfg/ext-newsletter 1.0.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.
- package/README.md +140 -0
- package/dist/chunk-LQLPNWHR.js +2075 -0
- package/dist/hooks.cjs +2539 -0
- package/dist/hooks.d.cts +267 -0
- package/dist/hooks.d.ts +267 -0
- package/dist/hooks.js +370 -0
- package/dist/index.cjs +2153 -0
- package/dist/index.d.cts +2084 -0
- package/dist/index.d.ts +2084 -0
- package/dist/index.js +1 -0
- package/package.json +80 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter.ts +210 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__bulk_email.ts +93 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__campaigns.ts +338 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__logs.ts +92 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__newsletters.ts +150 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__subscriptions.ts +210 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__testing.ts +93 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/index.ts +34 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter.ts +81 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__bulk_email.ts +42 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__campaigns.ts +130 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__logs.ts +37 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__newsletters.ts +52 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__subscriptions.ts +78 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__testing.ts +42 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/index.ts +34 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/BulkEmailRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/BulkEmailResponse.schema.ts +23 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/EmailLog.schema.ts +31 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/ErrorResponse.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/Newsletter.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterCampaign.schema.ts +33 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterCampaignRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterSubscription.schema.ts +27 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedEmailLogList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterCampaignList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterSubscriptionList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PatchedNewsletterCampaignRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PatchedUnsubscribeRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SendCampaignRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SendCampaignResponse.schema.ts +22 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SubscribeRequest.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SubscribeResponse.schema.ts +21 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SuccessResponse.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/TestEmailRequest.schema.ts +21 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/Unsubscribe.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/UnsubscribeRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/index.ts +40 -0
- package/src/api/generated/ext_newsletter/api-instance.ts +131 -0
- package/src/api/generated/ext_newsletter/client.ts +319 -0
- package/src/api/generated/ext_newsletter/enums.ts +24 -0
- package/src/api/generated/ext_newsletter/errors.ts +116 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/client.ts +38 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/models.ts +71 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/client.ts +24 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/models.ts +29 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/client.ts +85 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/models.ts +100 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/client.ts +35 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/models.ts +51 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/client.ts +45 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/models.ts +42 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/client.ts +55 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/models.ts +92 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/client.ts +24 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/models.ts +24 -0
- package/src/api/generated/ext_newsletter/http.ts +103 -0
- package/src/api/generated/ext_newsletter/index.ts +315 -0
- package/src/api/generated/ext_newsletter/logger.ts +259 -0
- package/src/api/generated/ext_newsletter/retry.ts +175 -0
- package/src/api/generated/ext_newsletter/schema.json +1739 -0
- package/src/api/generated/ext_newsletter/storage.ts +161 -0
- package/src/api/generated/ext_newsletter/validation-events.ts +133 -0
- package/src/api/index.ts +9 -0
- package/src/components/Hero/index.tsx +160 -0
- package/src/components/Hero/types.ts +37 -0
- package/src/config.ts +20 -0
- package/src/contexts/newsletter/NewsletterContext.tsx +264 -0
- package/src/contexts/newsletter/types.ts +32 -0
- package/src/hooks/index.ts +21 -0
- package/src/index.ts +14 -0
- package/src/utils/logger.ts +9 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed fetchers for Subscriptions
|
|
3
|
+
*
|
|
4
|
+
* Universal functions that work in any environment:
|
|
5
|
+
* - Next.js (App Router / Pages Router / Server Components)
|
|
6
|
+
* - React Native
|
|
7
|
+
* - Node.js backend
|
|
8
|
+
*
|
|
9
|
+
* These fetchers use Zod schemas for runtime validation.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Configure API once (in your app entry point)
|
|
14
|
+
* import { configureAPI } from '../../api-instance'
|
|
15
|
+
* configureAPI({ baseUrl: 'https://api.example.com' })
|
|
16
|
+
*
|
|
17
|
+
* // Then use fetchers anywhere
|
|
18
|
+
* const users = await getUsers({ page: 1 })
|
|
19
|
+
*
|
|
20
|
+
* // With SWR
|
|
21
|
+
* const { data } = useSWR(['users', params], () => getUsers(params))
|
|
22
|
+
*
|
|
23
|
+
* // With React Query
|
|
24
|
+
* const { data } = useQuery(['users', params], () => getUsers(params))
|
|
25
|
+
*
|
|
26
|
+
* // In Server Component or SSR (pass custom client)
|
|
27
|
+
* import { API } from '../../index'
|
|
28
|
+
* const api = new API('https://api.example.com')
|
|
29
|
+
* const users = await getUsers({ page: 1 }, api)
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { consola } from 'consola'
|
|
33
|
+
import { PaginatedNewsletterSubscriptionListSchema, type PaginatedNewsletterSubscriptionList } from '../schemas/PaginatedNewsletterSubscriptionList.schema'
|
|
34
|
+
import { SubscribeRequestSchema, type SubscribeRequest } from '../schemas/SubscribeRequest.schema'
|
|
35
|
+
import { SubscribeResponseSchema, type SubscribeResponse } from '../schemas/SubscribeResponse.schema'
|
|
36
|
+
import { SuccessResponseSchema, type SuccessResponse } from '../schemas/SuccessResponse.schema'
|
|
37
|
+
import { UnsubscribeRequestSchema, type UnsubscribeRequest } from '../schemas/UnsubscribeRequest.schema'
|
|
38
|
+
import { getAPIInstance } from '../../api-instance'
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to Newsletter
|
|
42
|
+
*
|
|
43
|
+
* @method POST
|
|
44
|
+
* @path /cfg/newsletter/subscribe/
|
|
45
|
+
*/
|
|
46
|
+
export async function createNewsletterSubscribeCreate( data: SubscribeRequest, client?: any
|
|
47
|
+
): Promise<SubscribeResponse> {
|
|
48
|
+
const api = client || getAPIInstance()
|
|
49
|
+
const response = await api.ext_newsletter_subscriptions.newsletterSubscribeCreate(data)
|
|
50
|
+
try {
|
|
51
|
+
return SubscribeResponseSchema.parse(response)
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// Zod validation error - log detailed information
|
|
54
|
+
consola.error('❌ Zod Validation Failed');
|
|
55
|
+
consola.box(`createNewsletterSubscribeCreate\nPath: /cfg/newsletter/subscribe/\nMethod: POST`);
|
|
56
|
+
|
|
57
|
+
if (error instanceof Error && 'issues' in error && Array.isArray((error as any).issues)) {
|
|
58
|
+
consola.error('Validation Issues:');
|
|
59
|
+
(error as any).issues.forEach((issue: any, index: number) => {
|
|
60
|
+
consola.error(` ${index + 1}. ${issue.path.join('.') || 'root'}`);
|
|
61
|
+
consola.error(` ├─ Message: ${issue.message}`);
|
|
62
|
+
if (issue.expected) consola.error(` ├─ Expected: ${issue.expected}`);
|
|
63
|
+
if (issue.received) consola.error(` └─ Received: ${issue.received}`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
consola.error('Response data:', response);
|
|
68
|
+
|
|
69
|
+
// Dispatch browser CustomEvent (only if window is defined)
|
|
70
|
+
if (typeof window !== 'undefined' && error instanceof Error && 'issues' in error) {
|
|
71
|
+
try {
|
|
72
|
+
const event = new CustomEvent('zod-validation-error', {
|
|
73
|
+
detail: {
|
|
74
|
+
operation: 'createNewsletterSubscribeCreate',
|
|
75
|
+
path: '/cfg/newsletter/subscribe/',
|
|
76
|
+
method: 'POST',
|
|
77
|
+
error: error,
|
|
78
|
+
response: response,
|
|
79
|
+
timestamp: new Date(),
|
|
80
|
+
},
|
|
81
|
+
bubbles: true,
|
|
82
|
+
cancelable: false,
|
|
83
|
+
});
|
|
84
|
+
window.dispatchEvent(event);
|
|
85
|
+
} catch (eventError) {
|
|
86
|
+
// Silently fail - event dispatch should never crash the app
|
|
87
|
+
consola.warn('Failed to dispatch validation error event:', eventError);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Re-throw the error
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* List User Subscriptions
|
|
99
|
+
*
|
|
100
|
+
* @method GET
|
|
101
|
+
* @path /cfg/newsletter/subscriptions/
|
|
102
|
+
*/
|
|
103
|
+
export async function getNewsletterSubscriptionsList( params?: { page?: number; page_size?: number }, client?: any
|
|
104
|
+
): Promise<PaginatedNewsletterSubscriptionList> {
|
|
105
|
+
const api = client || getAPIInstance()
|
|
106
|
+
const response = await api.ext_newsletter_subscriptions.newsletterSubscriptionsList(params?.page, params?.page_size)
|
|
107
|
+
try {
|
|
108
|
+
return PaginatedNewsletterSubscriptionListSchema.parse(response)
|
|
109
|
+
} catch (error) {
|
|
110
|
+
// Zod validation error - log detailed information
|
|
111
|
+
consola.error('❌ Zod Validation Failed');
|
|
112
|
+
consola.box(`getNewsletterSubscriptionsList\nPath: /cfg/newsletter/subscriptions/\nMethod: GET`);
|
|
113
|
+
|
|
114
|
+
if (error instanceof Error && 'issues' in error && Array.isArray((error as any).issues)) {
|
|
115
|
+
consola.error('Validation Issues:');
|
|
116
|
+
(error as any).issues.forEach((issue: any, index: number) => {
|
|
117
|
+
consola.error(` ${index + 1}. ${issue.path.join('.') || 'root'}`);
|
|
118
|
+
consola.error(` ├─ Message: ${issue.message}`);
|
|
119
|
+
if (issue.expected) consola.error(` ├─ Expected: ${issue.expected}`);
|
|
120
|
+
if (issue.received) consola.error(` └─ Received: ${issue.received}`);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
consola.error('Response data:', response);
|
|
125
|
+
|
|
126
|
+
// Dispatch browser CustomEvent (only if window is defined)
|
|
127
|
+
if (typeof window !== 'undefined' && error instanceof Error && 'issues' in error) {
|
|
128
|
+
try {
|
|
129
|
+
const event = new CustomEvent('zod-validation-error', {
|
|
130
|
+
detail: {
|
|
131
|
+
operation: 'getNewsletterSubscriptionsList',
|
|
132
|
+
path: '/cfg/newsletter/subscriptions/',
|
|
133
|
+
method: 'GET',
|
|
134
|
+
error: error,
|
|
135
|
+
response: response,
|
|
136
|
+
timestamp: new Date(),
|
|
137
|
+
},
|
|
138
|
+
bubbles: true,
|
|
139
|
+
cancelable: false,
|
|
140
|
+
});
|
|
141
|
+
window.dispatchEvent(event);
|
|
142
|
+
} catch (eventError) {
|
|
143
|
+
// Silently fail - event dispatch should never crash the app
|
|
144
|
+
consola.warn('Failed to dispatch validation error event:', eventError);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Re-throw the error
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Unsubscribe from Newsletter
|
|
156
|
+
*
|
|
157
|
+
* @method POST
|
|
158
|
+
* @path /cfg/newsletter/unsubscribe/
|
|
159
|
+
*/
|
|
160
|
+
export async function createNewsletterUnsubscribeCreate( data: UnsubscribeRequest, client?: any
|
|
161
|
+
): Promise<SuccessResponse> {
|
|
162
|
+
const api = client || getAPIInstance()
|
|
163
|
+
const response = await api.ext_newsletter_subscriptions.newsletterUnsubscribeCreate(data)
|
|
164
|
+
try {
|
|
165
|
+
return SuccessResponseSchema.parse(response)
|
|
166
|
+
} catch (error) {
|
|
167
|
+
// Zod validation error - log detailed information
|
|
168
|
+
consola.error('❌ Zod Validation Failed');
|
|
169
|
+
consola.box(`createNewsletterUnsubscribeCreate\nPath: /cfg/newsletter/unsubscribe/\nMethod: POST`);
|
|
170
|
+
|
|
171
|
+
if (error instanceof Error && 'issues' in error && Array.isArray((error as any).issues)) {
|
|
172
|
+
consola.error('Validation Issues:');
|
|
173
|
+
(error as any).issues.forEach((issue: any, index: number) => {
|
|
174
|
+
consola.error(` ${index + 1}. ${issue.path.join('.') || 'root'}`);
|
|
175
|
+
consola.error(` ├─ Message: ${issue.message}`);
|
|
176
|
+
if (issue.expected) consola.error(` ├─ Expected: ${issue.expected}`);
|
|
177
|
+
if (issue.received) consola.error(` └─ Received: ${issue.received}`);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
consola.error('Response data:', response);
|
|
182
|
+
|
|
183
|
+
// Dispatch browser CustomEvent (only if window is defined)
|
|
184
|
+
if (typeof window !== 'undefined' && error instanceof Error && 'issues' in error) {
|
|
185
|
+
try {
|
|
186
|
+
const event = new CustomEvent('zod-validation-error', {
|
|
187
|
+
detail: {
|
|
188
|
+
operation: 'createNewsletterUnsubscribeCreate',
|
|
189
|
+
path: '/cfg/newsletter/unsubscribe/',
|
|
190
|
+
method: 'POST',
|
|
191
|
+
error: error,
|
|
192
|
+
response: response,
|
|
193
|
+
timestamp: new Date(),
|
|
194
|
+
},
|
|
195
|
+
bubbles: true,
|
|
196
|
+
cancelable: false,
|
|
197
|
+
});
|
|
198
|
+
window.dispatchEvent(event);
|
|
199
|
+
} catch (eventError) {
|
|
200
|
+
// Silently fail - event dispatch should never crash the app
|
|
201
|
+
consola.warn('Failed to dispatch validation error event:', eventError);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Re-throw the error
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
|
package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__testing.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed fetchers for Testing
|
|
3
|
+
*
|
|
4
|
+
* Universal functions that work in any environment:
|
|
5
|
+
* - Next.js (App Router / Pages Router / Server Components)
|
|
6
|
+
* - React Native
|
|
7
|
+
* - Node.js backend
|
|
8
|
+
*
|
|
9
|
+
* These fetchers use Zod schemas for runtime validation.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Configure API once (in your app entry point)
|
|
14
|
+
* import { configureAPI } from '../../api-instance'
|
|
15
|
+
* configureAPI({ baseUrl: 'https://api.example.com' })
|
|
16
|
+
*
|
|
17
|
+
* // Then use fetchers anywhere
|
|
18
|
+
* const users = await getUsers({ page: 1 })
|
|
19
|
+
*
|
|
20
|
+
* // With SWR
|
|
21
|
+
* const { data } = useSWR(['users', params], () => getUsers(params))
|
|
22
|
+
*
|
|
23
|
+
* // With React Query
|
|
24
|
+
* const { data } = useQuery(['users', params], () => getUsers(params))
|
|
25
|
+
*
|
|
26
|
+
* // In Server Component or SSR (pass custom client)
|
|
27
|
+
* import { API } from '../../index'
|
|
28
|
+
* const api = new API('https://api.example.com')
|
|
29
|
+
* const users = await getUsers({ page: 1 }, api)
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { consola } from 'consola'
|
|
33
|
+
import { BulkEmailResponseSchema, type BulkEmailResponse } from '../schemas/BulkEmailResponse.schema'
|
|
34
|
+
import { TestEmailRequestSchema, type TestEmailRequest } from '../schemas/TestEmailRequest.schema'
|
|
35
|
+
import { getAPIInstance } from '../../api-instance'
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Test Email Sending
|
|
39
|
+
*
|
|
40
|
+
* @method POST
|
|
41
|
+
* @path /cfg/newsletter/test/
|
|
42
|
+
*/
|
|
43
|
+
export async function createNewsletterTestCreate( data: TestEmailRequest, client?: any
|
|
44
|
+
): Promise<BulkEmailResponse> {
|
|
45
|
+
const api = client || getAPIInstance()
|
|
46
|
+
const response = await api.ext_newsletter_testing.newsletterTestCreate(data)
|
|
47
|
+
try {
|
|
48
|
+
return BulkEmailResponseSchema.parse(response)
|
|
49
|
+
} catch (error) {
|
|
50
|
+
// Zod validation error - log detailed information
|
|
51
|
+
consola.error('❌ Zod Validation Failed');
|
|
52
|
+
consola.box(`createNewsletterTestCreate\nPath: /cfg/newsletter/test/\nMethod: POST`);
|
|
53
|
+
|
|
54
|
+
if (error instanceof Error && 'issues' in error && Array.isArray((error as any).issues)) {
|
|
55
|
+
consola.error('Validation Issues:');
|
|
56
|
+
(error as any).issues.forEach((issue: any, index: number) => {
|
|
57
|
+
consola.error(` ${index + 1}. ${issue.path.join('.') || 'root'}`);
|
|
58
|
+
consola.error(` ├─ Message: ${issue.message}`);
|
|
59
|
+
if (issue.expected) consola.error(` ├─ Expected: ${issue.expected}`);
|
|
60
|
+
if (issue.received) consola.error(` └─ Received: ${issue.received}`);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
consola.error('Response data:', response);
|
|
65
|
+
|
|
66
|
+
// Dispatch browser CustomEvent (only if window is defined)
|
|
67
|
+
if (typeof window !== 'undefined' && error instanceof Error && 'issues' in error) {
|
|
68
|
+
try {
|
|
69
|
+
const event = new CustomEvent('zod-validation-error', {
|
|
70
|
+
detail: {
|
|
71
|
+
operation: 'createNewsletterTestCreate',
|
|
72
|
+
path: '/cfg/newsletter/test/',
|
|
73
|
+
method: 'POST',
|
|
74
|
+
error: error,
|
|
75
|
+
response: response,
|
|
76
|
+
timestamp: new Date(),
|
|
77
|
+
},
|
|
78
|
+
bubbles: true,
|
|
79
|
+
cancelable: false,
|
|
80
|
+
});
|
|
81
|
+
window.dispatchEvent(event);
|
|
82
|
+
} catch (eventError) {
|
|
83
|
+
// Silently fail - event dispatch should never crash the app
|
|
84
|
+
consola.warn('Failed to dispatch validation error event:', eventError);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Re-throw the error
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Fetchers - Universal API functions
|
|
3
|
+
*
|
|
4
|
+
* Auto-generated from OpenAPI specification.
|
|
5
|
+
* These functions work in any JavaScript environment.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Runtime validation with Zod
|
|
9
|
+
* - Type-safe parameters and responses
|
|
10
|
+
* - Works with any data-fetching library (SWR, React Query, etc)
|
|
11
|
+
* - Server Component compatible
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import * as fetchers from './fetchers'
|
|
16
|
+
*
|
|
17
|
+
* // Direct usage
|
|
18
|
+
* const user = await fetchers.getUser(1)
|
|
19
|
+
*
|
|
20
|
+
* // With SWR
|
|
21
|
+
* const { data } = useSWR('user-1', () => fetchers.getUser(1))
|
|
22
|
+
*
|
|
23
|
+
* // With React Query
|
|
24
|
+
* const { data } = useQuery(['user', 1], () => fetchers.getUser(1))
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export * from './ext_newsletter__newsletter'
|
|
29
|
+
export * from './ext_newsletter__newsletter__bulk_email'
|
|
30
|
+
export * from './ext_newsletter__newsletter__campaigns'
|
|
31
|
+
export * from './ext_newsletter__newsletter__logs'
|
|
32
|
+
export * from './ext_newsletter__newsletter__newsletters'
|
|
33
|
+
export * from './ext_newsletter__newsletter__subscriptions'
|
|
34
|
+
export * from './ext_newsletter__newsletter__testing'
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* SWR Hooks for Newsletter
|
|
5
|
+
*
|
|
6
|
+
* React hooks powered by SWR for data fetching with automatic caching,
|
|
7
|
+
* revalidation, and optimistic updates.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Query hooks (GET)
|
|
12
|
+
* const { data, error, isLoading } = useUsers({ page: 1 })
|
|
13
|
+
*
|
|
14
|
+
* // Mutation hooks (POST/PUT/PATCH/DELETE)
|
|
15
|
+
* const createUser = useCreateUser()
|
|
16
|
+
* await createUser({ name: 'John', email: 'john@example.com' })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { useSWRConfig } from 'swr'
|
|
20
|
+
import * as Fetchers from '../fetchers/ext_newsletter__newsletter'
|
|
21
|
+
import type { API } from '../../index'
|
|
22
|
+
import type { NewsletterCampaign } from '../schemas/NewsletterCampaign.schema'
|
|
23
|
+
import type { PatchedNewsletterCampaignRequest } from '../schemas/PatchedNewsletterCampaignRequest.schema'
|
|
24
|
+
import type { PatchedUnsubscribeRequest } from '../schemas/PatchedUnsubscribeRequest.schema'
|
|
25
|
+
import type { Unsubscribe } from '../schemas/Unsubscribe.schema'
|
|
26
|
+
import type { UnsubscribeRequest } from '../schemas/UnsubscribeRequest.schema'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* API operation
|
|
30
|
+
*
|
|
31
|
+
* @method PATCH
|
|
32
|
+
* @path /cfg/newsletter/campaigns/{id}/
|
|
33
|
+
*/
|
|
34
|
+
export function usePartialUpdateNewsletterCampaignsPartialUpdate() {
|
|
35
|
+
const { mutate } = useSWRConfig()
|
|
36
|
+
|
|
37
|
+
return async (id: number, data?: PatchedNewsletterCampaignRequest, client?: API): Promise<NewsletterCampaign> => {
|
|
38
|
+
const result = await Fetchers.partialUpdateNewsletterCampaignsPartialUpdate(id, data, client)
|
|
39
|
+
// Revalidate related queries
|
|
40
|
+
mutate('cfg-newsletter-campaigns-partial')
|
|
41
|
+
return result
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* API operation
|
|
48
|
+
*
|
|
49
|
+
* @method PUT
|
|
50
|
+
* @path /cfg/newsletter/unsubscribe/
|
|
51
|
+
*/
|
|
52
|
+
export function useUpdateNewsletterUnsubscribeUpdate() {
|
|
53
|
+
const { mutate } = useSWRConfig()
|
|
54
|
+
|
|
55
|
+
return async (data: UnsubscribeRequest, client?: API): Promise<Unsubscribe> => {
|
|
56
|
+
const result = await Fetchers.updateNewsletterUnsubscribeUpdate(data, client)
|
|
57
|
+
// Revalidate related queries
|
|
58
|
+
mutate('cfg-newsletter-unsubscribe')
|
|
59
|
+
return result
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* API operation
|
|
66
|
+
*
|
|
67
|
+
* @method PATCH
|
|
68
|
+
* @path /cfg/newsletter/unsubscribe/
|
|
69
|
+
*/
|
|
70
|
+
export function usePartialUpdateNewsletterUnsubscribePartialUpdate() {
|
|
71
|
+
const { mutate } = useSWRConfig()
|
|
72
|
+
|
|
73
|
+
return async (data?: PatchedUnsubscribeRequest, client?: API): Promise<Unsubscribe> => {
|
|
74
|
+
const result = await Fetchers.partialUpdateNewsletterUnsubscribePartialUpdate(data, client)
|
|
75
|
+
// Revalidate related queries
|
|
76
|
+
mutate('cfg-newsletter-unsubscribe-partial')
|
|
77
|
+
return result
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__bulk_email.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* SWR Hooks for Bulk Email
|
|
5
|
+
*
|
|
6
|
+
* React hooks powered by SWR for data fetching with automatic caching,
|
|
7
|
+
* revalidation, and optimistic updates.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Query hooks (GET)
|
|
12
|
+
* const { data, error, isLoading } = useUsers({ page: 1 })
|
|
13
|
+
*
|
|
14
|
+
* // Mutation hooks (POST/PUT/PATCH/DELETE)
|
|
15
|
+
* const createUser = useCreateUser()
|
|
16
|
+
* await createUser({ name: 'John', email: 'john@example.com' })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { useSWRConfig } from 'swr'
|
|
20
|
+
import * as Fetchers from '../fetchers/ext_newsletter__newsletter__bulk_email'
|
|
21
|
+
import type { API } from '../../index'
|
|
22
|
+
import type { BulkEmailRequest } from '../schemas/BulkEmailRequest.schema'
|
|
23
|
+
import type { BulkEmailResponse } from '../schemas/BulkEmailResponse.schema'
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Send Bulk Email
|
|
27
|
+
*
|
|
28
|
+
* @method POST
|
|
29
|
+
* @path /cfg/newsletter/bulk/
|
|
30
|
+
*/
|
|
31
|
+
export function useCreateNewsletterBulkCreate() {
|
|
32
|
+
const { mutate } = useSWRConfig()
|
|
33
|
+
|
|
34
|
+
return async (data: BulkEmailRequest, client?: API): Promise<BulkEmailResponse> => {
|
|
35
|
+
const result = await Fetchers.createNewsletterBulkCreate(data, client)
|
|
36
|
+
// Revalidate related queries
|
|
37
|
+
mutate('cfg-newsletter-bulk')
|
|
38
|
+
return result
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__campaigns.ts
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* SWR Hooks for Campaigns
|
|
5
|
+
*
|
|
6
|
+
* React hooks powered by SWR for data fetching with automatic caching,
|
|
7
|
+
* revalidation, and optimistic updates.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Query hooks (GET)
|
|
12
|
+
* const { data, error, isLoading } = useUsers({ page: 1 })
|
|
13
|
+
*
|
|
14
|
+
* // Mutation hooks (POST/PUT/PATCH/DELETE)
|
|
15
|
+
* const createUser = useCreateUser()
|
|
16
|
+
* await createUser({ name: 'John', email: 'john@example.com' })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import useSWR from 'swr'
|
|
20
|
+
import { useSWRConfig } from 'swr'
|
|
21
|
+
import * as Fetchers from '../fetchers/ext_newsletter__newsletter__campaigns'
|
|
22
|
+
import type { API } from '../../index'
|
|
23
|
+
import type { NewsletterCampaign } from '../schemas/NewsletterCampaign.schema'
|
|
24
|
+
import type { NewsletterCampaignRequest } from '../schemas/NewsletterCampaignRequest.schema'
|
|
25
|
+
import type { PaginatedNewsletterCampaignList } from '../schemas/PaginatedNewsletterCampaignList.schema'
|
|
26
|
+
import type { SendCampaignRequest } from '../schemas/SendCampaignRequest.schema'
|
|
27
|
+
import type { SendCampaignResponse } from '../schemas/SendCampaignResponse.schema'
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* List Newsletter Campaigns
|
|
31
|
+
*
|
|
32
|
+
* @method GET
|
|
33
|
+
* @path /cfg/newsletter/campaigns/
|
|
34
|
+
*/
|
|
35
|
+
export function useNewsletterCampaignsList(params?: { page?: number; page_size?: number }, client?: API): ReturnType<typeof useSWR<PaginatedNewsletterCampaignList>> {
|
|
36
|
+
return useSWR<PaginatedNewsletterCampaignList>(
|
|
37
|
+
params ? ['cfg-newsletter-campaigns', params] : 'cfg-newsletter-campaigns',
|
|
38
|
+
() => Fetchers.getNewsletterCampaignsList(params, client)
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Create Newsletter Campaign
|
|
45
|
+
*
|
|
46
|
+
* @method POST
|
|
47
|
+
* @path /cfg/newsletter/campaigns/
|
|
48
|
+
*/
|
|
49
|
+
export function useCreateNewsletterCampaignsCreate() {
|
|
50
|
+
const { mutate } = useSWRConfig()
|
|
51
|
+
|
|
52
|
+
return async (data: NewsletterCampaignRequest, client?: API): Promise<NewsletterCampaign> => {
|
|
53
|
+
const result = await Fetchers.createNewsletterCampaignsCreate(data, client)
|
|
54
|
+
// Revalidate related queries
|
|
55
|
+
mutate('cfg-newsletter-campaigns')
|
|
56
|
+
return result
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get Campaign Details
|
|
63
|
+
*
|
|
64
|
+
* @method GET
|
|
65
|
+
* @path /cfg/newsletter/campaigns/{id}/
|
|
66
|
+
*/
|
|
67
|
+
export function useNewsletterCampaignsRetrieve(id: number, client?: API): ReturnType<typeof useSWR<NewsletterCampaign>> {
|
|
68
|
+
return useSWR<NewsletterCampaign>(
|
|
69
|
+
['cfg-newsletter-campaign', id],
|
|
70
|
+
() => Fetchers.getNewsletterCampaignsRetrieve(id, client)
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Update Campaign
|
|
77
|
+
*
|
|
78
|
+
* @method PUT
|
|
79
|
+
* @path /cfg/newsletter/campaigns/{id}/
|
|
80
|
+
*/
|
|
81
|
+
export function useUpdateNewsletterCampaignsUpdate() {
|
|
82
|
+
const { mutate } = useSWRConfig()
|
|
83
|
+
|
|
84
|
+
return async (id: number, data: NewsletterCampaignRequest, client?: API): Promise<NewsletterCampaign> => {
|
|
85
|
+
const result = await Fetchers.updateNewsletterCampaignsUpdate(id, data, client)
|
|
86
|
+
// Revalidate related queries
|
|
87
|
+
mutate('cfg-newsletter-campaigns')
|
|
88
|
+
mutate('cfg-newsletter-campaign')
|
|
89
|
+
return result
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Delete Campaign
|
|
96
|
+
*
|
|
97
|
+
* @method DELETE
|
|
98
|
+
* @path /cfg/newsletter/campaigns/{id}/
|
|
99
|
+
*/
|
|
100
|
+
export function useDeleteNewsletterCampaignsDestroy() {
|
|
101
|
+
const { mutate } = useSWRConfig()
|
|
102
|
+
|
|
103
|
+
return async (id: number, client?: API): Promise<void> => {
|
|
104
|
+
const result = await Fetchers.deleteNewsletterCampaignsDestroy(id, client)
|
|
105
|
+
// Revalidate related queries
|
|
106
|
+
mutate('cfg-newsletter-campaigns')
|
|
107
|
+
mutate('cfg-newsletter-campaign')
|
|
108
|
+
return result
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Send Newsletter Campaign
|
|
115
|
+
*
|
|
116
|
+
* @method POST
|
|
117
|
+
* @path /cfg/newsletter/campaigns/send/
|
|
118
|
+
*/
|
|
119
|
+
export function useCreateNewsletterCampaignsSendCreate() {
|
|
120
|
+
const { mutate } = useSWRConfig()
|
|
121
|
+
|
|
122
|
+
return async (data: SendCampaignRequest, client?: API): Promise<SendCampaignResponse> => {
|
|
123
|
+
const result = await Fetchers.createNewsletterCampaignsSendCreate(data, client)
|
|
124
|
+
// Revalidate related queries
|
|
125
|
+
mutate('cfg-newsletter-campaigns-send')
|
|
126
|
+
return result
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* SWR Hooks for Logs
|
|
5
|
+
*
|
|
6
|
+
* React hooks powered by SWR for data fetching with automatic caching,
|
|
7
|
+
* revalidation, and optimistic updates.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Query hooks (GET)
|
|
12
|
+
* const { data, error, isLoading } = useUsers({ page: 1 })
|
|
13
|
+
*
|
|
14
|
+
* // Mutation hooks (POST/PUT/PATCH/DELETE)
|
|
15
|
+
* const createUser = useCreateUser()
|
|
16
|
+
* await createUser({ name: 'John', email: 'john@example.com' })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import useSWR from 'swr'
|
|
20
|
+
import * as Fetchers from '../fetchers/ext_newsletter__newsletter__logs'
|
|
21
|
+
import type { API } from '../../index'
|
|
22
|
+
import type { PaginatedEmailLogList } from '../schemas/PaginatedEmailLogList.schema'
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* List Email Logs
|
|
26
|
+
*
|
|
27
|
+
* @method GET
|
|
28
|
+
* @path /cfg/newsletter/logs/
|
|
29
|
+
*/
|
|
30
|
+
export function useNewsletterLogsList(params?: { page?: number; page_size?: number }, client?: API): ReturnType<typeof useSWR<PaginatedEmailLogList>> {
|
|
31
|
+
return useSWR<PaginatedEmailLogList>(
|
|
32
|
+
params ? ['cfg-newsletter-logs', params] : 'cfg-newsletter-logs',
|
|
33
|
+
() => Fetchers.getNewsletterLogsList(params, client)
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__newsletters.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* SWR Hooks for Newsletters
|
|
5
|
+
*
|
|
6
|
+
* React hooks powered by SWR for data fetching with automatic caching,
|
|
7
|
+
* revalidation, and optimistic updates.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Query hooks (GET)
|
|
12
|
+
* const { data, error, isLoading } = useUsers({ page: 1 })
|
|
13
|
+
*
|
|
14
|
+
* // Mutation hooks (POST/PUT/PATCH/DELETE)
|
|
15
|
+
* const createUser = useCreateUser()
|
|
16
|
+
* await createUser({ name: 'John', email: 'john@example.com' })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import useSWR from 'swr'
|
|
20
|
+
import * as Fetchers from '../fetchers/ext_newsletter__newsletter__newsletters'
|
|
21
|
+
import type { API } from '../../index'
|
|
22
|
+
import type { Newsletter } from '../schemas/Newsletter.schema'
|
|
23
|
+
import type { PaginatedNewsletterList } from '../schemas/PaginatedNewsletterList.schema'
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* List Active Newsletters
|
|
27
|
+
*
|
|
28
|
+
* @method GET
|
|
29
|
+
* @path /cfg/newsletter/newsletters/
|
|
30
|
+
*/
|
|
31
|
+
export function useNewsletterNewslettersList(params?: { page?: number; page_size?: number }, client?: API): ReturnType<typeof useSWR<PaginatedNewsletterList>> {
|
|
32
|
+
return useSWR<PaginatedNewsletterList>(
|
|
33
|
+
params ? ['cfg-newsletter-newsletters', params] : 'cfg-newsletter-newsletters',
|
|
34
|
+
() => Fetchers.getNewsletterNewslettersList(params, client)
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get Newsletter Details
|
|
41
|
+
*
|
|
42
|
+
* @method GET
|
|
43
|
+
* @path /cfg/newsletter/newsletters/{id}/
|
|
44
|
+
*/
|
|
45
|
+
export function useNewsletterNewslettersRetrieve(id: number, client?: API): ReturnType<typeof useSWR<Newsletter>> {
|
|
46
|
+
return useSWR<Newsletter>(
|
|
47
|
+
['cfg-newsletter-newsletter', id],
|
|
48
|
+
() => Fetchers.getNewsletterNewslettersRetrieve(id, client)
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|