@mesadev/sdk 0.47.2 → 0.48.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/README.md +21 -25
- package/dist/api/access-token.d.ts +24 -41
- package/dist/api/access-token.d.ts.map +1 -1
- package/dist/api/access-token.js +119 -71
- package/dist/api/access-token.js.map +1 -1
- package/dist/api/client.d.ts +2 -2
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +3 -3
- package/dist/api/client.js.map +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/{signing-key.d.ts → private-key.d.ts} +1 -1
- package/dist/api/{signing-key.d.ts.map → private-key.d.ts.map} +1 -1
- package/dist/api/{signing-key.js → private-key.js} +1 -1
- package/dist/api/{signing-key.js.map → private-key.js.map} +1 -1
- package/dist/api/repo-tag-filter.d.ts +1 -1
- package/dist/api/repo-tag-filter.d.ts.map +1 -1
- package/dist/api/repo-tag-filter.js +3 -1
- package/dist/api/repo-tag-filter.js.map +1 -1
- package/dist/api/resources.d.ts +25 -66
- package/dist/api/resources.d.ts.map +1 -1
- package/dist/api/resources.js +24 -41
- package/dist/api/resources.js.map +1 -1
- package/dist/fs/index.d.ts +1 -1
- package/dist/fs/index.d.ts.map +1 -1
- package/dist/fs/index.js +1 -1
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/layout.d.ts +7 -25
- package/dist/fs/layout.d.ts.map +1 -1
- package/dist/fs/layout.js +2 -40
- package/dist/fs/layout.js.map +1 -1
- package/dist/fs/mesa-file-system.d.ts +37 -36
- package/dist/fs/mesa-file-system.d.ts.map +1 -1
- package/dist/fs/mesa-file-system.js +66 -30
- package/dist/fs/mesa-file-system.js.map +1 -1
- package/dist/fs/native-loader.d.ts +3 -4
- package/dist/fs/native-loader.d.ts.map +1 -1
- package/dist/fs/native-loader.js.map +1 -1
- package/dist/fs/search-rg.d.ts +132 -0
- package/dist/fs/search-rg.d.ts.map +1 -0
- package/dist/fs/search-rg.js +451 -0
- package/dist/fs/search-rg.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/errors.d.ts +5 -2
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +10 -4
- package/dist/lib/errors.js.map +1 -1
- package/dist/mesa.d.ts +29 -97
- package/dist/mesa.d.ts.map +1 -1
- package/dist/mesa.js +75 -153
- package/dist/mesa.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webhooks/schemas.d.ts +20 -20
- package/dist/webhooks/schemas.d.ts.map +1 -1
- package/dist/webhooks/schemas.js +8 -1
- package/dist/webhooks/schemas.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -17,17 +17,11 @@ bun add @mesadev/sdk
|
|
|
17
17
|
```ts
|
|
18
18
|
import { Mesa } from '@mesadev/sdk';
|
|
19
19
|
|
|
20
|
-
const mesa = new Mesa({
|
|
21
|
-
privateKey: process.env.MESA_PRIVATE_KEY,
|
|
22
|
-
});
|
|
20
|
+
const mesa = new Mesa({ privateKey: process.env.MESA_PRIVATE_KEY });
|
|
23
21
|
|
|
24
22
|
// The organization comes from the key, so there is nothing to pass.
|
|
25
23
|
const repo = await mesa.repos.create({ name: 'my-repo' });
|
|
26
24
|
|
|
27
|
-
// Somewhere you trust less, use a short-lived token instead of the key.
|
|
28
|
-
const scoped = new Mesa({ auth: { accessToken } });
|
|
29
|
-
await scoped.repos.list();
|
|
30
|
-
|
|
31
25
|
console.log(repo.name);
|
|
32
26
|
```
|
|
33
27
|
|
|
@@ -35,33 +29,38 @@ This package exposes org-inferred REST resources under `mesa.*`.
|
|
|
35
29
|
|
|
36
30
|
## Configuration
|
|
37
31
|
|
|
38
|
-
`Mesa` accepts
|
|
32
|
+
`Mesa` accepts one optional configuration object. When `privateKey` is omitted, the SDK reads `MESA_PRIVATE_KEY` in Node.
|
|
39
33
|
|
|
40
|
-
- `privateKey?: string`
|
|
41
|
-
- `auth?: { privateKey } | { accessToken }`
|
|
34
|
+
- `privateKey?: string`
|
|
42
35
|
- `apiUrl?: string` (defaults to `https://api.mesa.dev/v1`)
|
|
43
36
|
- `fetch?: typeof fetch`
|
|
44
37
|
- `userAgent?: string`
|
|
45
38
|
- `webhookSecret?: string` (used by `mesa.webhooks.receive(...)`)
|
|
46
39
|
|
|
47
|
-
|
|
40
|
+
The private key names its organization, so the client picks it up from the key.
|
|
48
41
|
|
|
49
|
-
|
|
42
|
+
### Layout-scoped access tokens
|
|
50
43
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Mint a token in your trusted process and hand only that token to the sandbox or job that needs it:
|
|
44
|
+
Build a filesystem layout in your trusted process, then hand the sandbox only its serialized layout and short-lived token:
|
|
54
45
|
|
|
55
46
|
```ts
|
|
56
|
-
|
|
47
|
+
import { repo } from '@mesadev/sdk';
|
|
48
|
+
|
|
49
|
+
const definition = mesa.fs({
|
|
50
|
+
layout: {
|
|
51
|
+
'/workspace': repo('agent-workspace', { mode: 'rw' }),
|
|
52
|
+
},
|
|
57
53
|
authors: [{ name: 'Mesa Bot', email: 'mesa-bot@example.com' }],
|
|
58
|
-
|
|
59
|
-
repos: ['acme/agent-workspace'],
|
|
60
|
-
ttl_seconds: 60 * 60, // 1 hour
|
|
54
|
+
ttl: 60 * 60, // 1 hour
|
|
61
55
|
});
|
|
56
|
+
|
|
57
|
+
const { token } = await definition.token();
|
|
58
|
+
const layoutJson = JSON.stringify(definition.layout(), null, 2);
|
|
62
59
|
```
|
|
63
60
|
|
|
64
|
-
|
|
61
|
+
Write `layoutJson` to `layout.json` in the receiving environment, set `MESA_ACCESS_TOKEN` to `token`, and run `mesa mount --layout=layout.json`. A `ro` layout declaration grants `read-repo`; `rw` grants `write-repo`. Repositories outside the layout are not accessible.
|
|
62
|
+
|
|
63
|
+
An access token lasts 15 minutes by default and can be given up to 4 hours. Pass scoped tokens to the Mesa CLI, MesaFS, or direct REST requests instead of constructing a TypeScript SDK client with them.
|
|
65
64
|
|
|
66
65
|
## Webhook Handlers
|
|
67
66
|
|
|
@@ -73,10 +72,7 @@ parses the payload, and dispatches any registered handlers.
|
|
|
73
72
|
import { Hono } from 'hono';
|
|
74
73
|
import { Mesa } from '@mesadev/sdk';
|
|
75
74
|
|
|
76
|
-
const mesa = new Mesa({
|
|
77
|
-
privateKey: process.env.MESA_PRIVATE_KEY,
|
|
78
|
-
webhookSecret: process.env.MESA_WEBHOOK_SECRET,
|
|
79
|
-
});
|
|
75
|
+
const mesa = new Mesa({ privateKey: process.env.MESA_PRIVATE_KEY, webhookSecret: process.env.MESA_WEBHOOK_SECRET });
|
|
80
76
|
|
|
81
77
|
mesa.webhooks.on('push', (event) => {
|
|
82
78
|
console.log('push:', event.data.updates[0]?.ref);
|
|
@@ -104,5 +100,5 @@ Use `@mesadev/rest` directly, or call the API with your own HTTP client, when yo
|
|
|
104
100
|
If you previously used the older generated `@mesadev/sdk` package:
|
|
105
101
|
|
|
106
102
|
- use `apiUrl` instead of `serverURL`
|
|
107
|
-
- use the organization encoded in the private key
|
|
103
|
+
- use the organization encoded in the private key
|
|
108
104
|
- use resource namespaces (`mesa.repos`, `mesa.changes`, etc.); install `@mesadev/rest` directly when you need generated REST operations
|
|
@@ -1,61 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Local access-token signing for Ed25519
|
|
2
|
+
* Local access-token signing for Ed25519 private keys. Tokens are
|
|
3
3
|
* produced entirely offline with no network round trip.
|
|
4
4
|
*
|
|
5
|
-
* This is the SDK-side counterpart to the server
|
|
6
|
-
* `packages/core/src/auth/
|
|
7
|
-
*
|
|
8
|
-
* not affect verification.
|
|
5
|
+
* This is the SDK-side counterpart to the server implementation in
|
|
6
|
+
* `packages/core/src/auth/access-token.ts`. JSON key order does not
|
|
7
|
+
* affect verification.
|
|
9
8
|
*
|
|
10
9
|
* Implemented with `node:crypto` only so the published SDK retains Node 18
|
|
11
10
|
* support without adding a JWT dependency.
|
|
12
11
|
*/
|
|
13
12
|
import { z } from 'zod';
|
|
14
|
-
import type { PrivateKeyCredential } from './
|
|
15
|
-
declare const
|
|
13
|
+
import type { PrivateKeyCredential } from './private-key.js';
|
|
14
|
+
declare const accessTokenAuthorSchema: z.ZodObject<{
|
|
16
15
|
name: z.ZodString;
|
|
17
16
|
email: z.ZodPipe<z.ZodDefault<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null>>;
|
|
18
17
|
}, z.core.$strip>;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
[Key in NameField]?: never;
|
|
28
|
-
} & {
|
|
29
|
-
[Key in IdField]: string[] | null;
|
|
30
|
-
};
|
|
31
|
-
export type RepositoryRestriction<NameField extends string = 'repos', IdField extends string = 'repoIds'> = RepositoryNameRestriction<NameField, IdField> | RepositoryIdRestriction<NameField, IdField>;
|
|
32
|
-
export type OptionalRepositoryRestriction<NameField extends string, IdField extends string> = Partial<RepositoryNameRestriction<NameField, IdField>> | RepositoryIdRestriction<NameField, IdField>;
|
|
33
|
-
export type ApiRepositoryRestriction = OptionalRepositoryRestriction<'repos', 'repo_ids'>;
|
|
34
|
-
type SignedAccessToken = {
|
|
18
|
+
declare const accessTokenAccessLevelSchema: z.ZodEnum<{
|
|
19
|
+
"read-repo": "read-repo";
|
|
20
|
+
"write-repo": "write-repo";
|
|
21
|
+
}>;
|
|
22
|
+
export type Author = z.input<typeof accessTokenAuthorSchema>;
|
|
23
|
+
type AccessTokenAccessInput = Readonly<Record<string, z.input<typeof accessTokenAccessLevelSchema>>>;
|
|
24
|
+
export declare function normalizeAccessTokenAuthors(authors: readonly Author[]): readonly [z.output<typeof accessTokenAuthorSchema>, ...z.output<typeof accessTokenAuthorSchema>[]];
|
|
25
|
+
type SignedPrivateKeyAccessToken = {
|
|
35
26
|
token: string;
|
|
36
27
|
/** Exact expiry as an ISO 8601 string. */
|
|
37
28
|
expiresAt: string;
|
|
38
|
-
/** Effective scopes encoded into the token. */
|
|
39
|
-
scopes: string[];
|
|
40
|
-
/** Backward-compatible name restriction, when used. */
|
|
41
|
-
repos?: string[] | null;
|
|
42
|
-
/** Canonical repository-ID restriction, when used. */
|
|
43
|
-
repoIds?: string[] | null;
|
|
44
29
|
/** The token's unique id (`jti`), for auditing without re-decoding the JWT. */
|
|
45
30
|
jti: string;
|
|
46
31
|
};
|
|
47
|
-
type
|
|
48
|
-
|
|
49
|
-
authors?: readonly [
|
|
50
|
-
/** Defaults to organization-root admin authority. */
|
|
51
|
-
scopes?: string[];
|
|
32
|
+
type SignAutomaticPrivateKeyAccessTokenInput = {
|
|
33
|
+
privateKey: PrivateKeyCredential;
|
|
34
|
+
authors?: readonly [Author, ...Author[]];
|
|
52
35
|
ttlSeconds?: number;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
/** Sign
|
|
59
|
-
export declare function
|
|
36
|
+
} & ({
|
|
37
|
+
admin: true;
|
|
38
|
+
} | {
|
|
39
|
+
access: AccessTokenAccessInput;
|
|
40
|
+
});
|
|
41
|
+
/** Sign an automatic request or MesaFS access token. */
|
|
42
|
+
export declare function signAutomaticPrivateKeyAccessToken(input: SignAutomaticPrivateKeyAccessTokenInput): SignedPrivateKeyAccessToken;
|
|
60
43
|
export {};
|
|
61
44
|
//# sourceMappingURL=access-token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-token.d.ts","sourceRoot":"","sources":["../../src/api/access-token.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"access-token.d.ts","sourceRoot":"","sources":["../../src/api/access-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAuB7D,QAAA,MAAM,uBAAuB;;;iBAuB3B,CAAC;AAUH,QAAA,MAAM,4BAA4B;;;EAAsC,CAAC;AAgDzE,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC7D,KAAK,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAErG,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,EAAE,CAAC,CASpG;AA6BD,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,uCAAuC,GAAG;IAC7C,UAAU,EAAE,oBAAoB,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAAC;AAgD3D,wDAAwD;AACxD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,uCAAuC,GAC7C,2BAA2B,CAO7B"}
|
package/dist/api/access-token.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Local access-token signing for Ed25519
|
|
2
|
+
* Local access-token signing for Ed25519 private keys. Tokens are
|
|
3
3
|
* produced entirely offline with no network round trip.
|
|
4
4
|
*
|
|
5
|
-
* This is the SDK-side counterpart to the server
|
|
6
|
-
* `packages/core/src/auth/
|
|
7
|
-
*
|
|
8
|
-
* not affect verification.
|
|
5
|
+
* This is the SDK-side counterpart to the server implementation in
|
|
6
|
+
* `packages/core/src/auth/access-token.ts`. JSON key order does not
|
|
7
|
+
* affect verification.
|
|
9
8
|
*
|
|
10
9
|
* Implemented with `node:crypto` only so the published SDK retains Node 18
|
|
11
10
|
* support without adding a JWT dependency.
|
|
@@ -20,37 +19,92 @@ import { looksLikePrivateKey } from './credentials.js';
|
|
|
20
19
|
const ACCESS_TOKEN_AUD = 'mesa-api';
|
|
21
20
|
/** JOSE `typ` header (RFC 9068 style) distinguishing access tokens. */
|
|
22
21
|
const ACCESS_TOKEN_TYP = 'mesa-at+jwt';
|
|
23
|
-
/** Default and maximum lifetimes accepted by the
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
22
|
+
/** Default and maximum lifetimes accepted by the access-token verifier. */
|
|
23
|
+
const ACCESS_TOKEN_DEFAULT_TTL_SECONDS = 15 * 60; // 15 minutes
|
|
24
|
+
const ACCESS_TOKEN_MAX_TTL_SECONDS = 4 * 60 * 60; // 4 hours
|
|
25
|
+
const MAX_ACCESS_TOKEN_AUTHORS = 100;
|
|
26
|
+
const MAX_ACCESS_TOKEN_ACCESS_ENTRIES = 250;
|
|
27
|
+
const REPOSITORY_NAME_PATTERN = /^[A-Za-z0-9._-]{1,100}$/;
|
|
28
|
+
const RESERVED_REPOSITORY_NAMES = new Set(['repo', 'repos', 'api-key', 'api-keys']);
|
|
29
|
+
function isValidRepositoryName(name) {
|
|
30
|
+
if (!REPOSITORY_NAME_PATTERN.test(name) || name === '.' || name === '..')
|
|
31
|
+
return false;
|
|
32
|
+
const lowerName = name.toLowerCase();
|
|
33
|
+
return !lowerName.endsWith('.git') && !RESERVED_REPOSITORY_NAMES.has(lowerName);
|
|
34
|
+
}
|
|
35
|
+
const accessTokenAuthorSchema = z.object({
|
|
29
36
|
name: z
|
|
30
37
|
.string()
|
|
31
38
|
.trim()
|
|
32
39
|
.min(1, { error: 'Author names must not be blank.' })
|
|
33
40
|
.refine((name) => !/[<>\r\n]/.test(name), {
|
|
34
41
|
error: 'Author names must not contain angle brackets or newlines.',
|
|
42
|
+
})
|
|
43
|
+
.refine((name) => !looksLikePrivateKey(name), {
|
|
44
|
+
error: 'Author names must not contain Mesa private keys.',
|
|
35
45
|
}),
|
|
36
46
|
email: z
|
|
37
47
|
.string()
|
|
38
48
|
.trim()
|
|
39
49
|
.refine((email) => !/[<>\r\n]/.test(email), {
|
|
40
50
|
error: 'Author emails must not contain angle brackets or newlines.',
|
|
51
|
+
})
|
|
52
|
+
.refine((email) => !looksLikePrivateKey(email), {
|
|
53
|
+
error: 'Author emails must not contain Mesa private keys.',
|
|
41
54
|
})
|
|
42
55
|
.nullable()
|
|
43
56
|
.default(null)
|
|
44
57
|
.transform((email) => email || null),
|
|
45
58
|
});
|
|
46
|
-
const
|
|
47
|
-
.
|
|
48
|
-
.
|
|
49
|
-
error: '
|
|
59
|
+
const accessTokenAccessRepositorySchema = z
|
|
60
|
+
.string()
|
|
61
|
+
.refine((repo) => !looksLikePrivateKey(repo), {
|
|
62
|
+
error: 'Token access repos must not contain Mesa private keys.',
|
|
50
63
|
})
|
|
51
|
-
.
|
|
52
|
-
|
|
53
|
-
|
|
64
|
+
.refine((repo) => isValidRepositoryName(repo), {
|
|
65
|
+
error: 'Token access repos must be valid bare repository names.',
|
|
66
|
+
});
|
|
67
|
+
const accessTokenAccessLevelSchema = z.enum(['read-repo', 'write-repo']);
|
|
68
|
+
const accessTokenAccessSchema = z.unknown().transform((access, context) => {
|
|
69
|
+
if (access === null || typeof access !== 'object' || Array.isArray(access)) {
|
|
70
|
+
context.addIssue({ code: 'custom', message: 'Token access must be a repository permission map.' });
|
|
71
|
+
return z.NEVER;
|
|
72
|
+
}
|
|
73
|
+
const entries = Object.entries(access);
|
|
74
|
+
if (entries.length === 0) {
|
|
75
|
+
context.addIssue({ code: 'custom', message: 'Token access must include at least one repository.' });
|
|
76
|
+
return z.NEVER;
|
|
77
|
+
}
|
|
78
|
+
if (entries.length > MAX_ACCESS_TOKEN_ACCESS_ENTRIES) {
|
|
79
|
+
context.addIssue({
|
|
80
|
+
code: 'custom',
|
|
81
|
+
message: `Token access must include at most ${MAX_ACCESS_TOKEN_ACCESS_ENTRIES} repositories.`,
|
|
82
|
+
});
|
|
83
|
+
return z.NEVER;
|
|
84
|
+
}
|
|
85
|
+
const parsedEntries = [];
|
|
86
|
+
for (const [repo, level] of entries) {
|
|
87
|
+
const parsedRepo = accessTokenAccessRepositorySchema.safeParse(repo);
|
|
88
|
+
if (!parsedRepo.success) {
|
|
89
|
+
context.addIssue({ code: 'custom', path: [repo], message: parsedRepo.error.issues[0].message });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const parsedLevel = accessTokenAccessLevelSchema.safeParse(level);
|
|
93
|
+
if (!parsedLevel.success) {
|
|
94
|
+
context.addIssue({ code: 'custom', path: [repo], message: parsedLevel.error.issues[0].message });
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
parsedEntries.push([parsedRepo.data, parsedLevel.data]);
|
|
98
|
+
}
|
|
99
|
+
return Object.fromEntries(parsedEntries);
|
|
100
|
+
});
|
|
101
|
+
const accessTokenAuthorsSchema = z
|
|
102
|
+
.array(accessTokenAuthorSchema)
|
|
103
|
+
.min(1, { error: 'At least one author is required.' })
|
|
104
|
+
.max(MAX_ACCESS_TOKEN_AUTHORS, { error: `At most ${MAX_ACCESS_TOKEN_AUTHORS} authors are allowed.` });
|
|
105
|
+
const accessTokenTtlSchema = z.int().min(1).max(ACCESS_TOKEN_MAX_TTL_SECONDS).default(ACCESS_TOKEN_DEFAULT_TTL_SECONDS);
|
|
106
|
+
export function normalizeAccessTokenAuthors(authors) {
|
|
107
|
+
const parsed = accessTokenAuthorsSchema.safeParse(authors);
|
|
54
108
|
if (!parsed.success) {
|
|
55
109
|
const issue = parsed.error.issues[0];
|
|
56
110
|
const path = issue?.path.length ? `.${issue.path.join('.')}` : '';
|
|
@@ -58,80 +112,74 @@ export function normalizeSigningKeyAuthors(authors) {
|
|
|
58
112
|
}
|
|
59
113
|
return parsed.data;
|
|
60
114
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
repos: z
|
|
70
|
-
.array(z
|
|
71
|
-
.string()
|
|
72
|
-
.min(1)
|
|
73
|
-
.refine((repo) => !looksLikePrivateKey(repo), {
|
|
74
|
-
error: 'Token repos must not contain Mesa private keys.',
|
|
75
|
-
}))
|
|
76
|
-
.nullable()
|
|
77
|
-
.optional(),
|
|
78
|
-
repoIds: z.array(z.string().min(1)).max(250).nullable().optional(),
|
|
79
|
-
ttlSeconds: z
|
|
80
|
-
.number()
|
|
81
|
-
.int()
|
|
82
|
-
.min(1)
|
|
83
|
-
.max(SIGNING_KEY_ACCESS_TOKEN_MAX_TTL_SECONDS)
|
|
84
|
-
.default(SIGNING_KEY_ACCESS_TOKEN_DEFAULT_TTL_SECONDS),
|
|
85
|
-
})
|
|
86
|
-
.refine((input) => input.repos === undefined || input.repoIds === undefined, {
|
|
87
|
-
error: 'Token repos and repoIds restrictions are mutually exclusive.',
|
|
88
|
-
});
|
|
89
|
-
/** Convert the public snake-case token fields to the signer restriction. */
|
|
90
|
-
export function toSignerRepositoryRestriction(input) {
|
|
91
|
-
if (input.repos !== undefined && input.repo_ids !== undefined) {
|
|
92
|
-
throw new InvalidOptionsError('Token repos and repo_ids restrictions are mutually exclusive');
|
|
115
|
+
function normalizeAccessTokenAccess(access) {
|
|
116
|
+
const repos = new Map();
|
|
117
|
+
for (const [repo, level] of Object.entries(access)) {
|
|
118
|
+
const key = repo.toLowerCase();
|
|
119
|
+
const existing = repos.get(key);
|
|
120
|
+
if (!existing || level === 'write-repo') {
|
|
121
|
+
repos.set(key, { name: existing?.name ?? repo, level });
|
|
122
|
+
}
|
|
93
123
|
}
|
|
94
|
-
return
|
|
124
|
+
return Object.fromEntries([...repos.values()].map(({ name, level }) => [name, level]));
|
|
95
125
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
126
|
+
const automaticAccessTokenInputSchema = z.union([
|
|
127
|
+
z.strictObject({
|
|
128
|
+
authors: accessTokenAuthorsSchema.optional(),
|
|
129
|
+
admin: z.literal(true),
|
|
130
|
+
ttlSeconds: accessTokenTtlSchema,
|
|
131
|
+
}),
|
|
132
|
+
z.strictObject({
|
|
133
|
+
authors: accessTokenAuthorsSchema.optional(),
|
|
134
|
+
access: accessTokenAccessSchema,
|
|
135
|
+
ttlSeconds: accessTokenTtlSchema,
|
|
136
|
+
}),
|
|
137
|
+
]);
|
|
138
|
+
function invalidTokenOptions(error) {
|
|
139
|
+
const outerIssue = error.issues[0];
|
|
140
|
+
const unionIssues = outerIssue?.code === 'invalid_union' ? outerIssue.errors.flat() : [];
|
|
141
|
+
const issue = unionIssues.find((candidate) => candidate.code === 'custom') ?? unionIssues[0] ?? outerIssue;
|
|
142
|
+
const message = issue?.code === 'invalid_key' ? issue.issues[0]?.message : issue?.message;
|
|
143
|
+
// Repository selectors are user-controlled and may contain private material.
|
|
144
|
+
// Report the field without echoing the invalid map key.
|
|
145
|
+
const path = issue?.path[0] === 'access' ? 'access' : issue?.path.join('.') || 'token options';
|
|
146
|
+
return new InvalidOptionsError(`Invalid ${path}: ${message ?? 'invalid value'}`);
|
|
99
147
|
}
|
|
100
148
|
/** base64url-nopad encode a UTF-8 string. Node's `base64url` is already unpadded. */
|
|
101
149
|
function base64UrlJson(value) {
|
|
102
150
|
return Buffer.from(JSON.stringify(value), 'utf8').toString('base64url');
|
|
103
151
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
if (!parsed.success) {
|
|
108
|
-
const issue = parsed.error.issues[0];
|
|
109
|
-
throw new InvalidOptionsError(`Invalid ${issue?.path.join('.') || 'token options'}: ${issue?.message ?? 'invalid value'}`);
|
|
110
|
-
}
|
|
111
|
-
const { authors, scopes, repos, repoIds, ttlSeconds } = parsed.data;
|
|
152
|
+
function signPrivateKeyToken(privateKey, tokenInput) {
|
|
153
|
+
const { authors, ttlSeconds } = tokenInput;
|
|
154
|
+
const authority = 'admin' in tokenInput ? { admin: true } : { access: normalizeAccessTokenAccess(tokenInput.access) };
|
|
112
155
|
const iat = Math.floor(Date.now() / 1000);
|
|
113
156
|
const exp = iat + ttlSeconds;
|
|
114
157
|
const jti = randomUUID();
|
|
115
|
-
const
|
|
116
|
-
const header = { alg: 'EdDSA', typ: ACCESS_TOKEN_TYP, jwk: input.credential.publicJwk };
|
|
158
|
+
const header = { alg: 'EdDSA', typ: ACCESS_TOKEN_TYP, jwk: privateKey.publicJwk };
|
|
117
159
|
const payload = {
|
|
118
|
-
iss:
|
|
160
|
+
iss: privateKey.org,
|
|
119
161
|
aud: ACCESS_TOKEN_AUD,
|
|
120
|
-
...(authors
|
|
121
|
-
|
|
122
|
-
...repoRestriction,
|
|
162
|
+
...(authors ? { authors } : {}),
|
|
163
|
+
...authority,
|
|
123
164
|
iat,
|
|
124
165
|
exp,
|
|
125
166
|
jti,
|
|
126
167
|
};
|
|
127
168
|
const signingInput = `${base64UrlJson(header)}.${base64UrlJson(payload)}`;
|
|
128
|
-
const signature = signEd25519(null, Buffer.from(signingInput, 'utf8'),
|
|
169
|
+
const signature = signEd25519(null, Buffer.from(signingInput, 'utf8'), privateKey.privateKey).toString('base64url');
|
|
129
170
|
return {
|
|
130
171
|
token: `${signingInput}.${signature}`,
|
|
131
172
|
expiresAt: new Date(exp * 1000).toISOString(),
|
|
132
|
-
scopes,
|
|
133
|
-
...(repoIds !== undefined ? { repoIds } : { repos: repos ?? null }),
|
|
134
173
|
jti,
|
|
135
174
|
};
|
|
136
175
|
}
|
|
176
|
+
/** Sign an automatic request or MesaFS access token. */
|
|
177
|
+
export function signAutomaticPrivateKeyAccessToken(input) {
|
|
178
|
+
const { privateKey, ...tokenInput } = input;
|
|
179
|
+
const parsed = automaticAccessTokenInputSchema.safeParse(tokenInput);
|
|
180
|
+
if (!parsed.success) {
|
|
181
|
+
throw invalidTokenOptions(parsed.error);
|
|
182
|
+
}
|
|
183
|
+
return signPrivateKeyToken(privateKey, parsed.data);
|
|
184
|
+
}
|
|
137
185
|
//# sourceMappingURL=access-token.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-token.js","sourceRoot":"","sources":["../../src/api/access-token.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"access-token.js","sourceRoot":"","sources":["../../src/api/access-token.ts"],"names":[],"mappings":"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"}
|
package/dist/api/client.d.ts
CHANGED
|
@@ -13,13 +13,13 @@ export type RestOperation = (options: never) => Promise<unknown>;
|
|
|
13
13
|
export type RestRequestOptions<TData extends RestDataShape> = Simplify<Omit<RestOptions<TData, boolean>, 'baseUrl' | 'fetch' | 'headers' | 'responseStyle' | 'throwOnError'>>;
|
|
14
14
|
type RestClientConfig = {
|
|
15
15
|
/** Bearer credential, or a local signer that returns one for each request. */
|
|
16
|
-
|
|
16
|
+
accessToken: string | (() => string);
|
|
17
17
|
apiUrl: string;
|
|
18
18
|
fetch?: typeof globalThis.fetch;
|
|
19
19
|
userAgent?: string;
|
|
20
20
|
};
|
|
21
21
|
export type RestClient = {
|
|
22
|
-
request<TData extends RestDataShape, TResult>(operation: RestOperation, options?: RestRequestOptions<TData>,
|
|
22
|
+
request<TData extends RestDataShape, TResult>(operation: RestOperation, options?: RestRequestOptions<TData>, accessTokenOverride?: string): Promise<TResult>;
|
|
23
23
|
whoami(): Promise<WhoamiResponse>;
|
|
24
24
|
};
|
|
25
25
|
export declare function createRestClient(config: RestClientConfig): RestClient;
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,IAAI,WAAW,EAAmB,KAAK,cAAc,EAAU,MAAM,eAAe,CAAC;AAM1G,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEjE,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,aAAa,IAAI,QAAQ,CACpE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC,CACtG,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,8EAA8E;IAC9E,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,IAAI,WAAW,EAAmB,KAAK,cAAc,EAAU,MAAM,eAAe,CAAC;AAM1G,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEjE,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,aAAa,IAAI,QAAQ,CACpE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC,CACtG,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,KAAK,SAAS,aAAa,EAAE,OAAO,EAC1C,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,EACnC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA+CrE"}
|
package/dist/api/client.js
CHANGED
|
@@ -11,13 +11,13 @@ export function createRestClient(config) {
|
|
|
11
11
|
else {
|
|
12
12
|
defaultHeaders['User-Agent'] = userAgent ? `${SDK_USER_AGENT} ${userAgent}` : SDK_USER_AGENT;
|
|
13
13
|
}
|
|
14
|
-
const request = async (operation, options = {},
|
|
15
|
-
const
|
|
14
|
+
const request = async (operation, options = {}, accessTokenOverride) => {
|
|
15
|
+
const accessToken = accessTokenOverride ?? (typeof config.accessToken === 'function' ? config.accessToken() : config.accessToken);
|
|
16
16
|
const requestOptions = {
|
|
17
17
|
...options,
|
|
18
18
|
baseUrl: config.apiUrl,
|
|
19
19
|
fetch: config.fetch,
|
|
20
|
-
headers: { ...defaultHeaders, Authorization: `Bearer ${
|
|
20
|
+
headers: { ...defaultHeaders, Authorization: `Bearer ${accessToken}` },
|
|
21
21
|
responseStyle: 'fields',
|
|
22
22
|
throwOnError: false,
|
|
23
23
|
};
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,cAAc,GAAG,eAAe,WAAW,EAAE,CAAC;AAwCpD,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,cAAc,GAA2B,EAAE,CAAC;IAElD,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,cAAc,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EACnB,SAAwB,EACxB,UAAqC,EAA+B,EACpE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,cAAc,GAAG,eAAe,WAAW,EAAE,CAAC;AAwCpD,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,cAAc,GAA2B,EAAE,CAAC;IAElD,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,cAAc,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EACnB,SAAwB,EACxB,UAAqC,EAA+B,EACpE,mBAA4B,EACV,EAAE;QACpB,MAAM,WAAW,GACf,mBAAmB,IAAI,CAAC,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChH,MAAM,cAAc,GAAG;YACrB,GAAG,OAAO;YACV,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,EAAE,GAAG,cAAc,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;YACtE,aAAa,EAAE,QAAQ;YACvB,YAAY,EAAE,KAAK;SACW,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAO,SAAwE,CAAC,cAAc,CAAC,CAAC;QAEjH,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,QAAkD,CAAC;YAEzE,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;gBAC5B,OAAO,aAAa,CAAC,IAAe,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,QAAmB,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAA6B,MAAM,CAAC;KAC1D,CAAC;AACJ,CAAC"}
|
package/dist/api/index.d.ts
CHANGED
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/api/index.js
CHANGED
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,MAAM,sBAAsB,CAAC"}
|
|
@@ -12,4 +12,4 @@ export type PrivateKeyCredential = {
|
|
|
12
12
|
/** Parse and validate a Mesa Ed25519 private key once for repeated local signing. */
|
|
13
13
|
export declare function parsePrivateKey(privateKey: string): PrivateKeyCredential;
|
|
14
14
|
export {};
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=private-key.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"private-key.d.ts","sourceRoot":"","sources":["../../src/api/private-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAMhF,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,KAAK,CAAC;IACX,GAAG,EAAE,SAAS,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAiCxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"private-key.js","sourceRoot":"","sources":["../../src/api/private-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,6BAA6B,GAAG,sDAAsD,CAAC;AAc7F,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,mBAAmB,CAAC,4DAA4D,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,mBAAmB,CAAC,mDAAmD,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEtD,IAAI,gBAA2B,CAAC;IAChC,IAAI,CAAC;QACH,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mBAAmB,CAAC,6CAA6C,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,gBAAgB,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,IAAI,mBAAmB,CAAC,mCAAmC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,mBAAmB,CAAC,iEAAiE,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1E,OAAO;QACL,GAAG;QACH,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAE,EAAE;KACjD,CAAC;AACJ,CAAC"}
|
|
@@ -53,6 +53,6 @@ export type RepoTagFilter = {
|
|
|
53
53
|
$not?: RepoTagFilter;
|
|
54
54
|
[tagKey: string]: RepoTagValueFilter | RepoTagFilter | RepoTagFilter[] | undefined;
|
|
55
55
|
};
|
|
56
|
-
export declare function serializeRepoTagsFilter(tags: RepoTagFilter |
|
|
56
|
+
export declare function serializeRepoTagsFilter(tags: RepoTagFilter | undefined): string | undefined;
|
|
57
57
|
export {};
|
|
58
58
|
//# sourceMappingURL=repo-tag-filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-tag-filter.d.ts","sourceRoot":"","sources":["../../src/api/repo-tag-filter.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,EAAE,GACR,eAAe,GACf,eAAe,GACf,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,CAAC;AAQxB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,GAAG,aAAa,EAAE,GAAG,SAAS,CAAC;CACpF,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"repo-tag-filter.d.ts","sourceRoot":"","sources":["../../src/api/repo-tag-filter.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,EAAE,GACR,eAAe,GACf,eAAe,GACf,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,CAAC;AAQxB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,GAAG,aAAa,EAAE,GAAG,SAAS,CAAC;CACpF,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI3F"}
|