strapi-typed-client 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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/cli/commands/check.d.ts +27 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +91 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +28 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +129 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +21 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +113 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/api-client.d.ts +41 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -0
- package/dist/cli/utils/api-client.js +81 -0
- package/dist/cli/utils/api-client.js.map +1 -0
- package/dist/cli/utils/file-writer.d.ts +44 -0
- package/dist/cli/utils/file-writer.d.ts.map +1 -0
- package/dist/cli/utils/file-writer.js +89 -0
- package/dist/cli/utils/file-writer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +37 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +622 -0
- package/dist/client.js +688 -0
- package/dist/core/endpoint-converter.d.ts +26 -0
- package/dist/core/endpoint-converter.d.ts.map +1 -0
- package/dist/core/endpoint-converter.js +161 -0
- package/dist/core/endpoint-converter.js.map +1 -0
- package/dist/core/generator/filters-generator.d.ts +22 -0
- package/dist/core/generator/filters-generator.d.ts.map +1 -0
- package/dist/core/generator/filters-generator.js +236 -0
- package/dist/core/generator/filters-generator.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schema-transformer.d.ts +19 -0
- package/dist/core/schema-transformer.d.ts.map +1 -0
- package/dist/core/schema-transformer.js +306 -0
- package/dist/core/schema-transformer.js.map +1 -0
- package/dist/generator/auth-api-generator.d.ts +14 -0
- package/dist/generator/auth-api-generator.d.ts.map +1 -0
- package/dist/generator/auth-api-generator.js +518 -0
- package/dist/generator/auth-api-generator.js.map +1 -0
- package/dist/generator/blocks-types-template.d.ts +134 -0
- package/dist/generator/blocks-types-template.d.ts.map +1 -0
- package/dist/generator/blocks-types-template.js +4 -0
- package/dist/generator/blocks-types-template.js.map +1 -0
- package/dist/generator/client-generator.d.ts +19 -0
- package/dist/generator/client-generator.d.ts.map +1 -0
- package/dist/generator/client-generator.js +707 -0
- package/dist/generator/client-generator.js.map +1 -0
- package/dist/generator/custom-api-generator.d.ts +26 -0
- package/dist/generator/custom-api-generator.d.ts.map +1 -0
- package/dist/generator/custom-api-generator.js +145 -0
- package/dist/generator/custom-api-generator.js.map +1 -0
- package/dist/generator/index-generator.d.ts +4 -0
- package/dist/generator/index-generator.d.ts.map +1 -0
- package/dist/generator/index-generator.js +11 -0
- package/dist/generator/index-generator.js.map +1 -0
- package/dist/generator/index.d.ts +14 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +94 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/types-generator.d.ts +35 -0
- package/dist/generator/types-generator.d.ts.map +1 -0
- package/dist/generator/types-generator.js +641 -0
- package/dist/generator/types-generator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/next/index.d.ts +16 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +224 -0
- package/dist/next/index.js.map +1 -0
- package/dist/parser/custom-types-parser.d.ts +39 -0
- package/dist/parser/custom-types-parser.d.ts.map +1 -0
- package/dist/parser/custom-types-parser.js +206 -0
- package/dist/parser/custom-types-parser.js.map +1 -0
- package/dist/parser/index.d.ts +23 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +457 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/routes-parser.d.ts +21 -0
- package/dist/parser/routes-parser.d.ts.map +1 -0
- package/dist/parser/routes-parser.js +184 -0
- package/dist/parser/routes-parser.js.map +1 -0
- package/dist/plugin/admin/src/index.d.ts +16 -0
- package/dist/plugin/admin/src/index.d.ts.map +1 -0
- package/dist/plugin/admin/src/index.js +30 -0
- package/dist/plugin/admin/src/index.js.map +1 -0
- package/dist/plugin/admin/src/pages/HomePage.d.ts +2 -0
- package/dist/plugin/admin/src/pages/HomePage.d.ts.map +1 -0
- package/dist/plugin/admin/src/pages/HomePage.js +273 -0
- package/dist/plugin/admin/src/pages/HomePage.js.map +1 -0
- package/dist/plugin/admin/src/pluginId.d.ts +2 -0
- package/dist/plugin/admin/src/pluginId.d.ts.map +1 -0
- package/dist/plugin/admin/src/pluginId.js +2 -0
- package/dist/plugin/admin/src/pluginId.js.map +1 -0
- package/dist/plugin/index.d.ts +22 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +22 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/server/src/config/index.d.ts +31 -0
- package/dist/plugin/server/src/config/index.d.ts.map +1 -0
- package/dist/plugin/server/src/config/index.js +35 -0
- package/dist/plugin/server/src/config/index.js.map +1 -0
- package/dist/plugin/server/src/controllers/schema.d.ts +41 -0
- package/dist/plugin/server/src/controllers/schema.d.ts.map +1 -0
- package/dist/plugin/server/src/controllers/schema.js +51 -0
- package/dist/plugin/server/src/controllers/schema.js.map +1 -0
- package/dist/plugin/server/src/index.d.ts +114 -0
- package/dist/plugin/server/src/index.d.ts.map +1 -0
- package/dist/plugin/server/src/index.js +76 -0
- package/dist/plugin/server/src/index.js.map +1 -0
- package/dist/plugin/server/src/routes/index.d.ts +14 -0
- package/dist/plugin/server/src/routes/index.d.ts.map +1 -0
- package/dist/plugin/server/src/routes/index.js +23 -0
- package/dist/plugin/server/src/routes/index.js.map +1 -0
- package/dist/plugin/server/src/services/endpoints.d.ts +36 -0
- package/dist/plugin/server/src/services/endpoints.d.ts.map +1 -0
- package/dist/plugin/server/src/services/endpoints.js +523 -0
- package/dist/plugin/server/src/services/endpoints.js.map +1 -0
- package/dist/plugin/server/src/services/schema.d.ts +25 -0
- package/dist/plugin/server/src/services/schema.d.ts.map +1 -0
- package/dist/plugin/server/src/services/schema.js +164 -0
- package/dist/plugin/server/src/services/schema.js.map +1 -0
- package/dist/schema-meta.ts +7 -0
- package/dist/schema-types.d.ts +104 -0
- package/dist/schema-types.d.ts.map +1 -0
- package/dist/schema-types.js +3 -0
- package/dist/schema-types.js.map +1 -0
- package/dist/shared/constants.d.ts +99 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +89 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/endpoint-types.d.ts +42 -0
- package/dist/shared/endpoint-types.d.ts.map +1 -0
- package/dist/shared/endpoint-types.js +6 -0
- package/dist/shared/endpoint-types.js.map +1 -0
- package/dist/shared/index.d.ts +12 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/naming-utils.d.ts +55 -0
- package/dist/shared/naming-utils.d.ts.map +1 -0
- package/dist/shared/naming-utils.js +106 -0
- package/dist/shared/naming-utils.js.map +1 -0
- package/dist/shared/schema-hash.d.ts +39 -0
- package/dist/shared/schema-hash.d.ts.map +1 -0
- package/dist/shared/schema-hash.js +67 -0
- package/dist/shared/schema-hash.js.map +1 -0
- package/dist/shared/strapi-schema-types.d.ts +77 -0
- package/dist/shared/strapi-schema-types.d.ts.map +1 -0
- package/dist/shared/strapi-schema-types.js +10 -0
- package/dist/shared/strapi-schema-types.js.map +1 -0
- package/dist/shared/string-utils.d.ts +68 -0
- package/dist/shared/string-utils.d.ts.map +1 -0
- package/dist/shared/string-utils.js +124 -0
- package/dist/shared/string-utils.js.map +1 -0
- package/dist/transformer/index.d.ts +17 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +83 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/types.d.ts +3430 -0
- package/dist/types.js +3 -0
- package/package.json +152 -0
- package/strapi-admin.js +2 -0
- package/strapi-server.js +2 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import { toCamelCase } from '../shared/index.js';
|
|
2
|
+
export class AuthApiGenerator {
|
|
3
|
+
generateAuthTypes() {
|
|
4
|
+
const lines = [];
|
|
5
|
+
lines.push('// Auth API types for users-permissions plugin');
|
|
6
|
+
lines.push('');
|
|
7
|
+
lines.push('export interface LoginCredentials {');
|
|
8
|
+
lines.push(' identifier: string');
|
|
9
|
+
lines.push(' password: string');
|
|
10
|
+
lines.push('}');
|
|
11
|
+
lines.push('');
|
|
12
|
+
lines.push('export interface RegisterData {');
|
|
13
|
+
lines.push(' username: string');
|
|
14
|
+
lines.push(' email: string');
|
|
15
|
+
lines.push(' password: string');
|
|
16
|
+
lines.push(' referralCode?: string');
|
|
17
|
+
lines.push(' referralSource?: "code" | "link" | "share"');
|
|
18
|
+
lines.push('}');
|
|
19
|
+
lines.push('');
|
|
20
|
+
lines.push('export interface AuthResponse {');
|
|
21
|
+
lines.push(' jwt: string');
|
|
22
|
+
lines.push(' user: User');
|
|
23
|
+
lines.push('}');
|
|
24
|
+
lines.push('');
|
|
25
|
+
lines.push('export interface ForgotPasswordData {');
|
|
26
|
+
lines.push(' email: string');
|
|
27
|
+
lines.push('}');
|
|
28
|
+
lines.push('');
|
|
29
|
+
lines.push('export interface ResetPasswordData {');
|
|
30
|
+
lines.push(' code: string');
|
|
31
|
+
lines.push(' password: string');
|
|
32
|
+
lines.push(' passwordConfirmation: string');
|
|
33
|
+
lines.push('}');
|
|
34
|
+
lines.push('');
|
|
35
|
+
lines.push('export interface ChangePasswordData {');
|
|
36
|
+
lines.push(' currentPassword: string');
|
|
37
|
+
lines.push(' password: string');
|
|
38
|
+
lines.push(' passwordConfirmation: string');
|
|
39
|
+
lines.push('}');
|
|
40
|
+
lines.push('');
|
|
41
|
+
lines.push('export interface EmailConfirmationResponse {');
|
|
42
|
+
lines.push(' jwt: string');
|
|
43
|
+
lines.push(' user: User');
|
|
44
|
+
lines.push('}');
|
|
45
|
+
return lines.join('\n');
|
|
46
|
+
}
|
|
47
|
+
generateAuthApiClass(authRoutes = [], userRoutes = []) {
|
|
48
|
+
const allAuthRoutes = [...authRoutes, ...userRoutes];
|
|
49
|
+
// If no routes provided, use hardcoded version
|
|
50
|
+
if (allAuthRoutes.length === 0) {
|
|
51
|
+
return this.generateHardcodedAuthApiClass();
|
|
52
|
+
}
|
|
53
|
+
// Generate dynamic AuthAPI based on actual routes
|
|
54
|
+
return this.generateDynamicAuthApiClass(authRoutes, userRoutes);
|
|
55
|
+
}
|
|
56
|
+
generateHardcodedAuthApiClass() {
|
|
57
|
+
return `// Auth API wrapper for users-permissions plugin
|
|
58
|
+
class AuthAPI extends BaseAPI {
|
|
59
|
+
constructor(config: StrapiClientConfig) {
|
|
60
|
+
super(config)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Login with email/username and password
|
|
65
|
+
* POST /api/auth/local
|
|
66
|
+
*/
|
|
67
|
+
async login(credentials: LoginCredentials): Promise<AuthResponse> {
|
|
68
|
+
const url = \`\${this.config.baseURL}/api/auth/local\`
|
|
69
|
+
return this.request<AuthResponse>(url, {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
body: JSON.stringify(credentials),
|
|
72
|
+
}, undefined, 'Strapi Auth')
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Register a new user
|
|
77
|
+
* POST /api/auth/local/register
|
|
78
|
+
*/
|
|
79
|
+
async register(data: RegisterData): Promise<AuthResponse> {
|
|
80
|
+
const url = \`\${this.config.baseURL}/api/auth/local/register\`
|
|
81
|
+
return this.request<AuthResponse>(url, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
body: JSON.stringify(data),
|
|
84
|
+
}, undefined, 'Strapi Auth')
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get current authenticated user
|
|
89
|
+
* GET /api/users/me
|
|
90
|
+
* Supports populate with automatic type inference
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
// Overload: with populate object → populated return type
|
|
94
|
+
me<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
95
|
+
params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,
|
|
96
|
+
nextOptions?: NextOptions
|
|
97
|
+
): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>
|
|
98
|
+
// Overload: with populate '*' or true → all fields populated
|
|
99
|
+
me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
100
|
+
params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,
|
|
101
|
+
nextOptions?: NextOptions
|
|
102
|
+
): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>
|
|
103
|
+
// Overload: general case → base return type
|
|
104
|
+
me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
105
|
+
params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,
|
|
106
|
+
nextOptions?: NextOptions
|
|
107
|
+
): Promise<SelectFields<User, User, TFields>>
|
|
108
|
+
|
|
109
|
+
async me(params?: any, nextOptions?: any): Promise<any> {
|
|
110
|
+
const queryString = params ? this.buildQueryString(params) : ''
|
|
111
|
+
const url = queryString ? \`\${this.config.baseURL}/api/users/me\${queryString}\` : \`\${this.config.baseURL}/api/users/me\`
|
|
112
|
+
const response = await this.request<any>(url, {}, nextOptions, "Strapi Auth")
|
|
113
|
+
return response
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Update current authenticated user
|
|
118
|
+
* PUT /api/users/me
|
|
119
|
+
* Supports populate with automatic type inference
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
// Overload: with populate object → populated return type
|
|
123
|
+
updateMe<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
124
|
+
data: Partial<User>,
|
|
125
|
+
params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,
|
|
126
|
+
nextOptions?: NextOptions
|
|
127
|
+
): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>
|
|
128
|
+
// Overload: with populate '*' or true → all fields populated
|
|
129
|
+
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
130
|
+
data: Partial<User>,
|
|
131
|
+
params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,
|
|
132
|
+
nextOptions?: NextOptions
|
|
133
|
+
): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>
|
|
134
|
+
// Overload: general case → base return type
|
|
135
|
+
updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(
|
|
136
|
+
data: Partial<User>,
|
|
137
|
+
params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,
|
|
138
|
+
nextOptions?: NextOptions
|
|
139
|
+
): Promise<SelectFields<User, User, TFields>>
|
|
140
|
+
|
|
141
|
+
async updateMe(data: Partial<User>, params?: any, nextOptions?: any): Promise<any> {
|
|
142
|
+
const queryString = params ? this.buildQueryString(params) : ''
|
|
143
|
+
const url = queryString ? \`\${this.config.baseURL}/api/users/me\${queryString}\` : \`\${this.config.baseURL}/api/users/me\`
|
|
144
|
+
const response = await this.request<any>(
|
|
145
|
+
url,
|
|
146
|
+
{
|
|
147
|
+
method: 'PUT',
|
|
148
|
+
body: JSON.stringify(data),
|
|
149
|
+
},
|
|
150
|
+
nextOptions,
|
|
151
|
+
"Strapi Auth"
|
|
152
|
+
)
|
|
153
|
+
return response
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* OAuth callback
|
|
158
|
+
* GET /api/auth/:provider/callback
|
|
159
|
+
* @param provider - OAuth provider name (google, github, etc.)
|
|
160
|
+
* @param search - Query string (e.g., "access_token=xxx&code=yyy" or "?access_token=xxx")
|
|
161
|
+
*/
|
|
162
|
+
async callback(
|
|
163
|
+
provider: string,
|
|
164
|
+
search?: string,
|
|
165
|
+
nextOptions?: NextOptions
|
|
166
|
+
): Promise<AuthResponse> {
|
|
167
|
+
let path = \`/api/auth/\${provider}/callback\`
|
|
168
|
+
if (search) {
|
|
169
|
+
// Add search string, handling both "?key=val" and "key=val" formats
|
|
170
|
+
path += search.startsWith("?") ? search : \`?\${search}\`
|
|
171
|
+
}
|
|
172
|
+
const url = \`\${this.config.baseURL}\${path}\`
|
|
173
|
+
return this.request<AuthResponse>(url, {}, nextOptions, "Strapi Auth")
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Logout current user (client-side token removal helper)
|
|
178
|
+
*/
|
|
179
|
+
async logout(): Promise<void> {
|
|
180
|
+
this.config.token = undefined
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Request password reset email
|
|
185
|
+
* POST /api/auth/forgot-password
|
|
186
|
+
*/
|
|
187
|
+
async forgotPassword(data: ForgotPasswordData): Promise<{ ok: boolean }> {
|
|
188
|
+
const url = \`\${this.config.baseURL}/api/auth/forgot-password\`
|
|
189
|
+
await this.request(url, {
|
|
190
|
+
method: 'POST',
|
|
191
|
+
body: JSON.stringify(data),
|
|
192
|
+
}, undefined, 'Strapi Auth')
|
|
193
|
+
return { ok: true }
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Reset password using reset code
|
|
198
|
+
* POST /api/auth/reset-password
|
|
199
|
+
*/
|
|
200
|
+
async resetPassword(data: ResetPasswordData): Promise<AuthResponse> {
|
|
201
|
+
const url = \`\${this.config.baseURL}/api/auth/reset-password\`
|
|
202
|
+
return this.request<AuthResponse>(url, {
|
|
203
|
+
method: 'POST',
|
|
204
|
+
body: JSON.stringify(data),
|
|
205
|
+
}, undefined, 'Strapi Auth')
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Change password for authenticated user
|
|
210
|
+
* POST /api/auth/change-password
|
|
211
|
+
*/
|
|
212
|
+
async changePassword(data: ChangePasswordData): Promise<AuthResponse> {
|
|
213
|
+
const url = \`\${this.config.baseURL}/api/auth/change-password\`
|
|
214
|
+
return this.request<AuthResponse>(url, {
|
|
215
|
+
method: 'POST',
|
|
216
|
+
body: JSON.stringify(data),
|
|
217
|
+
}, undefined, 'Strapi Auth')
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Confirm user email address
|
|
222
|
+
* GET /api/auth/email-confirmation?confirmation=TOKEN
|
|
223
|
+
*/
|
|
224
|
+
async confirmEmail(confirmationToken: string, nextOptions?: NextOptions): Promise<EmailConfirmationResponse> {
|
|
225
|
+
const url = \`\${this.config.baseURL}/api/auth/email-confirmation?confirmation=\${confirmationToken}\`
|
|
226
|
+
return this.request<EmailConfirmationResponse>(
|
|
227
|
+
url,
|
|
228
|
+
{},
|
|
229
|
+
nextOptions,
|
|
230
|
+
'Strapi Auth'
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Send email confirmation
|
|
236
|
+
* POST /api/auth/send-email-confirmation
|
|
237
|
+
*/
|
|
238
|
+
async sendEmailConfirmation(email: string): Promise<{ ok: boolean }> {
|
|
239
|
+
const url = \`\${this.config.baseURL}/api/auth/send-email-confirmation\`
|
|
240
|
+
await this.request(url, {
|
|
241
|
+
method: 'POST',
|
|
242
|
+
body: JSON.stringify({ email }),
|
|
243
|
+
}, undefined, 'Strapi Auth')
|
|
244
|
+
return { ok: true }
|
|
245
|
+
}
|
|
246
|
+
}`;
|
|
247
|
+
}
|
|
248
|
+
generateDynamicAuthApiClass(authRoutes, userRoutes) {
|
|
249
|
+
const lines = [];
|
|
250
|
+
lines.push('// Auth API wrapper for users-permissions plugin (generated from actual routes)');
|
|
251
|
+
lines.push('class AuthAPI extends BaseAPI {');
|
|
252
|
+
lines.push(' constructor(config: StrapiClientConfig) {');
|
|
253
|
+
lines.push(' super(config)');
|
|
254
|
+
lines.push(' }');
|
|
255
|
+
lines.push('');
|
|
256
|
+
// Generate methods for auth routes
|
|
257
|
+
for (const route of authRoutes) {
|
|
258
|
+
lines.push(this.generateDynamicAuthMethod(route));
|
|
259
|
+
lines.push('');
|
|
260
|
+
}
|
|
261
|
+
// Generate methods for user routes - but only special ones (me, updateMe, count)
|
|
262
|
+
// Other user routes (find, findOne, create, update, delete) should be handled by users: CollectionAPI<User>
|
|
263
|
+
const specialUserRoutes = userRoutes.filter(r => r.action === 'me' ||
|
|
264
|
+
r.action === 'updateMe' ||
|
|
265
|
+
r.action === 'count');
|
|
266
|
+
for (const route of specialUserRoutes) {
|
|
267
|
+
lines.push(this.generateDynamicAuthMethod(route));
|
|
268
|
+
lines.push('');
|
|
269
|
+
}
|
|
270
|
+
lines.push('}');
|
|
271
|
+
return lines.join('\n');
|
|
272
|
+
}
|
|
273
|
+
generateDynamicAuthMethod(route) {
|
|
274
|
+
const lines = [];
|
|
275
|
+
// Generate method name from action, with special handling for callback
|
|
276
|
+
let methodName = toCamelCase(route.action);
|
|
277
|
+
// Special case: rename auth.callback on /auth/local to "login"
|
|
278
|
+
if (route.handler === 'auth.callback' &&
|
|
279
|
+
route.path === '/auth/local' &&
|
|
280
|
+
route.method === 'POST') {
|
|
281
|
+
methodName = 'login';
|
|
282
|
+
}
|
|
283
|
+
// Special handling for me() - it should support populate with type inference
|
|
284
|
+
if (route.action === 'me') {
|
|
285
|
+
return this.generateMeMethod(route);
|
|
286
|
+
}
|
|
287
|
+
// Special handling for updateMe() - safe way to update current user
|
|
288
|
+
if (route.action === 'updateMe') {
|
|
289
|
+
return this.generateUpdateMeMethod(route);
|
|
290
|
+
}
|
|
291
|
+
// Special handling for OAuth callback() - needs query params support
|
|
292
|
+
if (route.action === 'callback' &&
|
|
293
|
+
route.method === 'GET' &&
|
|
294
|
+
route.path.includes(':provider')) {
|
|
295
|
+
return this.generateCallbackMethod(route);
|
|
296
|
+
}
|
|
297
|
+
// Determine return type based on route path/action
|
|
298
|
+
let returnType = 'any';
|
|
299
|
+
if (route.action === 'callback' ||
|
|
300
|
+
route.action === 'register' ||
|
|
301
|
+
route.action === 'resetPassword' ||
|
|
302
|
+
route.action === 'changePassword') {
|
|
303
|
+
returnType = 'AuthResponse';
|
|
304
|
+
}
|
|
305
|
+
else if (route.action === 'findOne') {
|
|
306
|
+
returnType = 'User';
|
|
307
|
+
}
|
|
308
|
+
else if (route.action === 'find') {
|
|
309
|
+
returnType = 'User[]';
|
|
310
|
+
}
|
|
311
|
+
else if (route.action === 'forgotPassword' ||
|
|
312
|
+
route.action === 'sendEmailConfirmation') {
|
|
313
|
+
returnType = '{ ok: boolean }';
|
|
314
|
+
}
|
|
315
|
+
else if (route.action === 'emailConfirmation') {
|
|
316
|
+
returnType = 'EmailConfirmationResponse';
|
|
317
|
+
}
|
|
318
|
+
// Generate JSDoc comment
|
|
319
|
+
lines.push(' /**');
|
|
320
|
+
lines.push(` * ${route.method} ${route.path}`);
|
|
321
|
+
lines.push(` * Handler: ${route.handler}`);
|
|
322
|
+
lines.push(' */');
|
|
323
|
+
// Generate method signature
|
|
324
|
+
const params = this.generateAuthMethodParams(route);
|
|
325
|
+
lines.push(` async ${methodName}(${params}): Promise<${returnType}> {`);
|
|
326
|
+
// Generate method body
|
|
327
|
+
const pathExpression = this.generateAuthPathExpression(route);
|
|
328
|
+
const hasBody = route.method === 'POST' ||
|
|
329
|
+
route.method === 'PUT' ||
|
|
330
|
+
route.method === 'PATCH';
|
|
331
|
+
lines.push(` const url = \`\${this.config.baseURL}${pathExpression.slice(1, -1)}\``);
|
|
332
|
+
if (hasBody) {
|
|
333
|
+
lines.push(` return this.request<${returnType}>(`);
|
|
334
|
+
lines.push(` url,`);
|
|
335
|
+
lines.push(` {`);
|
|
336
|
+
lines.push(` method: '${route.method}',`);
|
|
337
|
+
if (route.params.length > 0) {
|
|
338
|
+
lines.push(` body: JSON.stringify(data),`);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
lines.push(` body: data ? JSON.stringify(data) : undefined,`);
|
|
342
|
+
}
|
|
343
|
+
lines.push(` },`);
|
|
344
|
+
lines.push(` nextOptions,`);
|
|
345
|
+
lines.push(` 'Strapi Auth'`);
|
|
346
|
+
lines.push(` )`);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
// For GET requests, use empty object (GET is default)
|
|
350
|
+
// For DELETE and other methods, specify the method explicitly
|
|
351
|
+
const needsMethod = route.method !== 'GET';
|
|
352
|
+
lines.push(` return this.request<${returnType}>(`);
|
|
353
|
+
lines.push(` url,`);
|
|
354
|
+
if (needsMethod) {
|
|
355
|
+
lines.push(` { method: '${route.method}' },`);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
lines.push(` {},`);
|
|
359
|
+
}
|
|
360
|
+
lines.push(` nextOptions,`);
|
|
361
|
+
lines.push(` 'Strapi Auth'`);
|
|
362
|
+
lines.push(` )`);
|
|
363
|
+
}
|
|
364
|
+
lines.push(' }');
|
|
365
|
+
return lines.join('\n');
|
|
366
|
+
}
|
|
367
|
+
generateMeMethod(route) {
|
|
368
|
+
const lines = [];
|
|
369
|
+
lines.push(' /**');
|
|
370
|
+
lines.push(` * ${route.method} ${route.path}`);
|
|
371
|
+
lines.push(` * Handler: ${route.handler}`);
|
|
372
|
+
lines.push(` * Supports populate with automatic type inference`);
|
|
373
|
+
lines.push(' */');
|
|
374
|
+
lines.push('');
|
|
375
|
+
// Overloads for type-safe populate
|
|
376
|
+
lines.push(' // Overload: with populate object → populated return type');
|
|
377
|
+
lines.push(" me<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
378
|
+
lines.push(' params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,');
|
|
379
|
+
lines.push(' nextOptions?: NextOptions');
|
|
380
|
+
lines.push(' ): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>');
|
|
381
|
+
lines.push(" // Overload: with populate '*' or true → all fields populated");
|
|
382
|
+
lines.push(" me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
383
|
+
lines.push(" params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,");
|
|
384
|
+
lines.push(' nextOptions?: NextOptions');
|
|
385
|
+
lines.push(" ): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>");
|
|
386
|
+
lines.push(' // Overload: general case → base return type');
|
|
387
|
+
lines.push(" me<const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
388
|
+
lines.push(" params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,");
|
|
389
|
+
lines.push(' nextOptions?: NextOptions');
|
|
390
|
+
lines.push(' ): Promise<SelectFields<User, User, TFields>>');
|
|
391
|
+
lines.push('');
|
|
392
|
+
// Implementation
|
|
393
|
+
lines.push(' async me(params?: any, nextOptions?: any): Promise<any> {');
|
|
394
|
+
lines.push(" const queryString = params ? this.buildQueryString(params) : ''");
|
|
395
|
+
lines.push(' const url = queryString ? `${this.config.baseURL}/api/users/me${queryString}` : `${this.config.baseURL}/api/users/me`');
|
|
396
|
+
lines.push(' const response = await this.request<any>(url, {}, nextOptions, "Strapi Auth")');
|
|
397
|
+
lines.push(' return response');
|
|
398
|
+
lines.push(' }');
|
|
399
|
+
return lines.join('\n');
|
|
400
|
+
}
|
|
401
|
+
generateUpdateMeMethod(route) {
|
|
402
|
+
const lines = [];
|
|
403
|
+
lines.push(' /**');
|
|
404
|
+
lines.push(` * ${route.method} ${route.path}`);
|
|
405
|
+
lines.push(` * Handler: ${route.handler}`);
|
|
406
|
+
lines.push(` * Safe way to update current user without knowing their ID`);
|
|
407
|
+
lines.push(` * Supports populate with automatic type inference`);
|
|
408
|
+
lines.push(' */');
|
|
409
|
+
lines.push('');
|
|
410
|
+
// Overloads for type-safe populate
|
|
411
|
+
lines.push(' // Overload: with populate object → populated return type');
|
|
412
|
+
lines.push(" updateMe<const TPopulate extends UserPopulateParam, const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
413
|
+
lines.push(' data: Partial<User>,');
|
|
414
|
+
lines.push(' params: { populate: TPopulate } & QueryParams<User, UserFilters, TPopulate, TFields>,');
|
|
415
|
+
lines.push(' nextOptions?: NextOptions');
|
|
416
|
+
lines.push(' ): Promise<SelectFields<GetPopulated<User, TPopulate>, User, TFields>>');
|
|
417
|
+
lines.push(" // Overload: with populate '*' or true → all fields populated");
|
|
418
|
+
lines.push(" updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
419
|
+
lines.push(' data: Partial<User>,');
|
|
420
|
+
lines.push(" params: { populate: '*' | true } & QueryParams<User, UserFilters, '*' | true, TFields>,");
|
|
421
|
+
lines.push(' nextOptions?: NextOptions');
|
|
422
|
+
lines.push(" ): Promise<SelectFields<GetPopulated<User, '*'>, User, TFields>>");
|
|
423
|
+
lines.push(' // Overload: general case → base return type');
|
|
424
|
+
lines.push(" updateMe<const TFields extends Exclude<keyof User & string, '__typename'> = never>(");
|
|
425
|
+
lines.push(' data: Partial<User>,');
|
|
426
|
+
lines.push(" params?: QueryParams<User, UserFilters, UserPopulateParam | (keyof UserPopulateParam & string)[] | '*' | boolean, TFields>,");
|
|
427
|
+
lines.push(' nextOptions?: NextOptions');
|
|
428
|
+
lines.push(' ): Promise<SelectFields<User, User, TFields>>');
|
|
429
|
+
lines.push('');
|
|
430
|
+
// Implementation
|
|
431
|
+
lines.push(' async updateMe(data: Partial<User>, params?: any, nextOptions?: any): Promise<any> {');
|
|
432
|
+
lines.push(" const queryString = params ? this.buildQueryString(params) : ''");
|
|
433
|
+
lines.push(' const url = queryString ? `${this.config.baseURL}/api/users/me${queryString}` : `${this.config.baseURL}/api/users/me`');
|
|
434
|
+
lines.push(' const response = await this.request<any>(');
|
|
435
|
+
lines.push(' url,');
|
|
436
|
+
lines.push(' {');
|
|
437
|
+
lines.push(" method: 'PUT',");
|
|
438
|
+
lines.push(' body: JSON.stringify(data),');
|
|
439
|
+
lines.push(' },');
|
|
440
|
+
lines.push(' nextOptions,');
|
|
441
|
+
lines.push(' "Strapi Auth"');
|
|
442
|
+
lines.push(' )');
|
|
443
|
+
lines.push(' return response');
|
|
444
|
+
lines.push(' }');
|
|
445
|
+
return lines.join('\n');
|
|
446
|
+
}
|
|
447
|
+
generateCallbackMethod(route) {
|
|
448
|
+
const lines = [];
|
|
449
|
+
lines.push(' /**');
|
|
450
|
+
lines.push(` * ${route.method} ${route.path}`);
|
|
451
|
+
lines.push(` * Handler: ${route.handler}`);
|
|
452
|
+
lines.push(' * OAuth callback with query string support');
|
|
453
|
+
lines.push(' * @param provider - OAuth provider name (google, github, etc.)');
|
|
454
|
+
lines.push(' * @param search - Query string (e.g., "access_token=xxx&code=yyy" or "?access_token=xxx")');
|
|
455
|
+
lines.push(' */');
|
|
456
|
+
lines.push(' async callback(');
|
|
457
|
+
lines.push(' provider: string,');
|
|
458
|
+
lines.push(' search?: string,');
|
|
459
|
+
lines.push(' nextOptions?: NextOptions');
|
|
460
|
+
lines.push(' ): Promise<AuthResponse> {');
|
|
461
|
+
lines.push(' let path = `/api/auth/$' + '{provider}/callback`');
|
|
462
|
+
lines.push(' if (search) {');
|
|
463
|
+
lines.push(' // Add search string, handling both "?key=val" and "key=val" formats');
|
|
464
|
+
lines.push(' path += search.startsWith("?") ? search : `?$' + '{search}`');
|
|
465
|
+
lines.push(' }');
|
|
466
|
+
lines.push(' const url = `${this.config.baseURL}${path}`');
|
|
467
|
+
lines.push(' return this.request<AuthResponse>(url, {}, nextOptions, "Strapi Auth")');
|
|
468
|
+
lines.push(' }');
|
|
469
|
+
return lines.join('\n');
|
|
470
|
+
}
|
|
471
|
+
generateAuthMethodParams(route) {
|
|
472
|
+
const params = [];
|
|
473
|
+
// Add path parameters
|
|
474
|
+
for (const param of route.params) {
|
|
475
|
+
params.push(`${param}: string`);
|
|
476
|
+
}
|
|
477
|
+
// Add data parameter for POST/PUT/PATCH
|
|
478
|
+
if (route.method === 'POST' ||
|
|
479
|
+
route.method === 'PUT' ||
|
|
480
|
+
route.method === 'PATCH') {
|
|
481
|
+
// Infer data type based on action
|
|
482
|
+
if (route.handler === 'auth.callback' &&
|
|
483
|
+
route.path === '/auth/local') {
|
|
484
|
+
params.push('data: LoginCredentials');
|
|
485
|
+
}
|
|
486
|
+
else if (route.action === 'register') {
|
|
487
|
+
params.push('data: RegisterData');
|
|
488
|
+
}
|
|
489
|
+
else if (route.action === 'forgotPassword') {
|
|
490
|
+
params.push('data: ForgotPasswordData');
|
|
491
|
+
}
|
|
492
|
+
else if (route.action === 'resetPassword') {
|
|
493
|
+
params.push('data: ResetPasswordData');
|
|
494
|
+
}
|
|
495
|
+
else if (route.action === 'changePassword') {
|
|
496
|
+
params.push('data: ChangePasswordData');
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
params.push('data?: any');
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
// Add NextOptions parameter for GET requests or as last parameter
|
|
503
|
+
if (route.method === 'GET' || params.length === 0) {
|
|
504
|
+
params.push('nextOptions?: NextOptions');
|
|
505
|
+
}
|
|
506
|
+
else {
|
|
507
|
+
params.push('nextOptions?: NextOptions');
|
|
508
|
+
}
|
|
509
|
+
return params.join(', ');
|
|
510
|
+
}
|
|
511
|
+
generateAuthPathExpression(route) {
|
|
512
|
+
let pathTemplate = route.path;
|
|
513
|
+
// Convert :param to ${param}
|
|
514
|
+
pathTemplate = pathTemplate.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, '${$1}');
|
|
515
|
+
return '`/api' + pathTemplate + '`';
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=auth-api-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-api-generator.js","sourceRoot":"","sources":["../../src/generator/auth-api-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main type for Strapi Blocks content
|
|
3
|
+
*/
|
|
4
|
+
export type BlocksContent = Block[];
|
|
5
|
+
/**
|
|
6
|
+
* All possible block types
|
|
7
|
+
*/
|
|
8
|
+
export type Block = ParagraphBlock | HeadingBlock | QuoteBlock | CodeBlock | ListBlock | ImageBlock | LinkBlock;
|
|
9
|
+
/**
|
|
10
|
+
* Paragraph block - default text block
|
|
11
|
+
*/
|
|
12
|
+
export interface ParagraphBlock {
|
|
13
|
+
type: 'paragraph';
|
|
14
|
+
children: InlineNode[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Heading block - h1 to h6
|
|
18
|
+
*/
|
|
19
|
+
export interface HeadingBlock {
|
|
20
|
+
type: 'heading';
|
|
21
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
22
|
+
children: InlineNode[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Quote block - blockquote
|
|
26
|
+
*/
|
|
27
|
+
export interface QuoteBlock {
|
|
28
|
+
type: 'quote';
|
|
29
|
+
children: InlineNode[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Code block - preformatted code with optional language
|
|
33
|
+
*/
|
|
34
|
+
export interface CodeBlock {
|
|
35
|
+
type: 'code';
|
|
36
|
+
language?: string;
|
|
37
|
+
children: InlineNode[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* List block - ordered or unordered
|
|
41
|
+
*/
|
|
42
|
+
export interface ListBlock {
|
|
43
|
+
type: 'list';
|
|
44
|
+
format: 'ordered' | 'unordered';
|
|
45
|
+
children: ListItemBlock[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* List item - individual item in a list
|
|
49
|
+
*/
|
|
50
|
+
export interface ListItemBlock {
|
|
51
|
+
type: 'list-item';
|
|
52
|
+
children: InlineNode[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Image block - embedded image with optional caption
|
|
56
|
+
*/
|
|
57
|
+
export interface ImageBlock {
|
|
58
|
+
type: 'image';
|
|
59
|
+
image: {
|
|
60
|
+
name: string;
|
|
61
|
+
alternativeText?: string | null;
|
|
62
|
+
url: string;
|
|
63
|
+
caption?: string | null;
|
|
64
|
+
width?: number;
|
|
65
|
+
height?: number;
|
|
66
|
+
formats?: unknown;
|
|
67
|
+
hash: string;
|
|
68
|
+
ext: string;
|
|
69
|
+
mime: string;
|
|
70
|
+
size: number;
|
|
71
|
+
previewUrl?: string | null;
|
|
72
|
+
provider: string;
|
|
73
|
+
createdAt: string;
|
|
74
|
+
updatedAt: string;
|
|
75
|
+
};
|
|
76
|
+
children: InlineNode[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Link block - hyperlink
|
|
80
|
+
*/
|
|
81
|
+
export interface LinkBlock {
|
|
82
|
+
type: 'link';
|
|
83
|
+
url: string;
|
|
84
|
+
children: InlineNode[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Inline nodes - text formatting and inline elements
|
|
88
|
+
*/
|
|
89
|
+
export type InlineNode = TextNode | LinkInline | InlineFormatting;
|
|
90
|
+
/**
|
|
91
|
+
* Plain text node
|
|
92
|
+
*/
|
|
93
|
+
export interface TextNode {
|
|
94
|
+
type: 'text';
|
|
95
|
+
text: string;
|
|
96
|
+
bold?: boolean;
|
|
97
|
+
italic?: boolean;
|
|
98
|
+
underline?: boolean;
|
|
99
|
+
strikethrough?: boolean;
|
|
100
|
+
code?: boolean;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Inline link
|
|
104
|
+
*/
|
|
105
|
+
export interface LinkInline {
|
|
106
|
+
type: 'link';
|
|
107
|
+
url: string;
|
|
108
|
+
children: TextNode[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Inline formatting wrappers
|
|
112
|
+
*/
|
|
113
|
+
export type InlineFormatting = {
|
|
114
|
+
type: 'text';
|
|
115
|
+
text: string;
|
|
116
|
+
bold: true;
|
|
117
|
+
} | {
|
|
118
|
+
type: 'text';
|
|
119
|
+
text: string;
|
|
120
|
+
italic: true;
|
|
121
|
+
} | {
|
|
122
|
+
type: 'text';
|
|
123
|
+
text: string;
|
|
124
|
+
underline: true;
|
|
125
|
+
} | {
|
|
126
|
+
type: 'text';
|
|
127
|
+
text: string;
|
|
128
|
+
strikethrough: true;
|
|
129
|
+
} | {
|
|
130
|
+
type: 'text';
|
|
131
|
+
text: string;
|
|
132
|
+
code: true;
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=blocks-types-template.d.ts.map
|