@deveye/types 0.15.2 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/package.json +6 -6
  2. package/src/domain/device.ts +4 -29
  3. package/src/domain/featureRegistry.ts +40 -108
  4. package/src/domain/home.ts +40 -101
  5. package/src/domain/live.ts +36 -87
  6. package/src/domain/metrics.ts +10 -14
  7. package/src/domain/notifications.ts +39 -110
  8. package/src/domain/project.ts +3 -162
  9. package/src/domain/report.ts +54 -95
  10. package/src/domain/secrecy.ts +3 -5
  11. package/src/domain/sharing.ts +33 -70
  12. package/src/domain/syncProtocol.ts +5 -12
  13. package/src/domain/user.ts +8 -14
  14. package/src/domain/workspace.ts +0 -3
  15. package/src/domain/workspaceRole.ts +34 -82
  16. package/src/features/agent.ts +306 -0
  17. package/src/features/live.ts +17 -37
  18. package/src/features/notify.ts +19 -57
  19. package/src/features/registry.ts +7 -44
  20. package/src/features/secrecy.ts +4 -9
  21. package/src/features/sharing.ts +12 -26
  22. package/src/features/user.ts +6 -11
  23. package/src/features/workspace.ts +6 -11
  24. package/src/http/auth.ts +6 -13
  25. package/src/http/device.ts +13 -17
  26. package/src/http/status.ts +6 -10
  27. package/src/index.ts +29 -932
  28. package/src/protocol/agent.ts +40 -70
  29. package/src/protocol/envelope.ts +3 -10
  30. package/src/sdk/client-ambient.d.ts +228 -21
  31. package/src/sdk/client.ts +277 -17
  32. package/src/sdk/devb.ts +120 -0
  33. package/src/sdk/manifest.test.ts +0 -1
  34. package/src/sdk/manifest.ts +94 -25
  35. package/src/sdk/providers.ts +310 -5
  36. package/src/sdk/server.ts +483 -19
  37. package/src/sdk/testing.test.ts +2 -2
  38. package/src/sdk/testing.ts +302 -26
  39. package/src/utils/version.ts +5 -8
  40. package/src/domain/audience.ts +0 -549
  41. package/src/domain/backup.ts +0 -355
  42. package/src/domain/credential.ts +0 -55
  43. package/src/domain/database.ts +0 -467
  44. package/src/domain/deploy.ts +0 -231
  45. package/src/domain/finance.ts +0 -477
  46. package/src/domain/git.ts +0 -419
  47. package/src/domain/mail.ts +0 -394
  48. package/src/domain/note.ts +0 -202
  49. package/src/domain/password.ts +0 -36
  50. package/src/domain/projectBoard.ts +0 -130
  51. package/src/domain/projectChat.ts +0 -46
  52. package/src/domain/projectHistory.ts +0 -82
  53. package/src/domain/projectLink.ts +0 -87
  54. package/src/domain/projectPlan.ts +0 -68
  55. package/src/domain/sentinel.ts +0 -623
  56. package/src/domain/uptime.ts +0 -216
  57. package/src/features/audience.ts +0 -275
  58. package/src/features/backup.ts +0 -230
  59. package/src/features/database.ts +0 -461
  60. package/src/features/deploy.ts +0 -245
  61. package/src/features/device.ts +0 -292
  62. package/src/features/deviceFiles.ts +0 -83
  63. package/src/features/deviceLogs.ts +0 -36
  64. package/src/features/deviceTerminal.ts +0 -57
  65. package/src/features/finance.ts +0 -360
  66. package/src/features/git.ts +0 -368
  67. package/src/features/mail.ts +0 -374
  68. package/src/features/metrics.ts +0 -185
  69. package/src/features/note.ts +0 -189
  70. package/src/features/password.ts +0 -67
  71. package/src/features/project.ts +0 -709
  72. package/src/features/sentinel.ts +0 -233
  73. package/src/features/uptime.ts +0 -186
