@viaalink/caddy-api-client 0.0.0-stage → 0.10.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/LICENSE +21 -0
- package/README.md +671 -2
- package/dist/caddy/index.d.ts +5 -0
- package/dist/caddy/index.js +5 -0
- package/dist/caddy-http-DLxwstYo.d.ts +2735 -0
- package/dist/caddy-http.zod-Cx-dcFkE.d.ts +2243 -0
- package/dist/caddy-types.d.ts +941 -0
- package/dist/caddy-types.js +1 -0
- package/dist/client-Bf2QoSWQ.d.ts +6712 -0
- package/dist/generated/extension-assets.d.ts +92 -0
- package/dist/generated/extension-assets.js +302 -0
- package/dist/index-BijF7qR9.d.ts +336 -0
- package/dist/index-BmimANG7.d.ts +1920 -0
- package/dist/index-Q5Jc47QL.d.ts +3025 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.js +6 -0
- package/dist/mitm/index.d.ts +218 -0
- package/dist/mitm/index.js +2 -0
- package/dist/plugins/caddy-dns/index.d.ts +2 -0
- package/dist/plugins/caddy-dns/index.js +1 -0
- package/dist/plugins/caddy-security/index.d.ts +3 -0
- package/dist/plugins/caddy-security/index.js +2 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.js +2 -0
- package/dist/types-DIjkvykh.d.ts +1041 -0
- package/package.json +168 -4
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {spawn}from'child_process';import {writeFileSync,existsSync,unlinkSync,readFileSync}from'fs';import {join}from'path';import {z as z$1}from'zod';var j=class l extends Error{constructor(s,c){super(s);this.context=c;this.name="CaddyApiClientError",Object.setPrototypeOf(this,l.prototype);}};var I=class l extends j{constructor(i="MITMproxy is not installed"){super(i),this.name="MitmproxyNotInstalledError",Object.setPrototypeOf(this,l.prototype);}},A=class l extends j{constructor(s,c){super(s,{exitCode:c});this.exitCode=c;this.name="MitmproxyStartError",Object.setPrototypeOf(this,l.prototype);}};var Ke=z$1.object({identifiers:z$1.array(z$1.string()).optional(),issuers:z$1.array(z$1.unknown()).optional()}),ae=z$1.union([z$1.number(),z$1.string()]),Qe=z$1.object({paths:z$1.array(z$1.string()).optional(),methods:z$1.array(z$1.string()).optional()});z$1.any();var Ye=z$1.any();z$1.any();z$1.object({error:z$1.string()});var Je=z$1.record(z$1.string(),z$1.unknown());z$1.any();z$1.any();z$1.object({id:z$1.string(),source:z$1.string(),specversion:z$1.string(),type:z$1.string(),time:z$1.string(),datacontenttype:z$1.string().optional(),data:z$1.unknown().optional()});z$1.string();z$1.object({Context:z$1.unknown()});z$1.any();z$1.object({Network:z$1.string(),Host:z$1.string(),StartPort:z$1.number(),EndPort:z$1.number()});z$1.any();z$1.any();z$1.any();z$1.unknown();var et=z$1.object({interval:z$1.union([z$1.number(),z$1.string()]).optional(),first:z$1.number().optional(),thereafter:z$1.number().optional()}),ie=z$1.object({writer:z$1.unknown().optional(),encoder:z$1.unknown().optional(),core:z$1.unknown().optional(),level:z$1.string().optional(),sampling:et.optional(),with_caller:z$1.boolean().optional(),with_caller_skip:z$1.number().optional(),with_stacktrace:z$1.string().optional()}),tt=z$1.object({BaseLog:ie,include:z$1.array(z$1.string()).optional(),exclude:z$1.array(z$1.string()).optional()});z$1.object({});z$1.object({});z$1.object({});z$1.any();z$1.any();var ot=z$1.string();z$1.any();z$1.any();z$1.any();z$1.any();z$1.object({});z$1.any();z$1.any();z$1.any();z$1.object({RWMutex:z$1.unknown()});z$1.any();z$1.any();var rt=z$1.object({persist:z$1.boolean().optional(),load:z$1.unknown().optional(),load_delay:ae.optional()}),nt=z$1.object({public_keys:z$1.array(z$1.string()).optional(),permissions:z$1.array(Qe).optional()});z$1.object({Pattern:z$1.string(),Handler:Ye});var at=z$1.object({BaseLog:ie});z$1.object({ID:ot,New:z$1.any()});var it=z$1.object({listen:z$1.string().optional(),access_control:z$1.array(z$1.union([nt,z$1.undefined()])).optional()}),se=z$1.object({disabled:z$1.boolean().optional(),listen:z$1.string().optional(),enforce_origin:z$1.boolean().optional(),origins:z$1.array(z$1.string()).optional(),config:rt.optional(),identity:Ke.optional(),remote:it.optional()}),ce=z$1.object({sink:at.optional(),logs:z$1.record(z$1.string(),z$1.union([tt,z$1.undefined()])).optional()});z$1.object({admin:se.optional(),logging:ce.optional(),storage:z$1.unknown().optional(),apps:Je.optional()});var pe=z$1.object({per_host:z$1.boolean().optional(),observe_catchall_hosts:z$1.boolean().optional(),otlp:z$1.boolean().optional()}),le=z$1.object({disable:z$1.boolean().optional(),disable_redirects:z$1.boolean().optional(),disable_certificates:z$1.boolean().optional(),skip:z$1.array(z$1.string()).optional(),skip_certificates:z$1.array(z$1.string()).optional(),ignore_loaded_certificates:z$1.boolean().optional()});z$1.any();z$1.any();z$1.any();z$1.any();z$1.any();z$1.any();var ct=z$1.object({status_code:z$1.array(z$1.number()).optional(),headers:z$1.record(z$1.string(),z$1.array(z$1.string())).optional()}),L=z$1.string();z$1.object({expr:z$1.string().optional(),name:z$1.string().optional()});z$1.any();z$1.any();z$1.any();z$1.object({max_header_bytes:z$1.number().optional()});var E=z$1.object({name:z$1.string().optional()}),$=z$1.object({ranges:z$1.array(z$1.string()).optional()}),D=z$1.object({ranges:z$1.array(z$1.string()).optional()});z$1.any();z$1.object({ranges:z$1.array(z$1.string()).optional()});var lt=z$1.array(z$1.string());z$1.object({});z$1.object({Request:z$1.unknown().optional(),ShouldLogCredentials:z$1.boolean()});z$1.any();z$1.any();z$1.unknown();z$1.array(z$1.string());z$1.array(z$1.string());var q=z$1.object({name:z$1.string().optional(),pattern:z$1.string()});z$1.array(z$1.string());z$1.record(z$1.string(),z$1.array(z$1.string()));z$1.record(z$1.string(),z$1.array(z$1.string()));var B=z$1.record(z$1.string(),z$1.union([q,z$1.undefined()])),O=z$1.string(),F=z$1.object({handshake_complete:z$1.boolean().optional()});z$1.object({});z$1.object({ResponseWriter:z$1.unknown()});z$1.unknown();z$1.any();var bt=z$1.array(z$1.any());z$1.array(bt);var de=z$1.object({default_logger_name:z$1.string().optional(),logger_names:z$1.record(z$1.string(),lt).optional(),skip_hosts:z$1.array(z$1.string()).optional(),skip_unmapped_hosts:z$1.boolean().optional(),should_log_credentials:z$1.boolean().optional(),trace:z$1.boolean().optional()}),W=z$1.object({error:z$1.string().optional(),status_code:L.optional()});z$1.object({status_code:L.optional(),headers:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),body:z$1.string().optional(),close:z$1.boolean().optional(),abort:z$1.boolean().optional()});z$1.record(z$1.string(),z$1.any());z$1.record(z$1.string(),z$1.array(z$1.string()));z$1.record(z$1.string(),z$1.union([q,z$1.undefined()]));var H=z$1.any(),xt=z$1.any(),St=z$1.any();z$1.object({MatchRegexp:q});var Ht=z$1.array(xt),M=z$1.object({group:z$1.string().optional(),match:Ht.optional(),handle:z$1.array(z$1.unknown()).optional(),terminal:z$1.boolean().optional()}),P=z$1.array(M),me=z$1.object({routes:P.optional()});z$1.object({routes:P.optional(),errors:me.optional()});var N=z$1.object({listen:z$1.array(z$1.string()).optional(),listener_wrappers:z$1.array(z$1.unknown()).optional(),packet_conn_wrappers:z$1.array(z$1.unknown()).optional(),read_timeout:H.optional(),read_header_timeout:H.optional(),write_timeout:H.optional(),idle_timeout:H.optional(),keepalive_interval:H.optional(),keepalive_idle:H.optional(),keepalive_count:z$1.number().optional(),max_header_bytes:z$1.number().optional(),enable_full_duplex:z$1.boolean().optional(),routes:P.optional(),errors:me.optional(),named_routes:z$1.record(z$1.string(),z$1.union([M,z$1.undefined()])).optional(),tls_connection_policies:St.optional(),automatic_https:le.optional(),strict_sni_host:z$1.boolean().optional(),trusted_proxies:z$1.unknown().optional(),client_ip_headers:z$1.array(z$1.string()).optional(),trusted_proxies_strict:z$1.number().optional(),trusted_proxies_unix:z$1.boolean().optional(),logs:de.optional(),protocols:z$1.array(z$1.string()).optional(),listen_protocols:z$1.array(z$1.array(z$1.string())).optional(),allow_0rtt:z$1.boolean().optional(),metrics:pe.optional()});z$1.object({match:ct.optional(),status_code:L.optional(),routes:P.optional()});z$1.object({http_port:z$1.number().optional(),https_port:z$1.number().optional(),grace_period:H.optional(),shutdown_delay:H.optional(),servers:z$1.record(z$1.string(),z$1.union([N,z$1.undefined()])).optional(),metrics:pe.optional()});var he=z$1.object({smallest:z$1.boolean().optional(),root_common_name:z$1.array(z$1.string()).optional(),any_common_name:z$1.array(z$1.string()).optional()}),ue=z$1.object({subjects:z$1.array(z$1.string()).optional(),issuers:z$1.array(z$1.unknown()).optional(),get_certificate:z$1.array(z$1.unknown()).optional(),must_staple:z$1.boolean().optional(),renewal_window_ratio:z$1.number().optional(),key_type:z$1.string().optional(),storage:z$1.unknown().optional(),on_demand:z$1.boolean().optional(),reuse_private_keys:z$1.boolean().optional(),disable_ocsp_stapling:z$1.boolean().optional(),ocsp_overrides:z$1.record(z$1.string(),z$1.string()).optional()}),Rt=z$1.object({ask:z$1.string().optional(),permission:z$1.unknown().optional()}),ge=z$1.object({disabled:z$1.boolean().optional(),alternate_port:z$1.number().optional()}),ye=z$1.object({disabled:z$1.boolean().optional(),alternate_port:z$1.number().optional()});z$1.any();z$1.any();z$1.any();z$1.object({trusted_ca_certs:z$1.array(z$1.string()).optional()});z$1.object({pem_files:z$1.array(z$1.string()).optional()});z$1.object({authority:z$1.array(z$1.string()).optional()});z$1.object({authority:z$1.array(z$1.string()).optional()});z$1.object({storage:z$1.unknown().optional(),pem_keys:z$1.array(z$1.string()).optional()});z$1.object({});z$1.object({sources:z$1.array(z$1.unknown()).optional()});z$1.object({});z$1.object({url:z$1.string().optional()});var jt=z$1.number(),be=z$1.object({serial_number:z$1.array(z$1.string()).optional(),subject_organization:z$1.array(z$1.string()).optional(),public_key_algorithm:jt.optional(),any_tag:z$1.array(z$1.string()).optional(),all_tags:z$1.array(z$1.string()).optional()}),fe=z$1.object({ca:z$1.unknown().optional(),trusted_ca_certs:z$1.array(z$1.string()).optional(),trusted_ca_certs_pem_files:z$1.array(z$1.string()).optional(),trusted_leaf_certs:z$1.array(z$1.string()).optional(),verifiers:z$1.array(z$1.unknown()).optional(),mode:z$1.string().optional()});z$1.any();z$1.object({leaf_certs_loaders:z$1.array(z$1.unknown()).optional()});z$1.any();z$1.any();z$1.any();var Pt=z$1.object({public_name:z$1.string()});z$1.unknown().and(z$1.unknown());z$1.object({provider:z$1.unknown().optional()});z$1.any();var xe=z$1.object({certificate:z$1.string(),key:z$1.string(),format:z$1.string().optional(),tags:z$1.array(z$1.string()).optional()});z$1.array(z$1.string());z$1.object({files:z$1.array(z$1.string()).optional()});z$1.object({folders:z$1.array(z$1.string()).optional()});z$1.object({certificates:z$1.array(z$1.string()).optional()});z$1.object({certificates:z$1.array(z$1.string()).optional(),storage:z$1.unknown().optional()});z$1.array(z$1.string());var It=z$1.object({name:z$1.string().optional(),pattern:z$1.string()});z$1.object({MatchRegexp:It});z$1.object({ranges:z$1.array(z$1.string()).optional(),not_ranges:z$1.array(z$1.string()).optional()});z$1.object({ranges:z$1.array(z$1.string()).optional()});z$1.any();z$1.object({endpoint:z$1.string()});var Ot=z$1.object({certificate:z$1.string(),key:z$1.string(),tags:z$1.array(z$1.string()).optional()});z$1.any();z$1.object({pairs:z$1.array(xe).optional()});var Se=z$1.object({capacity:z$1.number().optional()});z$1.any();var zt=z$1.lazy(()=>z$1.object({Certificate:zt,Tags:z$1.array(z$1.string())}));z$1.array(z$1.string());var f=z$1.any(),U=z$1.any(),_e=z$1.object({policies:z$1.array(z$1.union([ue,z$1.undefined()])).optional(),on_demand:Rt.optional(),ocsp_interval:f.optional(),renew_interval:f.optional(),storage_clean_interval:f.optional()}),Z=z$1.object({provider:z$1.unknown().optional(),ttl:f.optional(),propagation_delay:f.optional(),propagation_timeout:f.optional(),resolvers:z$1.array(z$1.string()).optional(),override_domain:z$1.string().optional()}),Lt=z$1.object({ca:z$1.unknown().optional(),insecure_skip_verify:z$1.boolean().optional(),handshake_timeout:f.optional(),server_name:z$1.string().optional(),renegotiation:z$1.string().optional()});z$1.object({endpoints:z$1.array(z$1.string()).optional(),tls:Lt.optional()});var He=z$1.object({match:U.optional(),certificate_selection:be.optional(),cipher_suites:z$1.array(z$1.string()).optional(),curves:z$1.array(z$1.string()).optional(),alpn:z$1.array(z$1.string()).optional(),protocol_min:z$1.string().optional(),protocol_max:z$1.string().optional(),drop:z$1.boolean().optional(),client_authentication:fe.optional(),default_sni:z$1.string().optional(),fallback_sni:z$1.string().optional(),insecure_secrets_log:z$1.string().optional(),handshake_context:z$1.unknown().optional()}),Et=z$1.object({configs:z$1.array(z$1.string()).optional(),domains:z$1.array(z$1.string()).optional(),publishers:U.optional()});z$1.array(xe);z$1.object({ca:z$1.string().optional(),lifetime:f.optional(),sign_with_root:z$1.boolean().optional()});z$1.array(Ot);var ve=z$1.object({key_source:z$1.unknown().optional(),rotation_interval:f.optional(),max_keys:z$1.number().optional(),disable_rotation:z$1.boolean().optional(),disabled:z$1.boolean().optional()}),Dt=z$1.object({configs:z$1.array(Pt).optional(),publication:z$1.array(z$1.union([Et,z$1.undefined()])).optional()});z$1.object({api_key:z$1.string().optional(),validity_days:z$1.number().optional(),listen_host:z$1.string().optional(),alternate_http_port:z$1.number().optional(),cname_validation:Z.optional()});var Bt=z$1.object({http:ge.optional(),"tls-alpn":ye.optional(),dns:Z.optional(),bind_host:z$1.string().optional(),distributed:z$1.boolean().optional()});z$1.array(z$1.union([He,z$1.undefined()]));z$1.object({certificates:U.optional(),automation:_e.optional(),session_tickets:ve.optional(),cache:Se.optional(),disable_ocsp_stapling:z$1.boolean().optional(),disable_storage_check:z$1.boolean().optional(),disable_storage_clean:z$1.boolean().optional(),encrypted_client_hello:Dt.optional(),dns:z$1.unknown().optional(),resolvers:z$1.array(z$1.string()).optional()});z$1.object({ca:z$1.string().optional(),test_ca:z$1.string().optional(),email:z$1.string().optional(),profile:z$1.string().optional(),account_key:z$1.string().optional(),external_account:z$1.object({kid:z$1.string().optional(),hmacEncoded:z$1.string().optional()}).optional(),acme_timeout:f.optional(),challenges:Bt.optional(),trusted_roots_pem_files:z$1.array(z$1.string()).optional(),preferred_chains:he.optional(),certificate_lifetime:f.optional(),network_proxy:z$1.unknown().optional()});var Nt=z$1.object({template_file:z$1.string().optional(),reveal_symlinks:z$1.boolean().optional(),sort:z$1.array(z$1.string()).optional(),file_limit:z$1.number().optional()}),we=z$1.object({fs:z$1.string().optional(),root:z$1.string().optional(),try_files:z$1.array(z$1.string()).optional(),try_policy:z$1.string().optional(),split_path:z$1.array(z$1.string()).optional()}),Ut=z$1.any(),Zt=z$1.any(),Re=z$1.object({fs:z$1.string().optional(),root:z$1.string().optional(),hide:z$1.array(z$1.string()).optional(),index_names:z$1.array(z$1.string()).optional(),browse:Nt.optional(),canonical_uris:z$1.boolean().optional(),status_code:Ut.optional(),pass_thru:z$1.boolean().optional(),precompressed:Zt.optional(),precompressed_order:z$1.array(z$1.string()).optional(),etag_file_extensions:z$1.array(z$1.string()).optional()});var Xt=z$1.object({find:z$1.string().optional(),replace:z$1.string().optional(),limit:z$1.number().optional()}),Vt=z$1.object({find:z$1.string().optional(),replace:z$1.string().optional()}),X=z$1.object({key:z$1.string(),val:z$1.string()}),Gt=z$1.object({key:z$1.string().optional(),search:z$1.string().optional(),search_regexp:z$1.string().optional(),replace:z$1.string().optional()}),V=z$1.object({delete:z$1.array(z$1.string()).optional(),set:z$1.array(X).optional(),add:z$1.array(X).optional(),replace:z$1.array(Gt).optional(),rename:z$1.array(X).optional()});z$1.object({method:z$1.string().optional(),uri:z$1.string().optional(),strip_path_prefix:z$1.string().optional(),strip_path_suffix:z$1.string().optional(),uri_substring:z$1.array(Xt).optional(),path_regexp:z$1.array(Vt).optional(),query:V.optional()});z$1.any();var Kt=z$1.object({Header:z$1.record(z$1.string(),z$1.array(z$1.string()))}),Qt=z$1.any(),je=z$1.object({file_root:z$1.string().optional(),mime_types:z$1.array(z$1.string()).optional(),delimiters:z$1.array(z$1.string()).optional(),match:Qt.optional()});z$1.object({Root:z$1.unknown(),Req:z$1.unknown().optional(),Args:z$1.array(z$1.any()),RespHeader:Kt,CustomFuncs:z$1.array(z$1.record(z$1.string(),z$1.unknown()))});var Yt=z$1.object({input:z$1.string().optional(),input_regexp:z$1.string().optional(),outputs:z$1.array(z$1.any()).optional()}),Pe=z$1.object({source:z$1.string().optional(),destinations:z$1.array(z$1.string()).optional(),mappings:z$1.array(Yt).optional(),defaults:z$1.array(z$1.string()).optional()});var Jt=z$1.object({method:z$1.string().optional(),target:z$1.string().optional()}),eo=z$1.any(),to=z$1.object({HeaderOps:eo}),ke=z$1.object({resources:z$1.array(Jt).optional(),headers:to.optional()});var Ce=z$1.object({max_size:z$1.number().optional(),read_timeout:z$1.union([z$1.number(),z$1.string()]).optional(),write_timeout:z$1.union([z$1.number(),z$1.string()]).optional(),set:z$1.string().optional()});var oo=z$1.any(),Ie=z$1.object({handle_response:z$1.array(oo).optional()});var Ae=z$1.object({span:z$1.string(),span_attributes:z$1.record(z$1.string(),z$1.string()).optional()});var Oe=z$1.object({key:z$1.string().optional(),value:z$1.string().optional(),early:z$1.boolean().optional()});var Me=z$1.object({include:z$1.array(z$1.string()).optional(),exclude:z$1.array(z$1.string()).optional()});z$1.any();var Te=z$1.object({dial:z$1.string().optional(),max_requests:z$1.number().optional()});z$1.object({});z$1.object({Upstream:Te.optional(),Network:z$1.string(),Address:z$1.string(),Host:z$1.string(),Port:z$1.string()});z$1.object({AddrPort:z$1.string()});var K=z$1.object({addresses:z$1.array(z$1.string()).optional()}),ro=z$1.array(z$1.union([Te,z$1.undefined()]));z$1.any();z$1.any();z$1.object({});z$1.any();z$1.any();z$1.any();z$1.any();z$1.any();z$1.any();z$1.object({});z$1.object({weights:z$1.array(z$1.number()).optional()});z$1.object({choose:z$1.number().optional()});z$1.object({});z$1.object({});z$1.object({});z$1.object({});z$1.object({});z$1.object({});z$1.object({key:z$1.string().optional(),fallback:z$1.unknown().optional()});z$1.object({field:z$1.string().optional(),fallback:z$1.unknown().optional()});var no=z$1.object({ipv4:z$1.boolean().optional(),ipv6:z$1.boolean().optional()});z$1.object({sources:z$1.array(z$1.unknown()).optional()});var ao=z$1.any(),h=z$1.any(),io=z$1.any(),so=z$1.any(),co=z$1.any(),po=z$1.any(),ze=z$1.object({status_code:ao.optional()}),lo=z$1.object({path:z$1.string().optional(),uri:z$1.string().optional(),upstream:z$1.string().optional(),port:z$1.number().optional(),headers:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),method:z$1.string().optional(),body:z$1.string().optional(),follow_redirects:z$1.boolean().optional(),interval:h.optional(),timeout:h.optional(),passes:z$1.number().optional(),fails:z$1.number().optional(),max_size:z$1.number().optional(),expect_status:z$1.number().optional(),expect_body:z$1.string().optional()}),mo=z$1.object({fail_duration:h.optional(),max_fails:z$1.number().optional(),unhealthy_request_count:z$1.number().optional(),unhealthy_status:z$1.array(z$1.number()).optional(),unhealthy_latency:h.optional()}),ho=z$1.object({ca:z$1.unknown().optional(),root_ca_pool:z$1.array(z$1.string()).optional(),root_ca_pem_files:z$1.array(z$1.string()).optional(),client_certificate_file:z$1.string().optional(),client_certificate_key_file:z$1.string().optional(),client_certificate_automate:z$1.string().optional(),insecure_skip_verify:z$1.boolean().optional(),handshake_timeout:h.optional(),server_name:z$1.string().optional(),renegotiation:z$1.string().optional(),except_ports:z$1.array(z$1.string()).optional(),curves:z$1.array(z$1.string()).optional()}),uo=z$1.object({enabled:z$1.boolean().optional(),probe_interval:h.optional(),max_idle_conns:z$1.number().optional(),max_idle_conns_per_host:z$1.number().optional(),idle_timeout:h.optional()}),go=z$1.object({selection_policy:z$1.unknown().optional(),retries:z$1.number().optional(),try_duration:h.optional(),try_interval:h.optional(),retry_match:po.optional()}),yo=z$1.object({active:lo.optional(),passive:mo.optional()});z$1.object({name:z$1.string().optional(),secret:z$1.string().optional(),max_age:h.optional(),fallback:z$1.unknown().optional()});z$1.object({service:z$1.string().optional(),proto:z$1.string().optional(),name:z$1.string().optional(),refresh:h.optional(),grace_period:h.optional(),resolver:K.optional(),dial_timeout:h.optional(),dial_fallback_delay:h.optional(),dial_network:z$1.string().optional()});z$1.object({name:z$1.string().optional(),port:z$1.string().optional(),refresh:h.optional(),resolver:K.optional(),dial_timeout:h.optional(),dial_fallback_delay:h.optional(),versions:no.optional()});z$1.object({resolver:K.optional(),tls:ho.optional(),keep_alive:uo.optional(),compression:z$1.boolean().optional(),max_conns_per_host:z$1.number().optional(),proxy_protocol:z$1.string().optional(),forward_proxy_url:z$1.string().optional(),dial_timeout:h.optional(),dial_fallback_delay:h.optional(),response_header_timeout:h.optional(),expect_continue_timeout:h.optional(),max_response_header_size:z$1.number().optional(),write_buffer_size:z$1.number().optional(),read_buffer_size:z$1.number().optional(),read_timeout:h.optional(),write_timeout:h.optional(),versions:z$1.array(z$1.string()).optional(),local_address:z$1.string().optional(),network_proxy:z$1.unknown().optional()});z$1.object({transport:z$1.unknown().optional(),circuit_breaker:z$1.unknown().optional(),load_balancing:go.optional(),health_checks:yo.optional(),upstreams:ro.optional(),dynamic_upstreams:z$1.unknown().optional(),flush_interval:h.optional(),trusted_proxies:z$1.array(z$1.string()).optional(),headers:io.optional(),request_buffers:z$1.number().optional(),response_buffers:z$1.number().optional(),stream_timeout:h.optional(),stream_buffer_size:z$1.number().optional(),stream_close_delay:h.optional(),rewrite:so.optional(),handle_response:z$1.array(co).optional(),verbose_logs:z$1.boolean().optional()});z$1.any();z$1.object({route_matcher:z$1.string().optional(),portal_name:z$1.string().optional()});z$1.object({route_matcher:z$1.string().optional(),gatekeeper_name:z$1.string().optional()});var xo=z$1.any();z$1.object({config:xo.optional(),secrets_managers:z$1.array(z$1.unknown()).optional()});var Q=z$1.object({handler:z$1.literal("authenticator"),portal_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),_o=z$1.object({gatekeeper_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),Ho=z$1.object({handler:z$1.literal("authentication"),providers:z$1.object({authorizer:_o})});z$1.discriminatedUnion("handler",[Q,Ho]);var vo=z$1.object({realm:z$1.string().optional(),path:z$1.string()}),wo=z$1.object({name:z$1.string(),kind:z$1.literal("local"),params:vo}),Ro=z$1.object({address:z$1.string(),port:z$1.number().int().positive().max(65535).optional()}),jo=z$1.object({dn:z$1.string(),roles:z$1.array(z$1.string()).optional()}),Po=z$1.object({realm:z$1.string().optional(),servers:z$1.array(Ro).optional(),bind_username:z$1.string().optional(),bind_password:z$1.string().optional(),search_base_dn:z$1.string().optional(),search_user_filter:z$1.string().optional(),groups:z$1.array(jo).optional()}),ko=z$1.object({name:z$1.string(),kind:z$1.literal("ldap"),params:Po.passthrough()}),Le=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional(),authorization_url:z$1.string().optional(),token_url:z$1.string().optional()});z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:Le});var Ee=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),metadata_url:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional()});z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:Ee});var Co=z$1.discriminatedUnion("kind",[wo,ko]),Io=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:z$1.union([Le.passthrough(),Ee.passthrough()])}),Ao=z$1.object({theme:z$1.string().optional(),logo_url:z$1.string().optional(),custom_css:z$1.string().optional()}),Oo=z$1.object({lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),Mo=z$1.object({domains:z$1.record(z$1.string(),Oo).optional(),path:z$1.string().optional(),lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),To=z$1.object({name:z$1.string(),ui:Ao.optional(),cookie_config:Mo.optional(),identity_stores:z$1.array(z$1.string()).optional(),identity_providers:z$1.array(z$1.string()).optional(),user_transformer_configs:z$1.array(z$1.record(z$1.string(),z$1.unknown())).optional()}),zo=z$1.object({comment:z$1.string().optional(),conditions:z$1.array(z$1.string()).optional(),action:z$1.enum(["allow","deny"]).optional()}),Lo=z$1.object({token_name:z$1.string().optional(),source:z$1.string().optional()}),Eo=z$1.object({match_type:z$1.string(),uri:z$1.string().optional()}),$o=z$1.object({name:z$1.string(),access_list_rules:z$1.array(zo).optional(),crypto_key_configs:z$1.array(Lo).optional(),bypass_configs:z$1.array(Eo).optional()}),Do=z$1.object({generic:z$1.record(z$1.string(),z$1.unknown()).optional()}),qo=z$1.object({authentication_portals:z$1.array(To).optional(),authorization_policies:z$1.array($o).optional(),credentials:Do.optional(),identity_stores:z$1.array(Co).optional(),identity_providers:z$1.array(Io).optional()}),Bo=z$1.object({driver:z$1.string()}).passthrough();z$1.object({config:qo.optional(),secrets_managers:z$1.array(Bo).optional()});var Y=z$1.string().min(1,"Domain cannot be empty").regex(/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,"Invalid domain format"),z=z$1.string().regex(/^.+:\d+$/,"Dial address must be in host:port format"),De=z$1.string(),J=z$1.enum(["DENY","SAMEORIGIN"]),qe=z$1.enum(["none","www_to_domain","domain_to_www"]),Be=z$1.union([z$1.literal(301),z$1.literal(302),z$1.literal(307),z$1.literal(308)]);z$1.enum(["letsencrypt","zerossl","acme"]);var Wo=z$1.record(z$1.string(),z$1.array(z$1.string())),No=z$1.record(z$1.string(),z$1.array(z$1.string())),Uo=z$1.object({host:z$1.array(z$1.string()).optional(),path:z$1.array(z$1.string()).optional(),path_regexp:z$1.object({name:z$1.string().optional(),pattern:z$1.string()}).optional(),method:z$1.array(De).optional(),header:No.optional(),header_regexp:B.optional(),query:Wo.optional(),client_ip:D.optional(),remote_ip:$.optional(),protocol:O.optional(),tls:F.optional(),file:we.optional(),not:z$1.array(z$1.record(z$1.string(),z$1.unknown())).optional(),expression:z$1.string().optional()}),Fe=z$1.object({handler:z$1.string()}).passthrough(),Zo=z$1.object({"@id":z$1.string().optional(),match:z$1.array(Uo).optional(),handle:z$1.array(Fe).min(1,"Route must have at least one handler"),terminal:z$1.boolean().optional(),priority:z$1.number().int().optional()});z$1.object({adminUrl:z$1.string().url().optional().default("http://127.0.0.1:2019"),timeout:z$1.number().int().positive().optional().default(5e3)});var Xo=z$1.enum(["caddyfile","json","yaml","nginx","apache"]);z$1.object({config:z$1.string().min(1,"Config cannot be empty"),adapter:Xo.optional().default("caddyfile")});var ee=z$1.object({enableHsts:z$1.boolean().optional().default(false),hstsMaxAge:z$1.number().int().positive().optional().default(31536e3),frameOptions:J.optional().default("DENY"),enableCompression:z$1.boolean().optional().default(true)}),Vo=z$1.object({domain:Y,target:z$1.string().min(1,"Target cannot be empty"),targetPort:z$1.number().int().positive().max(65535,"Port must be between 1 and 65535"),enableSecurityHeaders:z$1.boolean().optional().default(true),enableHsts:z$1.boolean().optional().default(false),hstsMaxAge:z$1.number().int().positive().optional().default(31536e3),frameOptions:J.optional().default("DENY"),enableCompression:z$1.boolean().optional().default(true),redirectMode:qe.optional().default("none"),redirectStatusCode:Be.optional().default(308),adminUrl:z$1.string().url().optional()});Vo.extend({certFile:z$1.string().min(1,"Certificate file path cannot be empty"),keyFile:z$1.string().min(1,"Key file path cannot be empty")});z$1.object({domain:Y,target:z$1.string().min(1).optional(),targetPort:z$1.number().int().positive().max(65535).optional(),enableSecurityHeaders:z$1.boolean().optional(),enableHsts:z$1.boolean().optional(),hstsMaxAge:z$1.number().int().positive().optional(),frameOptions:J.optional(),enableCompression:z$1.boolean().optional(),redirectMode:qe.optional(),redirectStatusCode:Be.optional(),adminUrl:z$1.string().url().optional()});z$1.object({domain:Y,adminUrl:z$1.string().url().optional()});var te=z$1.object({enabled:z$1.boolean(),username:z$1.string().min(1).optional(),passwordHash:z$1.string().min(1).optional(),realm:z$1.string().optional(),routes:z$1.array(z$1.enum(["host","path","tunnel"])).optional()});z$1.object({host:z$1.string().optional(),path:z$1.string().optional(),pathRouteHost:z$1.string().optional().default("asd.localhost"),dial:z,serviceId:z$1.string().optional().default("unknown"),enableHostRoute:z$1.boolean().optional().default(true),enablePathRoute:z$1.boolean().optional().default(true),stripPrefix:z$1.boolean().optional().default(true),priority:z$1.number().int().optional().default(50),securityHeaders:ee.optional(),basicAuth:te.optional(),ingressTag:z$1.string().nullable().optional(),iframeOrigin:z$1.string().nullable().optional(),deleteResponseHeaders:z$1.array(z$1.string()).optional(),serviceType:z$1.string().optional(),isTunnelDomain:z$1.boolean().optional().default(false),flushInterval:z$1.number().optional(),projectId:z$1.string().nullable().optional()});z$1.object({host:z$1.string().min(1),serviceId:z$1.string().min(1),priority:z$1.number().int().optional(),ingressTag:z$1.string().nullable().optional(),dial:z$1.string().min(1).optional(),projectId:z$1.string().nullable().optional()});z$1.object({host:z$1.string().min(1),dial:z,securityHeaders:ee.optional(),basicAuth:te.optional(),priority:z$1.number().int().optional(),ingressTag:z$1.string().nullable().optional(),iframeOrigin:z$1.string().nullable().optional(),deleteResponseHeaders:z$1.array(z$1.string()).optional(),serviceId:z$1.string().optional(),serviceType:z$1.string().optional(),flushInterval:z$1.number().optional(),projectId:z$1.string().nullable().optional()});z$1.object({path:z$1.string().min(1),host:z$1.string().min(1),dial:z,stripPrefix:z$1.boolean().optional().default(true),securityHeaders:ee.optional(),basicAuth:te.optional(),priority:z$1.number().int().optional(),ingressTag:z$1.string().nullable().optional(),iframeOrigin:z$1.string().nullable().optional(),deleteResponseHeaders:z$1.array(z$1.string()).optional(),serviceId:z$1.string().optional(),serviceType:z$1.string().optional(),flushInterval:z$1.number().optional(),projectId:z$1.string().nullable().optional()});z$1.object({host:z$1.string().min(1),upstreams:z$1.array(z).min(1,"At least one upstream is required"),healthCheckPath:z$1.string().optional().default("/health"),healthCheckInterval:z$1.string().optional().default("10s"),policy:z$1.enum(["first","random","least_conn","round_robin"]).optional().default("first"),priority:z$1.number().int().optional()});var _=z$1.union([z$1.number().int(),z$1.literal("0"),z$1.string().regex(/^-?(\d+(\.\d+)?(ns|us|µs|ms|s|m|h|d))+$/,"Invalid Go duration format. Use units: ns, us, \xB5s, ms, s, m, h, d (e.g., '30s', '1h30m', '1.5d')")]),er=z$1.object({uri:z$1.string().optional(),path:z$1.string().optional(),port:z$1.number().int().positive().max(65535).optional(),headers:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),follow_redirects:z$1.boolean().optional(),interval:_.optional(),timeout:_.optional(),passes:z$1.number().int().positive().optional(),fails:z$1.number().int().positive().optional(),max_size:z$1.number().int().positive().optional(),expect_status:z$1.number().int().min(100).max(599).optional(),expect_body:z$1.string().optional()}),tr=z$1.object({fail_duration:_.optional(),max_fails:z$1.number().int().positive().optional(),unhealthy_request_count:z$1.number().int().positive().optional(),unhealthy_status:z$1.array(z$1.number().int().min(100).max(599)).optional(),unhealthy_latency:_.optional()}),or=z$1.object({active:er.optional(),passive:tr.optional()}),rr=z$1.object({selection_policy:z$1.object({policy:z$1.enum(["first","random","least_conn","round_robin","ip_hash","uri_hash","header","cookie"])}).passthrough().optional(),retries:z$1.number().int().nonnegative().optional(),try_duration:_.optional(),try_interval:_.optional()}),nr=z$1.object({dial:z$1.string().min(1),max_requests:z$1.number().int().positive().optional()}),ar=z$1.object({name:z$1.string().optional(),pattern:z$1.string()}),$e=z$1.object({host:z$1.array(z$1.string()).optional(),path:z$1.array(z$1.string()).optional(),path_regexp:z$1.object({name:z$1.string().optional(),pattern:z$1.string()}).optional(),method:z$1.array(De).optional(),header:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),header_regexp:z$1.record(z$1.string(),ar).optional(),query:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),client_ip:z$1.object({ranges:z$1.array(z$1.string())}).optional(),remote_ip:z$1.object({ranges:z$1.array(z$1.string())}).optional(),protocol:O.optional(),expression:z$1.string().optional(),tls:z$1.object({handshake_complete:z$1.boolean().optional()}).optional(),file:z$1.object({fs:z$1.string().optional(),root:z$1.string().optional(),try_files:z$1.array(z$1.string()).optional(),try_policy:z$1.enum(["first_exist","first_exist_fallback","smallest_size","largest_size","most_recently_modified"]).optional(),split_path:z$1.array(z$1.string()).optional()}).optional()});$e.extend({not:z$1.array(z$1.lazy(()=>$e)).optional()});var ir=z$1.object({handler:z$1.literal("reverse_proxy"),upstreams:z$1.array(nr).optional(),load_balancing:rr.optional(),health_checks:or.optional(),transport:z$1.object({protocol:z$1.string()}).passthrough().optional(),circuit_breaker:z$1.object({type:z$1.string()}).passthrough().optional(),dynamic_upstreams:z$1.object({source:z$1.string()}).passthrough().optional(),flush_interval:_.optional(),stream_timeout:_.optional(),stream_close_delay:_.optional(),trusted_proxies:z$1.array(z$1.string()).optional(),request_buffers:z$1.number().int().nonnegative().optional(),response_buffers:z$1.number().int().nonnegative().optional(),headers:z$1.object({request:z$1.object({add:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),set:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),delete:z$1.array(z$1.string()).optional()}).optional(),response:z$1.object({add:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),set:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),delete:z$1.array(z$1.string()).optional()}).optional()}).optional(),rewrite:z$1.object({uri:z$1.string().optional(),strip_path_prefix:z$1.string().optional(),strip_path_suffix:z$1.string().optional()}).passthrough().optional(),handle_response:z$1.array(z$1.object({match:z$1.object({status_code:z$1.array(z$1.number().int()).optional()}).passthrough().optional(),routes:z$1.array(z$1.any()).optional()}).passthrough()).optional(),verbose_logs:z$1.boolean().optional()}),sr=z$1.object({handler:z$1.literal("headers"),response:z$1.object({deferred:z$1.boolean().optional(),set:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),add:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),delete:z$1.array(z$1.string()).optional()}).optional(),request:z$1.object({set:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),add:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),delete:z$1.array(z$1.string()).optional()}).optional()}),We=z$1.union([z$1.number().int(),z$1.string()]).optional(),cr=z$1.object({handler:z$1.literal("static_response"),status_code:We,body:z$1.string().optional(),headers:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),close:z$1.boolean().optional(),abort:z$1.boolean().optional()}),pr=z$1.object({handler:z$1.literal("authentication"),providers:z$1.object({http_basic:z$1.object({accounts:z$1.array(z$1.object({username:z$1.string(),password:z$1.string()})).optional(),realm:z$1.string().optional(),hash:z$1.object({algorithm:z$1.string().optional()}).optional()}).optional()}).optional()}),lr=z$1.object({handler:z$1.literal("rewrite"),uri:z$1.string().optional(),strip_path_prefix:z$1.string().optional(),strip_path_suffix:z$1.string().optional(),uri_substring:z$1.array(z$1.object({find:z$1.string(),replace:z$1.string(),limit:z$1.number().int().optional()})).optional(),query:V.optional()}),dr=z$1.object({handler:z$1.literal("encode"),encodings:z$1.object({gzip:z$1.object({}).passthrough().optional(),zstd:z$1.object({}).passthrough().optional(),br:z$1.object({}).passthrough().optional()}).passthrough().optional(),prefer:z$1.array(z$1.string()).optional(),minimum_length:z$1.number().int().positive().optional()}),mr=Re.extend({handler:z$1.literal("file_server")}),hr=je.extend({handler:z$1.literal("templates")}),ur=Pe.extend({handler:z$1.literal("map")}),gr=ke.extend({handler:z$1.literal("push")}),yr=Ce.extend({handler:z$1.literal("request_body")}),br=z$1.object({handler:z$1.literal("vars")}).passthrough(),fr=Ie.extend({handler:z$1.literal("intercept")}),xr=E.extend({handler:z$1.literal("invoke")}),Sr=Ae.extend({handler:z$1.literal("tracing")}),_r=Oe.extend({handler:z$1.literal("log_append")}),Hr=W.extend({handler:z$1.literal("error"),status_code:We}),vr=ze.extend({handler:z$1.literal("copy_response")}),wr=Me.extend({handler:z$1.literal("copy_response_headers")}),Rr=z$1.object({handler:z$1.literal("subroute"),routes:z$1.array(z$1.lazy(()=>Zo)).optional(),errors:z$1.any().optional()}),jr=z$1.discriminatedUnion("handler",[ir,sr,cr,pr,lr,dr,mr,hr,ur,gr,yr,br,fr,xr,Sr,_r,Hr,vr,wr,Rr,Q]);z$1.union([jr,Fe]);var Pr=z$1.object({address:z$1.string(),num_requests:z$1.number(),fails:z$1.number(),healthy:z$1.boolean()});z$1.array(Pr);var oe=z$1.object({webPort:z$1.number().int().positive().max(65535).optional().default(8081),proxyPort:z$1.number().int().positive().max(65535).optional().default(8080),listenAddress:z$1.string().optional().default("127.0.0.1"),openBrowser:z$1.boolean().optional().default(true),scripts:z$1.array(z$1.string()).optional(),workingDir:z$1.string().optional()});async function Ze(){return new Promise(l=>{let i=spawn("which",["mitmweb"]);i.on("close",s=>l(s===0)),i.on("error",()=>l(false));})}async function us(){return await Ze()?new Promise(l=>{let i=spawn("mitmweb",["--version"]),s="";i.stdout.on("data",c=>{s+=c.toString();}),i.on("close",c=>{if(c===0){let p=/(\d+\.\d+\.\d+)/.exec(s);l(p?p[1]:null);}else l(null);}),i.on("error",()=>l(null));}):null}async function gs(l={}){let i=oe.parse(l);if(!await Ze())throw new I("MITMproxy is not installed. Install with: pip install mitmproxy");let s=Xe(i.workingDir);if(s.running)throw new j("MITMweb is already running",{pid:s.pid});let c=["--web-port",i.webPort.toString(),"--listen-port",i.proxyPort.toString(),"--listen-host",i.listenAddress,"--no-web-open-browser"];if(i.scripts&&i.scripts.length>0)for(let R of i.scripts)c.push("-s",R);let p=spawn("mitmweb",c,{detached:true,stdio:"ignore"}),g=i.workingDir??process.cwd(),b=join(g,"mitmweb.pid");if(writeFileSync(b,p.pid.toString(),"utf-8"),p.unref(),await Ir(i.webPort,1e4),i.openBrowser){let R=`http://${i.listenAddress}:${i.webPort}`;Ar(R);}return {pid:p.pid,webUrl:`http://${i.listenAddress}:${i.webPort}`,proxyUrl:`http://${i.listenAddress}:${i.proxyPort}`,pidFile:b}}async function ys(l){let i=Xe(l);if(!i.running||!i.pid)return;try{process.kill(i.pid,"SIGTERM"),await new Promise(p=>{let g=setInterval(()=>{try{process.kill(i.pid,0);}catch{clearInterval(g),p();}},100);setTimeout(()=>{clearInterval(g);try{process.kill(i.pid,"SIGKILL");}catch{}p();},5e3);});}catch{}let s=l??process.cwd(),c=join(s,"mitmweb.pid");existsSync(c)&&unlinkSync(c);}function Xe(l){let i=l??process.cwd(),s=join(i,"mitmweb.pid");if(!existsSync(s))return {running:false};try{let c=readFileSync(s,"utf-8").trim(),p=parseInt(c,10);if(isNaN(p))return {running:!1};try{return process.kill(p,0),{running:!0,pid:p,webUrl:"http://127.0.0.1:8081",proxyUrl:"http://127.0.0.1:8080"}}catch{return unlinkSync(s),{running:!1}}}catch{return {running:false}}}async function Ir(l,i){let s=Date.now(),c=`http://127.0.0.1:${l}`;for(;Date.now()-s<i;){try{if((await fetch(c)).ok)return}catch{}await new Promise(p=>setTimeout(p,500));}throw new A("Mitmweb failed to start within timeout")}function Ar(l){let i=process.platform,s;i==="darwin"?s="open":i==="win32"?s="start":s="xdg-open",spawn(s,[l],{detached:true,stdio:"ignore"}).unref();}async function bs(){return await new Promise(s=>{let c=spawn("which",["pipx"]);c.on("close",p=>s(p===0)),c.on("error",()=>s(false));})&&(console.log("Installing mitmproxy with pipx..."),await new Promise(c=>{let p=spawn("pipx",["install","mitmproxy"],{stdio:"inherit"});p.on("close",g=>c(g===0)),p.on("error",()=>c(false));}))||(console.log("Installing mitmproxy with pip..."),await new Promise(s=>{let c=spawn("pip",["install","--user","mitmproxy"],{stdio:"inherit"});c.on("close",p=>s(p===0)),c.on("error",()=>s(false));}))?(console.log("\u2705 MITMproxy installed successfully"),true):(console.error("\u274C Failed to install mitmproxy"),false)}function C(l,i){let s=typeof l=="string"&&l.startsWith("https://"),c=s?l.replace("https://",""):l,p=s,g={handler:"reverse_proxy",upstreams:[{dial:c}]};if(p){let b={};g.transport={protocol:"http",tls:b};}else g.transport={protocol:"http"};return g}function ne(l){return {handler:"rewrite",strip_path_prefix:l}}var Ve=class{caddy;proxies;services=new Map;constructor(i,s){if(this.caddy=i,this.proxies=s,Object.keys(s).length===0)throw new Error("At least one MITMproxy instance must be configured");if(!s.default){let c=Object.keys(s)[0];this.proxies.default=s[c];}}register(i){let s=`mitm_${i.id}`;this.services.set(i.id,{registration:i,enabled:false,activeProxy:null,routeId:s});}unregister(i){return this.services.delete(i)}getService(i){return this.services.get(i)}getProxy(i="default"){let s=this.proxies[i];if(!s)throw new Error(`Unknown proxy: ${i}. Available: ${Object.keys(this.proxies).join(", ")}`);return s}buildDirectRoute(i,s){let c=`${i.backend.host}:${i.backend.port}`;return i.host?{"@id":s,match:[{host:[i.host]}],handle:[C(c)],terminal:true}:{"@id":s,match:[{path:[`${i.pathPrefix}/*`]}],handle:[ne(i.pathPrefix),C(c)],terminal:true}}buildProxiedRoute(i,s,c){let p=`${s.host}:${s.port}`;return i.host?{"@id":c,match:[{host:[i.host]}],handle:[C(p)],terminal:true}:{"@id":c,match:[{path:[`${i.pathPrefix}/*`]}],handle:[ne(i.pathPrefix),C(p)],terminal:true}}async enable(i,s={}){let c=this.getService(i);if(!c)throw new Error(`Service not registered: ${i}`);let p=s.proxy??"default",g=this.getProxy(p),{registration:b,routeId:R}=c,Ge=this.buildProxiedRoute(b,g,R);await this.caddy.removeRouteById(b.serverId,R).catch(()=>{}),await this.caddy.addRoute(b.serverId,Ge),c.enabled=true,c.activeProxy=p;}async disable(i){let s=this.getService(i);if(!s)throw new Error(`Service not registered: ${i}`);let{registration:c,routeId:p}=s,g=this.buildDirectRoute(c,p);await this.caddy.removeRouteById(c.serverId,p).catch(()=>{}),await this.caddy.addRoute(c.serverId,g),s.enabled=false,s.activeProxy=null;}async enableAll(i={}){let s=Array.from(this.services.keys()).map(c=>this.enable(c,i));await Promise.all(s);}async disableAll(){let i=Array.from(this.services.keys()).map(s=>this.disable(s));await Promise.all(i);}isEnabled(i){return this.getService(i)?.enabled??false}getStatus(){let i={};for(let[s,c]of this.services)i[s]={enabled:c.enabled,proxy:c.activeProxy,service:c.registration};return i}getServiceStatus(i){let s=this.getService(i);if(s)return {enabled:s.enabled,proxy:s.activeProxy,service:s.registration}}getRegisteredServices(){return Array.from(this.services.keys())}getAvailableProxies(){return Object.keys(this.proxies)}getProxyConfig(i){return this.proxies[i]}};
|
|
2
|
+
export{Ve as MitmproxyManager,oe as MitmwebOptionsSchema,bs as autoInstallMitmproxy,us as getMitmproxyVersion,Xe as getMitmwebStatus,Ze as isMitmproxyInstalled,gs as startMitmweb,ys as stopMitmweb};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { A as AcmeDnsProviderConfigResult, a as CloudflareDnsProviderConfig, C as CloudflareDnsProviderConfigSchema, D as DigitaloceanDnsProviderConfig, e as DigitaloceanDnsProviderConfigSchema, b as GodaddyDnsProviderConfig, G as GodaddyDnsProviderConfigSchema, c as KNOWN_ACME_DNS_PROVIDERS, K as KnownAcmeDnsProvider, P as PorkbunDnsProviderConfig, d as PorkbunDnsProviderConfigSchema, l as buildAcmeDnsProviderConfig, g as buildCloudflareDnsConfig, j as buildDigitaloceanDnsConfig, k as buildGodaddyDnsConfig, f as buildPorkbunDnsConfig, h as buildRoute53DnsConfig } from '../../index-BijF7qR9.js';
|
|
2
|
+
import 'zod';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {z,ZodError}from'zod';var I=["porkbun","cloudflare","route53","digitalocean","godaddy"];z.object({apikey:z.string(),secretapikey:z.string()});var P=z.object({api_key:z.string().optional(),api_secret_key:z.string().optional()});z.any();var y=z.object({api_token:z.string().optional(),zone_token:z.string().optional()});var b=z.object({api_token:z.string().optional()});z.object({data:z.string(),ttl:z.number()});var N=z.object({});z.object({Record:z.any(),ID:z.string()});var C=z.object({Client:N,auth_token:z.string()});var h=z.object({region:z.string().optional(),profile:z.string().optional(),access_key_id:z.string().optional(),secret_access_key:z.string().optional(),session_token:z.string().optional(),max_retries:z.number().optional(),route53_max_wait:z.number().optional(),wait_for_route53_sync:z.boolean().optional(),skip_route53_sync_on_delete:z.boolean().optional(),hosted_zone_id:z.string().optional()});var D=z.object({Provider:z.any().optional(),debug_logging:z.boolean().optional()});var l=P,g=y,f=b,m=C.omit({Client:true}),x=h.extend(D.pick({debug_logging:true}).shape);var K=Object.freeze({porkbun:"porkbun",cloudflare:"cloudflare",route53:"route53",digitalocean:"digitalocean",godaddy:"godaddy"});function _(e){let r=e.trim().toLowerCase();return K[r]??r}var v=class e extends Error{constructor(t,n){super(t);this.context=n;this.name="CaddyApiClientError",Object.setPrototypeOf(this,e.prototype);}},p=class e extends v{constructor(t,n){super(t,{errors:n});this.errors=n;this.name="ValidationError",Object.setPrototypeOf(this,e.prototype);}};function d(e,r,t){try{return e.parse(r)}catch(n){if(n instanceof ZodError){let w=t?`${t}: ${A(n)}`:A(n);throw new p(w,n.errors)}throw n}}function A(e){if(e.issues.length===1){let r=e.issues[0];return O(r)}return e.issues.map((r,t)=>`${t+1}. ${O(r)}`).join("; ")}function O(e){return `${e.path.length>0?`${e.path.join(".")}: `:""}${e.message}`}function S(){return {providerConfig:d(l,{api_key:"{env.PORKBUN_API_KEY}",api_secret_key:"{env.PORKBUN_API_SECRET_KEY}"},"buildPorkbunDnsConfig"),envVars:["PORKBUN_API_KEY","PORKBUN_API_SECRET_KEY"]}}function R(){return {providerConfig:d(g,{api_token:"{env.CLOUDFLARE_API_TOKEN}"},"buildCloudflareDnsConfig"),envVars:["CLOUDFLARE_API_TOKEN"]}}function E(e){let r=["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_REGION"];return !e||Object.keys(e).length===0?{envVars:r}:{providerConfig:d(x,e,"buildRoute53DnsConfig"),envVars:r}}function k(){return {providerConfig:d(m,{auth_token:"{env.DIGITALOCEAN_API_TOKEN}"},"buildDigitaloceanDnsConfig"),envVars:["DIGITALOCEAN_API_TOKEN"]}}function j(){return {providerConfig:d(f,{api_token:"{env.GODADDY_API_TOKEN}"},"buildGodaddyDnsConfig"),envVars:["GODADDY_API_TOKEN"]}}function T(e){switch(_(e)){case "porkbun":return S();case "cloudflare":return R();case "route53":return E();case "digitalocean":return k();case "godaddy":return j();default:return {envVars:[]}}}export{g as CloudflareDnsProviderConfigSchema,m as DigitaloceanDnsProviderConfigSchema,f as GodaddyDnsProviderConfigSchema,I as KNOWN_ACME_DNS_PROVIDERS,l as PorkbunDnsProviderConfigSchema,T as buildAcmeDnsProviderConfig,R as buildCloudflareDnsConfig,k as buildDigitaloceanDnsConfig,j as buildGodaddyDnsConfig,S as buildPorkbunDnsConfig,E as buildRoute53DnsConfig};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { A as AuthenticationPortal, f as AuthorizationPolicy, I as IdentityStore, g as LdapIdentityStore, L as LocalIdentityStore, O as OAuth2IdentityProvider, h as OidcIdentityProvider, d as SecurityApp, S as SecurityAuthenticatorHandler, b as SecurityAuthorizationHandler, a as SecurityAuthorizerProvider, e as SecurityConfig, c as SecurityHandler } from '../../types-DIjkvykh.js';
|
|
2
|
+
export { v as AccessListEntry, A as AuthenticationPortalSchema, f as AuthorizationPolicySchema, t as BuildAuthenticationPortalOptions, M as BuildAuthenticationRouteOptions, G as BuildAuthenticatorHandlerOptions, H as BuildAuthorizationHandlerOptions, u as BuildAuthorizationPolicyOptions, l as BuildLdapIdentityStoreOptions, B as BuildLocalIdentityStoreOptions, p as BuildOAuth2ProviderOptions, q as BuildOidcProviderOptions, N as BuildProtectedRouteOptions, D as BuildSecurityAppOptions, z as BuildSecurityConfigOptions, C as CookieOptions, w as CryptoKeyConfig, I as IdentityStoreSchema, g as LdapIdentityStoreSchema, m as LdapServerConfig, L as LocalIdentityStoreSchema, O as OAuth2IdentityProviderSchema, h as OidcIdentityProviderSchema, P as PortalUiOptions, Q as SECURITY_TEMPLATES, d as SecurityAppSchema, S as SecurityAuthenticatorHandlerSchema, b as SecurityAuthorizationHandlerSchema, a as SecurityAuthorizerProviderSchema, e as SecurityConfigSchema, c as SecurityHandlerSchema, U as SecurityTemplate, V as TemplateVariable, r as buildAuthenticationPortal, E as buildAuthenticatorHandler, J as buildAuthenticatorRoute, F as buildAuthorizationHandler, s as buildAuthorizationPolicy, k as buildLdapIdentityStore, j as buildLocalIdentityStore, n as buildOAuth2Provider, o as buildOidcProvider, K as buildProtectedRoute, y as buildSecurityApp, x as buildSecurityConfig, T as getTemplateById, R as getTemplatesByCategory } from '../../index-Q5Jc47QL.js';
|
|
3
|
+
import 'zod';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {z as z$1,ZodError}from'zod';z$1.any();z$1.object({route_matcher:z$1.string().optional(),portal_name:z$1.string().optional()});z$1.object({route_matcher:z$1.string().optional(),gatekeeper_name:z$1.string().optional()});var N=z$1.any();z$1.object({config:N.optional(),secrets_managers:z$1.array(z$1.unknown()).optional()});var p=z$1.object({handler:z$1.literal("authenticator"),portal_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),z=z$1.object({gatekeeper_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),u=z$1.object({handler:z$1.literal("authentication"),providers:z$1.object({authorizer:z})}),G=z$1.discriminatedUnion("handler",[p,u]),F=z$1.object({realm:z$1.string().optional(),path:z$1.string()}),m=z$1.object({name:z$1.string(),kind:z$1.literal("local"),params:F}),W=z$1.object({address:z$1.string(),port:z$1.number().int().positive().max(65535).optional()}),Y=z$1.object({dn:z$1.string(),roles:z$1.array(z$1.string()).optional()}),Z=z$1.object({realm:z$1.string().optional(),servers:z$1.array(W).optional(),bind_username:z$1.string().optional(),bind_password:z$1.string().optional(),search_base_dn:z$1.string().optional(),search_user_filter:z$1.string().optional(),groups:z$1.array(Y).optional()}),y=z$1.object({name:z$1.string(),kind:z$1.literal("ldap"),params:Z.passthrough()}),$=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional(),authorization_url:z$1.string().optional(),token_url:z$1.string().optional()}),O=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:$}),B=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),metadata_url:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional()}),x=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:B}),E=z$1.discriminatedUnion("kind",[m,y]),q=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:z$1.union([$.passthrough(),B.passthrough()])}),V=z$1.object({theme:z$1.string().optional(),logo_url:z$1.string().optional(),custom_css:z$1.string().optional()}),J=z$1.object({lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),Q=z$1.object({domains:z$1.record(z$1.string(),J).optional(),path:z$1.string().optional(),lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),h=z$1.object({name:z$1.string(),ui:V.optional(),cookie_config:Q.optional(),identity_stores:z$1.array(z$1.string()).optional(),identity_providers:z$1.array(z$1.string()).optional(),user_transformer_configs:z$1.array(z$1.record(z$1.string(),z$1.unknown())).optional()}),X=z$1.object({comment:z$1.string().optional(),conditions:z$1.array(z$1.string()).optional(),action:z$1.enum(["allow","deny"]).optional()}),ee=z$1.object({token_name:z$1.string().optional(),source:z$1.string().optional()}),te=z$1.object({match_type:z$1.string(),uri:z$1.string().optional()}),g=z$1.object({name:z$1.string(),access_list_rules:z$1.array(X).optional(),crypto_key_configs:z$1.array(ee).optional(),bypass_configs:z$1.array(te).optional()}),ie=z$1.object({generic:z$1.record(z$1.string(),z$1.unknown()).optional()}),f=z$1.object({authentication_portals:z$1.array(h).optional(),authorization_policies:z$1.array(g).optional(),credentials:ie.optional(),identity_stores:z$1.array(E).optional(),identity_providers:z$1.array(q).optional()}),re=z$1.object({driver:z$1.string()}).passthrough(),I=z$1.object({config:f.optional(),secrets_managers:z$1.array(re).optional()});var k=class e extends Error{constructor(r,o){super(r);this.context=o;this.name="CaddyApiClientError",Object.setPrototypeOf(this,e.prototype);}},S=class e extends k{constructor(r,o){super(r,{errors:o});this.errors=o;this.name="ValidationError",Object.setPrototypeOf(this,e.prototype);}};function c(e,i,r){try{return e.parse(i)}catch(o){if(o instanceof ZodError){let a=r?`${r}: ${U(o)}`:U(o);throw new S(a,o.errors)}throw o}}function U(e){if(e.issues.length===1){let i=e.issues[0];return D(i)}return e.issues.map((i,r)=>`${r+1}. ${D(i)}`).join("; ")}function D(e){return `${e.path.length>0?`${e.path.join(".")}: `:""}${e.message}`}function b(e){let i={name:e.name??"local",kind:"local",params:{realm:e.realm??"local",path:e.path}};return c(m,i,"buildLocalIdentityStore")}function _(e){let i={name:e.name??"ldapdb",kind:"ldap",params:{realm:e.realm??"ldap",servers:e.servers.map(r=>{let o=r.address;return !o.startsWith("ldap://")&&!o.startsWith("ldaps://")&&(o=(r.port===636?"ldaps://":"ldap://")+o),{address:o,...r.port&&{port:r.port}}}),bind_username:e.bindUsername,bind_password:e.bindPassword,search_base_dn:e.searchBaseDn,search_user_filter:(e.searchUserFilter??"(uid={username})").replace(/\{username\}/g,"%s"),groups:e.groups&&e.groups.length>0?e.groups.map(r=>({dn:r.groupDn??e.searchBaseDn,...r.roles&&{roles:r.roles}})):[{dn:e.searchBaseDn,roles:["authp/user"]}]}};return c(y,i,"buildLdapIdentityStore")}function P(e){let i={name:e.name??e.provider,kind:"oauth",params:{driver:e.provider,realm:e.realm??e.provider,client_id:e.clientId,client_secret:e.clientSecret,scopes:e.scopes??["openid","email","profile"],...e.authorizationUrl&&{authorization_url:e.authorizationUrl},...e.tokenUrl&&{token_url:e.tokenUrl}}};return c(O,i,"buildOAuth2Provider")}function d(e){let i=e.metadataUrl;i.endsWith("/.well-known/openid-configuration")||(i=i.replace(/\/$/,"")+"/.well-known/openid-configuration");let r={name:e.name??e.provider,kind:"oauth",params:{driver:"generic",realm:e.realm??e.provider,client_id:e.clientId,client_secret:e.clientSecret,metadata_url:i,scopes:e.scopes??["openid","email","profile"]}};return c(x,r,"buildOidcProvider")}function s(e){let i={name:e.name};if(e.ui&&(i.ui={...e.ui.theme&&{theme:e.ui.theme},...e.ui.logoUrl&&{logo_url:e.ui.logoUrl},...e.ui.customCss&&{custom_css:e.ui.customCss}}),e.cookie){let r={},o;if(e.cookie.lifetime!==void 0)if(typeof e.cookie.lifetime=="number")o=e.cookie.lifetime;else {let a=/^(\d+)(h|m|s)?$/.exec(e.cookie.lifetime);if(a){let v=parseInt(a[1],10),w=a[2]??"s";o=w==="h"?v*3600:w==="m"?v*60:v;}}if(e.cookie.domain){let a={};o!==void 0&&(a.lifetime=o),e.cookie.insecure!==void 0&&(a.insecure=e.cookie.insecure),e.cookie.sameSite&&(a.same_site=e.cookie.sameSite),r.domains={[e.cookie.domain]:a};}else o!==void 0&&(r.lifetime=o),e.cookie.insecure!==void 0&&(r.insecure=e.cookie.insecure),e.cookie.sameSite&&(r.same_site=e.cookie.sameSite);e.cookie.path&&(r.path=e.cookie.path),Object.keys(r).length>0&&(i.cookie_config=r);}return e.identityStores&&(i.identity_stores=e.identityStores),e.identityProviders&&(i.identity_providers=e.identityProviders),e.transformUser&&(i.user_transformer_configs=[e.transformUser]),c(h,i,"buildAuthenticationPortal")}function l(e){let i={name:e.name};return e.accessLists&&e.accessLists.length>0&&(i.access_list_rules=e.accessLists.map(r=>({action:r.action??"allow",conditions:[`match ${r.claim} ${r.values.join(" ")}`]}))),e.cryptoKey&&(i.crypto_key_configs=[{...e.cryptoKey.tokenName&&{token_name:e.cryptoKey.tokenName},...e.cryptoKey.source&&{source:e.cryptoKey.source}}]),e.bypass&&e.bypass.length>0&&(i.bypass_configs=e.bypass.map(r=>({uri:r,match_type:"prefix"}))),c(g,i,"buildAuthorizationPolicy")}function A(e){let i={};return e.portals&&e.portals.length>0&&(i.authentication_portals=e.portals),e.policies&&e.policies.length>0&&(i.authorization_policies=e.policies),e.identityStores&&e.identityStores.length>0&&(i.identity_stores=e.identityStores),e.identityProviders&&e.identityProviders.length>0&&(i.identity_providers=e.identityProviders),c(f,i,"buildSecurityConfig")}function ae(e){let i={config:e.config};return c(I,i,"buildSecurityApp")}function j(e){let i={handler:"authenticator",portal_name:e.portalName,...e.routeMatcher&&{route_matcher:e.routeMatcher}};return c(p,i,"buildAuthenticatorHandler")}function H(e){let i={handler:"authentication",providers:{authorizer:{gatekeeper_name:e.gatekeeperName,...e.routeMatcher&&{route_matcher:e.routeMatcher}}}};return c(u,i,"buildAuthorizationHandler")}function L(e){let i=j({portalName:e.portalName,routeMatcher:"*"});return {"@id":e.routeId??`auth-portal-${e.portalName}`,match:[{host:e.hosts}],handle:[i],terminal:true}}function T(e){let i=e.paths?.join(" ")??"*",r=H({gatekeeperName:e.gatekeeperName,routeMatcher:i}),o={host:e.hosts};return e.paths&&(o.path=e.paths),{"@id":e.routeId??`protected-${e.gatekeeperName}`,match:[o],handle:[r,{handler:"reverse_proxy",upstreams:[{dial:e.dial}]}],terminal:true}}var ne={id:"caddy-sec-local-store",name:"Local Identity Store",description:"File-based user authentication with JSON credentials file",category:"identity-store",variables:[{name:"path",description:"Path to users JSON file",default:"/etc/caddy/users.json"},{name:"realm",description:"Authentication realm name",default:"local"}],build:()=>b({path:"/etc/caddy/users.json",realm:"local"}),snippet:["buildLocalIdentityStore({",' path: "${1:/etc/caddy/users.json}",',' realm: "${2:local}",',"})"]},ce={id:"caddy-sec-ldap-store",name:"LDAP Identity Store",description:"LDAP/Active Directory authentication",category:"identity-store",variables:[{name:"server",description:"LDAP server address",default:"ldap.example.com"},{name:"port",description:"LDAP server port",default:"389"},{name:"bindUsername",description:"Bind username/DN for LDAP queries",default:"cn=admin,dc=example,dc=com"},{name:"bindPassword",description:"Bind password",default:"secret"},{name:"searchBaseDn",description:"Base DN for user searches",default:"ou=users,dc=example,dc=com"}],build:()=>_({servers:[{address:"ldap.example.com",port:389}],bindUsername:"cn=admin,dc=example,dc=com",bindPassword:"secret",searchBaseDn:"ou=users,dc=example,dc=com",searchUserFilter:"(uid={username})"}),snippet:["buildLdapIdentityStore({",' servers: [{ address: "${1:ldap.example.com}", port: ${2:389} }],',' bindUsername: "${3:cn=admin,dc=example,dc=com}",',' bindPassword: "${4:secret}",',' searchBaseDn: "${5:ou=users,dc=example,dc=com}",',' searchUserFilter: "${6:(uid={username})}",',"})"]},se={id:"caddy-sec-oauth2-github",name:"GitHub OAuth2 Provider",description:"GitHub OAuth2 authentication for developer tools",category:"identity-provider",variables:[{name:"clientId",description:"GitHub OAuth App client ID",default:"your-client-id"},{name:"clientSecret",description:"GitHub OAuth App client secret",default:"your-client-secret"}],build:()=>P({provider:"github",clientId:"your-client-id",clientSecret:"your-client-secret",scopes:["user:email","read:user"]}),snippet:["buildOAuth2Provider({",' provider: "github",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' scopes: ["user:email", "read:user"],',"})"]},le={id:"caddy-sec-oauth2-google",name:"Google OAuth2 Provider",description:"Google OAuth2 authentication",category:"identity-provider",variables:[{name:"clientId",description:"Google OAuth client ID",default:"your-client-id.apps.googleusercontent.com"},{name:"clientSecret",description:"Google OAuth client secret",default:"your-client-secret"}],build:()=>P({provider:"google",clientId:"your-client-id.apps.googleusercontent.com",clientSecret:"your-client-secret",scopes:["openid","email","profile"]}),snippet:["buildOAuth2Provider({",' provider: "google",',' clientId: "${1:your-client-id.apps.googleusercontent.com}",',' clientSecret: "${2:your-client-secret}",',' scopes: ["openid", "email", "profile"],',"})"]},de={id:"caddy-sec-oidc-keycloak",name:"Keycloak OIDC Provider",description:"Keycloak OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Keycloak client ID",default:"my-app"},{name:"clientSecret",description:"Keycloak client secret",default:"your-client-secret"},{name:"metadataUrl",description:"OIDC metadata/discovery URL",default:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}],build:()=>d({provider:"keycloak",clientId:"my-app",clientSecret:"your-client-secret",metadataUrl:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration",scopes:["openid","email","profile"]}),snippet:["buildOidcProvider({",' provider: "keycloak",',' clientId: "${1:my-app}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "${3:https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration}",',' scopes: ["openid", "email", "profile"],',"})"]},pe={id:"caddy-sec-oidc-okta",name:"Okta OIDC Provider",description:"Okta OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Okta client ID",default:"your-client-id"},{name:"clientSecret",description:"Okta client secret",default:"your-client-secret"},{name:"domain",description:"Okta domain",default:"your-domain.okta.com"}],build:()=>d({provider:"okta",clientId:"your-client-id",clientSecret:"your-client-secret",metadataUrl:"https://your-domain.okta.com/.well-known/openid-configuration"}),snippet:["buildOidcProvider({",' provider: "okta",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "https://${3:your-domain.okta.com}/.well-known/openid-configuration",',"})"]},ue={id:"caddy-sec-oidc-auth0",name:"Auth0 OIDC Provider",description:"Auth0 OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Auth0 client ID",default:"your-client-id"},{name:"clientSecret",description:"Auth0 client secret",default:"your-client-secret"},{name:"domain",description:"Auth0 domain",default:"your-tenant.auth0.com"}],build:()=>d({provider:"auth0",clientId:"your-client-id",clientSecret:"your-client-secret",metadataUrl:"https://your-tenant.auth0.com/.well-known/openid-configuration"}),snippet:["buildOidcProvider({",' provider: "auth0",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "https://${3:your-tenant.auth0.com}/.well-known/openid-configuration",',"})"]},me={id:"caddy-sec-portal-basic",name:"Basic Authentication Portal",description:"Simple authentication portal with local identity store",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"identityStore",description:"Identity store name",default:"local"}],build:()=>s({name:"myportal",identityStores:["local"]}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],',"})"]},ye={id:"caddy-sec-portal-cookie",name:"Portal with Cookie Configuration",description:"Authentication portal with custom cookie settings",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"domain",description:"Cookie domain",default:".example.com"},{name:"lifetime",description:"Session lifetime",default:"24h"}],build:()=>s({name:"myportal",identityStores:["local"],cookie:{domain:".example.com",path:"/",lifetime:"24h"}}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],'," cookie: {",' domain: "${3:.example.com}",',' path: "/",',' lifetime: "${4:24h}",'," },","})"]},he={id:"caddy-sec-portal-sso",name:"Portal with SSO Providers",description:"Authentication portal with OAuth/OIDC single sign-on",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"providers",description:"Identity providers",default:"keycloak"}],build:()=>s({name:"myportal",identityStores:["local"],identityProviders:["keycloak","google"]}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],',' identityProviders: ["${3:keycloak}", "${4:google}"],',"})"]},ge={id:"caddy-sec-policy-basic",name:"Basic Authorization Policy",description:"Simple role-based access control policy",category:"policy",variables:[{name:"name",description:"Policy name",default:"mypolicy"},{name:"roles",description:"Allowed roles",default:"user"}],build:()=>l({name:"mypolicy",accessLists:[{claim:"roles",values:["user"]}]}),snippet:["buildAuthorizationPolicy({",' name: "${1:mypolicy}",'," accessLists: [",' { claim: "roles", values: ["${2:user}"] },'," ],","})"]},fe={id:"caddy-sec-policy-admin",name:"Admin-Only Policy",description:"Policy that restricts access to admin role only",category:"policy",variables:[{name:"name",description:"Policy name",default:"admin-policy"}],build:()=>l({name:"admin-policy",accessLists:[{claim:"roles",values:["admin"]}]}),snippet:["buildAuthorizationPolicy({",' name: "${1:admin-policy}",'," accessLists: [",' { claim: "roles", values: ["admin"], action: "allow" },'," ],","})"]},Se={id:"caddy-sec-policy-bypass",name:"Policy with Bypass Paths",description:"Policy with public endpoints that skip authentication",category:"policy",variables:[{name:"name",description:"Policy name",default:"api-policy"},{name:"bypass",description:"Paths to bypass",default:"/health,/metrics"}],build:()=>l({name:"api-policy",accessLists:[{claim:"roles",values:["user","admin"]}],bypass:["/health","/metrics","/public/*"]}),snippet:["buildAuthorizationPolicy({",' name: "${1:api-policy}",'," accessLists: [",' { claim: "roles", values: ["user", "admin"] },'," ],",' bypass: ["/health", "/metrics", "${2:/public/*}"],',"})"]},be={id:"caddy-sec-route-portal",name:"Authentication Portal Route",description:"Route that serves the login portal",category:"route",variables:[{name:"host",description:"Portal hostname",default:"auth.example.com"},{name:"portalName",description:"Portal name",default:"myportal"}],build:()=>L({hosts:["auth.example.com"],portalName:"myportal",routeId:"auth-portal"}),snippet:["buildAuthenticatorRoute({",' hosts: ["${1:auth.example.com}"],',' portalName: "${2:myportal}",',' routeId: "${3:auth-portal}",',"})"]},Pe={id:"caddy-sec-route-protected",name:"Protected Route",description:"Route with authentication required",category:"route",variables:[{name:"host",description:"Service hostname",default:"api.example.com"},{name:"path",description:"Protected path",default:"/api/*"},{name:"gatekeeperName",description:"Policy name",default:"mypolicy"},{name:"upstream",description:"Upstream address",default:"localhost:3000"}],build:()=>T({hosts:["api.example.com"],paths:["/api/*"],gatekeeperName:"mypolicy",dial:"localhost:3000",routeId:"protected-api"}),snippet:["buildProtectedRoute({",' hosts: ["${1:api.example.com}"],',' paths: ["${2:/api/*}"],',' gatekeeperName: "${3:mypolicy}",',' dial: "${4:localhost:3000}",',' routeId: "${5:protected-api}",',"})"]},Ae={id:"caddy-sec-full-local",name:"Complete Local Authentication Setup",description:"Full setup with local users, portal, policy, and routes",category:"full-setup",variables:[{name:"usersPath",description:"Path to users file",default:"/etc/caddy/users.json"},{name:"authHost",description:"Auth portal hostname",default:"auth.example.com"},{name:"apiHost",description:"API hostname",default:"api.example.com"}],build:()=>{let e=b({path:"/etc/caddy/users.json"}),i=s({name:"portal",identityStores:["local"],cookie:{domain:".example.com",lifetime:"24h"}}),r=l({name:"policy",accessLists:[{claim:"roles",values:["user","admin"]}],bypass:["/health"]});return A({identityStores:[e],portals:[i],policies:[r]})},snippet:["// Complete local authentication setup","const store = buildLocalIdentityStore({",' path: "${1:/etc/caddy/users.json}",',"});","","const portal = buildAuthenticationPortal({",' name: "${2:portal}",',' identityStores: ["local"],'," cookie: {",' domain: "${3:.example.com}",',' lifetime: "24h",'," },","});","","const policy = buildAuthorizationPolicy({",' name: "${4:policy}",'," accessLists: [",' { claim: "roles", values: ["user", "admin"] },'," ],",' bypass: ["/health"],',"});","","const config = buildSecurityConfig({"," identityStores: [store],"," portals: [portal],"," policies: [policy],","});"]},ve={id:"caddy-sec-full-oidc",name:"Complete OIDC Authentication Setup",description:"Full setup with Keycloak OIDC, portal, policy, and routes",category:"full-setup",variables:[{name:"clientId",description:"OIDC client ID",default:"my-app"},{name:"clientSecret",description:"OIDC client secret",default:"your-secret"},{name:"metadataUrl",description:"OIDC metadata/discovery URL",default:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}],build:()=>{let e=d({provider:"keycloak",clientId:"my-app",clientSecret:"your-secret",metadataUrl:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}),i=s({name:"portal",identityProviders:["keycloak"]}),r=l({name:"policy",accessLists:[{claim:"roles",values:["user"]}]});return A({identityProviders:[e],portals:[i],policies:[r]})},snippet:["// Complete OIDC authentication setup","const provider = buildOidcProvider({",' provider: "keycloak",',' clientId: "${1:my-app}",',' clientSecret: "${2:your-secret}",',' metadataUrl: "${3:https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration}",',"});","","const portal = buildAuthenticationPortal({",' name: "${4:portal}",',' identityProviders: ["keycloak"],',"});","","const policy = buildAuthorizationPolicy({",' name: "${5:policy}",'," accessLists: [",' { claim: "roles", values: ["user"] },'," ],","});","","const config = buildSecurityConfig({"," identityProviders: [provider],"," portals: [portal],"," policies: [policy],","});"]},C=[ne,ce,se,le,de,pe,ue,me,ye,he,ge,fe,Se,be,Pe,Ae,ve];function Oe(e){return C.filter(i=>i.category===e)}function xe(e){return C.find(i=>i.id===e)}
|
|
2
|
+
export{h as AuthenticationPortalSchema,g as AuthorizationPolicySchema,E as IdentityStoreSchema,y as LdapIdentityStoreSchema,m as LocalIdentityStoreSchema,O as OAuth2IdentityProviderSchema,x as OidcIdentityProviderSchema,C as SECURITY_TEMPLATES,I as SecurityAppSchema,p as SecurityAuthenticatorHandlerSchema,u as SecurityAuthorizationHandlerSchema,z as SecurityAuthorizerProviderSchema,f as SecurityConfigSchema,G as SecurityHandlerSchema,s as buildAuthenticationPortal,j as buildAuthenticatorHandler,L as buildAuthenticatorRoute,H as buildAuthorizationHandler,l as buildAuthorizationPolicy,_ as buildLdapIdentityStore,b as buildLocalIdentityStore,P as buildOAuth2Provider,d as buildOidcProvider,T as buildProtectedRoute,ae as buildSecurityApp,A as buildSecurityConfig,xe as getTemplateById,Oe as getTemplatesByCategory};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { v as AccessListEntry, A as AuthenticationPortalSchema, f as AuthorizationPolicySchema, t as BuildAuthenticationPortalOptions, M as BuildAuthenticationRouteOptions, G as BuildAuthenticatorHandlerOptions, H as BuildAuthorizationHandlerOptions, u as BuildAuthorizationPolicyOptions, l as BuildLdapIdentityStoreOptions, B as BuildLocalIdentityStoreOptions, p as BuildOAuth2ProviderOptions, q as BuildOidcProviderOptions, N as BuildProtectedRouteOptions, D as BuildSecurityAppOptions, z as BuildSecurityConfigOptions, C as CookieOptions, w as CryptoKeyConfig, I as IdentityStoreSchema, g as LdapIdentityStoreSchema, m as LdapServerConfig, L as LocalIdentityStoreSchema, O as OAuth2IdentityProviderSchema, h as OidcIdentityProviderSchema, P as PortalUiOptions, Q as SECURITY_TEMPLATES, d as SecurityAppSchema, S as SecurityAuthenticatorHandlerSchema, b as SecurityAuthorizationHandlerSchema, a as SecurityAuthorizerProviderSchema, e as SecurityConfigSchema, c as SecurityHandlerSchema, U as SecurityTemplate, V as TemplateVariable, r as buildAuthenticationPortal, E as buildAuthenticatorHandler, J as buildAuthenticatorRoute, F as buildAuthorizationHandler, s as buildAuthorizationPolicy, k as buildLdapIdentityStore, j as buildLocalIdentityStore, n as buildOAuth2Provider, o as buildOidcProvider, K as buildProtectedRoute, y as buildSecurityApp, x as buildSecurityConfig, i as caddySecurity, T as getTemplateById, R as getTemplatesByCategory } from '../index-Q5Jc47QL.js';
|
|
2
|
+
export { A as AcmeDnsProviderConfigResult, a as CloudflareDnsProviderConfig, C as CloudflareDnsProviderConfigSchema, D as DigitaloceanDnsProviderConfig, e as DigitaloceanDnsProviderConfigSchema, b as GodaddyDnsProviderConfig, G as GodaddyDnsProviderConfigSchema, c as KNOWN_ACME_DNS_PROVIDERS, K as KnownAcmeDnsProvider, P as PorkbunDnsProviderConfig, d as PorkbunDnsProviderConfigSchema, l as buildAcmeDnsProviderConfig, g as buildCloudflareDnsConfig, j as buildDigitaloceanDnsConfig, k as buildGodaddyDnsConfig, f as buildPorkbunDnsConfig, h as buildRoute53DnsConfig, i as caddyDns } from '../index-BijF7qR9.js';
|
|
3
|
+
export { A as AuthenticationPortal, f as AuthorizationPolicy, I as IdentityStore, g as LdapIdentityStore, L as LocalIdentityStore, O as OAuth2IdentityProvider, h as OidcIdentityProvider, d as SecurityApp, S as SecurityAuthenticatorHandler, b as SecurityAuthorizationHandler, a as SecurityAuthorizerProvider, e as SecurityConfig, c as SecurityHandler } from '../types-DIjkvykh.js';
|
|
4
|
+
import 'zod';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {z as z$1,ZodError}from'zod';var Se=Object.defineProperty;var J=(e,r)=>{for(var i in r)Se(e,i,{get:r[i],enumerable:true});};var ae={};J(ae,{AuthenticationPortalSchema:()=>S,AuthorizationPolicySchema:()=>P,IdentityStoreSchema:()=>N,LdapIdentityStoreSchema:()=>f,LocalIdentityStoreSchema:()=>g,OAuth2IdentityProviderSchema:()=>C,OidcIdentityProviderSchema:()=>_,SECURITY_TEMPLATES:()=>w,SecurityAppSchema:()=>k,SecurityAuthenticatorHandlerSchema:()=>y,SecurityAuthorizationHandlerSchema:()=>h,SecurityAuthorizerProviderSchema:()=>U,SecurityConfigSchema:()=>b,SecurityHandlerSchema:()=>Q,buildAuthenticationPortal:()=>d,buildAuthenticatorHandler:()=>M,buildAuthenticatorRoute:()=>L,buildAuthorizationHandler:()=>K,buildAuthorizationPolicy:()=>l,buildLdapIdentityStore:()=>D,buildLocalIdentityStore:()=>v,buildOAuth2Provider:()=>A,buildOidcProvider:()=>p,buildProtectedRoute:()=>T,buildSecurityApp:()=>ie,buildSecurityConfig:()=>x,getTemplateById:()=>ne,getTemplatesByCategory:()=>oe});z$1.any();z$1.object({route_matcher:z$1.string().optional(),portal_name:z$1.string().optional()});z$1.object({route_matcher:z$1.string().optional(),gatekeeper_name:z$1.string().optional()});var ve=z$1.any();z$1.object({config:ve.optional(),secrets_managers:z$1.array(z$1.unknown()).optional()});var y=z$1.object({handler:z$1.literal("authenticator"),portal_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),U=z$1.object({gatekeeper_name:z$1.string().optional(),route_matcher:z$1.string().optional()}),h=z$1.object({handler:z$1.literal("authentication"),providers:z$1.object({authorizer:U})}),Q=z$1.discriminatedUnion("handler",[y,h]),xe=z$1.object({realm:z$1.string().optional(),path:z$1.string()}),g=z$1.object({name:z$1.string(),kind:z$1.literal("local"),params:xe}),Oe=z$1.object({address:z$1.string(),port:z$1.number().int().positive().max(65535).optional()}),Ce=z$1.object({dn:z$1.string(),roles:z$1.array(z$1.string()).optional()}),_e=z$1.object({realm:z$1.string().optional(),servers:z$1.array(Oe).optional(),bind_username:z$1.string().optional(),bind_password:z$1.string().optional(),search_base_dn:z$1.string().optional(),search_user_filter:z$1.string().optional(),groups:z$1.array(Ce).optional()}),f=z$1.object({name:z$1.string(),kind:z$1.literal("ldap"),params:_e.passthrough()}),X=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional(),authorization_url:z$1.string().optional(),token_url:z$1.string().optional()}),C=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:X}),ee=z$1.object({driver:z$1.string().optional(),realm:z$1.string().optional(),client_id:z$1.string().optional(),client_secret:z$1.string().optional(),metadata_url:z$1.string().optional(),scopes:z$1.array(z$1.string()).optional()}),_=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:ee}),N=z$1.discriminatedUnion("kind",[g,f]),ke=z$1.object({name:z$1.string(),kind:z$1.literal("oauth"),params:z$1.union([X.passthrough(),ee.passthrough()])}),Ie=z$1.object({theme:z$1.string().optional(),logo_url:z$1.string().optional(),custom_css:z$1.string().optional()}),De=z$1.object({lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),Le=z$1.object({domains:z$1.record(z$1.string(),De).optional(),path:z$1.string().optional(),lifetime:z$1.number().optional(),insecure:z$1.boolean().optional(),same_site:z$1.string().optional()}),S=z$1.object({name:z$1.string(),ui:Ie.optional(),cookie_config:Le.optional(),identity_stores:z$1.array(z$1.string()).optional(),identity_providers:z$1.array(z$1.string()).optional(),user_transformer_configs:z$1.array(z$1.record(z$1.string(),z$1.unknown())).optional()}),Te=z$1.object({comment:z$1.string().optional(),conditions:z$1.array(z$1.string()).optional(),action:z$1.enum(["allow","deny"]).optional()}),we=z$1.object({token_name:z$1.string().optional(),source:z$1.string().optional()}),Ee=z$1.object({match_type:z$1.string(),uri:z$1.string().optional()}),P=z$1.object({name:z$1.string(),access_list_rules:z$1.array(Te).optional(),crypto_key_configs:z$1.array(we).optional(),bypass_configs:z$1.array(Ee).optional()}),Re=z$1.object({generic:z$1.record(z$1.string(),z$1.unknown()).optional()}),b=z$1.object({authentication_portals:z$1.array(S).optional(),authorization_policies:z$1.array(P).optional(),credentials:Re.optional(),identity_stores:z$1.array(N).optional(),identity_providers:z$1.array(ke).optional()}),ze=z$1.object({driver:z$1.string()}).passthrough(),k=z$1.object({config:b.optional(),secrets_managers:z$1.array(ze).optional()});var H=class e extends Error{constructor(i,o){super(i);this.context=o;this.name="CaddyApiClientError",Object.setPrototypeOf(this,e.prototype);}},I=class e extends H{constructor(i,o){super(i,{errors:o});this.errors=o;this.name="ValidationError",Object.setPrototypeOf(this,e.prototype);}};function n(e,r,i){try{return e.parse(r)}catch(o){if(o instanceof ZodError){let a=i?`${i}: ${te(o)}`:te(o);throw new I(a,o.errors)}throw o}}function te(e){if(e.issues.length===1){let r=e.issues[0];return re(r)}return e.issues.map((r,i)=>`${i+1}. ${re(r)}`).join("; ")}function re(e){return `${e.path.length>0?`${e.path.join(".")}: `:""}${e.message}`}function v(e){let r={name:e.name??"local",kind:"local",params:{realm:e.realm??"local",path:e.path}};return n(g,r,"buildLocalIdentityStore")}function D(e){let r={name:e.name??"ldapdb",kind:"ldap",params:{realm:e.realm??"ldap",servers:e.servers.map(i=>{let o=i.address;return !o.startsWith("ldap://")&&!o.startsWith("ldaps://")&&(o=(i.port===636?"ldaps://":"ldap://")+o),{address:o,...i.port&&{port:i.port}}}),bind_username:e.bindUsername,bind_password:e.bindPassword,search_base_dn:e.searchBaseDn,search_user_filter:(e.searchUserFilter??"(uid={username})").replace(/\{username\}/g,"%s"),groups:e.groups&&e.groups.length>0?e.groups.map(i=>({dn:i.groupDn??e.searchBaseDn,...i.roles&&{roles:i.roles}})):[{dn:e.searchBaseDn,roles:["authp/user"]}]}};return n(f,r,"buildLdapIdentityStore")}function A(e){let r={name:e.name??e.provider,kind:"oauth",params:{driver:e.provider,realm:e.realm??e.provider,client_id:e.clientId,client_secret:e.clientSecret,scopes:e.scopes??["openid","email","profile"],...e.authorizationUrl&&{authorization_url:e.authorizationUrl},...e.tokenUrl&&{token_url:e.tokenUrl}}};return n(C,r,"buildOAuth2Provider")}function p(e){let r=e.metadataUrl;r.endsWith("/.well-known/openid-configuration")||(r=r.replace(/\/$/,"")+"/.well-known/openid-configuration");let i={name:e.name??e.provider,kind:"oauth",params:{driver:"generic",realm:e.realm??e.provider,client_id:e.clientId,client_secret:e.clientSecret,metadata_url:r,scopes:e.scopes??["openid","email","profile"]}};return n(_,i,"buildOidcProvider")}function d(e){let r={name:e.name};if(e.ui&&(r.ui={...e.ui.theme&&{theme:e.ui.theme},...e.ui.logoUrl&&{logo_url:e.ui.logoUrl},...e.ui.customCss&&{custom_css:e.ui.customCss}}),e.cookie){let i={},o;if(e.cookie.lifetime!==void 0)if(typeof e.cookie.lifetime=="number")o=e.cookie.lifetime;else {let a=/^(\d+)(h|m|s)?$/.exec(e.cookie.lifetime);if(a){let B=parseInt(a[1],10),q=a[2]??"s";o=q==="h"?B*3600:q==="m"?B*60:B;}}if(e.cookie.domain){let a={};o!==void 0&&(a.lifetime=o),e.cookie.insecure!==void 0&&(a.insecure=e.cookie.insecure),e.cookie.sameSite&&(a.same_site=e.cookie.sameSite),i.domains={[e.cookie.domain]:a};}else o!==void 0&&(i.lifetime=o),e.cookie.insecure!==void 0&&(i.insecure=e.cookie.insecure),e.cookie.sameSite&&(i.same_site=e.cookie.sameSite);e.cookie.path&&(i.path=e.cookie.path),Object.keys(i).length>0&&(r.cookie_config=i);}return e.identityStores&&(r.identity_stores=e.identityStores),e.identityProviders&&(r.identity_providers=e.identityProviders),e.transformUser&&(r.user_transformer_configs=[e.transformUser]),n(S,r,"buildAuthenticationPortal")}function l(e){let r={name:e.name};return e.accessLists&&e.accessLists.length>0&&(r.access_list_rules=e.accessLists.map(i=>({action:i.action??"allow",conditions:[`match ${i.claim} ${i.values.join(" ")}`]}))),e.cryptoKey&&(r.crypto_key_configs=[{...e.cryptoKey.tokenName&&{token_name:e.cryptoKey.tokenName},...e.cryptoKey.source&&{source:e.cryptoKey.source}}]),e.bypass&&e.bypass.length>0&&(r.bypass_configs=e.bypass.map(i=>({uri:i,match_type:"prefix"}))),n(P,r,"buildAuthorizationPolicy")}function x(e){let r={};return e.portals&&e.portals.length>0&&(r.authentication_portals=e.portals),e.policies&&e.policies.length>0&&(r.authorization_policies=e.policies),e.identityStores&&e.identityStores.length>0&&(r.identity_stores=e.identityStores),e.identityProviders&&e.identityProviders.length>0&&(r.identity_providers=e.identityProviders),n(b,r,"buildSecurityConfig")}function ie(e){let r={config:e.config};return n(k,r,"buildSecurityApp")}function M(e){let r={handler:"authenticator",portal_name:e.portalName,...e.routeMatcher&&{route_matcher:e.routeMatcher}};return n(y,r,"buildAuthenticatorHandler")}function K(e){let r={handler:"authentication",providers:{authorizer:{gatekeeper_name:e.gatekeeperName,...e.routeMatcher&&{route_matcher:e.routeMatcher}}}};return n(h,r,"buildAuthorizationHandler")}function L(e){let r=M({portalName:e.portalName,routeMatcher:"*"});return {"@id":e.routeId??`auth-portal-${e.portalName}`,match:[{host:e.hosts}],handle:[r],terminal:true}}function T(e){let r=e.paths?.join(" ")??"*",i=K({gatekeeperName:e.gatekeeperName,routeMatcher:r}),o={host:e.hosts};return e.paths&&(o.path=e.paths),{"@id":e.routeId??`protected-${e.gatekeeperName}`,match:[o],handle:[i,{handler:"reverse_proxy",upstreams:[{dial:e.dial}]}],terminal:true}}var $e={id:"caddy-sec-local-store",name:"Local Identity Store",description:"File-based user authentication with JSON credentials file",category:"identity-store",variables:[{name:"path",description:"Path to users JSON file",default:"/etc/caddy/users.json"},{name:"realm",description:"Authentication realm name",default:"local"}],build:()=>v({path:"/etc/caddy/users.json",realm:"local"}),snippet:["buildLocalIdentityStore({",' path: "${1:/etc/caddy/users.json}",',' realm: "${2:local}",',"})"]},Be={id:"caddy-sec-ldap-store",name:"LDAP Identity Store",description:"LDAP/Active Directory authentication",category:"identity-store",variables:[{name:"server",description:"LDAP server address",default:"ldap.example.com"},{name:"port",description:"LDAP server port",default:"389"},{name:"bindUsername",description:"Bind username/DN for LDAP queries",default:"cn=admin,dc=example,dc=com"},{name:"bindPassword",description:"Bind password",default:"secret"},{name:"searchBaseDn",description:"Base DN for user searches",default:"ou=users,dc=example,dc=com"}],build:()=>D({servers:[{address:"ldap.example.com",port:389}],bindUsername:"cn=admin,dc=example,dc=com",bindPassword:"secret",searchBaseDn:"ou=users,dc=example,dc=com",searchUserFilter:"(uid={username})"}),snippet:["buildLdapIdentityStore({",' servers: [{ address: "${1:ldap.example.com}", port: ${2:389} }],',' bindUsername: "${3:cn=admin,dc=example,dc=com}",',' bindPassword: "${4:secret}",',' searchBaseDn: "${5:ou=users,dc=example,dc=com}",',' searchUserFilter: "${6:(uid={username})}",',"})"]},Ue={id:"caddy-sec-oauth2-github",name:"GitHub OAuth2 Provider",description:"GitHub OAuth2 authentication for developer tools",category:"identity-provider",variables:[{name:"clientId",description:"GitHub OAuth App client ID",default:"your-client-id"},{name:"clientSecret",description:"GitHub OAuth App client secret",default:"your-client-secret"}],build:()=>A({provider:"github",clientId:"your-client-id",clientSecret:"your-client-secret",scopes:["user:email","read:user"]}),snippet:["buildOAuth2Provider({",' provider: "github",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' scopes: ["user:email", "read:user"],',"})"]},Ne={id:"caddy-sec-oauth2-google",name:"Google OAuth2 Provider",description:"Google OAuth2 authentication",category:"identity-provider",variables:[{name:"clientId",description:"Google OAuth client ID",default:"your-client-id.apps.googleusercontent.com"},{name:"clientSecret",description:"Google OAuth client secret",default:"your-client-secret"}],build:()=>A({provider:"google",clientId:"your-client-id.apps.googleusercontent.com",clientSecret:"your-client-secret",scopes:["openid","email","profile"]}),snippet:["buildOAuth2Provider({",' provider: "google",',' clientId: "${1:your-client-id.apps.googleusercontent.com}",',' clientSecret: "${2:your-client-secret}",',' scopes: ["openid", "email", "profile"],',"})"]},He={id:"caddy-sec-oidc-keycloak",name:"Keycloak OIDC Provider",description:"Keycloak OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Keycloak client ID",default:"my-app"},{name:"clientSecret",description:"Keycloak client secret",default:"your-client-secret"},{name:"metadataUrl",description:"OIDC metadata/discovery URL",default:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}],build:()=>p({provider:"keycloak",clientId:"my-app",clientSecret:"your-client-secret",metadataUrl:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration",scopes:["openid","email","profile"]}),snippet:["buildOidcProvider({",' provider: "keycloak",',' clientId: "${1:my-app}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "${3:https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration}",',' scopes: ["openid", "email", "profile"],',"})"]},Me={id:"caddy-sec-oidc-okta",name:"Okta OIDC Provider",description:"Okta OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Okta client ID",default:"your-client-id"},{name:"clientSecret",description:"Okta client secret",default:"your-client-secret"},{name:"domain",description:"Okta domain",default:"your-domain.okta.com"}],build:()=>p({provider:"okta",clientId:"your-client-id",clientSecret:"your-client-secret",metadataUrl:"https://your-domain.okta.com/.well-known/openid-configuration"}),snippet:["buildOidcProvider({",' provider: "okta",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "https://${3:your-domain.okta.com}/.well-known/openid-configuration",',"})"]},Ke={id:"caddy-sec-oidc-auth0",name:"Auth0 OIDC Provider",description:"Auth0 OpenID Connect authentication",category:"identity-provider",variables:[{name:"clientId",description:"Auth0 client ID",default:"your-client-id"},{name:"clientSecret",description:"Auth0 client secret",default:"your-client-secret"},{name:"domain",description:"Auth0 domain",default:"your-tenant.auth0.com"}],build:()=>p({provider:"auth0",clientId:"your-client-id",clientSecret:"your-client-secret",metadataUrl:"https://your-tenant.auth0.com/.well-known/openid-configuration"}),snippet:["buildOidcProvider({",' provider: "auth0",',' clientId: "${1:your-client-id}",',' clientSecret: "${2:your-client-secret}",',' metadataUrl: "https://${3:your-tenant.auth0.com}/.well-known/openid-configuration",',"})"]},Ge={id:"caddy-sec-portal-basic",name:"Basic Authentication Portal",description:"Simple authentication portal with local identity store",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"identityStore",description:"Identity store name",default:"local"}],build:()=>d({name:"myportal",identityStores:["local"]}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],',"})"]},Ye={id:"caddy-sec-portal-cookie",name:"Portal with Cookie Configuration",description:"Authentication portal with custom cookie settings",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"domain",description:"Cookie domain",default:".example.com"},{name:"lifetime",description:"Session lifetime",default:"24h"}],build:()=>d({name:"myportal",identityStores:["local"],cookie:{domain:".example.com",path:"/",lifetime:"24h"}}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],'," cookie: {",' domain: "${3:.example.com}",',' path: "/",',' lifetime: "${4:24h}",'," },","})"]},We={id:"caddy-sec-portal-sso",name:"Portal with SSO Providers",description:"Authentication portal with OAuth/OIDC single sign-on",category:"portal",variables:[{name:"name",description:"Portal name",default:"myportal"},{name:"providers",description:"Identity providers",default:"keycloak"}],build:()=>d({name:"myportal",identityStores:["local"],identityProviders:["keycloak","google"]}),snippet:["buildAuthenticationPortal({",' name: "${1:myportal}",',' identityStores: ["${2:local}"],',' identityProviders: ["${3:keycloak}", "${4:google}"],',"})"]},Ve={id:"caddy-sec-policy-basic",name:"Basic Authorization Policy",description:"Simple role-based access control policy",category:"policy",variables:[{name:"name",description:"Policy name",default:"mypolicy"},{name:"roles",description:"Allowed roles",default:"user"}],build:()=>l({name:"mypolicy",accessLists:[{claim:"roles",values:["user"]}]}),snippet:["buildAuthorizationPolicy({",' name: "${1:mypolicy}",'," accessLists: [",' { claim: "roles", values: ["${2:user}"] },'," ],","})"]},Fe={id:"caddy-sec-policy-admin",name:"Admin-Only Policy",description:"Policy that restricts access to admin role only",category:"policy",variables:[{name:"name",description:"Policy name",default:"admin-policy"}],build:()=>l({name:"admin-policy",accessLists:[{claim:"roles",values:["admin"]}]}),snippet:["buildAuthorizationPolicy({",' name: "${1:admin-policy}",'," accessLists: [",' { claim: "roles", values: ["admin"], action: "allow" },'," ],","})"]},Ze={id:"caddy-sec-policy-bypass",name:"Policy with Bypass Paths",description:"Policy with public endpoints that skip authentication",category:"policy",variables:[{name:"name",description:"Policy name",default:"api-policy"},{name:"bypass",description:"Paths to bypass",default:"/health,/metrics"}],build:()=>l({name:"api-policy",accessLists:[{claim:"roles",values:["user","admin"]}],bypass:["/health","/metrics","/public/*"]}),snippet:["buildAuthorizationPolicy({",' name: "${1:api-policy}",'," accessLists: [",' { claim: "roles", values: ["user", "admin"] },'," ],",' bypass: ["/health", "/metrics", "${2:/public/*}"],',"})"]},qe={id:"caddy-sec-route-portal",name:"Authentication Portal Route",description:"Route that serves the login portal",category:"route",variables:[{name:"host",description:"Portal hostname",default:"auth.example.com"},{name:"portalName",description:"Portal name",default:"myportal"}],build:()=>L({hosts:["auth.example.com"],portalName:"myportal",routeId:"auth-portal"}),snippet:["buildAuthenticatorRoute({",' hosts: ["${1:auth.example.com}"],',' portalName: "${2:myportal}",',' routeId: "${3:auth-portal}",',"})"]},Je={id:"caddy-sec-route-protected",name:"Protected Route",description:"Route with authentication required",category:"route",variables:[{name:"host",description:"Service hostname",default:"api.example.com"},{name:"path",description:"Protected path",default:"/api/*"},{name:"gatekeeperName",description:"Policy name",default:"mypolicy"},{name:"upstream",description:"Upstream address",default:"localhost:3000"}],build:()=>T({hosts:["api.example.com"],paths:["/api/*"],gatekeeperName:"mypolicy",dial:"localhost:3000",routeId:"protected-api"}),snippet:["buildProtectedRoute({",' hosts: ["${1:api.example.com}"],',' paths: ["${2:/api/*}"],',' gatekeeperName: "${3:mypolicy}",',' dial: "${4:localhost:3000}",',' routeId: "${5:protected-api}",',"})"]},Qe={id:"caddy-sec-full-local",name:"Complete Local Authentication Setup",description:"Full setup with local users, portal, policy, and routes",category:"full-setup",variables:[{name:"usersPath",description:"Path to users file",default:"/etc/caddy/users.json"},{name:"authHost",description:"Auth portal hostname",default:"auth.example.com"},{name:"apiHost",description:"API hostname",default:"api.example.com"}],build:()=>{let e=v({path:"/etc/caddy/users.json"}),r=d({name:"portal",identityStores:["local"],cookie:{domain:".example.com",lifetime:"24h"}}),i=l({name:"policy",accessLists:[{claim:"roles",values:["user","admin"]}],bypass:["/health"]});return x({identityStores:[e],portals:[r],policies:[i]})},snippet:["// Complete local authentication setup","const store = buildLocalIdentityStore({",' path: "${1:/etc/caddy/users.json}",',"});","","const portal = buildAuthenticationPortal({",' name: "${2:portal}",',' identityStores: ["local"],'," cookie: {",' domain: "${3:.example.com}",',' lifetime: "24h",'," },","});","","const policy = buildAuthorizationPolicy({",' name: "${4:policy}",'," accessLists: [",' { claim: "roles", values: ["user", "admin"] },'," ],",' bypass: ["/health"],',"});","","const config = buildSecurityConfig({"," identityStores: [store],"," portals: [portal],"," policies: [policy],","});"]},Xe={id:"caddy-sec-full-oidc",name:"Complete OIDC Authentication Setup",description:"Full setup with Keycloak OIDC, portal, policy, and routes",category:"full-setup",variables:[{name:"clientId",description:"OIDC client ID",default:"my-app"},{name:"clientSecret",description:"OIDC client secret",default:"your-secret"},{name:"metadataUrl",description:"OIDC metadata/discovery URL",default:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}],build:()=>{let e=p({provider:"keycloak",clientId:"my-app",clientSecret:"your-secret",metadataUrl:"https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration"}),r=d({name:"portal",identityProviders:["keycloak"]}),i=l({name:"policy",accessLists:[{claim:"roles",values:["user"]}]});return x({identityProviders:[e],portals:[r],policies:[i]})},snippet:["// Complete OIDC authentication setup","const provider = buildOidcProvider({",' provider: "keycloak",',' clientId: "${1:my-app}",',' clientSecret: "${2:your-secret}",',' metadataUrl: "${3:https://keycloak.example.com/realms/myrealm/.well-known/openid-configuration}",',"});","","const portal = buildAuthenticationPortal({",' name: "${4:portal}",',' identityProviders: ["keycloak"],',"});","","const policy = buildAuthorizationPolicy({",' name: "${5:policy}",'," accessLists: [",' { claim: "roles", values: ["user"] },'," ],","});","","const config = buildSecurityConfig({"," identityProviders: [provider],"," portals: [portal],"," policies: [policy],","});"]},w=[$e,Be,Ue,Ne,He,Me,Ke,Ge,Ye,We,Ve,Fe,Ze,qe,Je,Qe,Xe];function oe(e){return w.filter(r=>r.category===e)}function ne(e){return w.find(r=>r.id===e)}var fe={};J(fe,{CloudflareDnsProviderConfigSchema:()=>z,DigitaloceanDnsProviderConfigSchema:()=>$,GodaddyDnsProviderConfigSchema:()=>j,KNOWN_ACME_DNS_PROVIDERS:()=>ce,PorkbunDnsProviderConfigSchema:()=>R,buildAcmeDnsProviderConfig:()=>ge,buildCloudflareDnsConfig:()=>W,buildDigitaloceanDnsConfig:()=>F,buildGodaddyDnsConfig:()=>Z,buildPorkbunDnsConfig:()=>Y,buildRoute53DnsConfig:()=>V});var ce=["porkbun","cloudflare","route53","digitalocean","godaddy"];z$1.object({apikey:z$1.string(),secretapikey:z$1.string()});var se=z$1.object({api_key:z$1.string().optional(),api_secret_key:z$1.string().optional()});z$1.any();var de=z$1.object({api_token:z$1.string().optional(),zone_token:z$1.string().optional()});var le=z$1.object({api_token:z$1.string().optional()});z$1.object({data:z$1.string(),ttl:z$1.number()});var et=z$1.object({});z$1.object({Record:z$1.any(),ID:z$1.string()});var pe=z$1.object({Client:et,auth_token:z$1.string()});var ue=z$1.object({region:z$1.string().optional(),profile:z$1.string().optional(),access_key_id:z$1.string().optional(),secret_access_key:z$1.string().optional(),session_token:z$1.string().optional(),max_retries:z$1.number().optional(),route53_max_wait:z$1.number().optional(),wait_for_route53_sync:z$1.boolean().optional(),skip_route53_sync_on_delete:z$1.boolean().optional(),hosted_zone_id:z$1.string().optional()});var me=z$1.object({Provider:z$1.any().optional(),debug_logging:z$1.boolean().optional()});var R=se,z=de,j=le,$=pe.omit({Client:true}),ye=ue.extend(me.pick({debug_logging:true}).shape);var tt=Object.freeze({porkbun:"porkbun",cloudflare:"cloudflare",route53:"route53",digitalocean:"digitalocean",godaddy:"godaddy"});function he(e){let r=e.trim().toLowerCase();return tt[r]??r}function Y(){return {providerConfig:n(R,{api_key:"{env.PORKBUN_API_KEY}",api_secret_key:"{env.PORKBUN_API_SECRET_KEY}"},"buildPorkbunDnsConfig"),envVars:["PORKBUN_API_KEY","PORKBUN_API_SECRET_KEY"]}}function W(){return {providerConfig:n(z,{api_token:"{env.CLOUDFLARE_API_TOKEN}"},"buildCloudflareDnsConfig"),envVars:["CLOUDFLARE_API_TOKEN"]}}function V(e){let r=["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_REGION"];return !e||Object.keys(e).length===0?{envVars:r}:{providerConfig:n(ye,e,"buildRoute53DnsConfig"),envVars:r}}function F(){return {providerConfig:n($,{auth_token:"{env.DIGITALOCEAN_API_TOKEN}"},"buildDigitaloceanDnsConfig"),envVars:["DIGITALOCEAN_API_TOKEN"]}}function Z(){return {providerConfig:n(j,{api_token:"{env.GODADDY_API_TOKEN}"},"buildGodaddyDnsConfig"),envVars:["GODADDY_API_TOKEN"]}}function ge(e){switch(he(e)){case "porkbun":return Y();case "cloudflare":return W();case "route53":return V();case "digitalocean":return F();case "godaddy":return Z();default:return {envVars:[]}}}
|
|
2
|
+
export{S as AuthenticationPortalSchema,P as AuthorizationPolicySchema,z as CloudflareDnsProviderConfigSchema,$ as DigitaloceanDnsProviderConfigSchema,j as GodaddyDnsProviderConfigSchema,N as IdentityStoreSchema,ce as KNOWN_ACME_DNS_PROVIDERS,f as LdapIdentityStoreSchema,g as LocalIdentityStoreSchema,C as OAuth2IdentityProviderSchema,_ as OidcIdentityProviderSchema,R as PorkbunDnsProviderConfigSchema,w as SECURITY_TEMPLATES,k as SecurityAppSchema,y as SecurityAuthenticatorHandlerSchema,h as SecurityAuthorizationHandlerSchema,U as SecurityAuthorizerProviderSchema,b as SecurityConfigSchema,Q as SecurityHandlerSchema,ge as buildAcmeDnsProviderConfig,d as buildAuthenticationPortal,M as buildAuthenticatorHandler,L as buildAuthenticatorRoute,K as buildAuthorizationHandler,l as buildAuthorizationPolicy,W as buildCloudflareDnsConfig,F as buildDigitaloceanDnsConfig,Z as buildGodaddyDnsConfig,D as buildLdapIdentityStore,v as buildLocalIdentityStore,A as buildOAuth2Provider,p as buildOidcProvider,Y as buildPorkbunDnsConfig,T as buildProtectedRoute,V as buildRoute53DnsConfig,ie as buildSecurityApp,x as buildSecurityConfig,fe as caddyDns,ae as caddySecurity,ne as getTemplateById,oe as getTemplatesByCategory};
|