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.
Files changed (176) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/cli/commands/check.d.ts +27 -0
  4. package/dist/cli/commands/check.d.ts.map +1 -0
  5. package/dist/cli/commands/check.js +91 -0
  6. package/dist/cli/commands/check.js.map +1 -0
  7. package/dist/cli/commands/generate.d.ts +28 -0
  8. package/dist/cli/commands/generate.d.ts.map +1 -0
  9. package/dist/cli/commands/generate.js +129 -0
  10. package/dist/cli/commands/generate.js.map +1 -0
  11. package/dist/cli/commands/watch.d.ts +21 -0
  12. package/dist/cli/commands/watch.d.ts.map +1 -0
  13. package/dist/cli/commands/watch.js +113 -0
  14. package/dist/cli/commands/watch.js.map +1 -0
  15. package/dist/cli/index.d.ts +14 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +40 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/utils/api-client.d.ts +41 -0
  20. package/dist/cli/utils/api-client.d.ts.map +1 -0
  21. package/dist/cli/utils/api-client.js +81 -0
  22. package/dist/cli/utils/api-client.js.map +1 -0
  23. package/dist/cli/utils/file-writer.d.ts +44 -0
  24. package/dist/cli/utils/file-writer.d.ts.map +1 -0
  25. package/dist/cli/utils/file-writer.js +89 -0
  26. package/dist/cli/utils/file-writer.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +37 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/client.d.ts +622 -0
  32. package/dist/client.js +688 -0
  33. package/dist/core/endpoint-converter.d.ts +26 -0
  34. package/dist/core/endpoint-converter.d.ts.map +1 -0
  35. package/dist/core/endpoint-converter.js +161 -0
  36. package/dist/core/endpoint-converter.js.map +1 -0
  37. package/dist/core/generator/filters-generator.d.ts +22 -0
  38. package/dist/core/generator/filters-generator.d.ts.map +1 -0
  39. package/dist/core/generator/filters-generator.js +236 -0
  40. package/dist/core/generator/filters-generator.js.map +1 -0
  41. package/dist/core/index.d.ts +8 -0
  42. package/dist/core/index.d.ts.map +1 -0
  43. package/dist/core/index.js +11 -0
  44. package/dist/core/index.js.map +1 -0
  45. package/dist/core/schema-transformer.d.ts +19 -0
  46. package/dist/core/schema-transformer.d.ts.map +1 -0
  47. package/dist/core/schema-transformer.js +306 -0
  48. package/dist/core/schema-transformer.js.map +1 -0
  49. package/dist/generator/auth-api-generator.d.ts +14 -0
  50. package/dist/generator/auth-api-generator.d.ts.map +1 -0
  51. package/dist/generator/auth-api-generator.js +518 -0
  52. package/dist/generator/auth-api-generator.js.map +1 -0
  53. package/dist/generator/blocks-types-template.d.ts +134 -0
  54. package/dist/generator/blocks-types-template.d.ts.map +1 -0
  55. package/dist/generator/blocks-types-template.js +4 -0
  56. package/dist/generator/blocks-types-template.js.map +1 -0
  57. package/dist/generator/client-generator.d.ts +19 -0
  58. package/dist/generator/client-generator.d.ts.map +1 -0
  59. package/dist/generator/client-generator.js +707 -0
  60. package/dist/generator/client-generator.js.map +1 -0
  61. package/dist/generator/custom-api-generator.d.ts +26 -0
  62. package/dist/generator/custom-api-generator.d.ts.map +1 -0
  63. package/dist/generator/custom-api-generator.js +145 -0
  64. package/dist/generator/custom-api-generator.js.map +1 -0
  65. package/dist/generator/index-generator.d.ts +4 -0
  66. package/dist/generator/index-generator.d.ts.map +1 -0
  67. package/dist/generator/index-generator.js +11 -0
  68. package/dist/generator/index-generator.js.map +1 -0
  69. package/dist/generator/index.d.ts +14 -0
  70. package/dist/generator/index.d.ts.map +1 -0
  71. package/dist/generator/index.js +94 -0
  72. package/dist/generator/index.js.map +1 -0
  73. package/dist/generator/types-generator.d.ts +35 -0
  74. package/dist/generator/types-generator.d.ts.map +1 -0
  75. package/dist/generator/types-generator.js +641 -0
  76. package/dist/generator/types-generator.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +4 -0
  79. package/dist/next/index.d.ts +16 -0
  80. package/dist/next/index.d.ts.map +1 -0
  81. package/dist/next/index.js +224 -0
  82. package/dist/next/index.js.map +1 -0
  83. package/dist/parser/custom-types-parser.d.ts +39 -0
  84. package/dist/parser/custom-types-parser.d.ts.map +1 -0
  85. package/dist/parser/custom-types-parser.js +206 -0
  86. package/dist/parser/custom-types-parser.js.map +1 -0
  87. package/dist/parser/index.d.ts +23 -0
  88. package/dist/parser/index.d.ts.map +1 -0
  89. package/dist/parser/index.js +457 -0
  90. package/dist/parser/index.js.map +1 -0
  91. package/dist/parser/routes-parser.d.ts +21 -0
  92. package/dist/parser/routes-parser.d.ts.map +1 -0
  93. package/dist/parser/routes-parser.js +184 -0
  94. package/dist/parser/routes-parser.js.map +1 -0
  95. package/dist/plugin/admin/src/index.d.ts +16 -0
  96. package/dist/plugin/admin/src/index.d.ts.map +1 -0
  97. package/dist/plugin/admin/src/index.js +30 -0
  98. package/dist/plugin/admin/src/index.js.map +1 -0
  99. package/dist/plugin/admin/src/pages/HomePage.d.ts +2 -0
  100. package/dist/plugin/admin/src/pages/HomePage.d.ts.map +1 -0
  101. package/dist/plugin/admin/src/pages/HomePage.js +273 -0
  102. package/dist/plugin/admin/src/pages/HomePage.js.map +1 -0
  103. package/dist/plugin/admin/src/pluginId.d.ts +2 -0
  104. package/dist/plugin/admin/src/pluginId.d.ts.map +1 -0
  105. package/dist/plugin/admin/src/pluginId.js +2 -0
  106. package/dist/plugin/admin/src/pluginId.js.map +1 -0
  107. package/dist/plugin/index.d.ts +22 -0
  108. package/dist/plugin/index.d.ts.map +1 -0
  109. package/dist/plugin/index.js +22 -0
  110. package/dist/plugin/index.js.map +1 -0
  111. package/dist/plugin/server/src/config/index.d.ts +31 -0
  112. package/dist/plugin/server/src/config/index.d.ts.map +1 -0
  113. package/dist/plugin/server/src/config/index.js +35 -0
  114. package/dist/plugin/server/src/config/index.js.map +1 -0
  115. package/dist/plugin/server/src/controllers/schema.d.ts +41 -0
  116. package/dist/plugin/server/src/controllers/schema.d.ts.map +1 -0
  117. package/dist/plugin/server/src/controllers/schema.js +51 -0
  118. package/dist/plugin/server/src/controllers/schema.js.map +1 -0
  119. package/dist/plugin/server/src/index.d.ts +114 -0
  120. package/dist/plugin/server/src/index.d.ts.map +1 -0
  121. package/dist/plugin/server/src/index.js +76 -0
  122. package/dist/plugin/server/src/index.js.map +1 -0
  123. package/dist/plugin/server/src/routes/index.d.ts +14 -0
  124. package/dist/plugin/server/src/routes/index.d.ts.map +1 -0
  125. package/dist/plugin/server/src/routes/index.js +23 -0
  126. package/dist/plugin/server/src/routes/index.js.map +1 -0
  127. package/dist/plugin/server/src/services/endpoints.d.ts +36 -0
  128. package/dist/plugin/server/src/services/endpoints.d.ts.map +1 -0
  129. package/dist/plugin/server/src/services/endpoints.js +523 -0
  130. package/dist/plugin/server/src/services/endpoints.js.map +1 -0
  131. package/dist/plugin/server/src/services/schema.d.ts +25 -0
  132. package/dist/plugin/server/src/services/schema.d.ts.map +1 -0
  133. package/dist/plugin/server/src/services/schema.js +164 -0
  134. package/dist/plugin/server/src/services/schema.js.map +1 -0
  135. package/dist/schema-meta.ts +7 -0
  136. package/dist/schema-types.d.ts +104 -0
  137. package/dist/schema-types.d.ts.map +1 -0
  138. package/dist/schema-types.js +3 -0
  139. package/dist/schema-types.js.map +1 -0
  140. package/dist/shared/constants.d.ts +99 -0
  141. package/dist/shared/constants.d.ts.map +1 -0
  142. package/dist/shared/constants.js +89 -0
  143. package/dist/shared/constants.js.map +1 -0
  144. package/dist/shared/endpoint-types.d.ts +42 -0
  145. package/dist/shared/endpoint-types.d.ts.map +1 -0
  146. package/dist/shared/endpoint-types.js +6 -0
  147. package/dist/shared/endpoint-types.js.map +1 -0
  148. package/dist/shared/index.d.ts +12 -0
  149. package/dist/shared/index.d.ts.map +1 -0
  150. package/dist/shared/index.js +13 -0
  151. package/dist/shared/index.js.map +1 -0
  152. package/dist/shared/naming-utils.d.ts +55 -0
  153. package/dist/shared/naming-utils.d.ts.map +1 -0
  154. package/dist/shared/naming-utils.js +106 -0
  155. package/dist/shared/naming-utils.js.map +1 -0
  156. package/dist/shared/schema-hash.d.ts +39 -0
  157. package/dist/shared/schema-hash.d.ts.map +1 -0
  158. package/dist/shared/schema-hash.js +67 -0
  159. package/dist/shared/schema-hash.js.map +1 -0
  160. package/dist/shared/strapi-schema-types.d.ts +77 -0
  161. package/dist/shared/strapi-schema-types.d.ts.map +1 -0
  162. package/dist/shared/strapi-schema-types.js +10 -0
  163. package/dist/shared/strapi-schema-types.js.map +1 -0
  164. package/dist/shared/string-utils.d.ts +68 -0
  165. package/dist/shared/string-utils.d.ts.map +1 -0
  166. package/dist/shared/string-utils.js +124 -0
  167. package/dist/shared/string-utils.js.map +1 -0
  168. package/dist/transformer/index.d.ts +17 -0
  169. package/dist/transformer/index.d.ts.map +1 -0
  170. package/dist/transformer/index.js +83 -0
  171. package/dist/transformer/index.js.map +1 -0
  172. package/dist/types.d.ts +3430 -0
  173. package/dist/types.js +3 -0
  174. package/package.json +152 -0
  175. package/strapi-admin.js +2 -0
  176. 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