strapi-typed-client 1.6.1 → 2.0.1
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 +2 -2
- package/dist/cli/commands/check.d.ts +2 -3
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +3 -3
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +3 -3
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +6 -4
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts +3 -3
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +19 -9
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/utils/file-writer.d.ts +8 -7
- package/dist/cli/utils/file-writer.d.ts.map +1 -1
- package/dist/cli/utils/file-writer.js +17 -61
- package/dist/cli/utils/file-writer.js.map +1 -1
- package/dist/core/endpoint-converter.d.ts +5 -1
- package/dist/core/endpoint-converter.d.ts.map +1 -1
- package/dist/core/endpoint-converter.js +114 -8
- package/dist/core/endpoint-converter.js.map +1 -1
- package/dist/generator/auth-api-generator.d.ts +11 -3
- package/dist/generator/auth-api-generator.d.ts.map +1 -1
- package/dist/generator/auth-api-generator.js +213 -220
- package/dist/generator/auth-api-generator.js.map +1 -1
- package/dist/generator/client-generator.d.ts +9 -0
- package/dist/generator/client-generator.d.ts.map +1 -1
- package/dist/generator/client-generator.js +201 -78
- package/dist/generator/client-generator.js.map +1 -1
- package/dist/generator/custom-api-generator.d.ts +1 -1
- package/dist/generator/custom-api-generator.d.ts.map +1 -1
- package/dist/generator/custom-api-generator.js +29 -5
- package/dist/generator/custom-api-generator.js.map +1 -1
- package/dist/generator/index-generator.d.ts.map +1 -1
- package/dist/generator/index-generator.js +0 -1
- package/dist/generator/index-generator.js.map +1 -1
- package/dist/generator/index.d.ts +18 -1
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +85 -9
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/plugin-api-generator.d.ts +2 -0
- package/dist/generator/plugin-api-generator.d.ts.map +1 -1
- package/dist/generator/plugin-api-generator.js +23 -1
- package/dist/generator/plugin-api-generator.js.map +1 -1
- package/dist/generator/plugin-registry.d.ts +5 -0
- package/dist/generator/plugin-registry.d.ts.map +1 -1
- package/dist/generator/plugin-registry.js +2 -1
- package/dist/generator/plugin-registry.js.map +1 -1
- package/dist/generator/types-generator.d.ts +13 -3
- package/dist/generator/types-generator.d.ts.map +1 -1
- package/dist/generator/types-generator.js +91 -101
- package/dist/generator/types-generator.js.map +1 -1
- package/dist/next/index.d.ts +9 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +46 -45
- package/dist/next/index.js.map +1 -1
- package/dist/schema-types.d.ts +1 -1
- package/dist/schema-types.d.ts.map +1 -1
- package/dist/shared/client-header.d.ts +19 -0
- package/dist/shared/client-header.d.ts.map +1 -0
- package/dist/shared/client-header.js +58 -0
- package/dist/shared/client-header.js.map +1 -0
- package/package.json +9 -15
- package/dist/index.d.ts +0 -102
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -79
- package/dist/index.js.map +0 -1
- package/src/generator/templates/stringify-query.ts +0 -36
|
@@ -1,5 +1,95 @@
|
|
|
1
1
|
import { Project } from 'ts-morph';
|
|
2
2
|
import { toCamelCase } from '../shared/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Standard users-permissions auth routes, used as the fallback when the schema
|
|
5
|
+
* API reports no auth routes (a real Strapi always registers these). Feeding
|
|
6
|
+
* them through the same builder as discovered routes keeps a single code path —
|
|
7
|
+
* there is no separate hand-written "hardcoded" class to drift out of sync.
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_AUTH_ROUTES = [
|
|
10
|
+
{
|
|
11
|
+
method: 'POST',
|
|
12
|
+
path: '/auth/local',
|
|
13
|
+
handler: 'auth.callback',
|
|
14
|
+
controller: 'auth',
|
|
15
|
+
action: 'callback',
|
|
16
|
+
params: [],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
method: 'POST',
|
|
20
|
+
path: '/auth/local/register',
|
|
21
|
+
handler: 'auth.register',
|
|
22
|
+
controller: 'auth',
|
|
23
|
+
action: 'register',
|
|
24
|
+
params: [],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
method: 'GET',
|
|
28
|
+
path: '/auth/:provider/callback',
|
|
29
|
+
handler: 'auth.callback',
|
|
30
|
+
controller: 'auth',
|
|
31
|
+
action: 'callback',
|
|
32
|
+
params: ['provider'],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
method: 'POST',
|
|
36
|
+
path: '/auth/forgot-password',
|
|
37
|
+
handler: 'auth.forgotPassword',
|
|
38
|
+
controller: 'auth',
|
|
39
|
+
action: 'forgotPassword',
|
|
40
|
+
params: [],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
method: 'POST',
|
|
44
|
+
path: '/auth/reset-password',
|
|
45
|
+
handler: 'auth.resetPassword',
|
|
46
|
+
controller: 'auth',
|
|
47
|
+
action: 'resetPassword',
|
|
48
|
+
params: [],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
method: 'POST',
|
|
52
|
+
path: '/auth/change-password',
|
|
53
|
+
handler: 'auth.changePassword',
|
|
54
|
+
controller: 'auth',
|
|
55
|
+
action: 'changePassword',
|
|
56
|
+
params: [],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
method: 'GET',
|
|
60
|
+
path: '/auth/email-confirmation',
|
|
61
|
+
handler: 'auth.emailConfirmation',
|
|
62
|
+
controller: 'auth',
|
|
63
|
+
action: 'emailConfirmation',
|
|
64
|
+
params: [],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
method: 'POST',
|
|
68
|
+
path: '/auth/send-email-confirmation',
|
|
69
|
+
handler: 'auth.sendEmailConfirmation',
|
|
70
|
+
controller: 'auth',
|
|
71
|
+
action: 'sendEmailConfirmation',
|
|
72
|
+
params: [],
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
const DEFAULT_USER_ROUTES = [
|
|
76
|
+
{
|
|
77
|
+
method: 'GET',
|
|
78
|
+
path: '/users/me',
|
|
79
|
+
handler: 'user.me',
|
|
80
|
+
controller: 'user',
|
|
81
|
+
action: 'me',
|
|
82
|
+
params: [],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
method: 'PUT',
|
|
86
|
+
path: '/users/me',
|
|
87
|
+
handler: 'user.updateMe',
|
|
88
|
+
controller: 'user',
|
|
89
|
+
action: 'updateMe',
|
|
90
|
+
params: [],
|
|
91
|
+
},
|
|
92
|
+
];
|
|
3
93
|
export class AuthApiGenerator {
|
|
4
94
|
generateAuthTypes() {
|
|
5
95
|
const project = new Project({ useInMemoryFileSystem: true });
|
|
@@ -71,222 +161,60 @@ export class AuthApiGenerator {
|
|
|
71
161
|
{ name: 'user', type: 'User' },
|
|
72
162
|
],
|
|
73
163
|
});
|
|
164
|
+
// POST /api/auth/forgot-password always answers `{ ok: true }` (Strapi
|
|
165
|
+
// never reveals whether the email exists — anti-enumeration).
|
|
166
|
+
sf.addInterface({
|
|
167
|
+
name: 'ForgotPasswordResponse',
|
|
168
|
+
isExported: true,
|
|
169
|
+
properties: [{ name: 'ok', type: 'true' }],
|
|
170
|
+
});
|
|
171
|
+
// POST /api/auth/send-email-confirmation echoes the target address and
|
|
172
|
+
// a delivery flag.
|
|
173
|
+
sf.addInterface({
|
|
174
|
+
name: 'SendEmailConfirmationResponse',
|
|
175
|
+
isExported: true,
|
|
176
|
+
properties: [
|
|
177
|
+
{ name: 'email', type: 'string' },
|
|
178
|
+
{ name: 'sent', type: 'boolean' },
|
|
179
|
+
],
|
|
180
|
+
});
|
|
74
181
|
return sf.getFullText();
|
|
75
182
|
}
|
|
76
183
|
generateAuthApiClass(authRoutes = [], userRoutes = []) {
|
|
77
|
-
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
184
|
+
// No routes discovered → fall back to the standard users-permissions
|
|
185
|
+
// routes so the same builder still produces a complete AuthAPI.
|
|
186
|
+
const usingDefaults = authRoutes.length === 0 && userRoutes.length === 0;
|
|
187
|
+
const effectiveAuthRoutes = usingDefaults
|
|
188
|
+
? DEFAULT_AUTH_ROUTES
|
|
189
|
+
: authRoutes;
|
|
190
|
+
const effectiveUserRoutes = usingDefaults
|
|
191
|
+
? DEFAULT_USER_ROUTES
|
|
192
|
+
: userRoutes;
|
|
193
|
+
return this.buildAuthApiClass(effectiveAuthRoutes, effectiveUserRoutes, usingDefaults);
|
|
84
194
|
}
|
|
85
|
-
|
|
86
|
-
return `// Auth API wrapper for users-permissions plugin
|
|
87
|
-
class AuthAPI extends BaseAPI {
|
|
88
|
-
constructor(config: StrapiClientConfig) {
|
|
89
|
-
super(config)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Login with email/username and password
|
|
94
|
-
* POST /api/auth/local
|
|
95
|
-
*/
|
|
96
|
-
async login(credentials: LoginCredentials): Promise<AuthResponse> {
|
|
97
|
-
const url = \`\${this.config.baseURL}/api/auth/local\`
|
|
98
|
-
return this.request<AuthResponse>(url, {
|
|
99
|
-
method: 'POST',
|
|
100
|
-
body: JSON.stringify(credentials),
|
|
101
|
-
}, undefined, 'Strapi Auth')
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Register a new user
|
|
106
|
-
* POST /api/auth/local/register
|
|
107
|
-
*/
|
|
108
|
-
async register(data: RegisterData): Promise<AuthResponse> {
|
|
109
|
-
const url = \`\${this.config.baseURL}/api/auth/local/register\`
|
|
110
|
-
return this.request<AuthResponse>(url, {
|
|
111
|
-
method: 'POST',
|
|
112
|
-
body: JSON.stringify(data),
|
|
113
|
-
}, undefined, 'Strapi Auth')
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Get current authenticated user
|
|
118
|
-
* GET /api/users/me
|
|
119
|
-
* Supports populate with automatic type inference
|
|
120
|
-
*/
|
|
121
|
-
|
|
122
|
-
// Overload: with populate object → populated return type
|
|
123
|
-
me<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
124
|
-
params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,
|
|
125
|
-
nextOptions?: NextOptions
|
|
126
|
-
): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>
|
|
127
|
-
// Overload: with populate '*' or true → all fields populated
|
|
128
|
-
me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
129
|
-
params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,
|
|
130
|
-
nextOptions?: NextOptions
|
|
131
|
-
): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>
|
|
132
|
-
// Overload: general case → base return type
|
|
133
|
-
me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
134
|
-
params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,
|
|
135
|
-
nextOptions?: NextOptions
|
|
136
|
-
): Promise<SelectFields<User, User, TFields>>
|
|
137
|
-
|
|
138
|
-
async me(params?: any, nextOptions?: any): Promise<any> {
|
|
139
|
-
const queryString = params ? this.buildQueryString(params) : ''
|
|
140
|
-
const url = queryString ? \`\${this.config.baseURL}/api/users/me\${queryString}\` : \`\${this.config.baseURL}/api/users/me\`
|
|
141
|
-
const response = await this.request<any>(url, {}, nextOptions, "Strapi Auth")
|
|
142
|
-
return response
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Update current authenticated user
|
|
147
|
-
* PUT /api/users/me
|
|
148
|
-
* Supports populate with automatic type inference
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
// Overload: with populate object → populated return type
|
|
152
|
-
updateMe<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
153
|
-
data: Partial<User>,
|
|
154
|
-
params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,
|
|
155
|
-
nextOptions?: NextOptions
|
|
156
|
-
): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>
|
|
157
|
-
// Overload: with populate '*' or true → all fields populated
|
|
158
|
-
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
159
|
-
data: Partial<User>,
|
|
160
|
-
params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,
|
|
161
|
-
nextOptions?: NextOptions
|
|
162
|
-
): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>
|
|
163
|
-
// Overload: general case → base return type
|
|
164
|
-
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
165
|
-
data: Partial<User>,
|
|
166
|
-
params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,
|
|
167
|
-
nextOptions?: NextOptions
|
|
168
|
-
): Promise<SelectFields<User, User, TFields>>
|
|
169
|
-
|
|
170
|
-
async updateMe(data: Partial<User>, params?: any, nextOptions?: any): Promise<any> {
|
|
171
|
-
const queryString = params ? this.buildQueryString(params) : ''
|
|
172
|
-
const url = queryString ? \`\${this.config.baseURL}/api/users/me\${queryString}\` : \`\${this.config.baseURL}/api/users/me\`
|
|
173
|
-
const response = await this.request<any>(
|
|
174
|
-
url,
|
|
175
|
-
{
|
|
176
|
-
method: 'PUT',
|
|
177
|
-
body: JSON.stringify(data),
|
|
178
|
-
},
|
|
179
|
-
nextOptions,
|
|
180
|
-
"Strapi Auth"
|
|
181
|
-
)
|
|
182
|
-
return response
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* OAuth callback
|
|
187
|
-
* GET /api/auth/:provider/callback
|
|
188
|
-
* @param provider - OAuth provider name (google, github, etc.)
|
|
189
|
-
* @param search - Query string (e.g., "access_token=xxx&code=yyy" or "?access_token=xxx")
|
|
190
|
-
*/
|
|
191
|
-
async callback(
|
|
192
|
-
provider: string,
|
|
193
|
-
search?: string,
|
|
194
|
-
nextOptions?: NextOptions
|
|
195
|
-
): Promise<AuthResponse> {
|
|
196
|
-
let path = \`/api/auth/\${provider}/callback\`
|
|
197
|
-
if (search) {
|
|
198
|
-
// Add search string, handling both "?key=val" and "key=val" formats
|
|
199
|
-
path += search.startsWith("?") ? search : \`?\${search}\`
|
|
200
|
-
}
|
|
201
|
-
const url = \`\${this.config.baseURL}\${path}\`
|
|
202
|
-
return this.request<AuthResponse>(url, {}, nextOptions, "Strapi Auth")
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Logout current user (client-side token removal helper)
|
|
207
|
-
*/
|
|
208
|
-
async logout(): Promise<void> {
|
|
209
|
-
this.config.token = undefined
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Request password reset email
|
|
214
|
-
* POST /api/auth/forgot-password
|
|
215
|
-
*/
|
|
216
|
-
async forgotPassword(data: ForgotPasswordData): Promise<{ ok: boolean }> {
|
|
217
|
-
const url = \`\${this.config.baseURL}/api/auth/forgot-password\`
|
|
218
|
-
await this.request(url, {
|
|
219
|
-
method: 'POST',
|
|
220
|
-
body: JSON.stringify(data),
|
|
221
|
-
}, undefined, 'Strapi Auth')
|
|
222
|
-
return { ok: true }
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Reset password using reset code
|
|
227
|
-
* POST /api/auth/reset-password
|
|
228
|
-
*/
|
|
229
|
-
async resetPassword(data: ResetPasswordData): Promise<AuthResponse> {
|
|
230
|
-
const url = \`\${this.config.baseURL}/api/auth/reset-password\`
|
|
231
|
-
return this.request<AuthResponse>(url, {
|
|
232
|
-
method: 'POST',
|
|
233
|
-
body: JSON.stringify(data),
|
|
234
|
-
}, undefined, 'Strapi Auth')
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Change password for authenticated user
|
|
239
|
-
* POST /api/auth/change-password
|
|
240
|
-
*/
|
|
241
|
-
async changePassword(data: ChangePasswordData): Promise<AuthResponse> {
|
|
242
|
-
const url = \`\${this.config.baseURL}/api/auth/change-password\`
|
|
243
|
-
return this.request<AuthResponse>(url, {
|
|
244
|
-
method: 'POST',
|
|
245
|
-
body: JSON.stringify(data),
|
|
246
|
-
}, undefined, 'Strapi Auth')
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Confirm user email address
|
|
251
|
-
* GET /api/auth/email-confirmation?confirmation=TOKEN
|
|
252
|
-
*/
|
|
253
|
-
async confirmEmail(confirmationToken: string, nextOptions?: NextOptions): Promise<EmailConfirmationResponse> {
|
|
254
|
-
const url = \`\${this.config.baseURL}/api/auth/email-confirmation?confirmation=\${confirmationToken}\`
|
|
255
|
-
return this.request<EmailConfirmationResponse>(
|
|
256
|
-
url,
|
|
257
|
-
{},
|
|
258
|
-
nextOptions,
|
|
259
|
-
'Strapi Auth'
|
|
260
|
-
)
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Send email confirmation
|
|
265
|
-
* POST /api/auth/send-email-confirmation
|
|
266
|
-
*/
|
|
267
|
-
async sendEmailConfirmation(email: string): Promise<{ ok: boolean }> {
|
|
268
|
-
const url = \`\${this.config.baseURL}/api/auth/send-email-confirmation\`
|
|
269
|
-
await this.request(url, {
|
|
270
|
-
method: 'POST',
|
|
271
|
-
body: JSON.stringify({ email }),
|
|
272
|
-
}, undefined, 'Strapi Auth')
|
|
273
|
-
return { ok: true }
|
|
274
|
-
}
|
|
275
|
-
}`;
|
|
276
|
-
}
|
|
277
|
-
generateDynamicAuthApiClass(authRoutes, userRoutes) {
|
|
278
|
-
// Generate methods for auth routes
|
|
195
|
+
buildAuthApiClass(authRoutes, userRoutes, usingDefaults) {
|
|
279
196
|
const authMethods = authRoutes
|
|
280
|
-
.map(route => this.
|
|
197
|
+
.map(route => this.generateAuthMethod(route))
|
|
281
198
|
.join('\n\n');
|
|
282
|
-
//
|
|
199
|
+
// Only special user routes belong on AuthAPI; the rest of the users
|
|
200
|
+
// collection is reached via the generated UsersAPI.
|
|
283
201
|
const specialUserRoutes = userRoutes.filter(r => r.action === 'me' ||
|
|
284
202
|
r.action === 'updateMe' ||
|
|
285
203
|
r.action === 'count');
|
|
286
204
|
const userMethods = specialUserRoutes
|
|
287
|
-
.map(route => this.
|
|
205
|
+
.map(route => this.generateAuthMethod(route))
|
|
288
206
|
.join('\n\n');
|
|
289
|
-
|
|
207
|
+
const header = usingDefaults
|
|
208
|
+
? '// Auth API wrapper for users-permissions plugin'
|
|
209
|
+
: '// Auth API wrapper for users-permissions plugin (generated from actual routes)';
|
|
210
|
+
// Names already produced by the route/user methods — so the injected
|
|
211
|
+
// client-side helpers don't collide with a real route (e.g. a custom
|
|
212
|
+
// `auth.logout` endpoint vs the deprecated `logout` alias).
|
|
213
|
+
const emitted = new Set([
|
|
214
|
+
...authRoutes.map(r => this.methodNameFor(r)),
|
|
215
|
+
...specialUserRoutes.map(r => this.methodNameFor(r)),
|
|
216
|
+
]);
|
|
217
|
+
return `${header}
|
|
290
218
|
class AuthAPI extends BaseAPI {
|
|
291
219
|
constructor(config: StrapiClientConfig) {
|
|
292
220
|
super(config)
|
|
@@ -295,17 +223,28 @@ class AuthAPI extends BaseAPI {
|
|
|
295
223
|
${authMethods}
|
|
296
224
|
|
|
297
225
|
${userMethods}
|
|
226
|
+
|
|
227
|
+
${this.generateClientSideHelpers(emitted)}
|
|
298
228
|
}`;
|
|
299
229
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
230
|
+
/**
|
|
231
|
+
* The method name a route will be emitted under — mirrors the renames in
|
|
232
|
+
* generateAuthMethod (login, confirmEmail). Used to detect collisions with
|
|
233
|
+
* the injected client-side helpers.
|
|
234
|
+
*/
|
|
235
|
+
methodNameFor(route) {
|
|
304
236
|
if (route.action === 'callback' &&
|
|
305
237
|
route.path === '/auth/local' &&
|
|
306
238
|
route.method === 'POST') {
|
|
307
|
-
|
|
239
|
+
return 'login';
|
|
308
240
|
}
|
|
241
|
+
if (route.action === 'emailConfirmation')
|
|
242
|
+
return 'confirmEmail';
|
|
243
|
+
return toCamelCase(route.action);
|
|
244
|
+
}
|
|
245
|
+
generateAuthMethod(route) {
|
|
246
|
+
// Method name (login/confirmEmail renames handled in methodNameFor)
|
|
247
|
+
const methodName = this.methodNameFor(route);
|
|
309
248
|
// Special handling for me() - it should support populate with type inference
|
|
310
249
|
if (route.action === 'me') {
|
|
311
250
|
return this.generateMeMethod(route);
|
|
@@ -320,6 +259,14 @@ ${userMethods}
|
|
|
320
259
|
route.path.includes(':provider')) {
|
|
321
260
|
return this.generateCallbackMethod(route);
|
|
322
261
|
}
|
|
262
|
+
// Special handling for confirmEmail() - token goes in the query string
|
|
263
|
+
if (route.action === 'emailConfirmation') {
|
|
264
|
+
return this.generateConfirmEmailMethod(route);
|
|
265
|
+
}
|
|
266
|
+
// Special handling for sendEmailConfirmation() - takes a bare email
|
|
267
|
+
if (route.action === 'sendEmailConfirmation') {
|
|
268
|
+
return this.generateSendEmailConfirmationMethod(route);
|
|
269
|
+
}
|
|
323
270
|
// Determine return type based on route path/action
|
|
324
271
|
const returnType = this.getReturnType(route);
|
|
325
272
|
const params = this.generateAuthMethodParams(route);
|
|
@@ -365,12 +312,8 @@ ${bodyBlock}
|
|
|
365
312
|
else if (route.action === 'find') {
|
|
366
313
|
return 'User[]';
|
|
367
314
|
}
|
|
368
|
-
else if (route.action === 'forgotPassword'
|
|
369
|
-
|
|
370
|
-
return '{ ok: boolean }';
|
|
371
|
-
}
|
|
372
|
-
else if (route.action === 'emailConfirmation') {
|
|
373
|
-
return 'EmailConfirmationResponse';
|
|
315
|
+
else if (route.action === 'forgotPassword') {
|
|
316
|
+
return 'ForgotPasswordResponse';
|
|
374
317
|
}
|
|
375
318
|
return 'any';
|
|
376
319
|
}
|
|
@@ -414,24 +357,24 @@ ${bodyBlock}
|
|
|
414
357
|
|
|
415
358
|
// Overload: with populate object → populated return type
|
|
416
359
|
updateMe<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
417
|
-
data:
|
|
360
|
+
data: UserUpdateInput,
|
|
418
361
|
params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,
|
|
419
362
|
nextOptions?: NextOptions
|
|
420
363
|
): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>
|
|
421
364
|
// Overload: with populate '*' or true → all fields populated
|
|
422
365
|
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
423
|
-
data:
|
|
366
|
+
data: UserUpdateInput,
|
|
424
367
|
params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,
|
|
425
368
|
nextOptions?: NextOptions
|
|
426
369
|
): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>
|
|
427
370
|
// Overload: general case → base return type
|
|
428
371
|
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
429
|
-
data:
|
|
372
|
+
data: UserUpdateInput,
|
|
430
373
|
params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,
|
|
431
374
|
nextOptions?: NextOptions
|
|
432
375
|
): Promise<SelectFields<User, User, TFields>>
|
|
433
376
|
|
|
434
|
-
async updateMe(data:
|
|
377
|
+
async updateMe(data: UserUpdateInput, params?: any, nextOptions?: any): Promise<any> {
|
|
435
378
|
const queryString = params ? this.buildQueryString(params) : ''
|
|
436
379
|
const url = queryString ? \`\${this.config.baseURL}/api/users/me\${queryString}\` : \`\${this.config.baseURL}/api/users/me\`
|
|
437
380
|
const response = await this.request<any>(
|
|
@@ -468,6 +411,56 @@ ${bodyBlock}
|
|
|
468
411
|
return this.request<AuthResponse>(url, {}, nextOptions, "Strapi Auth")
|
|
469
412
|
}`;
|
|
470
413
|
}
|
|
414
|
+
generateConfirmEmailMethod(route) {
|
|
415
|
+
return ` /**
|
|
416
|
+
* ${route.method} ${route.path}
|
|
417
|
+
* Handler: ${route.handler}
|
|
418
|
+
* Confirm a user's email address with the token from the confirmation email.
|
|
419
|
+
*/
|
|
420
|
+
async confirmEmail(confirmationToken: string, nextOptions?: NextOptions): Promise<EmailConfirmationResponse> {
|
|
421
|
+
const url = \`\${this.config.baseURL}/api/auth/email-confirmation?confirmation=\${confirmationToken}\`
|
|
422
|
+
return this.request<EmailConfirmationResponse>(
|
|
423
|
+
url,
|
|
424
|
+
{},
|
|
425
|
+
nextOptions,
|
|
426
|
+
'Strapi Auth'
|
|
427
|
+
)
|
|
428
|
+
}`;
|
|
429
|
+
}
|
|
430
|
+
generateSendEmailConfirmationMethod(route) {
|
|
431
|
+
return ` /**
|
|
432
|
+
* ${route.method} ${route.path}
|
|
433
|
+
* Handler: ${route.handler}
|
|
434
|
+
* Resend the confirmation email to a user who hasn't confirmed yet.
|
|
435
|
+
*/
|
|
436
|
+
async sendEmailConfirmation(email: string): Promise<SendEmailConfirmationResponse> {
|
|
437
|
+
const url = \`\${this.config.baseURL}/api/auth/send-email-confirmation\`
|
|
438
|
+
return this.request<SendEmailConfirmationResponse>(url, {
|
|
439
|
+
method: 'POST',
|
|
440
|
+
body: JSON.stringify({ email }),
|
|
441
|
+
}, undefined, 'Strapi Auth')
|
|
442
|
+
}`;
|
|
443
|
+
}
|
|
444
|
+
generateClientSideHelpers(emitted) {
|
|
445
|
+
const clearToken = ` /**
|
|
446
|
+
* Clear the stored auth token. Client-side only — does not call the server.
|
|
447
|
+
*/
|
|
448
|
+
async clearToken(): Promise<void> {
|
|
449
|
+
this.config.token = undefined
|
|
450
|
+
}`;
|
|
451
|
+
// Skip the deprecated logout alias when a real route already emits a
|
|
452
|
+
// \`logout\` method (a server-backed /auth/logout should win over the
|
|
453
|
+
// client-side token clear). clearToken is always emitted.
|
|
454
|
+
if (emitted.has('logout'))
|
|
455
|
+
return clearToken;
|
|
456
|
+
const logoutAlias = ` /**
|
|
457
|
+
* @deprecated Use \`clearToken()\` instead. Will be removed in a future major.
|
|
458
|
+
*/
|
|
459
|
+
async logout(): Promise<void> {
|
|
460
|
+
return this.clearToken()
|
|
461
|
+
}`;
|
|
462
|
+
return `${clearToken}\n\n${logoutAlias}`;
|
|
463
|
+
}
|
|
471
464
|
generateAuthMethodParams(route) {
|
|
472
465
|
const params = [];
|
|
473
466
|
// Add path parameters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-api-generator.js","sourceRoot":"","sources":["../../src/generator/auth-api-generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth-api-generator.js","sourceRoot":"","sources":["../../src/generator/auth-api-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ParsedSchema } from '../schema-types.js';
|
|
2
2
|
import type { ParsedEndpoint, ExtraControllerType } from '../shared/endpoint-types.js';
|
|
3
|
+
export declare const STRINGIFY_QUERY_SOURCE = "function stringifyQuery(obj: Record<string, unknown>): string {\n const pairs: string[] = []\n for (const key of Object.keys(obj)) {\n appendEntry(obj[key], key, pairs)\n }\n return pairs.join('&')\n}\n\nfunction appendEntry(\n value: unknown,\n prefix: string,\n pairs: string[],\n): void {\n if (value === null || value === undefined) return\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n appendEntry(value[i], `${prefix}[${i}]`, pairs)\n }\n return\n }\n if (value instanceof Date) {\n pairs.push(`${prefix}=${encodeURIComponent(value.toISOString())}`)\n return\n }\n if (typeof value === 'object') {\n for (const key of Object.keys(value as Record<string, unknown>)) {\n appendEntry(\n (value as Record<string, unknown>)[key],\n `${prefix}[${key}]`,\n pairs,\n )\n }\n return\n }\n pairs.push(`${prefix}=${encodeURIComponent(String(value))}`)\n}";
|
|
3
4
|
export declare class ClientGenerator {
|
|
4
5
|
private authApiGenerator;
|
|
5
6
|
private customApiGenerator;
|
|
@@ -47,6 +48,14 @@ export declare class ClientGenerator {
|
|
|
47
48
|
* the client. When this collision occurs, disambiguate the standalone name
|
|
48
49
|
* by prefixing it with the plugin's camelCase name.
|
|
49
50
|
*/
|
|
51
|
+
/**
|
|
52
|
+
* Property name for a content type on StrapiClient. `auth` (and its
|
|
53
|
+
* deprecated alias `authentication`) are reserved for the users-permissions
|
|
54
|
+
* namespace, so a content type whose endpoint camelCases to one of those is
|
|
55
|
+
* disambiguated by kind (e.g. a single type `auth` → `authSingle`) to avoid
|
|
56
|
+
* a duplicate-identifier collision with `auth: AuthAPI`.
|
|
57
|
+
*/
|
|
58
|
+
private contentTypePropName;
|
|
50
59
|
private resolveStandaloneNames;
|
|
51
60
|
private buildStandaloneDeclarations;
|
|
52
61
|
private buildStandaloneInits;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-generator.d.ts","sourceRoot":"","sources":["../../src/generator/client-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-generator.d.ts","sourceRoot":"","sources":["../../src/generator/client-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAY9D,OAAO,KAAK,EACR,cAAc,EACd,mBAAmB,EACtB,MAAM,6BAA6B,CAAA;AAOpC,eAAO,MAAM,sBAAsB,4iCAmCjC,CAAA;AAEF,qBAAa,eAAe;IACxB,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,kBAAkB,CAAoB;;IAQ9C,QAAQ,CACJ,MAAM,EAAE,YAAY,EACpB,SAAS,CAAC,EAAE,cAAc,EAAE,EAC5B,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,UAAU,GAAE,MAAW,EACvB,gBAAgB,GAAE,MAAW,GAC9B,MAAM;IA6FT,OAAO,CAAC,eAAe;IAwEvB,OAAO,CAAC,eAAe;IAwRvB,OAAO,CAAC,iCAAiC;IA0BzC,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,mBAAmB;IAwF3B,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,6BAA6B;IA6CrC,OAAO,CAAC,oBAAoB;IAsM5B,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,qBAAqB;IAoK7B,OAAO,CAAC,qBAAqB;IAgE7B,OAAO,CAAC,+BAA+B;IAoBvC,OAAO,CAAC,wBAAwB;IAwEhC,OAAO,CAAC,eAAe;IAavB;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAalC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,oBAAoB;IAoL5B;;;;;;;;;;;OAWG;IACH;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,2BAA2B;IA2BnC,OAAO,CAAC,oBAAoB;CA4B/B"}
|