@deveye/types 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +23 -0
- package/package.json +68 -0
- package/src/domain/audience.ts +549 -0
- package/src/domain/backup.ts +355 -0
- package/src/domain/credential.ts +55 -0
- package/src/domain/database.ts +467 -0
- package/src/domain/deploy.ts +231 -0
- package/src/domain/device.ts +172 -0
- package/src/domain/deviceFiles.ts +84 -0
- package/src/domain/deviceLogs.ts +82 -0
- package/src/domain/featureRegistry.ts +392 -0
- package/src/domain/finance.ts +477 -0
- package/src/domain/git.ts +419 -0
- package/src/domain/home.ts +314 -0
- package/src/domain/live.ts +272 -0
- package/src/domain/logs.ts +117 -0
- package/src/domain/mail.ts +394 -0
- package/src/domain/metrics.ts +127 -0
- package/src/domain/note.ts +202 -0
- package/src/domain/notifications.ts +268 -0
- package/src/domain/packages.ts +35 -0
- package/src/domain/password.ts +36 -0
- package/src/domain/presence.ts +21 -0
- package/src/domain/project.ts +168 -0
- package/src/domain/projectBoard.ts +130 -0
- package/src/domain/projectChat.ts +46 -0
- package/src/domain/projectHistory.ts +82 -0
- package/src/domain/projectLink.ts +87 -0
- package/src/domain/projectPlan.ts +68 -0
- package/src/domain/report.ts +492 -0
- package/src/domain/role.ts +8 -0
- package/src/domain/secrecy.ts +66 -0
- package/src/domain/sentinel.ts +623 -0
- package/src/domain/sharing.ts +186 -0
- package/src/domain/syncProtocol.ts +116 -0
- package/src/domain/twoFactor.ts +40 -0
- package/src/domain/uptime.ts +216 -0
- package/src/domain/user.ts +141 -0
- package/src/domain/workspace.ts +56 -0
- package/src/domain/workspaceRole.ts +251 -0
- package/src/features/admin.ts +112 -0
- package/src/features/audience.ts +275 -0
- package/src/features/backup.ts +230 -0
- package/src/features/database.ts +461 -0
- package/src/features/deploy.ts +245 -0
- package/src/features/device.ts +292 -0
- package/src/features/deviceFiles.ts +83 -0
- package/src/features/deviceLogs.ts +36 -0
- package/src/features/deviceTerminal.ts +57 -0
- package/src/features/finance.ts +360 -0
- package/src/features/git.ts +368 -0
- package/src/features/home.ts +32 -0
- package/src/features/live.ts +113 -0
- package/src/features/logs.ts +86 -0
- package/src/features/mail.ts +374 -0
- package/src/features/metrics.ts +185 -0
- package/src/features/note.ts +189 -0
- package/src/features/notify.ts +164 -0
- package/src/features/password.ts +67 -0
- package/src/features/project.ts +709 -0
- package/src/features/registry.ts +103 -0
- package/src/features/secrecy.ts +120 -0
- package/src/features/sentinel.ts +233 -0
- package/src/features/sharing.ts +79 -0
- package/src/features/twoFactor.ts +47 -0
- package/src/features/uptime.ts +186 -0
- package/src/features/user.ts +91 -0
- package/src/features/workspace.ts +200 -0
- package/src/http/auth.ts +94 -0
- package/src/http/device.ts +222 -0
- package/src/http/status.ts +45 -0
- package/src/index.ts +1700 -0
- package/src/protocol/agent.ts +1171 -0
- package/src/protocol/envelope.ts +46 -0
- package/src/protocol/error.ts +27 -0
- package/src/protocol/result.ts +17 -0
- package/src/protocol/version.ts +6 -0
- package/src/sdk/client-ambient.d.ts +238 -0
- package/src/sdk/client.ts +66 -0
- package/src/sdk/ids.ts +25 -0
- package/src/sdk/index.ts +11 -0
- package/src/sdk/manifest.ts +326 -0
- package/src/sdk/providers.ts +48 -0
- package/src/sdk/server.ts +378 -0
- package/src/sdk/testing.ts +179 -0
- package/src/utils/version.ts +28 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { userColorSchema } from './user';
|
|
3
|
+
import { projectStatusSchema } from './project';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Les dépôts git d'un espace, et le cache local de ce qu'on y a lu.
|
|
7
|
+
*
|
|
8
|
+
* **Un dépôt appartient à l'espace, pas à un projet.** C'est le renversement qui
|
|
9
|
+
* fonde cette feature : le même dépôt sert souvent plusieurs projets, et le
|
|
10
|
+
* modéliser comme une propriété de l'un d'eux le faisait synchroniser deux fois,
|
|
11
|
+
* dans deux caches, sous deux quotas. Un projet n'en garde donc qu'une
|
|
12
|
+
* **liaison** (`project_repo_links`), et délier n'efface jamais le dépôt.
|
|
13
|
+
*
|
|
14
|
+
* **Cache, et non source de vérité** : le dépôt distant fait foi. Ce qui est
|
|
15
|
+
* stocké ici sert à afficher un graphe et un historique sans rappeler l'API à
|
|
16
|
+
* chaque ouverture — et à respecter le quota du fournisseur.
|
|
17
|
+
*
|
|
18
|
+
* Découpage clair / chiffré : `sha`, `committed_at`, `author_ref` et les
|
|
19
|
+
* horodatages restent en clair (c'est ce qui rend le graphe calculable en SQL),
|
|
20
|
+
* les messages, noms de branches et identités d'auteur sont chiffrés.
|
|
21
|
+
*
|
|
22
|
+
* **Toujours à l'étage ouvert**, quel que soit le tier des projets qui s'y
|
|
23
|
+
* rattachent : un dépôt est d'espace, il ne peut pas suivre le palier de
|
|
24
|
+
* confidentialité de l'un d'eux, et le service de fond doit le lire sans
|
|
25
|
+
* session. Corollaire : un projet confidentiel n'a pas de dépôt du tout.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export const GIT_REPO_OWNER_MAX_LENGTH = 100;
|
|
29
|
+
export const GIT_REPO_NAME_MAX_LENGTH = 100;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Fournisseurs de dépôts.
|
|
33
|
+
*
|
|
34
|
+
* Un seul, et l'énumération est là pour que le second n'ait pas à réécrire le
|
|
35
|
+
* contrat. Elle couvrait aussi `dokploy` du temps où les jetons des deux
|
|
36
|
+
* intégrations vivaient dans ce module : un dépôt Dokploy n'a jamais existé,
|
|
37
|
+
* c'était le fournisseur d'un **jeton**, notion qui a désormais son propre
|
|
38
|
+
* domaine (`domain/credential.ts`).
|
|
39
|
+
*/
|
|
40
|
+
export const gitProviderSchema = z.enum(['github']);
|
|
41
|
+
export type GitProvider = z.infer<typeof gitProviderSchema>;
|
|
42
|
+
|
|
43
|
+
/** Un dépôt de l'espace, et l'état de sa dernière synchronisation. */
|
|
44
|
+
export const gitRepoSchema = z.object({
|
|
45
|
+
id: z.number().int().positive(),
|
|
46
|
+
provider: gitProviderSchema,
|
|
47
|
+
owner: z.string().max(GIT_REPO_OWNER_MAX_LENGTH),
|
|
48
|
+
repo: z.string().max(GIT_REPO_NAME_MAX_LENGTH),
|
|
49
|
+
credentialId: z.number().int().positive().nullable(),
|
|
50
|
+
enabled: z.boolean(),
|
|
51
|
+
defaultBranch: z.string().nullable(),
|
|
52
|
+
lastSyncAt: z.number().int().nullable(),
|
|
53
|
+
/** Message du dernier échec, ou `null` après un succès. */
|
|
54
|
+
lastSyncError: z.string().nullable(),
|
|
55
|
+
/**
|
|
56
|
+
* Combien de projets s'en servent.
|
|
57
|
+
*
|
|
58
|
+
* En clair dans la liste plutôt que sur demande : c'est l'information qui
|
|
59
|
+
* dit si supprimer ce dépôt casse quelque chose, et elle doit se lire avant
|
|
60
|
+
* de cliquer, pas après.
|
|
61
|
+
*/
|
|
62
|
+
projectCount: z.number().int().nonnegative(),
|
|
63
|
+
/**
|
|
64
|
+
* Cet élément vient d'un **autre espace**, qui le projette ici.
|
|
65
|
+
*
|
|
66
|
+
* L'écran le signale d'une pastille : sans elle, rien ne distingue une
|
|
67
|
+
* ligne locale d'une fenêtre sur l'espace voisin — et les gestes réservés
|
|
68
|
+
* au domicile (supprimer, re-partager) sembleraient cassés au lieu de
|
|
69
|
+
* s'expliquer.
|
|
70
|
+
*/
|
|
71
|
+
foreign: z.boolean(),
|
|
72
|
+
created: z.number().int()
|
|
73
|
+
});
|
|
74
|
+
export type GitRepo = z.infer<typeof gitRepoSchema>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Un dépôt proposé au choix, lu **chez le fournisseur au moment où on le
|
|
78
|
+
* demande** — comme le diff d'un commit, et pour la même raison : c'est une
|
|
79
|
+
* liste qu'on regarde une fois, au moment d'ajouter un dépôt, et qui serait
|
|
80
|
+
* périmée avant d'être relue si on la mettait en cache.
|
|
81
|
+
*/
|
|
82
|
+
export const gitRepoCandidateSchema = z.object({
|
|
83
|
+
name: z.string(),
|
|
84
|
+
/** Un dépôt privé n'est visible qu'avec un jeton : le dire évite « où est-il ? ». */
|
|
85
|
+
private: z.boolean(),
|
|
86
|
+
archived: z.boolean(),
|
|
87
|
+
description: z.string(),
|
|
88
|
+
pushedAt: z.number().int().nullable(),
|
|
89
|
+
/** Déjà présent dans l'espace : on le signale plutôt que de le masquer. */
|
|
90
|
+
known: z.boolean()
|
|
91
|
+
});
|
|
92
|
+
export type GitRepoCandidate = z.infer<typeof gitRepoCandidateSchema>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Un projet qui utilise ce dépôt.
|
|
96
|
+
*
|
|
97
|
+
* Ne remonte que des projets à l'étage ouvert — un projet confidentiel ne peut
|
|
98
|
+
* pas être lié, donc le titre est toujours lisible sans session.
|
|
99
|
+
*/
|
|
100
|
+
export const gitRepoUsageSchema = z.object({
|
|
101
|
+
projectId: z.number().int().positive(),
|
|
102
|
+
title: z.string(),
|
|
103
|
+
status: projectStatusSchema
|
|
104
|
+
});
|
|
105
|
+
export type GitRepoUsage = z.infer<typeof gitRepoUsageSchema>;
|
|
106
|
+
|
|
107
|
+
export const gitBranchSchema = z.object({
|
|
108
|
+
id: z.number().int().positive(),
|
|
109
|
+
name: z.string(),
|
|
110
|
+
headSha: z.string().nullable(),
|
|
111
|
+
isDefault: z.boolean(),
|
|
112
|
+
updatedAt: z.number().int().nullable(),
|
|
113
|
+
/**
|
|
114
|
+
* Commits d'avance et de retard sur la branche par défaut.
|
|
115
|
+
*
|
|
116
|
+
* `null` — et non zéro — quand la comparaison n'a pas eu lieu : la branche
|
|
117
|
+
* par défaut elle-même, ou un dépôt jamais comparé. Zéro veut dire « à
|
|
118
|
+
* jour », ce qui est une affirmation ; l'absence n'en est pas une.
|
|
119
|
+
*/
|
|
120
|
+
aheadCount: z.number().int().nonnegative().nullable(),
|
|
121
|
+
behindCount: z.number().int().nonnegative().nullable()
|
|
122
|
+
});
|
|
123
|
+
export type GitBranch = z.infer<typeof gitBranchSchema>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* L'issue d'une pull request.
|
|
127
|
+
*
|
|
128
|
+
* GitHub ne distingue pas « fusionnée » de « fermée » dans son champ `state` —
|
|
129
|
+
* une PR fusionnée y est simplement `closed`. Or ce sont deux fins opposées :
|
|
130
|
+
* on les sépare ici, et `draft` est promu au rang d'état parce que c'est ainsi
|
|
131
|
+
* qu'on le lit dans une liste.
|
|
132
|
+
*/
|
|
133
|
+
export const gitPullStateSchema = z.enum(['open', 'draft', 'merged', 'closed']);
|
|
134
|
+
export type GitPullState = z.infer<typeof gitPullStateSchema>;
|
|
135
|
+
|
|
136
|
+
export const gitPullRequestSchema = z.object({
|
|
137
|
+
id: z.number().int().positive(),
|
|
138
|
+
/** Numéro public de la PR : son identité stable chez le fournisseur. */
|
|
139
|
+
number: z.number().int().positive(),
|
|
140
|
+
state: gitPullStateSchema,
|
|
141
|
+
title: z.string(),
|
|
142
|
+
body: z.string(),
|
|
143
|
+
authorName: z.string(),
|
|
144
|
+
headBranch: z.string(),
|
|
145
|
+
baseBranch: z.string(),
|
|
146
|
+
url: z.string().nullable(),
|
|
147
|
+
createdAt: z.number().int(),
|
|
148
|
+
updatedAt: z.number().int(),
|
|
149
|
+
mergedAt: z.number().int().nullable(),
|
|
150
|
+
closedAt: z.number().int().nullable()
|
|
151
|
+
});
|
|
152
|
+
export type GitPullRequest = z.infer<typeof gitPullRequestSchema>;
|
|
153
|
+
|
|
154
|
+
/** L'état d'un fichier dans un commit, tel que le fournisseur le qualifie. */
|
|
155
|
+
export const gitDiffStatusSchema = z
|
|
156
|
+
.enum(['added', 'modified', 'removed', 'renamed', 'copied', 'changed', 'unchanged'])
|
|
157
|
+
// Un fournisseur d'une autre version peut inventer un état : il dégrade
|
|
158
|
+
// l'affichage, il ne fait pas échouer la lecture d'un commit.
|
|
159
|
+
.catch('modified');
|
|
160
|
+
export type GitDiffStatus = z.infer<typeof gitDiffStatusSchema>;
|
|
161
|
+
|
|
162
|
+
export const gitDiffFileSchema = z.object({
|
|
163
|
+
filename: z.string(),
|
|
164
|
+
/** Ancien chemin d'un fichier renommé, sinon `null`. */
|
|
165
|
+
previousFilename: z.string().nullable(),
|
|
166
|
+
status: gitDiffStatusSchema,
|
|
167
|
+
additions: z.number().int().nonnegative(),
|
|
168
|
+
deletions: z.number().int().nonnegative(),
|
|
169
|
+
/**
|
|
170
|
+
* Le diff unifié du fichier, tel que le fournisseur le rend.
|
|
171
|
+
*
|
|
172
|
+
* `null` pour un binaire, ou quand le fournisseur l'a tronqué parce qu'il
|
|
173
|
+
* était trop gros — deux cas où il n'y a rien à colorer et où il vaut mieux
|
|
174
|
+
* le dire que d'afficher un vide inexpliqué.
|
|
175
|
+
*/
|
|
176
|
+
patch: z.string().nullable()
|
|
177
|
+
});
|
|
178
|
+
export type GitDiffFile = z.infer<typeof gitDiffFileSchema>;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Le détail d'un commit : son diff.
|
|
182
|
+
*
|
|
183
|
+
* **Jamais mis en cache**, à la différence du reste de l'intégration git. Un
|
|
184
|
+
* diff pèse des ordres de grandeur de plus que la ligne qui le résume, on ne le
|
|
185
|
+
* regarde qu'une fois, et le stocker chiffré ferait grossir la base sans
|
|
186
|
+
* contrepartie. C'est donc la seule lecture du module qui interroge le
|
|
187
|
+
* fournisseur au moment où on la demande.
|
|
188
|
+
*/
|
|
189
|
+
export const gitCommitDetailSchema = z.object({
|
|
190
|
+
sha: z.string(),
|
|
191
|
+
message: z.string(),
|
|
192
|
+
authorName: z.string(),
|
|
193
|
+
committedAt: z.number().int(),
|
|
194
|
+
url: z.string().nullable(),
|
|
195
|
+
additions: z.number().int().nonnegative(),
|
|
196
|
+
deletions: z.number().int().nonnegative(),
|
|
197
|
+
files: z.array(gitDiffFileSchema),
|
|
198
|
+
/** `true` quand le fournisseur a écrêté la liste (au-delà de 300 fichiers). */
|
|
199
|
+
truncated: z.boolean()
|
|
200
|
+
});
|
|
201
|
+
export type GitCommitDetail = z.infer<typeof gitCommitDetailSchema>;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* L'avancement d'une synchronisation en cours.
|
|
205
|
+
*
|
|
206
|
+
* Volontairement compté **en étapes** et non en objets : on ignore combien de
|
|
207
|
+
* commits le distant va rendre avant de les avoir lus. Une barre qui progresse
|
|
208
|
+
* par étapes nommées dit la vérité ; une barre calée sur un total deviné
|
|
209
|
+
* mentirait.
|
|
210
|
+
*/
|
|
211
|
+
/**
|
|
212
|
+
* L'avancement d'un dépôt dans la liste : le même, plus son identité.
|
|
213
|
+
*
|
|
214
|
+
* Rendu pour **tous** les dépôts en cours d'un coup, de sorte que la liste
|
|
215
|
+
* puisse afficher une bande de progression par carte sans interroger chaque
|
|
216
|
+
* dépôt séparément.
|
|
217
|
+
*/
|
|
218
|
+
export const gitRepoSyncStateSchema = z.object({
|
|
219
|
+
repoId: z.number().int().positive(),
|
|
220
|
+
phase: z.string(),
|
|
221
|
+
step: z.number().int().nonnegative(),
|
|
222
|
+
stepCount: z.number().int().positive()
|
|
223
|
+
});
|
|
224
|
+
export type GitRepoSyncState = z.infer<typeof gitRepoSyncStateSchema>;
|
|
225
|
+
|
|
226
|
+
export const gitSyncStatusSchema = z.object({
|
|
227
|
+
running: z.boolean(),
|
|
228
|
+
/** Libellé de l'étape en cours, ou `null` hors synchronisation. */
|
|
229
|
+
phase: z.string().nullable(),
|
|
230
|
+
/** Étapes achevées, et total connu d'avance. */
|
|
231
|
+
step: z.number().int().nonnegative(),
|
|
232
|
+
stepCount: z.number().int().positive(),
|
|
233
|
+
startedAt: z.number().int().nullable()
|
|
234
|
+
});
|
|
235
|
+
export type GitSyncStatus = z.infer<typeof gitSyncStatusSchema>;
|
|
236
|
+
|
|
237
|
+
export const gitCommitSchema = z.object({
|
|
238
|
+
id: z.number().int().positive(),
|
|
239
|
+
sha: z.string(),
|
|
240
|
+
message: z.string(),
|
|
241
|
+
authorName: z.string(),
|
|
242
|
+
authorRef: z.string(),
|
|
243
|
+
/** Membre de l'espace rattaché à cet auteur git, s'il l'a été. */
|
|
244
|
+
authorUserId: z.number().int().positive().nullable(),
|
|
245
|
+
url: z.string().nullable(),
|
|
246
|
+
committedAt: z.number().int(),
|
|
247
|
+
/** Plus d'un parent = une fusion. */
|
|
248
|
+
parentCount: z.number().int().nonnegative()
|
|
249
|
+
});
|
|
250
|
+
export type GitCommit = z.infer<typeof gitCommitSchema>;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Un auteur git repéré dans l'historique, et son rattachement éventuel.
|
|
254
|
+
*
|
|
255
|
+
* `color` est la couleur retenue pour le graphe : celle du membre quand il est
|
|
256
|
+
* rattaché, sinon une teinte déterministe dérivée de `authorRef` — de sorte
|
|
257
|
+
* qu'un même contributeur garde la même couleur d'une session à l'autre, même
|
|
258
|
+
* sans compte DevEye.
|
|
259
|
+
*/
|
|
260
|
+
export const gitCommitAuthorSchema = z.object({
|
|
261
|
+
authorRef: z.string(),
|
|
262
|
+
name: z.string(),
|
|
263
|
+
email: z.string(),
|
|
264
|
+
userId: z.number().int().positive().nullable(),
|
|
265
|
+
color: userColorSchema,
|
|
266
|
+
commitCount: z.number().int().nonnegative()
|
|
267
|
+
});
|
|
268
|
+
export type GitCommitAuthor = z.infer<typeof gitCommitAuthorSchema>;
|
|
269
|
+
|
|
270
|
+
/** Longueur des sha abrégés du graphe (voir `gitCommitPointsSchema`). */
|
|
271
|
+
export const GIT_GRAPH_SHA_LEN = 12;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Les points du graphe, en **colonnes parallèles** et non en tableau d'objets.
|
|
275
|
+
*
|
|
276
|
+
* Volontairement dépouillé — pas de message ici. Le graphe en affiche des
|
|
277
|
+
* dizaines de milliers ; les faire voyager avec leur texte chiffré coûterait
|
|
278
|
+
* autant de déchiffrements pour un rendu qui ne montre qu'un point.
|
|
279
|
+
*
|
|
280
|
+
* La forme colonnaire n'est pas de la coquetterie : à 20 000 commits, un tableau
|
|
281
|
+
* d'objets `{ sha, committedAt, authorRef }` pèse ~2 Mo de JSON (les accolades,
|
|
282
|
+
* les noms de champs et les guillemets répétés dominent la charge utile) et
|
|
283
|
+
* oblige le client à allouer 20 000 objets. Trois colonnes tombent à ~450 Ko et
|
|
284
|
+
* se parcourent sans allocation — c'est ce qui rend le dessin fluide.
|
|
285
|
+
*
|
|
286
|
+
* - `shas` : les sha abrégés **concaténés**, `GIT_GRAPH_SHA_LEN` caractères
|
|
287
|
+
* chacun. Découpés à la demande, jamais tous d'un coup. Abrégés parce que le
|
|
288
|
+
* graphe n'en fait que deux usages — l'info-bulle, qui en montre sept, et
|
|
289
|
+
* l'ouverture d'un commit, que le fournisseur accepte abrégée.
|
|
290
|
+
* - `authorIndex` : un indice dans le tableau `authors` de la réponse, plutôt
|
|
291
|
+
* que l'empreinte de 16 caractères répétée à chaque point.
|
|
292
|
+
*/
|
|
293
|
+
export const gitCommitPointsSchema = z.object({
|
|
294
|
+
/** Nombre de points transportés — la longueur commune des trois colonnes. */
|
|
295
|
+
count: z.number().int().nonnegative(),
|
|
296
|
+
shas: z.string(),
|
|
297
|
+
committedAt: z.array(z.number().int()),
|
|
298
|
+
authorIndex: z.array(z.number().int().nonnegative())
|
|
299
|
+
});
|
|
300
|
+
export type GitCommitPoints = z.infer<typeof gitCommitPointsSchema>;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Le curseur de pagination des commits.
|
|
304
|
+
*
|
|
305
|
+
* Le couple `(committedAt, id)` et non `id` seul, parce que c'est **exactement**
|
|
306
|
+
* la clé de tri de la liste. Les identifiants suivent l'ordre d'insertion, qui
|
|
307
|
+
* est celui où le fournisseur a rendu les commits — pas leur ordre
|
|
308
|
+
* chronologique. Paginer sur `id` alors qu'on trie par date sautait donc des
|
|
309
|
+
* commits et en répétait d'autres, et la seconde page était souvent presque
|
|
310
|
+
* vide : c'est ce qui donnait l'impression qu'on ne pouvait charger qu'une fois.
|
|
311
|
+
*/
|
|
312
|
+
export const gitCommitCursorSchema = z.object({
|
|
313
|
+
committedAt: z.number().int(),
|
|
314
|
+
id: z.number().int().positive()
|
|
315
|
+
});
|
|
316
|
+
export type GitCommitCursor = z.infer<typeof gitCommitCursorSchema>;
|
|
317
|
+
|
|
318
|
+
export const gitReleaseSchema = z.object({
|
|
319
|
+
id: z.number().int().positive(),
|
|
320
|
+
tag: z.string(),
|
|
321
|
+
name: z.string(),
|
|
322
|
+
body: z.string(),
|
|
323
|
+
url: z.string().nullable(),
|
|
324
|
+
publishedAt: z.number().int(),
|
|
325
|
+
isPrerelease: z.boolean()
|
|
326
|
+
});
|
|
327
|
+
export type GitRelease = z.infer<typeof gitReleaseSchema>;
|
|
328
|
+
|
|
329
|
+
/** Ligne SQL (serveur uniquement). */
|
|
330
|
+
export interface GitRepoRow {
|
|
331
|
+
id: number;
|
|
332
|
+
workspace_id: number;
|
|
333
|
+
credential_id: number | null;
|
|
334
|
+
provider: string;
|
|
335
|
+
/** Condensé de `owner/repo` en minuscules : porte l'unicité dans l'espace. */
|
|
336
|
+
slug_ref: string;
|
|
337
|
+
enabled: number;
|
|
338
|
+
default_branch: string | null;
|
|
339
|
+
last_sync_at: number | null;
|
|
340
|
+
last_sync_error: string | null;
|
|
341
|
+
sync_state: string | null;
|
|
342
|
+
/** Rang dans la liste, entièrement défini par l'utilisateur (`git.repoReorder`). */
|
|
343
|
+
sort_order: number;
|
|
344
|
+
content: string;
|
|
345
|
+
created: number;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/** Ligne SQL (serveur uniquement) : la liaison projet → dépôt. */
|
|
349
|
+
export interface ProjectRepoLinkRow {
|
|
350
|
+
project_id: number;
|
|
351
|
+
workspace_id: number;
|
|
352
|
+
repo_id: number;
|
|
353
|
+
created: number;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/** Ligne SQL (serveur uniquement). */
|
|
357
|
+
export interface GitCommitRow {
|
|
358
|
+
id: number;
|
|
359
|
+
repo_id: number;
|
|
360
|
+
workspace_id: number;
|
|
361
|
+
sha: string;
|
|
362
|
+
committed_at: number;
|
|
363
|
+
author_ref: string;
|
|
364
|
+
parents: string | null;
|
|
365
|
+
content: string;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/** Ligne SQL (serveur uniquement). */
|
|
369
|
+
export interface GitCommitAuthorRow {
|
|
370
|
+
id: number;
|
|
371
|
+
repo_id: number;
|
|
372
|
+
author_ref: string;
|
|
373
|
+
workspace_id: number;
|
|
374
|
+
user_id: number | null;
|
|
375
|
+
content: string;
|
|
376
|
+
created: number;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/** Ligne SQL (serveur uniquement). */
|
|
380
|
+
export interface GitBranchRow {
|
|
381
|
+
id: number;
|
|
382
|
+
repo_id: number;
|
|
383
|
+
workspace_id: number;
|
|
384
|
+
name_ref: string;
|
|
385
|
+
head_sha: string | null;
|
|
386
|
+
ahead_count: number | null;
|
|
387
|
+
behind_count: number | null;
|
|
388
|
+
/** `base..tête` au moment du calcul : dit si les compteurs valent encore. */
|
|
389
|
+
compared_sha: string | null;
|
|
390
|
+
is_default: number;
|
|
391
|
+
updated_at: number | null;
|
|
392
|
+
content: string;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/** Ligne SQL (serveur uniquement). */
|
|
396
|
+
export interface GitPullRequestRow {
|
|
397
|
+
id: number;
|
|
398
|
+
repo_id: number;
|
|
399
|
+
workspace_id: number;
|
|
400
|
+
number: number;
|
|
401
|
+
state: string;
|
|
402
|
+
author_ref: string | null;
|
|
403
|
+
created_at: number;
|
|
404
|
+
updated_at: number;
|
|
405
|
+
merged_at: number | null;
|
|
406
|
+
closed_at: number | null;
|
|
407
|
+
content: string;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/** Ligne SQL (serveur uniquement). */
|
|
411
|
+
export interface GitReleaseRow {
|
|
412
|
+
id: number;
|
|
413
|
+
repo_id: number;
|
|
414
|
+
workspace_id: number;
|
|
415
|
+
tag_ref: string;
|
|
416
|
+
published_at: number;
|
|
417
|
+
is_prerelease: number;
|
|
418
|
+
content: string;
|
|
419
|
+
}
|