@camstack/addon-cloudflare-tunnel 0.1.13 → 0.1.15
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/cloudflare-tunnel.addon.js +1124 -193
- package/dist/cloudflare-tunnel.addon.js.map +1 -1
- package/dist/cloudflare-tunnel.addon.mjs +1124 -5
- package/dist/cloudflare-tunnel.addon.mjs.map +1 -1
- package/dist/index.js +6 -201
- package/dist/index.mjs +2 -9
- package/package.json +8 -6
- package/dist/chunk-HHH5U2SN.mjs +0 -174
- package/dist/chunk-HHH5U2SN.mjs.map +0 -1
- package/dist/cloudflare-tunnel.addon.d.mts +0 -39
- package/dist/cloudflare-tunnel.addon.d.ts +0 -39
- package/dist/index.d.mts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { INetworkAccessProvider, IScopedLogger, IEventBus, IProcessManager, INetworkEndpoint, NetworkAccessStatus, ICamstackAddon, IConfigurable, AddonManifest, AddonContext, CapabilityProviderMap, ConfigUISchema } from '@camstack/types';
|
|
2
|
-
|
|
3
|
-
interface CloudflareTunnelConfig {
|
|
4
|
-
readonly mode: 'quick' | 'named';
|
|
5
|
-
readonly namedTunnelToken?: string;
|
|
6
|
-
readonly localPort: number;
|
|
7
|
-
}
|
|
8
|
-
declare class CloudflareTunnelService implements INetworkAccessProvider {
|
|
9
|
-
private readonly config;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
private readonly eventBus;
|
|
12
|
-
private readonly processManager;
|
|
13
|
-
readonly id = "cloudflare-tunnel";
|
|
14
|
-
readonly type = "cloudflare";
|
|
15
|
-
private endpoint;
|
|
16
|
-
private processId;
|
|
17
|
-
constructor(config: CloudflareTunnelConfig, logger: IScopedLogger, eventBus: IEventBus, processManager: IProcessManager);
|
|
18
|
-
start(): Promise<INetworkEndpoint>;
|
|
19
|
-
stop(): Promise<void>;
|
|
20
|
-
getEndpoint(): INetworkEndpoint | null;
|
|
21
|
-
getStatus(): NetworkAccessStatus;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
declare class CloudflareTunnelAddon implements ICamstackAddon, IConfigurable {
|
|
25
|
-
readonly manifest: AddonManifest;
|
|
26
|
-
private service;
|
|
27
|
-
private currentConfig;
|
|
28
|
-
initialize(context: AddonContext): Promise<void>;
|
|
29
|
-
shutdown(): Promise<void>;
|
|
30
|
-
/** Provide the ProcessManagerService to enable tunnel management */
|
|
31
|
-
setProcessManager(processManager: IProcessManager, config: CloudflareTunnelConfig, context: AddonContext): void;
|
|
32
|
-
getService(): CloudflareTunnelService;
|
|
33
|
-
getCapabilityProvider<K extends keyof CapabilityProviderMap>(name: K): CapabilityProviderMap[K] | null;
|
|
34
|
-
getConfigSchema(): ConfigUISchema;
|
|
35
|
-
getConfig(): Record<string, unknown>;
|
|
36
|
-
onConfigChange(config: Record<string, unknown>): Promise<void>;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { type CloudflareTunnelConfig as C, CloudflareTunnelAddon, CloudflareTunnelService as a };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { INetworkAccessProvider, IScopedLogger, IEventBus, IProcessManager, INetworkEndpoint, NetworkAccessStatus, ICamstackAddon, IConfigurable, AddonManifest, AddonContext, CapabilityProviderMap, ConfigUISchema } from '@camstack/types';
|
|
2
|
-
|
|
3
|
-
interface CloudflareTunnelConfig {
|
|
4
|
-
readonly mode: 'quick' | 'named';
|
|
5
|
-
readonly namedTunnelToken?: string;
|
|
6
|
-
readonly localPort: number;
|
|
7
|
-
}
|
|
8
|
-
declare class CloudflareTunnelService implements INetworkAccessProvider {
|
|
9
|
-
private readonly config;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
private readonly eventBus;
|
|
12
|
-
private readonly processManager;
|
|
13
|
-
readonly id = "cloudflare-tunnel";
|
|
14
|
-
readonly type = "cloudflare";
|
|
15
|
-
private endpoint;
|
|
16
|
-
private processId;
|
|
17
|
-
constructor(config: CloudflareTunnelConfig, logger: IScopedLogger, eventBus: IEventBus, processManager: IProcessManager);
|
|
18
|
-
start(): Promise<INetworkEndpoint>;
|
|
19
|
-
stop(): Promise<void>;
|
|
20
|
-
getEndpoint(): INetworkEndpoint | null;
|
|
21
|
-
getStatus(): NetworkAccessStatus;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
declare class CloudflareTunnelAddon implements ICamstackAddon, IConfigurable {
|
|
25
|
-
readonly manifest: AddonManifest;
|
|
26
|
-
private service;
|
|
27
|
-
private currentConfig;
|
|
28
|
-
initialize(context: AddonContext): Promise<void>;
|
|
29
|
-
shutdown(): Promise<void>;
|
|
30
|
-
/** Provide the ProcessManagerService to enable tunnel management */
|
|
31
|
-
setProcessManager(processManager: IProcessManager, config: CloudflareTunnelConfig, context: AddonContext): void;
|
|
32
|
-
getService(): CloudflareTunnelService;
|
|
33
|
-
getCapabilityProvider<K extends keyof CapabilityProviderMap>(name: K): CapabilityProviderMap[K] | null;
|
|
34
|
-
getConfigSchema(): ConfigUISchema;
|
|
35
|
-
getConfig(): Record<string, unknown>;
|
|
36
|
-
onConfigChange(config: Record<string, unknown>): Promise<void>;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { type CloudflareTunnelConfig as C, CloudflareTunnelAddon, CloudflareTunnelService as a };
|
package/dist/index.d.mts
DELETED
package/dist/index.d.ts
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/cloudflare-tunnel.ts","../src/cloudflare-tunnel.addon.ts"],"sourcesContent":["export { CloudflareTunnelService } from './cloudflare-tunnel'\nexport type { CloudflareTunnelConfig } from './cloudflare-tunnel'\nexport { CloudflareTunnelAddon } from './cloudflare-tunnel.addon'\n","import { randomUUID } from 'node:crypto'\nimport type {\n IScopedLogger, IEventBus,\n INetworkAccessProvider, INetworkEndpoint, NetworkAccessStatus,\n IProcessManager, ProcessConfig,\n} from '@camstack/types'\n\nexport interface CloudflareTunnelConfig {\n readonly mode: 'quick' | 'named'\n readonly namedTunnelToken?: string\n readonly localPort: number\n}\n\nexport class CloudflareTunnelService implements INetworkAccessProvider {\n readonly id = 'cloudflare-tunnel'\n readonly type = 'cloudflare'\n\n private endpoint: INetworkEndpoint | null = null\n private processId: string | null = null\n\n constructor(\n private readonly config: CloudflareTunnelConfig,\n private readonly logger: IScopedLogger,\n private readonly eventBus: IEventBus,\n private readonly processManager: IProcessManager,\n ) {}\n\n async start(): Promise<INetworkEndpoint> {\n this.logger.info(`Starting Cloudflare tunnel (${this.config.mode})`)\n\n const processConfig: ProcessConfig = {\n id: 'cloudflared-tunnel',\n label: 'Cloudflare Tunnel',\n command: 'cloudflared',\n args:\n this.config.mode === 'quick'\n ? ['tunnel', '--url', `http://localhost:${this.config.localPort}`]\n : ['tunnel', 'run', '--token', this.config.namedTunnelToken!],\n autoRestart: true,\n maxRestarts: 5,\n }\n\n this.processManager.register(processConfig)\n await this.processManager.start('cloudflared-tunnel')\n this.processId = 'cloudflared-tunnel'\n\n const publicUrl =\n this.config.mode === 'named'\n ? 'https://tunnel.example.com'\n : 'https://pending.trycloudflare.com'\n\n this.endpoint = {\n id: 'cloudflare-tunnel',\n type: 'tunnel',\n provider: 'cloudflare',\n url: publicUrl,\n internal: false,\n capabilities: {\n supportsWebRTC: false,\n supportsWebSocket: true,\n supportsSSE: true,\n },\n priority: 50,\n status: 'online',\n }\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'cloudflare-tunnel' },\n category: 'network.tunnel.started',\n data: { url: publicUrl },\n })\n\n return this.endpoint\n }\n\n async stop(): Promise<void> {\n if (this.processId) {\n await this.processManager.stop(this.processId)\n }\n this.endpoint = null\n\n this.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'cloudflare-tunnel' },\n category: 'network.tunnel.stopped',\n data: {},\n })\n }\n\n getEndpoint(): INetworkEndpoint | null {\n return this.endpoint\n }\n\n getStatus(): NetworkAccessStatus {\n return {\n connected: this.endpoint !== null,\n publicUrl: this.endpoint?.url,\n }\n }\n}\n","import type {\n ICamstackAddon, AddonManifest, AddonContext,\n IConfigurable, ConfigUISchema, CapabilityProviderMap,\n IProcessManager,\n} from '@camstack/types'\nimport { CloudflareTunnelService } from './cloudflare-tunnel'\nimport type { CloudflareTunnelConfig } from './cloudflare-tunnel'\n\nexport class CloudflareTunnelAddon implements ICamstackAddon, IConfigurable {\n readonly manifest: AddonManifest = {\n id: 'cloudflare-tunnel',\n name: 'Cloudflare Tunnel',\n version: '1.0.0',\n capabilities: ['network-access'],\n }\n\n private service: CloudflareTunnelService | null = null\n private currentConfig: Partial<CloudflareTunnelConfig> = {\n mode: 'quick',\n localPort: 3000,\n }\n\n async initialize(context: AddonContext): Promise<void> {\n this.currentConfig = {\n mode: (context.addonConfig.mode as CloudflareTunnelConfig['mode']) ?? this.currentConfig.mode,\n namedTunnelToken: (context.addonConfig.namedTunnelToken as string | undefined) ?? this.currentConfig.namedTunnelToken,\n localPort: (context.addonConfig.localPort as number) ?? this.currentConfig.localPort,\n }\n // Service creation is deferred until processManager is provided via setProcessManager\n context.logger.info('Cloudflare Tunnel addon initialized')\n }\n\n async shutdown(): Promise<void> {\n await this.service?.stop()\n this.service = null\n }\n\n /** Provide the ProcessManagerService to enable tunnel management */\n setProcessManager(\n processManager: IProcessManager,\n config: CloudflareTunnelConfig,\n context: AddonContext,\n ): void {\n this.service = new CloudflareTunnelService(\n config,\n context.logger,\n context.eventBus,\n processManager,\n )\n }\n\n getService(): CloudflareTunnelService {\n if (!this.service) throw new Error('Cloudflare Tunnel not initialized')\n return this.service\n }\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'network-access' && this.service) {\n return this.service as unknown as CapabilityProviderMap[K]\n }\n return null\n }\n\n getConfigSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'tunnel',\n title: 'Tunnel Settings',\n fields: [\n {\n type: 'select',\n key: 'mode',\n label: 'Tunnel Mode',\n description: 'Quick mode creates a temporary public URL; Named mode uses a persistent named tunnel with your Cloudflare account.',\n options: [\n { value: 'quick', label: 'Quick Tunnel', description: 'Temporary public URL, no Cloudflare account required' },\n { value: 'named', label: 'Named Tunnel', description: 'Persistent tunnel using a Cloudflare tunnel token' },\n ],\n },\n {\n type: 'password',\n key: 'namedTunnelToken',\n label: 'Tunnel Token',\n description: 'Token from your Cloudflare Zero Trust dashboard (required for Named Tunnel mode)',\n showToggle: true,\n showWhen: { field: 'mode', equals: 'named' },\n },\n {\n type: 'number',\n key: 'localPort',\n label: 'Local Port',\n description: 'The local port that the tunnel will expose publicly',\n min: 1,\n max: 65535,\n step: 1,\n },\n ],\n },\n ],\n }\n }\n\n getConfig(): Record<string, unknown> {\n return { ...this.currentConfig }\n }\n\n async onConfigChange(config: Record<string, unknown>): Promise<void> {\n this.currentConfig = {\n mode: (config.mode as CloudflareTunnelConfig['mode']) ?? this.currentConfig.mode,\n namedTunnelToken: (config.namedTunnelToken as string | undefined) ?? this.currentConfig.namedTunnelToken,\n localPort: (config.localPort as number) ?? this.currentConfig.localPort,\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|