dsh-mobile 0.4.0 → 0.4.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/lib/index.d.mts CHANGED
@@ -12,6 +12,7 @@ interface StoredDevice {
12
12
  readonly createdAt: number;
13
13
  readonly expiresAt: number;
14
14
  readonly lastSeenAt: number;
15
+ /** Legacy tombstone accepted on load; AccessController removes it during initialization. */
15
16
  readonly revokedAt?: number;
16
17
  }
17
18
  /** Versioned device state. Raw device and Session credentials are never members. */
@@ -154,7 +155,7 @@ declare class AccessController {
154
155
  assertCsrf(authorization: SessionAuthorization, csrfToken: string | undefined): void;
155
156
  /** End one short Session and notify the gateway to abort its attached work. */
156
157
  logout(authorization: SessionAuthorization): void;
157
- /** Persist revocation, then end every Session owned by that device. */
158
+ /** Durably delete the device, then end every Session owned by that device. */
158
159
  revokeDevice(deviceId: string): Promise<boolean>;
159
160
  /** Remove every persistent credential and terminate every active Session. */
160
161
  resetDevices(): Promise<void>;
@@ -258,6 +259,8 @@ interface PluginConfig {
258
259
  customScriptFile?: string;
259
260
  /** Internal dedicated mobile layout browser bundle. */
260
261
  mobileLayoutFile?: string;
262
+ /** Standalone browser compatibility bundle used before DSH boot. */
263
+ mobileCompatibilityFile?: string;
261
264
  /** Stable public discovery identifier; it is not an authentication secret. */
262
265
  instanceId?: string;
263
266
  /** Managed CA certificate offered to the Android installer after fingerprint binding. */
@@ -297,6 +300,7 @@ interface ResolvedGatewayConfig {
297
300
  readonly customCssFile: string;
298
301
  readonly customScriptFile: string;
299
302
  readonly mobileLayoutFile: string;
303
+ readonly mobileCompatibilityFile: string;
300
304
  readonly instanceId: string;
301
305
  readonly pairingCaFile?: string;
302
306
  readonly tls: TlsConfig;
@@ -436,8 +440,10 @@ declare class MobileExtensionError extends Error {
436
440
  constructor(code: string, message: string, status?: number);
437
441
  }
438
442
  /** One host-side action exposed by an extension. */
443
+ type CallableActionInput = (value?: never, options?: never) => unknown;
439
444
  interface MobileHostAction {
440
- readonly input?: {
445
+ /** A callable Schemastery schema or an adapter exposing parse(). */
446
+ readonly input?: CallableActionInput | {
441
447
  parse(value: unknown): unknown;
442
448
  };
443
449
  readonly run: (context: MobileActionContext, input: unknown) => unknown | Promise<unknown>;
@@ -598,6 +604,15 @@ declare class MobileAccessGateway {
598
604
  private server;
599
605
  private discoverySocket;
600
606
  private discoveryTimer;
607
+ /**
608
+ * Why broadcast discovery is unavailable, if it is. Windows keeps separate TCP and
609
+ * UDP port-exclusion tables, so the port the OS handed the TCP listener can be
610
+ * refused for UDP. That degradation is survivable but must stay observable: without
611
+ * it, "the phone cannot find this computer" has no diagnosable cause on the host.
612
+ */
613
+ private discoveryError;
614
+ /** Names of the bundled mobile assets that could not be read, if any. */
615
+ private mobileAssetError;
601
616
  private bonjour;
602
617
  private pairingCaCertificate;
603
618
  private listenerPort;
@@ -640,6 +655,19 @@ declare class MobileAccessGateway {
640
655
  port: number;
641
656
  origin: string;
642
657
  };
658
+ /**
659
+ * Report which discovery channels this gateway actually owns.
660
+ *
661
+ * Broadcast discovery degrades on its own when its UDP port cannot be bound, so
662
+ * callers need to tell "discovery is off" from "discovery was never attempted".
663
+ * mDNS is published independently and is unaffected by that failure.
664
+ */
665
+ discoveryStatus(): {
666
+ readonly broadcast: boolean;
667
+ readonly mdns: boolean;
668
+ readonly errorCode?: string;
669
+ readonly mobileAssetsErrorCode?: string;
670
+ };
643
671
  private requirePolicy;
644
672
  private authorize;
645
673
  private requireCsrf;
@@ -856,12 +884,13 @@ declare class FrpConfigStore {
856
884
  //#endregion
857
885
  //#region src/remote.d.ts
858
886
  /** Remote transports supported by the desktop plugin and Android client. */
859
- type RemoteProvider = 'tailscale' | 'cpolar' | 'frp';
887
+ type RemoteProvider = 'tailscale' | 'cpolar' | 'cloudflared' | 'frp' | 'origin';
860
888
  /** Common safe status returned by every remote provider controller. */
861
889
  interface RemoteProviderStatus {
862
890
  readonly enabled: boolean;
863
891
  readonly state: string;
864
892
  readonly origin?: string;
893
+ readonly backendOrigin?: string;
865
894
  readonly loginUrl?: string;
866
895
  readonly setupUrl?: string;
867
896
  readonly errorCode?: string;
@@ -881,6 +910,7 @@ interface RemoteProviderState {
881
910
  readonly version: 1;
882
911
  readonly provider: RemoteProvider;
883
912
  }
913
+ declare const REMOTE_PROVIDERS: readonly RemoteProvider[];
884
914
  /** Validate the provider selection loaded across the filesystem boundary. */
885
915
  declare function parseRemoteProviderState(value: unknown): RemoteProviderState;
886
916
  /** Atomic selection store whose absent-file state uses the configured default. */
@@ -955,6 +985,331 @@ declare class FrpController implements RemoteProviderController {
955
985
  private stopProcessAndGateway;
956
986
  }
957
987
  //#endregion
988
+ //#region src/origin-proxy-config.d.ts
989
+ declare const DEFAULT_ORIGIN_LISTEN_PORT = 3444;
990
+ /** A private HTTP listener behind a user-managed HTTPS reverse proxy. */
991
+ interface OriginSettings {
992
+ readonly version: 1;
993
+ readonly publicOrigin: string;
994
+ readonly listenHost: string;
995
+ readonly listenPort: number;
996
+ readonly allowedCidrs: readonly string[];
997
+ }
998
+ /** Configuration metadata returned only to the local desktop control UI. */
999
+ interface OriginConfigurationStatus {
1000
+ readonly configured: boolean;
1001
+ readonly publicOrigin?: string;
1002
+ readonly listenHost?: string;
1003
+ readonly listenPort?: number;
1004
+ readonly allowedCidrs?: readonly string[];
1005
+ readonly backendOrigin?: string;
1006
+ readonly storagePath: string;
1007
+ readonly errorCode?: string;
1008
+ }
1009
+ /** Require a public HTTPS origin; custom external ports are supported. */
1010
+ declare function validateOriginPublicOrigin(value: unknown): string;
1011
+ /** Bind only one explicit loopback or RFC1918 IPv4 interface, never all interfaces. */
1012
+ declare function validateOriginListenHost(value: unknown): string;
1013
+ declare function validateOriginListenPort(value: unknown): number;
1014
+ /** Authorize direct proxy socket peers, not untrusted forwarded client headers. */
1015
+ declare function validateOriginAllowedCidrs(value: unknown, listenHost: string): readonly string[];
1016
+ /** Validate both saved settings and local administrative requests. */
1017
+ declare function parseOriginSettings(value: unknown): OriginSettings;
1018
+ /** Owns only origin settings; shared paired-device storage is never removed. */
1019
+ declare class OriginConfigStore {
1020
+ readonly stateRoot: string;
1021
+ readonly settingsFile: string;
1022
+ private settingsValue;
1023
+ private errorCode;
1024
+ constructor(stateDirectory: string);
1025
+ initialize(): Promise<void>;
1026
+ status(): OriginConfigurationStatus;
1027
+ settings(): OriginSettings | undefined;
1028
+ configure(value: unknown): Promise<OriginConfigurationStatus>;
1029
+ purge(): Promise<OriginConfigurationStatus>;
1030
+ }
1031
+ //#endregion
1032
+ //#region src/origin-proxy.d.ts
1033
+ type OriginState = 'off' | 'unavailable' | 'starting' | 'ready' | 'error';
1034
+ /** Ready means the private listener is ready, not that public ingress was tested. */
1035
+ interface OriginStatus {
1036
+ readonly enabled: boolean;
1037
+ readonly state: OriginState;
1038
+ readonly origin?: string;
1039
+ readonly backendOrigin?: string;
1040
+ readonly errorCode?: string;
1041
+ }
1042
+ interface OriginControllerOptions {
1043
+ readonly store: MobileAccessControlStore;
1044
+ readonly config: OriginConfigStore;
1045
+ readonly createGateway: (settings: OriginSettings) => Promise<MobileAccessGateway>;
1046
+ readonly onStatus?: (status: OriginStatus) => void;
1047
+ }
1048
+ /** Owns an authenticated HTTP gateway, with no tunnel process or public network probes. */
1049
+ declare class OriginController implements RemoteProviderController {
1050
+ private readonly options;
1051
+ private enabled;
1052
+ private initialized;
1053
+ private disposed;
1054
+ private gatewayValue;
1055
+ private latest;
1056
+ private queue;
1057
+ constructor(options: OriginControllerOptions);
1058
+ initialize(): Promise<void>;
1059
+ gateway(): MobileAccessGateway | undefined;
1060
+ status(): OriginStatus;
1061
+ setEnabled(enabled: boolean): Promise<OriginStatus>;
1062
+ reconnect(): Promise<OriginStatus>;
1063
+ /** Reset the switch, retaining both settings and shared remote device pairings. */
1064
+ reset(): Promise<OriginStatus>;
1065
+ /** Stop the listener without changing the durable switch. */
1066
+ close(): Promise<void>;
1067
+ private assertAvailable;
1068
+ private enqueue;
1069
+ private publish;
1070
+ private start;
1071
+ private stop;
1072
+ }
1073
+ //#endregion
1074
+ //#region src/cloudflared-component.d.ts
1075
+ /**
1076
+ * Pinned cloudflared Windows component fetched only after an explicit user action.
1077
+ *
1078
+ * Unlike the cpolar archive this artifact IS the executable: there is nothing to
1079
+ * unpack, so the download digest and the installed digest are the same pair.
1080
+ * `--no-autoupdate` is passed at runtime as well, so the pinned bytes stay the
1081
+ * bytes that were verified.
1082
+ */
1083
+ declare const CLOUDFLARED_COMPONENT_RELEASE: Readonly<{
1084
+ version: "2026.9.1";
1085
+ platform: "win32";
1086
+ arch: "x64";
1087
+ downloadUrl: "https://github.com/cloudflare/cloudflared/releases/download/2026.9.1/cloudflared-windows-amd64.exe";
1088
+ downloadBytes: 54976432;
1089
+ downloadSha256: "2837888cc0f5d58f15b6dc478376de90b4d3ba5241c7947455d1e0a0df429712";
1090
+ downloadPage: "https://github.com/cloudflare/cloudflared/releases";
1091
+ termsUrl: "https://www.cloudflare.com/website-terms/";
1092
+ }>;
1093
+ /**
1094
+ * Public, credential-free description of the managed cloudflared component.
1095
+ *
1096
+ * There is deliberately no `configured` flag: a quick tunnel needs no account,
1097
+ * token, or DNS record, so installation is the only precondition.
1098
+ */
1099
+ interface CloudflaredComponentStatus {
1100
+ readonly supported: boolean;
1101
+ readonly installed: boolean;
1102
+ readonly version: string;
1103
+ readonly downloadBytes: number;
1104
+ readonly installedBytes: number;
1105
+ readonly sourceUrl: string;
1106
+ readonly downloadPage: string;
1107
+ readonly termsUrl: string;
1108
+ readonly storagePath: string;
1109
+ readonly errorCode?: string;
1110
+ }
1111
+ interface CloudflaredComponentManagerOptions {
1112
+ readonly stateDirectory: string;
1113
+ readonly platform?: NodeJS.Platform;
1114
+ readonly arch?: string;
1115
+ readonly fetchArtifact?: (url: string, signal: AbortSignal) => Promise<Uint8Array>;
1116
+ }
1117
+ /** Owns the optional cloudflared binary inside DSH Mobile state. */
1118
+ declare class CloudflaredComponentManager {
1119
+ readonly executable: string;
1120
+ readonly componentRoot: string;
1121
+ readonly componentStorage: string;
1122
+ readonly stateRoot: string;
1123
+ readonly logRoot: string;
1124
+ private readonly stagingRoot;
1125
+ private readonly platform;
1126
+ private readonly arch;
1127
+ private readonly fetchArtifact;
1128
+ private installed;
1129
+ private errorCode;
1130
+ private queue;
1131
+ constructor(options: CloudflaredComponentManagerOptions);
1132
+ /** Inspect the managed binary without using any global cloudflared state. */
1133
+ initialize(): Promise<void>;
1134
+ /** Return a safe status that never includes machine-specific account data. */
1135
+ status(): CloudflaredComponentStatus;
1136
+ /** Download, verify, and install the pinned cloudflared executable after explicit confirmation. */
1137
+ install(): Promise<CloudflaredComponentStatus>;
1138
+ /** Remove every cloudflared file owned by DSH Mobile without touching global state. */
1139
+ purge(): Promise<CloudflaredComponentStatus>;
1140
+ private enqueue;
1141
+ }
1142
+ //#endregion
1143
+ //#region src/cloudflared-tunnel.d.ts
1144
+ /** Which tunnel flavour the cloudflared provider runs. */
1145
+ type CloudflaredTunnelMode = 'quick' | 'named';
1146
+ /**
1147
+ * Cloudflared provider configuration.
1148
+ *
1149
+ * A quick tunnel owns nothing durable: cloudflared allocates a random hostname
1150
+ * and a random forward port every start. A named tunnel instead runs with an
1151
+ * account token, and its public hostname is routed by Cloudflare to the local
1152
+ * port recorded here, so that port must stay stable across restarts.
1153
+ */
1154
+ type CloudflaredTunnelSettings = {
1155
+ readonly version: 1;
1156
+ readonly mode: 'quick';
1157
+ } | {
1158
+ readonly version: 1;
1159
+ readonly mode: 'named';
1160
+ readonly token: string;
1161
+ readonly hostname: string;
1162
+ readonly port: number;
1163
+ };
1164
+ /** Configuration metadata safe to hand to the desktop panel; never the token. */
1165
+ interface CloudflaredTunnelStatus {
1166
+ readonly mode: CloudflaredTunnelMode;
1167
+ readonly configured: boolean;
1168
+ readonly hostname?: string;
1169
+ readonly port?: number;
1170
+ readonly storagePath: string;
1171
+ readonly errorCode?: string;
1172
+ }
1173
+ /**
1174
+ * Validate the public hostname Cloudflare routes to this tunnel.
1175
+ *
1176
+ * The name must be a real DNS name, not an IP literal or a wildcard, and it
1177
+ * cannot sit under Cloudflare's own control-plane suffixes: `trycloudflare.com`
1178
+ * belongs to quick tunnels, and a `cfargotunnel.com` name is the routing target
1179
+ * rather than a routable public address.
1180
+ */
1181
+ declare function validateCloudflaredTunnelHostname(value: unknown): string;
1182
+ /** Validate the stable loopback port Cloudflare's ingress forwards to. */
1183
+ declare function validateCloudflaredTunnelPort(value: unknown): number;
1184
+ /**
1185
+ * Validate a connector token before durable storage.
1186
+ *
1187
+ * A token is a base64url-encoded JSON blob that carries the account, tunnel id
1188
+ * and tunnel secret; the provider passes it through the environment rather than
1189
+ * the command line, and it is never returned to any client.
1190
+ */
1191
+ declare function validateCloudflaredTunnelToken(value: unknown): string;
1192
+ /** Parse tunnel settings at the request and filesystem boundaries. */
1193
+ declare function parseCloudflaredTunnelSettings(value: unknown): CloudflaredTunnelSettings;
1194
+ /**
1195
+ * Merge a partial panel request with the saved named-tunnel settings so a blank
1196
+ * field keeps its stored value. The token in particular is write-only, so the
1197
+ * panel submits an empty string to mean "keep the existing connector token".
1198
+ */
1199
+ declare function mergeSavedCloudflaredTunnelSettings(partial: Readonly<Record<string, unknown>>, saved: CloudflaredTunnelSettings | undefined): CloudflaredTunnelSettings;
1200
+ /** Owns the private cloudflared tunnel configuration for one DSH installation. */
1201
+ declare class CloudflaredTunnelStore {
1202
+ readonly stateRoot: string;
1203
+ readonly settingsFile: string;
1204
+ private settingsValue;
1205
+ private errorCode;
1206
+ constructor(stateDirectory: string);
1207
+ /** Load private settings while rejecting links, oversized files and unknown fields. */
1208
+ initialize(): Promise<void>;
1209
+ /** Return configuration metadata without exposing the connector token. */
1210
+ status(): CloudflaredTunnelStatus;
1211
+ /** Return private settings only to the provider lifecycle. */
1212
+ settings(): CloudflaredTunnelSettings;
1213
+ /** Atomically replace the tunnel configuration. */
1214
+ configure(value: unknown): Promise<CloudflaredTunnelStatus>;
1215
+ /** Forget a named tunnel and its connector token. */
1216
+ purge(): Promise<CloudflaredTunnelStatus>;
1217
+ }
1218
+ //#endregion
1219
+ //#region src/cloudflared.d.ts
1220
+ /** Product-facing states for the optional cloudflared remote transport. */
1221
+ type CloudflaredState = 'off' | 'unavailable' | 'starting' | 'connecting' | 'ready' | 'error';
1222
+ /** Safe cloudflared state returned only through the loopback DSH control route. */
1223
+ interface CloudflaredStatus {
1224
+ readonly enabled: boolean;
1225
+ readonly state: CloudflaredState;
1226
+ readonly origin?: string;
1227
+ readonly errorCode?: string;
1228
+ }
1229
+ /** Inputs for one cloudflared process and its authenticated DSH gateway. */
1230
+ interface CloudflaredControllerOptions {
1231
+ readonly store: MobileAccessControlStore;
1232
+ readonly executable: string;
1233
+ /** Named-tunnel configuration; quick tunnels are used when it reports quick mode. */
1234
+ readonly tunnel: {
1235
+ settings(): CloudflaredTunnelSettings;
1236
+ };
1237
+ readonly createGateway: (origin: string, listenPort: number) => Promise<MobileAccessGateway>;
1238
+ readonly onStatus?: (status: CloudflaredStatus) => void;
1239
+ /** Liveness bound for one quick-tunnel allocation; defaults to the product timeout. */
1240
+ readonly startupTimeoutMs?: number;
1241
+ readonly spawnProcess?: (executable: string, args: readonly string[], environment: NodeJS.ProcessEnv) => ChildProcessWithoutNullStreams;
1242
+ }
1243
+ /**
1244
+ * Extract a validated public HTTPS origin from one cloudflared output line.
1245
+ *
1246
+ * Quick tunnels print the public hostname inside a decorated banner, so the
1247
+ * candidate is taken from the line and then re-parsed as a URL: a lookalike such
1248
+ * as `https://x.trycloudflare.com.evil.test` fails the hostname check instead of
1249
+ * being truncated into an accepted origin.
1250
+ */
1251
+ declare function parseCloudflaredOrigin(line: string): string | undefined;
1252
+ /**
1253
+ * Whether one cloudflared log line reports an established edge connection.
1254
+ *
1255
+ * A named tunnel prints no banner, so registration is the only signal that the
1256
+ * connector reached Cloudflare and the public hostname can serve traffic. Both
1257
+ * the current and the older wording are accepted; anything else is ignored so a
1258
+ * chatty log line cannot be mistaken for readiness.
1259
+ */
1260
+ declare function isCloudflaredRegistration(line: string): boolean;
1261
+ /**
1262
+ * Owns an installed cloudflared client and a provider-specific DSH remote gateway.
1263
+ *
1264
+ * Quick tunnels allocate a random hostname and a random forward port on every
1265
+ * start. Named tunnels instead read an account token and a stable public
1266
+ * hostname from the tunnel store, forward to the configured loopback port, and
1267
+ * learn readiness from the connector's registration line rather than a banner.
1268
+ */
1269
+ declare class CloudflaredController implements RemoteProviderController {
1270
+ private readonly options;
1271
+ private enabled;
1272
+ private initialized;
1273
+ private disposed;
1274
+ private child;
1275
+ private gatewayValue;
1276
+ private reservation;
1277
+ private generation;
1278
+ private buffer;
1279
+ private mode;
1280
+ private namedOrigin;
1281
+ private latest;
1282
+ private queue;
1283
+ private startupTimer;
1284
+ constructor(options: CloudflaredControllerOptions);
1285
+ /** Restore the remembered cloudflared switch independently from LAN and other providers. */
1286
+ initialize(): Promise<void>;
1287
+ /** Return the active cloudflared-backed DSH gateway. */
1288
+ gateway(): MobileAccessGateway | undefined;
1289
+ /** Return state safe for the desktop control UI. */
1290
+ status(): CloudflaredStatus;
1291
+ /** Enable or disable cloudflared without changing LAN or other provider state. */
1292
+ setEnabled(enabled: boolean): Promise<CloudflaredStatus>;
1293
+ /** Restart cloudflared and allocate a fresh quick tunnel. */
1294
+ reconnect(): Promise<CloudflaredStatus>;
1295
+ /** Disable cloudflared without deleting the installed component. */
1296
+ reset(): Promise<CloudflaredStatus>;
1297
+ /** Stop owned resources without changing the remembered switch. */
1298
+ close(): Promise<void>;
1299
+ private enqueue;
1300
+ private publish;
1301
+ private start;
1302
+ private consume;
1303
+ /** Mark a named tunnel ready once the connector has registered with the edge. */
1304
+ private confirmNamedReady;
1305
+ private attachGateway;
1306
+ /** Replace the gateway authority when a quick tunnel restarts on a new hostname. */
1307
+ private rotateGateway;
1308
+ private failGeneration;
1309
+ private stop;
1310
+ private stopProcessAndGateway;
1311
+ }
1312
+ //#endregion
958
1313
  //#region src/task-events.d.ts
959
1314
  /**
960
1315
  * Host-side task-completion fan-out for phone notifications.
@@ -1023,8 +1378,10 @@ declare class TaskEventHub {
1023
1378
  declare const name = "dsh-mobile";
1024
1379
  /** The stock WebServer serves the control card; Connection authenticates the loopback DSH origin. */
1025
1380
  declare const inject: string[];
1381
+ /** Reuse remote HTTPS policy while binding a separately validated private HTTP origin. */
1382
+ declare function originGatewayConfig(template: ResolvedGatewayConfig, settings: OriginSettings, stateFile: string, instanceId: string, listenPort?: number): ResolvedGatewayConfig;
1026
1383
  /** Mount the resident control route and its optional authenticated LAN gateway. */
1027
1384
  declare function apply(ctx: Context, config: PluginConfig): Promise<void>;
1028
1385
  //#endregion
1029
- export { AUTH_PREFIX, AccessController, type AccessControllerOptions, AccessError, type AuthoritySpec, type BlockedUpgradePathEntry, BlockedUpgradePathLog, BoundedRateLimiter, CSRF_COOKIE, CSRF_HEADER, Config, FRP_VHOST_HTTP_PORT as DEFAULT_VHOST_HTTP_PORT, FRP_VHOST_HTTP_PORT, DEVICE_COOKIE, type DeviceProbeResult, type DeviceSnapshot, type DeviceStore, type DeviceSummary, type DisabledTlsConfig, EXTENSION_LIMITS, FRP_CADDY_IMPORT_LINE, FRP_CADDY_SNIPPET_MARKER, FRP_CADDY_SNIPPET_PATH, FRP_COMPONENT_RELEASES, FrpComponentManager, type FrpComponentStatus, FrpConfigStore, type FrpConfigurationStatus, FrpController, type FrpControllerOptions, type FrpSettings, type FrpState, type FrpStatus, JsonDeviceStore, JsonMobileAccessControlStore, JsonRemoteProviderStore, LOCAL_ADMIN_PREFIX, type LocalExtensionManifest, MAX_BLOCKED_UPGRADE_PATHS, MAX_EXTRA_WEBSOCKET_PATHS, MAX_WEBSOCKET_PATH_LENGTH, MemoryDeviceStore, type MobileAccessControlState, type MobileAccessControlStore, MobileAccessGateway, MobileAccessGatewayController, type MobileAccessService as MobileAccessRegistry, MobileAccessService, type MobileAccessRuntime, type MobileActionContext, type MobileExtensionClientEntry, type MobileExtensionDefinition, MobileExtensionError, type MobileExtensionManifest, type MobileExtensionStatus, type MobileHostAction, type MobileHostRoute, type MobileRouteRequest, type MobileRouteResponse, type PairingResult, type ParsedCidr, type PluginConfig, type ProvidedTlsConfig, type RemoteProvider, type RemoteProviderController, type RemoteProviderState, type RemoteProviderStatus, type RenewalResult, RequestTrustPolicy, type ResolvedGatewayConfig, SESSION_COOKIE, type SessionAuthorization, type SessionEndReason, type StoredDevice, TASK_EVENT_DEBOUNCE_MS, type TaskCompletionEvent, type TaskEventContext, TaskEventHub, type TaskEventSession, type TaskEventSink, type TaskEventWatcherOptions, type TaskTurnEvent, type TlsConfig, WS_PATHS, WebSocketPathStore, addressAllowed, apply, assertExtensionId, configuredRemoteProvider, createCaddySite, createFrpServerTemplate, createFrpcToml, createMobileAccessService, createRestrictedFrpServerTemplate, inject, isGloballyRoutableIpv4, isLoopbackAddress, mergeSavedFrpSettings, mergeSavedFrpTarget, name, normalizeWebSocketPaths, parseAuthority, parseCidr, parseControlFile, parseDeviceSnapshot, parseExtensionManifest, parseFrpSettings, parseGatewayConfig, parseMobileAccessControlState, parseRemoteProviderState, resolveAuthority, rewriteMobileIndex, validateFrpPublicOrigin, validateFrpServerAddress, validateFrpServerPort, validateFrpToken, validateWebSocketPath, watchTaskCompletions };
1386
+ export { AUTH_PREFIX, AccessController, type AccessControllerOptions, AccessError, type AuthoritySpec, type BlockedUpgradePathEntry, BlockedUpgradePathLog, BoundedRateLimiter, CLOUDFLARED_COMPONENT_RELEASE, CSRF_COOKIE, CSRF_HEADER, CloudflaredComponentManager, type CloudflaredComponentStatus, CloudflaredController, type CloudflaredControllerOptions, type CloudflaredState, type CloudflaredStatus, type CloudflaredTunnelMode, type CloudflaredTunnelSettings, type CloudflaredTunnelStatus, CloudflaredTunnelStore, Config, DEFAULT_ORIGIN_LISTEN_PORT, FRP_VHOST_HTTP_PORT as DEFAULT_VHOST_HTTP_PORT, FRP_VHOST_HTTP_PORT, DEVICE_COOKIE, type DeviceProbeResult, type DeviceSnapshot, type DeviceStore, type DeviceSummary, type DisabledTlsConfig, EXTENSION_LIMITS, FRP_CADDY_IMPORT_LINE, FRP_CADDY_SNIPPET_MARKER, FRP_CADDY_SNIPPET_PATH, FRP_COMPONENT_RELEASES, FrpComponentManager, type FrpComponentStatus, FrpConfigStore, type FrpConfigurationStatus, FrpController, type FrpControllerOptions, type FrpSettings, type FrpState, type FrpStatus, JsonDeviceStore, JsonMobileAccessControlStore, JsonRemoteProviderStore, LOCAL_ADMIN_PREFIX, type LocalExtensionManifest, MAX_BLOCKED_UPGRADE_PATHS, MAX_EXTRA_WEBSOCKET_PATHS, MAX_WEBSOCKET_PATH_LENGTH, MemoryDeviceStore, type MobileAccessControlState, type MobileAccessControlStore, MobileAccessGateway, MobileAccessGatewayController, type MobileAccessService as MobileAccessRegistry, MobileAccessService, type MobileAccessRuntime, type MobileActionContext, type MobileExtensionClientEntry, type MobileExtensionDefinition, MobileExtensionError, type MobileExtensionManifest, type MobileExtensionStatus, type MobileHostAction, type MobileHostRoute, type MobileRouteRequest, type MobileRouteResponse, OriginConfigStore, type OriginConfigurationStatus, OriginController, type OriginControllerOptions, type OriginSettings, type OriginState, type OriginStatus, type PairingResult, type ParsedCidr, type PluginConfig, type ProvidedTlsConfig, REMOTE_PROVIDERS, type RemoteProvider, type RemoteProviderController, type RemoteProviderState, type RemoteProviderStatus, type RenewalResult, RequestTrustPolicy, type ResolvedGatewayConfig, SESSION_COOKIE, type SessionAuthorization, type SessionEndReason, type StoredDevice, TASK_EVENT_DEBOUNCE_MS, type TaskCompletionEvent, type TaskEventContext, TaskEventHub, type TaskEventSession, type TaskEventSink, type TaskEventWatcherOptions, type TaskTurnEvent, type TlsConfig, WS_PATHS, WebSocketPathStore, addressAllowed, apply, assertExtensionId, configuredRemoteProvider, createCaddySite, createFrpServerTemplate, createFrpcToml, createMobileAccessService, createRestrictedFrpServerTemplate, inject, isCloudflaredRegistration, isGloballyRoutableIpv4, isLoopbackAddress, mergeSavedCloudflaredTunnelSettings, mergeSavedFrpSettings, mergeSavedFrpTarget, name, normalizeWebSocketPaths, originGatewayConfig, parseAuthority, parseCidr, parseCloudflaredOrigin, parseCloudflaredTunnelSettings, parseControlFile, parseDeviceSnapshot, parseExtensionManifest, parseFrpSettings, parseGatewayConfig, parseMobileAccessControlState, parseOriginSettings, parseRemoteProviderState, resolveAuthority, rewriteMobileIndex, validateCloudflaredTunnelHostname, validateCloudflaredTunnelPort, validateCloudflaredTunnelToken, validateFrpPublicOrigin, validateFrpServerAddress, validateFrpServerPort, validateFrpToken, validateOriginAllowedCidrs, validateOriginListenHost, validateOriginListenPort, validateOriginPublicOrigin, validateWebSocketPath, watchTaskCompletions };
1030
1387
  //# sourceMappingURL=index.d.mts.map