@atcute/oauth-types 0.1.1 → 1.0.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 +6 -5
- package/dist/build-client-metadata.d.ts +5 -320
- package/dist/build-client-metadata.d.ts.map +1 -1
- package/dist/build-client-metadata.js +3 -2
- package/dist/build-client-metadata.js.map +1 -1
- package/dist/index.d.ts +31 -31
- package/dist/schemas/atcute-client-shared.d.ts +8 -0
- package/dist/schemas/atcute-client-shared.d.ts.map +1 -0
- package/dist/schemas/atcute-client-shared.js +15 -0
- package/dist/schemas/atcute-client-shared.js.map +1 -0
- package/dist/schemas/atcute-confidential-client-metadata.d.ts +228 -4
- package/dist/schemas/atcute-confidential-client-metadata.d.ts.map +1 -1
- package/dist/schemas/atcute-confidential-client-metadata.js +48 -88
- package/dist/schemas/atcute-confidential-client-metadata.js.map +1 -1
- package/dist/schemas/atcute-public-client-metadata.d.ts +75 -35
- package/dist/schemas/atcute-public-client-metadata.d.ts.map +1 -1
- package/dist/schemas/atcute-public-client-metadata.js +25 -110
- package/dist/schemas/atcute-public-client-metadata.js.map +1 -1
- package/dist/schemas/atproto-authorization-server-metadata.d.ts +786 -4
- package/dist/schemas/atproto-authorization-server-metadata.d.ts.map +1 -1
- package/dist/schemas/atproto-authorization-server-metadata.js +2 -18
- package/dist/schemas/atproto-authorization-server-metadata.js.map +1 -1
- package/dist/schemas/atproto-oauth-scope.d.ts +3 -3
- package/dist/schemas/atproto-oauth-scope.d.ts.map +1 -1
- package/dist/schemas/atproto-oauth-scope.js +2 -2
- package/dist/schemas/atproto-oauth-scope.js.map +1 -1
- package/dist/schemas/atproto-oauth-token-response.d.ts +17 -17
- package/dist/schemas/atproto-oauth-token-response.d.ts.map +1 -1
- package/dist/schemas/atproto-oauth-token-response.js +6 -6
- package/dist/schemas/atproto-oauth-token-response.js.map +1 -1
- package/dist/schemas/atproto-protected-resource-metadata.d.ts +100 -4
- package/dist/schemas/atproto-protected-resource-metadata.d.ts.map +1 -1
- package/dist/schemas/atproto-protected-resource-metadata.js +2 -11
- package/dist/schemas/atproto-protected-resource-metadata.js.map +1 -1
- package/dist/schemas/jwk.d.ts +4289 -42
- package/dist/schemas/jwk.d.ts.map +1 -1
- package/dist/schemas/jwk.js +58 -91
- package/dist/schemas/jwk.js.map +1 -1
- package/dist/schemas/jwks.d.ts +87 -42
- package/dist/schemas/jwks.d.ts.map +1 -1
- package/dist/schemas/jwks.js +13 -29
- package/dist/schemas/jwks.js.map +1 -1
- package/dist/schemas/oauth-authorization-details.d.ts +18 -18
- package/dist/schemas/oauth-authorization-details.d.ts.map +1 -1
- package/dist/schemas/oauth-authorization-details.js +7 -7
- package/dist/schemas/oauth-authorization-details.js.map +1 -1
- package/dist/schemas/oauth-authorization-server-metadata.d.ts +462 -48
- package/dist/schemas/oauth-authorization-server-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-authorization-server-metadata.js +46 -65
- package/dist/schemas/oauth-authorization-server-metadata.js.map +1 -1
- package/dist/schemas/oauth-client-id-discoverable.d.ts +2 -2
- package/dist/schemas/oauth-client-id-discoverable.d.ts.map +1 -1
- package/dist/schemas/oauth-client-id-discoverable.js +20 -22
- package/dist/schemas/oauth-client-id-discoverable.js.map +1 -1
- package/dist/schemas/oauth-client-id.d.ts +3 -3
- package/dist/schemas/oauth-client-id.d.ts.map +1 -1
- package/dist/schemas/oauth-client-id.js +2 -2
- package/dist/schemas/oauth-client-id.js.map +1 -1
- package/dist/schemas/oauth-client-metadata.d.ts +73 -51
- package/dist/schemas/oauth-client-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-client-metadata.js +33 -40
- package/dist/schemas/oauth-client-metadata.js.map +1 -1
- package/dist/schemas/oauth-code-challenge-method.d.ts +3 -3
- package/dist/schemas/oauth-code-challenge-method.d.ts.map +1 -1
- package/dist/schemas/oauth-code-challenge-method.js +2 -2
- package/dist/schemas/oauth-code-challenge-method.js.map +1 -1
- package/dist/schemas/oauth-endpoint-auth-method.d.ts +3 -3
- package/dist/schemas/oauth-endpoint-auth-method.d.ts.map +1 -1
- package/dist/schemas/oauth-endpoint-auth-method.js +10 -2
- package/dist/schemas/oauth-endpoint-auth-method.js.map +1 -1
- package/dist/schemas/oauth-grant-type.d.ts +3 -3
- package/dist/schemas/oauth-grant-type.d.ts.map +1 -1
- package/dist/schemas/oauth-grant-type.js +10 -3
- package/dist/schemas/oauth-grant-type.js.map +1 -1
- package/dist/schemas/oauth-issuer-identifier.d.ts +3 -3
- package/dist/schemas/oauth-issuer-identifier.d.ts.map +1 -1
- package/dist/schemas/oauth-issuer-identifier.js +16 -9
- package/dist/schemas/oauth-issuer-identifier.js.map +1 -1
- package/dist/schemas/oauth-par-response.d.ts +5 -5
- package/dist/schemas/oauth-par-response.d.ts.map +1 -1
- package/dist/schemas/oauth-par-response.js +3 -3
- package/dist/schemas/oauth-par-response.js.map +1 -1
- package/dist/schemas/oauth-prompt.d.ts +3 -3
- package/dist/schemas/oauth-prompt.d.ts.map +1 -1
- package/dist/schemas/oauth-prompt.js +2 -2
- package/dist/schemas/oauth-prompt.js.map +1 -1
- package/dist/schemas/oauth-protected-resource-metadata.d.ts +88 -16
- package/dist/schemas/oauth-protected-resource-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-protected-resource-metadata.js +14 -26
- package/dist/schemas/oauth-protected-resource-metadata.js.map +1 -1
- package/dist/schemas/oauth-redirect-uri.d.ts +5 -5
- package/dist/schemas/oauth-redirect-uri.d.ts.map +1 -1
- package/dist/schemas/oauth-redirect-uri.js +3 -16
- package/dist/schemas/oauth-redirect-uri.js.map +1 -1
- package/dist/schemas/oauth-response-mode.d.ts +3 -3
- package/dist/schemas/oauth-response-mode.d.ts.map +1 -1
- package/dist/schemas/oauth-response-mode.js +2 -2
- package/dist/schemas/oauth-response-mode.js.map +1 -1
- package/dist/schemas/oauth-response-type.d.ts +3 -3
- package/dist/schemas/oauth-response-type.d.ts.map +1 -1
- package/dist/schemas/oauth-response-type.js +13 -7
- package/dist/schemas/oauth-response-type.js.map +1 -1
- package/dist/schemas/oauth-scope.d.ts +3 -3
- package/dist/schemas/oauth-scope.d.ts.map +1 -1
- package/dist/schemas/oauth-scope.js +2 -2
- package/dist/schemas/oauth-scope.js.map +1 -1
- package/dist/schemas/oauth-token-response.d.ts +17 -17
- package/dist/schemas/oauth-token-response.d.ts.map +1 -1
- package/dist/schemas/oauth-token-response.js +7 -7
- package/dist/schemas/oauth-token-response.js.map +1 -1
- package/dist/schemas/oauth-token-type.d.ts +3 -3
- package/dist/schemas/oauth-token-type.d.ts.map +1 -1
- package/dist/schemas/oauth-token-type.js +8 -7
- package/dist/schemas/oauth-token-type.js.map +1 -1
- package/dist/schemas/uri.d.ts +7 -7
- package/dist/schemas/uri.d.ts.map +1 -1
- package/dist/schemas/uri.js +44 -44
- package/dist/schemas/uri.js.map +1 -1
- package/dist/schemas/utils.d.ts.map +1 -1
- package/dist/schemas/utils.js.map +1 -1
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js.map +1 -1
- package/lib/build-client-metadata.ts +9 -7
- package/lib/index.ts +31 -31
- package/lib/schemas/atcute-client-shared.ts +25 -0
- package/lib/schemas/atcute-confidential-client-metadata.ts +81 -111
- package/lib/schemas/atcute-public-client-metadata.ts +70 -166
- package/lib/schemas/atproto-authorization-server-metadata.ts +22 -23
- package/lib/schemas/atproto-oauth-scope.ts +8 -5
- package/lib/schemas/atproto-oauth-token-response.ts +10 -9
- package/lib/schemas/atproto-protected-resource-metadata.ts +15 -15
- package/lib/schemas/jwk.ts +104 -120
- package/lib/schemas/jwks.ts +28 -40
- package/lib/schemas/oauth-authorization-details.ts +10 -10
- package/lib/schemas/oauth-authorization-server-metadata.ts +72 -74
- package/lib/schemas/oauth-client-id-discoverable.ts +43 -48
- package/lib/schemas/oauth-client-id.ts +3 -3
- package/lib/schemas/oauth-client-metadata.ts +45 -49
- package/lib/schemas/oauth-code-challenge-method.ts +3 -3
- package/lib/schemas/oauth-endpoint-auth-method.ts +11 -11
- package/lib/schemas/oauth-grant-type.ts +11 -11
- package/lib/schemas/oauth-issuer-identifier.ts +35 -27
- package/lib/schemas/oauth-par-response.ts +4 -4
- package/lib/schemas/oauth-prompt.ts +3 -9
- package/lib/schemas/oauth-protected-resource-metadata.ts +26 -35
- package/lib/schemas/oauth-redirect-uri.ts +15 -23
- package/lib/schemas/oauth-response-mode.ts +3 -7
- package/lib/schemas/oauth-response-type.ts +12 -12
- package/lib/schemas/oauth-scope.ts +3 -3
- package/lib/schemas/oauth-token-response.ts +10 -10
- package/lib/schemas/oauth-token-type.ts +16 -12
- package/lib/schemas/uri.ts +89 -76
- package/package.json +9 -8
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import * as v from '
|
|
1
|
+
import * as v from 'valibot';
|
|
2
2
|
|
|
3
|
-
import { oauthAuthorizationDetailsSchema } from './oauth-authorization-details.
|
|
4
|
-
import { oauthTokenTypeSchema } from './oauth-token-type.
|
|
3
|
+
import { oauthAuthorizationDetailsSchema } from './oauth-authorization-details.ts';
|
|
4
|
+
import { oauthTokenTypeSchema } from './oauth-token-type.ts';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @see {@link https://www.rfc-editor.org/rfc/rfc6749.html#section-5.1 | RFC 6749 (OAuth2), Section 5.1}
|
|
8
8
|
*/
|
|
9
|
-
export const oauthTokenResponseSchema = v.
|
|
9
|
+
export const oauthTokenResponseSchema = v.looseObject({
|
|
10
10
|
// https://www.rfc-editor.org/rfc/rfc6749.html#section-5.1
|
|
11
11
|
access_token: v.string(),
|
|
12
12
|
token_type: oauthTokenTypeSchema,
|
|
13
|
-
scope: v.
|
|
14
|
-
refresh_token: v.
|
|
15
|
-
expires_in: v.
|
|
13
|
+
scope: v.optional(v.string()),
|
|
14
|
+
refresh_token: v.optional(v.string()),
|
|
15
|
+
expires_in: v.optional(v.number()),
|
|
16
16
|
// https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse
|
|
17
|
-
id_token: v.
|
|
17
|
+
id_token: v.optional(v.string()),
|
|
18
18
|
// https://datatracker.ietf.org/doc/html/rfc9396#name-enriched-authorization-deta
|
|
19
|
-
authorization_details:
|
|
19
|
+
authorization_details: v.optional(oauthAuthorizationDetailsSchema),
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
export type OAuthTokenResponse = v.
|
|
22
|
+
export type OAuthTokenResponse = v.InferOutput<typeof oauthTokenResponseSchema>;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import * as v from '
|
|
1
|
+
import * as v from 'valibot';
|
|
2
2
|
|
|
3
3
|
/** token type (case-insensitive input, normalized output) */
|
|
4
|
-
export const oauthTokenTypeSchema = v.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
4
|
+
export const oauthTokenTypeSchema = v.pipe(
|
|
5
|
+
v.string(),
|
|
6
|
+
v.rawTransform<string, 'DPoP' | 'Bearer'>(({ dataset, addIssue, NEVER }) => {
|
|
7
|
+
const lower = dataset.value.toLowerCase();
|
|
8
|
+
if (lower === 'dpop') {
|
|
9
|
+
return 'DPoP';
|
|
10
|
+
}
|
|
11
|
+
if (lower === 'bearer') {
|
|
12
|
+
return 'Bearer';
|
|
13
|
+
}
|
|
14
|
+
addIssue({ message: `must be "DPoP" or "Bearer"` });
|
|
15
|
+
return NEVER;
|
|
16
|
+
}),
|
|
17
|
+
);
|
|
14
18
|
|
|
15
|
-
export type OAuthTokenType = v.
|
|
19
|
+
export type OAuthTokenType = v.InferOutput<typeof oauthTokenTypeSchema>;
|
package/lib/schemas/uri.ts
CHANGED
|
@@ -1,100 +1,113 @@
|
|
|
1
|
-
import * as v from '
|
|
1
|
+
import * as v from 'valibot';
|
|
2
2
|
|
|
3
|
-
import { isHostnameIP, isLocalHostname, isLoopbackHost } from './utils.
|
|
3
|
+
import { isHostnameIP, isLocalHostname, isLoopbackHost } from './utils.ts';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* valid, but potentially dangerous URL (`data:`, `file:`, `javascript:`, etc.).
|
|
7
7
|
*
|
|
8
8
|
* any value that matches this schema is safe to parse using `new URL()`.
|
|
9
9
|
*/
|
|
10
|
-
export const urlSchema = v.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return v.err(`must be a valid url`);
|
|
15
|
-
});
|
|
10
|
+
export const urlSchema = v.pipe(
|
|
11
|
+
v.string(),
|
|
12
|
+
v.check((input) => input.includes(':') && URL.canParse(input), `must be a valid url`),
|
|
13
|
+
);
|
|
16
14
|
|
|
17
15
|
/** loopback URL (http://localhost, http://127.0.0.1, http://[::1]) */
|
|
18
|
-
export const loopbackUriSchema =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
16
|
+
export const loopbackUriSchema = v.pipe(
|
|
17
|
+
urlSchema,
|
|
18
|
+
v.rawCheck(({ dataset, addIssue }) => {
|
|
19
|
+
if (!dataset.typed) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const input = dataset.value;
|
|
23
|
+
if (!input.startsWith('http://')) {
|
|
24
|
+
addIssue({ message: `loopback url must use http: protocol` });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!isLoopbackHost(new URL(input).hostname)) {
|
|
28
|
+
addIssue({ message: `loopback url must use localhost, 127.0.0.1, or [::1] as hostname` });
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
30
32
|
|
|
31
33
|
/** HTTPS URL with additional restrictions */
|
|
32
|
-
export const httpsUriSchema =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const url = new URL(input);
|
|
38
|
-
|
|
39
|
-
if (isLoopbackHost(url.hostname)) {
|
|
40
|
-
return v.err(`https url must not use a loopback host`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (!isHostnameIP(url.hostname)) {
|
|
44
|
-
if (!url.hostname.includes('.')) {
|
|
45
|
-
return v.err(`domain name must contain at least two segments`);
|
|
34
|
+
export const httpsUriSchema = v.pipe(
|
|
35
|
+
urlSchema,
|
|
36
|
+
v.rawCheck(({ dataset, addIssue }) => {
|
|
37
|
+
if (!dataset.typed) {
|
|
38
|
+
return;
|
|
46
39
|
}
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
const input = dataset.value;
|
|
41
|
+
if (!input.startsWith('https://')) {
|
|
42
|
+
addIssue({ message: `url must use https: protocol` });
|
|
43
|
+
return;
|
|
49
44
|
}
|
|
50
|
-
}
|
|
51
45
|
|
|
52
|
-
|
|
53
|
-
});
|
|
46
|
+
const url = new URL(input);
|
|
54
47
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
48
|
+
if (isLoopbackHost(url.hostname)) {
|
|
49
|
+
addIssue({ message: `https url must not use a loopback host` });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
if (!isHostnameIP(url.hostname)) {
|
|
54
|
+
if (!url.hostname.includes('.')) {
|
|
55
|
+
addIssue({ message: `domain name must contain at least two segments` });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (url.hostname.endsWith('.local')) {
|
|
59
|
+
addIssue({ message: `domain name must not end with .local` });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
);
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
/** web URL (either loopback http or https) */
|
|
66
|
+
export const webUriSchema = v.union(
|
|
67
|
+
[loopbackUriSchema, httpsUriSchema],
|
|
68
|
+
`url must use http: or https: protocol`,
|
|
69
|
+
);
|
|
67
70
|
|
|
68
71
|
/** web URL with a non-local hostname */
|
|
69
|
-
export const nonLocalWebUriSchema =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
return v.ok(input);
|
|
75
|
-
});
|
|
72
|
+
export const nonLocalWebUriSchema = v.pipe(
|
|
73
|
+
webUriSchema,
|
|
74
|
+
v.check((input) => !isLocalHostname(new URL(input).hostname), `hostname is invalid`),
|
|
75
|
+
);
|
|
76
76
|
|
|
77
77
|
/** private-use URI scheme (e.g., com.example.app:/callback) */
|
|
78
|
-
export const privateUseUriSchema =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const url = new URL(input);
|
|
87
|
-
const scheme = url.protocol.slice(0, -1);
|
|
88
|
-
const domain = scheme.split('.').reverse().join('.');
|
|
78
|
+
export const privateUseUriSchema = v.pipe(
|
|
79
|
+
urlSchema,
|
|
80
|
+
v.rawCheck(({ dataset, addIssue }) => {
|
|
81
|
+
if (!dataset.typed) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const input = dataset.value;
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
const dotIdx = input.indexOf('.');
|
|
87
|
+
const colonIdx = input.indexOf(':');
|
|
88
|
+
if (dotIdx === -1 || colonIdx === -1 || dotIdx > colonIdx) {
|
|
89
|
+
addIssue({ message: `private-use uri scheme must contain a dot in the protocol` });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
93
92
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
const url = new URL(input);
|
|
94
|
+
const scheme = url.protocol.slice(0, -1);
|
|
95
|
+
// oxlint-disable-next-line unicorn/no-array-reverse -- split already clones
|
|
96
|
+
const domain = scheme.split('.').reverse().join('.');
|
|
97
|
+
if (isLocalHostname(domain)) {
|
|
98
|
+
addIssue({ message: `private-use uri scheme must not be a local hostname` });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
// RFC 8252: private-use URIs must use single slash after scheme
|
|
103
|
+
if (
|
|
104
|
+
url.href.startsWith(`${url.protocol}//`) ||
|
|
105
|
+
url.username ||
|
|
106
|
+
url.password ||
|
|
107
|
+
url.hostname ||
|
|
108
|
+
url.port
|
|
109
|
+
) {
|
|
110
|
+
addIssue({ message: `private-use uri must be in the form scheme:/<path>` });
|
|
111
|
+
}
|
|
112
|
+
}),
|
|
113
|
+
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atcute/oauth-types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "OAuth types and schemas for AT Protocol",
|
|
5
5
|
"license": "0BSD",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"dist/",
|
|
12
12
|
"lib/",
|
|
13
13
|
"!lib/**/*.bench.ts",
|
|
14
|
-
"!lib/**/*.test.ts"
|
|
14
|
+
"!lib/**/*.test.ts",
|
|
15
|
+
"!dist/**/*.{test,bench}.*"
|
|
15
16
|
],
|
|
16
17
|
"type": "module",
|
|
17
18
|
"sideEffects": false,
|
|
@@ -22,16 +23,16 @@
|
|
|
22
23
|
"access": "public"
|
|
23
24
|
},
|
|
24
25
|
"dependencies": {
|
|
25
|
-
"
|
|
26
|
-
"@atcute/
|
|
27
|
-
"@atcute/
|
|
28
|
-
"@atcute/oauth-keyset": "^0.1.
|
|
26
|
+
"valibot": "^1.4.0",
|
|
27
|
+
"@atcute/lexicons": "^2.0.0",
|
|
28
|
+
"@atcute/identity": "^2.0.0",
|
|
29
|
+
"@atcute/oauth-keyset": "^0.1.1"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"vitest": "^4.
|
|
32
|
+
"vitest": "^4.1.5"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
|
34
|
-
"build": "tsgo
|
|
35
|
+
"build": "tsgo",
|
|
35
36
|
"test": "vitest",
|
|
36
37
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
37
38
|
}
|