@lastbrain/app 2.0.31 → 2.0.35
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/dist/analytics/registry.d.ts +7 -0
- package/dist/analytics/registry.d.ts.map +1 -0
- package/dist/analytics/registry.js +11 -0
- package/dist/auth/useAuthSession.d.ts.map +1 -1
- package/dist/auth/useAuthSession.js +85 -1
- package/dist/cli.js +19 -3
- package/dist/components/LanguageSwitcher.d.ts.map +1 -1
- package/dist/components/LanguageSwitcher.js +89 -5
- package/dist/config/version.d.ts.map +1 -1
- package/dist/config/version.js +30 -19
- package/dist/i18n/useLink.d.ts.map +1 -1
- package/dist/i18n/useLink.js +15 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/layouts/AdminLayoutWithSidebar.d.ts +3 -1
- package/dist/layouts/AdminLayoutWithSidebar.d.ts.map +1 -1
- package/dist/layouts/AdminLayoutWithSidebar.js +2 -2
- package/dist/layouts/AppProviders.d.ts +7 -1
- package/dist/layouts/AppProviders.d.ts.map +1 -1
- package/dist/layouts/AppProviders.js +24 -3
- package/dist/layouts/AuthLayout.js +1 -1
- package/dist/layouts/PublicLayout.js +1 -1
- package/dist/layouts/RootLayout.d.ts.map +1 -1
- package/dist/scripts/init-app.d.ts.map +1 -1
- package/dist/scripts/init-app.js +301 -138
- package/dist/scripts/module-build.d.ts.map +1 -1
- package/dist/scripts/module-build.js +402 -67
- package/dist/scripts/module-create.d.ts.map +1 -1
- package/dist/scripts/module-create.js +227 -10
- package/dist/scripts/sitemap-flat-generator.d.ts +39 -0
- package/dist/scripts/sitemap-flat-generator.d.ts.map +1 -0
- package/dist/scripts/sitemap-flat-generator.js +231 -0
- package/dist/scripts/sitemap-manifest-generator.d.ts +59 -0
- package/dist/scripts/sitemap-manifest-generator.d.ts.map +1 -0
- package/dist/scripts/sitemap-manifest-generator.js +290 -0
- package/dist/sitemap/manifest.d.ts +8 -0
- package/dist/sitemap/manifest.d.ts.map +1 -0
- package/dist/sitemap/manifest.js +6 -0
- package/dist/styles.css +2 -2
- package/dist/templates/AuthGuidePage.js +2 -0
- package/dist/templates/DefaultDoc.d.ts.map +1 -1
- package/dist/templates/DefaultDoc.js +9 -5
- package/dist/templates/DocPage.d.ts.map +1 -1
- package/dist/templates/DocPage.js +40 -0
- package/dist/templates/MigrationsGuidePage.js +2 -0
- package/dist/templates/ModuleGuidePage.d.ts.map +1 -1
- package/dist/templates/ModuleGuidePage.js +4 -1
- package/dist/templates/SimpleHomePage.js +2 -0
- package/package.json +11 -4
- package/src/analytics/registry.ts +14 -0
- package/src/auth/useAuthSession.ts +91 -1
- package/src/cli.ts +19 -3
- package/src/components/LanguageSwitcher.tsx +113 -23
- package/src/config/version.ts +30 -19
- package/src/i18n/useLink.ts +15 -0
- package/src/index.ts +17 -0
- package/src/layouts/AdminLayoutWithSidebar.tsx +4 -0
- package/src/layouts/AppProviders.tsx +66 -8
- package/src/layouts/AuthLayout.tsx +1 -1
- package/src/layouts/PublicLayout.tsx +1 -1
- package/src/layouts/RootLayout.tsx +0 -1
- package/src/scripts/init-app.ts +360 -149
- package/src/scripts/module-build.ts +458 -72
- package/src/scripts/module-create.ts +260 -10
- package/src/scripts/sitemap-flat-generator.ts +313 -0
- package/src/scripts/sitemap-manifest-generator.ts +476 -0
- package/src/sitemap/manifest.ts +17 -0
- package/src/templates/AuthGuidePage.tsx +1 -1
- package/src/templates/DefaultDoc.tsx +397 -6
- package/src/templates/DocPage.tsx +40 -0
- package/src/templates/MigrationsGuidePage.tsx +1 -1
- package/src/templates/ModuleGuidePage.tsx +3 -2
- package/src/templates/SimpleHomePage.tsx +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// GENERATED FILE - DO NOT EDIT MANUALLY
|
|
2
2
|
// This file is auto-generated from markdown files in docs/
|
|
3
3
|
// Run 'pnpm sync:docs' to regenerate
|
|
4
|
+
"use client";
|
|
4
5
|
import React from "react";
|
|
5
6
|
import { Card, CardBody, CardHeader, Snippet, Alert } from "@lastbrain/ui";
|
|
6
7
|
import {
|
|
@@ -21,6 +22,211 @@ import {
|
|
|
21
22
|
export function DefaultDocumentation() {
|
|
22
23
|
return (
|
|
23
24
|
<div className="space-y-6">
|
|
25
|
+
<Card className="bg-linear-to-r from-blue-50 to-indigo-50 dark:from-blue-950 dark:to-indigo-950 border-l-4 border-blue-500 sticky top-0 z-10">
|
|
26
|
+
<CardHeader>
|
|
27
|
+
<h2 className="text-2xl font-bold flex items-center gap-2">
|
|
28
|
+
<BookOpen size={24} className="text-blue-600 dark:text-blue-400" />
|
|
29
|
+
Sommaire de la Documentation
|
|
30
|
+
</h2>
|
|
31
|
+
</CardHeader>
|
|
32
|
+
<CardBody>
|
|
33
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-3">
|
|
34
|
+
<a
|
|
35
|
+
href="#section-welcome"
|
|
36
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
37
|
+
>
|
|
38
|
+
<FileText
|
|
39
|
+
size={16}
|
|
40
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
41
|
+
/>
|
|
42
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
43
|
+
LastBrain
|
|
44
|
+
</span>
|
|
45
|
+
</a>
|
|
46
|
+
<a
|
|
47
|
+
href="#section-quickstart"
|
|
48
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
49
|
+
>
|
|
50
|
+
<Rocket
|
|
51
|
+
size={16}
|
|
52
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
53
|
+
/>
|
|
54
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
55
|
+
Démarrage rapide
|
|
56
|
+
</span>
|
|
57
|
+
</a>
|
|
58
|
+
<a
|
|
59
|
+
href="#section-architecture"
|
|
60
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
61
|
+
>
|
|
62
|
+
<Building2
|
|
63
|
+
size={16}
|
|
64
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
65
|
+
/>
|
|
66
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
67
|
+
Architecture
|
|
68
|
+
</span>
|
|
69
|
+
</a>
|
|
70
|
+
<a
|
|
71
|
+
href="#section-create-module"
|
|
72
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
73
|
+
>
|
|
74
|
+
<BookOpen
|
|
75
|
+
size={16}
|
|
76
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
77
|
+
/>
|
|
78
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
79
|
+
Documentation des modules
|
|
80
|
+
</span>
|
|
81
|
+
</a>
|
|
82
|
+
<a
|
|
83
|
+
href="#section-database"
|
|
84
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
85
|
+
>
|
|
86
|
+
<Database
|
|
87
|
+
size={16}
|
|
88
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
89
|
+
/>
|
|
90
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
91
|
+
Base de données
|
|
92
|
+
</span>
|
|
93
|
+
</a>
|
|
94
|
+
<a
|
|
95
|
+
href="#section-admin"
|
|
96
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
97
|
+
>
|
|
98
|
+
<User
|
|
99
|
+
size={16}
|
|
100
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
101
|
+
/>
|
|
102
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
103
|
+
Créer un Compte Administrateur
|
|
104
|
+
</span>
|
|
105
|
+
</a>
|
|
106
|
+
<a
|
|
107
|
+
href="#section-development"
|
|
108
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
109
|
+
>
|
|
110
|
+
<Rocket
|
|
111
|
+
size={16}
|
|
112
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
113
|
+
/>
|
|
114
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
115
|
+
Développement
|
|
116
|
+
</span>
|
|
117
|
+
</a>
|
|
118
|
+
<a
|
|
119
|
+
href="#section-routes"
|
|
120
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
121
|
+
>
|
|
122
|
+
<Shield
|
|
123
|
+
size={16}
|
|
124
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
125
|
+
/>
|
|
126
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
127
|
+
Routes Protégées
|
|
128
|
+
</span>
|
|
129
|
+
</a>
|
|
130
|
+
<a
|
|
131
|
+
href="#section-workflow"
|
|
132
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
133
|
+
>
|
|
134
|
+
<Zap
|
|
135
|
+
size={16}
|
|
136
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
137
|
+
/>
|
|
138
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
139
|
+
Workflow de Développement
|
|
140
|
+
</span>
|
|
141
|
+
</a>
|
|
142
|
+
<a
|
|
143
|
+
href="#section-ui"
|
|
144
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
145
|
+
>
|
|
146
|
+
<Palette
|
|
147
|
+
size={16}
|
|
148
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
149
|
+
/>
|
|
150
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
151
|
+
Interface utilisateur
|
|
152
|
+
</span>
|
|
153
|
+
</a>
|
|
154
|
+
<a
|
|
155
|
+
href="#section-storage"
|
|
156
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
157
|
+
>
|
|
158
|
+
<HardDrive
|
|
159
|
+
size={16}
|
|
160
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
161
|
+
/>
|
|
162
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
163
|
+
Système de Proxy Storage
|
|
164
|
+
</span>
|
|
165
|
+
</a>
|
|
166
|
+
<a
|
|
167
|
+
href="#section-realtime"
|
|
168
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
169
|
+
>
|
|
170
|
+
<Zap
|
|
171
|
+
size={16}
|
|
172
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
173
|
+
/>
|
|
174
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
175
|
+
Système Realtime
|
|
176
|
+
</span>
|
|
177
|
+
</a>
|
|
178
|
+
<a
|
|
179
|
+
href="#section-module-docs"
|
|
180
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
181
|
+
>
|
|
182
|
+
<FileText
|
|
183
|
+
size={16}
|
|
184
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
185
|
+
/>
|
|
186
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
187
|
+
Documenter ses modules
|
|
188
|
+
</span>
|
|
189
|
+
</a>
|
|
190
|
+
<a
|
|
191
|
+
href="#section-links"
|
|
192
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
193
|
+
>
|
|
194
|
+
<Link
|
|
195
|
+
size={16}
|
|
196
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
197
|
+
/>
|
|
198
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
199
|
+
Liens utiles & remerciements 🙏
|
|
200
|
+
</span>
|
|
201
|
+
</a>
|
|
202
|
+
<a
|
|
203
|
+
href="#section-modules"
|
|
204
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
205
|
+
>
|
|
206
|
+
<Package
|
|
207
|
+
size={16}
|
|
208
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
209
|
+
/>
|
|
210
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
211
|
+
Modules
|
|
212
|
+
</span>
|
|
213
|
+
</a>
|
|
214
|
+
<a
|
|
215
|
+
href="#section-i18n"
|
|
216
|
+
className="flex items-center gap-2 p-2 rounded hover:bg-blue-100 dark:hover:bg-blue-900 transition-colors group"
|
|
217
|
+
>
|
|
218
|
+
<FileText
|
|
219
|
+
size={16}
|
|
220
|
+
className="text-blue-600 dark:text-blue-400 shrink-0 group-hover:scale-110 transition-transform"
|
|
221
|
+
/>
|
|
222
|
+
<span className="text-sm font-medium text-slate-700 dark:text-slate-300 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
|
|
223
|
+
Système de traduction i18n
|
|
224
|
+
</span>
|
|
225
|
+
</a>
|
|
226
|
+
</div>
|
|
227
|
+
</CardBody>
|
|
228
|
+
</Card>
|
|
229
|
+
|
|
24
230
|
<Card id="section-welcome" className="scroll-mt-32">
|
|
25
231
|
<CardHeader>
|
|
26
232
|
<h2 className="text-2xl font-semibold flex items-center gap-2">
|
|
@@ -484,6 +690,145 @@ export function DefaultDocumentation() {
|
|
|
484
690
|
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
485
691
|
{`pnpm dev`}
|
|
486
692
|
</Snippet>
|
|
693
|
+
<h3 className="text-lg font-semibold mb-2">
|
|
694
|
+
Écouter les webhooks Stripe (local)
|
|
695
|
+
</h3>
|
|
696
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
697
|
+
Pré-requis:
|
|
698
|
+
</p>
|
|
699
|
+
<div className="space-y-2">
|
|
700
|
+
<div className="flex items-start gap-2">
|
|
701
|
+
<span className="text-green-600">✅</span>
|
|
702
|
+
<span>
|
|
703
|
+
Avoir installé la Stripe CLI: https://stripe.com/docs/stripe-cli
|
|
704
|
+
</span>
|
|
705
|
+
</div>
|
|
706
|
+
<div className="flex items-start gap-2">
|
|
707
|
+
<span className="text-green-600">✅</span>
|
|
708
|
+
<span>
|
|
709
|
+
Avoir une clé test dans votre{" "}
|
|
710
|
+
<code className="text-sm bg-slate-100 dark:bg-slate-800 px-2 py-1 rounded">
|
|
711
|
+
.env.local
|
|
712
|
+
</code>
|
|
713
|
+
:{" "}
|
|
714
|
+
<code className="text-sm bg-slate-100 dark:bg-slate-800 px-2 py-1 rounded">
|
|
715
|
+
STRIPE_SECRET_KEY=sk_test_...
|
|
716
|
+
</code>
|
|
717
|
+
</span>
|
|
718
|
+
</div>
|
|
719
|
+
</div>
|
|
720
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
721
|
+
Endpoint local utilisé par la plateforme:
|
|
722
|
+
</p>
|
|
723
|
+
<div className="space-y-2">
|
|
724
|
+
<div className="flex items-start gap-2">
|
|
725
|
+
<span className="text-green-600">✅</span>
|
|
726
|
+
<span>
|
|
727
|
+
<code className="text-sm bg-slate-100 dark:bg-slate-800 px-2 py-1 rounded">
|
|
728
|
+
POST /api/public/payment/stripe/webhook
|
|
729
|
+
</code>
|
|
730
|
+
</span>
|
|
731
|
+
</div>
|
|
732
|
+
</div>
|
|
733
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
734
|
+
1. Connexion Stripe CLI
|
|
735
|
+
</p>
|
|
736
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
737
|
+
stripe login
|
|
738
|
+
</p>
|
|
739
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
740
|
+
2. Démarrez votre app en local (remplacez le port si besoin)
|
|
741
|
+
</p>
|
|
742
|
+
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
743
|
+
{`pnpm dev`}
|
|
744
|
+
</Snippet>
|
|
745
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
746
|
+
3. Écoutez les événements et transférez-les vers l'endpoint local
|
|
747
|
+
</p>
|
|
748
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
749
|
+
stripe listen --forward-to
|
|
750
|
+
http://localhost:3000/api/public/payment/stripe/webhook
|
|
751
|
+
</p>
|
|
752
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
753
|
+
La commande affiche un secret de signature sous la forme{" "}
|
|
754
|
+
<code className="text-sm bg-slate-100 dark:bg-slate-800 px-2 py-1 rounded">
|
|
755
|
+
whsec_...
|
|
756
|
+
</code>
|
|
757
|
+
.
|
|
758
|
+
</p>
|
|
759
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
760
|
+
Exportez-le dans votre terminal pour la vérification des signatures:
|
|
761
|
+
</p>
|
|
762
|
+
<Snippet symbol="" hideSymbol className="text-sm mb-2">
|
|
763
|
+
{`export STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxx`}
|
|
764
|
+
</Snippet>
|
|
765
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
766
|
+
4. Déclencher des événements de test (optionnel)
|
|
767
|
+
</p>
|
|
768
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
769
|
+
# Paiement réussi
|
|
770
|
+
</p>
|
|
771
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
772
|
+
stripe trigger payment_intent.succeeded
|
|
773
|
+
</p>
|
|
774
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
775
|
+
# Checkout complété
|
|
776
|
+
</p>
|
|
777
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
778
|
+
stripe trigger checkout.session.completed
|
|
779
|
+
</p>
|
|
780
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
781
|
+
# Abonnement (création/mise à jour/suppression)
|
|
782
|
+
</p>
|
|
783
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
784
|
+
stripe trigger customer.subscription.created
|
|
785
|
+
</p>
|
|
786
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
787
|
+
stripe trigger customer.subscription.updated
|
|
788
|
+
</p>
|
|
789
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
790
|
+
stripe trigger customer.subscription.deleted
|
|
791
|
+
</p>
|
|
792
|
+
<p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
|
|
793
|
+
Notes:
|
|
794
|
+
</p>
|
|
795
|
+
<div className="space-y-2">
|
|
796
|
+
<div className="flex items-start gap-2">
|
|
797
|
+
<span className="text-green-600">✅</span>
|
|
798
|
+
<span>
|
|
799
|
+
L'endpoint est exposé dans les apps: voir{" "}
|
|
800
|
+
<a
|
|
801
|
+
href="apps/lastbrain/app/api/public/payment/stripe/webhook/route.ts"
|
|
802
|
+
className="text-blue-600 hover:underline"
|
|
803
|
+
target="_blank"
|
|
804
|
+
rel="noopener noreferrer"
|
|
805
|
+
>
|
|
806
|
+
apps/lastbrain/app/api/public/payment/stripe/webhook/route.ts
|
|
807
|
+
</a>{" "}
|
|
808
|
+
et{" "}
|
|
809
|
+
<a
|
|
810
|
+
href="apps/recipe/app/api/public/payment/stripe/webhook/route.ts"
|
|
811
|
+
className="text-blue-600 hover:underline"
|
|
812
|
+
target="_blank"
|
|
813
|
+
rel="noopener noreferrer"
|
|
814
|
+
>
|
|
815
|
+
apps/recipe/app/api/public/payment/stripe/webhook/route.ts
|
|
816
|
+
</a>
|
|
817
|
+
.
|
|
818
|
+
</span>
|
|
819
|
+
</div>
|
|
820
|
+
<div className="flex items-start gap-2">
|
|
821
|
+
<span className="text-green-600">✅</span>
|
|
822
|
+
<span>
|
|
823
|
+
En production (Vercel), créez un endpoint de webhook dans Stripe
|
|
824
|
+
et renseignez{" "}
|
|
825
|
+
<code className="text-sm bg-slate-100 dark:bg-slate-800 px-2 py-1 rounded">
|
|
826
|
+
STRIPE_WEBHOOK_SECRET
|
|
827
|
+
</code>{" "}
|
|
828
|
+
dans les variables d'environnement du projet.
|
|
829
|
+
</span>
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
487
832
|
</CardBody>
|
|
488
833
|
</Card>
|
|
489
834
|
|
|
@@ -1012,7 +1357,7 @@ const proxyUrl = storagePathToProxyUrl("avatar/user_128_123456.webp");
|
|
|
1012
1357
|
},
|
|
1013
1358
|
{
|
|
1014
1359
|
schema: "public",
|
|
1015
|
-
table: "
|
|
1360
|
+
table: "user_profil",
|
|
1016
1361
|
event: "*",
|
|
1017
1362
|
filter: "owner_id=eq.\${USER_ID}",
|
|
1018
1363
|
broadcast: "user_profile_updated",
|
|
@@ -1171,7 +1516,7 @@ function MonComposant() {
|
|
|
1171
1516
|
<Card id="section-module-docs" className="scroll-mt-32">
|
|
1172
1517
|
<CardHeader>
|
|
1173
1518
|
<h2 className="text-2xl font-semibold flex items-center gap-2">
|
|
1174
|
-
<
|
|
1519
|
+
<FileText size={24} />
|
|
1175
1520
|
Documenter ses modules
|
|
1176
1521
|
</h2>
|
|
1177
1522
|
</CardHeader>
|
|
@@ -1635,6 +1980,29 @@ export function DocUsageCustom() {
|
|
|
1635
1980
|
</a>
|
|
1636
1981
|
</CardBody>
|
|
1637
1982
|
</Card>
|
|
1983
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1984
|
+
<CardBody className="space-y-3">
|
|
1985
|
+
<div className="flex items-start justify-between">
|
|
1986
|
+
<h3 className="text-lg font-semibold">Audit Pro</h3>
|
|
1987
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
1988
|
+
PRO
|
|
1989
|
+
</span>
|
|
1990
|
+
</div>
|
|
1991
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
1992
|
+
Module LastBrain
|
|
1993
|
+
</p>
|
|
1994
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1995
|
+
<strong>Pages:</strong> 3 publique(s)
|
|
1996
|
+
</p>
|
|
1997
|
+
|
|
1998
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
1999
|
+
{`pnpm lastbrain add-module audit-pro`}
|
|
2000
|
+
</Snippet>
|
|
2001
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
2002
|
+
🔒 Documentation privée
|
|
2003
|
+
</span>
|
|
2004
|
+
</CardBody>
|
|
2005
|
+
</Card>
|
|
1638
2006
|
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-blue-500">
|
|
1639
2007
|
<CardBody className="space-y-3">
|
|
1640
2008
|
<div className="flex items-start justify-between">
|
|
@@ -1647,7 +2015,7 @@ export function DocUsageCustom() {
|
|
|
1647
2015
|
Module LastBrain
|
|
1648
2016
|
</p>
|
|
1649
2017
|
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1650
|
-
<strong>Pages:</strong>
|
|
2018
|
+
<strong>Pages:</strong> 5 publique(s), 3 auth, 2 admin
|
|
1651
2019
|
</p>
|
|
1652
2020
|
|
|
1653
2021
|
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
@@ -1675,7 +2043,7 @@ export function DocUsageCustom() {
|
|
|
1675
2043
|
Module LastBrain
|
|
1676
2044
|
</p>
|
|
1677
2045
|
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1678
|
-
<strong>Pages:</strong> 3 auth,
|
|
2046
|
+
<strong>Pages:</strong> 1 publique(s), 3 auth, 5 admin
|
|
1679
2047
|
</p>
|
|
1680
2048
|
|
|
1681
2049
|
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
@@ -1709,6 +2077,29 @@ export function DocUsageCustom() {
|
|
|
1709
2077
|
</span>
|
|
1710
2078
|
</CardBody>
|
|
1711
2079
|
</Card>
|
|
2080
|
+
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
2081
|
+
<CardBody className="space-y-3">
|
|
2082
|
+
<div className="flex items-start justify-between">
|
|
2083
|
+
<h3 className="text-lg font-semibold">Contact Pro</h3>
|
|
2084
|
+
<span className="text-xs bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 px-2 py-1 rounded">
|
|
2085
|
+
PRO
|
|
2086
|
+
</span>
|
|
2087
|
+
</div>
|
|
2088
|
+
<p className="text-sm text-slate-600 dark:text-slate-400">
|
|
2089
|
+
Module LastBrain
|
|
2090
|
+
</p>
|
|
2091
|
+
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
2092
|
+
<strong>Pages:</strong> 1 publique(s), 2 admin
|
|
2093
|
+
</p>
|
|
2094
|
+
|
|
2095
|
+
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
2096
|
+
{`pnpm lastbrain add-module contact-pro`}
|
|
2097
|
+
</Snippet>
|
|
2098
|
+
<span className="text-xs text-slate-500 dark:text-slate-400 inline-flex items-center gap-1">
|
|
2099
|
+
🔒 Documentation privée
|
|
2100
|
+
</span>
|
|
2101
|
+
</CardBody>
|
|
2102
|
+
</Card>
|
|
1712
2103
|
<Card className="hover:shadow-lg transition-shadow border-l-4 border-l-purple-500">
|
|
1713
2104
|
<CardBody className="space-y-3">
|
|
1714
2105
|
<div className="flex items-start justify-between">
|
|
@@ -1861,7 +2252,7 @@ export function DocUsageCustom() {
|
|
|
1861
2252
|
Module LastBrain
|
|
1862
2253
|
</p>
|
|
1863
2254
|
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1864
|
-
<strong>Pages:</strong> 2 auth
|
|
2255
|
+
<strong>Pages:</strong> 1 publique(s), 2 auth
|
|
1865
2256
|
</p>
|
|
1866
2257
|
|
|
1867
2258
|
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
@@ -1889,7 +2280,7 @@ export function DocUsageCustom() {
|
|
|
1889
2280
|
Module LastBrain
|
|
1890
2281
|
</p>
|
|
1891
2282
|
<p className="text-xs text-slate-500 dark:text-slate-500">
|
|
1892
|
-
<strong>Pages:</strong>
|
|
2283
|
+
<strong>Pages:</strong> 5 auth
|
|
1893
2284
|
</p>
|
|
1894
2285
|
|
|
1895
2286
|
<Snippet symbol="💻" hideSymbol className="text-sm">
|
|
@@ -128,11 +128,16 @@ export function DocPage({ modules = [], defaultContent }: DocPageProps) {
|
|
|
128
128
|
"default",
|
|
129
129
|
"section-welcome",
|
|
130
130
|
"section-quickstart",
|
|
131
|
+
"section-development",
|
|
132
|
+
"section-admin",
|
|
131
133
|
"section-architecture",
|
|
132
134
|
"section-create-module",
|
|
135
|
+
"section-routes",
|
|
136
|
+
"section-workflow",
|
|
133
137
|
"section-database",
|
|
134
138
|
"section-storage",
|
|
135
139
|
"section-realtime",
|
|
140
|
+
"section-i18n",
|
|
136
141
|
"section-ui",
|
|
137
142
|
"section-module-docs",
|
|
138
143
|
"section-links",
|
|
@@ -215,6 +220,13 @@ export function DocPage({ modules = [], defaultContent }: DocPageProps) {
|
|
|
215
220
|
icon: Rocket,
|
|
216
221
|
color: "default" as const,
|
|
217
222
|
},
|
|
223
|
+
{
|
|
224
|
+
id: "section-development",
|
|
225
|
+
name: "Développement",
|
|
226
|
+
description: "",
|
|
227
|
+
icon: Rocket,
|
|
228
|
+
color: "default" as const,
|
|
229
|
+
},
|
|
218
230
|
{
|
|
219
231
|
id: "section-architecture",
|
|
220
232
|
name: "Architecture",
|
|
@@ -222,6 +234,13 @@ export function DocPage({ modules = [], defaultContent }: DocPageProps) {
|
|
|
222
234
|
icon: Building2,
|
|
223
235
|
color: "default" as const,
|
|
224
236
|
},
|
|
237
|
+
{
|
|
238
|
+
id: "section-admin",
|
|
239
|
+
name: "Administration",
|
|
240
|
+
description: "",
|
|
241
|
+
icon: Building2,
|
|
242
|
+
color: "default" as const,
|
|
243
|
+
},
|
|
225
244
|
{
|
|
226
245
|
id: "section-create-module",
|
|
227
246
|
name: "Créer un module",
|
|
@@ -229,6 +248,20 @@ export function DocPage({ modules = [], defaultContent }: DocPageProps) {
|
|
|
229
248
|
icon: Package,
|
|
230
249
|
color: "default" as const,
|
|
231
250
|
},
|
|
251
|
+
{
|
|
252
|
+
id: "section-routes",
|
|
253
|
+
name: "Routes & API",
|
|
254
|
+
description: "",
|
|
255
|
+
icon: Link,
|
|
256
|
+
color: "default" as const,
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
id: "section-workflow",
|
|
260
|
+
name: "Workflow",
|
|
261
|
+
description: "",
|
|
262
|
+
icon: RotateCcw,
|
|
263
|
+
color: "default" as const,
|
|
264
|
+
},
|
|
232
265
|
{
|
|
233
266
|
id: "section-database",
|
|
234
267
|
name: "Base de données",
|
|
@@ -257,6 +290,13 @@ export function DocPage({ modules = [], defaultContent }: DocPageProps) {
|
|
|
257
290
|
icon: Palette,
|
|
258
291
|
color: "default" as const,
|
|
259
292
|
},
|
|
293
|
+
{
|
|
294
|
+
id: "section-i18n",
|
|
295
|
+
name: "Internationalisation",
|
|
296
|
+
description: "",
|
|
297
|
+
icon: BookOpen,
|
|
298
|
+
color: "default" as const,
|
|
299
|
+
},
|
|
260
300
|
{
|
|
261
301
|
id: "section-module-docs",
|
|
262
302
|
name: "Doc des modules",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
// GENERATED BY LASTBRAIN TEMPLATE (Module Guide)
|
|
2
|
-
import
|
|
3
|
-
import { Card,
|
|
3
|
+
import { Code } from "@lastbrain/ui";
|
|
4
|
+
import { Card, Divider, Chip } from "@lastbrain/ui/ui-server";
|
|
4
5
|
|
|
5
6
|
export function ModuleGuidePage() {
|
|
6
7
|
return (
|