@mesadev/sdk 0.42.1 → 0.44.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/dist/api/access-token.d.ts +57 -24
- package/dist/api/access-token.d.ts.map +1 -1
- package/dist/api/access-token.js +137 -19
- package/dist/api/access-token.js.map +1 -1
- package/dist/api/client.d.ts +3 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -19
- package/dist/api/client.js.map +1 -1
- package/dist/api/credentials.d.ts +4 -0
- package/dist/api/credentials.d.ts.map +1 -0
- package/dist/api/credentials.js +8 -0
- package/dist/api/credentials.js.map +1 -0
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/resources.d.ts +61 -29
- package/dist/api/resources.d.ts.map +1 -1
- package/dist/api/resources.js +47 -14
- package/dist/api/resources.js.map +1 -1
- package/dist/api/signing-key.d.ts +15 -0
- package/dist/api/signing-key.d.ts.map +1 -0
- package/dist/api/signing-key.js +38 -0
- package/dist/api/signing-key.js.map +1 -0
- package/dist/fs/index.d.ts +2 -1
- package/dist/fs/index.d.ts.map +1 -1
- package/dist/fs/index.js +1 -0
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/layout.d.ts +87 -0
- package/dist/fs/layout.d.ts.map +1 -0
- package/dist/fs/layout.js +78 -0
- package/dist/fs/layout.js.map +1 -0
- package/dist/fs/mesa-file-system.d.ts +41 -2
- package/dist/fs/mesa-file-system.d.ts.map +1 -1
- package/dist/fs/mesa-file-system.js +23 -5
- package/dist/fs/mesa-file-system.js.map +1 -1
- package/dist/fs/native-loader.d.ts +8 -1
- package/dist/fs/native-loader.d.ts.map +1 -1
- package/dist/fs/native-loader.js +26 -4
- package/dist/fs/native-loader.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +5 -2
- package/dist/lib/errors.js.map +1 -1
- package/dist/mesa.d.ts +163 -23
- package/dist/mesa.d.ts.map +1 -1
- package/dist/mesa.js +302 -45
- package/dist/mesa.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -3
package/dist/mesa.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { normalizeSigningKeyAuthors, signAccessToken, signPrivateKeyAccessToken, toApiRepositoryRestriction, toSignerRepositoryRestriction, } from './api/access-token.js';
|
|
2
3
|
import { createRestClient } from './api/client.js';
|
|
3
4
|
import { createApiResources, } from './api/resources.js';
|
|
5
|
+
import { looksLikePrivateKey } from './api/credentials.js';
|
|
6
|
+
import { parsePrivateKey } from './api/signing-key.js';
|
|
7
|
+
import { createLayout } from './fs/layout.js';
|
|
4
8
|
import { MesaFileSystem, } from './fs/mesa-file-system.js';
|
|
5
9
|
import { InvalidApiUrlError, InvalidOptionsError, MissingCredentialError, OrgResolutionError } from './lib/errors.js';
|
|
6
10
|
const DEFAULT_API_URL = 'https://api.mesa.dev/v1';
|
|
7
11
|
const API_KEY_ENV_VAR = 'MESA_API_KEY';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* key's actual scopes at verify time, so requesting the full set just means "as
|
|
12
|
-
* much as this key allows"; per-repo read-only is enforced client-side.
|
|
13
|
-
*/
|
|
12
|
+
const PRIVATE_KEY_ENV_VAR = 'MESA_PRIVATE_KEY';
|
|
13
|
+
const ACCESS_TOKEN_ORG_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
14
|
+
/** Historical `tokens.create()` default and least-authority MesaFS mount scopes. */
|
|
14
15
|
const DEFAULT_TOKEN_SCOPES = ['read', 'write'];
|
|
16
|
+
const authSchema = z.union([
|
|
17
|
+
z.strictObject({ privateKey: z.string().trim().min(1) }),
|
|
18
|
+
z.strictObject({ accessToken: z.string().trim().min(1) }),
|
|
19
|
+
]);
|
|
15
20
|
function getEnvVar(name) {
|
|
16
21
|
if (typeof process === 'undefined') {
|
|
17
22
|
return undefined;
|
|
@@ -19,6 +24,9 @@ function getEnvVar(name) {
|
|
|
19
24
|
return process.env[name]?.trim();
|
|
20
25
|
}
|
|
21
26
|
function normalizeUrl(input) {
|
|
27
|
+
if (looksLikePrivateKey(input)) {
|
|
28
|
+
throw new InvalidApiUrlError('Mesa private keys cannot be used as URLs');
|
|
29
|
+
}
|
|
22
30
|
let parsed;
|
|
23
31
|
try {
|
|
24
32
|
parsed = new URL(input);
|
|
@@ -32,20 +40,76 @@ function normalizeUrl(input) {
|
|
|
32
40
|
parsed.pathname = parsed.pathname.replace(/\/+$/, '') || '/';
|
|
33
41
|
return parsed.toString().replace(/\/$/, '');
|
|
34
42
|
}
|
|
43
|
+
function normalizeBearerCredential(credential) {
|
|
44
|
+
const normalized = credential.trim();
|
|
45
|
+
if (normalized.length === 0) {
|
|
46
|
+
throw new InvalidOptionsError('Bearer credentials must be non-empty strings.');
|
|
47
|
+
}
|
|
48
|
+
if (looksLikePrivateKey(normalized)) {
|
|
49
|
+
throw new InvalidOptionsError('Received a Mesa private key where a bearer credential was expected. Configure it with `privateKey` or `auth.privateKey`.');
|
|
50
|
+
}
|
|
51
|
+
if (/^Bearer\s+/i.test(normalized)) {
|
|
52
|
+
throw new InvalidOptionsError('Pass only the token or API key value, without the `Bearer` scheme.');
|
|
53
|
+
}
|
|
54
|
+
return normalized;
|
|
55
|
+
}
|
|
56
|
+
function getAccessTokenOrg(token) {
|
|
57
|
+
try {
|
|
58
|
+
const parts = token.split('.');
|
|
59
|
+
if (parts.length !== 3 || parts.some((part) => part.length === 0))
|
|
60
|
+
throw new Error();
|
|
61
|
+
const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
|
|
62
|
+
if (typeof payload.iss !== 'string' || !ACCESS_TOKEN_ORG_PATTERN.test(payload.iss))
|
|
63
|
+
throw new Error();
|
|
64
|
+
return payload.iss;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
throw new InvalidOptionsError('Access tokens must be compact JWTs with a valid organization `iss` claim.');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
35
70
|
/**
|
|
36
|
-
* Resolve
|
|
37
|
-
*
|
|
38
|
-
*
|
|
71
|
+
* Resolve one explicit or environment credential. Explicit credentials never
|
|
72
|
+
* combine, and the existing API-key environment variable remains authoritative
|
|
73
|
+
* during migration when both environment variables are set.
|
|
39
74
|
*/
|
|
40
|
-
function
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
43
|
-
|
|
75
|
+
function resolveCredential(options) {
|
|
76
|
+
const explicitCredentialCount = [options.apiKey, options.privateKey, options.auth].filter((credential) => credential !== undefined).length;
|
|
77
|
+
if (explicitCredentialCount > 1) {
|
|
78
|
+
throw new InvalidOptionsError('Pass exactly one of `apiKey`, `privateKey`, or `auth`.');
|
|
79
|
+
}
|
|
80
|
+
if (options.auth !== undefined) {
|
|
81
|
+
const parsed = authSchema.safeParse(options.auth);
|
|
82
|
+
if (!parsed.success) {
|
|
83
|
+
throw new InvalidOptionsError('`auth` accepts exactly one non-empty `privateKey` or `accessToken`.');
|
|
84
|
+
}
|
|
85
|
+
if ('privateKey' in parsed.data) {
|
|
86
|
+
return { kind: 'privateKey', value: parsePrivateKey(parsed.data.privateKey) };
|
|
87
|
+
}
|
|
88
|
+
const value = normalizeBearerCredential(parsed.data.accessToken);
|
|
89
|
+
return {
|
|
90
|
+
kind: 'accessToken',
|
|
91
|
+
value,
|
|
92
|
+
org: getAccessTokenOrg(value),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (options.privateKey !== undefined) {
|
|
96
|
+
return { kind: 'privateKey', value: parsePrivateKey(options.privateKey) };
|
|
97
|
+
}
|
|
98
|
+
if (options.apiKey !== undefined) {
|
|
99
|
+
return { kind: 'apiKey', value: normalizeBearerCredential(options.apiKey) };
|
|
100
|
+
}
|
|
101
|
+
const environmentApiKey = getEnvVar(API_KEY_ENV_VAR);
|
|
102
|
+
if (environmentApiKey !== undefined) {
|
|
103
|
+
return { kind: 'apiKey', value: normalizeBearerCredential(environmentApiKey) };
|
|
44
104
|
}
|
|
45
|
-
|
|
105
|
+
const environmentPrivateKey = getEnvVar(PRIVATE_KEY_ENV_VAR);
|
|
106
|
+
if (environmentPrivateKey !== undefined) {
|
|
107
|
+
return { kind: 'privateKey', value: parsePrivateKey(environmentPrivateKey) };
|
|
108
|
+
}
|
|
109
|
+
throw new MissingCredentialError(API_KEY_ENV_VAR, PRIVATE_KEY_ENV_VAR);
|
|
46
110
|
}
|
|
47
111
|
export class Mesa {
|
|
48
|
-
/** The API key this client was constructed with. */
|
|
112
|
+
/** The API key this client was constructed with, if it is an API-key client. */
|
|
49
113
|
apiKey;
|
|
50
114
|
apiUrl;
|
|
51
115
|
vcsUrl;
|
|
@@ -69,19 +133,46 @@ export class Mesa {
|
|
|
69
133
|
cachedKeyId = null;
|
|
70
134
|
keyIdResolutionPromise = null;
|
|
71
135
|
constructor(options = {}) {
|
|
72
|
-
|
|
73
|
-
|
|
136
|
+
if (options.authors !== undefined) {
|
|
137
|
+
throw new InvalidOptionsError('The `authors` option is not accepted by the Mesa constructor. Pass authors to the operation instead.');
|
|
138
|
+
}
|
|
139
|
+
const resolvedCredential = resolveCredential(options);
|
|
140
|
+
this.credential = resolvedCredential;
|
|
141
|
+
this.apiKey = resolvedCredential.kind === 'apiKey' ? resolvedCredential.value : undefined;
|
|
74
142
|
this.apiUrl = normalizeUrl(options.apiUrl?.trim() || DEFAULT_API_URL);
|
|
75
143
|
this.vcsUrl = normalizeUrl(options.vcsUrl?.trim() || new URL(this.apiUrl).origin);
|
|
144
|
+
if (options.userAgent && looksLikePrivateKey(options.userAgent)) {
|
|
145
|
+
throw new InvalidOptionsError('User-agent metadata must not contain Mesa private key material.');
|
|
146
|
+
}
|
|
147
|
+
const providedOrg = options.org?.trim();
|
|
148
|
+
if (providedOrg && looksLikePrivateKey(providedOrg)) {
|
|
149
|
+
throw new InvalidOptionsError('Organization options must not contain Mesa private key material.');
|
|
150
|
+
}
|
|
151
|
+
if (resolvedCredential.kind === 'privateKey' && providedOrg && providedOrg !== resolvedCredential.value.org) {
|
|
152
|
+
throw new InvalidOptionsError('The `org` option must match the organization encoded in the private key.');
|
|
153
|
+
}
|
|
154
|
+
if (resolvedCredential.kind === 'accessToken' && providedOrg && providedOrg !== resolvedCredential.org) {
|
|
155
|
+
throw new InvalidOptionsError('The `org` option must match the organization encoded in the access token.');
|
|
156
|
+
}
|
|
76
157
|
this.restClient = createRestClient({
|
|
77
|
-
credential:
|
|
158
|
+
credential: resolvedCredential.kind === 'privateKey'
|
|
159
|
+
? () => signPrivateKeyAccessToken({ credential: resolvedCredential.value }).token
|
|
160
|
+
: resolvedCredential.value,
|
|
78
161
|
apiUrl: this.apiUrl,
|
|
79
162
|
fetch: options.fetch,
|
|
80
163
|
userAgent: options.userAgent,
|
|
81
|
-
vcsUrl: this.vcsUrl,
|
|
82
164
|
});
|
|
83
|
-
|
|
84
|
-
|
|
165
|
+
if (resolvedCredential.kind === 'privateKey') {
|
|
166
|
+
this.cachedOrgSlug = resolvedCredential.value.org;
|
|
167
|
+
this.orgResolutionPromise = Promise.resolve(resolvedCredential.value.org);
|
|
168
|
+
this.whoAmIResolutionPromise = null;
|
|
169
|
+
}
|
|
170
|
+
else if (resolvedCredential.kind === 'accessToken') {
|
|
171
|
+
this.cachedOrgSlug = resolvedCredential.org;
|
|
172
|
+
this.orgResolutionPromise = Promise.resolve(resolvedCredential.org);
|
|
173
|
+
this.whoAmIResolutionPromise = null;
|
|
174
|
+
}
|
|
175
|
+
else if (providedOrg) {
|
|
85
176
|
this.cachedOrgSlug = providedOrg;
|
|
86
177
|
this.orgResolutionPromise = Promise.resolve(providedOrg);
|
|
87
178
|
this.whoAmIResolutionPromise = null;
|
|
@@ -97,6 +188,14 @@ export class Mesa {
|
|
|
97
188
|
resolveOrg: (org) => this.resolveOrg(org),
|
|
98
189
|
webhookSecret: options.webhookSecret,
|
|
99
190
|
signToken: (input) => this.signToken(input),
|
|
191
|
+
requestAttribution: resolvedCredential.kind === 'privateKey'
|
|
192
|
+
? {
|
|
193
|
+
kind: 'private-key',
|
|
194
|
+
sign: (authors) => signPrivateKeyAccessToken({ credential: resolvedCredential.value, authors }).token,
|
|
195
|
+
}
|
|
196
|
+
: resolvedCredential.kind === 'accessToken'
|
|
197
|
+
? { kind: 'fixed-token' }
|
|
198
|
+
: { kind: 'request' },
|
|
100
199
|
});
|
|
101
200
|
this.org = resources.org;
|
|
102
201
|
this.tokens = resources.tokens;
|
|
@@ -108,44 +207,177 @@ export class Mesa {
|
|
|
108
207
|
this.diffs = resources.diffs;
|
|
109
208
|
this.webhookTargets = resources.webhookTargets;
|
|
110
209
|
this.webhooks = resources.webhooks;
|
|
111
|
-
|
|
210
|
+
// Layout minting and mounting are reachable only through a definition;
|
|
211
|
+
// the layout carries no organization, so the client's org scopes both.
|
|
212
|
+
const mintLayoutToken = async (layout, ttl, authors) => {
|
|
213
|
+
// Run the core structural validator before minting so a malformed
|
|
214
|
+
// layout fails here with the mount's own error. Repository names
|
|
215
|
+
// resolve only at mount time — a layout naming a nonexistent
|
|
216
|
+
// repository still mints a token and fails at mount.
|
|
217
|
+
MesaFileSystem.validateLayout(layout.toString());
|
|
218
|
+
const { org, scopes, repos } = await this.deriveLayoutTokenRequest(layout, 'mesa.fs({ layout }).token()');
|
|
219
|
+
const tokenInput = { org, scopes, repos, ttl_seconds: ttl };
|
|
220
|
+
return resources.tokens.create(this.credential.kind === 'privateKey' ? { ...tokenInput, authors: authors } : tokenInput);
|
|
221
|
+
};
|
|
222
|
+
const mountLayout = async (definitionLayout, ttl, authors, options) => {
|
|
223
|
+
const { layout, org, scopes, repos } = await this.deriveLayoutTokenRequest(definitionLayout, 'mesa.fs({ layout }).mount()');
|
|
224
|
+
if (this.credential.kind === 'accessToken') {
|
|
225
|
+
return this.createFs(org, options, this.credential.value, layout);
|
|
226
|
+
}
|
|
227
|
+
// Mint a single access token for the mount's whole lifetime. There is
|
|
228
|
+
// no refresh and no credential hot-swap, so when the token expires the
|
|
229
|
+
// mount expires with it.
|
|
230
|
+
const tokenInput = { org, scopes, repos, ttl_seconds: ttl };
|
|
231
|
+
const token = this.credential.kind === 'privateKey'
|
|
232
|
+
? signPrivateKeyAccessToken({
|
|
233
|
+
credential: this.credential.value,
|
|
234
|
+
authors: authors,
|
|
235
|
+
scopes: tokenInput.scopes,
|
|
236
|
+
repos: tokenInput.repos,
|
|
237
|
+
ttlSeconds: tokenInput.ttl_seconds,
|
|
238
|
+
}).token
|
|
239
|
+
: (await resources.tokens.create(tokenInput)).token;
|
|
240
|
+
return this.createFs(org, options, token, layout);
|
|
241
|
+
};
|
|
242
|
+
const defineLayout = ({ layout, ttl, authors: authorsInput }) => {
|
|
243
|
+
if (layout === undefined) {
|
|
244
|
+
// Catches untyped callers passing a bare path map instead of options.
|
|
245
|
+
throw new InvalidOptionsError("mesa.fs() requires a 'layout'");
|
|
246
|
+
}
|
|
247
|
+
const authors = authorsInput === undefined ? undefined : normalizeSigningKeyAuthors(authorsInput);
|
|
248
|
+
if (this.credential.kind === 'privateKey' && authors === undefined) {
|
|
249
|
+
throw new InvalidOptionsError('Private-key layout definitions require a nonempty `authors` option.');
|
|
250
|
+
}
|
|
251
|
+
if (this.credential.kind !== 'privateKey' && authors !== undefined) {
|
|
252
|
+
throw new InvalidOptionsError('Layout authors require a private-key client.');
|
|
253
|
+
}
|
|
254
|
+
if (this.credential.kind === 'accessToken' && ttl !== undefined) {
|
|
255
|
+
throw new InvalidOptionsError('The lifetime of an existing access token cannot be changed.');
|
|
256
|
+
}
|
|
257
|
+
// Built eagerly, so an invalid record fails here at definition time.
|
|
258
|
+
const prepared = createLayout(layout);
|
|
259
|
+
const definition = {
|
|
260
|
+
layout: () => prepared,
|
|
261
|
+
mount: (options = {}) => mountLayout(prepared, ttl, authors, options),
|
|
262
|
+
token: () => mintLayoutToken(prepared, ttl, authors),
|
|
263
|
+
};
|
|
264
|
+
return definition;
|
|
265
|
+
};
|
|
266
|
+
this.fs = Object.assign(defineLayout, {
|
|
267
|
+
/**
|
|
268
|
+
* Canonical mount profile: mount exactly the listed repositories at
|
|
269
|
+
* their `/org/repo` paths with explicit repo visibility, a name-scoped
|
|
270
|
+
* token, and offline signing with no name→id resolution round-trip.
|
|
271
|
+
* Layouts mount through a definition: `mesa.fs({ layout }).mount()`.
|
|
272
|
+
*/
|
|
112
273
|
mount: async (fsOptions) => {
|
|
113
|
-
|
|
274
|
+
const authors = fsOptions.authors === undefined ? undefined : normalizeSigningKeyAuthors(fsOptions.authors);
|
|
275
|
+
if (this.credential.kind === 'privateKey' && authors === undefined) {
|
|
276
|
+
throw new InvalidOptionsError('Private-key mounts require a nonempty `authors` option.');
|
|
277
|
+
}
|
|
278
|
+
if (this.credential.kind !== 'privateKey' && authors !== undefined) {
|
|
279
|
+
throw new InvalidOptionsError('Mount authors require a private-key client.');
|
|
280
|
+
}
|
|
281
|
+
const canonicalRepos = fsOptions.repos;
|
|
282
|
+
if (canonicalRepos === undefined) {
|
|
283
|
+
// Untyped callers may still pass the retired layout form.
|
|
284
|
+
throw new InvalidOptionsError('mesa.fs.mount() mounts the canonical repos profile; mount a layout with mesa.fs({ layout }).mount()');
|
|
285
|
+
}
|
|
286
|
+
if (canonicalRepos.length === 0) {
|
|
114
287
|
throw new InvalidOptionsError('mesa.fs.mount() requires at least one repo');
|
|
115
288
|
}
|
|
116
289
|
const org = await this.resolveOrg();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const { token } = await this.tokens.create({
|
|
290
|
+
if (this.credential.kind === 'accessToken') {
|
|
291
|
+
if (fsOptions.ttl !== undefined) {
|
|
292
|
+
throw new InvalidOptionsError('The lifetime of an existing access token cannot be changed by `fs.mount()`.');
|
|
293
|
+
}
|
|
294
|
+
return this.createFs(org, fsOptions, this.credential.value);
|
|
295
|
+
}
|
|
296
|
+
const tokenInput = {
|
|
125
297
|
org,
|
|
126
298
|
scopes: DEFAULT_TOKEN_SCOPES,
|
|
127
|
-
repos,
|
|
128
|
-
ttl_seconds: fsOptions.ttl
|
|
129
|
-
}
|
|
299
|
+
repos: canonicalRepos.map((r) => `${org}/${r.name}`),
|
|
300
|
+
ttl_seconds: fsOptions.ttl,
|
|
301
|
+
};
|
|
302
|
+
const token = this.credential.kind === 'privateKey'
|
|
303
|
+
? signPrivateKeyAccessToken({
|
|
304
|
+
credential: this.credential.value,
|
|
305
|
+
authors: authors,
|
|
306
|
+
scopes: tokenInput.scopes,
|
|
307
|
+
repos: tokenInput.repos,
|
|
308
|
+
ttlSeconds: tokenInput.ttl_seconds,
|
|
309
|
+
}).token
|
|
310
|
+
: (await resources.tokens.create(tokenInput)).token;
|
|
130
311
|
return this.createFs(org, fsOptions, token);
|
|
131
312
|
},
|
|
132
|
-
};
|
|
313
|
+
});
|
|
133
314
|
}
|
|
134
|
-
createFs(org, fsOptions, credential) {
|
|
135
|
-
const
|
|
315
|
+
createFs(org, fsOptions, credential, layout) {
|
|
316
|
+
const base = {
|
|
136
317
|
org,
|
|
137
318
|
credential,
|
|
138
|
-
repos: fsOptions.repos,
|
|
139
319
|
cache: fsOptions.cache,
|
|
140
320
|
apiBaseUrl: this.apiUrl,
|
|
141
321
|
vcsUrl: this.vcsUrl,
|
|
142
322
|
telemetry: fsOptions.telemetry,
|
|
143
323
|
};
|
|
324
|
+
// The canonical repos profile keeps explicit repo visibility; the layout
|
|
325
|
+
// profile presents exactly the composed workspace, replacing the
|
|
326
|
+
// canonical browse tree, so per-repo visibility does not apply.
|
|
327
|
+
const config = layout !== undefined
|
|
328
|
+
? { ...base, repos: [], layout, mountedRepos: 'all' }
|
|
329
|
+
: { ...base, repos: fsOptions.repos ?? [], mountedRepos: (fsOptions.repos ?? []).map((repo) => repo.name) };
|
|
144
330
|
return MesaFileSystem.create(config);
|
|
145
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Derive the least-privilege token request for a layout: its repositories
|
|
334
|
+
* collected from every declaration and scoped by name (signed offline, no
|
|
335
|
+
* repository lookup), plus the narrowest scopes the declared modes allow.
|
|
336
|
+
* Shared by the definition's `mount()` and `token()` so the derivation
|
|
337
|
+
* exists exactly once.
|
|
338
|
+
*/
|
|
339
|
+
async deriveLayoutTokenRequest(layout, caller) {
|
|
340
|
+
// The layout carries no organization of its own; the client's
|
|
341
|
+
// organization scopes the token.
|
|
342
|
+
const org = await this.resolveOrg();
|
|
343
|
+
const declarations = [];
|
|
344
|
+
const visit = (entries) => {
|
|
345
|
+
for (const entry of Object.values(entries)) {
|
|
346
|
+
for (const declaration of Array.isArray(entry) ? entry : [entry]) {
|
|
347
|
+
declarations.push(declaration);
|
|
348
|
+
if (declaration.subPaths)
|
|
349
|
+
visit(declaration.subPaths);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
// The spec is a pure path map: every key is a declaration entry.
|
|
354
|
+
visit(layout.spec);
|
|
355
|
+
if (declarations.length === 0) {
|
|
356
|
+
throw new InvalidOptionsError(`${caller} requires at least one layout repository`);
|
|
357
|
+
}
|
|
358
|
+
const repos = [...new Set(declarations.map((declaration) => `${org}/${declaration.name}`))];
|
|
359
|
+
const scopes = declarations.some((declaration) => declaration.mode === 'rw') ? [...DEFAULT_TOKEN_SCOPES] : ['read'];
|
|
360
|
+
return { layout, org, scopes, repos };
|
|
361
|
+
}
|
|
146
362
|
async resolveOrg(org) {
|
|
147
|
-
|
|
148
|
-
|
|
363
|
+
const requestedOrg = org?.trim();
|
|
364
|
+
if (requestedOrg && looksLikePrivateKey(requestedOrg)) {
|
|
365
|
+
throw new InvalidOptionsError('Organization options must not contain Mesa private key material.');
|
|
366
|
+
}
|
|
367
|
+
if (this.credential.kind === 'privateKey') {
|
|
368
|
+
if (requestedOrg && requestedOrg !== this.credential.value.org) {
|
|
369
|
+
throw new InvalidOptionsError('Private-key clients are bound to the organization encoded in the key.');
|
|
370
|
+
}
|
|
371
|
+
return this.credential.value.org;
|
|
372
|
+
}
|
|
373
|
+
if (this.credential.kind === 'accessToken') {
|
|
374
|
+
if (requestedOrg && requestedOrg !== this.credential.org) {
|
|
375
|
+
throw new InvalidOptionsError('Access-token clients are bound to the organization encoded in the token.');
|
|
376
|
+
}
|
|
377
|
+
return this.credential.org;
|
|
378
|
+
}
|
|
379
|
+
if (requestedOrg) {
|
|
380
|
+
return requestedOrg;
|
|
149
381
|
}
|
|
150
382
|
if (this.cachedOrgSlug) {
|
|
151
383
|
return this.cachedOrgSlug;
|
|
@@ -201,21 +433,46 @@ export class Mesa {
|
|
|
201
433
|
});
|
|
202
434
|
return this.keyIdResolutionPromise;
|
|
203
435
|
}
|
|
204
|
-
/** Sign an access token locally from the
|
|
436
|
+
/** Sign an access token locally from the credential this client holds. */
|
|
205
437
|
async signToken(input) {
|
|
438
|
+
if (this.credential.kind === 'privateKey') {
|
|
439
|
+
if (input.authors === undefined) {
|
|
440
|
+
throw new InvalidOptionsError('Private-key tokens require a nonempty `authors` option.');
|
|
441
|
+
}
|
|
442
|
+
const signed = signPrivateKeyAccessToken({
|
|
443
|
+
credential: this.credential.value,
|
|
444
|
+
authors: input.authors,
|
|
445
|
+
scopes: input.scopes ?? [...DEFAULT_TOKEN_SCOPES],
|
|
446
|
+
ttlSeconds: input.ttl_seconds,
|
|
447
|
+
...toSignerRepositoryRestriction(input),
|
|
448
|
+
});
|
|
449
|
+
return {
|
|
450
|
+
token: signed.token,
|
|
451
|
+
expires_at: signed.expiresAt,
|
|
452
|
+
scopes: signed.scopes,
|
|
453
|
+
...toApiRepositoryRestriction(signed),
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
if (this.credential.kind === 'accessToken') {
|
|
457
|
+
throw new InvalidOptionsError('Access-token clients cannot mint another access token. Use an API key or private key.');
|
|
458
|
+
}
|
|
459
|
+
if (input.authors !== undefined) {
|
|
460
|
+
throw new InvalidOptionsError('Private-key access tokens can only be minted with a private key.');
|
|
461
|
+
}
|
|
206
462
|
const keyId = await this.resolveKeyId();
|
|
463
|
+
const repositoryRestriction = toSignerRepositoryRestriction(input);
|
|
207
464
|
const signed = signAccessToken({
|
|
208
465
|
apiKeyId: keyId,
|
|
209
|
-
rawApiKey: this.
|
|
466
|
+
rawApiKey: this.credential.value,
|
|
210
467
|
scopes: input.scopes ?? [...DEFAULT_TOKEN_SCOPES],
|
|
211
|
-
repos: input.repos ?? null,
|
|
212
468
|
ttlSeconds: input.ttl_seconds,
|
|
469
|
+
...repositoryRestriction,
|
|
213
470
|
});
|
|
214
471
|
return {
|
|
215
472
|
token: signed.token,
|
|
216
473
|
expires_at: signed.expiresAt,
|
|
217
474
|
scopes: signed.scopes,
|
|
218
|
-
|
|
475
|
+
...toApiRepositoryRestriction(signed),
|
|
219
476
|
};
|
|
220
477
|
}
|
|
221
478
|
async resolveOrgFromWhoAmI(whoAmIPromise) {
|
package/dist/mesa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesa.js","sourceRoot":"","sources":["../src/mesa.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesa.js","sourceRoot":"","sources":["../src/mesa.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.
|
|
1
|
+
export declare const SDK_VERSION = "0.44.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesadev/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Official Mesa TypeScript SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"node": ">=18"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@mesadev/mesafs-napi": "0.
|
|
29
|
-
"@mesadev/rest": "0.
|
|
28
|
+
"@mesadev/mesafs-napi": "0.44.0",
|
|
29
|
+
"@mesadev/rest": "0.44.0",
|
|
30
30
|
"just-bash": "^2.13.0",
|
|
31
31
|
"zod": "^4.3.6"
|
|
32
32
|
},
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
"scripts": {
|
|
45
45
|
"stamp:version": "node scripts/stamp-version.mjs",
|
|
46
46
|
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
47
|
+
"test": "pnpm run test:unit",
|
|
48
|
+
"test:unit": "pnpm run stamp:version && vitest run",
|
|
47
49
|
"clean": "rm -rf dist",
|
|
48
50
|
"build": "pnpm run stamp:version && pnpm run clean && pnpm --dir ../rest/ts run build && tsc -b tsconfig.build.json"
|
|
49
51
|
}
|