@@ -1,368 +0,0 @@
1
- import { z } from 'zod';
2
- import {
3
- CREDENTIAL_LABEL_MAX_LENGTH,
4
- CREDENTIAL_SECRET_MAX_LENGTH,
5
- credentialSchema
6
- } from '../domain/credential';
7
- import {
8
- GIT_REPO_NAME_MAX_LENGTH,
9
- GIT_REPO_OWNER_MAX_LENGTH,
10
- gitBranchSchema,
11
- gitCommitAuthorSchema,
12
- gitCommitDetailSchema,
13
- gitCommitCursorSchema,
14
- gitCommitPointsSchema,
15
- gitCommitSchema,
16
- gitRepoCandidateSchema,
17
- gitProviderSchema,
18
- gitPullRequestSchema,
19
- gitReleaseSchema,
20
- gitRepoSchema,
21
- gitRepoSyncStateSchema,
22
- gitRepoUsageSchema,
23
- gitSyncStatusSchema
24
- } from '../domain/git';
25
-
26
- /**
27
- * Commandes des dépôts git de l'espace.
28
- *
29
- * Préfixe unique `git.`, comme `project.` — d'où le camelCase derrière le point.
30
- *
31
- * ⚠️ Conséquence à connaître : le filet de démarrage (`MUTATION_VERB` dans
32
- * `src/features/_topics.ts`) cherche un verbe **juste après le point**. Il ne
33
- * verra donc **aucune** de ces commandes, et un `mutates` oublié ne produira
34
- * aucun avertissement. Il se relit à la main.
35
- *
36
- * L'espace visé n'apparaît dans aucune entrée : il voyage sur l'enveloppe WS et
37
- * le dispatcheur le résout, appartenance vérifiée, avant le handler.
38
- */
39
-
40
- const repoId = z.number().int().positive();
41
- const credentialId = z.number().int().positive();
42
-
43
- // ------------------------------------------------------------- identifiants
44
-
45
- /**
46
- * Les jetons **GitHub** de l'espace.
47
- *
48
- * Ils vivent ici et non dans les projets : un même jeton ouvre en général
49
- * plusieurs dépôts. Les secrets n'en sortent jamais — la sortie ne porte qu'un
50
- * `hasSecret`.
51
- *
52
- * Les clés **Dokploy** ne sont plus ici : elles ont leur propre feature
53
- * (`deploy.credential*`). Elles n'avaient atterri dans cet écran que faute d'un
54
- * module de déploiement pour les accueillir, et poser la clé qui met en
55
- * production ne relève pas du droit de lire des dépôts. La table est restée
56
- * commune ; c'est la porte, et le droit, qui se sont séparés.
57
- */
58
- export const gitCredentialList = {
59
- command: 'git.credentialList' as const,
60
- input: z.object({}),
61
- output: z.object({ credentials: z.array(credentialSchema) })
62
- };
63
-
64
- /**
65
- * Aucun `provider` ni `baseUrl` en entrée : GitHub, et son API publique. Le
66
- * fournisseur se choisissait autrefois dans un sélecteur, parce que le même
67
- * écran servait les deux — il n'y a plus rien à choisir ici.
68
- */
69
- export const gitCredentialAdd = {
70
- command: 'git.credentialAdd' as const,
71
- input: z.object({
72
- label: z.string().min(1).max(CREDENTIAL_LABEL_MAX_LENGTH),
73
- secret: z.string().min(1).max(CREDENTIAL_SECRET_MAX_LENGTH)
74
- }),
75
- output: z.object({ credential: credentialSchema })
76
- };
77
-
78
- /**
79
- * Modifie un jeton. `secret` absent = on garde celui en place ; une chaîne non
80
- * vide le remplace. Il n'y a pas de « vider » : un accès sans secret ne sert à
81
- * rien, on retire le jeton entier.
82
- */
83
- export const gitCredentialUpdate = {
84
- command: 'git.credentialUpdate' as const,
85
- input: z.object({
86
- credentialId,
87
- label: z.string().min(1).max(CREDENTIAL_LABEL_MAX_LENGTH),
88
- secret: z.string().min(1).max(CREDENTIAL_SECRET_MAX_LENGTH).optional()
89
- }),
90
- output: z.object({ credential: credentialSchema })
91
- };
92
-
93
- /**
94
- * Retire un jeton.
95
- *
96
- * Les dépôts qui s'en servaient gardent leur lien mais perdent leur accès
97
- * (`ON DELETE SET NULL`) : la synchronisation s'arrête proprement et le dit, au
98
- * lieu de disparaître avec le jeton.
99
- */
100
- export const gitCredentialRemove = {
101
- command: 'git.credentialRemove' as const,
102
- input: z.object({ credentialId }),
103
- output: z.object({ credentialId })
104
- };
105
-
106
- // -------------------------------------------------------------------- dépôts
107
-
108
- /** Le nombre de dépôts de l'espace, pour la tuile de l'accueil. */
109
- export const gitCount = {
110
- command: 'git.count' as const,
111
- input: z.object({}),
112
- output: z.object({ count: z.number().int().nonnegative() })
113
- };
114
-
115
- export const gitRepoList = {
116
- command: 'git.repoList' as const,
117
- input: z.object({}),
118
- output: z.object({ repos: z.array(gitRepoSchema) })
119
- };
120
-
121
- /** Un dépôt, avec les projets qui s'en servent — tout doit être cliquable. */
122
- export const gitRepoGet = {
123
- command: 'git.repoGet' as const,
124
- input: z.object({ repoId }),
125
- output: z.object({ repo: gitRepoSchema, usage: z.array(gitRepoUsageSchema) })
126
- };
127
-
128
- /**
129
- * Ajoute un dépôt à l'espace.
130
- *
131
- * **Idempotente** : le même `owner/repo` déjà présent rend la ligne existante
132
- * (avec son jeton mis à jour) au lieu d'un doublon. C'est ce qui permet à un
133
- * projet de « créer » un dépôt sans savoir s'il existe déjà ailleurs, et
134
- * garantit qu'un dépôt n'est jamais synchronisé deux fois.
135
- */
136
- export const gitRepoAdd = {
137
- command: 'git.repoAdd' as const,
138
- input: z.object({
139
- provider: gitProviderSchema,
140
- owner: z.string().min(1).max(GIT_REPO_OWNER_MAX_LENGTH),
141
- repo: z.string().min(1).max(GIT_REPO_NAME_MAX_LENGTH),
142
- credentialId: credentialId.nullable()
143
- }),
144
- output: z.object({ repo: gitRepoSchema })
145
- };
146
-
147
- /**
148
- * Les dépôts d'un propriétaire ou d'une organisation, chez le fournisseur.
149
- *
150
- * Interroge GitHub **au moment de la demande** — c'est, avec le diff d'un
151
- * commit, la seule commande du module dans ce cas. La liste dépend du jeton
152
- * choisi (un jeton donne accès aux dépôts privés, l'absence de jeton n'ouvre que
153
- * le public), d'où le `credentialId` en entrée : changer de jeton change le
154
- * résultat, et l'interface doit pouvoir le re-demander.
155
- */
156
- export const gitRepoCandidates = {
157
- command: 'git.repoCandidates' as const,
158
- input: z.object({
159
- owner: z.string().min(1).max(GIT_REPO_OWNER_MAX_LENGTH),
160
- credentialId: credentialId.nullable()
161
- }),
162
- output: z.object({ repos: z.array(gitRepoCandidateSchema) })
163
- };
164
-
165
- /**
166
- * Range les dépôts de l'espace : `ids` est la liste **complète** dans son ordre
167
- * final (rang le plus faible en tête).
168
- *
169
- * Rien d'autre ne positionne un dépôt — un nouveau prend le rang suivant, donc
170
- * la fin de la liste — de sorte que l'ordre appartient entièrement à
171
- * l'utilisateur, comme celui des services surveillés et des notes. Ne touche ni
172
- * au cache ni à l'état de synchronisation : ranger n'est pas configurer.
173
- */
174
- export const gitRepoReorder = {
175
- command: 'git.repoReorder' as const,
176
- input: z.object({ ids: z.array(repoId).min(1) }),
177
- output: z.object({ ids: z.array(repoId) })
178
- };
179
-
180
- /** Change le jeton d'un dépôt, ou suspend sa synchronisation. */
181
- export const gitRepoUpdate = {
182
- command: 'git.repoUpdate' as const,
183
- input: z.object({ repoId, credentialId: credentialId.nullable(), enabled: z.boolean() }),
184
- output: z.object({ repo: gitRepoSchema })
185
- };
186
-
187
- /**
188
- * Supprime un dépôt de l'espace, avec son cache et toutes ses liaisons.
189
- *
190
- * Les projets liés ne sont **pas** touchés : ils perdent leur dépôt, rien
191
- * d'autre. Le dépôt chez le fournisseur, lui, n'est évidemment jamais atteint.
192
- */
193
- export const gitRepoRemove = {
194
- command: 'git.repoRemove' as const,
195
- input: z.object({ repoId }),
196
- output: z.object({ repoId })
197
- };
198
-
199
- /**
200
- * Force une synchronisation immédiate, sans attendre le tour de
201
- * l'ordonnanceur. N'écrit rien elle-même : elle réveille le service de fond.
202
- */
203
- export const gitRepoSyncNow = {
204
- command: 'git.repoSyncNow' as const,
205
- input: z.object({ repoId }),
206
- output: z.object({ repo: gitRepoSchema })
207
- };
208
-
209
- /**
210
- * Jette le cache local du dépôt et repart de zéro.
211
- *
212
- * À distinguer de `gitRepoSyncNow`, qui reprend là où le service s'était
213
- * arrêté : ici on efface commits, branches, releases et pull requests, ainsi que
214
- * les ETags et le drapeau de backfill, de sorte que le tour suivant relise
215
- * **tout** l'historique depuis le fournisseur.
216
- *
217
- * Deux choses survivent, et ce n'est pas un oubli :
218
- *
219
- * - le **rattachement des auteurs** à des membres de l'espace, qui est du
220
- * travail fait à la main et que rien ne permettrait de reconstituer ;
221
- * - les **liaisons aux projets**, qui ne relèvent pas du cache.
222
- *
223
- * N'écrit rien elle-même côté fournisseur : elle vide, puis réveille
224
- * l'ordonnanceur.
225
- */
226
- export const gitRepoResync = {
227
- command: 'git.repoResync' as const,
228
- input: z.object({ repoId }),
229
- output: z.object({ repo: gitRepoSchema })
230
- };
231
-
232
- /**
233
- * L'avancement de la synchronisation d'un dépôt.
234
- *
235
- * Lecture pure et **très bon marché** : elle n'interroge qu'une table en
236
- * mémoire du service de fond. C'est ce qui la rend sondable pendant qu'une
237
- * synchronisation tourne, sans passer par une diffusion `live` qui ferait
238
- * re-solliciter tout l'écran à chaque étape, chez tous les membres.
239
- */
240
- export const gitRepoSyncStatus = {
241
- command: 'git.repoSyncStatus' as const,
242
- input: z.object({ repoId }),
243
- output: z.object({ status: gitSyncStatusSchema })
244
- };
245
-
246
- /**
247
- * Les synchronisations en cours dans l'espace, toutes d'un coup.
248
- *
249
- * **Aucune requête, aucun déchiffrement** : le service tient l'avancement en
250
- * mémoire le temps d'un tour. C'est ce qui rend la liste des dépôts sondable à
251
- * la seconde pour y animer une bande de progression, sans que cela coûte quoi
252
- * que ce soit — même parti pris que la barre d'une synchro mail.
253
- *
254
- * Un dépôt absent de la réponse ne synchronise pas : il n'y a pas d'entrée
255
- * « au repos », seulement celles qui tournent.
256
- */
257
- export const gitSyncStatuses = {
258
- command: 'git.syncStatuses' as const,
259
- input: z.object({}),
260
- output: z.object({ statuses: z.array(gitRepoSyncStateSchema) })
261
- };
262
-
263
- // ------------------------------------------------------------------- lecture
264
-
265
- export const gitBranchList = {
266
- command: 'git.branchList' as const,
267
- input: z.object({ repoId }),
268
- output: z.object({ branches: z.array(gitBranchSchema) })
269
- };
270
-
271
- /**
272
- * Les derniers commits, en clair, pour la liste (pas pour le graphe).
273
- *
274
- * Pagination par **curseur** `(committedAt, id)` et non par identifiant seul :
275
- * voir `gitCommitCursorSchema`. La page suivante se demande avec le couple porté
276
- * par le dernier commit reçu.
277
- */
278
- export const gitCommitList = {
279
- command: 'git.commitList' as const,
280
- input: z.object({
281
- repoId,
282
- before: gitCommitCursorSchema.optional(),
283
- limit: z.number().int().positive().max(200).optional()
284
- }),
285
- output: z.object({ commits: z.array(gitCommitSchema), hasMore: z.boolean() })
286
- };
287
-
288
- /**
289
- * Le graphe : un point par commit, du premier au dernier, avec la liste des
290
- * auteurs et leur couleur.
291
- *
292
- * Les points ne portent **pas** les messages — un graphe en affiche des
293
- * milliers, et les déchiffrer tous pour dessiner des ronds serait absurde.
294
- */
295
- export const gitCommitGraph = {
296
- command: 'git.commitGraph' as const,
297
- input: z.object({ repoId }),
298
- output: z.object({
299
- points: gitCommitPointsSchema,
300
- authors: z.array(gitCommitAuthorSchema),
301
- /** Bornes réelles de l'historique, même si les points sont écrêtés. */
302
- firstCommitAt: z.number().int().nullable(),
303
- lastCommitAt: z.number().int().nullable(),
304
- total: z.number().int().nonnegative()
305
- })
306
- };
307
-
308
- /** Rattache un auteur git à un membre de l'espace (ou l'en détache). */
309
- export const gitAuthorMap = {
310
- command: 'git.authorMap' as const,
311
- input: z.object({
312
- repoId,
313
- authorRef: z.string().min(1).max(32),
314
- userId: z.number().int().positive().nullable()
315
- }),
316
- output: z.object({ authorRef: z.string(), userId: z.number().int().positive().nullable() })
317
- };
318
-
319
- export const gitReleaseList = {
320
- command: 'git.releaseList' as const,
321
- input: z.object({ repoId }),
322
- output: z.object({ releases: z.array(gitReleaseSchema) })
323
- };
324
-
325
- export const gitPullRequestList = {
326
- command: 'git.pullRequestList' as const,
327
- input: z.object({ repoId }),
328
- output: z.object({ pullRequests: z.array(gitPullRequestSchema) })
329
- };
330
-
331
- /**
332
- * Le diff d'un commit, lu **chez le fournisseur au moment de la demande**.
333
- *
334
- * La seule commande du module qui sorte du cache local : voir
335
- * `gitCommitDetailSchema` pour la raison. Elle est donc aussi la seule dont la
336
- * latence dépend d'une API tierce — l'interface doit l'annoncer.
337
- */
338
- export const gitCommitDetail = {
339
- command: 'git.commitDetail' as const,
340
- input: z.object({ repoId, sha: z.string().min(7).max(40) }),
341
- output: z.object({ detail: gitCommitDetailSchema })
342
- };
343
-
344
- export const gitCommands = [
345
- gitCredentialList,
346
- gitCredentialAdd,
347
- gitCredentialUpdate,
348
- gitCredentialRemove,
349
- gitCount,
350
- gitRepoList,
351
- gitRepoGet,
352
- gitRepoAdd,
353
- gitRepoCandidates,
354
- gitRepoReorder,
355
- gitRepoUpdate,
356
- gitRepoRemove,
357
- gitRepoResync,
358
- gitRepoSyncNow,
359
- gitRepoSyncStatus,
360
- gitSyncStatuses,
361
- gitBranchList,
362
- gitCommitList,
363
- gitCommitGraph,
364
- gitAuthorMap,
365
- gitReleaseList,
366
- gitPullRequestList,
367
- gitCommitDetail
368
- ] as const;