@cloudflare/workers-auth 0.9.3 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cf/index.d.mts +3 -3
- package/dist/cf/index.mjs +6 -3
- package/dist/{chunk-WMSASLDV.mjs → chunk-FT2NMTJB.mjs} +54 -21
- package/dist/{chunk-O6YSETKJ.mjs → chunk-VAZEJK55.mjs} +3 -0
- package/dist/{chunk-V6MEAFHI.mjs → chunk-VVLCNASF.mjs} +10 -3
- package/dist/{file-format-Dlt3H3sW.d.mts → file-format-hS8cJZA7.d.mts} +3 -1
- package/dist/index.d.mts +19 -4
- package/dist/index.mjs +5 -2
- package/dist/{keyring-preference-B8dU564W.d.mts → keyring-preference-dD49DWOI.d.mts} +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/test-helpers/index.mjs +3 -1
- package/dist/wrangler/index.d.mts +2 -2
- package/dist/wrangler/index.mjs +6 -3
- package/package.json +3 -3
package/dist/cf/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as ConfigStorage, A as AuthConfigStorage, U as UserAuthConfig, f as OAuthFlowContext, g as ProfileStore } from '../file-format-
|
|
2
|
-
import { C as CliDescriptor, A as AuthContext, a as CloudflareAuth, U as UserPreferences, K as KeyringPreferenceContext, S as SetKeyringPreferenceResult } from '../keyring-preference-
|
|
3
|
-
export { b as CloudflareLoginProps } from '../keyring-preference-
|
|
1
|
+
import { a as ConfigStorage, A as AuthConfigStorage, U as UserAuthConfig, f as OAuthFlowContext, g as ProfileStore } from '../file-format-hS8cJZA7.mjs';
|
|
2
|
+
import { C as CliDescriptor, A as AuthContext, a as CloudflareAuth, U as UserPreferences, K as KeyringPreferenceContext, S as SetKeyringPreferenceResult } from '../keyring-preference-dD49DWOI.mjs';
|
|
3
|
+
export { b as CloudflareLoginProps } from '../keyring-preference-dD49DWOI.mjs';
|
|
4
4
|
import '@cloudflare/workers-utils';
|
|
5
5
|
|
|
6
6
|
/**
|
package/dist/cf/index.mjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { createAuthConfigFileHelpers, createPreferences, createKeyringPreference, createFileStorage, createCloudflareAuth, createCloudflareProfileStore } from '../chunk-VVLCNASF.mjs';
|
|
3
|
+
import '../chunk-FT2NMTJB.mjs';
|
|
4
|
+
import { __name } from '../chunk-VAZEJK55.mjs';
|
|
4
5
|
import { getEnvironmentVariableFactory, getGlobalConfigPath, getCloudflareApiEnvironmentFromEnv } from '@cloudflare/workers-utils';
|
|
5
6
|
import path from 'node:path';
|
|
6
7
|
|
|
8
|
+
createRequire(import.meta.url || (typeof __filename === "string" ? __filename : "/"));
|
|
9
|
+
|
|
7
10
|
// src/cf/constants.ts
|
|
8
11
|
var CF_KEYRING_SERVICE_NAME = "cloudflare";
|
|
9
12
|
var CF_CLI_NAME = "cf";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { __name } from './chunk-VAZEJK55.mjs';
|
|
2
3
|
import { getEnvironmentVariableFactory, getCloudflareApiEnvironmentFromEnv, getBooleanEnvironmentVariableFactory, UserError, readFileSync, isNonInteractiveOrCI, FatalError, getCloudflareApiBaseUrl, COMPLIANCE_REGION_CONFIG_PUBLIC, getCloudflareComplianceRegion, parseTOML } from '@cloudflare/workers-utils';
|
|
3
4
|
import { spawn, spawnSync } from 'node:child_process';
|
|
4
5
|
import { fetch } from 'undici';
|
|
@@ -9,7 +10,8 @@ import http from 'node:http';
|
|
|
9
10
|
import url from 'node:url';
|
|
10
11
|
import path4 from 'node:path';
|
|
11
12
|
import { existsSync, mkdirSync, writeFileSync, chmodSync, rmSync } from 'node:fs';
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
createRequire(import.meta.url || (typeof __filename === "string" ? __filename : "/"));
|
|
13
15
|
|
|
14
16
|
// src/state.ts
|
|
15
17
|
var hasWarnedAboutDeprecatedV1ApiToken = false;
|
|
@@ -162,6 +164,14 @@ var getCloudflareAuthUseKeyringFromEnv = getBooleanEnvironmentVariableFactory({
|
|
|
162
164
|
});
|
|
163
165
|
var headersCache = {};
|
|
164
166
|
var usesAccessCache = /* @__PURE__ */ new Map();
|
|
167
|
+
function buildProbeUrl(domain, previewToken) {
|
|
168
|
+
const url2 = new URL(`https://${domain}`);
|
|
169
|
+
if (previewToken) {
|
|
170
|
+
url2.searchParams.set("cf_workers_preview_token", previewToken);
|
|
171
|
+
}
|
|
172
|
+
return url2.toString();
|
|
173
|
+
}
|
|
174
|
+
__name(buildProbeUrl, "buildProbeUrl");
|
|
165
175
|
function clearAccessCaches() {
|
|
166
176
|
for (const key of Object.keys(headersCache)) {
|
|
167
177
|
delete headersCache[key];
|
|
@@ -169,15 +179,16 @@ function clearAccessCaches() {
|
|
|
169
179
|
usesAccessCache.clear();
|
|
170
180
|
}
|
|
171
181
|
__name(clearAccessCaches, "clearAccessCaches");
|
|
172
|
-
async function domainUsesAccess(domain, logger) {
|
|
182
|
+
async function domainUsesAccess(domain, logger, previewToken) {
|
|
173
183
|
logger.debug("Checking if domain has Access enabled:", domain);
|
|
174
|
-
|
|
184
|
+
const cacheKey = JSON.stringify([domain, Boolean(previewToken)]);
|
|
185
|
+
if (usesAccessCache.has(cacheKey)) {
|
|
175
186
|
logger.debug(
|
|
176
187
|
"Using cached Access switch for:",
|
|
177
188
|
domain,
|
|
178
|
-
usesAccessCache.get(
|
|
189
|
+
usesAccessCache.get(cacheKey)
|
|
179
190
|
);
|
|
180
|
-
return usesAccessCache.get(
|
|
191
|
+
return usesAccessCache.get(cacheKey) ?? false;
|
|
181
192
|
}
|
|
182
193
|
logger.debug("Access switch not cached for:", domain);
|
|
183
194
|
try {
|
|
@@ -185,17 +196,19 @@ async function domainUsesAccess(domain, logger) {
|
|
|
185
196
|
const cancel = setTimeout(() => {
|
|
186
197
|
controller.abort();
|
|
187
198
|
}, 1e3);
|
|
188
|
-
const output = await fetch(
|
|
199
|
+
const output = await fetch(buildProbeUrl(domain, previewToken), {
|
|
189
200
|
redirect: "manual",
|
|
190
201
|
signal: controller.signal
|
|
191
202
|
});
|
|
192
203
|
clearTimeout(cancel);
|
|
193
204
|
const usesAccess = !!(output.status === 302 && output.headers.get("location")?.includes("cloudflareaccess.com"));
|
|
194
|
-
|
|
195
|
-
|
|
205
|
+
if (usesAccess || !previewToken) {
|
|
206
|
+
logger.debug("Caching access switch for:", domain);
|
|
207
|
+
usesAccessCache.set(cacheKey, usesAccess);
|
|
208
|
+
}
|
|
196
209
|
return usesAccess;
|
|
197
210
|
} catch {
|
|
198
|
-
|
|
211
|
+
logger.debug("Access probe failed for:", domain);
|
|
199
212
|
return false;
|
|
200
213
|
}
|
|
201
214
|
}
|
|
@@ -216,7 +229,7 @@ async function getAccessHeaders(domain, options) {
|
|
|
216
229
|
`Both CLOUDFLARE_ACCESS_CLIENT_ID and CLOUDFLARE_ACCESS_CLIENT_SECRET must be set to use Access Service Token authentication. Only ${clientId !== void 0 ? "CLOUDFLARE_ACCESS_CLIENT_ID" : "CLOUDFLARE_ACCESS_CLIENT_SECRET"} was found.`
|
|
217
230
|
);
|
|
218
231
|
}
|
|
219
|
-
if (!await domainUsesAccess(domain, logger)) {
|
|
232
|
+
if (!await domainUsesAccess(domain, logger, options.previewToken)) {
|
|
220
233
|
return {};
|
|
221
234
|
}
|
|
222
235
|
logger.debug("Getting Access headers for domain:", domain);
|
|
@@ -235,7 +248,10 @@ See https://developers.cloudflare.com/cloudflare-one/access-controls/service-cre
|
|
|
235
248
|
);
|
|
236
249
|
}
|
|
237
250
|
logger.debug("Spawning cloudflared to get Access token for domain:");
|
|
238
|
-
const output = await spawnCloudflaredAccessLogin(
|
|
251
|
+
const output = await spawnCloudflaredAccessLogin(
|
|
252
|
+
buildProbeUrl(domain, options.previewToken),
|
|
253
|
+
options.signal
|
|
254
|
+
);
|
|
239
255
|
if (output.error) {
|
|
240
256
|
throw new UserError(
|
|
241
257
|
"To use Wrangler with Cloudflare Access, please install `cloudflared` from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation",
|
|
@@ -254,9 +270,11 @@ See https://developers.cloudflare.com/cloudflare-one/access-controls/service-cre
|
|
|
254
270
|
throw new Error("Failed to authenticate with Cloudflare Access");
|
|
255
271
|
}
|
|
256
272
|
__name(getAccessHeaders, "getAccessHeaders");
|
|
257
|
-
function spawnCloudflaredAccessLogin(
|
|
273
|
+
function spawnCloudflaredAccessLogin(loginTarget, signal) {
|
|
258
274
|
return new Promise((resolve, reject) => {
|
|
259
|
-
const child = spawn("cloudflared", ["access", "login",
|
|
275
|
+
const child = spawn("cloudflared", ["access", "login", loginTarget], {
|
|
276
|
+
signal
|
|
277
|
+
});
|
|
260
278
|
const stdoutChunks = [];
|
|
261
279
|
child.stdout.on("data", (chunk) => stdoutChunks.push(chunk));
|
|
262
280
|
child.stderr.resume();
|
|
@@ -732,6 +750,14 @@ var ErrorUnknown = class extends ErrorOAuth2 {
|
|
|
732
750
|
return "ErrorUnknown";
|
|
733
751
|
}
|
|
734
752
|
};
|
|
753
|
+
var ErrorAuthServerUnreachable = class extends ErrorOAuth2 {
|
|
754
|
+
static {
|
|
755
|
+
__name(this, "ErrorAuthServerUnreachable");
|
|
756
|
+
}
|
|
757
|
+
toString() {
|
|
758
|
+
return "ErrorAuthServerUnreachable";
|
|
759
|
+
}
|
|
760
|
+
};
|
|
735
761
|
var ErrorNoAuthCode = class extends ErrorOAuth2 {
|
|
736
762
|
static {
|
|
737
763
|
__name(this, "ErrorNoAuthCode");
|
|
@@ -1132,7 +1158,12 @@ async function fetchAuthToken(body, logger, isNonInteractiveOrCI2) {
|
|
|
1132
1158
|
return response;
|
|
1133
1159
|
} catch (e) {
|
|
1134
1160
|
logger.debug("Failed to fetch auth token:", e);
|
|
1135
|
-
|
|
1161
|
+
const cause = e?.cause;
|
|
1162
|
+
const code = typeof cause?.code === "string" ? ` (${cause.code})` : "";
|
|
1163
|
+
throw new ErrorAuthServerUnreachable(
|
|
1164
|
+
`Could not reach the Cloudflare auth server at ${getTokenUrlFromEnv()}${code}.`,
|
|
1165
|
+
{ cause: e, telemetryMessage: "user oauth token endpoint unreachable" }
|
|
1166
|
+
);
|
|
1136
1167
|
}
|
|
1137
1168
|
}
|
|
1138
1169
|
__name(fetchAuthToken, "fetchAuthToken");
|
|
@@ -1778,12 +1809,12 @@ function createOAuthFlow(ctx) {
|
|
|
1778
1809
|
refresh_token,
|
|
1779
1810
|
scopes
|
|
1780
1811
|
});
|
|
1781
|
-
return
|
|
1812
|
+
return "refreshed";
|
|
1782
1813
|
} catch (e) {
|
|
1783
1814
|
ctx.logger.debug(
|
|
1784
1815
|
`Token refresh failed: ${e instanceof Error ? e.message : String(e)}`
|
|
1785
1816
|
);
|
|
1786
|
-
return
|
|
1817
|
+
return e instanceof ErrorAuthServerUnreachable ? "unreachable" : "rejected";
|
|
1787
1818
|
}
|
|
1788
1819
|
}
|
|
1789
1820
|
__name(refreshToken, "refreshToken");
|
|
@@ -1807,10 +1838,13 @@ function createOAuthFlow(ctx) {
|
|
|
1807
1838
|
}
|
|
1808
1839
|
return { loggedIn: false, reason: "no-credentials-login-failed" };
|
|
1809
1840
|
} else if (isRefreshNeeded(props.profile)) {
|
|
1810
|
-
const
|
|
1811
|
-
if (
|
|
1841
|
+
const refreshed = await refreshToken(props.profile);
|
|
1842
|
+
if (refreshed === "refreshed") {
|
|
1812
1843
|
return { loggedIn: true };
|
|
1813
1844
|
}
|
|
1845
|
+
if (refreshed === "unreachable") {
|
|
1846
|
+
return { loggedIn: false, reason: "token-refresh-unreachable" };
|
|
1847
|
+
}
|
|
1814
1848
|
if (ctx.isNonInteractiveOrCI()) {
|
|
1815
1849
|
return {
|
|
1816
1850
|
loggedIn: false,
|
|
@@ -1868,8 +1902,7 @@ function createOAuthFlow(ctx) {
|
|
|
1868
1902
|
}
|
|
1869
1903
|
const expired = stored.accessToken && /* @__PURE__ */ new Date() >= new Date(stored.accessToken.expiry);
|
|
1870
1904
|
if (expired) {
|
|
1871
|
-
|
|
1872
|
-
if (!didRefresh) {
|
|
1905
|
+
if (await refreshToken() !== "refreshed") {
|
|
1873
1906
|
return void 0;
|
|
1874
1907
|
}
|
|
1875
1908
|
stored = readStoredAuthState({
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
|
|
3
|
+
createRequire(import.meta.url || (typeof __filename === "string" ? __filename : "/"));
|
|
1
4
|
var __defProp = Object.defineProperty;
|
|
2
5
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
6
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { stringifyFile, parseFile, dedent, createCredentialStorageContext, createOAuthFlow, getAuthFromEnv, createProfileStore, validateAccountId, getCloudflareAccountIdFromEnv, getAuthConfigFilePath, getEncryptedAuthConfigFilePath, scrubEncryptedCredentials, validateProfileName, getCloudflareAuthUseKeyringFromEnv } from './chunk-FT2NMTJB.mjs';
|
|
3
|
+
import { __name } from './chunk-VAZEJK55.mjs';
|
|
3
4
|
import { existsSync, rmSync, mkdirSync, writeFileSync, chmodSync, readFileSync as readFileSync$1, readdirSync } from 'node:fs';
|
|
4
5
|
import path3 from 'node:path';
|
|
5
6
|
import { URLSearchParams } from 'node:url';
|
|
6
7
|
import { readFileSync, isNonInteractiveOrCI, createConfigCache, openInBrowser, fetchInternalBase, hasMorePages, throwFetchError, UserError, isCI, getCloudflareComplianceRegion } from '@cloudflare/workers-utils';
|
|
7
8
|
|
|
9
|
+
createRequire(import.meta.url || (typeof __filename === "string" ? __filename : "/"));
|
|
8
10
|
function createPreferences(getConfigPath) {
|
|
9
11
|
function getUserPreferencesPath() {
|
|
10
12
|
return path3.resolve(getConfigPath(), "preferences.json");
|
|
@@ -763,7 +765,8 @@ function notLoggedInErrorBodies(loginCommand) {
|
|
|
763
765
|
"no-credentials-non-interactive": `Could not authenticate because no credentials were found and the environment is non-interactive. Set a CLOUDFLARE_API_TOKEN environment variable or run \`${loginCommand}\` in an interactive terminal first.`,
|
|
764
766
|
"no-credentials-login-failed": `No credentials were found and the login attempt was unsuccessful. Run \`${loginCommand}\` to try again.`,
|
|
765
767
|
"token-expired-non-interactive": `Your auth token has expired and could not be refreshed, and the environment is non-interactive. Run \`${loginCommand}\` in an interactive terminal or set a CLOUDFLARE_API_TOKEN.`,
|
|
766
|
-
"token-expired-login-failed": `Your auth token has expired and could not be refreshed, and the login attempt was unsuccessful. Run \`${loginCommand}\` to try again
|
|
768
|
+
"token-expired-login-failed": `Your auth token has expired and could not be refreshed, and the login attempt was unsuccessful. Run \`${loginCommand}\` to try again.`,
|
|
769
|
+
"token-refresh-unreachable": `Your auth token has expired and could not be refreshed because the Cloudflare auth server could not be reached. This is usually a network problem (connectivity, proxy, or IPv6), not an invalid login: your stored credentials were left unchanged. Check your connection and try again.`
|
|
767
770
|
};
|
|
768
771
|
}
|
|
769
772
|
__name(notLoggedInErrorBodies, "notLoggedInErrorBodies");
|
|
@@ -1101,6 +1104,10 @@ ${accounts.map(
|
|
|
1101
1104
|
`In a non-interactive environment, it's necessary to set a CLOUDFLARE_API_TOKEN environment variable for ${cliName} to work. Please go to https://developers.cloudflare.com/fundamentals/api/get-started/create-token/ for instructions on how to create an api token, and assign its value to CLOUDFLARE_API_TOKEN.`,
|
|
1102
1105
|
{ telemetryMessage: "user auth missing api token non interactive" }
|
|
1103
1106
|
);
|
|
1107
|
+
} else if (result.reason === "token-refresh-unreachable") {
|
|
1108
|
+
throw new UserError(NOT_LOGGED_IN_ERROR_BODIES[result.reason], {
|
|
1109
|
+
telemetryMessage: "user auth token refresh unreachable"
|
|
1110
|
+
});
|
|
1104
1111
|
} else {
|
|
1105
1112
|
throw new UserError("Did not login, quitting...", {
|
|
1106
1113
|
telemetryMessage: "user login cancelled"
|
|
@@ -248,7 +248,9 @@ type LoginOrRefreshFailureReason =
|
|
|
248
248
|
/** the stored token has expired, refresh failed, and the environment is non-interactive so a browser login cannot be started. */
|
|
249
249
|
| "token-expired-non-interactive"
|
|
250
250
|
/** the stored token has expired, refresh failed, and the interactive login attempt was unsuccessful. */
|
|
251
|
-
| "token-expired-login-failed"
|
|
251
|
+
| "token-expired-login-failed"
|
|
252
|
+
/** the stored token has expired and the auth server could not be reached to refresh it; the stored credentials were left untouched and no login was attempted. */
|
|
253
|
+
| "token-refresh-unreachable";
|
|
252
254
|
/**
|
|
253
255
|
* Discriminated union returned by {@link OAuthFlowAPI.loginOrRefreshIfRequired}.
|
|
254
256
|
*
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as OAuthFlowLogger, U as UserAuthConfig, A as AuthConfigStorage, C as CredentialStore, F as FileFormat } from './file-format-
|
|
2
|
-
export { a as ConfigStorage, D as DeactivateDirectoryResult, b as DirectoryBindingOperations, c as DirectoryBindingsStorage, L as LoginOrRefreshFailureReason, d as LoginOrRefreshResult, e as LoginProps, f as OAuthFlowContext, P as ProfileConfigOperations, g as ProfileStore, T as TemporaryAccountRequest, h as TemporaryPreviewAccount, i as createOAuthFlow, j as createProfileStore, k as generateAuthUrl, l as generateRandomState, v as validateProfileName } from './file-format-
|
|
1
|
+
import { O as OAuthFlowLogger, U as UserAuthConfig, A as AuthConfigStorage, C as CredentialStore, F as FileFormat } from './file-format-hS8cJZA7.mjs';
|
|
2
|
+
export { a as ConfigStorage, D as DeactivateDirectoryResult, b as DirectoryBindingOperations, c as DirectoryBindingsStorage, L as LoginOrRefreshFailureReason, d as LoginOrRefreshResult, e as LoginProps, f as OAuthFlowContext, P as ProfileConfigOperations, g as ProfileStore, T as TemporaryAccountRequest, h as TemporaryPreviewAccount, i as createOAuthFlow, j as createProfileStore, k as generateAuthUrl, l as generateRandomState, v as validateProfileName } from './file-format-hS8cJZA7.mjs';
|
|
3
3
|
import { ApiCredentials } from '@cloudflare/workers-utils';
|
|
4
4
|
import { SpawnSyncReturns } from 'node:child_process';
|
|
5
5
|
|
|
@@ -42,14 +42,23 @@ declare function clearAccessCaches(): void;
|
|
|
42
42
|
* A 302 to `cloudflareaccess.com` is the canonical signal. Service-auth-only
|
|
43
43
|
* Access applications return a hard 403 instead and are therefore not detected
|
|
44
44
|
* here — see {@link getAccessHeaders} for how this is handled.
|
|
45
|
+
*
|
|
46
|
+
* When `previewToken` is supplied it is added as the `cf_workers_preview_token`
|
|
47
|
+
* query parameter so the probe activates an unpublished worker's edge-preview
|
|
48
|
+
* route (otherwise the anonymous probe 404s and Access is never triggered). The
|
|
49
|
+
* cache is keyed on whether a token was supplied so token-authenticated and
|
|
50
|
+
* anonymous probes of the same host don't poison each other.
|
|
45
51
|
*/
|
|
46
|
-
declare function domainUsesAccess(domain: string, logger: OAuthFlowLogger): Promise<boolean>;
|
|
52
|
+
declare function domainUsesAccess(domain: string, logger: OAuthFlowLogger, previewToken?: string): Promise<boolean>;
|
|
47
53
|
/**
|
|
48
54
|
* Get the headers needed to authenticate with an Access-protected domain.
|
|
49
55
|
*
|
|
50
56
|
* @param domain The hostname of the Access-protected domain (e.g. `"example.com"`).
|
|
51
57
|
* @param options logger + an `isNonInteractiveOrCI` predicate used to
|
|
52
|
-
* produce an actionable error in CI
|
|
58
|
+
* produce an actionable error in CI (both default to no-op / `false`), plus an
|
|
59
|
+
* optional `previewToken` that is added as the `cf_workers_preview_token`
|
|
60
|
+
* query parameter when probing for Access and when invoking `cloudflared
|
|
61
|
+
* access login`, so detection works on unpublished `<name>.workers.dev` hosts.
|
|
53
62
|
* @returns
|
|
54
63
|
* - Service token headers (`CF-Access-Client-Id` + `CF-Access-Client-Secret`) if env vars are set
|
|
55
64
|
* - A `Cookie: CF_Authorization=...` header if obtained via `cloudflared` (interactive only)
|
|
@@ -64,6 +73,12 @@ declare function getAccessHeaders(domain: string, options: {
|
|
|
64
73
|
isNonInteractiveOrCI?: () => boolean;
|
|
65
74
|
/** Aborts a pending `cloudflared` authorization and kills its process. */
|
|
66
75
|
signal?: AbortSignal;
|
|
76
|
+
/**
|
|
77
|
+
* Workers preview token forwarded to the Access probe and to
|
|
78
|
+
* `cloudflared access login` so detection works on unpublished
|
|
79
|
+
* `<name>.workers.dev` hosts.
|
|
80
|
+
*/
|
|
81
|
+
previewToken?: string;
|
|
67
82
|
}): Promise<Record<string, string>>;
|
|
68
83
|
|
|
69
84
|
/**
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
export { EncryptedFileCredentialStore, FileCredentialStore, LinuxSecretToolKeyProvider, MacSecurityKeyProvider, NapiKeyringKeyProvider, PINNED_KEYRING_VERSION, PKCE_CHARSET, TEMPORARY_TERMS_NOTICE, TEMPORARY_TERMS_PROMPT, clearAccessCaches, clearCredentialStorageState, createCredentialStorageContext, createOAuthFlow, createProfileStore, decryptString, domainUsesAccess, encryptString, findKeyringBinding, generateAuthUrl, generateKey, generateRandomState, generateVerificationUrl, getAccessHeaders, getAuthConfigFilePath, getAuthFromEnv, getAuthUrlFromEnv, getCloudflareAPITokenFromEnv, getCloudflareAccountIdFromEnv, getCloudflareAuthUseKeyringFromEnv, getCloudflareGlobalAuthEmailFromEnv, getCloudflareGlobalAuthKeyFromEnv, getEncryptedAuthConfigFilePath, getKeyringAccountName, getKeyringInstallDir, installKeyringBindingSync, parseEncryptedEnvelope, probeSecretTool, readStoredAuthState, resetCredentialStorageState, resolveKeyProvider, scrubEncryptedCredentials, setKeyProviderFactoryForTesting, setKeyringEntryFactory, setLinuxSecretToolRunner, setMacSecurityCommandRunner, setNpmRunner, validateProfileName } from './chunk-FT2NMTJB.mjs';
|
|
3
|
+
import './chunk-VAZEJK55.mjs';
|
|
4
|
+
|
|
5
|
+
createRequire(import.meta.url || (typeof __filename === "string" ? __filename : "/"));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as OAuthFlowContext, m as OAuthConsentPages, F as FileFormat, C as CredentialStore, T as TemporaryAccountRequest, d as LoginOrRefreshResult, U as UserAuthConfig } from './file-format-
|
|
1
|
+
import { f as OAuthFlowContext, m as OAuthConsentPages, F as FileFormat, C as CredentialStore, T as TemporaryAccountRequest, d as LoginOrRefreshResult, U as UserAuthConfig } from './file-format-hS8cJZA7.mjs';
|
|
2
2
|
import { ApiCredentials, ComplianceConfig } from '@cloudflare/workers-utils';
|
|
3
3
|
|
|
4
4
|
/** Minimal shape of the interactive `select` prompt's options for account selection. */
|