@anchrd/colab-sdk 0.0.0-stage → 0.1.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.
- package/README.md +65 -2
- package/dist/actions/actions.d.ts +810 -0
- package/dist/actions/actions.js +177 -0
- package/dist/admin-mode.d.ts +2 -0
- package/dist/admin-mode.js +5 -0
- package/dist/apps/apps.d.ts +108 -0
- package/dist/apps/apps.js +73 -0
- package/dist/archive/archive.d.ts +25 -0
- package/dist/archive/archive.js +27 -0
- package/dist/auth/auth.d.ts +27 -0
- package/dist/auth/auth.js +22 -0
- package/dist/authorization/authorization.d.ts +36 -0
- package/dist/authorization/authorization.js +23 -0
- package/dist/boards/boards.d.ts +612 -0
- package/dist/boards/boards.js +289 -0
- package/dist/columns/columns.d.ts +28 -0
- package/dist/columns/columns.js +28 -0
- package/dist/connections/connections.d.ts +149 -0
- package/dist/connections/connections.js +74 -0
- package/dist/connectors/connectors.d.ts +148 -0
- package/dist/connectors/connectors.js +83 -0
- package/dist/dashboards/dashboards.d.ts +221 -0
- package/dist/dashboards/dashboards.js +520 -0
- package/dist/directory/directory.d.ts +20 -0
- package/dist/directory/directory.js +18 -0
- package/dist/documents/documents.d.ts +61 -0
- package/dist/documents/documents.js +58 -0
- package/dist/error/error.d.ts +34 -0
- package/dist/error/error.js +30 -0
- package/dist/events/events.d.ts +104 -0
- package/dist/events/events.js +69 -0
- package/dist/files/files.d.ts +60 -0
- package/dist/files/files.js +139 -0
- package/dist/functions/functions.d.ts +26 -0
- package/dist/functions/functions.js +28 -0
- package/dist/grammar/grammar.d.ts +62 -0
- package/dist/grammar/grammar.js +197 -0
- package/dist/grants/grants.d.ts +93 -0
- package/dist/grants/grants.js +66 -0
- package/dist/ids/ids.d.ts +5 -0
- package/dist/ids/ids.js +12 -0
- package/dist/instructions/instructions.d.ts +19 -0
- package/dist/instructions/instructions.js +35 -0
- package/dist/interfaces/interfaces.d.ts +41 -0
- package/dist/interfaces/interfaces.js +52 -0
- package/dist/invitations/invitations.d.ts +98 -0
- package/dist/invitations/invitations.js +58 -0
- package/dist/links/links.d.ts +76 -0
- package/dist/links/links.js +73 -0
- package/dist/list-input.d.ts +3 -0
- package/dist/list-input.js +11 -0
- package/dist/machines/machines.d.ts +69 -0
- package/dist/machines/machines.js +39 -0
- package/dist/messages/messages.d.ts +117 -0
- package/dist/messages/messages.js +77 -0
- package/dist/nodes/nodes.d.ts +673 -0
- package/dist/nodes/nodes.js +354 -0
- package/dist/operators/operators.d.ts +898 -0
- package/dist/operators/operators.js +398 -0
- package/dist/pages/pages.d.ts +89 -0
- package/dist/pages/pages.js +62 -0
- package/dist/primitives/primitives.d.ts +5 -0
- package/dist/primitives/primitives.js +19 -0
- package/dist/profile/profile.d.ts +37 -0
- package/dist/profile/profile.js +43 -0
- package/dist/roles/roles.d.ts +135 -0
- package/dist/roles/roles.js +87 -0
- package/dist/runs/runs.d.ts +244 -0
- package/dist/runs/runs.js +137 -0
- package/dist/runtime-config.d.ts +12 -0
- package/dist/runtime-config.js +18 -0
- package/dist/sdk.d.ts +45 -0
- package/dist/sdk.js +48 -0
- package/dist/secrets/secrets.d.ts +65 -0
- package/dist/secrets/secrets.js +57 -0
- package/dist/service-client/service-client.d.ts +35 -0
- package/dist/service-client/service-client.js +90 -0
- package/dist/services/services.d.ts +122 -0
- package/dist/services/services.js +89 -0
- package/dist/sso/sso.d.ts +70 -0
- package/dist/sso/sso.js +54 -0
- package/dist/tables/tables.d.ts +133 -0
- package/dist/tables/tables.js +131 -0
- package/dist/tool.d.ts +31 -0
- package/dist/tool.js +4 -0
- package/dist/user-settings/user-settings.d.ts +44 -0
- package/dist/user-settings/user-settings.js +44 -0
- package/dist/users/users.d.ts +254 -0
- package/dist/users/users.js +125 -0
- package/dist/validation/validation.d.ts +106 -0
- package/dist/validation/validation.js +41 -0
- package/dist/versions/versions.d.ts +100 -0
- package/dist/versions/versions.js +70 -0
- package/package.json +27 -4
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const RoleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
3
|
+
export declare const RightPath: z.ZodString;
|
|
4
|
+
export declare const RoleListInput: z.ZodObject<{
|
|
5
|
+
archived: z.ZodOptional<z.ZodPreprocess<z.ZodBoolean, unknown>>;
|
|
6
|
+
cursor: z.ZodOptional<z.ZodTemplateLiteral<`role_${string}`>>;
|
|
7
|
+
limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
8
|
+
}, z.core.$strict>;
|
|
9
|
+
export type RoleListInput = z.infer<typeof RoleListInput>;
|
|
10
|
+
export declare const RoleGetInput: z.ZodObject<{
|
|
11
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
12
|
+
}, z.core.$strict>;
|
|
13
|
+
export type RoleGetInput = z.infer<typeof RoleGetInput>;
|
|
14
|
+
export declare const RoleCreateInput: z.ZodObject<{
|
|
15
|
+
name: z.ZodString;
|
|
16
|
+
description: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strict>;
|
|
18
|
+
export type RoleCreateInput = z.infer<typeof RoleCreateInput>;
|
|
19
|
+
export declare const RoleUpdateInput: z.ZodObject<{
|
|
20
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
21
|
+
name: z.ZodOptional<z.ZodString>;
|
|
22
|
+
description: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
export type RoleUpdateInput = z.infer<typeof RoleUpdateInput>;
|
|
25
|
+
export declare const RoleArchiveInput: z.ZodObject<{
|
|
26
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
export type RoleArchiveInput = z.infer<typeof RoleArchiveInput>;
|
|
29
|
+
export declare const RoleRestoreInput: z.ZodObject<{
|
|
30
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
export type RoleRestoreInput = z.infer<typeof RoleRestoreInput>;
|
|
33
|
+
export declare const RoleGrantCreateInput: z.ZodObject<{
|
|
34
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
35
|
+
permission: z.ZodString;
|
|
36
|
+
}, z.core.$strict>;
|
|
37
|
+
export type RoleGrantCreateInput = z.infer<typeof RoleGrantCreateInput>;
|
|
38
|
+
export declare const RoleGrantRevokeInput: z.ZodObject<{
|
|
39
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
40
|
+
permission: z.ZodString;
|
|
41
|
+
}, z.core.$strict>;
|
|
42
|
+
export type RoleGrantRevokeInput = z.infer<typeof RoleGrantRevokeInput>;
|
|
43
|
+
export declare const Role: z.ZodObject<{
|
|
44
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
45
|
+
name: z.ZodString;
|
|
46
|
+
description: z.ZodString;
|
|
47
|
+
fixed: z.ZodBoolean;
|
|
48
|
+
archivedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
49
|
+
createdAt: z.ZodISODateTime;
|
|
50
|
+
updatedAt: z.ZodISODateTime;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export type Role = z.infer<typeof Role>;
|
|
53
|
+
export declare const RoleList: z.ZodObject<{
|
|
54
|
+
items: z.ZodArray<z.ZodObject<{
|
|
55
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
56
|
+
name: z.ZodString;
|
|
57
|
+
description: z.ZodString;
|
|
58
|
+
fixed: z.ZodBoolean;
|
|
59
|
+
archivedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
60
|
+
createdAt: z.ZodISODateTime;
|
|
61
|
+
updatedAt: z.ZodISODateTime;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
nextCursor: z.ZodNullable<z.ZodTemplateLiteral<`role_${string}`>>;
|
|
64
|
+
}, z.core.$strict>;
|
|
65
|
+
export type RoleList = z.infer<typeof RoleList>;
|
|
66
|
+
export declare const RightInCode: z.ZodEnum<{
|
|
67
|
+
fixed: "fixed";
|
|
68
|
+
automatic: "automatic";
|
|
69
|
+
}>;
|
|
70
|
+
export type RightInCode = z.infer<typeof RightInCode>;
|
|
71
|
+
export declare const RightTree: z.ZodArray<z.ZodObject<{
|
|
72
|
+
resources: z.ZodArray<z.ZodObject<{
|
|
73
|
+
actions: z.ZodArray<z.ZodObject<{
|
|
74
|
+
action: z.ZodString;
|
|
75
|
+
permission: z.ZodString;
|
|
76
|
+
on: z.ZodBoolean;
|
|
77
|
+
orphaned: z.ZodOptional<z.ZodLiteral<true>>;
|
|
78
|
+
inCode: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
fixed: "fixed";
|
|
80
|
+
automatic: "automatic";
|
|
81
|
+
}>>;
|
|
82
|
+
}, z.core.$strict>>;
|
|
83
|
+
on: z.ZodBoolean;
|
|
84
|
+
granted: z.ZodNumber;
|
|
85
|
+
total: z.ZodNumber;
|
|
86
|
+
resource: z.ZodString;
|
|
87
|
+
}, z.core.$strict>>;
|
|
88
|
+
on: z.ZodBoolean;
|
|
89
|
+
granted: z.ZodNumber;
|
|
90
|
+
total: z.ZodNumber;
|
|
91
|
+
package: z.ZodString;
|
|
92
|
+
}, z.core.$strict>>;
|
|
93
|
+
export type RightTree = z.infer<typeof RightTree>;
|
|
94
|
+
export declare const RoleDetail: z.ZodObject<{
|
|
95
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
96
|
+
name: z.ZodString;
|
|
97
|
+
description: z.ZodString;
|
|
98
|
+
fixed: z.ZodBoolean;
|
|
99
|
+
archivedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
100
|
+
createdAt: z.ZodISODateTime;
|
|
101
|
+
updatedAt: z.ZodISODateTime;
|
|
102
|
+
rights: z.ZodArray<z.ZodObject<{
|
|
103
|
+
resources: z.ZodArray<z.ZodObject<{
|
|
104
|
+
actions: z.ZodArray<z.ZodObject<{
|
|
105
|
+
action: z.ZodString;
|
|
106
|
+
permission: z.ZodString;
|
|
107
|
+
on: z.ZodBoolean;
|
|
108
|
+
orphaned: z.ZodOptional<z.ZodLiteral<true>>;
|
|
109
|
+
inCode: z.ZodOptional<z.ZodEnum<{
|
|
110
|
+
fixed: "fixed";
|
|
111
|
+
automatic: "automatic";
|
|
112
|
+
}>>;
|
|
113
|
+
}, z.core.$strict>>;
|
|
114
|
+
on: z.ZodBoolean;
|
|
115
|
+
granted: z.ZodNumber;
|
|
116
|
+
total: z.ZodNumber;
|
|
117
|
+
resource: z.ZodString;
|
|
118
|
+
}, z.core.$strict>>;
|
|
119
|
+
on: z.ZodBoolean;
|
|
120
|
+
granted: z.ZodNumber;
|
|
121
|
+
total: z.ZodNumber;
|
|
122
|
+
package: z.ZodString;
|
|
123
|
+
}, z.core.$strict>>;
|
|
124
|
+
}, z.core.$strict>;
|
|
125
|
+
export type RoleDetail = z.infer<typeof RoleDetail>;
|
|
126
|
+
export declare const GrantChange: z.ZodObject<{
|
|
127
|
+
roleId: z.ZodTemplateLiteral<`role_${string}`>;
|
|
128
|
+
permissions: z.ZodArray<z.ZodString>;
|
|
129
|
+
}, z.core.$strict>;
|
|
130
|
+
export type GrantChange = z.infer<typeof GrantChange>;
|
|
131
|
+
export declare const PermissionsResponse: z.ZodObject<{
|
|
132
|
+
permissions: z.ZodArray<z.ZodString>;
|
|
133
|
+
admin: z.ZodBoolean;
|
|
134
|
+
}, z.core.$strict>;
|
|
135
|
+
export type PermissionsResponse = z.infer<typeof PermissionsResponse>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { idSchema } from "../ids/ids.js";
|
|
3
|
+
import { Flag, Limit } from "../list-input.js";
|
|
4
|
+
// Roles and their rights (Einstellungen › Rollen, #24): the inputs of the `access_role_*` tools and
|
|
5
|
+
// their routes, and the answers the UI reads. A right is `package / resource / action`, every word one
|
|
6
|
+
// word (E64).
|
|
7
|
+
export const RoleId = idSchema("role");
|
|
8
|
+
// A right (`access / role / list`) or the prefix of a level (`intelligence / document`, `connectors`).
|
|
9
|
+
// The spaces around `/` are optional; `access` stores the form with them. The last word may be a
|
|
10
|
+
// connector's function, `connectors / shopify / order-list` (#5): resource and action joined by a
|
|
11
|
+
// dash, because the connector id stands where the resource stands elsewhere.
|
|
12
|
+
export const RightPath = z
|
|
13
|
+
.string()
|
|
14
|
+
.regex(/^[a-z][a-z0-9]*(\s*\/\s*[a-z][a-z0-9]*(\s*\/\s*[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*)?)?$/, "A right is package / resource / action");
|
|
15
|
+
const RoleName = z.string().trim().min(1).max(64);
|
|
16
|
+
const RoleDescription = z.string().trim().max(500);
|
|
17
|
+
export const RoleListInput = z.strictObject({
|
|
18
|
+
// The archive instead of the roles in use.
|
|
19
|
+
archived: Flag.optional(),
|
|
20
|
+
cursor: RoleId.optional(),
|
|
21
|
+
limit: Limit.optional(),
|
|
22
|
+
});
|
|
23
|
+
export const RoleGetInput = z.strictObject({ roleId: RoleId });
|
|
24
|
+
export const RoleCreateInput = z.strictObject({
|
|
25
|
+
name: RoleName,
|
|
26
|
+
description: RoleDescription.optional(),
|
|
27
|
+
});
|
|
28
|
+
export const RoleUpdateInput = z
|
|
29
|
+
.strictObject({
|
|
30
|
+
roleId: RoleId,
|
|
31
|
+
name: RoleName.optional(),
|
|
32
|
+
description: RoleDescription.optional(),
|
|
33
|
+
})
|
|
34
|
+
.refine((input) => input.name !== undefined || input.description !== undefined, {
|
|
35
|
+
message: "Name a field to change: name or description.",
|
|
36
|
+
});
|
|
37
|
+
export const RoleArchiveInput = z.strictObject({ roleId: RoleId });
|
|
38
|
+
export const RoleRestoreInput = z.strictObject({ roleId: RoleId });
|
|
39
|
+
// Switches a right, or every right under a level, on. ⚠️ The right travels in the body of a `POST`,
|
|
40
|
+
// never in the body of a `DELETE` (trap P296).
|
|
41
|
+
export const RoleGrantCreateInput = z.strictObject({ roleId: RoleId, permission: RightPath });
|
|
42
|
+
export const RoleGrantRevokeInput = z.strictObject({ roleId: RoleId, permission: RightPath });
|
|
43
|
+
export const Role = z.strictObject({
|
|
44
|
+
roleId: RoleId,
|
|
45
|
+
name: z.string(),
|
|
46
|
+
description: z.string(),
|
|
47
|
+
// `admin`, `mitglied` and `validator`: no rename, no archive; `admin` has no switches, and
|
|
48
|
+
// `validator` keeps its rights in code switched on (E9, E80). Operator is a normal role.
|
|
49
|
+
fixed: z.boolean(),
|
|
50
|
+
archivedAt: z.iso.datetime().nullable(),
|
|
51
|
+
createdAt: z.iso.datetime(),
|
|
52
|
+
updatedAt: z.iso.datetime(),
|
|
53
|
+
});
|
|
54
|
+
export const RoleList = z.strictObject({ items: z.array(Role), nextCursor: RoleId.nullable() });
|
|
55
|
+
// One switch per level: on as soon as one right below is on, with the count for "2 / 3".
|
|
56
|
+
const Level = { on: z.boolean(), granted: z.number().int(), total: z.number().int() };
|
|
57
|
+
// A right the fixed role `validator` holds in code (#367, E80): `fixed` for the reads of nodes and the
|
|
58
|
+
// validation's writes, `automatic` for the reads of every connector and outside service. Locked on in
|
|
59
|
+
// the tree; switching it off answers `conflict`. Set only on the tree of `validator`.
|
|
60
|
+
export const RightInCode = z.enum(["fixed", "automatic"]);
|
|
61
|
+
export const RightTree = z.array(z.strictObject({
|
|
62
|
+
package: z.string(),
|
|
63
|
+
...Level,
|
|
64
|
+
resources: z.array(z.strictObject({
|
|
65
|
+
resource: z.string(),
|
|
66
|
+
...Level,
|
|
67
|
+
actions: z.array(z.strictObject({
|
|
68
|
+
action: z.string(),
|
|
69
|
+
permission: z.string(),
|
|
70
|
+
on: z.boolean(),
|
|
71
|
+
// A stored grant whose right no tool carries any more, for instance of a connector taken
|
|
72
|
+
// out of `colab.config.ts` (#5). It stays on the role until an admin removes it.
|
|
73
|
+
orphaned: z.literal(true).optional(),
|
|
74
|
+
inCode: RightInCode.optional(),
|
|
75
|
+
})),
|
|
76
|
+
})),
|
|
77
|
+
}));
|
|
78
|
+
export const RoleDetail = Role.extend({ rights: RightTree });
|
|
79
|
+
// The answer of a grant or a revoke: the rights that were really switched (trap P334). Empty when
|
|
80
|
+
// nothing changed, which is no error.
|
|
81
|
+
export const GrantChange = z.strictObject({ roleId: RoleId, permissions: z.array(z.string()) });
|
|
82
|
+
// `GET /auth/permissions`: the caller's own rights as they act right now (masked without admin mode,
|
|
83
|
+
// E71), and whether they hold `admin` at all, so the UI can draw the switch (#68).
|
|
84
|
+
export const PermissionsResponse = z.strictObject({
|
|
85
|
+
permissions: z.array(z.string()),
|
|
86
|
+
admin: z.boolean(),
|
|
87
|
+
});
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const RunId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
3
|
+
export type RunId = z.infer<typeof RunId>;
|
|
4
|
+
export declare const runStatuses: readonly ["running", "done", "open", "error"];
|
|
5
|
+
export declare const RunStatus: z.ZodEnum<{
|
|
6
|
+
error: "error";
|
|
7
|
+
open: "open";
|
|
8
|
+
done: "done";
|
|
9
|
+
running: "running";
|
|
10
|
+
}>;
|
|
11
|
+
export type RunStatus = z.infer<typeof RunStatus>;
|
|
12
|
+
export declare const RunListInput: z.ZodObject<{
|
|
13
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
14
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
error: "error";
|
|
16
|
+
open: "open";
|
|
17
|
+
done: "done";
|
|
18
|
+
running: "running";
|
|
19
|
+
}>>;
|
|
20
|
+
from: z.ZodOptional<z.ZodISODateTime>;
|
|
21
|
+
to: z.ZodOptional<z.ZodISODateTime>;
|
|
22
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
23
|
+
limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
24
|
+
}, z.core.$strict>;
|
|
25
|
+
export type RunListInput = z.infer<typeof RunListInput>;
|
|
26
|
+
export declare const RunGetInput: z.ZodObject<{
|
|
27
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
export type RunGetInput = z.infer<typeof RunGetInput>;
|
|
30
|
+
export declare const BoardRunCreateInput: z.ZodObject<{
|
|
31
|
+
boardId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
32
|
+
idempotencyKey: z.ZodString;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
export type BoardRunCreateInput = z.infer<typeof BoardRunCreateInput>;
|
|
35
|
+
export declare const DashboardRunCreateInput: z.ZodObject<{
|
|
36
|
+
dashboardId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
37
|
+
idempotencyKey: z.ZodString;
|
|
38
|
+
}, z.core.$strict>;
|
|
39
|
+
export type DashboardRunCreateInput = z.infer<typeof DashboardRunCreateInput>;
|
|
40
|
+
export declare const RunUpdateInput: z.ZodObject<{
|
|
41
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
42
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
43
|
+
yaml: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, z.core.$strict>;
|
|
45
|
+
export type RunUpdateInput = z.infer<typeof RunUpdateInput>;
|
|
46
|
+
export declare const RunCompleteInput: z.ZodObject<{
|
|
47
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
48
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
49
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
50
|
+
yaml: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export type RunCompleteInput = z.infer<typeof RunCompleteInput>;
|
|
53
|
+
export declare const RunValueValue: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>;
|
|
54
|
+
export type RunValueValue = z.infer<typeof RunValueValue>;
|
|
55
|
+
export declare const RunValue: z.ZodObject<{
|
|
56
|
+
metrics: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
57
|
+
value: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>;
|
|
58
|
+
source: z.ZodNullable<z.ZodString>;
|
|
59
|
+
node: z.ZodNullable<z.ZodObject<{
|
|
60
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
61
|
+
name: z.ZodString;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
parameter: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
64
|
+
report: z.ZodNullable<z.ZodString>;
|
|
65
|
+
recommendation: z.ZodNullable<z.ZodString>;
|
|
66
|
+
}, z.core.$strict>>;
|
|
67
|
+
summaries: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
68
|
+
text: z.ZodNullable<z.ZodString>;
|
|
69
|
+
report: z.ZodNullable<z.ZodString>;
|
|
70
|
+
recommendation: z.ZodNullable<z.ZodString>;
|
|
71
|
+
}, z.core.$strict>>;
|
|
72
|
+
}, z.core.$strict>;
|
|
73
|
+
export type RunValue = z.infer<typeof RunValue>;
|
|
74
|
+
export declare const RunItem: z.ZodObject<{
|
|
75
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
76
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
77
|
+
kind: z.ZodEnum<{
|
|
78
|
+
dashboard: "dashboard";
|
|
79
|
+
validation: "validation";
|
|
80
|
+
process: "process";
|
|
81
|
+
}>;
|
|
82
|
+
status: z.ZodEnum<{
|
|
83
|
+
error: "error";
|
|
84
|
+
open: "open";
|
|
85
|
+
done: "done";
|
|
86
|
+
running: "running";
|
|
87
|
+
}>;
|
|
88
|
+
dueAt: z.ZodNullable<z.ZodISODateTime>;
|
|
89
|
+
startedAt: z.ZodISODateTime;
|
|
90
|
+
startedBy: z.ZodObject<{
|
|
91
|
+
userId: z.ZodString;
|
|
92
|
+
name: z.ZodNullable<z.ZodString>;
|
|
93
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
94
|
+
machine: "machine";
|
|
95
|
+
human: "human";
|
|
96
|
+
}>>;
|
|
97
|
+
}, z.core.$strict>;
|
|
98
|
+
completedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
99
|
+
completedBy: z.ZodNullable<z.ZodObject<{
|
|
100
|
+
userId: z.ZodString;
|
|
101
|
+
name: z.ZodNullable<z.ZodString>;
|
|
102
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
103
|
+
machine: "machine";
|
|
104
|
+
human: "human";
|
|
105
|
+
}>>;
|
|
106
|
+
}, z.core.$strict>>;
|
|
107
|
+
summary: z.ZodNullable<z.ZodString>;
|
|
108
|
+
values: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>>>;
|
|
109
|
+
summaries: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
|
|
110
|
+
reports: z.ZodNullable<z.ZodNumber>;
|
|
111
|
+
}, z.core.$strict>;
|
|
112
|
+
export type RunItem = z.infer<typeof RunItem>;
|
|
113
|
+
export declare const RunList: z.ZodObject<{
|
|
114
|
+
items: z.ZodArray<z.ZodObject<{
|
|
115
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
116
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
117
|
+
kind: z.ZodEnum<{
|
|
118
|
+
dashboard: "dashboard";
|
|
119
|
+
validation: "validation";
|
|
120
|
+
process: "process";
|
|
121
|
+
}>;
|
|
122
|
+
status: z.ZodEnum<{
|
|
123
|
+
error: "error";
|
|
124
|
+
open: "open";
|
|
125
|
+
done: "done";
|
|
126
|
+
running: "running";
|
|
127
|
+
}>;
|
|
128
|
+
dueAt: z.ZodNullable<z.ZodISODateTime>;
|
|
129
|
+
startedAt: z.ZodISODateTime;
|
|
130
|
+
startedBy: z.ZodObject<{
|
|
131
|
+
userId: z.ZodString;
|
|
132
|
+
name: z.ZodNullable<z.ZodString>;
|
|
133
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
134
|
+
machine: "machine";
|
|
135
|
+
human: "human";
|
|
136
|
+
}>>;
|
|
137
|
+
}, z.core.$strict>;
|
|
138
|
+
completedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
139
|
+
completedBy: z.ZodNullable<z.ZodObject<{
|
|
140
|
+
userId: z.ZodString;
|
|
141
|
+
name: z.ZodNullable<z.ZodString>;
|
|
142
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
143
|
+
machine: "machine";
|
|
144
|
+
human: "human";
|
|
145
|
+
}>>;
|
|
146
|
+
}, z.core.$strict>>;
|
|
147
|
+
summary: z.ZodNullable<z.ZodString>;
|
|
148
|
+
values: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>>>;
|
|
149
|
+
summaries: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
|
|
150
|
+
reports: z.ZodNullable<z.ZodNumber>;
|
|
151
|
+
}, z.core.$strict>>;
|
|
152
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
153
|
+
}, z.core.$strict>;
|
|
154
|
+
export type RunList = z.infer<typeof RunList>;
|
|
155
|
+
export declare const RunDetail: z.ZodObject<{
|
|
156
|
+
counts: z.ZodNullable<z.ZodRecord<z.ZodEnum<{
|
|
157
|
+
backlog: "backlog";
|
|
158
|
+
open: "open";
|
|
159
|
+
progress: "progress";
|
|
160
|
+
done: "done";
|
|
161
|
+
discarded: "discarded";
|
|
162
|
+
blocked: "blocked";
|
|
163
|
+
archive: "archive";
|
|
164
|
+
}> & z.core.$partial, z.ZodNumber>>;
|
|
165
|
+
columns: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
166
|
+
columnId: z.ZodTemplateLiteral<`column_${string}`>;
|
|
167
|
+
name: z.ZodString;
|
|
168
|
+
type: z.ZodEnum<{
|
|
169
|
+
backlog: "backlog";
|
|
170
|
+
open: "open";
|
|
171
|
+
progress: "progress";
|
|
172
|
+
done: "done";
|
|
173
|
+
discarded: "discarded";
|
|
174
|
+
blocked: "blocked";
|
|
175
|
+
archive: "archive";
|
|
176
|
+
}>;
|
|
177
|
+
tasks: z.ZodNumber;
|
|
178
|
+
}, z.core.$strict>>>;
|
|
179
|
+
entries: z.ZodNullable<z.ZodObject<{
|
|
180
|
+
metrics: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
181
|
+
value: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>;
|
|
182
|
+
source: z.ZodNullable<z.ZodString>;
|
|
183
|
+
node: z.ZodNullable<z.ZodObject<{
|
|
184
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
185
|
+
name: z.ZodString;
|
|
186
|
+
}, z.core.$strict>>;
|
|
187
|
+
parameter: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
188
|
+
report: z.ZodNullable<z.ZodString>;
|
|
189
|
+
recommendation: z.ZodNullable<z.ZodString>;
|
|
190
|
+
}, z.core.$strict>>;
|
|
191
|
+
summaries: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
192
|
+
text: z.ZodNullable<z.ZodString>;
|
|
193
|
+
report: z.ZodNullable<z.ZodString>;
|
|
194
|
+
recommendation: z.ZodNullable<z.ZodString>;
|
|
195
|
+
}, z.core.$strict>>;
|
|
196
|
+
}, z.core.$strict>>;
|
|
197
|
+
assignees: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodObject<{
|
|
198
|
+
userId: z.ZodString;
|
|
199
|
+
name: z.ZodNullable<z.ZodString>;
|
|
200
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
201
|
+
machine: "machine";
|
|
202
|
+
human: "human";
|
|
203
|
+
}>>;
|
|
204
|
+
}, z.core.$strict>>>>;
|
|
205
|
+
template: z.ZodNullable<z.ZodString>;
|
|
206
|
+
instruction: z.ZodNullable<z.ZodString>;
|
|
207
|
+
runId: z.ZodTemplateLiteral<`run_${string}`>;
|
|
208
|
+
nodeId: z.ZodTemplateLiteral<`node_${string}`>;
|
|
209
|
+
kind: z.ZodEnum<{
|
|
210
|
+
dashboard: "dashboard";
|
|
211
|
+
validation: "validation";
|
|
212
|
+
process: "process";
|
|
213
|
+
}>;
|
|
214
|
+
status: z.ZodEnum<{
|
|
215
|
+
error: "error";
|
|
216
|
+
open: "open";
|
|
217
|
+
done: "done";
|
|
218
|
+
running: "running";
|
|
219
|
+
}>;
|
|
220
|
+
dueAt: z.ZodNullable<z.ZodISODateTime>;
|
|
221
|
+
startedAt: z.ZodISODateTime;
|
|
222
|
+
startedBy: z.ZodObject<{
|
|
223
|
+
userId: z.ZodString;
|
|
224
|
+
name: z.ZodNullable<z.ZodString>;
|
|
225
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
226
|
+
machine: "machine";
|
|
227
|
+
human: "human";
|
|
228
|
+
}>>;
|
|
229
|
+
}, z.core.$strict>;
|
|
230
|
+
completedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
231
|
+
completedBy: z.ZodNullable<z.ZodObject<{
|
|
232
|
+
userId: z.ZodString;
|
|
233
|
+
name: z.ZodNullable<z.ZodString>;
|
|
234
|
+
kind: z.ZodNullable<z.ZodEnum<{
|
|
235
|
+
machine: "machine";
|
|
236
|
+
human: "human";
|
|
237
|
+
}>>;
|
|
238
|
+
}, z.core.$strict>>;
|
|
239
|
+
summary: z.ZodNullable<z.ZodString>;
|
|
240
|
+
values: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>>>;
|
|
241
|
+
summaries: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
|
|
242
|
+
reports: z.ZodNullable<z.ZodNumber>;
|
|
243
|
+
}, z.core.$strict>;
|
|
244
|
+
export type RunDetail = z.infer<typeof RunDetail>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { BoardId } from "../boards/boards.js";
|
|
3
|
+
import { ColumnId, ColumnType } from "../columns/columns.js";
|
|
4
|
+
import { DashboardId } from "../dashboards/dashboards.js";
|
|
5
|
+
import { idSchema } from "../ids/ids.js";
|
|
6
|
+
import { Limit } from "../list-input.js";
|
|
7
|
+
import { NodeId, NodePerson } from "../nodes/nodes.js";
|
|
8
|
+
import { IdempotencyKey } from "../primitives/primitives.js";
|
|
9
|
+
// Runs of a process board and of a dashboard (#43, Funktionen › Läufe, Nodes › Board › Prozess,
|
|
10
|
+
// Nodes › Dashboard, E42, E45, E67, E70): the inputs of `intelligence_run_list`, `_get`,
|
|
11
|
+
// `intelligence_board_run_create`, `intelligence_dashboard_run_create`, `intelligence_run_complete`,
|
|
12
|
+
// and the answers. A run is a sub-resource of its board or dashboard when it is made, and a resource
|
|
13
|
+
// of its own afterwards.
|
|
14
|
+
export const RunId = idSchema("run").describe("The run's id, `run_…`, as intelligence_board_run_create, intelligence_dashboard_run_create or intelligence_run_list returned it.");
|
|
15
|
+
export const runStatuses = ["running", "done", "open", "error"];
|
|
16
|
+
export const RunStatus = z
|
|
17
|
+
.enum(runStatuses)
|
|
18
|
+
.describe("The run's status, set by Colab from its result, never by the caller: running (started, not completed), done (a process: every task in a done, discarded or archive column; a dashboard: every value and summary there, no report; the validation: no ticket in a column of type open waits on a person), open (a process: a task not in such a column; a dashboard: at least one report; the validation: a ticket in a column of type open is assigned to a person), error (a process: a task in a blocked column; a dashboard and the validation never err, an invalid run is not taken).");
|
|
19
|
+
const Moment = z.iso.datetime({ offset: true });
|
|
20
|
+
export const RunListInput = z.strictObject({
|
|
21
|
+
nodeId: NodeId.describe("The process board or dashboard whose runs to list, one you can read. Runs never stand in the tree."),
|
|
22
|
+
status: RunStatus.optional().describe("Only the runs with this status."),
|
|
23
|
+
from: Moment.optional().describe("Only the runs started at or after this moment, ISO 8601."),
|
|
24
|
+
to: Moment.optional().describe("Only the runs started at or before this moment, ISO 8601."),
|
|
25
|
+
cursor: z
|
|
26
|
+
.string()
|
|
27
|
+
.max(1000)
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("The nextCursor of the previous page, unchanged. Leaving it out starts at the newest."),
|
|
30
|
+
limit: Limit.optional().describe("How many runs one page holds, 1 to 100. Leaving it out gives 50."),
|
|
31
|
+
});
|
|
32
|
+
export const RunGetInput = z.strictObject({ runId: RunId });
|
|
33
|
+
export const BoardRunCreateInput = z.strictObject({
|
|
34
|
+
boardId: BoardId.describe("The process board to start a run of, one you can write to. The run is a copy of its columns and of every task of the template, all in the first column."),
|
|
35
|
+
idempotencyKey: IdempotencyKey,
|
|
36
|
+
});
|
|
37
|
+
export const DashboardRunCreateInput = z.strictObject({
|
|
38
|
+
dashboardId: DashboardId.describe("The dashboard to start a run of, one you can write to. The run keeps a copy of the configuration as it is now and answers its template."),
|
|
39
|
+
idempotencyKey: IdempotencyKey,
|
|
40
|
+
});
|
|
41
|
+
const Text = z.string().max(20_000);
|
|
42
|
+
const RunValues = z
|
|
43
|
+
.record(z.string(), z.unknown())
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("A dashboard run's entries as an object, the shape of the template of intelligence_run_get: metrics (value, source, parameter, report, recommendation) and summaries (text, report, recommendation), each under its key. Send at most one of values and yaml.");
|
|
46
|
+
const RunYaml = z
|
|
47
|
+
.string()
|
|
48
|
+
.max(200_000)
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("A dashboard run's entries as YAML text, the template of intelligence_run_get filled in. Send at most one of values and yaml.");
|
|
51
|
+
// A dashboard run is filled by its assignees, each their own entries (E78, Nodes › Dashboard,
|
|
52
|
+
// Zuständig je Kennzahl): the run closes by itself once every entry is there.
|
|
53
|
+
export const RunUpdateInput = z.strictObject({
|
|
54
|
+
runId: RunId,
|
|
55
|
+
values: RunValues.describe("Your entries of a dashboard run as an object: metrics and summaries assigned to you (and those without anybody, where you can write on the dashboard), each under its key with value and source, or text, and a report and a recommendation where something is worth saying. Send exactly one of values and yaml."),
|
|
56
|
+
yaml: RunYaml.describe("Your entries of a dashboard run as YAML text, the template of intelligence_run_get filled in. Send exactly one of values and yaml."),
|
|
57
|
+
});
|
|
58
|
+
export const RunCompleteInput = z.strictObject({
|
|
59
|
+
runId: RunId,
|
|
60
|
+
summary: Text.optional().describe("What the run did, in a few sentences: what people read in the list of runs."),
|
|
61
|
+
values: RunValues.describe("Only for a dashboard: the last entries you may write, as an object, before it closes. Entries nobody wrote stay missing and the run is open. Send at most one of values and yaml, neither for a process."),
|
|
62
|
+
yaml: RunYaml.describe("Only for a dashboard: the last entries you may write, as YAML text, before it closes. Send at most one of values and yaml, neither for a process."),
|
|
63
|
+
});
|
|
64
|
+
// A value as a run stores it: a number, a short text, or null when it is missing.
|
|
65
|
+
export const RunValueValue = z.union([z.number(), z.string(), z.null()]);
|
|
66
|
+
// ⚠️ The entries of a dashboard run as records under their key, the shape the Operator sent
|
|
67
|
+
// (`DashboardRun`), never as a list with a field `key`: `/mcp` strikes every field called `key` as a
|
|
68
|
+
// secret (`redactSecrets` in `shared`), and the answer would name no metric.
|
|
69
|
+
export const RunValue = z.strictObject({
|
|
70
|
+
metrics: z.record(z.string(), z.strictObject({
|
|
71
|
+
value: RunValueValue,
|
|
72
|
+
source: z.string().nullable(),
|
|
73
|
+
// The node a source `colab://node_…` names, when the caller can read it; null for a tool,
|
|
74
|
+
// and for a node that is gone or the caller cannot read: then neither its id nor its name,
|
|
75
|
+
// and `source` is null too (#165).
|
|
76
|
+
node: z.strictObject({ nodeId: NodeId, name: z.string() }).nullable(),
|
|
77
|
+
parameter: z.record(z.string(), z.unknown()).nullable(),
|
|
78
|
+
report: z.string().nullable(),
|
|
79
|
+
recommendation: z.string().nullable(),
|
|
80
|
+
})),
|
|
81
|
+
summaries: z.record(z.string(), z.strictObject({
|
|
82
|
+
text: z.string().nullable(),
|
|
83
|
+
report: z.string().nullable(),
|
|
84
|
+
recommendation: z.string().nullable(),
|
|
85
|
+
})),
|
|
86
|
+
});
|
|
87
|
+
export const RunItem = z.strictObject({
|
|
88
|
+
runId: RunId,
|
|
89
|
+
nodeId: NodeId,
|
|
90
|
+
// A validation run (#47) copies nothing and carries only its summary.
|
|
91
|
+
kind: z.enum(["process", "dashboard", "validation"]),
|
|
92
|
+
status: RunStatus,
|
|
93
|
+
// The moment of the schedule this run stands for, null for a run started by hand.
|
|
94
|
+
dueAt: z.iso.datetime().nullable(),
|
|
95
|
+
startedAt: z.iso.datetime(),
|
|
96
|
+
startedBy: NodePerson,
|
|
97
|
+
completedAt: z.iso.datetime().nullable(),
|
|
98
|
+
completedBy: NodePerson.nullable(),
|
|
99
|
+
summary: z.string().nullable(),
|
|
100
|
+
// A dashboard's value per metric key, one row of its table; null for a process.
|
|
101
|
+
values: z.record(z.string(), RunValueValue).nullable(),
|
|
102
|
+
// A dashboard's summary text per summary key, cut to 280 characters for a cell of its table, null
|
|
103
|
+
// where the Operator wrote none; null for a process. The whole text is in `entries` of
|
|
104
|
+
// intelligence_run_get (#164).
|
|
105
|
+
summaries: z.record(z.string(), z.string().nullable()).nullable(),
|
|
106
|
+
// A dashboard's count of values and summaries that carry a report; null for a process (#164).
|
|
107
|
+
reports: z.number().int().nullable(),
|
|
108
|
+
});
|
|
109
|
+
export const RunList = z.strictObject({
|
|
110
|
+
items: z.array(RunItem),
|
|
111
|
+
nextCursor: z.string().nullable(),
|
|
112
|
+
});
|
|
113
|
+
export const RunDetail = z.strictObject({
|
|
114
|
+
...RunItem.shape,
|
|
115
|
+
// A process run: how many of its tasks stand in a column of each type.
|
|
116
|
+
counts: z.partialRecord(ColumnType, z.number().int()).nullable(),
|
|
117
|
+
// A process run: its own columns, copied when it started, each with how many tasks it holds. A
|
|
118
|
+
// task of the run moves only between these.
|
|
119
|
+
columns: z
|
|
120
|
+
.array(z.strictObject({
|
|
121
|
+
columnId: ColumnId,
|
|
122
|
+
name: z.string(),
|
|
123
|
+
type: ColumnType,
|
|
124
|
+
tasks: z.number().int(),
|
|
125
|
+
}))
|
|
126
|
+
.nullable(),
|
|
127
|
+
// A dashboard run: every value and summary with where it came from, in the configuration's order.
|
|
128
|
+
entries: RunValue.nullable(),
|
|
129
|
+
// A dashboard run: who delivers each metric and summary, by key, as the configuration said when
|
|
130
|
+
// the run started (E78); null where nobody does. Null for a process.
|
|
131
|
+
assignees: z.record(z.string(), NodePerson.nullable()).nullable(),
|
|
132
|
+
// A dashboard run while it runs: the YAML of the entries the caller may write and has not written
|
|
133
|
+
// yet, to fill in and send to intelligence_run_update; null when there is none.
|
|
134
|
+
template: z.string().nullable(),
|
|
135
|
+
// The instruction of the board or dashboard as the run started (E87, #354); null without one.
|
|
136
|
+
instruction: z.string().nullable(),
|
|
137
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const RuntimeConfig: z.ZodObject<{
|
|
3
|
+
dsn: z.ZodString;
|
|
4
|
+
installation: z.ZodString;
|
|
5
|
+
release: z.ZodString;
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
language: z.ZodEnum<{
|
|
8
|
+
en: "en";
|
|
9
|
+
de: "de";
|
|
10
|
+
}>;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
export type RuntimeConfig = z.infer<typeof RuntimeConfig>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// What the UI learns from the Worker at `GET /config.json` before it renders (#19). One build serves
|
|
3
|
+
// every installation, so nothing installation-specific may be baked into the bundle.
|
|
4
|
+
//
|
|
5
|
+
// ⚠️ Public by construction: the route answers without sign-in. A new key here is readable by anyone
|
|
6
|
+
// who can reach the installation, so only values that are safe to show belong in it.
|
|
7
|
+
export const RuntimeConfig = z.strictObject({
|
|
8
|
+
// The GlitchTip DSN for the browser; empty means report to the console only (E57).
|
|
9
|
+
dsn: z.string(),
|
|
10
|
+
// The `installation` and `release` tags on every error report.
|
|
11
|
+
installation: z.string(),
|
|
12
|
+
release: z.string(),
|
|
13
|
+
// The installation's name for people (`INSTALLATION_NAME`, #79), next to the logo on the sign-in
|
|
14
|
+
// pages and in the sentences that name the installation (#29). Empty when it is not set.
|
|
15
|
+
name: z.string(),
|
|
16
|
+
// The installation's default UI language, used when the browser asks for none Colab speaks.
|
|
17
|
+
language: z.enum(["en", "de"]),
|
|
18
|
+
});
|