@lastbrain/module-auth 2.0.19 → 2.0.31
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 +55 -7
- package/dist/api/admin/signup-stats.d.ts.map +1 -1
- package/dist/api/admin/signup-stats.js +2 -1
- package/dist/api/admin/storage/usage.d.ts +18 -0
- package/dist/api/admin/storage/usage.d.ts.map +1 -0
- package/dist/api/admin/storage/usage.js +100 -0
- package/dist/api/admin/users/[id]/notifications.d.ts.map +1 -1
- package/dist/api/admin/users/[id]/notifications.js +3 -2
- package/dist/api/admin/users/[id].d.ts.map +1 -1
- package/dist/api/admin/users/[id].js +3 -2
- package/dist/api/admin/users/reactivate/[id].d.ts +16 -0
- package/dist/api/admin/users/reactivate/[id].d.ts.map +1 -0
- package/dist/api/admin/users/reactivate/[id].js +59 -0
- package/dist/api/admin/users/suspend/[id].d.ts +16 -0
- package/dist/api/admin/users/suspend/[id].d.ts.map +1 -0
- package/dist/api/admin/users/suspend/[id].js +59 -0
- package/dist/api/admin/users-by-source.d.ts.map +1 -1
- package/dist/api/admin/users-by-source.js +2 -1
- package/dist/api/admin/users.d.ts.map +1 -1
- package/dist/api/admin/users.js +53 -2
- package/dist/api/auth/account/email-change.d.ts +7 -0
- package/dist/api/auth/account/email-change.d.ts.map +1 -0
- package/dist/api/auth/account/email-change.js +39 -0
- package/dist/api/auth/account/reset-password.d.ts +7 -0
- package/dist/api/auth/account/reset-password.d.ts.map +1 -0
- package/dist/api/auth/account/reset-password.js +36 -0
- package/dist/api/auth/check-username.d.ts +9 -0
- package/dist/api/auth/check-username.d.ts.map +1 -0
- package/dist/api/auth/check-username.js +35 -0
- package/dist/api/auth/establish-session.d.ts +2 -0
- package/dist/api/auth/establish-session.d.ts.map +1 -0
- package/dist/api/auth/establish-session.js +23 -0
- package/dist/api/auth/me.d.ts +4 -4
- package/dist/api/auth/me.d.ts.map +1 -1
- package/dist/api/auth/me.js +28 -6
- package/dist/api/auth/profile.d.ts.map +1 -1
- package/dist/api/auth/profile.js +6 -3
- package/dist/api/auth/storage/recalculate.d.ts +15 -0
- package/dist/api/auth/storage/recalculate.d.ts.map +1 -0
- package/dist/api/auth/storage/recalculate.js +68 -0
- package/dist/api/auth/storage/usage.d.ts +10 -0
- package/dist/api/auth/storage/usage.d.ts.map +1 -0
- package/dist/api/auth/storage/usage.js +86 -0
- package/dist/api/public/add-welcome-bonus.d.ts +16 -0
- package/dist/api/public/add-welcome-bonus.d.ts.map +1 -0
- package/dist/api/public/add-welcome-bonus.js +177 -0
- package/dist/api/public/callback.d.ts +3 -0
- package/dist/api/public/callback.d.ts.map +1 -0
- package/dist/api/public/callback.js +197 -0
- package/dist/api/public/reset-password.d.ts +3 -0
- package/dist/api/public/reset-password.d.ts.map +1 -0
- package/dist/api/public/reset-password.js +43 -0
- package/dist/api/public/set-session.d.ts +7 -0
- package/dist/api/public/set-session.d.ts.map +1 -0
- package/dist/api/public/set-session.js +55 -0
- package/dist/api/public/signin.d.ts.map +1 -1
- package/dist/api/public/signin.js +31 -0
- package/dist/api/public/signup.d.ts.map +1 -1
- package/dist/api/public/signup.js +38 -27
- package/dist/api/public/webhook/storage-addon.d.ts +9 -0
- package/dist/api/public/webhook/storage-addon.d.ts.map +1 -0
- package/dist/api/public/webhook/storage-addon.js +155 -0
- package/dist/api/storage.js +2 -2
- package/dist/auth.build.config.d.ts.map +1 -1
- package/dist/auth.build.config.js +134 -14
- package/dist/components/AccountButton.d.ts.map +1 -1
- package/dist/components/AccountButton.js +54 -28
- package/dist/components/Doc.d.ts.map +1 -1
- package/dist/components/Doc.js +1 -1
- package/dist/components/HasProfil.d.ts +4 -0
- package/dist/components/HasProfil.d.ts.map +1 -0
- package/dist/components/HasProfil.js +39 -0
- package/dist/{web → components}/auth/dashboard.d.ts +1 -1
- package/dist/components/auth/dashboard.d.ts.map +1 -0
- package/dist/components/auth/dashboard.js +74 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/lib/app-branding-data.d.ts +22 -0
- package/dist/lib/app-branding-data.d.ts.map +1 -0
- package/dist/lib/app-branding-data.js +49 -0
- package/dist/lib/auth-email-service.d.ts +57 -0
- package/dist/lib/auth-email-service.d.ts.map +1 -0
- package/dist/lib/auth-email-service.js +382 -0
- package/dist/lib/auth-email-templates.d.ts +2 -0
- package/dist/lib/auth-email-templates.d.ts.map +1 -0
- package/dist/lib/auth-email-templates.js +1 -0
- package/dist/lib/site-url.d.ts +3 -0
- package/dist/lib/site-url.d.ts.map +1 -0
- package/dist/lib/site-url.js +11 -0
- package/dist/sitemap/manifest.d.ts +9 -0
- package/dist/sitemap/manifest.d.ts.map +1 -0
- package/dist/sitemap/manifest.js +14 -0
- package/dist/web/admin/signup-stats.js +3 -3
- package/dist/web/admin/user-detail.d.ts.map +1 -1
- package/dist/web/admin/user-detail.js +135 -14
- package/dist/web/admin/users-by-signup-source.js +2 -2
- package/dist/web/admin/users.d.ts.map +1 -1
- package/dist/web/admin/users.js +26 -7
- package/dist/web/auth/folder.d.ts.map +1 -1
- package/dist/web/auth/folder.js +4 -3
- package/dist/web/auth/profile.d.ts.map +1 -1
- package/dist/web/auth/profile.js +132 -13
- package/dist/web/auth/reglage.d.ts.map +1 -1
- package/dist/web/auth/reglage.js +15 -8
- package/dist/web/public/ResetPassword.d.ts.map +1 -1
- package/dist/web/public/ResetPassword.js +172 -2
- package/dist/web/public/SignInPage.d.ts.map +1 -1
- package/dist/web/public/SignInPage.js +39 -3
- package/dist/web/public/SignUpPage.d.ts.map +1 -1
- package/dist/web/public/SignUpPage.js +7 -2
- package/dist/web/public/auth-code-error.d.ts +2 -0
- package/dist/web/public/auth-code-error.d.ts.map +1 -0
- package/dist/web/public/auth-code-error.js +14 -0
- package/dist/web/public/confirm.d.ts +2 -0
- package/dist/web/public/confirm.d.ts.map +1 -0
- package/dist/web/public/confirm.js +157 -0
- package/package.json +10 -5
- package/src/api/admin/signup-stats.ts +2 -1
- package/src/api/admin/storage/usage.ts +141 -0
- package/src/api/admin/users/[id]/notifications.ts +3 -2
- package/src/api/admin/users/[id].ts +3 -2
- package/src/api/admin/users/reactivate/[id].ts +88 -0
- package/src/api/admin/users/suspend/[id].ts +85 -0
- package/src/api/admin/users-by-source.ts +2 -1
- package/src/api/admin/users.ts +59 -2
- package/src/api/auth/account/email-change.ts +54 -0
- package/src/api/auth/account/reset-password.ts +47 -0
- package/src/api/auth/check-username.ts +52 -0
- package/src/api/auth/establish-session.ts +32 -0
- package/src/api/auth/me.ts +29 -7
- package/src/api/auth/profile.ts +6 -2
- package/src/api/auth/storage/recalculate.ts +108 -0
- package/src/api/auth/storage/usage.ts +113 -0
- package/src/api/public/add-welcome-bonus.ts +229 -0
- package/src/api/public/callback.ts +307 -0
- package/src/api/public/reset-password.ts +52 -0
- package/src/api/public/set-session.ts +73 -0
- package/src/api/public/signin.ts +36 -0
- package/src/api/public/signup.ts +44 -37
- package/src/api/public/webhook/storage-addon.ts +267 -0
- package/src/api/storage.ts +2 -2
- package/src/auth.build.config.ts +134 -14
- package/src/components/AccountButton.tsx +114 -90
- package/src/components/Doc.tsx +47 -9
- package/src/components/HasProfil.tsx +63 -0
- package/src/{web → components}/auth/dashboard.tsx +64 -20
- package/src/i18n/en.json +78 -8
- package/src/i18n/es.json +330 -0
- package/src/i18n/fr.json +75 -8
- package/src/index.ts +3 -1
- package/src/lib/app-branding-data.ts +90 -0
- package/src/lib/auth-email-service.ts +508 -0
- package/src/lib/auth-email-templates.ts +5 -0
- package/src/lib/site-url.ts +17 -0
- package/src/sitemap/manifest.ts +26 -0
- package/src/web/admin/signup-stats.tsx +3 -3
- package/src/web/admin/user-detail.tsx +314 -15
- package/src/web/admin/users-by-signup-source.tsx +2 -2
- package/src/web/admin/users.tsx +50 -14
- package/src/web/auth/folder.tsx +23 -5
- package/src/web/auth/profile.tsx +227 -13
- package/src/web/auth/reglage.tsx +55 -24
- package/src/web/public/ResetPassword.tsx +301 -1
- package/src/web/public/SignInPage.tsx +43 -3
- package/src/web/public/SignUpPage.tsx +14 -5
- package/src/web/public/auth-code-error.tsx +49 -0
- package/src/web/public/confirm.tsx +195 -0
- package/supabase/migrations/20251112000001_auto_profile_and_admin_view.sql +3 -1
- package/supabase/migrations/20251127100000_rename_body_to_message.sql +8 -3
- package/supabase/migrations/20260120150001_add_user_storage.sql +105 -0
- package/supabase/migrations/20260122131200_add_global_addons_system.sql +305 -0
- package/supabase/migrations/20260123100000_enable_vector_extension.sql +9 -0
- package/supabase/migrations/20260123140000_module_auth_fix_get_user_limits_null.sql +93 -0
- package/supabase/migrations/20260123145000_module_auth_fix_circular_storage_base.sql +89 -0
- package/supabase/migrations/20260129400000_add_username_to_user_profil.sql +33 -0
- package/dist/web/auth/dashboard.d.ts.map +0 -1
- package/dist/web/auth/dashboard.js +0 -48
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /api/auth/webhook/storage-addon
|
|
3
|
+
* Webhook handler for storage addon subscription events
|
|
4
|
+
* Called by module-billing-pro when a storage addon subscription item is updated
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getSupabaseServiceClient } from "@lastbrain/core/server";
|
|
8
|
+
import { logger } from "@lastbrain/core";
|
|
9
|
+
|
|
10
|
+
// Runtime config
|
|
11
|
+
export const runtime = "nodejs";
|
|
12
|
+
export const dynamic = "force-dynamic";
|
|
13
|
+
|
|
14
|
+
interface StorageAddonWebhookPayload {
|
|
15
|
+
eventType: string;
|
|
16
|
+
owner_id: string;
|
|
17
|
+
addon_key: string; // e.g., "storage_8gb"
|
|
18
|
+
stripe_subscription_id: string;
|
|
19
|
+
stripe_subscription_item_id: string;
|
|
20
|
+
stripe_customer_id?: string;
|
|
21
|
+
quantity?: number;
|
|
22
|
+
status: string; // active, trialing, canceled, past_due, etc.
|
|
23
|
+
current_period_start?: string;
|
|
24
|
+
current_period_end?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function POST(request: Request) {
|
|
28
|
+
try {
|
|
29
|
+
const body: StorageAddonWebhookPayload = await request.json();
|
|
30
|
+
|
|
31
|
+
const {
|
|
32
|
+
eventType,
|
|
33
|
+
owner_id,
|
|
34
|
+
addon_key,
|
|
35
|
+
stripe_subscription_id,
|
|
36
|
+
stripe_subscription_item_id,
|
|
37
|
+
stripe_customer_id,
|
|
38
|
+
quantity = 1,
|
|
39
|
+
status,
|
|
40
|
+
current_period_start,
|
|
41
|
+
current_period_end,
|
|
42
|
+
} = body;
|
|
43
|
+
|
|
44
|
+
logger.debug(
|
|
45
|
+
`[Storage Addon Webhook] Processing ${eventType} for user ${owner_id}, addon ${addon_key}`
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
if (
|
|
49
|
+
!owner_id ||
|
|
50
|
+
!addon_key ||
|
|
51
|
+
!stripe_subscription_id ||
|
|
52
|
+
!stripe_subscription_item_id
|
|
53
|
+
) {
|
|
54
|
+
logger.warn("[Storage Addon Webhook] Missing required fields in payload");
|
|
55
|
+
return Response.json({ received: true }, { status: 200 });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const supabase = await getSupabaseServiceClient();
|
|
59
|
+
|
|
60
|
+
// Find the addon by key
|
|
61
|
+
const { data: addon, error: addonError } = await supabase
|
|
62
|
+
.from("global_addons")
|
|
63
|
+
.select("id")
|
|
64
|
+
.eq("addon_key", addon_key)
|
|
65
|
+
.eq("addon_type", "storage")
|
|
66
|
+
.eq("is_active", true)
|
|
67
|
+
.single();
|
|
68
|
+
|
|
69
|
+
if (addonError || !addon) {
|
|
70
|
+
logger.warn(
|
|
71
|
+
`[Storage Addon Webhook] Addon not found for key: ${addon_key}`
|
|
72
|
+
);
|
|
73
|
+
return Response.json({ received: true }, { status: 200 });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Handle different event types
|
|
77
|
+
switch (eventType) {
|
|
78
|
+
case "addon.created":
|
|
79
|
+
case "addon.updated": {
|
|
80
|
+
// Upsert user addon activation
|
|
81
|
+
// Use owner_id + addon_id as the unique key (one addon type per user)
|
|
82
|
+
// When a subscription is canceled and recreated, we update the same record with new stripe IDs
|
|
83
|
+
const { error: upsertError } = await supabase
|
|
84
|
+
.from("user_global_addons")
|
|
85
|
+
.upsert(
|
|
86
|
+
{
|
|
87
|
+
owner_id,
|
|
88
|
+
addon_id: addon.id,
|
|
89
|
+
quantity,
|
|
90
|
+
status,
|
|
91
|
+
current_period_start,
|
|
92
|
+
current_period_end,
|
|
93
|
+
stripe_customer_id,
|
|
94
|
+
stripe_subscription_id,
|
|
95
|
+
stripe_subscription_item_id,
|
|
96
|
+
updated_at: new Date().toISOString(),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
// Use owner_id + addon_id as the unique key for idempotency
|
|
100
|
+
// This ensures one addon per user, even if subscription is recreated
|
|
101
|
+
onConflict: "owner_id,addon_id",
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
if (upsertError) {
|
|
106
|
+
logger.error(
|
|
107
|
+
"[Storage Addon Webhook] Error upserting addon:",
|
|
108
|
+
upsertError
|
|
109
|
+
);
|
|
110
|
+
return Response.json(
|
|
111
|
+
{ error: "Failed to update storage addon" },
|
|
112
|
+
{ status: 500 }
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
logger.debug(
|
|
117
|
+
`[Storage Addon Webhook] Storage addon ${addon_key} ${eventType} for user ${owner_id}: status=${status}, quantity=${quantity}`
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
// Update user_profil.stockage to reflect total (optional, since get_user_limits calculates dynamically)
|
|
121
|
+
// We'll keep this for backward compatibility with existing code
|
|
122
|
+
try {
|
|
123
|
+
const limitsResult = await supabase.rpc("get_user_limits", {
|
|
124
|
+
owner_id_param: owner_id,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
logger.debug(
|
|
128
|
+
`[Storage Addon Webhook] get_user_limits raw result:`,
|
|
129
|
+
JSON.stringify(limitsResult, null, 2)
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
if (limitsResult.error) {
|
|
133
|
+
logger.error(
|
|
134
|
+
`[Storage Addon Webhook] get_user_limits error:`,
|
|
135
|
+
limitsResult.error
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (limitsResult.data) {
|
|
140
|
+
// Supabase RPC returns JSON as string, need to parse if string
|
|
141
|
+
const limitsData =
|
|
142
|
+
typeof limitsResult.data === "string"
|
|
143
|
+
? JSON.parse(limitsResult.data)
|
|
144
|
+
: limitsResult.data;
|
|
145
|
+
|
|
146
|
+
logger.debug(
|
|
147
|
+
`[Storage Addon Webhook] Parsed limits data:`,
|
|
148
|
+
limitsData
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
const totalStorageGb = limitsData.storage_quota_gb;
|
|
152
|
+
|
|
153
|
+
logger.debug(
|
|
154
|
+
`[Storage Addon Webhook] Extracted storage_quota_gb: ${totalStorageGb}`
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
// Update user_profil with new total
|
|
158
|
+
await supabase.from("user_profil").upsert(
|
|
159
|
+
{
|
|
160
|
+
owner_id,
|
|
161
|
+
stockage: totalStorageGb,
|
|
162
|
+
updated_at: new Date().toISOString(),
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
onConflict: "owner_id",
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
logger.debug(
|
|
170
|
+
`[Storage Addon Webhook] Updated user_profil.stockage to ${totalStorageGb} GB for user ${owner_id}`
|
|
171
|
+
);
|
|
172
|
+
} else {
|
|
173
|
+
logger.warn(
|
|
174
|
+
`[Storage Addon Webhook] get_user_limits returned no data for user ${owner_id}`
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
} catch (error) {
|
|
178
|
+
logger.error(
|
|
179
|
+
"[Storage Addon Webhook] Error updating user_profil.stockage:",
|
|
180
|
+
error
|
|
181
|
+
);
|
|
182
|
+
// Don't fail - the addon is still recorded
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
case "addon.deleted":
|
|
189
|
+
case "addon.canceled": {
|
|
190
|
+
// Mark addon as canceled but keep for period_end grace
|
|
191
|
+
const { error: cancelError } = await supabase
|
|
192
|
+
.from("user_global_addons")
|
|
193
|
+
.update({
|
|
194
|
+
status: "canceled",
|
|
195
|
+
updated_at: new Date().toISOString(),
|
|
196
|
+
})
|
|
197
|
+
.eq("stripe_subscription_item_id", stripe_subscription_item_id);
|
|
198
|
+
|
|
199
|
+
if (cancelError) {
|
|
200
|
+
logger.error(
|
|
201
|
+
"[Storage Addon Webhook] Error canceling addon:",
|
|
202
|
+
cancelError
|
|
203
|
+
);
|
|
204
|
+
return Response.json(
|
|
205
|
+
{ error: "Failed to cancel storage addon" },
|
|
206
|
+
{ status: 500 }
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
logger.debug(
|
|
211
|
+
`[Storage Addon Webhook] Storage addon ${addon_key} canceled for user ${owner_id}`
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
// Recalculate total storage
|
|
215
|
+
try {
|
|
216
|
+
const limitsResult = await supabase.rpc("get_user_limits", {
|
|
217
|
+
owner_id_param: owner_id,
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
if (limitsResult.data) {
|
|
221
|
+
const limitsData =
|
|
222
|
+
typeof limitsResult.data === "string"
|
|
223
|
+
? JSON.parse(limitsResult.data)
|
|
224
|
+
: limitsResult.data;
|
|
225
|
+
|
|
226
|
+
const totalStorageGb = limitsData.storage_quota_gb;
|
|
227
|
+
|
|
228
|
+
await supabase.from("user_profil").upsert(
|
|
229
|
+
{
|
|
230
|
+
owner_id,
|
|
231
|
+
stockage: totalStorageGb,
|
|
232
|
+
updated_at: new Date().toISOString(),
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
onConflict: "owner_id",
|
|
236
|
+
}
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
logger.debug(
|
|
240
|
+
`[Storage Addon Webhook] Recalculated user_profil.stockage to ${totalStorageGb} GB after addon cancellation`
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
} catch (error) {
|
|
244
|
+
logger.warn(
|
|
245
|
+
"[Storage Addon Webhook] Could not recalculate storage:",
|
|
246
|
+
error
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
default:
|
|
254
|
+
logger.warn(`[Storage Addon Webhook] Unknown event type: ${eventType}`);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return Response.json({ received: true }, { status: 200 });
|
|
258
|
+
} catch (error) {
|
|
259
|
+
logger.error("[Storage Addon Webhook] Error:", error);
|
|
260
|
+
return Response.json(
|
|
261
|
+
{
|
|
262
|
+
error: error instanceof Error ? error.message : "Webhook error",
|
|
263
|
+
},
|
|
264
|
+
{ status: 400 }
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
package/src/api/storage.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { supabaseBrowserClient } from "@lastbrain/core";
|
|
1
|
+
import { logger, supabaseBrowserClient } from "@lastbrain/core";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Upload a file to Supabase Storage and return proxy URL
|
|
@@ -55,7 +55,7 @@ export async function deleteFilesWithPrefix(
|
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
if (listError) {
|
|
58
|
-
|
|
58
|
+
logger.warn("Failed to list files for deletion:", listError);
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
|
package/src/auth.build.config.ts
CHANGED
|
@@ -19,9 +19,14 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
19
19
|
componentExport: "ResetPassword",
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
section: "
|
|
23
|
-
path: "/
|
|
24
|
-
componentExport: "
|
|
22
|
+
section: "public",
|
|
23
|
+
path: "/confirm",
|
|
24
|
+
componentExport: "ConfirmPage",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
section: "public",
|
|
28
|
+
path: "/auth-code-error",
|
|
29
|
+
componentExport: "AuthCodeErrorPage",
|
|
25
30
|
},
|
|
26
31
|
{
|
|
27
32
|
section: "auth",
|
|
@@ -69,6 +74,34 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
69
74
|
entryPoint: "api/public/signup",
|
|
70
75
|
authRequired: false,
|
|
71
76
|
},
|
|
77
|
+
{
|
|
78
|
+
method: "POST",
|
|
79
|
+
path: "/api/public/set-session",
|
|
80
|
+
handlerExport: "POST",
|
|
81
|
+
entryPoint: "api/public/set-session",
|
|
82
|
+
authRequired: false,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
method: "POST",
|
|
86
|
+
path: "/api/public/add-welcome-bonus",
|
|
87
|
+
handlerExport: "POST",
|
|
88
|
+
entryPoint: "api/public/add-welcome-bonus",
|
|
89
|
+
authRequired: true,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
method: "POST",
|
|
93
|
+
path: "/api/public/reset-password",
|
|
94
|
+
handlerExport: "POST",
|
|
95
|
+
entryPoint: "api/public/reset-password",
|
|
96
|
+
authRequired: false,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
method: "GET",
|
|
100
|
+
path: "/api/public/callback",
|
|
101
|
+
handlerExport: "GET",
|
|
102
|
+
entryPoint: "api/public/callback",
|
|
103
|
+
authRequired: false,
|
|
104
|
+
},
|
|
72
105
|
{
|
|
73
106
|
method: "GET",
|
|
74
107
|
path: "/api/auth/profile",
|
|
@@ -90,6 +123,13 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
90
123
|
entryPoint: "api/auth/profile",
|
|
91
124
|
authRequired: true,
|
|
92
125
|
},
|
|
126
|
+
{
|
|
127
|
+
method: "GET",
|
|
128
|
+
path: "/api/auth/check-username",
|
|
129
|
+
handlerExport: "GET",
|
|
130
|
+
entryPoint: "api/auth/check-username",
|
|
131
|
+
authRequired: false,
|
|
132
|
+
},
|
|
93
133
|
{
|
|
94
134
|
method: "GET",
|
|
95
135
|
path: "/api/auth/me",
|
|
@@ -97,6 +137,20 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
97
137
|
entryPoint: "api/auth/me",
|
|
98
138
|
authRequired: true,
|
|
99
139
|
},
|
|
140
|
+
{
|
|
141
|
+
method: "POST",
|
|
142
|
+
path: "/api/auth/account/email-change",
|
|
143
|
+
handlerExport: "POST",
|
|
144
|
+
entryPoint: "api/auth/account/email-change",
|
|
145
|
+
authRequired: true,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
method: "POST",
|
|
149
|
+
path: "/api/auth/account/reset-password",
|
|
150
|
+
handlerExport: "POST",
|
|
151
|
+
entryPoint: "api/auth/account/reset-password",
|
|
152
|
+
authRequired: true,
|
|
153
|
+
},
|
|
100
154
|
{
|
|
101
155
|
method: "GET",
|
|
102
156
|
path: "/api/admin/users",
|
|
@@ -118,6 +172,20 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
118
172
|
entryPoint: "api/admin/users/[id]/notifications",
|
|
119
173
|
authRequired: true,
|
|
120
174
|
},
|
|
175
|
+
{
|
|
176
|
+
method: "POST",
|
|
177
|
+
path: "/api/admin/users/suspend/[id]",
|
|
178
|
+
handlerExport: "POST",
|
|
179
|
+
entryPoint: "api/admin/users/suspend/[id]",
|
|
180
|
+
authRequired: true,
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
method: "POST",
|
|
184
|
+
path: "/api/admin/users/reactivate/[id]",
|
|
185
|
+
handlerExport: "POST",
|
|
186
|
+
entryPoint: "api/admin/users/reactivate/[id]",
|
|
187
|
+
authRequired: true,
|
|
188
|
+
},
|
|
121
189
|
{
|
|
122
190
|
method: "GET",
|
|
123
191
|
path: "/api/admin/signup-stats",
|
|
@@ -125,6 +193,34 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
125
193
|
entryPoint: "api/admin/signup-stats",
|
|
126
194
|
authRequired: true,
|
|
127
195
|
},
|
|
196
|
+
{
|
|
197
|
+
method: "GET",
|
|
198
|
+
path: "/api/admin/storage/usage",
|
|
199
|
+
handlerExport: "GET",
|
|
200
|
+
entryPoint: "api/admin/storage/usage",
|
|
201
|
+
authRequired: true,
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
method: "GET",
|
|
205
|
+
path: "/api/auth/storage/usage",
|
|
206
|
+
handlerExport: "GET",
|
|
207
|
+
entryPoint: "api/auth/storage/usage",
|
|
208
|
+
authRequired: true,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
method: "POST",
|
|
212
|
+
path: "/api/auth/storage/recalculate",
|
|
213
|
+
handlerExport: "POST",
|
|
214
|
+
entryPoint: "api/auth/storage/recalculate",
|
|
215
|
+
authRequired: true,
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
method: "POST",
|
|
219
|
+
path: "/api/auth/webhook/storage-addon",
|
|
220
|
+
handlerExport: "POST",
|
|
221
|
+
entryPoint: "api/public/webhook/storage-addon",
|
|
222
|
+
authRequired: false,
|
|
223
|
+
},
|
|
128
224
|
],
|
|
129
225
|
migrations: {
|
|
130
226
|
enabled: true,
|
|
@@ -135,6 +231,13 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
135
231
|
"20251112000001_auto_profile_and_admin_view.sql",
|
|
136
232
|
"20251112000002_sync_avatars.sql",
|
|
137
233
|
"20251124000001_add_get_admin_user_details.sql",
|
|
234
|
+
"20251127100000_rename_body_to_message.sql",
|
|
235
|
+
"20260120150001_add_user_storage.sql",
|
|
236
|
+
"20260122131200_add_global_addons_system.sql",
|
|
237
|
+
"20260123100000_enable_vector_extension.sql",
|
|
238
|
+
"20260123140000_module_auth_fix_get_user_limits_null.sql",
|
|
239
|
+
"20260123145000_module_auth_fix_circular_storage_base.sql",
|
|
240
|
+
"20260129400000_add_username_to_user_profil.sql"
|
|
138
241
|
],
|
|
139
242
|
migrationsDownPath: "supabase/migrations-down",
|
|
140
243
|
},
|
|
@@ -160,16 +263,16 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
160
263
|
position: "end",
|
|
161
264
|
componentExport: "AccountButton",
|
|
162
265
|
},
|
|
163
|
-
{
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
},
|
|
266
|
+
// {
|
|
267
|
+
// title: "module-auth.menu.theme",
|
|
268
|
+
// description: "module-auth.menu.theme_desc",
|
|
269
|
+
// icon: "Palette",
|
|
270
|
+
// path: "#",
|
|
271
|
+
// order: 9999,
|
|
272
|
+
// type: "icon",
|
|
273
|
+
// position: "end",
|
|
274
|
+
// componentExport: "ThemeSwitcherButton",
|
|
275
|
+
// },
|
|
173
276
|
],
|
|
174
277
|
admin: [
|
|
175
278
|
{
|
|
@@ -285,7 +388,7 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
285
388
|
description: "module-auth.menu.settings_desc",
|
|
286
389
|
icon: "Settings",
|
|
287
390
|
path: "/auth/reglage",
|
|
288
|
-
order:
|
|
391
|
+
order: 70,
|
|
289
392
|
shortcut: "cmd+shift+s",
|
|
290
393
|
shortcutDisplay: "⌘⇧S",
|
|
291
394
|
},
|
|
@@ -308,8 +411,25 @@ const authBuildConfig: ModuleBuildConfig = {
|
|
|
308
411
|
filter: "owner_id=eq.${USER_ID}",
|
|
309
412
|
broadcast: "user_notifications_updated",
|
|
310
413
|
},
|
|
414
|
+
{
|
|
415
|
+
schema: "public",
|
|
416
|
+
table: "user_profil",
|
|
417
|
+
event: "*",
|
|
418
|
+
filter: "owner_id=eq.${USER_ID}",
|
|
419
|
+
broadcast: "user_profile_updated",
|
|
420
|
+
},
|
|
311
421
|
],
|
|
312
422
|
},
|
|
423
|
+
authDashboard: [
|
|
424
|
+
{
|
|
425
|
+
key: "user",
|
|
426
|
+
title: "auth",
|
|
427
|
+
icon: "Dashboard",
|
|
428
|
+
componentExport: "DashboardPage",
|
|
429
|
+
entryPoint: "components/auth/dashboard",
|
|
430
|
+
order: 1,
|
|
431
|
+
},
|
|
432
|
+
],
|
|
313
433
|
storage: {
|
|
314
434
|
buckets: [
|
|
315
435
|
{
|