@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
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { API, APIClient, APIError, APILogger, BulkEmailRequestSchema, BulkEmailResponseSchema, CookieStorageAdapter, DEFAULT_RETRY_CONFIG, EmailLogSchema, enums_exports as Enums, ErrorResponseSchema, models_exports as ExtNewsletterBulkEmailTypes, models_exports2 as ExtNewsletterCampaignsTypes, models_exports3 as ExtNewsletterLogsTypes, models_exports7 as ExtNewsletterNewsletterTypes, models_exports4 as ExtNewsletterNewslettersTypes, models_exports5 as ExtNewsletterSubscriptionsTypes, models_exports6 as ExtNewsletterTestingTypes, FetchAdapter, fetchers_exports as Fetchers, LocalStorageAdapter, MemoryStorageAdapter, NetworkError, NewsletterCampaignRequestSchema, NewsletterCampaignSchema, NewsletterSchema, NewsletterSubscriptionSchema, PaginatedEmailLogListSchema, PaginatedNewsletterCampaignListSchema, PaginatedNewsletterListSchema, PaginatedNewsletterSubscriptionListSchema, PatchedNewsletterCampaignRequestSchema, PatchedUnsubscribeRequestSchema, REFRESH_TOKEN_KEY, schemas_exports as Schemas, SendCampaignRequestSchema, SendCampaignResponseSchema, SubscribeRequestSchema, SubscribeResponseSchema, SuccessResponseSchema, TOKEN_KEY, TestEmailRequestSchema, UnsubscribeRequestSchema, UnsubscribeSchema, apiNewsletter, clearAPITokens, configureAPI, createNewsletterBulkCreate, createNewsletterCampaignsCreate, createNewsletterCampaignsSendCreate, createNewsletterSubscribeCreate, createNewsletterTestCreate, createNewsletterUnsubscribeCreate, deleteNewsletterCampaignsDestroy, dispatchValidationError, formatZodError, getAPIInstance, getNewsletterCampaignsList, getNewsletterCampaignsRetrieve, getNewsletterLogsList, getNewsletterNewslettersList, getNewsletterNewslettersRetrieve, getNewsletterSubscriptionsList, isAPIConfigured, onValidationError, partialUpdateNewsletterCampaignsPartialUpdate, partialUpdateNewsletterUnsubscribePartialUpdate, reconfigureAPI, resetAPI, shouldRetry, updateNewsletterCampaignsUpdate, updateNewsletterUnsubscribeUpdate, withRetry } from './chunk-LQLPNWHR.js';
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@djangocfg/ext-newsletter",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Newsletter and subscription management extension for DjangoCFG",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"django",
|
|
7
|
+
"djangocfg",
|
|
8
|
+
"extension",
|
|
9
|
+
"newsletter",
|
|
10
|
+
"subscription",
|
|
11
|
+
"email",
|
|
12
|
+
"marketing",
|
|
13
|
+
"typescript",
|
|
14
|
+
"react"
|
|
15
|
+
],
|
|
16
|
+
"author": {
|
|
17
|
+
"name": "DjangoCFG",
|
|
18
|
+
"url": "https://djangocfg.com"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://djangocfg.com",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/markolofsen/django-cfg.git",
|
|
24
|
+
"directory": "extensions/newsletter"
|
|
25
|
+
},
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/markolofsen/django-cfg/issues"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"type": "module",
|
|
31
|
+
"main": "./dist/index.cjs",
|
|
32
|
+
"module": "./dist/index.mjs",
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"import": "./dist/index.mjs",
|
|
38
|
+
"require": "./dist/index.cjs"
|
|
39
|
+
},
|
|
40
|
+
"./hooks": {
|
|
41
|
+
"types": "./dist/hooks.d.ts",
|
|
42
|
+
"import": "./dist/hooks.mjs",
|
|
43
|
+
"require": "./dist/hooks.cjs"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist",
|
|
48
|
+
"src"
|
|
49
|
+
],
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsup",
|
|
52
|
+
"dev": "tsup --watch",
|
|
53
|
+
"check": "tsc --noEmit"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@djangocfg/api": "^2.1.14",
|
|
57
|
+
"@djangocfg/ext-base": "^1.0.0",
|
|
58
|
+
"@djangocfg/ui-nextjs": "^2.1.14",
|
|
59
|
+
"consola": "^3.4.2",
|
|
60
|
+
"lucide-react": "^0.545.0",
|
|
61
|
+
"next": "^15.5.7",
|
|
62
|
+
"p-retry": "^7.0.0",
|
|
63
|
+
"react": "^18 || ^19",
|
|
64
|
+
"react-dom": "^18 || ^19",
|
|
65
|
+
"swr": "^2.3.7",
|
|
66
|
+
"zod": "^4.1.13"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@djangocfg/api": "^2.1.14",
|
|
70
|
+
"@djangocfg/ext-base": "^1.0.0",
|
|
71
|
+
"@djangocfg/typescript-config": "^2.1.14",
|
|
72
|
+
"@types/node": "^24.7.2",
|
|
73
|
+
"@types/react": "^19.0.0",
|
|
74
|
+
"consola": "^3.4.2",
|
|
75
|
+
"p-retry": "^7.0.0",
|
|
76
|
+
"swr": "^2.3.7",
|
|
77
|
+
"tsup": "^8.5.0",
|
|
78
|
+
"typescript": "^5.9.3"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed fetchers for Newsletter
|
|
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 { NewsletterCampaignSchema, type NewsletterCampaign } from '../schemas/NewsletterCampaign.schema'
|
|
34
|
+
import { PatchedNewsletterCampaignRequestSchema, type PatchedNewsletterCampaignRequest } from '../schemas/PatchedNewsletterCampaignRequest.schema'
|
|
35
|
+
import { PatchedUnsubscribeRequestSchema, type PatchedUnsubscribeRequest } from '../schemas/PatchedUnsubscribeRequest.schema'
|
|
36
|
+
import { UnsubscribeSchema, type Unsubscribe } from '../schemas/Unsubscribe.schema'
|
|
37
|
+
import { UnsubscribeRequestSchema, type UnsubscribeRequest } from '../schemas/UnsubscribeRequest.schema'
|
|
38
|
+
import { getAPIInstance } from '../../api-instance'
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* API operation
|
|
42
|
+
*
|
|
43
|
+
* @method PATCH
|
|
44
|
+
* @path /cfg/newsletter/campaigns/{id}/
|
|
45
|
+
*/
|
|
46
|
+
export async function partialUpdateNewsletterCampaignsPartialUpdate( id: number, data?: PatchedNewsletterCampaignRequest, client?: any
|
|
47
|
+
): Promise<NewsletterCampaign> {
|
|
48
|
+
const api = client || getAPIInstance()
|
|
49
|
+
const response = await api.ext_newsletter_newsletter.campaignsPartialUpdate(id, data)
|
|
50
|
+
try {
|
|
51
|
+
return NewsletterCampaignSchema.parse(response)
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// Zod validation error - log detailed information
|
|
54
|
+
consola.error('❌ Zod Validation Failed');
|
|
55
|
+
consola.box(`partialUpdateNewsletterCampaignsPartialUpdate\nPath: /cfg/newsletter/campaigns/{id}/\nMethod: PATCH`);
|
|
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: 'partialUpdateNewsletterCampaignsPartialUpdate',
|
|
75
|
+
path: '/cfg/newsletter/campaigns/{id}/',
|
|
76
|
+
method: 'PATCH',
|
|
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
|
+
* API operation
|
|
99
|
+
*
|
|
100
|
+
* @method PUT
|
|
101
|
+
* @path /cfg/newsletter/unsubscribe/
|
|
102
|
+
*/
|
|
103
|
+
export async function updateNewsletterUnsubscribeUpdate( data: UnsubscribeRequest, client?: any
|
|
104
|
+
): Promise<Unsubscribe> {
|
|
105
|
+
const api = client || getAPIInstance()
|
|
106
|
+
const response = await api.ext_newsletter_newsletter.unsubscribeUpdate(data)
|
|
107
|
+
try {
|
|
108
|
+
return UnsubscribeSchema.parse(response)
|
|
109
|
+
} catch (error) {
|
|
110
|
+
// Zod validation error - log detailed information
|
|
111
|
+
consola.error('❌ Zod Validation Failed');
|
|
112
|
+
consola.box(`updateNewsletterUnsubscribeUpdate\nPath: /cfg/newsletter/unsubscribe/\nMethod: PUT`);
|
|
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: 'updateNewsletterUnsubscribeUpdate',
|
|
132
|
+
path: '/cfg/newsletter/unsubscribe/',
|
|
133
|
+
method: 'PUT',
|
|
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
|
+
* API operation
|
|
156
|
+
*
|
|
157
|
+
* @method PATCH
|
|
158
|
+
* @path /cfg/newsletter/unsubscribe/
|
|
159
|
+
*/
|
|
160
|
+
export async function partialUpdateNewsletterUnsubscribePartialUpdate( data?: PatchedUnsubscribeRequest, client?: any
|
|
161
|
+
): Promise<Unsubscribe> {
|
|
162
|
+
const api = client || getAPIInstance()
|
|
163
|
+
const response = await api.ext_newsletter_newsletter.unsubscribePartialUpdate(data)
|
|
164
|
+
try {
|
|
165
|
+
return UnsubscribeSchema.parse(response)
|
|
166
|
+
} catch (error) {
|
|
167
|
+
// Zod validation error - log detailed information
|
|
168
|
+
consola.error('❌ Zod Validation Failed');
|
|
169
|
+
consola.box(`partialUpdateNewsletterUnsubscribePartialUpdate\nPath: /cfg/newsletter/unsubscribe/\nMethod: PATCH`);
|
|
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: 'partialUpdateNewsletterUnsubscribePartialUpdate',
|
|
189
|
+
path: '/cfg/newsletter/unsubscribe/',
|
|
190
|
+
method: 'PATCH',
|
|
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__bulk_email.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed fetchers for Bulk Email
|
|
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 { BulkEmailRequestSchema, type BulkEmailRequest } from '../schemas/BulkEmailRequest.schema'
|
|
34
|
+
import { BulkEmailResponseSchema, type BulkEmailResponse } from '../schemas/BulkEmailResponse.schema'
|
|
35
|
+
import { getAPIInstance } from '../../api-instance'
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Send Bulk Email
|
|
39
|
+
*
|
|
40
|
+
* @method POST
|
|
41
|
+
* @path /cfg/newsletter/bulk/
|
|
42
|
+
*/
|
|
43
|
+
export async function createNewsletterBulkCreate( data: BulkEmailRequest, client?: any
|
|
44
|
+
): Promise<BulkEmailResponse> {
|
|
45
|
+
const api = client || getAPIInstance()
|
|
46
|
+
const response = await api.ext_newsletter_bulk_email.newsletterBulkCreate(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(`createNewsletterBulkCreate\nPath: /cfg/newsletter/bulk/\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: 'createNewsletterBulkCreate',
|
|
72
|
+
path: '/cfg/newsletter/bulk/',
|
|
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
|
+
|