@cleocode/contracts 2026.9.26 → 2026.10.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/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/nexus-account.d.ts +91 -3
- package/dist/nexus-account.d.ts.map +1 -1
- package/dist/nexus-account.js +3 -1
- package/dist/nexus-account.js.map +1 -1
- package/dist/nexus-cloud.d.ts +703 -0
- package/dist/nexus-cloud.d.ts.map +1 -0
- package/dist/nexus-cloud.js +406 -0
- package/dist/nexus-cloud.js.map +1 -0
- package/package.json +2 -2
- package/src/index.ts +64 -0
- package/src/nexus-account.ts +93 -3
- package/src/nexus-cloud.ts +644 -0
|
@@ -0,0 +1,703 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cleo Nexus remote reads: what `cleo cloud status|whoami|devices|projects`
|
|
3
|
+
* parse from the API and emit in their LAFS envelopes (cleo-nexus device
|
|
4
|
+
* contract v2.15, §4.1, §4.2 E2/E3/E5/E13/E14/E15, §4.4), plus the error
|
|
5
|
+
* mapping table of §4.0.4.
|
|
6
|
+
*
|
|
7
|
+
* The response schemas are the client's tolerant reading of §4.1: every field
|
|
8
|
+
* the CLI reports is named, unknown fields are stripped (never `.strict()`,
|
|
9
|
+
* §4 preamble), and fields the deployed server does not send on every route
|
|
10
|
+
* yet (E2's `device` is a subset of `DeviceView`, E13 has no
|
|
11
|
+
* `lastPresenceAt`) are optional. They are not part of `./cloud`, which
|
|
12
|
+
* mirrors the server's `@cleo-nexus/shared` package one-to-one.
|
|
13
|
+
*
|
|
14
|
+
* Nothing here carries a token, a key or a filesystem path the server sent;
|
|
15
|
+
* the local paths in {@link CloudStatusLocal} are locations only.
|
|
16
|
+
*
|
|
17
|
+
* This file is types + zod schemas + const data only (arch gate 10).
|
|
18
|
+
*
|
|
19
|
+
* @task T12871
|
|
20
|
+
* @epic T12323
|
|
21
|
+
*/
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
import type { NexusAccountErrorCode } from './nexus-account.js';
|
|
24
|
+
/** Device states (§4.1 `DeviceState`). */
|
|
25
|
+
export declare const NEXUS_DEVICE_STATES: readonly ["active", "signed-out", "revoked"];
|
|
26
|
+
/** Device-credential profiles (§2.3, §4.1 `DeviceProfile`). */
|
|
27
|
+
export declare const NEXUS_CLOUD_PROFILES: readonly ["device", "read-only"];
|
|
28
|
+
/** The `state` filter of `GET /v1/devices` (E5, `ListDevicesQuery.state`). */
|
|
29
|
+
export declare const NEXUS_DEVICE_LIST_STATES: readonly ["active", "signed-out", "revoked", "all"];
|
|
30
|
+
/** One of {@link NEXUS_DEVICE_LIST_STATES}. */
|
|
31
|
+
export type NexusDeviceListState = (typeof NEXUS_DEVICE_LIST_STATES)[number];
|
|
32
|
+
/** Largest page the list endpoints accept (§4.0.3). */
|
|
33
|
+
export declare const NEXUS_PAGE_LIMIT_MAX = 200;
|
|
34
|
+
/** Default number of pages a `cleo cloud` list follows before it stops and says so. */
|
|
35
|
+
export declare const NEXUS_CLOUD_MAX_PAGES = 25;
|
|
36
|
+
/** Seconds within which a replica's presence counts as fresh (§4.1 `PRESENCE_FRESH_SECONDS`). */
|
|
37
|
+
export declare const NEXUS_PRESENCE_FRESH_SECONDS = 86400;
|
|
38
|
+
/**
|
|
39
|
+
* The device state a newer server value parses as. Not `active`, so every
|
|
40
|
+
* active-only check fails closed instead of the whole command failing.
|
|
41
|
+
*/
|
|
42
|
+
export declare const NEXUS_DEVICE_STATE_UNKNOWN = "unknown";
|
|
43
|
+
/** `CredentialInfo` (§4.1): the credential that made the request. */
|
|
44
|
+
export declare const nexusCloudCredentialSchema: z.ZodObject<{
|
|
45
|
+
kind: z.ZodEnum<{
|
|
46
|
+
session: "session";
|
|
47
|
+
device: "device";
|
|
48
|
+
}>;
|
|
49
|
+
credentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
50
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
51
|
+
device: "device";
|
|
52
|
+
"read-only": "read-only";
|
|
53
|
+
}>>>>;
|
|
54
|
+
scopes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
55
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
56
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
57
|
+
idleExpiresAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
/** `DeviceView` (§4.1), as far as the CLI reports it. E2 sends a subset. */
|
|
60
|
+
export declare const nexusCloudDeviceSchema: z.ZodObject<{
|
|
61
|
+
deviceId: z.ZodString;
|
|
62
|
+
name: z.ZodString;
|
|
63
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
64
|
+
arch: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
65
|
+
cliVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
66
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
67
|
+
lastSeenAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
68
|
+
state: z.ZodCatch<z.ZodEnum<{
|
|
69
|
+
unknown: "unknown";
|
|
70
|
+
active: "active";
|
|
71
|
+
revoked: "revoked";
|
|
72
|
+
"signed-out": "signed-out";
|
|
73
|
+
}>>;
|
|
74
|
+
signedOutAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
75
|
+
certificate: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
76
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
77
|
+
device: "device";
|
|
78
|
+
"read-only": "read-only";
|
|
79
|
+
}>>>>;
|
|
80
|
+
current: z.ZodDefault<z.ZodBoolean>;
|
|
81
|
+
projects: z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
replicas: z.ZodOptional<z.ZodNumber>;
|
|
83
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
84
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
/** `OrganizationSummary` (§4.1). */
|
|
87
|
+
export declare const nexusCloudOrganizationSchema: z.ZodObject<{
|
|
88
|
+
id: z.ZodString;
|
|
89
|
+
name: z.ZodString;
|
|
90
|
+
slug: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
91
|
+
role: z.ZodOptional<z.ZodString>;
|
|
92
|
+
personal: z.ZodOptional<z.ZodBoolean>;
|
|
93
|
+
}, z.core.$strip>;
|
|
94
|
+
/** `AccountUser` (§4.1). */
|
|
95
|
+
export declare const nexusCloudUserSchema: z.ZodObject<{
|
|
96
|
+
id: z.ZodString;
|
|
97
|
+
email: z.ZodString;
|
|
98
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
99
|
+
}, z.core.$strip>;
|
|
100
|
+
/** `Whoami` (E2 `GET /v1/whoami`). */
|
|
101
|
+
export declare const nexusCloudWhoamiSchema: z.ZodObject<{
|
|
102
|
+
serverTime: z.ZodOptional<z.ZodISODateTime>;
|
|
103
|
+
user: z.ZodObject<{
|
|
104
|
+
id: z.ZodString;
|
|
105
|
+
email: z.ZodString;
|
|
106
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
107
|
+
}, z.core.$strip>;
|
|
108
|
+
organizations: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
109
|
+
id: z.ZodString;
|
|
110
|
+
name: z.ZodString;
|
|
111
|
+
slug: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
112
|
+
role: z.ZodOptional<z.ZodString>;
|
|
113
|
+
personal: z.ZodOptional<z.ZodBoolean>;
|
|
114
|
+
}, z.core.$strip>>>;
|
|
115
|
+
credential: z.ZodObject<{
|
|
116
|
+
kind: z.ZodEnum<{
|
|
117
|
+
session: "session";
|
|
118
|
+
device: "device";
|
|
119
|
+
}>;
|
|
120
|
+
credentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
121
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
122
|
+
device: "device";
|
|
123
|
+
"read-only": "read-only";
|
|
124
|
+
}>>>>;
|
|
125
|
+
scopes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
126
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
127
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
128
|
+
idleExpiresAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
129
|
+
}, z.core.$strip>;
|
|
130
|
+
device: z.ZodNullable<z.ZodObject<{
|
|
131
|
+
deviceId: z.ZodString;
|
|
132
|
+
name: z.ZodString;
|
|
133
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
134
|
+
arch: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
135
|
+
cliVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
136
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
137
|
+
lastSeenAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
138
|
+
state: z.ZodCatch<z.ZodEnum<{
|
|
139
|
+
unknown: "unknown";
|
|
140
|
+
active: "active";
|
|
141
|
+
revoked: "revoked";
|
|
142
|
+
"signed-out": "signed-out";
|
|
143
|
+
}>>;
|
|
144
|
+
signedOutAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
145
|
+
certificate: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
146
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
147
|
+
device: "device";
|
|
148
|
+
"read-only": "read-only";
|
|
149
|
+
}>>>>;
|
|
150
|
+
current: z.ZodDefault<z.ZodBoolean>;
|
|
151
|
+
projects: z.ZodOptional<z.ZodNumber>;
|
|
152
|
+
replicas: z.ZodOptional<z.ZodNumber>;
|
|
153
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
154
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
155
|
+
}, z.core.$strip>>;
|
|
156
|
+
}, z.core.$strip>;
|
|
157
|
+
/** `ListDevicesViewResult` (E5 `GET /v1/devices`), one page. */
|
|
158
|
+
export declare const nexusCloudDevicePageSchema: z.ZodObject<{
|
|
159
|
+
devices: z.ZodArray<z.ZodObject<{
|
|
160
|
+
deviceId: z.ZodString;
|
|
161
|
+
name: z.ZodString;
|
|
162
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
163
|
+
arch: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
164
|
+
cliVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
165
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
166
|
+
lastSeenAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
167
|
+
state: z.ZodCatch<z.ZodEnum<{
|
|
168
|
+
unknown: "unknown";
|
|
169
|
+
active: "active";
|
|
170
|
+
revoked: "revoked";
|
|
171
|
+
"signed-out": "signed-out";
|
|
172
|
+
}>>;
|
|
173
|
+
signedOutAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
174
|
+
certificate: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
175
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
176
|
+
device: "device";
|
|
177
|
+
"read-only": "read-only";
|
|
178
|
+
}>>>>;
|
|
179
|
+
current: z.ZodDefault<z.ZodBoolean>;
|
|
180
|
+
projects: z.ZodOptional<z.ZodNumber>;
|
|
181
|
+
replicas: z.ZodOptional<z.ZodNumber>;
|
|
182
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
183
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
184
|
+
}, z.core.$strip>>;
|
|
185
|
+
nextCursor: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
186
|
+
truncated: z.ZodDefault<z.ZodBoolean>;
|
|
187
|
+
}, z.core.$strip>;
|
|
188
|
+
/** Path-free replica presence (`ReplicaPresence`), with the R4 `sync` flag; other fields kept as sent. */
|
|
189
|
+
export declare const nexusCloudPresenceSchema: z.ZodObject<{
|
|
190
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
191
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
192
|
+
enabled: z.ZodBoolean;
|
|
193
|
+
}, z.core.$strip>>;
|
|
194
|
+
}, z.core.$loose>;
|
|
195
|
+
/** `ReplicaRow` (§4.1). */
|
|
196
|
+
export declare const nexusCloudReplicaSchema: z.ZodObject<{
|
|
197
|
+
projectId: z.ZodString;
|
|
198
|
+
replicaId: z.ZodString;
|
|
199
|
+
deviceId: z.ZodString;
|
|
200
|
+
deviceName: z.ZodString;
|
|
201
|
+
deviceState: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
202
|
+
unknown: "unknown";
|
|
203
|
+
active: "active";
|
|
204
|
+
revoked: "revoked";
|
|
205
|
+
"signed-out": "signed-out";
|
|
206
|
+
}>>>;
|
|
207
|
+
attachedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
208
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
209
|
+
presence: z.ZodNullable<z.ZodObject<{
|
|
210
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
211
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
212
|
+
enabled: z.ZodBoolean;
|
|
213
|
+
}, z.core.$strip>>;
|
|
214
|
+
}, z.core.$loose>>;
|
|
215
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
216
|
+
}, z.core.$strip>;
|
|
217
|
+
/** `DeviceCounts` (§4.1): distinct devices holding a replica. */
|
|
218
|
+
export declare const nexusCloudDeviceCountsSchema: z.ZodObject<{
|
|
219
|
+
active: z.ZodNumber;
|
|
220
|
+
total: z.ZodNumber;
|
|
221
|
+
}, z.core.$strip>;
|
|
222
|
+
/** `ProjectListItem` (§4.1, E13). */
|
|
223
|
+
export declare const nexusCloudProjectListItemSchema: z.ZodObject<{
|
|
224
|
+
role: z.ZodString;
|
|
225
|
+
streamId: z.ZodOptional<z.ZodString>;
|
|
226
|
+
headSeq: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
227
|
+
openConflicts: z.ZodOptional<z.ZodNumber>;
|
|
228
|
+
replicas: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
229
|
+
projectId: z.ZodString;
|
|
230
|
+
replicaId: z.ZodString;
|
|
231
|
+
deviceId: z.ZodString;
|
|
232
|
+
deviceName: z.ZodString;
|
|
233
|
+
deviceState: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
234
|
+
unknown: "unknown";
|
|
235
|
+
active: "active";
|
|
236
|
+
revoked: "revoked";
|
|
237
|
+
"signed-out": "signed-out";
|
|
238
|
+
}>>>;
|
|
239
|
+
attachedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
240
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
241
|
+
presence: z.ZodNullable<z.ZodObject<{
|
|
242
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
243
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
244
|
+
enabled: z.ZodBoolean;
|
|
245
|
+
}, z.core.$strip>>;
|
|
246
|
+
}, z.core.$loose>>;
|
|
247
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
248
|
+
}, z.core.$strip>>>;
|
|
249
|
+
devices: z.ZodOptional<z.ZodObject<{
|
|
250
|
+
active: z.ZodNumber;
|
|
251
|
+
total: z.ZodNumber;
|
|
252
|
+
}, z.core.$strip>>;
|
|
253
|
+
replicaCount: z.ZodOptional<z.ZodNumber>;
|
|
254
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
255
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
256
|
+
replicasTruncated: z.ZodDefault<z.ZodBoolean>;
|
|
257
|
+
projectId: z.ZodString;
|
|
258
|
+
label: z.ZodNullable<z.ZodString>;
|
|
259
|
+
organizationId: z.ZodString;
|
|
260
|
+
organizationName: z.ZodOptional<z.ZodString>;
|
|
261
|
+
remoteUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
262
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
263
|
+
}, z.core.$strip>;
|
|
264
|
+
/** `ListProjectsResult` (E13 `GET /v1/projects`), one page. */
|
|
265
|
+
export declare const nexusCloudProjectPageSchema: z.ZodObject<{
|
|
266
|
+
projects: z.ZodArray<z.ZodObject<{
|
|
267
|
+
role: z.ZodString;
|
|
268
|
+
streamId: z.ZodOptional<z.ZodString>;
|
|
269
|
+
headSeq: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
270
|
+
openConflicts: z.ZodOptional<z.ZodNumber>;
|
|
271
|
+
replicas: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
272
|
+
projectId: z.ZodString;
|
|
273
|
+
replicaId: z.ZodString;
|
|
274
|
+
deviceId: z.ZodString;
|
|
275
|
+
deviceName: z.ZodString;
|
|
276
|
+
deviceState: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
277
|
+
unknown: "unknown";
|
|
278
|
+
active: "active";
|
|
279
|
+
revoked: "revoked";
|
|
280
|
+
"signed-out": "signed-out";
|
|
281
|
+
}>>>;
|
|
282
|
+
attachedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
283
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
284
|
+
presence: z.ZodNullable<z.ZodObject<{
|
|
285
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
286
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
287
|
+
enabled: z.ZodBoolean;
|
|
288
|
+
}, z.core.$strip>>;
|
|
289
|
+
}, z.core.$loose>>;
|
|
290
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
291
|
+
}, z.core.$strip>>>;
|
|
292
|
+
devices: z.ZodOptional<z.ZodObject<{
|
|
293
|
+
active: z.ZodNumber;
|
|
294
|
+
total: z.ZodNumber;
|
|
295
|
+
}, z.core.$strip>>;
|
|
296
|
+
replicaCount: z.ZodOptional<z.ZodNumber>;
|
|
297
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
298
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
299
|
+
replicasTruncated: z.ZodDefault<z.ZodBoolean>;
|
|
300
|
+
projectId: z.ZodString;
|
|
301
|
+
label: z.ZodNullable<z.ZodString>;
|
|
302
|
+
organizationId: z.ZodString;
|
|
303
|
+
organizationName: z.ZodOptional<z.ZodString>;
|
|
304
|
+
remoteUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
305
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
306
|
+
}, z.core.$strip>>;
|
|
307
|
+
nextCursor: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
308
|
+
truncated: z.ZodDefault<z.ZodBoolean>;
|
|
309
|
+
projectsTruncated: z.ZodDefault<z.ZodBoolean>;
|
|
310
|
+
}, z.core.$strip>;
|
|
311
|
+
/** `ProjectDetail` (E14 `GET /v1/projects/:projectId`). */
|
|
312
|
+
export declare const nexusCloudProjectDetailSchema: z.ZodObject<{
|
|
313
|
+
project: z.ZodObject<{
|
|
314
|
+
deletedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
315
|
+
projectId: z.ZodString;
|
|
316
|
+
label: z.ZodNullable<z.ZodString>;
|
|
317
|
+
organizationId: z.ZodString;
|
|
318
|
+
organizationName: z.ZodOptional<z.ZodString>;
|
|
319
|
+
remoteUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
320
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
321
|
+
}, z.core.$strip>;
|
|
322
|
+
role: z.ZodString;
|
|
323
|
+
canTrash: z.ZodOptional<z.ZodBoolean>;
|
|
324
|
+
openConflicts: z.ZodNumber;
|
|
325
|
+
replicas: z.ZodArray<z.ZodObject<{
|
|
326
|
+
projectId: z.ZodString;
|
|
327
|
+
replicaId: z.ZodString;
|
|
328
|
+
deviceId: z.ZodString;
|
|
329
|
+
deviceName: z.ZodString;
|
|
330
|
+
deviceState: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
331
|
+
unknown: "unknown";
|
|
332
|
+
active: "active";
|
|
333
|
+
revoked: "revoked";
|
|
334
|
+
"signed-out": "signed-out";
|
|
335
|
+
}>>>;
|
|
336
|
+
attachedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
337
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
338
|
+
presence: z.ZodNullable<z.ZodObject<{
|
|
339
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
340
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
341
|
+
enabled: z.ZodBoolean;
|
|
342
|
+
}, z.core.$strip>>;
|
|
343
|
+
}, z.core.$loose>>;
|
|
344
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
345
|
+
}, z.core.$strip>>;
|
|
346
|
+
devices: z.ZodObject<{
|
|
347
|
+
active: z.ZodNumber;
|
|
348
|
+
total: z.ZodNumber;
|
|
349
|
+
}, z.core.$strip>;
|
|
350
|
+
replicaCount: z.ZodOptional<z.ZodNumber>;
|
|
351
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
352
|
+
truncated: z.ZodDefault<z.ZodBoolean>;
|
|
353
|
+
stream: z.ZodNullable<z.ZodObject<{
|
|
354
|
+
streamId: z.ZodString;
|
|
355
|
+
headSeq: z.ZodNumber;
|
|
356
|
+
headCheckpointId: z.ZodNullable<z.ZodString>;
|
|
357
|
+
}, z.core.$strip>>;
|
|
358
|
+
}, z.core.$strip>;
|
|
359
|
+
/** `ListReplicasResult` (E15 `GET /v1/projects/:projectId/replicas`), one page. */
|
|
360
|
+
export declare const nexusCloudReplicaPageSchema: z.ZodObject<{
|
|
361
|
+
replicas: z.ZodArray<z.ZodObject<{
|
|
362
|
+
projectId: z.ZodString;
|
|
363
|
+
replicaId: z.ZodString;
|
|
364
|
+
deviceId: z.ZodString;
|
|
365
|
+
deviceName: z.ZodString;
|
|
366
|
+
deviceState: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
367
|
+
unknown: "unknown";
|
|
368
|
+
active: "active";
|
|
369
|
+
revoked: "revoked";
|
|
370
|
+
"signed-out": "signed-out";
|
|
371
|
+
}>>>;
|
|
372
|
+
attachedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
373
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
374
|
+
presence: z.ZodNullable<z.ZodObject<{
|
|
375
|
+
observedAt: z.ZodOptional<z.ZodISODateTime>;
|
|
376
|
+
sync: z.ZodOptional<z.ZodObject<{
|
|
377
|
+
enabled: z.ZodBoolean;
|
|
378
|
+
}, z.core.$strip>>;
|
|
379
|
+
}, z.core.$loose>>;
|
|
380
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
381
|
+
}, z.core.$strip>>;
|
|
382
|
+
devices: z.ZodOptional<z.ZodObject<{
|
|
383
|
+
active: z.ZodNumber;
|
|
384
|
+
total: z.ZodNumber;
|
|
385
|
+
}, z.core.$strip>>;
|
|
386
|
+
nextCursor: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
387
|
+
truncated: z.ZodDefault<z.ZodBoolean>;
|
|
388
|
+
}, z.core.$strip>;
|
|
389
|
+
/** E3 check ids, in their contract order (§4.1 `StatusCheckId`). */
|
|
390
|
+
export declare const NEXUS_STATUS_CHECK_IDS: readonly ["credential.valid", "device.registered", "device.active", "device.certified", "project.registered", "project.writable", "replica.attached", "presence.fresh", "replica.synced", "conflicts.none"];
|
|
391
|
+
/** One of {@link NEXUS_STATUS_CHECK_IDS}. */
|
|
392
|
+
export type NexusStatusCheckId = (typeof NEXUS_STATUS_CHECK_IDS)[number];
|
|
393
|
+
/** The server's verdicts (§4.1 `StatusVerdict`). */
|
|
394
|
+
export declare const NEXUS_STATUS_VERDICTS: readonly ["ok", "attention", "not-linked", "not-registered"];
|
|
395
|
+
/** `cleo cloud status` verdicts: the server's plus the local `not-signed-in` (§4.4). */
|
|
396
|
+
export declare const CLOUD_STATUS_VERDICTS: readonly ["ok", "attention", "not-linked", "not-registered", "not-signed-in"];
|
|
397
|
+
/** One of {@link CLOUD_STATUS_VERDICTS}. */
|
|
398
|
+
export type CloudStatusVerdict = (typeof CLOUD_STATUS_VERDICTS)[number];
|
|
399
|
+
/** `StatusCheck` (§4.1). Only required checks drive the verdict. */
|
|
400
|
+
export declare const nexusCloudStatusCheckSchema: z.ZodObject<{
|
|
401
|
+
id: z.ZodEnum<{
|
|
402
|
+
"credential.valid": "credential.valid";
|
|
403
|
+
"device.registered": "device.registered";
|
|
404
|
+
"device.active": "device.active";
|
|
405
|
+
"device.certified": "device.certified";
|
|
406
|
+
"project.registered": "project.registered";
|
|
407
|
+
"project.writable": "project.writable";
|
|
408
|
+
"replica.attached": "replica.attached";
|
|
409
|
+
"presence.fresh": "presence.fresh";
|
|
410
|
+
"replica.synced": "replica.synced";
|
|
411
|
+
"conflicts.none": "conflicts.none";
|
|
412
|
+
}>;
|
|
413
|
+
ok: z.ZodBoolean;
|
|
414
|
+
required: z.ZodBoolean;
|
|
415
|
+
detail: z.ZodString;
|
|
416
|
+
}, z.core.$strip>;
|
|
417
|
+
/** `NexusStatus` (E3 `GET /v1/status`). */
|
|
418
|
+
export declare const nexusCloudStatusSchema: z.ZodObject<{
|
|
419
|
+
serverTime: z.ZodOptional<z.ZodISODateTime>;
|
|
420
|
+
apiVersion: z.ZodOptional<z.ZodString>;
|
|
421
|
+
user: z.ZodObject<{
|
|
422
|
+
id: z.ZodString;
|
|
423
|
+
email: z.ZodString;
|
|
424
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
425
|
+
}, z.core.$strip>;
|
|
426
|
+
credential: z.ZodObject<{
|
|
427
|
+
kind: z.ZodEnum<{
|
|
428
|
+
session: "session";
|
|
429
|
+
device: "device";
|
|
430
|
+
}>;
|
|
431
|
+
credentialId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
432
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
433
|
+
device: "device";
|
|
434
|
+
"read-only": "read-only";
|
|
435
|
+
}>>>>;
|
|
436
|
+
scopes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
437
|
+
createdAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
438
|
+
lastUsedAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
439
|
+
idleExpiresAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
440
|
+
}, z.core.$strip>;
|
|
441
|
+
device: z.ZodNullable<z.ZodObject<{
|
|
442
|
+
deviceId: z.ZodString;
|
|
443
|
+
name: z.ZodString;
|
|
444
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
445
|
+
arch: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
446
|
+
cliVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
447
|
+
createdAt: z.ZodOptional<z.ZodISODateTime>;
|
|
448
|
+
lastSeenAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
449
|
+
state: z.ZodCatch<z.ZodEnum<{
|
|
450
|
+
unknown: "unknown";
|
|
451
|
+
active: "active";
|
|
452
|
+
revoked: "revoked";
|
|
453
|
+
"signed-out": "signed-out";
|
|
454
|
+
}>>;
|
|
455
|
+
signedOutAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
456
|
+
certificate: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
457
|
+
profile: z.ZodOptional<z.ZodCatch<z.ZodNullable<z.ZodEnum<{
|
|
458
|
+
device: "device";
|
|
459
|
+
"read-only": "read-only";
|
|
460
|
+
}>>>>;
|
|
461
|
+
current: z.ZodDefault<z.ZodBoolean>;
|
|
462
|
+
projects: z.ZodOptional<z.ZodNumber>;
|
|
463
|
+
replicas: z.ZodOptional<z.ZodNumber>;
|
|
464
|
+
lastSyncAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
465
|
+
lastPresenceAt: z.ZodOptional<z.ZodNullable<z.ZodISODateTime>>;
|
|
466
|
+
}, z.core.$strip>>;
|
|
467
|
+
project: z.ZodNullable<z.ZodObject<{
|
|
468
|
+
projectId: z.ZodString;
|
|
469
|
+
registered: z.ZodBoolean;
|
|
470
|
+
organizationId: z.ZodNullable<z.ZodString>;
|
|
471
|
+
organizationName: z.ZodNullable<z.ZodString>;
|
|
472
|
+
role: z.ZodNullable<z.ZodString>;
|
|
473
|
+
}, z.core.$strip>>;
|
|
474
|
+
replica: z.ZodNullable<z.ZodObject<{
|
|
475
|
+
replicaId: z.ZodString;
|
|
476
|
+
attached: z.ZodBoolean;
|
|
477
|
+
attachedElsewhere: z.ZodBoolean;
|
|
478
|
+
attachedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
479
|
+
lastSyncAt: z.ZodNullable<z.ZodISODateTime>;
|
|
480
|
+
presenceAt: z.ZodNullable<z.ZodISODateTime>;
|
|
481
|
+
lastReplicaSeq: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
482
|
+
}, z.core.$strip>>;
|
|
483
|
+
stream: z.ZodNullable<z.ZodObject<{
|
|
484
|
+
streamId: z.ZodString;
|
|
485
|
+
headSeq: z.ZodNumber;
|
|
486
|
+
headCheckpointId: z.ZodNullable<z.ZodString>;
|
|
487
|
+
openConflicts: z.ZodNumber;
|
|
488
|
+
devices: z.ZodObject<{
|
|
489
|
+
active: z.ZodNumber;
|
|
490
|
+
total: z.ZodNumber;
|
|
491
|
+
}, z.core.$strip>;
|
|
492
|
+
}, z.core.$strip>>;
|
|
493
|
+
checks: z.ZodPipe<z.ZodArray<z.ZodObject<{
|
|
494
|
+
ok: z.ZodBoolean;
|
|
495
|
+
required: z.ZodBoolean;
|
|
496
|
+
detail: z.ZodString;
|
|
497
|
+
id: z.ZodString;
|
|
498
|
+
}, z.core.$strip>>, z.ZodTransform<{
|
|
499
|
+
id: "credential.valid" | "device.registered" | "device.active" | "device.certified" | "project.registered" | "project.writable" | "replica.attached" | "presence.fresh" | "replica.synced" | "conflicts.none";
|
|
500
|
+
ok: boolean;
|
|
501
|
+
required: boolean;
|
|
502
|
+
detail: string;
|
|
503
|
+
}[], {
|
|
504
|
+
ok: boolean;
|
|
505
|
+
required: boolean;
|
|
506
|
+
detail: string;
|
|
507
|
+
id: string;
|
|
508
|
+
}[]>>;
|
|
509
|
+
verdict: z.ZodCatch<z.ZodEnum<{
|
|
510
|
+
attention: "attention";
|
|
511
|
+
ok: "ok";
|
|
512
|
+
"not-linked": "not-linked";
|
|
513
|
+
"not-registered": "not-registered";
|
|
514
|
+
}>>;
|
|
515
|
+
}, z.core.$strip>;
|
|
516
|
+
/** Parsed `CredentialInfo`. */
|
|
517
|
+
export type NexusCloudCredential = z.infer<typeof nexusCloudCredentialSchema>;
|
|
518
|
+
/** Parsed `DeviceView`. */
|
|
519
|
+
export type NexusCloudDevice = z.infer<typeof nexusCloudDeviceSchema>;
|
|
520
|
+
/** Parsed `Whoami`. */
|
|
521
|
+
export type NexusCloudWhoami = z.infer<typeof nexusCloudWhoamiSchema>;
|
|
522
|
+
/** Parsed `ReplicaRow`. */
|
|
523
|
+
export type NexusCloudReplica = z.infer<typeof nexusCloudReplicaSchema>;
|
|
524
|
+
/** Parsed `DeviceCounts`. */
|
|
525
|
+
export type NexusCloudDeviceCounts = z.infer<typeof nexusCloudDeviceCountsSchema>;
|
|
526
|
+
/** Parsed `ProjectListItem`. */
|
|
527
|
+
export type NexusCloudProjectListItem = z.infer<typeof nexusCloudProjectListItemSchema>;
|
|
528
|
+
/** Parsed `ProjectDetail`. */
|
|
529
|
+
export type NexusCloudProjectDetail = z.infer<typeof nexusCloudProjectDetailSchema>;
|
|
530
|
+
/** Parsed `StatusCheck`. */
|
|
531
|
+
export type NexusCloudStatusCheck = z.infer<typeof nexusCloudStatusCheckSchema>;
|
|
532
|
+
/** Parsed `NexusStatus`. */
|
|
533
|
+
export type NexusCloudStatus = z.infer<typeof nexusCloudStatusSchema>;
|
|
534
|
+
/** A non-fatal problem a `cleo cloud` read reports next to its data. */
|
|
535
|
+
export interface CloudWarning {
|
|
536
|
+
/** Stable code, e.g. `W_NEXUS_STATUS_COMPOSED`. */
|
|
537
|
+
code: string;
|
|
538
|
+
/** Human message (never a secret). */
|
|
539
|
+
message: string;
|
|
540
|
+
}
|
|
541
|
+
/** How a list read paged through the server's cursors (§4.0.3). */
|
|
542
|
+
export interface CloudPaging {
|
|
543
|
+
/** Pages fetched. */
|
|
544
|
+
pages: number;
|
|
545
|
+
/** A server hard ceiling cut a response (`truncated` on any page). */
|
|
546
|
+
truncated: boolean;
|
|
547
|
+
/** The client stopped at its page budget while the server still had a `nextCursor`. */
|
|
548
|
+
pageLimitReached: boolean;
|
|
549
|
+
}
|
|
550
|
+
/** `cleo cloud whoami` (operation `cloud.whoami`). */
|
|
551
|
+
export interface CloudWhoamiResult extends NexusCloudWhoami {
|
|
552
|
+
/** API origin asked. */
|
|
553
|
+
apiUrl: string;
|
|
554
|
+
/** Non-fatal problems (logout retries, upgrades). */
|
|
555
|
+
warnings: CloudWarning[];
|
|
556
|
+
}
|
|
557
|
+
/** `cleo cloud devices` (operation `cloud.devices.list`). */
|
|
558
|
+
export interface CloudDevicesResult {
|
|
559
|
+
/** API origin asked. */
|
|
560
|
+
apiUrl: string;
|
|
561
|
+
/** The `state` filter sent, or `null` for the server default (`active` for device callers). */
|
|
562
|
+
state: NexusDeviceListState | null;
|
|
563
|
+
/** Every device across the pages followed, newest first. */
|
|
564
|
+
devices: NexusCloudDevice[];
|
|
565
|
+
/** `devices.length`. */
|
|
566
|
+
count: number;
|
|
567
|
+
/** Paging facts. */
|
|
568
|
+
paging: CloudPaging;
|
|
569
|
+
/** Non-fatal problems. */
|
|
570
|
+
warnings: CloudWarning[];
|
|
571
|
+
}
|
|
572
|
+
/** `cleo cloud projects` (operation `cloud.projects.list`). */
|
|
573
|
+
export interface CloudProjectsResult {
|
|
574
|
+
/** API origin asked. */
|
|
575
|
+
apiUrl: string;
|
|
576
|
+
/** The organization filter sent, or `null`. */
|
|
577
|
+
organizationId: string | null;
|
|
578
|
+
/** Every project across the pages followed, newest first. */
|
|
579
|
+
projects: NexusCloudProjectListItem[];
|
|
580
|
+
/** `projects.length`. */
|
|
581
|
+
count: number;
|
|
582
|
+
/** Paging facts; `truncated` covers project and replica cuts. */
|
|
583
|
+
paging: CloudPaging & {
|
|
584
|
+
/** The project list itself was cut at the server's ceiling. */
|
|
585
|
+
projectsTruncated: boolean;
|
|
586
|
+
};
|
|
587
|
+
/** Non-fatal problems. */
|
|
588
|
+
warnings: CloudWarning[];
|
|
589
|
+
}
|
|
590
|
+
/** `cleo cloud projects show [<id>]` (operation `cloud.projects.show`). */
|
|
591
|
+
export interface CloudProjectShowResult extends NexusCloudProjectDetail {
|
|
592
|
+
/** API origin asked. */
|
|
593
|
+
apiUrl: string;
|
|
594
|
+
/** The project id asked for. */
|
|
595
|
+
projectId: string;
|
|
596
|
+
/** `true` when the id came from the current project rather than the command line. */
|
|
597
|
+
currentProject: boolean;
|
|
598
|
+
/**
|
|
599
|
+
* Paging of the replica list: when E14 cut `replicas` at 50, the rest were
|
|
600
|
+
* fetched from E15 and `replicas` holds them all (up to the page budget).
|
|
601
|
+
*/
|
|
602
|
+
replicaPaging: CloudPaging;
|
|
603
|
+
/** Non-fatal problems. */
|
|
604
|
+
warnings: CloudWarning[];
|
|
605
|
+
}
|
|
606
|
+
/** `CloudStatusSummary` (§4.4): the facts an agent checks. */
|
|
607
|
+
export interface CloudStatusSummary {
|
|
608
|
+
/** A device credential is stored for the origin. */
|
|
609
|
+
signedIn: boolean;
|
|
610
|
+
/** `device.registered` and `device.active` passed. */
|
|
611
|
+
registered: boolean;
|
|
612
|
+
/** The credential's profile. */
|
|
613
|
+
profile: (typeof NEXUS_CLOUD_PROFILES)[number] | null;
|
|
614
|
+
/** The project is registered (and, for the current project, the local link entry exists). */
|
|
615
|
+
linked: boolean;
|
|
616
|
+
/** `replica.attached` passed. */
|
|
617
|
+
replicaAttached: boolean;
|
|
618
|
+
/** Active devices holding this project (`stream.devices.active`). */
|
|
619
|
+
devices: number;
|
|
620
|
+
/** The replica's last presence report. */
|
|
621
|
+
lastPresenceAt: string | null;
|
|
622
|
+
/** The replica's last journal sync. */
|
|
623
|
+
lastSyncAt: string | null;
|
|
624
|
+
/** The project stream's head. */
|
|
625
|
+
headSeq: number | null;
|
|
626
|
+
/** Open conflicts on the project stream. */
|
|
627
|
+
openConflicts: number | null;
|
|
628
|
+
}
|
|
629
|
+
/** `CloudStatusResult.local` (§4.4): what this machine knows. Locations only, never a secret. */
|
|
630
|
+
export interface CloudStatusLocal {
|
|
631
|
+
/** API origin. */
|
|
632
|
+
apiUrl: string;
|
|
633
|
+
/** A device credential is stored for the origin. */
|
|
634
|
+
signedIn: boolean;
|
|
635
|
+
/** This machine's Nexus device id, when enrolled. */
|
|
636
|
+
nexusDeviceId: string | null;
|
|
637
|
+
/** The stored credential's profile. */
|
|
638
|
+
profile: (typeof NEXUS_CLOUD_PROFILES)[number] | null;
|
|
639
|
+
/** The project asked about (`--project`, else the current project), or `null`. */
|
|
640
|
+
projectId: string | null;
|
|
641
|
+
/** The active replica id of the current project's store (read-only; never bound here). */
|
|
642
|
+
replicaId: string | null;
|
|
643
|
+
/** `.cleo/nexus-link.json` when it holds an entry for the origin, else `null`. */
|
|
644
|
+
linkPath: string | null;
|
|
645
|
+
/** The device credential store (`nexus-device.json`). */
|
|
646
|
+
credentialsPath: string;
|
|
647
|
+
}
|
|
648
|
+
/** `CloudStatusResult` (§4.4): the data of the `cloud.status` envelope. */
|
|
649
|
+
export interface CloudStatusResult {
|
|
650
|
+
/** The remote verdict, downgraded by local facts the server cannot see. */
|
|
651
|
+
verdict: CloudStatusVerdict;
|
|
652
|
+
/** The facts an agent checks. */
|
|
653
|
+
summary: CloudStatusSummary;
|
|
654
|
+
/** Local state. */
|
|
655
|
+
local: CloudStatusLocal;
|
|
656
|
+
/** E3's answer (or the same shape composed from E2/E14/E15), or `null` when not signed in. */
|
|
657
|
+
remote: NexusCloudStatus | null;
|
|
658
|
+
/** Non-fatal problems. */
|
|
659
|
+
warnings: CloudWarning[];
|
|
660
|
+
}
|
|
661
|
+
/** `details` of the `E_NEXUS_UNREACHABLE` failure of `cleo cloud status` (§4.4 "Offline"). */
|
|
662
|
+
export interface CloudStatusOfflineDetails {
|
|
663
|
+
/** Local state. */
|
|
664
|
+
local: CloudStatusLocal;
|
|
665
|
+
/** The summary with every remote field null or false. */
|
|
666
|
+
summary: CloudStatusSummary;
|
|
667
|
+
/** Warnings collected before the server stopped answering. */
|
|
668
|
+
warnings: CloudWarning[];
|
|
669
|
+
}
|
|
670
|
+
/** `details.reason` values of a 401 (§4.0.4 `UnauthenticatedReason`). */
|
|
671
|
+
export declare const NEXUS_UNAUTHENTICATED_REASONS: readonly ["missing", "invalid", "credential-revoked", "credential-expired", "device-signed-out", "device-revoked", "session-bearer-retired", "session-used"];
|
|
672
|
+
/** `details.reason` values of a 403 (§4.0.4 `ForbiddenReason`). */
|
|
673
|
+
export declare const NEXUS_FORBIDDEN_REASONS: readonly ["insufficient-scope", "session-required", "device-required", "device-mismatch", "not-self", "project-role", "route-undeclared", "bearer-session-required", "session-not-fresh", "device-limit"];
|
|
674
|
+
/** `details.revokedReason` values of a 401 `credential-revoked` (§4.0.4, v2.11). */
|
|
675
|
+
export declare const NEXUS_REVOKED_REASONS: readonly ["signed-out", "revoked", "rotated", "reenrolled"];
|
|
676
|
+
/** One mapped failure. `message: null` keeps the server's message. */
|
|
677
|
+
export interface NexusErrorMapping {
|
|
678
|
+
/** The CLI's stable code. */
|
|
679
|
+
readonly code: NexusAccountErrorCode;
|
|
680
|
+
/** The CLI's message, or `null` to report the server's. */
|
|
681
|
+
readonly message: string | null;
|
|
682
|
+
/** The remedy, or `null` to report the server's `details.remedy` (if any). */
|
|
683
|
+
readonly fix: string | null;
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* 401 `credential-revoked`, by `details.revokedReason` (§4.0.4 v2.11). An
|
|
687
|
+
* absent or unknown reason maps as `rotated`: a revocation the CLI cannot
|
|
688
|
+
* explain (R2).
|
|
689
|
+
*/
|
|
690
|
+
export declare const NEXUS_REVOKED_REASON_ERRORS: Readonly<Record<(typeof NEXUS_REVOKED_REASONS)[number], NexusErrorMapping>>;
|
|
691
|
+
/** 401 `E_UNAUTHENTICATED`, by `details.reason` (§4.0.4). Unknown reasons map as `invalid`. */
|
|
692
|
+
export declare const NEXUS_UNAUTHENTICATED_ERRORS: Readonly<Record<(typeof NEXUS_UNAUTHENTICATED_REASONS)[number], NexusErrorMapping>>;
|
|
693
|
+
/** 403 `E_FORBIDDEN`, by `details.reason` (§4.0.4). Unknown reasons are reported as sent. */
|
|
694
|
+
export declare const NEXUS_FORBIDDEN_ERRORS: Readonly<Record<(typeof NEXUS_FORBIDDEN_REASONS)[number], NexusErrorMapping>>;
|
|
695
|
+
/**
|
|
696
|
+
* 409 `E_CONFLICT` reasons the CLI reports with their own code (§4.0.4). Every
|
|
697
|
+
* other conflict is either handled inside its flow or reported as
|
|
698
|
+
* `E_NEXUS_REQUEST_FAILED` with the server's message.
|
|
699
|
+
*/
|
|
700
|
+
export declare const NEXUS_CONFLICT_ERRORS: Readonly<Partial<Record<'replica-copied' | 'rotation-conflict', NexusErrorMapping>>>;
|
|
701
|
+
/** No answer at all (network error or timeout, §4.0.4). */
|
|
702
|
+
export declare const NEXUS_UNREACHABLE_ERROR: NexusErrorMapping;
|
|
703
|
+
//# sourceMappingURL=nexus-cloud.d.ts.map
|