@hs-x/cli 0.1.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 +1001 -0
- package/dist/account-store.d.ts +51 -0
- package/dist/account-store.d.ts.map +1 -0
- package/dist/account-store.js +138 -0
- package/dist/account-store.js.map +1 -0
- package/dist/bin/hs-x.d.ts +3 -0
- package/dist/bin/hs-x.d.ts.map +1 -0
- package/dist/bin/hs-x.js +47 -0
- package/dist/bin/hs-x.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +595 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli-error.d.ts +36 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +40 -0
- package/dist/cli-error.js.map +1 -0
- package/dist/cloudflare-auth.d.ts +25 -0
- package/dist/cloudflare-auth.d.ts.map +1 -0
- package/dist/cloudflare-auth.js +251 -0
- package/dist/cloudflare-auth.js.map +1 -0
- package/dist/cloudflare-kv.d.ts +23 -0
- package/dist/cloudflare-kv.d.ts.map +1 -0
- package/dist/cloudflare-kv.js +101 -0
- package/dist/cloudflare-kv.js.map +1 -0
- package/dist/cloudflare-oauth-store.d.ts +16 -0
- package/dist/cloudflare-oauth-store.d.ts.map +1 -0
- package/dist/cloudflare-oauth-store.js +80 -0
- package/dist/cloudflare-oauth-store.js.map +1 -0
- package/dist/cloudflare-oauth.d.ts +82 -0
- package/dist/cloudflare-oauth.d.ts.map +1 -0
- package/dist/cloudflare-oauth.js +336 -0
- package/dist/cloudflare-oauth.js.map +1 -0
- package/dist/cloudflare-pointer.d.ts +13 -0
- package/dist/cloudflare-pointer.d.ts.map +1 -0
- package/dist/cloudflare-pointer.js +46 -0
- package/dist/cloudflare-pointer.js.map +1 -0
- package/dist/command-history.d.ts +7 -0
- package/dist/command-history.d.ts.map +1 -0
- package/dist/command-history.js +34 -0
- package/dist/command-history.js.map +1 -0
- package/dist/commands/account.d.ts +7 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +315 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/api.d.ts +36 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +521 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/completion.d.ts +7 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +121 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +1123 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/control-plane-read.d.ts +22 -0
- package/dist/commands/control-plane-read.d.ts.map +1 -0
- package/dist/commands/control-plane-read.js +350 -0
- package/dist/commands/control-plane-read.js.map +1 -0
- package/dist/commands/deploy-promote.d.ts +14 -0
- package/dist/commands/deploy-promote.d.ts.map +1 -0
- package/dist/commands/deploy-promote.js +105 -0
- package/dist/commands/deploy-promote.js.map +1 -0
- package/dist/commands/deploy.d.ts +18 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +2764 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +913 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +258 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/flags.d.ts +22 -0
- package/dist/commands/flags.d.ts.map +1 -0
- package/dist/commands/flags.js +185 -0
- package/dist/commands/flags.js.map +1 -0
- package/dist/commands/help-command.d.ts +13 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +482 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/history.d.ts +6 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +42 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +233 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +26 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +441 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +381 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/migrate.d.ts +8 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +258 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rollback.d.ts +21 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +301 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/secrets.d.ts +7 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +230 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +241 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/unlink.d.ts +21 -0
- package/dist/commands/unlink.d.ts.map +1 -0
- package/dist/commands/unlink.js +83 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/commands/update.d.ts +11 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +154 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/control-plane-fetch.d.ts +34 -0
- package/dist/control-plane-fetch.d.ts.map +1 -0
- package/dist/control-plane-fetch.js +73 -0
- package/dist/control-plane-fetch.js.map +1 -0
- package/dist/control-plane-loader.d.ts +16 -0
- package/dist/control-plane-loader.d.ts.map +1 -0
- package/dist/control-plane-loader.js +24 -0
- package/dist/control-plane-loader.js.map +1 -0
- package/dist/dev/compat-shim.d.ts +40 -0
- package/dist/dev/compat-shim.d.ts.map +1 -0
- package/dist/dev/compat-shim.js +65 -0
- package/dist/dev/compat-shim.js.map +1 -0
- package/dist/dev/event-bus.d.ts +27 -0
- package/dist/dev/event-bus.d.ts.map +1 -0
- package/dist/dev/event-bus.js +32 -0
- package/dist/dev/event-bus.js.map +1 -0
- package/dist/dev/log-server.d.ts +52 -0
- package/dist/dev/log-server.d.ts.map +1 -0
- package/dist/dev/log-server.js +216 -0
- package/dist/dev/log-server.js.map +1 -0
- package/dist/dev/session-manager.d.ts +33 -0
- package/dist/dev/session-manager.d.ts.map +1 -0
- package/dist/dev/session-manager.js +132 -0
- package/dist/dev/session-manager.js.map +1 -0
- package/dist/dev/stream-renderer.d.ts +22 -0
- package/dist/dev/stream-renderer.d.ts.map +1 -0
- package/dist/dev/stream-renderer.js +65 -0
- package/dist/dev/stream-renderer.js.map +1 -0
- package/dist/dev/tunnel.d.ts +40 -0
- package/dist/dev/tunnel.d.ts.map +1 -0
- package/dist/dev/tunnel.js +139 -0
- package/dist/dev/tunnel.js.map +1 -0
- package/dist/effect-http.d.ts +10 -0
- package/dist/effect-http.d.ts.map +1 -0
- package/dist/effect-http.js +38 -0
- package/dist/effect-http.js.map +1 -0
- package/dist/errors-registry.d.ts +11 -0
- package/dist/errors-registry.d.ts.map +1 -0
- package/dist/errors-registry.js +554 -0
- package/dist/errors-registry.js.map +1 -0
- package/dist/errors.d.ts +58 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/help.d.ts +6 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +100 -0
- package/dist/help.js.map +1 -0
- package/dist/history.d.ts +15 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +69 -0
- package/dist/history.js.map +1 -0
- package/dist/hubspot-auth.d.ts +53 -0
- package/dist/hubspot-auth.d.ts.map +1 -0
- package/dist/hubspot-auth.js +301 -0
- package/dist/hubspot-auth.js.map +1 -0
- package/dist/hubspot-developer-client.d.ts +10 -0
- package/dist/hubspot-developer-client.d.ts.map +1 -0
- package/dist/hubspot-developer-client.js +212 -0
- package/dist/hubspot-developer-client.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/init/templates.d.ts +18 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +239 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/load-env.d.ts +16 -0
- package/dist/load-env.d.ts.map +1 -0
- package/dist/load-env.js +69 -0
- package/dist/load-env.js.map +1 -0
- package/dist/machine-id.d.ts +3 -0
- package/dist/machine-id.d.ts.map +1 -0
- package/dist/machine-id.js +41 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +19 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompt.d.ts +43 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +379 -0
- package/dist/prompt.js.map +1 -0
- package/dist/reporter/human.d.ts +28 -0
- package/dist/reporter/human.d.ts.map +1 -0
- package/dist/reporter/human.js +126 -0
- package/dist/reporter/human.js.map +1 -0
- package/dist/reporter/index.d.ts +14 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +37 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/json.d.ts +43 -0
- package/dist/reporter/json.d.ts.map +1 -0
- package/dist/reporter/json.js +146 -0
- package/dist/reporter/json.js.map +1 -0
- package/dist/reporter/style.d.ts +34 -0
- package/dist/reporter/style.d.ts.map +1 -0
- package/dist/reporter/style.js +97 -0
- package/dist/reporter/style.js.map +1 -0
- package/dist/reporter/types.d.ts +41 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +2 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/result.d.ts +4 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +2 -0
- package/dist/result.js.map +1 -0
- package/dist/services/account-store.d.ts +31 -0
- package/dist/services/account-store.d.ts.map +1 -0
- package/dist/services/account-store.js +135 -0
- package/dist/services/account-store.js.map +1 -0
- package/dist/services/app-paths.d.ts +25 -0
- package/dist/services/app-paths.d.ts.map +1 -0
- package/dist/services/app-paths.js +34 -0
- package/dist/services/app-paths.js.map +1 -0
- package/dist/services/cloudflare-auth.d.ts +83 -0
- package/dist/services/cloudflare-auth.d.ts.map +1 -0
- package/dist/services/cloudflare-auth.js +30 -0
- package/dist/services/cloudflare-auth.js.map +1 -0
- package/dist/services/cloudflare-kv.d.ts +45 -0
- package/dist/services/cloudflare-kv.d.ts.map +1 -0
- package/dist/services/cloudflare-kv.js +151 -0
- package/dist/services/cloudflare-kv.js.map +1 -0
- package/dist/services/command-history.d.ts +29 -0
- package/dist/services/command-history.d.ts.map +1 -0
- package/dist/services/command-history.js +62 -0
- package/dist/services/command-history.js.map +1 -0
- package/dist/services/control-plane.d.ts +32 -0
- package/dist/services/control-plane.d.ts.map +1 -0
- package/dist/services/control-plane.js +57 -0
- package/dist/services/control-plane.js.map +1 -0
- package/dist/services/env-loader.d.ts +18 -0
- package/dist/services/env-loader.d.ts.map +1 -0
- package/dist/services/env-loader.js +34 -0
- package/dist/services/env-loader.js.map +1 -0
- package/dist/services/http.d.ts +19 -0
- package/dist/services/http.d.ts.map +1 -0
- package/dist/services/http.js +9 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/live.d.ts +16 -0
- package/dist/services/live.d.ts.map +1 -0
- package/dist/services/live.js +26 -0
- package/dist/services/live.js.map +1 -0
- package/dist/services/machine-id.d.ts +18 -0
- package/dist/services/machine-id.d.ts.map +1 -0
- package/dist/services/machine-id.js +39 -0
- package/dist/services/machine-id.js.map +1 -0
- package/dist/services/reporter.d.ts +55 -0
- package/dist/services/reporter.d.ts.map +1 -0
- package/dist/services/reporter.js +49 -0
- package/dist/services/reporter.js.map +1 -0
- package/dist/state-store.d.ts +39 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +89 -0
- package/dist/state-store.js.map +1 -0
- package/dist/telemetry.d.ts +13 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +129 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tenant-state.d.ts +69 -0
- package/dist/tenant-state.d.ts.map +1 -0
- package/dist/tenant-state.js +161 -0
- package/dist/tenant-state.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export declare const CLOUDFLARE_OAUTH_DEFAULT_PORT = 8976;
|
|
2
|
+
export interface CloudflareOAuthConfig {
|
|
3
|
+
readonly clientId: string;
|
|
4
|
+
readonly endpointBase: string;
|
|
5
|
+
readonly redirectUri: string;
|
|
6
|
+
readonly scopes: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface CloudflareOAuthTokens {
|
|
9
|
+
readonly accessToken: string;
|
|
10
|
+
readonly refreshToken?: string;
|
|
11
|
+
readonly tokenType: string;
|
|
12
|
+
readonly expiresAt: string;
|
|
13
|
+
readonly scope?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class CloudflareOAuthError extends Error {
|
|
16
|
+
readonly code: string;
|
|
17
|
+
readonly detail: string;
|
|
18
|
+
constructor(code: string, message: string, detail?: string);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Source the OAuth client config. The platform brokers this: end users do not
|
|
22
|
+
* register their own Cloudflare OAuth client. The control plane exposes
|
|
23
|
+
* `GET /v1/oauth/cloudflare/config` returning `{ clientId, endpointBase,
|
|
24
|
+
* scopes, callbackPort }`. Env vars are a dev-only override so contributors
|
|
25
|
+
* can point at a sandbox client without a control plane.
|
|
26
|
+
*/
|
|
27
|
+
export interface LoadCloudflareOAuthConfigInput {
|
|
28
|
+
readonly controlPlaneUrl?: string;
|
|
29
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
30
|
+
readonly port?: number;
|
|
31
|
+
readonly fetchImpl?: typeof fetch;
|
|
32
|
+
}
|
|
33
|
+
export declare function loadCloudflareOAuthConfig(input?: LoadCloudflareOAuthConfigInput): Promise<CloudflareOAuthConfig>;
|
|
34
|
+
export interface ControlPlaneOAuthConfig {
|
|
35
|
+
readonly clientId: string;
|
|
36
|
+
readonly endpointBase: string;
|
|
37
|
+
readonly scopes: readonly string[];
|
|
38
|
+
readonly callbackPort?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface PkcePair {
|
|
41
|
+
readonly verifier: string;
|
|
42
|
+
readonly challenge: string;
|
|
43
|
+
readonly method: 'S256';
|
|
44
|
+
}
|
|
45
|
+
export declare function generatePkcePair(): PkcePair;
|
|
46
|
+
export declare function generateState(): string;
|
|
47
|
+
export declare function buildAuthorizeUrl(input: {
|
|
48
|
+
readonly config: CloudflareOAuthConfig;
|
|
49
|
+
readonly pkce: PkcePair;
|
|
50
|
+
readonly state: string;
|
|
51
|
+
}): string;
|
|
52
|
+
export interface CallbackResult {
|
|
53
|
+
readonly code: string;
|
|
54
|
+
readonly state: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start a local loopback HTTP server that captures the OAuth callback. Returns
|
|
58
|
+
* a promise that resolves with the auth code (or rejects with a typed error).
|
|
59
|
+
* Caller is responsible for calling `close()` when done.
|
|
60
|
+
*/
|
|
61
|
+
export declare function startCallbackListener(input: {
|
|
62
|
+
readonly port: number;
|
|
63
|
+
readonly expectedState: string;
|
|
64
|
+
readonly timeoutMs?: number;
|
|
65
|
+
}): {
|
|
66
|
+
readonly result: Promise<CallbackResult>;
|
|
67
|
+
readonly close: () => Promise<void>;
|
|
68
|
+
};
|
|
69
|
+
export interface ExchangeCodeInput {
|
|
70
|
+
readonly config: CloudflareOAuthConfig;
|
|
71
|
+
readonly code: string;
|
|
72
|
+
readonly verifier: string;
|
|
73
|
+
readonly fetchImpl?: typeof fetch;
|
|
74
|
+
}
|
|
75
|
+
export declare function exchangeAuthorizationCode(input: ExchangeCodeInput): Promise<CloudflareOAuthTokens>;
|
|
76
|
+
export interface RefreshTokensInput {
|
|
77
|
+
readonly config: CloudflareOAuthConfig;
|
|
78
|
+
readonly refreshToken: string;
|
|
79
|
+
readonly fetchImpl?: typeof fetch;
|
|
80
|
+
}
|
|
81
|
+
export declare function refreshTokens(input: RefreshTokensInput): Promise<CloudflareOAuthTokens>;
|
|
82
|
+
//# sourceMappingURL=cloudflare-oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-oauth.d.ts","sourceRoot":"","sources":["../src/cloudflare-oauth.ts"],"names":[],"mappings":"AA2CA,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAK;CAMvD;AAgBD;;;;;;GAMG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,GAAE,8BAAmC,GACzC,OAAO,CAAC,qBAAqB,CAAC,CAyBhC;AAoBD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AA4ED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAI3C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAWT;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AA0ED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAoBA;AAqED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAehC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAahC"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
// Cloudflare OAuth (authorization code + PKCE) for `hs-x connect cloudflare`.
|
|
2
|
+
//
|
|
3
|
+
// This module is the OAuth plumbing only — the client_id, endpoint base, and
|
|
4
|
+
// scopes are configurable via env so we can swap in a real OAuth client once
|
|
5
|
+
// we register one with Cloudflare. Until then, the flow can be exercised
|
|
6
|
+
// against a mock endpoint (see __tests__/cloudflare-oauth.test.ts).
|
|
7
|
+
//
|
|
8
|
+
// Wire protocol matches Cloudflare's documented endpoints under
|
|
9
|
+
// `https://dash.cloudflare.com/oauth2/{auth,token,revoke}`. PKCE is S256.
|
|
10
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
11
|
+
import { createServer } from 'node:http';
|
|
12
|
+
import { HsxHttpClientRawFromFetch, HttpClient, HttpClientRequest, HttpClientResponse, } from '@hs-x/types';
|
|
13
|
+
import { Cause, Deferred, Duration, Effect, Exit, Option, Schema, Scope } from 'effect';
|
|
14
|
+
import { OAuthCallbackInvalid, OAuthListenerBindFailed, OAuthListenerTimeout, } from './errors.js';
|
|
15
|
+
const CLOUDFLARE_OAUTH_ENDPOINT_DEFAULT = 'https://dash.cloudflare.com';
|
|
16
|
+
/**
|
|
17
|
+
* Scopes HS-X needs to deploy. Mirrors the API-token permission list in
|
|
18
|
+
* cloudflare-auth.ts.
|
|
19
|
+
*/
|
|
20
|
+
const CLOUDFLARE_OAUTH_SCOPES = [
|
|
21
|
+
'account:read',
|
|
22
|
+
'user:read',
|
|
23
|
+
'workers:write',
|
|
24
|
+
'workers_kv:write',
|
|
25
|
+
'workers_scripts:write',
|
|
26
|
+
'workers_tail:read',
|
|
27
|
+
'd1:write',
|
|
28
|
+
'queues:write',
|
|
29
|
+
'offline_access', // required to receive a refresh_token
|
|
30
|
+
];
|
|
31
|
+
export const CLOUDFLARE_OAUTH_DEFAULT_PORT = 8976;
|
|
32
|
+
export class CloudflareOAuthError extends Error {
|
|
33
|
+
code;
|
|
34
|
+
detail;
|
|
35
|
+
constructor(code, message, detail = '') {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = 'CloudflareOAuthError';
|
|
38
|
+
this.code = code;
|
|
39
|
+
this.detail = detail;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const runCloudflareOAuthProgram = async (program) => {
|
|
43
|
+
const exit = await Effect.runPromiseExit(program);
|
|
44
|
+
return Exit.match(exit, {
|
|
45
|
+
onSuccess: (value) => value,
|
|
46
|
+
onFailure: (cause) => {
|
|
47
|
+
const failure = Cause.failureOption(cause);
|
|
48
|
+
if (Option.isSome(failure))
|
|
49
|
+
throw failure.value;
|
|
50
|
+
throw new Error(Cause.pretty(cause));
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
export async function loadCloudflareOAuthConfig(input = {}) {
|
|
55
|
+
const env = input.env ?? process.env;
|
|
56
|
+
// Env vars win when set — dev override for local testing against a sandbox
|
|
57
|
+
// client. In production users do not set these.
|
|
58
|
+
const envClientId = env.HSX_CLOUDFLARE_OAUTH_CLIENT_ID;
|
|
59
|
+
if (envClientId && envClientId.length > 0) {
|
|
60
|
+
return configFromEnv(env, input.port ?? CLOUDFLARE_OAUTH_DEFAULT_PORT, envClientId);
|
|
61
|
+
}
|
|
62
|
+
if (input.controlPlaneUrl) {
|
|
63
|
+
const fetched = await fetchOAuthConfigFromControlPlane({
|
|
64
|
+
controlPlaneUrl: input.controlPlaneUrl,
|
|
65
|
+
...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
clientId: fetched.clientId,
|
|
69
|
+
endpointBase: trimTrailingSlash(fetched.endpointBase),
|
|
70
|
+
scopes: fetched.scopes,
|
|
71
|
+
redirectUri: `http://localhost:${fetched.callbackPort ?? input.port ?? CLOUDFLARE_OAUTH_DEFAULT_PORT}/oauth/callback`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
throw new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_NOT_CONFIGURED', 'Cloudflare OAuth is not available right now.', 'No control-plane URL provided and no HSX_CLOUDFLARE_OAUTH_CLIENT_ID dev override set. Use --auth-method api-token, or set HSX_CONTROL_PLANE_URL.');
|
|
75
|
+
}
|
|
76
|
+
function configFromEnv(env, port, clientId) {
|
|
77
|
+
const endpointBase = env.HSX_CLOUDFLARE_OAUTH_ENDPOINT ?? CLOUDFLARE_OAUTH_ENDPOINT_DEFAULT;
|
|
78
|
+
const scopesEnv = env.HSX_CLOUDFLARE_OAUTH_SCOPES;
|
|
79
|
+
const scopes = scopesEnv
|
|
80
|
+
? scopesEnv.split(/[\s,]+/).filter((s) => s.length > 0)
|
|
81
|
+
: CLOUDFLARE_OAUTH_SCOPES;
|
|
82
|
+
return {
|
|
83
|
+
clientId,
|
|
84
|
+
endpointBase: trimTrailingSlash(endpointBase),
|
|
85
|
+
redirectUri: `http://localhost:${port}/oauth/callback`,
|
|
86
|
+
scopes,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const UnknownJsonObject = Schema.Record({ key: Schema.String, value: Schema.Unknown });
|
|
90
|
+
async function fetchOAuthConfigFromControlPlane(input) {
|
|
91
|
+
const program = Effect.gen(function* () {
|
|
92
|
+
const client = yield* HttpClient.HttpClient;
|
|
93
|
+
const response = yield* client
|
|
94
|
+
.execute(HttpClientRequest.get(new URL('/v1/oauth/cloudflare/config', input.controlPlaneUrl)).pipe(HttpClientRequest.acceptJson))
|
|
95
|
+
.pipe(Effect.scoped, Effect.mapError((error) => new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_NOT_CONFIGURED', 'Could not reach the control plane to fetch Cloudflare OAuth config.', String(error))));
|
|
96
|
+
if (response.status === 404) {
|
|
97
|
+
return yield* Effect.fail(new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_NOT_CONFIGURED', 'This control plane does not yet broker Cloudflare OAuth.', 'Use --auth-method api-token, or set HSX_CLOUDFLARE_OAUTH_CLIENT_ID for a dev sandbox.'));
|
|
98
|
+
}
|
|
99
|
+
if (response.status < 200 || response.status >= 300) {
|
|
100
|
+
return yield* Effect.fail(new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_NOT_CONFIGURED', 'Control plane returned an error fetching Cloudflare OAuth config.', `HTTP ${response.status}`));
|
|
101
|
+
}
|
|
102
|
+
const body = yield* HttpClientResponse.schemaBodyJson(UnknownJsonObject)(response).pipe(Effect.catchAll(() => Effect.succeed({})));
|
|
103
|
+
const clientId = typeof body.clientId === 'string' ? body.clientId : '';
|
|
104
|
+
const endpointBase = typeof body.endpointBase === 'string' && body.endpointBase.length > 0
|
|
105
|
+
? body.endpointBase
|
|
106
|
+
: CLOUDFLARE_OAUTH_ENDPOINT_DEFAULT;
|
|
107
|
+
const scopes = Array.isArray(body.scopes)
|
|
108
|
+
? body.scopes.filter((s) => typeof s === 'string')
|
|
109
|
+
: [...CLOUDFLARE_OAUTH_SCOPES];
|
|
110
|
+
const callbackPort = typeof body.callbackPort === 'number' && Number.isFinite(body.callbackPort)
|
|
111
|
+
? body.callbackPort
|
|
112
|
+
: undefined;
|
|
113
|
+
if (!clientId) {
|
|
114
|
+
return yield* Effect.fail(new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_NOT_CONFIGURED', 'Control plane returned an empty Cloudflare OAuth client id.', 'This usually means OAuth brokering is not provisioned for this environment.'));
|
|
115
|
+
}
|
|
116
|
+
return { clientId, endpointBase, scopes, ...(callbackPort ? { callbackPort } : {}) };
|
|
117
|
+
});
|
|
118
|
+
return runCloudflareOAuthProgram(program.pipe(Effect.provide(HsxHttpClientRawFromFetch(input.fetchImpl ?? fetch))));
|
|
119
|
+
}
|
|
120
|
+
export function generatePkcePair() {
|
|
121
|
+
const verifier = base64UrlEncode(randomBytes(32));
|
|
122
|
+
const challenge = base64UrlEncode(createHash('sha256').update(verifier).digest());
|
|
123
|
+
return { verifier, challenge, method: 'S256' };
|
|
124
|
+
}
|
|
125
|
+
export function generateState() {
|
|
126
|
+
return base64UrlEncode(randomBytes(16));
|
|
127
|
+
}
|
|
128
|
+
export function buildAuthorizeUrl(input) {
|
|
129
|
+
const params = new URLSearchParams({
|
|
130
|
+
response_type: 'code',
|
|
131
|
+
client_id: input.config.clientId,
|
|
132
|
+
redirect_uri: input.config.redirectUri,
|
|
133
|
+
scope: input.config.scopes.join(' '),
|
|
134
|
+
state: input.state,
|
|
135
|
+
code_challenge: input.pkce.challenge,
|
|
136
|
+
code_challenge_method: input.pkce.method,
|
|
137
|
+
});
|
|
138
|
+
return `${input.config.endpointBase}/oauth2/auth?${params.toString()}`;
|
|
139
|
+
}
|
|
140
|
+
const acquireServer = (port, onRequest) => Effect.acquireRelease(Effect.async((resume) => {
|
|
141
|
+
const server = createServer(onRequest);
|
|
142
|
+
const onError = (err) => {
|
|
143
|
+
resume(Effect.fail(new OAuthListenerBindFailed({ cause: err.message })));
|
|
144
|
+
};
|
|
145
|
+
server.once('error', onError);
|
|
146
|
+
server.listen(port, '127.0.0.1', () => {
|
|
147
|
+
server.removeListener('error', onError);
|
|
148
|
+
server.on('error', () => { });
|
|
149
|
+
resume(Effect.succeed(server));
|
|
150
|
+
});
|
|
151
|
+
}), (server) => Effect.async((resume) => {
|
|
152
|
+
server.close(() => resume(Effect.void));
|
|
153
|
+
}));
|
|
154
|
+
const listenerProgram = (input) => Effect.gen(function* () {
|
|
155
|
+
const deferred = yield* Deferred.make();
|
|
156
|
+
yield* acquireServer(input.port, (req, res) => {
|
|
157
|
+
const outcome = classifyCallback(req, input.expectedState);
|
|
158
|
+
respond(res, outcome.status, outcome.body);
|
|
159
|
+
if (outcome.kind === 'ok') {
|
|
160
|
+
Effect.runSync(Deferred.succeed(deferred, outcome.result));
|
|
161
|
+
}
|
|
162
|
+
else if (outcome.kind === 'error') {
|
|
163
|
+
Effect.runSync(Deferred.fail(deferred, outcome.error));
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
const wait = Deferred.await(deferred);
|
|
167
|
+
if (input.timeoutMs && input.timeoutMs > 0) {
|
|
168
|
+
return yield* wait.pipe(Effect.timeoutFail({
|
|
169
|
+
duration: Duration.millis(input.timeoutMs),
|
|
170
|
+
onTimeout: () => new OAuthListenerTimeout({ timeoutMs: input.timeoutMs }),
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
return yield* wait;
|
|
174
|
+
});
|
|
175
|
+
const toCloudflareOAuthError = (err) => {
|
|
176
|
+
switch (err._tag) {
|
|
177
|
+
case 'OAuthListenerTimeout':
|
|
178
|
+
return new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_TIMEOUT', 'Timed out waiting for the Cloudflare OAuth callback.', `No callback received within ${err.timeoutMs}ms.`);
|
|
179
|
+
case 'OAuthListenerBindFailed':
|
|
180
|
+
return new CloudflareOAuthError('HSX_E_CLOUDFLARE_OAUTH_LISTENER', 'OAuth callback listener failed to start.', err.cause);
|
|
181
|
+
case 'OAuthCallbackInvalid':
|
|
182
|
+
return new CloudflareOAuthError(err.code, err.message, err.detail);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Start a local loopback HTTP server that captures the OAuth callback. Returns
|
|
187
|
+
* a promise that resolves with the auth code (or rejects with a typed error).
|
|
188
|
+
* Caller is responsible for calling `close()` when done.
|
|
189
|
+
*/
|
|
190
|
+
export function startCallbackListener(input) {
|
|
191
|
+
const scope = Effect.runSync(Scope.make());
|
|
192
|
+
const program = listenerProgram(input).pipe(Effect.mapError(toCloudflareOAuthError), Scope.extend(scope));
|
|
193
|
+
const result = Effect.runPromiseExit(program).then((exit) => Exit.match(exit, {
|
|
194
|
+
onSuccess: (v) => v,
|
|
195
|
+
onFailure: (cause) => {
|
|
196
|
+
const failure = Cause.failureOption(cause);
|
|
197
|
+
if (Option.isSome(failure))
|
|
198
|
+
throw failure.value;
|
|
199
|
+
throw new Error(Cause.pretty(cause));
|
|
200
|
+
},
|
|
201
|
+
}));
|
|
202
|
+
const close = () => Effect.runPromise(Scope.close(scope, Exit.void).pipe(Effect.catchAllCause(() => Effect.void)));
|
|
203
|
+
result.catch(() => { });
|
|
204
|
+
return { result, close };
|
|
205
|
+
}
|
|
206
|
+
function classifyCallback(req, expectedState) {
|
|
207
|
+
if (!req.url) {
|
|
208
|
+
return { kind: 'ignore', status: 400, body: 'Missing request URL.' };
|
|
209
|
+
}
|
|
210
|
+
const url = new URL(req.url, 'http://localhost');
|
|
211
|
+
if (url.pathname !== '/oauth/callback') {
|
|
212
|
+
return { kind: 'ignore', status: 404, body: 'Not found.' };
|
|
213
|
+
}
|
|
214
|
+
const error = url.searchParams.get('error');
|
|
215
|
+
if (error) {
|
|
216
|
+
const description = url.searchParams.get('error_description') ?? '';
|
|
217
|
+
return {
|
|
218
|
+
kind: 'error',
|
|
219
|
+
status: 400,
|
|
220
|
+
body: `Cloudflare returned an OAuth error: ${error}`,
|
|
221
|
+
error: new OAuthCallbackInvalid({
|
|
222
|
+
code: 'HSX_E_CLOUDFLARE_OAUTH_AUTHORIZE',
|
|
223
|
+
message: `Cloudflare denied authorization (${error}).`,
|
|
224
|
+
detail: description,
|
|
225
|
+
}),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const code = url.searchParams.get('code');
|
|
229
|
+
const state = url.searchParams.get('state');
|
|
230
|
+
if (!code || !state) {
|
|
231
|
+
return {
|
|
232
|
+
kind: 'error',
|
|
233
|
+
status: 400,
|
|
234
|
+
body: 'Missing code or state.',
|
|
235
|
+
error: new OAuthCallbackInvalid({
|
|
236
|
+
code: 'HSX_E_CLOUDFLARE_OAUTH_AUTHORIZE',
|
|
237
|
+
message: 'Cloudflare OAuth callback was missing code or state.',
|
|
238
|
+
detail: '',
|
|
239
|
+
}),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (state !== expectedState) {
|
|
243
|
+
return {
|
|
244
|
+
kind: 'error',
|
|
245
|
+
status: 400,
|
|
246
|
+
body: 'State mismatch — possible CSRF. Closing.',
|
|
247
|
+
error: new OAuthCallbackInvalid({
|
|
248
|
+
code: 'HSX_E_CLOUDFLARE_OAUTH_STATE_MISMATCH',
|
|
249
|
+
message: 'Cloudflare OAuth callback state did not match the expected value.',
|
|
250
|
+
detail: '',
|
|
251
|
+
}),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
kind: 'ok',
|
|
256
|
+
status: 200,
|
|
257
|
+
body: 'Cloudflare OAuth complete. You can close this tab and return to hs-x.',
|
|
258
|
+
result: { code, state },
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function respond(res, status, body) {
|
|
262
|
+
res.statusCode = status;
|
|
263
|
+
res.setHeader('content-type', 'text/plain; charset=utf-8');
|
|
264
|
+
res.end(body);
|
|
265
|
+
}
|
|
266
|
+
export async function exchangeAuthorizationCode(input) {
|
|
267
|
+
const body = new URLSearchParams({
|
|
268
|
+
grant_type: 'authorization_code',
|
|
269
|
+
code: input.code,
|
|
270
|
+
redirect_uri: input.config.redirectUri,
|
|
271
|
+
client_id: input.config.clientId,
|
|
272
|
+
code_verifier: input.verifier,
|
|
273
|
+
});
|
|
274
|
+
return await postTokenEndpoint({
|
|
275
|
+
config: input.config,
|
|
276
|
+
body,
|
|
277
|
+
...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),
|
|
278
|
+
failureCode: 'HSX_E_CLOUDFLARE_OAUTH_EXCHANGE',
|
|
279
|
+
failureMessage: 'Cloudflare OAuth token exchange failed.',
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
export async function refreshTokens(input) {
|
|
283
|
+
const body = new URLSearchParams({
|
|
284
|
+
grant_type: 'refresh_token',
|
|
285
|
+
refresh_token: input.refreshToken,
|
|
286
|
+
client_id: input.config.clientId,
|
|
287
|
+
});
|
|
288
|
+
return await postTokenEndpoint({
|
|
289
|
+
config: input.config,
|
|
290
|
+
body,
|
|
291
|
+
...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),
|
|
292
|
+
failureCode: 'HSX_E_CLOUDFLARE_OAUTH_REFRESH',
|
|
293
|
+
failureMessage: 'Cloudflare OAuth token refresh failed.',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
async function postTokenEndpoint(input) {
|
|
297
|
+
const program = Effect.gen(function* () {
|
|
298
|
+
const client = yield* HttpClient.HttpClient;
|
|
299
|
+
const tokenUrl = `${input.config.endpointBase}/oauth2/token`;
|
|
300
|
+
const response = yield* client
|
|
301
|
+
.execute(HttpClientRequest.post(tokenUrl).pipe(HttpClientRequest.setHeader('accept', 'application/json'), HttpClientRequest.bodyText(input.body.toString(), 'application/x-www-form-urlencoded')))
|
|
302
|
+
.pipe(Effect.scoped, Effect.mapError((error) => new CloudflareOAuthError(input.failureCode, input.failureMessage, String(error))));
|
|
303
|
+
const raw = yield* HttpClientResponse.schemaBodyJson(UnknownJsonObject)(response).pipe(Effect.catchAll(() => Effect.succeed({})));
|
|
304
|
+
if (response.status < 200 || response.status >= 300) {
|
|
305
|
+
const detail = typeof raw.error_description === 'string'
|
|
306
|
+
? raw.error_description
|
|
307
|
+
: typeof raw.error === 'string'
|
|
308
|
+
? raw.error
|
|
309
|
+
: `HTTP ${response.status}`;
|
|
310
|
+
return yield* Effect.fail(new CloudflareOAuthError(input.failureCode, input.failureMessage, detail));
|
|
311
|
+
}
|
|
312
|
+
const accessToken = typeof raw.access_token === 'string' ? raw.access_token : undefined;
|
|
313
|
+
if (!accessToken) {
|
|
314
|
+
return yield* Effect.fail(new CloudflareOAuthError(input.failureCode, input.failureMessage, 'Response did not contain access_token.'));
|
|
315
|
+
}
|
|
316
|
+
const tokenType = typeof raw.token_type === 'string' ? raw.token_type : 'bearer';
|
|
317
|
+
const expiresIn = typeof raw.expires_in === 'number' ? raw.expires_in : 3600;
|
|
318
|
+
const refreshToken = typeof raw.refresh_token === 'string' ? raw.refresh_token : undefined;
|
|
319
|
+
const scope = typeof raw.scope === 'string' ? raw.scope : undefined;
|
|
320
|
+
return {
|
|
321
|
+
accessToken,
|
|
322
|
+
tokenType,
|
|
323
|
+
expiresAt: new Date(Date.now() + expiresIn * 1000).toISOString(),
|
|
324
|
+
...(refreshToken ? { refreshToken } : {}),
|
|
325
|
+
...(scope ? { scope } : {}),
|
|
326
|
+
};
|
|
327
|
+
});
|
|
328
|
+
return runCloudflareOAuthProgram(program.pipe(Effect.provide(HsxHttpClientRawFromFetch(input.fetchImpl ?? fetch))));
|
|
329
|
+
}
|
|
330
|
+
function base64UrlEncode(buf) {
|
|
331
|
+
return buf.toString('base64').replace(/=+$/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
332
|
+
}
|
|
333
|
+
function trimTrailingSlash(s) {
|
|
334
|
+
return s.endsWith('/') ? s.slice(0, -1) : s;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=cloudflare-oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-oauth.js","sourceRoot":"","sources":["../src/cloudflare-oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Schema, schemas } from '@hs-x/types';
|
|
2
|
+
export declare function loadCloudflarePointer(root: string): Promise<Schema.Schema.Type<typeof schemas.CloudflarePointer> | undefined>;
|
|
3
|
+
export declare function ensureCloudflarePointer(input: {
|
|
4
|
+
readonly root: string;
|
|
5
|
+
readonly cloudflareAccountId: string;
|
|
6
|
+
readonly stateKvNamespaceId: string;
|
|
7
|
+
readonly stateKvNamespaceName: string;
|
|
8
|
+
}): Promise<Schema.Schema.Type<typeof schemas.CloudflarePointer>>;
|
|
9
|
+
export declare function rewriteCloudflarePointerOwner(input: {
|
|
10
|
+
readonly root: string;
|
|
11
|
+
readonly ownerId: string;
|
|
12
|
+
}): Promise<Schema.Schema.Type<typeof schemas.CloudflarePointer>>;
|
|
13
|
+
//# sourceMappingURL=cloudflare-pointer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-pointer.d.ts","sourceRoot":"","sources":["../src/cloudflare-pointer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,CAO3E;AAWD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAahE;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAWhE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { Schema, schemas } from '@hs-x/types';
|
|
4
|
+
import { getMachineId } from './machine-id.js';
|
|
5
|
+
const CLOUDFLARE_POINTER_PATH = join('.hs-x', 'cloudflare.json');
|
|
6
|
+
export async function loadCloudflarePointer(root) {
|
|
7
|
+
try {
|
|
8
|
+
const raw = await readFile(join(root, CLOUDFLARE_POINTER_PATH), 'utf8');
|
|
9
|
+
return Schema.decodeUnknownSync(schemas.CloudflarePointer)(JSON.parse(raw));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function saveCloudflarePointer(root, pointer) {
|
|
16
|
+
const path = join(root, CLOUDFLARE_POINTER_PATH);
|
|
17
|
+
await mkdir(dirname(path), { recursive: true });
|
|
18
|
+
await writeFile(path, `${JSON.stringify(pointer, null, 2)}\n`, 'utf8');
|
|
19
|
+
}
|
|
20
|
+
export async function ensureCloudflarePointer(input) {
|
|
21
|
+
const existing = await loadCloudflarePointer(input.root);
|
|
22
|
+
if (existing)
|
|
23
|
+
return existing;
|
|
24
|
+
const machineId = await getMachineId();
|
|
25
|
+
const pointer = Schema.decodeUnknownSync(schemas.CloudflarePointer)({
|
|
26
|
+
cloudflareAccountId: input.cloudflareAccountId,
|
|
27
|
+
stateKvNamespaceId: input.stateKvNamespaceId,
|
|
28
|
+
stateKvNamespaceName: input.stateKvNamespaceName,
|
|
29
|
+
ownerId: `local_${machineId.slice(2, 10)}`,
|
|
30
|
+
});
|
|
31
|
+
await saveCloudflarePointer(input.root, pointer);
|
|
32
|
+
return pointer;
|
|
33
|
+
}
|
|
34
|
+
export async function rewriteCloudflarePointerOwner(input) {
|
|
35
|
+
const existing = await loadCloudflarePointer(input.root);
|
|
36
|
+
if (!existing) {
|
|
37
|
+
throw new Error(`Missing ${CLOUDFLARE_POINTER_PATH}.`);
|
|
38
|
+
}
|
|
39
|
+
const next = Schema.decodeUnknownSync(schemas.CloudflarePointer)({
|
|
40
|
+
...existing,
|
|
41
|
+
ownerId: input.ownerId,
|
|
42
|
+
});
|
|
43
|
+
await saveCloudflarePointer(input.root, next);
|
|
44
|
+
return next;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=cloudflare-pointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-pointer.js","sourceRoot":"","sources":["../src/cloudflare-pointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,uBAAuB,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,IAAY,EACZ,OAA6D;IAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAK7C;IACC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAClE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,OAAO,EAAE,SAAS,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;KAC3C,CAAC,CAAC;IACH,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAGnD;IACC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,WAAW,uBAAuB,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC/D,GAAG,QAAQ;QACX,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IACH,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-history.d.ts","sourceRoot":"","sources":["../src/command-history.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,IAAI,CAAC,CAchB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { appendHistory } from './history.js';
|
|
2
|
+
export async function recordHistory(input) {
|
|
3
|
+
try {
|
|
4
|
+
const accountId = resolveFlag(input.argv, '--account-id') ?? process.env.HSX_ACCOUNT_ID ?? undefined;
|
|
5
|
+
await appendHistory({
|
|
6
|
+
ts: new Date().toISOString(),
|
|
7
|
+
command: input.command,
|
|
8
|
+
exit_code: input.exitCode,
|
|
9
|
+
duration_ms: Date.now() - input.startedAt,
|
|
10
|
+
...(accountId ? { account_id: accountId } : {}),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// history is best-effort
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function isFlagValue(value) {
|
|
18
|
+
return value !== undefined && value.length > 0 && !value.startsWith('-');
|
|
19
|
+
}
|
|
20
|
+
function resolveFlag(argv, flag) {
|
|
21
|
+
const index = argv.indexOf(flag);
|
|
22
|
+
if (index !== -1) {
|
|
23
|
+
const next = argv[index + 1];
|
|
24
|
+
if (isFlagValue(next))
|
|
25
|
+
return next;
|
|
26
|
+
}
|
|
27
|
+
const prefix = `${flag}=`;
|
|
28
|
+
const found = argv.find((arg) => arg.startsWith(prefix));
|
|
29
|
+
if (!found)
|
|
30
|
+
return undefined;
|
|
31
|
+
const value = found.slice(prefix.length);
|
|
32
|
+
return value.length > 0 ? value : undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=command-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-history.js","sourceRoot":"","sources":["../src/command-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAKnC;IACC,IAAI,CAAC;QACH,MAAM,SAAS,GACb,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;QACrF,MAAM,aAAa,CAAC;YAClB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS;YACzC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CliResult } from '../result.js';
|
|
2
|
+
export interface AccountCommandInput {
|
|
3
|
+
readonly argv: readonly string[];
|
|
4
|
+
readonly cwd?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function accountCommand(input: AccountCommandInput): Promise<CliResult>;
|
|
7
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAwBnF"}
|