@vercel/sandbox 1.9.0 → 1.9.2
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 +8 -0
- package/dist/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/api-client/api-client.cjs +375 -0
- package/dist/api-client/api-client.cjs.map +1 -0
- package/dist/api-client/api-client.d.cts +403 -0
- package/dist/api-client/api-client.d.ts +397 -392
- package/dist/api-client/api-client.js +365 -405
- package/dist/api-client/api-client.js.map +1 -1
- package/dist/api-client/api-error.cjs +31 -0
- package/dist/api-client/api-error.cjs.map +1 -0
- package/dist/api-client/api-error.d.cts +27 -0
- package/dist/api-client/api-error.d.ts +19 -16
- package/dist/api-client/api-error.js +27 -32
- package/dist/api-client/api-error.js.map +1 -1
- package/dist/api-client/base-client.cjs +113 -0
- package/dist/api-client/base-client.cjs.map +1 -0
- package/dist/api-client/base-client.d.cts +38 -0
- package/dist/api-client/base-client.d.ts +31 -36
- package/dist/api-client/base-client.js +101 -118
- package/dist/api-client/base-client.js.map +1 -1
- package/dist/api-client/file-writer.cjs +62 -0
- package/dist/api-client/file-writer.cjs.map +1 -0
- package/dist/api-client/file-writer.d.cts +66 -0
- package/dist/api-client/file-writer.d.ts +56 -52
- package/dist/api-client/file-writer.js +57 -61
- package/dist/api-client/file-writer.js.map +1 -1
- package/dist/api-client/index.cjs +2 -0
- package/dist/api-client/index.d.ts +2 -2
- package/dist/api-client/index.js +4 -21
- package/dist/api-client/validators.cjs +149 -0
- package/dist/api-client/validators.cjs.map +1 -0
- package/dist/api-client/validators.d.cts +1677 -0
- package/dist/api-client/validators.d.ts +1501 -2412
- package/dist/api-client/validators.js +124 -154
- package/dist/api-client/validators.js.map +1 -1
- package/dist/api-client/with-retry.cjs +89 -0
- package/dist/api-client/with-retry.cjs.map +1 -0
- package/dist/api-client/with-retry.d.cts +10 -0
- package/dist/api-client/with-retry.d.ts +9 -13
- package/dist/api-client/with-retry.js +81 -102
- package/dist/api-client/with-retry.js.map +1 -1
- package/dist/auth/api.cjs +29 -0
- package/dist/auth/api.cjs.map +1 -0
- package/dist/auth/api.js +26 -25
- package/dist/auth/api.js.map +1 -1
- package/dist/auth/error.cjs +13 -0
- package/dist/auth/error.cjs.map +1 -0
- package/dist/auth/error.js +11 -11
- package/dist/auth/error.js.map +1 -1
- package/dist/auth/file.cjs +64 -0
- package/dist/auth/file.cjs.map +1 -0
- package/dist/auth/file.d.cts +26 -0
- package/dist/auth/file.d.ts +19 -15
- package/dist/auth/file.js +49 -64
- package/dist/auth/file.js.map +1 -1
- package/dist/auth/index.cjs +12 -0
- package/dist/auth/index.d.cts +5 -0
- package/dist/auth/index.d.ts +5 -6
- package/dist/auth/index.js +6 -27
- package/dist/auth/linked-project.cjs +38 -0
- package/dist/auth/linked-project.cjs.map +1 -0
- package/dist/auth/linked-project.js +30 -64
- package/dist/auth/linked-project.js.map +1 -1
- package/dist/auth/oauth.cjs +205 -0
- package/dist/auth/oauth.cjs.map +1 -0
- package/dist/auth/oauth.d.cts +135 -0
- package/dist/auth/oauth.d.ts +113 -109
- package/dist/auth/oauth.js +185 -252
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/poll-for-token.cjs +82 -0
- package/dist/auth/poll-for-token.cjs.map +1 -0
- package/dist/auth/poll-for-token.d.cts +28 -0
- package/dist/auth/poll-for-token.d.ts +23 -15
- package/dist/auth/poll-for-token.js +79 -64
- package/dist/auth/poll-for-token.js.map +1 -1
- package/dist/auth/project.cjs +80 -0
- package/dist/auth/project.cjs.map +1 -0
- package/dist/auth/project.d.cts +44 -0
- package/dist/auth/project.d.ts +12 -8
- package/dist/auth/project.js +70 -72
- package/dist/auth/project.js.map +1 -1
- package/dist/auth/zod.cjs +22 -0
- package/dist/auth/zod.cjs.map +1 -0
- package/dist/auth/zod.js +18 -17
- package/dist/auth/zod.js.map +1 -1
- package/dist/command.cjs +328 -0
- package/dist/command.cjs.map +1 -0
- package/dist/command.d.cts +289 -0
- package/dist/command.d.ts +265 -171
- package/dist/command.js +323 -226
- package/dist/command.js.map +1 -1
- package/dist/constants.d.cts +5 -0
- package/dist/constants.d.ts +5 -1
- package/dist/index.cjs +11 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +6 -15
- package/dist/network-policy.d.cts +100 -0
- package/dist/network-policy.d.ts +32 -28
- package/dist/sandbox.cjs +543 -0
- package/dist/sandbox.cjs.map +1 -0
- package/dist/sandbox.d.cts +538 -0
- package/dist/sandbox.d.ts +521 -479
- package/dist/sandbox.js +539 -512
- package/dist/sandbox.js.map +1 -1
- package/dist/snapshot.cjs +116 -0
- package/dist/snapshot.cjs.map +1 -0
- package/dist/snapshot.d.cts +109 -0
- package/dist/snapshot.d.ts +100 -92
- package/dist/snapshot.js +114 -114
- package/dist/snapshot.js.map +1 -1
- package/dist/utils/array.cjs +17 -0
- package/dist/utils/array.cjs.map +1 -0
- package/dist/utils/array.js +12 -15
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/consume-readable.cjs +18 -0
- package/dist/utils/consume-readable.cjs.map +1 -0
- package/dist/utils/consume-readable.js +13 -12
- package/dist/utils/consume-readable.js.map +1 -1
- package/dist/utils/decode-base64-url.cjs +15 -0
- package/dist/utils/decode-base64-url.cjs.map +1 -0
- package/dist/utils/decode-base64-url.js +10 -9
- package/dist/utils/decode-base64-url.js.map +1 -1
- package/dist/utils/dev-credentials.cjs +142 -0
- package/dist/utils/dev-credentials.cjs.map +1 -0
- package/dist/utils/dev-credentials.js +126 -184
- package/dist/utils/dev-credentials.js.map +1 -1
- package/dist/utils/get-credentials.cjs +123 -0
- package/dist/utils/get-credentials.cjs.map +1 -0
- package/dist/utils/get-credentials.d.cts +21 -0
- package/dist/utils/get-credentials.d.ts +19 -61
- package/dist/utils/get-credentials.js +106 -140
- package/dist/utils/get-credentials.js.map +1 -1
- package/dist/utils/log.cjs +25 -0
- package/dist/utils/log.cjs.map +1 -0
- package/dist/utils/log.js +15 -17
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/network-policy.cjs +65 -0
- package/dist/utils/network-policy.cjs.map +1 -0
- package/dist/utils/network-policy.js +58 -77
- package/dist/utils/network-policy.js.map +1 -1
- package/dist/utils/normalizePath.cjs +27 -0
- package/dist/utils/normalizePath.cjs.map +1 -0
- package/dist/utils/normalizePath.js +21 -28
- package/dist/utils/normalizePath.js.map +1 -1
- package/dist/utils/resolveSignal.cjs +20 -0
- package/dist/utils/resolveSignal.cjs.map +1 -0
- package/dist/utils/resolveSignal.d.cts +15 -0
- package/dist/utils/resolveSignal.d.ts +12 -10
- package/dist/utils/resolveSignal.js +14 -17
- package/dist/utils/resolveSignal.js.map +1 -1
- package/dist/utils/sandbox-snapshot.cjs +14 -0
- package/dist/utils/sandbox-snapshot.cjs.map +1 -0
- package/dist/utils/sandbox-snapshot.d.cts +10 -0
- package/dist/utils/sandbox-snapshot.d.ts +11 -0
- package/dist/utils/sandbox-snapshot.js +14 -0
- package/dist/utils/sandbox-snapshot.js.map +1 -0
- package/dist/utils/types.cjs +13 -0
- package/dist/utils/types.cjs.map +1 -0
- package/dist/utils/types.d.cts +11 -0
- package/dist/utils/types.d.ts +5 -7
- package/dist/utils/types.js +8 -8
- package/dist/utils/types.js.map +1 -1
- package/dist/version.cjs +7 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.js +5 -5
- package/dist/version.js.map +1 -1
- package/package.json +23 -3
- package/dist/api-client/index.js.map +0 -1
- package/dist/auth/api.d.ts +0 -6
- package/dist/auth/error.d.ts +0 -11
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/linked-project.d.ts +0 -10
- package/dist/auth/zod.d.ts +0 -5
- package/dist/constants.js +0 -3
- package/dist/constants.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/network-policy.js +0 -3
- package/dist/network-policy.js.map +0 -1
- package/dist/utils/array.d.ts +0 -9
- package/dist/utils/consume-readable.d.ts +0 -5
- package/dist/utils/convert-sandbox.d.ts +0 -6
- package/dist/utils/convert-sandbox.js +0 -14
- package/dist/utils/convert-sandbox.js.map +0 -1
- package/dist/utils/decode-base64-url.d.ts +0 -7
- package/dist/utils/dev-credentials.d.ts +0 -37
- package/dist/utils/log.d.ts +0 -2
- package/dist/utils/network-policy.d.ts +0 -7
- package/dist/utils/normalizePath.d.ts +0 -17
- package/dist/version.d.ts +0 -1
package/dist/auth/oauth.js
CHANGED
|
@@ -1,269 +1,202 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.isOAuthError = isOAuthError;
|
|
8
|
-
const os_1 = __importDefault(require("os"));
|
|
9
|
-
const zod_1 = require("zod");
|
|
10
|
-
const version_1 = require("../version");
|
|
11
|
-
const USER_AGENT = `${os_1.default.hostname()} @ vercel/sandbox/${version_1.VERSION} node-${process.version} ${os_1.default.platform()} (${os_1.default.arch()})`;
|
|
1
|
+
import { VERSION } from "../version.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import os from "os";
|
|
4
|
+
|
|
5
|
+
//#region src/auth/oauth.ts
|
|
6
|
+
const USER_AGENT = `${os.hostname()} @ vercel/sandbox/${VERSION} node-${process.version} ${os.platform()} (${os.arch()})`;
|
|
12
7
|
const ISSUER = new URL("https://vercel.com");
|
|
13
8
|
const CLIENT_ID = "cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp";
|
|
14
|
-
const AuthorizationServerMetadata =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
const AuthorizationServerMetadata = z.object({
|
|
10
|
+
issuer: z.string().url(),
|
|
11
|
+
device_authorization_endpoint: z.string().url(),
|
|
12
|
+
token_endpoint: z.string().url(),
|
|
13
|
+
revocation_endpoint: z.string().url(),
|
|
14
|
+
jwks_uri: z.string().url(),
|
|
15
|
+
introspection_endpoint: z.string().url()
|
|
21
16
|
});
|
|
22
17
|
let _as;
|
|
23
|
-
const DeviceAuthorization =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
const DeviceAuthorization = z.object({
|
|
19
|
+
device_code: z.string(),
|
|
20
|
+
user_code: z.string(),
|
|
21
|
+
verification_uri: z.string().url(),
|
|
22
|
+
verification_uri_complete: z.string().url(),
|
|
23
|
+
expires_in: z.number(),
|
|
24
|
+
interval: z.number()
|
|
30
25
|
});
|
|
31
|
-
const IntrospectionResponse =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
})
|
|
37
|
-
.or(zod_1.z.object({ active: zod_1.z.literal(false) }));
|
|
26
|
+
const IntrospectionResponse = z.object({
|
|
27
|
+
active: z.literal(true),
|
|
28
|
+
client_id: z.string(),
|
|
29
|
+
session_id: z.string()
|
|
30
|
+
}).or(z.object({ active: z.literal(false) }));
|
|
38
31
|
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
* Returns the Authorization Server Metadata
|
|
33
|
+
*
|
|
34
|
+
* @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest
|
|
35
|
+
* @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationResponse
|
|
36
|
+
*/
|
|
44
37
|
async function authorizationServerMetadata() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
if (_as) return _as;
|
|
39
|
+
const response = await fetch(new URL(".well-known/openid-configuration", ISSUER), { headers: {
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
"user-agent": USER_AGENT
|
|
42
|
+
} });
|
|
43
|
+
_as = AuthorizationServerMetadata.parse(await response.json());
|
|
44
|
+
return _as;
|
|
52
45
|
}
|
|
53
46
|
async function OAuth() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
});
|
|
152
|
-
if (response.ok)
|
|
153
|
-
return;
|
|
154
|
-
const json = await response.json();
|
|
155
|
-
return new OAuthError("Revocation request failed", json);
|
|
156
|
-
},
|
|
157
|
-
/**
|
|
158
|
-
* Perform Refresh Token Request.
|
|
159
|
-
*
|
|
160
|
-
* @see https://datatracker.ietf.org/doc/html/rfc6749#section-6
|
|
161
|
-
*/
|
|
162
|
-
async refreshToken(token) {
|
|
163
|
-
const response = await fetch(as.token_endpoint, {
|
|
164
|
-
method: "POST",
|
|
165
|
-
headers: {
|
|
166
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
167
|
-
"user-agent": USER_AGENT,
|
|
168
|
-
},
|
|
169
|
-
body: new URLSearchParams({
|
|
170
|
-
client_id: CLIENT_ID,
|
|
171
|
-
grant_type: "refresh_token",
|
|
172
|
-
refresh_token: token,
|
|
173
|
-
}),
|
|
174
|
-
});
|
|
175
|
-
const [tokensError, tokenSet] = await this.processTokenResponse(response);
|
|
176
|
-
if (tokensError)
|
|
177
|
-
throw tokensError;
|
|
178
|
-
return tokenSet;
|
|
179
|
-
},
|
|
180
|
-
/**
|
|
181
|
-
* Perform Token Introspection Request.
|
|
182
|
-
*
|
|
183
|
-
* @see https://datatracker.ietf.org/doc/html/rfc7662#section-2.1
|
|
184
|
-
*/
|
|
185
|
-
async introspectToken(token) {
|
|
186
|
-
const response = await fetch(as.introspection_endpoint, {
|
|
187
|
-
method: "POST",
|
|
188
|
-
headers: {
|
|
189
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
190
|
-
"user-agent": USER_AGENT,
|
|
191
|
-
},
|
|
192
|
-
body: new URLSearchParams({ token }),
|
|
193
|
-
});
|
|
194
|
-
const json = await response.json();
|
|
195
|
-
const processed = IntrospectionResponse.safeParse(json);
|
|
196
|
-
if (!processed.success) {
|
|
197
|
-
throw new OAuthError(`Failed to parse introspection response: ${processed.error.message}`, json);
|
|
198
|
-
}
|
|
199
|
-
return processed.data;
|
|
200
|
-
},
|
|
201
|
-
};
|
|
47
|
+
const as = await authorizationServerMetadata();
|
|
48
|
+
return {
|
|
49
|
+
async deviceAuthorizationRequest() {
|
|
50
|
+
const json = await (await fetch(as.device_authorization_endpoint, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: {
|
|
53
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
54
|
+
"user-agent": USER_AGENT
|
|
55
|
+
},
|
|
56
|
+
body: new URLSearchParams({
|
|
57
|
+
client_id: CLIENT_ID,
|
|
58
|
+
scope: "openid offline_access"
|
|
59
|
+
})
|
|
60
|
+
})).json();
|
|
61
|
+
const parsed = DeviceAuthorization.safeParse(json);
|
|
62
|
+
if (!parsed.success) throw new OAuthError(`Failed to parse device authorization response: ${parsed.error.message}`, json);
|
|
63
|
+
return {
|
|
64
|
+
device_code: parsed.data.device_code,
|
|
65
|
+
user_code: parsed.data.user_code,
|
|
66
|
+
verification_uri: parsed.data.verification_uri,
|
|
67
|
+
verification_uri_complete: parsed.data.verification_uri_complete,
|
|
68
|
+
expiresAt: Date.now() + parsed.data.expires_in * 1e3,
|
|
69
|
+
interval: parsed.data.interval
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
async deviceAccessTokenRequest(device_code) {
|
|
73
|
+
try {
|
|
74
|
+
return [null, await fetch(as.token_endpoint, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: {
|
|
77
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
78
|
+
"user-agent": USER_AGENT
|
|
79
|
+
},
|
|
80
|
+
body: new URLSearchParams({
|
|
81
|
+
client_id: CLIENT_ID,
|
|
82
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
83
|
+
device_code
|
|
84
|
+
}),
|
|
85
|
+
signal: AbortSignal.timeout(10 * 1e3)
|
|
86
|
+
})];
|
|
87
|
+
} catch (error) {
|
|
88
|
+
if (error instanceof Error) return [error];
|
|
89
|
+
return [new Error("An unknown error occurred. See the logs for details.", { cause: error })];
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
async processTokenResponse(response) {
|
|
93
|
+
const json = await response.json();
|
|
94
|
+
const processed = TokenSet.safeParse(json);
|
|
95
|
+
if (!processed.success) return [new OAuthError(`Failed to parse token response: ${processed.error.message}`, json)];
|
|
96
|
+
return [null, processed.data];
|
|
97
|
+
},
|
|
98
|
+
async revokeToken(token) {
|
|
99
|
+
const response = await fetch(as.revocation_endpoint, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers: {
|
|
102
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
103
|
+
"user-agent": USER_AGENT
|
|
104
|
+
},
|
|
105
|
+
body: new URLSearchParams({
|
|
106
|
+
token,
|
|
107
|
+
client_id: CLIENT_ID
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
if (response.ok) return;
|
|
111
|
+
return new OAuthError("Revocation request failed", await response.json());
|
|
112
|
+
},
|
|
113
|
+
async refreshToken(token) {
|
|
114
|
+
const response = await fetch(as.token_endpoint, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: {
|
|
117
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
118
|
+
"user-agent": USER_AGENT
|
|
119
|
+
},
|
|
120
|
+
body: new URLSearchParams({
|
|
121
|
+
client_id: CLIENT_ID,
|
|
122
|
+
grant_type: "refresh_token",
|
|
123
|
+
refresh_token: token
|
|
124
|
+
})
|
|
125
|
+
});
|
|
126
|
+
const [tokensError, tokenSet] = await this.processTokenResponse(response);
|
|
127
|
+
if (tokensError) throw tokensError;
|
|
128
|
+
return tokenSet;
|
|
129
|
+
},
|
|
130
|
+
async introspectToken(token) {
|
|
131
|
+
const json = await (await fetch(as.introspection_endpoint, {
|
|
132
|
+
method: "POST",
|
|
133
|
+
headers: {
|
|
134
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
135
|
+
"user-agent": USER_AGENT
|
|
136
|
+
},
|
|
137
|
+
body: new URLSearchParams({ token })
|
|
138
|
+
})).json();
|
|
139
|
+
const processed = IntrospectionResponse.safeParse(json);
|
|
140
|
+
if (!processed.success) throw new OAuthError(`Failed to parse introspection response: ${processed.error.message}`, json);
|
|
141
|
+
return processed.data;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
202
144
|
}
|
|
203
|
-
const TokenSet =
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
expires_in: zod_1.z.number(),
|
|
210
|
-
/** The refresh token, which can be used to obtain new access tokens. */
|
|
211
|
-
refresh_token: zod_1.z.string().optional(),
|
|
212
|
-
/** The scope of the access token. */
|
|
213
|
-
scope: zod_1.z.string().optional(),
|
|
145
|
+
const TokenSet = z.object({
|
|
146
|
+
access_token: z.string(),
|
|
147
|
+
token_type: z.literal("Bearer"),
|
|
148
|
+
expires_in: z.number(),
|
|
149
|
+
refresh_token: z.string().optional(),
|
|
150
|
+
scope: z.string().optional()
|
|
214
151
|
});
|
|
215
|
-
const OAuthErrorResponse =
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
error_description: zod_1.z.string().optional(),
|
|
233
|
-
error_uri: zod_1.z.string().optional(),
|
|
152
|
+
const OAuthErrorResponse = z.object({
|
|
153
|
+
error: z.enum([
|
|
154
|
+
"invalid_request",
|
|
155
|
+
"invalid_client",
|
|
156
|
+
"invalid_grant",
|
|
157
|
+
"unauthorized_client",
|
|
158
|
+
"unsupported_grant_type",
|
|
159
|
+
"invalid_scope",
|
|
160
|
+
"server_error",
|
|
161
|
+
"authorization_pending",
|
|
162
|
+
"slow_down",
|
|
163
|
+
"access_denied",
|
|
164
|
+
"expired_token",
|
|
165
|
+
"unsupported_token_type"
|
|
166
|
+
]),
|
|
167
|
+
error_description: z.string().optional(),
|
|
168
|
+
error_uri: z.string().optional()
|
|
234
169
|
});
|
|
235
170
|
function processOAuthErrorResponse(json) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
return new TypeError("Failed to parse OAuth error response");
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
class OAuthError extends Error {
|
|
247
|
-
constructor(message, response) {
|
|
248
|
-
super(message);
|
|
249
|
-
this.name = "OAuthError";
|
|
250
|
-
const error = processOAuthErrorResponse(response);
|
|
251
|
-
if (error instanceof TypeError) {
|
|
252
|
-
const message = `Unexpected server response: ${JSON.stringify(response)}`;
|
|
253
|
-
this.cause = new Error(message, { cause: error });
|
|
254
|
-
this.code = "server_error";
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
let cause = error.error;
|
|
258
|
-
if (error.error_description)
|
|
259
|
-
cause += `: ${error.error_description}`;
|
|
260
|
-
if (error.error_uri)
|
|
261
|
-
cause += ` (${error.error_uri})`;
|
|
262
|
-
this.cause = new Error(cause);
|
|
263
|
-
this.code = error.error;
|
|
264
|
-
}
|
|
171
|
+
try {
|
|
172
|
+
return OAuthErrorResponse.parse(json);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
if (error instanceof z.ZodError) return /* @__PURE__ */ new TypeError(`Invalid OAuth error response: ${error.message}`);
|
|
175
|
+
return /* @__PURE__ */ new TypeError("Failed to parse OAuth error response");
|
|
176
|
+
}
|
|
265
177
|
}
|
|
178
|
+
var OAuthError = class extends Error {
|
|
179
|
+
constructor(message, response) {
|
|
180
|
+
super(message);
|
|
181
|
+
this.name = "OAuthError";
|
|
182
|
+
const error = processOAuthErrorResponse(response);
|
|
183
|
+
if (error instanceof TypeError) {
|
|
184
|
+
const message$1 = `Unexpected server response: ${JSON.stringify(response)}`;
|
|
185
|
+
this.cause = new Error(message$1, { cause: error });
|
|
186
|
+
this.code = "server_error";
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
let cause = error.error;
|
|
190
|
+
if (error.error_description) cause += `: ${error.error_description}`;
|
|
191
|
+
if (error.error_uri) cause += ` (${error.error_uri})`;
|
|
192
|
+
this.cause = new Error(cause);
|
|
193
|
+
this.code = error.error;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
266
196
|
function isOAuthError(error) {
|
|
267
|
-
|
|
197
|
+
return error instanceof OAuthError;
|
|
268
198
|
}
|
|
199
|
+
|
|
200
|
+
//#endregion
|
|
201
|
+
export { OAuth, isOAuthError };
|
|
269
202
|
//# sourceMappingURL=oauth.js.map
|
package/dist/auth/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oauth.js","names":["_as: AuthorizationServerMetadata","message"],"sources":["../../src/auth/oauth.ts"],"sourcesContent":["import os from \"os\";\nimport { z } from \"zod\";\nimport { VERSION } from \"../version.js\";\n\nconst USER_AGENT = `${os.hostname()} @ vercel/sandbox/${VERSION} node-${\n process.version\n} ${os.platform()} (${os.arch()})`;\n\nconst ISSUER = new URL(\"https://vercel.com\");\nconst CLIENT_ID = \"cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp\";\n\nconst AuthorizationServerMetadata = z.object({\n issuer: z.string().url(),\n device_authorization_endpoint: z.string().url(),\n token_endpoint: z.string().url(),\n revocation_endpoint: z.string().url(),\n jwks_uri: z.string().url(),\n introspection_endpoint: z.string().url(),\n});\ntype AuthorizationServerMetadata = z.infer<typeof AuthorizationServerMetadata>;\nlet _as: AuthorizationServerMetadata;\n\nconst DeviceAuthorization = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string().url(),\n verification_uri_complete: z.string().url(),\n expires_in: z.number(),\n interval: z.number(),\n});\n\nconst IntrospectionResponse = z\n .object({\n active: z.literal(true),\n client_id: z.string(),\n session_id: z.string(),\n })\n .or(z.object({ active: z.literal(false) }));\n\n/**\n * Returns the Authorization Server Metadata\n *\n * @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest\n * @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationResponse\n */\nasync function authorizationServerMetadata(): Promise<AuthorizationServerMetadata> {\n if (_as) return _as;\n\n const response = await fetch(\n new URL(\".well-known/openid-configuration\", ISSUER),\n {\n headers: { \"Content-Type\": \"application/json\", \"user-agent\": USER_AGENT },\n },\n );\n\n _as = AuthorizationServerMetadata.parse(await response.json());\n return _as;\n}\n\nexport async function OAuth() {\n const as = await authorizationServerMetadata();\n return {\n /**\n * Perform the Device Authorization Request\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8628#section-3.1\n * @see https://datatracker.ietf.org/doc/html/rfc8628#section-3.2\n */\n async deviceAuthorizationRequest(): Promise<DeviceAuthorizationRequest> {\n const response = await fetch(as.device_authorization_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": USER_AGENT,\n },\n body: new URLSearchParams({\n client_id: CLIENT_ID,\n scope: \"openid offline_access\",\n }),\n });\n\n const json = await response.json();\n const parsed = DeviceAuthorization.safeParse(json);\n\n if (!parsed.success) {\n throw new OAuthError(\n `Failed to parse device authorization response: ${parsed.error.message}`,\n json,\n );\n }\n\n return {\n device_code: parsed.data.device_code,\n user_code: parsed.data.user_code,\n verification_uri: parsed.data.verification_uri,\n verification_uri_complete: parsed.data.verification_uri_complete,\n expiresAt: Date.now() + parsed.data.expires_in * 1000,\n interval: parsed.data.interval,\n };\n },\n /**\n * Perform the Device Access Token Request\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8628#section-3.4\n */\n async deviceAccessTokenRequest(\n device_code: string,\n ): Promise<[Error] | [null, Response]> {\n try {\n return [\n null,\n await fetch(as.token_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": USER_AGENT,\n },\n body: new URLSearchParams({\n client_id: CLIENT_ID,\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n device_code,\n }),\n signal: AbortSignal.timeout(10 * 1000),\n }),\n ];\n } catch (error) {\n if (error instanceof Error) return [error];\n return [\n new Error(\"An unknown error occurred. See the logs for details.\", {\n cause: error,\n }),\n ];\n }\n },\n /**\n * Process the Token request Response\n *\n * @see https://datatracker.ietf.org/doc/html/rfc8628#section-3.5\n */\n async processTokenResponse(\n response: Response,\n ): Promise<[OAuthError] | [null, TokenSet]> {\n const json = await response.json();\n const processed = TokenSet.safeParse(json);\n\n if (!processed.success) {\n return [\n new OAuthError(\n `Failed to parse token response: ${processed.error.message}`,\n json,\n ),\n ];\n }\n\n return [null, processed.data];\n },\n /**\n * Perform a Token Revocation Request.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.2\n */\n async revokeToken(token: string): Promise<OAuthError | void> {\n const response = await fetch(as.revocation_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": USER_AGENT,\n },\n body: new URLSearchParams({ token, client_id: CLIENT_ID }),\n });\n\n if (response.ok) return;\n const json = await response.json();\n\n return new OAuthError(\"Revocation request failed\", json);\n },\n /**\n * Perform Refresh Token Request.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc6749#section-6\n */\n async refreshToken(token: string): Promise<TokenSet> {\n const response = await fetch(as.token_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": USER_AGENT,\n },\n body: new URLSearchParams({\n client_id: CLIENT_ID,\n grant_type: \"refresh_token\",\n refresh_token: token,\n }),\n });\n\n const [tokensError, tokenSet] = await this.processTokenResponse(response);\n if (tokensError) throw tokensError;\n return tokenSet;\n },\n /**\n * Perform Token Introspection Request.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7662#section-2.1\n */\n async introspectToken(\n token: string,\n ): Promise<z.infer<typeof IntrospectionResponse>> {\n const response = await fetch(as.introspection_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": USER_AGENT,\n },\n body: new URLSearchParams({ token }),\n });\n\n const json = await response.json();\n const processed = IntrospectionResponse.safeParse(json);\n if (!processed.success) {\n throw new OAuthError(\n `Failed to parse introspection response: ${processed.error.message}`,\n json,\n );\n }\n\n return processed.data;\n },\n };\n}\n\nexport type OAuth = Awaited<ReturnType<typeof OAuth>>;\n\nconst TokenSet = z.object({\n /** The access token issued by the authorization server. */\n access_token: z.string(),\n /** The type of the token issued */\n token_type: z.literal(\"Bearer\"),\n /** The lifetime in seconds of the access token. */\n expires_in: z.number(),\n /** The refresh token, which can be used to obtain new access tokens. */\n refresh_token: z.string().optional(),\n /** The scope of the access token. */\n scope: z.string().optional(),\n});\n\ntype TokenSet = z.infer<typeof TokenSet>;\n\nconst OAuthErrorResponse = z.object({\n error: z.enum([\n \"invalid_request\",\n \"invalid_client\",\n \"invalid_grant\",\n \"unauthorized_client\",\n \"unsupported_grant_type\",\n \"invalid_scope\",\n \"server_error\",\n // Device Authorization Response Errors\n \"authorization_pending\",\n \"slow_down\",\n \"access_denied\",\n \"expired_token\",\n // Revocation Response Errors\n \"unsupported_token_type\",\n ]),\n error_description: z.string().optional(),\n error_uri: z.string().optional(),\n});\n\ntype OAuthErrorResponse = z.infer<typeof OAuthErrorResponse>;\n\nfunction processOAuthErrorResponse(\n json: unknown,\n): OAuthErrorResponse | TypeError {\n try {\n return OAuthErrorResponse.parse(json);\n } catch (error) {\n if (error instanceof z.ZodError) {\n return new TypeError(`Invalid OAuth error response: ${error.message}`);\n }\n return new TypeError(\"Failed to parse OAuth error response\");\n }\n}\n\nclass OAuthError extends Error {\n name = \"OAuthError\";\n code: OAuthErrorResponse[\"error\"];\n cause: Error;\n constructor(message: string, response: unknown) {\n super(message);\n const error = processOAuthErrorResponse(response);\n if (error instanceof TypeError) {\n const message = `Unexpected server response: ${JSON.stringify(response)}`;\n this.cause = new Error(message, { cause: error });\n this.code = \"server_error\";\n return;\n }\n let cause = error.error;\n if (error.error_description) cause += `: ${error.error_description}`;\n if (error.error_uri) cause += ` (${error.error_uri})`;\n\n this.cause = new Error(cause);\n this.code = error.error;\n }\n}\n\nexport function isOAuthError(error: unknown): error is OAuthError {\n return error instanceof OAuthError;\n}\n\nexport interface DeviceAuthorizationRequest {\n /** The device verification code. */\n device_code: string;\n /** The end-user verification code. */\n user_code: string;\n /**\n * The minimum amount of time in seconds that the client\n * SHOULD wait between polling requests to the token endpoint.\n */\n interval: number;\n /** The end-user verification URI on the authorization server. */\n verification_uri: string;\n /**\n * The end-user verification URI on the authorization server,\n * including the `user_code`, without redirection.\n */\n verification_uri_complete: string;\n /**\n * The absolute lifetime of the `device_code` and `user_code`.\n * Calculated from `expires_in`.\n */\n expiresAt: number;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_file = require('./file.cjs');
|
|
3
|
+
const require_oauth = require('./oauth.cjs');
|
|
4
|
+
let node_timers_promises = require("node:timers/promises");
|
|
5
|
+
|
|
6
|
+
//#region src/auth/poll-for-token.ts
|
|
7
|
+
async function* pollForToken({ request, oauth }) {
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
try {
|
|
10
|
+
let intervalMs = request.interval * 1e3;
|
|
11
|
+
while (Date.now() < request.expiresAt) {
|
|
12
|
+
const [tokenResponseError, tokenResponse] = await oauth.deviceAccessTokenRequest(request.device_code);
|
|
13
|
+
if (tokenResponseError) {
|
|
14
|
+
if (tokenResponseError.message.includes("timeout")) {
|
|
15
|
+
intervalMs *= 2;
|
|
16
|
+
yield {
|
|
17
|
+
_tag: "Timeout",
|
|
18
|
+
newInterval: intervalMs
|
|
19
|
+
};
|
|
20
|
+
await (0, node_timers_promises.setTimeout)(intervalMs, { signal: controller.signal });
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
yield {
|
|
24
|
+
_tag: "Error",
|
|
25
|
+
error: tokenResponseError
|
|
26
|
+
};
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
yield {
|
|
30
|
+
_tag: "Response",
|
|
31
|
+
response: tokenResponse.clone()
|
|
32
|
+
};
|
|
33
|
+
const [tokensError, tokens] = await oauth.processTokenResponse(tokenResponse);
|
|
34
|
+
if (require_oauth.isOAuthError(tokensError)) {
|
|
35
|
+
const { code } = tokensError;
|
|
36
|
+
switch (code) {
|
|
37
|
+
case "authorization_pending":
|
|
38
|
+
await (0, node_timers_promises.setTimeout)(intervalMs, { signal: controller.signal });
|
|
39
|
+
continue;
|
|
40
|
+
case "slow_down":
|
|
41
|
+
intervalMs += 5 * 1e3;
|
|
42
|
+
yield {
|
|
43
|
+
_tag: "SlowDown",
|
|
44
|
+
newInterval: intervalMs
|
|
45
|
+
};
|
|
46
|
+
await (0, node_timers_promises.setTimeout)(intervalMs, { signal: controller.signal });
|
|
47
|
+
continue;
|
|
48
|
+
default:
|
|
49
|
+
yield {
|
|
50
|
+
_tag: "Error",
|
|
51
|
+
error: tokensError.cause
|
|
52
|
+
};
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (tokensError) {
|
|
57
|
+
yield {
|
|
58
|
+
_tag: "Error",
|
|
59
|
+
error: tokensError
|
|
60
|
+
};
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
require_file.updateAuthConfig({
|
|
64
|
+
token: tokens.access_token,
|
|
65
|
+
expiresAt: new Date(Date.now() + tokens.expires_in * 1e3),
|
|
66
|
+
refreshToken: tokens.refresh_token
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
yield {
|
|
71
|
+
_tag: "Error",
|
|
72
|
+
error: /* @__PURE__ */ new Error("Timed out waiting for authentication. Please try again.")
|
|
73
|
+
};
|
|
74
|
+
return;
|
|
75
|
+
} finally {
|
|
76
|
+
controller.abort();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
//#endregion
|
|
81
|
+
exports.pollForToken = pollForToken;
|
|
82
|
+
//# sourceMappingURL=poll-for-token.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll-for-token.cjs","names":["isOAuthError"],"sources":["../../src/auth/poll-for-token.ts"],"sourcesContent":["import { setTimeout } from \"node:timers/promises\";\nimport { updateAuthConfig } from \"./file.js\";\nimport { DeviceAuthorizationRequest, isOAuthError, OAuth } from \"./oauth.js\";\n\nexport type PollTokenItem =\n | { _tag: \"Timeout\"; newInterval: number }\n | { _tag: \"SlowDown\"; newInterval: number }\n | { _tag: \"Error\"; error: Error }\n | {\n _tag: \"Response\";\n response: { text(): Promise<string> };\n };\n\nexport async function* pollForToken({\n request,\n oauth,\n}: {\n request: DeviceAuthorizationRequest;\n oauth: OAuth;\n}): AsyncGenerator<PollTokenItem, void, void> {\n const controller = new AbortController();\n try {\n let intervalMs = request.interval * 1000;\n while (Date.now() < request.expiresAt) {\n const [tokenResponseError, tokenResponse] =\n await oauth.deviceAccessTokenRequest(request.device_code);\n\n if (tokenResponseError) {\n // 2x backoff on connection timeouts per spec https://datatracker.ietf.org/doc/html/rfc8628#section-3.5\n if (tokenResponseError.message.includes(\"timeout\")) {\n intervalMs *= 2;\n yield { _tag: \"Timeout\" as const, newInterval: intervalMs };\n await setTimeout(intervalMs, { signal: controller.signal });\n continue;\n }\n yield { _tag: \"Error\" as const, error: tokenResponseError };\n return;\n }\n\n yield {\n _tag: \"Response\" as const,\n response: tokenResponse.clone() as { text(): Promise<string> },\n };\n\n const [tokensError, tokens] =\n await oauth.processTokenResponse(tokenResponse);\n\n if (isOAuthError(tokensError)) {\n const { code } = tokensError;\n switch (code) {\n case \"authorization_pending\":\n await setTimeout(intervalMs, { signal: controller.signal });\n continue;\n case \"slow_down\":\n intervalMs += 5 * 1000;\n yield { _tag: \"SlowDown\" as const, newInterval: intervalMs };\n await setTimeout(intervalMs, { signal: controller.signal });\n continue;\n default:\n yield { _tag: \"Error\", error: tokensError.cause };\n return;\n }\n }\n\n if (tokensError) {\n yield { _tag: \"Error\", error: tokensError };\n return;\n }\n\n updateAuthConfig({\n token: tokens.access_token,\n expiresAt: new Date(Date.now() + tokens.expires_in * 1000),\n refreshToken: tokens.refresh_token,\n });\n\n return;\n }\n\n yield {\n _tag: \"Error\" as const,\n error: new Error(\n \"Timed out waiting for authentication. Please try again.\",\n ),\n };\n return;\n } finally {\n controller.abort();\n }\n}\n"],"mappings":";;;;;;AAaA,gBAAuB,aAAa,EAClC,SACA,SAI4C;CAC5C,MAAM,aAAa,IAAI,iBAAiB;AACxC,KAAI;EACF,IAAI,aAAa,QAAQ,WAAW;AACpC,SAAO,KAAK,KAAK,GAAG,QAAQ,WAAW;GACrC,MAAM,CAAC,oBAAoB,iBACzB,MAAM,MAAM,yBAAyB,QAAQ,YAAY;AAE3D,OAAI,oBAAoB;AAEtB,QAAI,mBAAmB,QAAQ,SAAS,UAAU,EAAE;AAClD,mBAAc;AACd,WAAM;MAAE,MAAM;MAAoB,aAAa;MAAY;AAC3D,gDAAiB,YAAY,EAAE,QAAQ,WAAW,QAAQ,CAAC;AAC3D;;AAEF,UAAM;KAAE,MAAM;KAAkB,OAAO;KAAoB;AAC3D;;AAGF,SAAM;IACJ,MAAM;IACN,UAAU,cAAc,OAAO;IAChC;GAED,MAAM,CAAC,aAAa,UAClB,MAAM,MAAM,qBAAqB,cAAc;AAEjD,OAAIA,2BAAa,YAAY,EAAE;IAC7B,MAAM,EAAE,SAAS;AACjB,YAAQ,MAAR;KACE,KAAK;AACH,iDAAiB,YAAY,EAAE,QAAQ,WAAW,QAAQ,CAAC;AAC3D;KACF,KAAK;AACH,oBAAc,IAAI;AAClB,YAAM;OAAE,MAAM;OAAqB,aAAa;OAAY;AAC5D,iDAAiB,YAAY,EAAE,QAAQ,WAAW,QAAQ,CAAC;AAC3D;KACF;AACE,YAAM;OAAE,MAAM;OAAS,OAAO,YAAY;OAAO;AACjD;;;AAIN,OAAI,aAAa;AACf,UAAM;KAAE,MAAM;KAAS,OAAO;KAAa;AAC3C;;AAGF,iCAAiB;IACf,OAAO,OAAO;IACd,WAAW,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO,aAAa,IAAK;IAC1D,cAAc,OAAO;IACtB,CAAC;AAEF;;AAGF,QAAM;GACJ,MAAM;GACN,uBAAO,IAAI,MACT,0DACD;GACF;AACD;WACQ;AACR,aAAW,OAAO"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DeviceAuthorizationRequest, OAuth } from "./oauth.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/auth/poll-for-token.d.ts
|
|
4
|
+
type PollTokenItem = {
|
|
5
|
+
_tag: "Timeout";
|
|
6
|
+
newInterval: number;
|
|
7
|
+
} | {
|
|
8
|
+
_tag: "SlowDown";
|
|
9
|
+
newInterval: number;
|
|
10
|
+
} | {
|
|
11
|
+
_tag: "Error";
|
|
12
|
+
error: Error;
|
|
13
|
+
} | {
|
|
14
|
+
_tag: "Response";
|
|
15
|
+
response: {
|
|
16
|
+
text(): Promise<string>;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
declare function pollForToken({
|
|
20
|
+
request,
|
|
21
|
+
oauth
|
|
22
|
+
}: {
|
|
23
|
+
request: DeviceAuthorizationRequest;
|
|
24
|
+
oauth: OAuth;
|
|
25
|
+
}): AsyncGenerator<PollTokenItem, void, void>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { pollForToken };
|
|
28
|
+
//# sourceMappingURL=poll-for-token.d.cts.map
|