dns-worker 1.0.2-3.3

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.
Files changed (103) hide show
  1. package/LICENSE +662 -0
  2. package/README.md +294 -0
  3. package/dist/serverfull.mjs +11777 -0
  4. package/migrations/0000_init.sql +80 -0
  5. package/migrations/0001_move_lists_to_d1.sql +12 -0
  6. package/migrations/0002_activity_tracking.sql +7 -0
  7. package/migrations/0003_fix_profiles_cascade.sql +21 -0
  8. package/migrations/0004_system_settings.sql +12 -0
  9. package/migrations/0005_add_bloom_storage.sql +3 -0
  10. package/migrations/0006_cleanup_profiles_table.sql +18 -0
  11. package/migrations/0007_user_activity_and_totp.sql +37 -0
  12. package/migrations/0008_add_profile_key.sql +8 -0
  13. package/migrations/0009_add_profile_blooms.sql +5 -0
  14. package/migrations/0010_session_device_info.sql +3 -0
  15. package/migrations/0011_session_created_at.sql +2 -0
  16. package/migrations/0012_profile_bloom_chunks.sql +9 -0
  17. package/migrations/0013_add_session_revoked_to_activity_log.sql +29 -0
  18. package/migrations/0014_add_session_geo.sql +3 -0
  19. package/migrations/0015_add_signup_to_activity_log.sql +30 -0
  20. package/migrations/0016_add_session_rotation_counter.sql +2 -0
  21. package/migrations/0017_add_access_points.sql +31 -0
  22. package/migrations/0018_add_list_updated_at.sql +2 -0
  23. package/migrations/0019_add_list_sync_error.sql +2 -0
  24. package/migrations/0020_add_session_last_active.sql +5 -0
  25. package/migrations/0021_add_user_timezone.sql +2 -0
  26. package/migrations/0022_add_user_locale.sql +2 -0
  27. package/migrations/0023_add_user_password_version.sql +2 -0
  28. package/migrations/0024_session_pin_and_pause.sql +37 -0
  29. package/migrations/0025_add_secret_table.sql +10 -0
  30. package/migrations/0026_session_lock_config.sql +2 -0
  31. package/migrations/0027_add_session_id_to_activity_log.sql +2 -0
  32. package/migrations/0028_rename_session_id_to_session_id_hash.sql +2 -0
  33. package/migrations/0029_profile_blooms_staging.sql +12 -0
  34. package/migrations/0030_add_list_blooms.sql +7 -0
  35. package/migrations/0031_list_blooms_chunks.sql +13 -0
  36. package/migrations/0032_profile_blooms_cascade.sql +40 -0
  37. package/migrations/0033_remove_system_secrets.sql +2 -0
  38. package/migrations/0034_remove_list_entries.sql +2 -0
  39. package/migrations/0035_add_envelope_encryption_columns.sql +5 -0
  40. package/migrations/0036_add_cf_proxy_cidrs_setting.sql +7 -0
  41. package/migrations/0037_optimize_logs_composite_indexes.sql +25 -0
  42. package/migrations/0038_optimize_logs_table_and_indexes.sql +49 -0
  43. package/migrations/0039_add_lists_profile_id_index.sql +5 -0
  44. package/migrations/0040_reduce_logs_indexes_write_cost.sql +9 -0
  45. package/migrations/0041_create_log_hourly_rollups.sql +21 -0
  46. package/migrations/0042_add_rule_created_at.sql +3 -0
  47. package/migrations/0043_create_client_hourly_rollups.sql +26 -0
  48. package/migrations/0044_create_destination_hourly_rollups.sql +29 -0
  49. package/migrations/0045_transform_logs_without_rowid.sql +38 -0
  50. package/migrations/0046_add_passkeys.sql +19 -0
  51. package/migrations/0047_add_passkey_actions_to_activity_log.sql +35 -0
  52. package/migrations/0048_add_recovery_key_rotated_to_activity_log.sql +35 -0
  53. package/migrations/0049_optimize_rollups_and_add_domain_rollups.sql +26 -0
  54. package/migrations/0050_add_dest_columns_to_logs.sql +6 -0
  55. package/migrations/0051_add_registration_enabled_setting.sql +2 -0
  56. package/package.json +71 -0
  57. package/static/assets/AccountView-BvRvODjN.js +4 -0
  58. package/static/assets/AnalyticsView-DQ7hDChh.js +2 -0
  59. package/static/assets/AuthView-Bwv6hbdi.js +2 -0
  60. package/static/assets/DestinationMap-BEQNbcb-.js +1 -0
  61. package/static/assets/FilteringView-BWD3e-DS.js +1 -0
  62. package/static/assets/LogsView-kQy7qTGd.js +5 -0
  63. package/static/assets/QRCodeCanvas-X07w5x_G.js +2 -0
  64. package/static/assets/RulesView-3d5hga0L.js +1 -0
  65. package/static/assets/SettingsView-B9D0kPUF.js +1 -0
  66. package/static/assets/SetupView-D7d-Gsdr.js +1 -0
  67. package/static/assets/SwipeableDrawer-B-MfxTWM.js +1 -0
  68. package/static/assets/TrendChart-B20w7SzD.js +53 -0
  69. package/static/assets/allPaths-BEI3QvIM.js +1 -0
  70. package/static/assets/allPathsLoader-DM2JAMeC.js +1 -0
  71. package/static/assets/browser-icErLjuM.js +1 -0
  72. package/static/assets/date-C4b8kvr-.js +1 -0
  73. package/static/assets/de-DE-CXKS_pep.js +10 -0
  74. package/static/assets/es-ES-B2e3ea35.js +10 -0
  75. package/static/assets/formatCountryName-CSBD8pP8.js +1 -0
  76. package/static/assets/fr-FR-1qQHEpoW.js +10 -0
  77. package/static/assets/getFlagEmoji-_Wxhq0lT.js +1 -0
  78. package/static/assets/index-7FKlsF79.js +16 -0
  79. package/static/assets/index-DdQuGqR5.css +2 -0
  80. package/static/assets/ja-JP-CCVeJXwX.js +10 -0
  81. package/static/assets/ko-KR-bQ1okpC2.js +10 -0
  82. package/static/assets/obex_cat_eye_logo-256-CgYNvUIC.webp +0 -0
  83. package/static/assets/paths-CfqdBnl8.js +1 -0
  84. package/static/assets/paths-cc-gUzxh.js +1 -0
  85. package/static/assets/rolldown-runtime-C4Xdq4VV.js +1 -0
  86. package/static/assets/ru-RU-DeRsms_o.js +10 -0
  87. package/static/assets/services-fIMx5oSx.js +1 -0
  88. package/static/assets/splitPathsBySizeLoader-BgBwSA38.js +1 -0
  89. package/static/assets/vendor-i18next-cO7FDf_e.js +1 -0
  90. package/static/assets/vendor-icons-16-BgwRBCeU.js +1 -0
  91. package/static/assets/vendor-icons-20-X5NPN60g.js +1 -0
  92. package/static/assets/vendor-icons-other-Bme3ywH9.js +2 -0
  93. package/static/assets/vendor-react-Kt98jRfM.js +11 -0
  94. package/static/assets/vendor-ui-core-BpucEp_q.js +1 -0
  95. package/static/assets/vendor-utils-CfYGGC23.js +9 -0
  96. package/static/assets/vi-VN-BcXfqmzH.js +10 -0
  97. package/static/assets/zh-CN-D8YK7j27.js +12 -0
  98. package/static/assets/zh-TW-C2_-uaZk.js +12 -0
  99. package/static/favicon.webp +0 -0
  100. package/static/index.html +27 -0
  101. package/static/manifest.webmanifest +1 -0
  102. package/static/registerSW.js +1 -0
  103. package/static/sw.js +1 -0
@@ -0,0 +1,10 @@
1
+ const e={account:`アカウント`,logout:`ログアウト`,selectProfile:`設定を選択`,add:`追加`,newProfileName:`新しい設定名...`,profileNameFormatTip:`設定名のヒント:1〜30文字。既存の設定と重複しないユニークな名前を指定してください`,profileLimitExceeded:`設定数が上限に達しました(最大 {{max}} 個)`,profileNameExists:`この設定名は既に存在します`,profileNameFormatError:`設定名の形式が正しくありません`,create:`作成`,welcome:`ようこそ`,createProfileToStart:`開始するには設定を作成してください。`,loading:`読み込み中...`,errorNetwork:`ネットワークエラー`,confirmDelete:`この設定を削除してもよろしいですか?`,confirmLogout:`ログアウトしてもよろしいですか?`,notFound:`404 - ページが見つかりません`,notFoundDesc:`お探しのページは存在しないか、移動された可能性があります。`,backToHome:`ホームに戻る`,apac:`アジア太平洋`,mainlandChina:`中国本土`,HongKong:`香港`,Singapore:`シンガポール`,Tokyo:`東京`,NorthAmerica:`北米`,nae:`北米東部`,naw:`北米西部`,eu:`ヨーロッパ`,invalidFormat:`無効なファイル形式`,import:`インポート`,importSuccess:`設定のインポートに成功しました`,importError:`設定のインポートに失敗しました。形式を確認し、後でもう一度お試しください`,save:`保存`,saveSuccess:`設定を保存しました`},t={setup:`インストール`,rules:`ルール`,stats:`統計`,logs:`ログ`,filter:`フィルター`,settings:`設定`},n={light:`ライト`,dark:`ダーク`,system:`システムに従う`},r={login:`DNS Worker にログイン`,signup:`アカウント作成して開始`,welcomeBack:`おかえりなさい、認証情報を入力してください`,protectInternet:`インターネットの最初の一歩を保護します`,error:`エラー`,username:`ユーザー名`,usernamePlaceholder:`ユーザー名を入力してください`,password:`パスワード`,passwordPlaceholder:`パスワードを入力してください`,loginBtn:`ログイン`,signupBtn:`新規登録`,totpVerification:`TOTP 認証`,noAccount:`アカウントをお持ちでないですか? 新規登録`,haveAccount:`既にアカウントをお持ちですか? ログインに戻る`,formatTipUsername:`ユーザー名の形式ヒント:5〜32文字のUnixユーザー名形式(英小文字またはアンダースコアで始まり、英小文字、数字、アンダースコア、ハイフンのみ使用可能)`,formatTipPassword:`パスワードの形式ヒント:12〜100文字。`,authFailed:`認証に失敗しました。ユーザー名またはパスワードを確認してください`,networkError:`ネットワークエラーが発生しました。しばらくしてからもう一度お試しください`,turnstileRequired:`画像認証を完了してください`,turnstileError:`認証サービスの読み込みに失敗しました。Site Keyまたはドメイン設定を確認してください`,verifying:`安全性を確認中...`,passwordLeaked:`このパスワードは漏洩している可能性があります。アカウントの安全のため、ランダムなパスワードまたは強力なパスワードを使用してください。`,usernameExists:`このユーザー名は既に登録されています。別のユーザー名をお試しください。`,skip:`スキップ`,showPassword:`パスワードを表示`,hidePassword:`パスワードを非表示`,geolocationRequired:`位置情報の取得に失敗しました。再起動または再入場してください。`,unauthorizedDefault:`セッションの有効期限が切れました。再度ログインしてください。`,unauthorizedGeo:`地理的位置の変更(距離制限超過)が検出されたため、セッションが強制終了されました。`,unauthorizedExpired:`ログイン有効期限が切れました。再度ログインしてください。`,unauthorizedReuse:`セキュリティ警告:重複ログインが検出されたため、セッションを終了しました。`,unauthorizedRevoked:`セッションが取り消されたか削除されました。再度ログインしてください。`,sessionLockTitle:`無操作時のセッションロック`,sessionLockDesc:`アプリケーションがアイドル状態のときにインターフェースを4桁のPINでロックし、不正な物理アクセスからアクティブなセッションを保護します。`,enableSessionLock:`セッションロックを有効にする`,inactivityTimeout:`無操作のタイムアウト`,timeout1m:`1分`,timeout2m:`2分`,timeout5m:`5分`,timeout15m:`15分`,timeout30m:`30分`,timeout60m:`60分`,changePin:`PINの変更`,disablePin:`セッションロックを無効にする`,configurePin:`PINの設定`,newPin:`新しい4桁のPIN`,pinHelper:`数字のみ、例:1234`,confirmPin:`新しいPINの確認`,verifyIdentity:`本人確認`,usePassword:`パスワードを使用`,use2fa:`TOTP コードを使用`,totpCode:`TOTP コード`,currentPassword:`現在のパスワード`,disablePinWarning:`PINを無効にすると、無操作セッションロック機能が完全に無効になります。`,pinFormatTip:`PINは正確に4桁である必要があります`,pinMatchTip:`PINが一致しません`,passwordRequired:`確認にはパスワードが必要です`,sessionLocked:`無操作のためセッションがロックされました`,sessionExpired:`試行回数が多すぎます。セッションが終了しました。`,pinIncorrect:`PINが正しくありません`,attemptsRemaining:`残り試行回数: {{count}}回`,logoutAndReturn:`セッションからログアウト`,lockNow:`今すぐロック`,cfErrorWithDetails:`Cloudflare Edge エラー (エラー {{code}}: {{desc}})。サービスは一時的に利用できません。しばらくしてからもう一度お試しください。{{rayId}}`,cfErrorCodeOnly:`Cloudflare Edge エラー (エラー {{code}})。サービスは一時的に利用できません。{{rayId}}`,cfErrorGeneric:`Cloudflare Edge エラーが発生しました。しばらくしてからもう一度お試しください。{{rayId}}`,htmlErrorGeneric:`サーバーが異常なレスポンスを返しました (HTTP {{status}})。しばらくしてからもう一度お試しください。`,tooManyAttempts:`リクエストまたは試行回数が多すぎます。しばらくしてからもう一度お試しください。`,dbQuotaExceeded:`データベースの1日の読み取りクォータを超過しました。毎日のリセットをお待ちください。`,noUsersRegistered:`アカウントが登録されていません。管理者として登録してください。`,registerAdminTitle:`管理者アカウントの登録`,registerAdminDesc:`システムにアカウントがありません。最初に登録されたユーザーがシステム管理者になります。`,goToRegisterAdmin:`管理者登録`,dbNotInitialized:`データベースが初期化されていないかテーブルが見つかりません。npm run db:migrate:prod を実行してください。`,verifyWithPasskey:`パスキーで検証`,orUseTotp:`または認証アプリのコードを使用`,passwordRequiredFirst:`最初にパスワードを入力してください`,passkeyVerification:`パスキー認証`,passkeyPromptDesc:`登録された生体認証またはセキュリティキーを使用して検証`,forgotPassword:`パスワードをお忘れですか?`,forgotPasswordTitle:`パスワードのリセット`,forgotPasswordDesc:`多要素認証(パスキーまたは認証コード)を使用して安全にアカウントを回復します。`,noMfaContactAdmin:`このアカウントには多要素認証(PasskeyまたはTOTP)が設定されていないため、セルフ回復できません。システム管理者にリセットを依頼してください。`,chooseMfaForReset:`本人確認の方法を選択してください:`,authViaPasskey:`パスキーで認証`,authViaPasskeyDesc:`生体認証またはセキュリティキーを使用したワンクリック認証`,authViaTotp:`認証アプリ (TOTP) で認証`,authViaTotpDesc:`認証アプリに表示される6桁の動的コードを入力`,authViaRecoveryKey:`緊急リカバリーキーを使用`,authViaRecoveryKeyDesc:`10文字の緊急リカバリーキーを入力`,verifyAndProceed:`検証して続行`,setNewPassword:`新しいパスワードを設定`,setNewPasswordDesc:`本人確認が完了しました。アカウントの新しいパスワードを入力してください。`,newPassword:`新しいパスワード`,confirmNewPassword:`新しいパスワードの確認`,passwordMismatch:`パスワードが一致しません`,saveAndReset:`保存してリセット`,resetSuccessTitle:`パスワードのリセットが完了しました`,resetSuccessDesc:`パスワードが更新され、すべての既存セッションが無効化されました。新しいパスワードで再ログインしてください。`,goToLogin:`ログインへ進む`,mfaSetupTitle:`アカウントのセキュリティ強化`,mfaSetupDesc:`多要素認証 (MFA) を設定すると、アカウントの保護、パスワードレスログイン、パスワードのセルフ復旧が有効になります。`,mfaRecommended:`おすすめ`,passkeySignupDesc:`Touch ID、Face ID、セキュリティキーを使用して、手軽かつ最高水準のセキュリティを実現します。`,bindPasskeyNow:`パスキーを登録する`,mfaUniversal:`汎用`,totpSignupDesc:`Google Authenticatorや1Passwordなどの認証アプリを使用して6桁コードを生成します。`,setupTotpBtn:`認証アプリを設定する`,skipMfaSetup:`今はスキップして完了`,backToMfaOptions:`オプションの選択に戻る`,otherOptions:`その他のオプション`,next:`次へ`,mfaVerification:`多要素認証 (MFA)`,totpPrompt:`認証アプリの 6 桁の動的確認コードを入力してください`,recoveryPrompt:`30 桁の緊急リカバリキー(6 桁 × 5 グループ)を入力してください`,recoveryChecksumError:`チェックサムエラー:このグループの 6 桁の数値は 11 で割り切れません`,recoveryChecksumErrorDesc:`第 {{groups}} グループのチェックサムエラーです。確認して再試行してください`,backToPasskey:`パスキー認証に戻る`,recoveryKeyRequired:`緊急リカバリキーを入力してください`,totpFormatError:`有効な 6 桁のコードを入力してください`,registrationDisabledTitle:`登録は停止されています`,registrationDisabledDesc:`現在、新規ユーザーの登録は停止されています。アカウントの取得についてはシステム管理者にお問い合わせください。`,backToLogin:`ログインに戻る`,jwtSecretPreset:`デフォルトの JWT_SECRET が検出されました。デプロイ前に環境変数でプリセットの JWT_SECRET を変更してください。`,jwtSecretMissing:`JWT_SECRET が見つかりません。デプロイ前に環境変数で安全なキーを設定してください。`,jwtSecretInvalid:`JWT_SECRET の形式が無効です。設定を確認してください。`},i={title:`インストールガイド`,subtitle:`デバイスを設定し、DNS Worker でインターネットセキュリティを管理します。`,regionOptimization:`接続地域の最適化 (Windows)`,otherRegion:`その他の地域`,copied:`クリップボードにコピーしました`,verifyConnection:`接続の検証`,verifying:`検証中...`,connected:`接続完了`,notConnected:`未接続`,profileMatch:`この設定でフィルタリングされています。`,profileMismatch:`Obex に接続されていますが、設定IDが一致しません。`,verifyHint:`以下の設定を完了後、ボタンをクリックして接続を検証してください。`,refreshStatus:`ステータスを更新`,egressIp:`送信元 IP アドレス`,currentLocation:`現在地`,edgeServer:`エッジサーバー`,dohUrlTitle:`現在の設定の DoH URL`,accessPointTitle:`アクセス用 DoH URL`,defaultAccessPointName:`デバイス-1`,moreAccessPoints:`アクセスポイントの追加設定 ↗`,accessPointName:`アクセスポイント名`,accessPointToken:`アクセストークン`,addAccessPoint:`アクセスポイントの追加`,renameAccessPoint:`名前変更`,rotateToken:`トークンの更新`,rotateTokenConfirmDesc:`トークンを更新すると、古いトークンを使用しているすべてのデバイスが即座に切断されます。続行してもよろしいですか?`,deleteAccessPoint:`削除`,deleteAccessPointConfirm:`このアクセスポイントを削除してもよろしいですか?`,manageAccessPoints:`アクセスポイントの管理`,searchAccessPoints:`アクセスポイントを検索...`,accessPointNameExists:`アクセスポイント名は既に存在します`,accessPointCreated:`アクセスポイントを作成しました`,accessPointRenamed:`アクセスポイント名を変更しました`,accessPointDeleted:`アクセスポイントを削除しました`,accessPointNameFormatTip:`アクセスポイント名ヒント:1〜30文字。英数字、アンダースコア、ハイフンのみ使用可能`,accessPointLimitExceeded:`アクセスポイント数が上限に達しました(最大 {{max}} 個)`,tokenRotated:`アクセストークンを更新しました`,whatIsDoh:`DoH とは?`,dohDesc:`DNS over HTTPS (DoH) は、暗号化された HTTPS プロトコルを介してDNSクエリを実行する技術です。`,dohBenefit1:`プロバイダー等による通信の改ざんや盗聴を防ぎます`,dohBenefit2:`DNS解決およびインターネットアクセスの安全性を向上させます`,learnMore:`詳細情報`,copyUrl:`URL をコピー`,browsers:`ブラウザ`,browserTitle:`ブラウザ設定 (Chrome/Edge)`,browserSteps:`設定 > プライバシーとセキュリティ > セキュリティ > セキュア DNS を使用する > カスタム > URL を貼り付けます。`,browserTips:`または、以下のアドレスをアドレスバーにコピーしてください:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Apple デバイスは、構成プロファイルを使用して素早く設定できます。`,appleWarning:`「ロックダウンモード」が有効な場合、プロファイルはインストールできません。インストール前にシステム状態を確認してください。`,downloadConfig:`構成プロファイルをダウンロード`,appleInstallHint:`ダウンロード後、「設定」>「ダウンロード済みのプロファイル」からインストールを行ってください`,windows:`MS Windows`,windowsTitle:`Windows 11 設定 [地域: {{region}}]`,windowsStep0:`設定 > ネットワークとインターネット`,windowsStep1:`プロパティ > DNS サーバー割り当て > 編集 > 手動。`,windowsStep2:`以下の DNS IP を選択して入力します:`,windowsStep3:`DoH(テンプレート手動入力)をオンにして、URLを貼り付けます。`,windowsStep4:`「暗号化されていない接続へのフォールバック」をオフにします。`,android:`Android`,androidTitle:`Android 9+`,androidDesc:`システムの標準機能「プライベート DNS (DoT)」またはサードパーティ製アプリによる DoH 設定に対応しています。`,androidDotTitle:`プライベート DNS (DoT - Serverfull モード)`,androidDotDesc:`設定 > ネットワークとインターネット > プライベート DNS > プライベート DNS プロバイダのホスト名:`,androidWarning:`注意:Android 標準の「プライベート DNS」は DoT プロトコルを使用します。Cloudflare Workers にデプロイしている場合は Intra などのアプリで DoH を設定してください。TLS 証明書を設定した Serverfull モードで動作している場合は、上記 DoT ホスト名を直接指定できます。`,dynamicFromDomain:`動的 (以下から取得 "{{domain}}")`,dynamicFromDomainV6:`動的 IPv6 (以下から取得 "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH プロキシ)`,linuxDesc:`ローカルで軽量なDNSプロキシを実行し、DoH 経由でリクエストを暗号化して Obex に転送します。`,linuxStep1:`以下のスクリプトを実行して cloudflared をインストールし、systemd サービスを作成します(127.0.0.1:53 を監視)。`,linuxStep2:`システムの DNS を 127.0.0.1 に変更します。`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`ルーターの DoH サーバーとして設定すると、ネットワーク内のすべてのデバイスでこのリゾルバーを使用できます。`,routerosStep1:`RouterOS のターミナルで実行します(RouterOS 7):`,routerosNote:`ルーター経由のクエリは、個々のデバイスではなくルーターとしてログに記録されます。デバイスごとのログが必要な場合は、各デバイスを直接設定してください。`,routerosDocs:`MikroTik DNS ドキュメント`,accessPointsCardTitle:`アクセスポイント`,currentAccessPoint:`現在のアクセスポイント`,selectAccessPointToConfigure:`設定するアクセスポイントを選択`},a={title:`カスタムルール`,subtitle:`特定のドメインの解決動作(ブロック、許可、またはリダイレクト)を手動で制御します。`,action:`アクション`,typeBlock:`ブロック (BLOCK)`,typeAllow:`許可 (ALLOW)`,typeRedirect:`リダイレクト (REDIRECT)`,pattern:`ドメインパターン (Pattern)`,patternPlaceholder:`example.com 或 *.test.com`,addRule:`ルールを追加`,redirectSettings:`リダイレクトレコード設定`,aRecord:`A レコード (IPv4)`,aaaaRecord:`AAAA レコード (IPv6)`,cnameRecord:`CNAME レコード`,txtRecord:`TXT レコード`,optional:`(任意)`,ipv4Placeholder:`例: 1.2.3.4`,ipv6Placeholder:`例: 2001:db8::1`,cnamePlaceholder:`例: target.com`,txtPlaceholder:`テキスト内容を入力してください...`,saveRedirectRule:`リダイレクトルールを保存して追加`,noRulesTitle:`カスタムルールなし`,noRulesDesc:`追加された手動ルールはありません。`,tableAction:`アクション`,tablePattern:`パターン`,tableDetails:`解決詳細`,tableOps:`操作`,labelBlock:`ブロック`,labelAllow:`許可`,labelRedirect:`リダイレクト`,detailBlock:`解決先:`,detailAllow:`上流サービスへ転送`,patternEmpty:`ドメインパターンを入力してください`,duplicatePattern:`このドメインのルールは既に存在します`,addSuccess:`ルールを追加しました`,addFailed:`ルールの追加に失敗しました`,updateSuccess:`ルールを更新しました`,updateFailed:`ルールの更新に失敗しました`,tableCreatedAt:`追加日時`,clickToSort:`クリックして並べ替え`},o={customRange:`カスタム期間`,startTime:`開始日時`,endTime:`終了日時`,apply:`適用`,custom:`カスタム`,totalQueries:`総クエリ数`,blocked:`ブロック済み`,redirected:`リダイレクト済み`,blockRate:`ブロック率`,activeDevices:`アクティブデバイス`,activeIPs:`アクティブ IP アドレス`,queryTrend:`クエリの推移`,noRecords:`指定された期間の記録はありません`,topAllowed:`よくアクセスされるドメイン (Allowed)`,topBlocked:`ブロック頻度の高いドメイン (Blocked)`,noData:`データなし`,clientActivity:`クライアントアクティビティ`,ipAddress:`IP アドレス`,location:`国/地域`,queries:`クエリ数`,destinationDistribution:`トラフィックの送信先分布`,requests:`リクエスト`,topIsps:`主要プロバイダー`,pressToShowMore:`クリックしてさらに表示`,maximize:`拡大`,minimize:`縮小`},s={title:`クエリログ`,subtitle:`この設定の DNS 解決ログとブロック記録を確認します。`,realtime:`リアルタイム`,allStatus:`すべてのステータス`,onlyPass:`許可済み`,onlyBlock:`ブロック済み`,onlyRedirect:`リダイレクト済み`,searchPlaceholder:`ドメインを検索...`,noResults:`結果が見つかりません`,noRecords:`記録がありません`,noResultsDesc:`"{{query}}" に一致するドメインレコードはありません。`,noRecordsDesc:`選択された期間内に受信した DNS クエリはありません。`,tableTime:`時間`,tableDomain:`ドメイン`,tableAnswer:`解決結果`,tableSource:`送信元`,tableType:`タイプ`,tableStatus:`ステータス`,tableReason:`理由`,loadedAll:`全 {{count}} 件の記録を読み込みました`,realtimeLoadMoreTip:`さらに読み込むには「リアルタイム」モードをオフにしてください`,filterAccessPoint:`アクセスポイント`,allAccessPoint:`すべてのアクセスポイント`,allCountry:`すべての国`,filterCountry:`宛先国`,allIsp:`すべてのプロバイダ`,filterIsp:`プロバイダ`,timeRange:`期間`,clearFilters:`フィルターをクリア`,details:`クエリ詳細`,detailAccessPoint:`アクセスポイント`,basicInfo:`基本情報`,detailDomain:`ドメイン`,detailType:`タイプ`,detailTime:`時間`,detailLatency:`レイテンシ`,detailProfile:`使用された設定`,detailStatus:`ステータス`,detailUpstream:`上流サーバー`,detailReason:`理由`,detailNoReason:`なし (許可済み)`,detailECS:`ECS`,resolutionResult:`解決結果`,noResult:`結果なし`,networkDetails:`ネットワーク詳細`,clientSource:`クライアント (送信元)`,destination:`宛先 (解決アドレス)`,quickActions:`クイック操作`,actionAllow:`許可する`,actionBlock:`ブロックする`,actionRedirect:`リダイレクトする`,statusPass:`許可済み`,statusBlock:`ブロック済み`,statusRedirect:`リダイレクト済み`,export:`ログをエクスポート`,rewritten:`書き換え済み`,logDetails:`ログの詳細`,searchCountry:`国を検索...`,noMatchingCountries:`一致する国が見つかりません`,searchIsp:`プロバイダを検索...`,noMatchingIsps:`一致するプロバイダが見つかりません`,loadingIsps:`プロバイダを読み込み中...`,loggingDisabledTitle:`ログ記録が無効です`,loggingDisabledDesc:`このプロファイルのログ保存期間は「無効」に設定されています。クエリログは記録されません。ログを表示するには、設定でログ保存を有効にしてください。`},c={title:`外部ブロックリスト`,subtitle:`サードパーティが管理するドメインブロックリスト(AdGuardなど)を購読します。`,formatDisclaimer:`本システムは、一部の AdGuard 形式およびプレーンテキストのドメインリストのみ対応しています。基本的なブロックルール(例: ||example.com^)のみサポートされ、「@@」によるホワイトリスト、 「$」による書き換えルール、 「*」によるワイルドカードルールは現在無視されます。サブドメインは自動的にマッチングされます。`,syncAll:`すべてのリストを同期`,urlPlaceholder:`ブロックリストの URL を入力してください...`,addSubscription:`購読を追加`,supportedFormats:`対応リスト形式:`,formatAdGuard:`||domain.com^ などのフィルタリングルールに対応。`,formatHosts:`標準的な hosts ファイルに対応 (例: 0.0.0.0 domain.com)。`,noListsTitle:`リスト未追加`,noListsDesc:`購読している外部ブロックリストはありません。`,tableUrl:`リスト URL`,tableLastSync:`最終同期`,tableStatus:`ステータス`,tableOps:`操作`,neverSynced:`未同期`,enabled:`正常`,disabled:`同期失敗`,statusNormal:`正常`,statusDisabled:`無効`,statusOutdated:`期限切れ`,statusMissing:`未同期`,presetOisdBig:`OISD Big (広告/マルウェア等のブロック)`,presetOisdNsfw:`OISD NSFW (ポルノ/成人向けコンテンツのブロック)`,presetAdGuard:`AdGuard AdServers (広告サーバー)`,presetStevenBlack:`StevenBlack Hosts (総合ブロック)`,syncTaskStarted:`同期タスクを開始しました`,syncCheckComplete:`同期チェックが完了しました`,syncTaskFailed:`同期に失敗しました`,syncing:`同期中...`,syncSuccess:`同期に成功しました`,syncError:`同期に失敗しました`,syncErrorDesc:`ブロックリストのダウンロードまたは解析に失敗しました。リンクが正しいこと、および正常にアクセスできることを確認してください。`,deleteConfirm:`購読を削除してもよろしいですか?`,deleteSuccess:`リストを削除しました`,deleteError:`リストの削除に失敗しました`,addSuccess:`リストを追加しました`,addError:`リストの追加に失敗しました`,listEnabled:`リストを有効化`,listEnabledHint:`無効にすると、このリストを削除せずにフィルタリングだけを停止できます。購読情報と同期履歴は保持されます。`,listEnabledToast:`リストを有効にしました - フィルターを再構築中`,listDisabledToast:`リストを無効にしました - フィルターを再構築中`,checkDomain:`ドメインを確認`,checkDomainHint:`リストはコンパクトなフィルターとして保存されているため、内容を一覧表示することはできません。任意のドメインをこのリストに対して即座にテストできます。`,check:`確認`,checkBlocked:`このリストでブロック済み`,checkNotBlocked:`このリストではブロックされていません`,checkViaParent:`(上位ドメインで一致)`,checkNotSynced:`このリストはまだ同期が完了していないため、確認できるものがありません。`,checkListDisabled:`このリストは現在無効になっているため、現時点では何もフィルタリングしていません。`,checkProbabilisticRate:`フィルターは確率的です: 約{{odds}}件に1件が誤検知です。例外を追加すると、そのすべてのサブドメインもカバーされます。`,checkProbabilistic:`フィルターは確率的であるため、一致の一部は誤検知です。例外を追加すると、そのすべてのサブドメインもカバーされます。`,checkAllowAction:`それでも許可する`,checkAllowed:`例外を追加しました - このドメインは解決されるようになりました`,allowRuleAdded:`{{domain}} の例外を追加しました`},l={title:`動作設定`,subtitle:`DNS 解決ポリシーと高度なオプションを管理します。`,saveChanges:`すべての変更を保存`,saveSuccess:`設定を保存しました`,saveError:`設定の保存に失敗しました。しばらくしてからもう一度お試しください`,upstreamTitle:`上流サーバー`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`従来の DNS`,httpsOnly:`HTTPS のみサポート`,upstreamDesc:`ブロックされなかったすべてのクエリはこのサーバーへ転送されます。DoH (HTTPS)、DoT (tls://)、DNS Stamp (sdns://)、従来の DNS に対応しています。従来の DNS は TCP 経由で転送されます。`,defaultPolicyTitle:`デフォルトの動作`,onNoMatch:`ルールにマッチしない場合`,allowAll:`すべてのクエリを許可`,blockAll:`すべてのクエリをブロック`,logRetentionTitle:`ログ保存期間`,retentionDuration:`保存期间`,retentionDesc:`ログは自動的に削除されます。`,skipLogOnPass:`許可されたクエリを記録しない`,skipLogOnPassDesc:`有効にすると、正常に許可されたクエリは記録されず、ブロック、リダイレクト、または失敗したクエリのみが記録されます。`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`上流サーバーに送信される ECS サブネット`,sendEcs:`ECS を送信する`,customSubnet:`カスタムサブネット`,customIpv4:`カスタム IPv4 サブネット`,customIpv6:`カスタム IPv6 サブネット`,ipv4Hint:`(例: 1.2.3.0/24)`,ipv6Hint:`(例: 2001:db8::/32)`,testToolTitle:`リアルタイム解決テストツール`,testDomain:`テストドメイン`,recordType:`レコードタイプ`,runTest:`テストを実行`,domainPlaceholder:`例: google.com`,hitRule:`ヒットしたルール / 理由`,defaultAllow:`デフォルトの許可ポリシー`,parseLatency:`解決レイテンシ`,sourceIp:`送信元 IP アドレス`,answerSection:`解決結果 (Answer Section)`,noRecordsReturned:`このクエリから返されたレコードはありませんでした。`,diagnostics:`診断情報`,errorDetail:`エラー詳細`,upstreamResponse:`アップストリーム応答内容`,presetCloudflareSecurity:`Cloudflare Security (高速/マルウェア・フィッシング対策)`,presetCloudflareFamilies:`Cloudflare Families (高速/マルウェア・成人向けコンテンツブロック)`,presetQuad9:`Quad9 (マルウェア対策/ログなし/ECS非送信)`,presetQuad9Ecs:`Quad9 ECS (マルウェア対策/ログなし/ECS送信)`,presetControlDFree:`ControlD Free (広告/トラッカー/マルウェア・フィッシング対策)`,presetControlDUncensored:`ControlD Uncensored (検閲回避)`,presetAdGuard:`AdGuard (広告/トラッカーブロック)`,presetAdGuardFamily:`AdGuard Family protection (広告/トラッカー/成人向けコンテンツブロック/セーフサーチ)`,retention10m:`10分`,retention1h:`1時間`,retention24h:`24時間`,retention7d:`7日間`,retention30d:`30日間`,retention90d:`90日(最大)`,blockModeTitle:`ブロック応答モード`,blockModeDesc:`ドメインがブロックされた際に返される応答内容`,default:`デフォルト`,NXDOMAIN:`NXDOMAIN (ドメインが存在しない)`,NODATA:`NODATA (レコードなし)`,customIP:`カスタム IP`,export:`設定をエクスポート`,exportSuccess:`設定をエクスポートしました`,exportError:`設定のエクスポートに失敗しました。しばらくしてからもう一度お試しください`,nameUpdateSuccess:`設定名を更新しました`,saving:`保存中...`,echTitle:`ECH 書き換え`,enableEch:`ECH 書き換えを有効化`,echDesc:`Cloudflare 経由のドメインに対し、HTTPS (Type 65) / SVCB (Type 64) クエリ時に ECH パラメータと表層 SNI を自動注入・書き換えてプライバシーを保護します。`,echFrontingTitle:`外層 SNI (ECH Fronting)`,echFrontingDesc:`TLS ハンドシェイク外層で可視となるカモフラージュドメイン`,echFrontingCustomPlaceholder:`カスタムフロンティングドメインを入力(例: crypto.cloudflare.com)`,echPreferred:`推奨`,whatIsEch:`ECH (Encrypted Client Hello) とは?`,echHelpDesc:`ECH は TLS 1.3 の重要なプライバシー拡張機能であり、実際の接続先ドメイン (Inner SNI) を完全暗号化し、ネットワーク監視者にはダミードメイン (Outer SNI) のみを表示します。`,echHelpBenefit1:`プロバイダや中間者による閲覧先ドメインの盗聴を防止`,echHelpBenefit2:`DoH と連携して平文 SNI の漏洩や検閲を回避`,retentionDisabled:`無効 (プライバシー配慮)`,retentionDisabledDesc:`ログ記録は無効です。システムはDNSクエリログを記録せず、過去のログを即座に消去します。`},u=JSON.parse(`{"title":"アカウント設定","subtitle":"セキュリティ資格情報とシステムユーザーを管理します。","jwtSecretWarningTitle":"セキュリティ警告:JWTシークレットの強度が不足しています","jwtSecretWarningDesc":"現在の JWT_SECRET は32文字未満であり、セキュリティ上の潜在的なリスクがあります。エンベロープ暗号化された既存のTOTPおよびリカバリキーの復号を維持するため、JWT_SECRET をローテーションする前に環境変数 KEK_v1 を設定してください。","roleAdmin":"システム管理者","roleUser":"ユーザー","personalInfo":"個人情報","username":"ユーザー名","userId":"ユーザー ID","changePassword":"パスワード変更","currentPassword":"現在のパスワード","newPassword":"新しいパスワード","updatePassword":"パスワードを更新","userManagement":"ユーザー管理 (管理者限定)","createUser":"ユーザー作成","role":"ロール","createdAt":"作成日時","lastActive":"最終アクティブ時間","lastResolve":"最終解決時間","actions":"操作","dangerZone":"危険ゾーン","clearLogs":"すべてのログを消去","clearLogsDesc":"あなたのアカウントに関連付けられたすべての設定のクエリログを削除します。この操作は元に戻せません。","clearLogsBtn":"今すぐログを消去する","deleteAccount":"アカウントの退会","deleteAccountDesc":"アカウントおよび関連するすべてのデータを永久に削除します。作成したすべてのDNS解決設定にアクセスできなくなります。","deleteAccountBtn":"退会してアカウントを削除","createNewUser":"新規ユーザー作成","initialPassword":"初期パスワード","userRole":"ユーザーロール","cancel":"キャンセル","createNow":"今すぐ作成","formatTipUsername":"ユーザー名の形式ヒント:5〜32文字のUnixユーザー名形式","formatTipPassword":"パスワードの形式ヒント:12〜100文字。","passwordSuccess":"パスワードを更新しました","updateFailed":"更新に失敗しました","confirmDeleteUser":"このユーザーを削除してもよろしいですか?このユーザーが所有するすべての設定も削除されます。","confirmClearLogs":"アカウント内のすべての設定のクエリログを消去してもよろしいですか?この操作は元に戻せません。","clearLogsSuccess":"ログを正常に消去しました","confirmDeleteAccount":"警告:本当にアカウントを削除して退会しますか?\\n\\n作成したすべての DNS 設定、カスタムルール、クエリログが永久に削除されます。この操作は元に戻せません!","inactivityPolicy":"非アクティブポリシー","inactivityDesc":"ユーザーのプライバシー保護とリソース節約のため、30日間解決アクティビティのないアカウントのすべてのクエリログおよびDNS設定は自動的に削除されます。アカウント自体は、90日間のログインがない場合に削除されます。","systemSettings":"システム設定 (管理者限定)","adminOnlyView":"管理者のみ表示可能","featureToggle":"功能开关","enableTurnstileSignup":"新規登録ページで画像認証を有効にする","enableTurnstileLogin":"ログインページで画像認証を有効にする","totp":{"title":"認証アプリ (TOTP)","enabled":"有効","disabled":"無効","setupDesc":"アカウントにセキュリティレイヤーを追加します。Google AuthenticatorやAuthyなどのTOTP対応アプリを使用してください。","setupBtn":"認証アプリ (TOTP) を設定","scanQR":"安全性を確認中...","orEnterManually":"または、手動でキーを入力してください:","enterCode":"確認のため、認証アプリのコードを入力してください:","enterCodeHint":"キーが正しく登録されていることを確認するため、6桁のコードを入力します。","activate":"TOTP を有効化","skipPassword":"パスワードをスキップ — ログイン時にTOTPコードのみ入力(パスワード入力を省略)","disable":"認証アプリ (TOTP) を無効化","disableTitle":"認証アプリ (TOTP) を無効化","disableWarning":"TOTP を無効化すると、パスキーが設定されていない場合、アカウントはパスワードのみで保護されます。","confirmDisable":"TOTP を無効化","recoveryKeysTitle":"リカバリキーを保存してください","recoveryKeysWarning":"リカバリキーを安全な場所(パスワード管理アプリなど)に保存してください。各キーは1回のみ使用可能です。","copyKeys":"すべてのキーをコピー","copied":"コピーしました!","done":"完了(キーを保存しました)","activeDesc":"認証アプリ (TOTP) が有効化され、6桁の確認コードを生成しています。"},"activity":{"title":"アカウントアクティビティ履歴","action":"イベント","time":"時間","ip":"IP アドレス","session":"セッション","empty":"アクティビティ履歴はありません。","loadMore":"さらに読み込む","signup":"アカウント登録","loginSuccess":"ログイン成功","loginFail":"ログイン失敗","logout":"ログアウト","pwChangeSuccess":"パスワード変更成功","pwChangeFail":"パスワード変更失敗","totpVerifySuccess":"TOTP 認証成功","totpVerifyFail":"TOTP 認証失敗","totpSetup":"TOTP 認証アプリを設定","totpRemoved":"TOTP 認証アプリを解除","recoveryKeyUsed":"リカバリキーの使用","sessionRevoked":"セッションの取り消し","reasons":{"user_active":"手動ログアウト","user_revoke":"セッションの取り消し","expired":"セッションの有効期限切れ","geolocation_mismatch":"地理的位置の不一致(異地アクセス制限)","geolocation_missing":"地理的位置情報の不足","token_reuse":"トークンの再利用(セキュリティ警告)"},"passkeyRegistered":"パスキー登録","passkeyDeleted":"パスキー削除","passkeyVerifySuccess":"パスキー認証成功","passkeyVerifyFail":"パスキー認証失敗","recoveryKeyRotated":"復旧キーをローテーションしました"},"sessions":{"title":"アクティブなセッション","session":"セッション","device":"デバイス","ip":"IPアドレス","loginTime":"ログイン時間","expires":"有効期限","action":"操作","current":"現在","revoke":"取り消す","revokeFailed":"セッションの取り消しに失敗しました。","empty":"アクティブなセッションは見つかりませんでした。","unknownDevice":"不明なデバイス","revokeOthers":"他のセッションを取り消す","confirmRevokeOthers":"他のセッションを取り消す","revokeOthersConfirmText":"他のすべてのアクティブなセッションを取り消してもよろしいですか?現在のデバイス以外のログイン中デバイスは即座にログアウトされます。"},"passkey":{"title":"パスキー (Passkey)","addBtn":"パスキーを追加","desc":"生体認証(Touch ID、Face ID、Windows Hello)またはセキュリティキー(YubiKey)を使用して、迅速でフィッシング耐性のある多要素認証を実現します。","empty":"パスキーはまだ追加されていません。","addTitle":"パスキーを追加","nameLabel":"パスキー名","namePlaceholder":"例:my_passkey","promptNotice":"「続行」をクリックすると、ブラウザがプロンプトを表示し、生体認証またはセキュリティキーの登録を案内します。","continue":"続行","renameTitle":"パスキーの名前を変更","deleteTitle":"パスキーを削除","deleteConfirm":"パスキー「{{name}}」を削除してもよろしいですか?削除後は多要素認証に使用できなくなります。","defaultName":"パスキー","notSupported":"お使いのブラウザまたは環境はパスキー(WebAuthn)に対応していません。","regFailed":"パスキーの登録に失敗しました","count":"{{count}} 件設定済み","none":"未設定","created":"追加日時","lastUsed":"最終使用","neverUsed":"未使用","updated":"パスキーを更新しました","registered":"パスキーを登録しました","deleted":"パスキーを削除しました","appNameLabel":"ドメイン","appNameHelper":"パスキーはこのドメインに関連付けられます","formatTip":"パスキー名ヒント:1〜30文字。英数字、アンダースコア、ハイフンのみ使用可能","verifyPrompt":"デバイスの生体認証(Touch ID、Face ID、Windows Hello)またはセキュリティキーで認証してください。","changePwNotice":"送信時にパスキーによる生体認証またはセキュリティキー認証が要求されます。","submitNotice":"送信時にパスキーによる生体認証またはセキュリティキー認証が要求されます。"},"mfaNone":"なし","resetUserPassword":"パスワードをリセット","resetPasswordTitle":"ユーザーパスワードのリセット","resetPasswordWarning":"リセット後、このユーザーの既存のログインセッションはすべて即座に無効化されます。","resetPasswordSuccess":"パスワードが正常にリセットされました。アクティブなセッションは終了しました。","confirmReset":"リセットを確認","mfa":{"title":"多要素認証 (MFA)","enabled":"設定済み","notConfigured":"未設定","desc":"パスキー (Passkey) と認証アプリ (TOTP) の両方がMFA認証方法として利用できます。少なくとも1つを設定することでアカウントを保護し、パスワードレスログインが可能になります。","passwordlessTitle":"パスワードレスログイン","passwordlessDesc":"有効にするとパスワード入力が不要となり、パスキーまたはTOTPで直接本人確認が行われます。","unconfiguredHint":"MFA認証方法がまだ設定されていません。下記よりパスキーまたは認証アプリを設定してください。"},"recoveryKey":{"title":"緊急復旧キー","desc":"緊急復旧キーを使用すると、すべてのパスキーや認証アプリを紛失した場合でも、アカウントに再ログインしたりパスワードをリセットしたりできます。KEKエンベロープ暗号化で保護されています。","configured":"設定済み","notConfigured":"未設定","kekProtected":"KEK暗号化保護","kekTooltip":"KEKをルートとするAES-256-GCMエンベロープ暗号化によって保護されています。","viewBtn":"復旧キーを表示","rotateBtn":"キーをローテーション","yourKey":"30桁の緊急復旧キー","securityTip":"この復旧キーは秘密に保管してください。このキーを知る人物はアカウントにアクセスできます。","rotateConfirm":"復旧キーをローテーションすると、現在のキーは即座に無効になります。続行しますか?","confirmRotateBtn":"ローテーションを実行","viewVerifyTitle":"復旧キーを表示するための本人確認","rotateVerifyTitle":"復旧キーをローテーションするための本人確認","rotateSuccess":"復旧キーが正常にローテーションされました!直ちに安全な場所に保管してください。","legacyNotice":"お使いの復旧キーは従来の不可逆ハッシュ形式で保存されているため復元表示できません。「キーをローテーション」を実行して新形式で再生成してください。"},"verifyIdentity":"セキュリティ本人確認","verifyIdentityDesc":"アカウントの安全のため、この操作を実行する前に本人確認を行ってください。","usePasskeyInstead":"パスキーで認証","changePasswordWithPasskey":"パスキーで認証してパスワードを変更","enableRegistration":"新規ユーザー登録を許可"}`),d={item1Title:`Obex 保護DNS`,item1Desc:`速度とセキュリティを重視した Cloudflare Workers & D1 ベースの DNS リゾルバーです。`,item2Title:`DoH によるプライバシー保護`,item2Desc:`DNS over HTTPS (RFC 8484) による暗号化トンネルで、プロバイダーによる改ざんを防ぎプライバシーを保護します。`,item3Title:`グローバルエッジネットワーク`,item3Desc:`Cloudflare の巨大なエッジネットワークを利用し、超高速な名前解決と極めて低いレイテンシを提供します。`,item4Title:`高度なフィルタリング`,item4Desc:`ホワイトリスト/ブラックリスト、AdGuard ルール、およびカスタムDNSレコードのリダイレクトをフルサポートします。`,item5Title:`リアルタイム統計・分析`,item5Desc:`詳細なクエリログと総合的な統計ダッシュボードで、ネットワークの健全性を視覚化します。`,item6Title:`モダンな UI とダークモード`,item6Desc:`エンジニアや家庭向けにデザインされた、Palantir 社の Blueprint UI ベースの高密度管理パネルです。`,item7Title:`クラウドネイティブインフラ`,item7Desc:`サーバーレスアーキテクチャにより、メンテナンスフリーかつ無限のスケール性を保証します。`,item8Title:`複数設定の管理`,item8Desc:`デバイスやネットワーク環境ごとに、独立したDNS設定プロファイルを複数作成し管理できます。`,item9Title:`複数アクセスポイント管理`,item9Desc:`異なるデバイスに対して専用のDNSアクセスポイントを設定し、ログや統計データの詳細な隔離と分析を実現します。`},f={title:`DNS Worker セットアップ&デプロイガイド`,subtitle:`インスタンスがまだ完全に構成されていません。以下の手順に従って、DNS Worker を有効にして下さい。`,dbStatus:`D1 データベースバインディング (env.DB)`,jwtStatus:`JWT シークレットキー (env.JWT_SECRET)`,configured:`構成済み`,missing:`未構成 / 欠落`,refresh:`更新して再検証`,methodCli:`CLI デプロイ`,methodDash:`Cloudflare ダッシュボードデプロイ`,copy:`コピー`,copied:`コピーしました!`,stepDbTitle:`1. D1 データベースのバインド`,stepDbDesc:`D1 データベースを作成し、Worker にバインドします。ターミナルで以下を実行します:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`出力された D1 データベース情報をコピーし、プロジェクトルートの wrangler.toml 内の [[d1_databases]] に貼り付けます:`,stepDbCommand2:`[[d1_databases]]
2
+ binding = "DB"
3
+ database_name = "dns_worker_db"
4
+ database_id = "<あなたの_D1_DATABASE_ID>"
5
+ migrations_dir = "migrations"`,stepDbDashDesc:`1. Cloudflare ダッシュボード -> Workers & Pages -> D1 -> データベースの作成 -> 名前を 'dns_worker_db' に設定します。
6
+ 2. 該当する Worker -> 設定 -> 変数 -> D1 データベースバインディング -> バインディングの追加 をクリックします。
7
+ 3. バインディング名を 'DB' に設定し、D1 データベースで 'dns_worker_db' を選択して保存します。
8
+ 4. D1 データベース -> コンソール に進み、migrations フォルダ内の SQL マイグレーションスクリプトを貼り付けて実行し、テーブルを構築します。`,stepJwtTitle:`2. JWT シークレットキーの設定`,stepJwtDesc:`DNS Worker はセッショントークンの署名用に JWT シークレットを必要とします。Cloudflare シークレットとして設定します:`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Worker -> 設定 -> 変数 -> 环境変数 -> 変数の追加 をクリックします。
9
+ 2. 変数名を 'JWT_SECRET'、タイプを 'シークレット (Secret)' に設定し、ランダムな安全な文字列を入力します。
10
+ 3. 保存してデプロイします。`,stepJwtDesc2:`Cloudflare ダッシュボード`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. デプロイと移行の適用`,stepDeployDesc:`デプロイコマンドを実行して、フロントエンドのビルド、D1 マイグレーションの自動適用、および Cloudflare へのリリースを行います:`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`ダッシュボード経由ですべての構成を完了した場合は、Worker のデプロイタブに進み、「デプロイ」または「再デプロイ」ボタンをクリックして本番環境に反映させます。`,jwtGeneratorTitle:`安全な JWT_SECRET ジェネレーター`,jwtGeneratorDesc:`この暗号的に安全なキー生成器を使用して、env.JWT_SECRET 用のランダムな 64 文字の英数字シークレットを生成します。`,regenerate:`再生成`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
@@ -0,0 +1,10 @@
1
+ const e={account:`계정`,logout:`로그아웃`,selectProfile:`설정 선택`,add:`추가`,newProfileName:`새 설정 이름...`,profileNameFormatTip:`설정 이름 팁: 1-30자, 기존 설정과 중복되지 않는 이름이어야 합니다`,profileLimitExceeded:`설정 수가 상한에 도달했습니다 (최대 {{max}}개)`,profileNameExists:`해당 설정 이름이 이미 존재합니다`,profileNameFormatError:`설정 이름 형식이 올바르지 않습니다`,create:`생성`,welcome:`환영합니다`,createProfileToStart:`시작하려면 설정을 생성하세요.`,loading:`로드 중...`,errorNetwork:`네트워크 오류`,confirmDelete:`이 설정을 삭제하시겠습니까?`,confirmLogout:`로그아웃하시겠습니까?`,notFound:`404 - 페이지를 찾을 수 없음`,notFoundDesc:`요청하신 페이지가 존재하지 않거나 이동되었습니다.`,backToHome:`홈으로 돌아가기`,apac:`아시아 태평양`,mainlandChina:`중국 본토`,HongKong:`홍콩`,Singapore:`싱가포르`,Tokyo:`도쿄`,NorthAmerica:`북미`,nae:`북미 동부`,naw:`북미 서부`,eu:`유럽`,invalidFormat:`유효하지 않은 파일 형식`,import:`가져오기`,importSuccess:`설정을 성공적으로 가져왔습니다`,importError:`설정 가져오기 실패, 형식을 확인하고 나중에 다시 시도하세요`,save:`저장`,saveSuccess:`설정이 저장되었습니다`},t={setup:`설치`,rules:`규칙`,stats:`통계`,logs:`로그`,filter:`필터링`,settings:`설정`},n={light:`라이트 모드`,dark:`다크 모드`,system:`시스템 설정 적용`},r={login:`DNS Worker 로그인`,signup:`계정을 생성하여 시작하기`,welcomeBack:`다시 오신 것을 환영합니다, 자격 증명을 입력하세요`,protectInternet:`인터넷의 첫 번째 단계를 보호합니다`,error:`오류`,username:`사용자 이름`,usernamePlaceholder:`사용자 이름`,password:`비밀번호`,passwordPlaceholder:`비밀번호`,loginBtn:`로그인`,signupBtn:`회원가입`,totpVerification:`TOTP 인증`,noAccount:`계정이 없으신가요? 회원가입`,haveAccount:`이미 계정이 있으신가요? 로그인으로 돌아가기`,formatTipUsername:`사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식(소문자 또는 언더바로 시작하고 소문자, 숫자, 언더바, 하이픈만 포함)`,formatTipPassword:`비밀번호 형식 팁: 12-100자`,authFailed:`인증 실패, 사용자 이름 또는 비밀번호를 확인하세요`,networkError:`네트워크 오류, 나중에 다시 시도하세요`,turnstileRequired:`보안 문자를 완료하십시오`,turnstileError:`인증 서비스 로드 실패, Site Key 또는 도메인 설정을 확인하세요`,verifying:`보안 확인 중...`,passwordLeaked:`이 비밀번호는 유출되었을 수 있습니다. 계정 보안을 위해 무작위 비밀번호 또는 강력한 비밀번호를 사용하세요.`,usernameExists:`이 사용자 이름은 이미 등록되어 있습니다. 다른 사용자 이름을 시도해 보세요.`,skip:`건너뛰기`,showPassword:`비밀번호 표시`,hidePassword:`비밀번호 숨기기`,geolocationRequired:`지리적 위치 정보를 가져오지 못했습니다. 다시 시도하십시오.`,unauthorizedDefault:`로그인 세션이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedGeo:`지리적 위치 변경(거리 제한 초과)이 감지되어 현재 세션이 강제 종료되었습니다.`,unauthorizedExpired:`로그인 기간이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedReuse:`보안 경고: 중복 로그인이 감지되어 세션이 종료되었습니다.`,unauthorizedRevoked:`세션이 취소되거나 삭제되었습니다. 다시 로그인해 주세요.`,sessionLockTitle:`유휴 세션 잠금`,sessionLockDesc:`애플리케이션이 유휴 상태일 때 4자리 PIN으로 인터페이스를 잠궈 무단 물리적 접근으로부터 활성 세션을 보호합니다.`,enableSessionLock:`세션 잠금 활성화`,inactivityTimeout:`유휴 시간 제한`,timeout1m:`1분`,timeout2m:`2분`,timeout5m:`5분`,timeout15m:`15분`,timeout30m:`30분`,timeout60m:`60분`,changePin:`PIN 변경`,disablePin:`세션 잠금 비활성화`,configurePin:`PIN 설정`,newPin:`새 4자리 PIN`,pinHelper:`숫자만 입력, 예: 1234`,confirmPin:`새 PIN 확인`,verifyIdentity:`본인 인증`,usePassword:`비밀번호 사용`,use2fa:`TOTP 코드 사용`,totpCode:`TOTP 코드`,currentPassword:`현재 비밀번호`,disablePinWarning:`PIN을 비활성화하면 유휴 세션 잠금 기능이 완전히 해제됩니다.`,pinFormatTip:`PIN은 정확히 4자리여야 합니다`,pinMatchTip:`PIN이 일치하지 않습니다`,passwordRequired:`인증을 위해 비밀번호가 필요합니다`,sessionLocked:`유휴 상태로 인해 세션이 잠겼습니다`,sessionExpired:`실패 횟수가 너무 많습니다. 세션이 종료되었습니다.`,pinIncorrect:`올바르지 않은 PIN`,attemptsRemaining:`남은 시도 횟수: {{count}}회`,logoutAndReturn:`세션 로그아웃`,lockNow:`지금 잠금`,cfErrorWithDetails:`Cloudflare Edge 오류 (오류 {{code}}: {{desc}}). 서비스를 일시적으로 사용할 수 없습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,cfErrorCodeOnly:`Cloudflare Edge 오류 (오류 {{code}}). 서비스를 일시적으로 사용할 수 없습니다. {{rayId}}`,cfErrorGeneric:`Cloudflare Edge 오류가 발생했습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,htmlErrorGeneric:`서버에서 비정상적인 응답을 반환했습니다 (HTTP {{status}}). 잠시 후 다시 시도해 주세요.`,tooManyAttempts:`요청 또는 시도 횟수가 너무 많습니다. 잠시 후 다시 시도해 주세요.`,dbQuotaExceeded:`데이터베이스 일일 읽기 할당량이 초과되었습니다. 일일 재설정을 기다려 주세요.`,noUsersRegistered:`등록된 계정이 없습니다. 관리자로 가입해 주세요.`,registerAdminTitle:`관리자 계정 등록`,registerAdminDesc:`시스템에 계정이 없습니다. 첫 번째 가입자가 시스템 관리자가 됩니다.`,goToRegisterAdmin:`관리자 등록`,dbNotInitialized:`데이터베이스가 초기화되지 않았거나 테이블이 없습니다. npm run db:migrate:prod 를 실행하세요.`,verifyWithPasskey:`패스키로 인증`,orUseTotp:`또는 인증 앱 코드 사용`,passwordRequiredFirst:`먼저 비밀번호를 입력해 주세요`,passkeyVerification:`패스키 인증`,passkeyPromptDesc:`등록된 생체 인식 또는 보안 키를 사용하여 인증`,forgotPassword:`비밀번호를 잊으셨나요?`,forgotPasswordTitle:`비밀번호 재설정`,forgotPasswordDesc:`다중 요소 인증(패스키 또는 인증 앱)을 사용하여 계정을 안전하게 복구합니다.`,noMfaContactAdmin:`이 계정에는 다중 요소 인증(Passkey 또는 TOTP)이 설정되어 있지 않아 직접 복구할 수 없습니다. 시스템 관리자에게 문의하세요.`,chooseMfaForReset:`본인 인증 방법을 선택하세요:`,authViaPasskey:`패스키로 인증`,authViaPasskeyDesc:`생체 인식 또는 보안 키를 사용한 원클릭 인증`,authViaTotp:`인증 앱 (TOTP)으로 인증`,authViaTotpDesc:`인증 앱에 표시된 6자리 동적 코드를 입력하세요`,authViaRecoveryKey:`비상 복구 키 사용`,authViaRecoveryKeyDesc:`10자리 비상 복구 키 입력`,verifyAndProceed:`인증 및 계속`,setNewPassword:`새 비밀번호 설정`,setNewPasswordDesc:`인증되었습니다. 계정에 사용할 새 비밀번호를 입력하세요.`,newPassword:`새 비밀번호`,confirmNewPassword:`새 비밀번호 확인`,passwordMismatch:`입력한 비밀번호가 일치하지 않습니다`,saveAndReset:`저장 및 재설정`,resetSuccessTitle:`비밀번호 재설정 완료`,resetSuccessDesc:`비밀번호가 업데이트되었으며 모든 기존 세션이 로그아웃되었습니다. 새 비밀번호로 다시 로그인하세요.`,goToLogin:`로그인으로 이동`,mfaSetupTitle:`계정 보안 강화`,mfaSetupDesc:`다중 요소 인증(MFA)을 구성하면 계정을 안전하게 보호하고 비밀번호 없는 로그인 및 비밀번호 복구가 가능해집니다.`,mfaRecommended:`추천`,passkeySignupDesc:`지문, 얼굴 인식 또는 보안 키를 사용하여 빠르고 안전하게 인증하세요.`,bindPasskeyNow:`지금 패스키 등록`,mfaUniversal:`범용`,totpSignupDesc:`Google Authenticator, 1Password 등의 앱을 사용하여 6자리 인증 코드를 생성합니다.`,setupTotpBtn:`인증 앱 설정`,skipMfaSetup:`지금은 건너뛰기`,backToMfaOptions:`옵션 선택으로 돌아가기`,otherOptions:`기타 옵션`,next:`다음`,mfaVerification:`다단계 인증 (MFA)`,totpPrompt:`인증 앱의 6자리 동적 코드를 입력하세요`,recoveryPrompt:`30자리 비상 복구 키(6자리 5개 그룹)를 입력하세요`,recoveryChecksumError:`체크섬 오류: 이 그룹의 6자리 숫자는 11로 나누어떨어지지 않습니다`,recoveryChecksumErrorDesc:`{{groups}}번째 그룹의 체크섬 오류입니다. 확인 후 다시 시도하세요`,backToPasskey:`Passkey 인증으로 돌아가기`,recoveryKeyRequired:`비상 복구 키를 입력하세요`,totpFormatError:`유효한 6자리 코드를 입력하세요`,registrationDisabledTitle:`회원가입 비활성화됨`,registrationDisabledDesc:`현재 신규 사용자 등록이 일시 중지되었습니다. 계정 발급은 시스템 관리자에게 문의하세요.`,backToLogin:`로그인으로 돌아가기`,jwtSecretPreset:`기본 JWT_SECRET이 감지되었습니다. 배포하기 전에 환경 변수에서 기본 JWT_SECRET을 수정한 후 다시 배포해 주세요.`,jwtSecretMissing:`JWT_SECRET이 누락되었습니다. 배포하기 전에 환경 변수에서 안전한 키를 설정해 주세요.`,jwtSecretInvalid:`JWT_SECRET 형식이 잘못되었습니다. 구성을 확인해 주세요.`},i={title:`설치 가이드`,subtitle:`장치를 설정하여 Obex DNS로 인터넷 보안을 관리하세요.`,regionOptimization:`접속 지역 최적화 (Windows)`,otherRegion:`기타 지역`,copied:`클립보드에 복사됨`,verifyConnection:`연결 확인`,verifying:`확인 중...`,connected:`연결됨`,notConnected:`미연결`,profileMatch:`이 설정으로 필터링되고 있습니다.`,profileMismatch:`Obex를 사용 중이지만 설정 ID가 일치하지 않습니다.`,verifyHint:`아래 설정을 완료한 후 버튼을 클릭하여 확인하세요.`,refreshStatus:`상태 새로고침`,egressIp:`송신 IP 주소`,currentLocation:`현재 위치`,edgeServer:`엣지 서버`,dohUrlTitle:`현재 설정의 DoH URL`,accessPointTitle:`접속용 DoH URL`,defaultAccessPointName:`장치-1`,moreAccessPoints:`액세스 포인트 추가 설정 ↗`,accessPointName:`액세스 포인트 이름`,accessPointToken:`액세스 토큰`,addAccessPoint:`새 액세스 포인트 추가`,renameAccessPoint:`이름 변경`,rotateToken:`토큰 재발급`,rotateTokenConfirmDesc:`토큰을 재발급하면 기존 토큰을 사용하는 모든 장치의 연결이 즉시 끊어집니다. 계속하시겠습니까?`,deleteAccessPoint:`삭제`,deleteAccessPointConfirm:`이 액세스 포인트를 삭제하시겠습니까?`,manageAccessPoints:`액세스 포인트 관리`,searchAccessPoints:`액세스 포인트 검색...`,accessPointNameExists:`액세스 포인트 이름이 이미 존재합니다`,accessPointCreated:`액세스 포인트가 성공적으로 생성되었습니다`,accessPointRenamed:`액세스 포인트 이름이 성공적으로 변경되었습니다`,accessPointDeleted:`액세스 포인트가 성공적으로 삭제되었습니다`,accessPointNameFormatTip:`액세스 포인트 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용`,accessPointLimitExceeded:`액세스 포인트 수가 상한에 도달했습니다 (최대 {{max}}개)`,tokenRotated:`액세스 토큰이 성공적으로 재발급되었습니다`,whatIsDoh:`DoH란 무엇인가요?`,dohDesc:`DNS over HTTPS(DoH)는 암호화된 HTTPS 프로토콜을 통해 도메인 이름을 해석하는 기술입니다.`,dohBenefit1:`통신 사업자 등 중간자에 의한 변조 및 도청을 방지합니다`,dohBenefit2:`도메인 이름 해석 및 인터넷 접속 보안을 향상시킵니다`,learnMore:`더 알아보기`,copyUrl:`URL 복사`,browsers:`브라우저`,browserTitle:`브라우저 설정 (Chrome/Edge)`,browserSteps:`설정 > 개인정보 보호 및 보안 > 보안 > 보안 DNS 사용 > 사용자 지정 > URL 붙여넣기.`,browserTips:`또는 이 주소를 주소창에 복사하십시오:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Apple 장치는 구성 프로파일을 사용하여 빠르게 설정할 수 있습니다.`,appleWarning:`「봉쇄 모드 (Lockdown Mode)」가 활성화된 경우 프로파일을 설치할 수 없습니다. 설치 전에 확인해 주십시오.`,downloadConfig:`구성 프로파일 다운로드`,appleInstallHint:`다운로드 후 「설정」>「다운로드된 프로파일」에서 설치를 완료하세요`,windows:`MS Windows`,windowsTitle:`Windows 11 설정 [지역: {{region}}]`,windowsStep0:`설정 > 네트워크 및 인터넷`,windowsStep1:`속성 > DNS 서버 할당 > 편집 > 수동.`,windowsStep2:`다음 DNS IP를 선택하고 입력합니다:`,windowsStep3:`DoH(수동 템플릿)를 켜고 URL을 붙여넣습니다.`,windowsStep4:`「암호화되지 않은 연결로의 대체」를 끕니다.`,android:`Android`,androidTitle:`Android 9+`,androidDesc:`시스템 기본 '프라이빗 DNS (DoT)' 또는 서드파티 앱을 통한 DoH 구성을 지원합니다.`,androidDotTitle:`프라이빗 DNS (DoT - Serverfull 모드)`,androidDotDesc:`설정 > 네트워크 및 인터넷 > 프라이빗 DNS > 프라이빗 DNS 공급자 호스트 이름:`,androidWarning:`참고: Android의 기본 '프라이빗 DNS'는 DoT 프로토콜을 사용합니다. Cloudflare Workers에 배포된 경우 Intra 등의 앱을 사용하여 DoH를 구성하세요. TLS 인증서가 구성된 Serverfull 모드에서 실행 중인 경우 위의 DoT 호스트 이름을 직접 사용할 수 있습니다.`,dynamicFromDomain:`동적 (다음에서 가져옴 "{{domain}}")`,dynamicFromDomainV6:`동적 IPv6 (다음에서 가져옴 "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH 프록시)`,linuxDesc:`로컬에서 가벼운 DNS 프록시를 실행하여 DoH를 통해 요청을 암호화하고 Obex로 전달합니다.`,linuxStep1:`다음 스크립트를 실행하여 cloudflared를 설치하고 systemd 서비스를 생성합니다 (127.0.0.1:53 감시).`,linuxStep2:`시스템 DNS를 127.0.0.1로 변경합니다.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`라우터의 DoH 서버로 설정하면 네트워크의 모든 기기에서 이 리졸버를 사용할 수 있습니다.`,routerosStep1:`RouterOS 터미널에서 실행하세요 (RouterOS 7):`,routerosNote:`라우터가 전달한 쿼리는 개별 기기가 아닌 라우터로 로그에 표시됩니다. 기기별 로그가 필요하면 각 기기를 직접 설정하세요.`,routerosDocs:`MikroTik DNS 문서`,accessPointsCardTitle:`액세스 포인트`,currentAccessPoint:`현재 액세스 포인트`,selectAccessPointToConfigure:`구성할 액세스 포인트 선택`},a={title:`사용자 지정 규칙`,subtitle:`특정 도메인의 해석 동작(차단, 허용 또는 리다이렉트)을 수동으로 제어합니다.`,action:`작업`,typeBlock:`차단 (BLOCK)`,typeAllow:`허용 (ALLOW)`,typeRedirect:`리다이렉트 (REDIRECT)`,pattern:`도메인 패턴 (Pattern)`,patternPlaceholder:`example.com 또는 *.test.com`,addRule:`규칙 추가`,redirectSettings:`리다이렉트 레코드 설정`,aRecord:`A 레코드 (IPv4)`,aaaaRecord:`AAAA 레코드 (IPv6)`,cnameRecord:`CNAME 레코드`,txtRecord:`TXT 레코드`,optional:`(선택 사항)`,ipv4Placeholder:`예: 1.2.3.4`,ipv6Placeholder:`예: 2001:db8::1`,cnamePlaceholder:`예: target.com`,txtPlaceholder:`텍스트 내용을 입력하세요...`,saveRedirectRule:`리다이렉트 규칙 저장 및 추가`,noRulesTitle:`사용자 지정 규칙 없음`,noRulesDesc:`추가된 수동 규칙이 없습니다.`,tableAction:`작업`,tablePattern:`패턴`,tableDetails:`해석 상세`,tableOps:`작업`,labelBlock:`차단`,labelAllow:`허용`,labelRedirect:`리다이렉트`,detailBlock:`다음으로 해석: `,detailAllow:`상류 서비스로 전달`,patternEmpty:`도메인 패턴은 비워 둘 수 없습니다`,duplicatePattern:`이 도메인의 규칙이 이미 존재합니다`,addSuccess:`규칙이 성공적으로 추가되었습니다`,addFailed:`규칙 추가 실패`,updateSuccess:`규칙이 성공적으로 업데이트되었습니다`,updateFailed:`규칙 업데이트 실패`,tableCreatedAt:`추가 시간`,clickToSort:`정렬하려면 클릭`},o={customRange:`사용자 지정 범위`,startTime:`시작 시간`,endTime:`종료 시간`,apply:`적용`,custom:`사용자 지정`,totalQueries:`총 쿼리 수`,blocked:`차단됨`,redirected:`리다이렉트됨`,blockRate:`차단율`,activeDevices:`활성 장치`,activeIPs:`활성 IP 주소`,queryTrend:`쿼리 트렌드`,noRecords:`이 기간 동안의 기록이 없습니다`,topAllowed:`자주 허용되는 도메인 (Allowed)`,topBlocked:`가장 많이 차단된 도메인 (Blocked)`,noData:`데이터 없음`,clientActivity:`클라이언트 활성도`,ipAddress:`IP 주소`,location:`위치`,queries:`쿼리 수`,destinationDistribution:`트래픽 목적지 분포`,requests:`요청`,topIsps:`주요 통신사`,pressToShowMore:`클릭하여 더 보기`,maximize:`최대화`,minimize:`최소화`},s={title:`쿼리 로그`,subtitle:`이 설정의 DNS 해석 로그와 차단 기록을 확인합니다.`,realtime:`실시간`,allStatus:`모든 상태`,onlyPass:`허용됨`,onlyBlock:`차단됨`,onlyRedirect:`리다이렉트됨`,searchPlaceholder:`도메인 검색...`,noResults:`결과를 찾을 수 없음`,noRecords:`기록 없음`,noResultsDesc:`"{{query}}"에 일치하는 도메인 기록이 없습니다.`,noRecordsDesc:`선택한 기간 동안 수신된 DNS 쿼리가 없습니다.`,tableTime:`시간`,tableDomain:`도메인`,tableAnswer:`해석 결과`,tableSource:`출처`,tableType:`유형`,tableStatus:`상태`,tableReason:`이유`,loadedAll:`총 {{count}}개의 기록을 로드했습니다`,realtimeLoadMoreTip:`더 많이 로드하려면 「실시간」 모드를 끄십시오`,filterAccessPoint:`액세스 포인트`,allAccessPoint:`모든 액세스 포인트`,allCountry:`모든 국가`,filterCountry:`목적지 국가`,allIsp:`모든 ISP`,filterIsp:`ISP`,timeRange:`시간 범위`,clearFilters:`필터 초기화`,details:`쿼리 상세`,detailAccessPoint:`액세스 포인트`,basicInfo:`기본 정보`,detailDomain:`도메인`,detailType:`유형`,detailTime:`시간`,detailLatency:`소요 시간`,detailProfile:`사용된 설정`,detailStatus:`상태`,detailUpstream:`상류 서버`,detailReason:`이유`,detailNoReason:`없음 (허용됨)`,detailECS:`ECS`,resolutionResult:`해석 결과`,noResult:`결과 없음`,networkDetails:`네트워크 상세`,clientSource:`클라이언트 (소스)`,destination:`목적지 (해석 주소)`,quickActions:`빠른 작업`,actionAllow:`허용`,actionBlock:`차단`,actionRedirect:`리다이렉트`,statusPass:`허용됨`,statusBlock:`차단됨`,statusRedirect:`리다이렉트됨`,export:`로그 내보내기`,rewritten:`재작성됨`,logDetails:`로그 상세 정보`,searchCountry:`국가 검색...`,noMatchingCountries:`일치하는 국가를 찾을 수 없습니다`,searchIsp:`통신사/ISP 검색...`,noMatchingIsps:`일치하는 통신사를 찾을 수 없습니다`,loadingIsps:`통신사 목록 불러오는 중...`,loggingDisabledTitle:`로그 기록이 비활성화되었습니다`,loggingDisabledDesc:`이 프로필의 로그 보존이 '비활성화'로 설정되었습니다. 쿼리 로그가 기록되지 않습니다. 로그를 보려면 설정에서 로그 보존을 활성화하세요.`},c={title:`외부 차단 리스트`,subtitle:`타사에서 유지 관리하는 도메인 차단 목록(예: AdGuard 등)을 구독합니다.`,formatDisclaimer:`본 시스템은 일부 AdGuard 형식 목록 및 순수 도메인 목록만 지원합니다. 기본적인 차단 규칙(예: ||example.com^)만 지원되며, "@@" 백리스트, "$" 재작성 규칙 및 "*" 와일드카드 규칙은 현재 무시됩니다. 하위 도메인은 자동으로 일치합니다.`,syncAll:`모든 목록 동기화`,urlPlaceholder:`차단 리스트 URL 입력...`,addSubscription:`구독 추가`,supportedFormats:`지원되는 목록 형식:`,formatAdGuard:`||domain.com^ 등의 필터링 규칙과 호환됩니다.`,formatHosts:`표준 hosts 파일과 호환됩니다 (예: 0.0.0.0 domain.com).`,noListsTitle:`목록 추가되지 않음`,noListsDesc:`구독 중인 외부 차단 목록이 없습니다.`,tableUrl:`목록 URL`,tableLastSync:`최근 동기화`,tableStatus:`상태`,tableOps:`작업`,neverSynced:`동기화된 적 없음`,enabled:`정상`,disabled:`동기화 실패`,statusNormal:`정상`,statusDisabled:`비활성화됨`,statusOutdated:`만료됨`,statusMissing:`누락됨`,presetOisdBig:`OISD Big (광고/악성코드 등 차단)`,presetOisdNsfw:`OISD NSFW (음란물/유해/성인 콘텐츠 차단)`,presetAdGuard:`AdGuard AdServers (광고 서버)`,presetStevenBlack:`StevenBlack Hosts (종합 차단)`,syncTaskStarted:`동기화 작업 시작`,syncCheckComplete:`동기화 확인 완료`,syncTaskFailed:`동기화 실패`,syncing:`동기화 중...`,syncSuccess:`동기화 성공`,syncError:`동기화 실패`,syncErrorDesc:`차단 목록을 다운로드하거나 해석할 수 없습니다. 링크가 올바른지, 정상적으로 접속 가능한지 확인해 주십시오.`,deleteConfirm:`구독을 삭제하시겠습니까?`,deleteSuccess:`목록이 성공적으로 삭제되었습니다`,deleteError:`목록 삭제 실패`,addSuccess:`목록이 성공적으로 추가되었습니다`,addError:`목록 추가 실패`,listEnabled:`목록 활성`,listEnabledHint:`삭제하지 않고 이 목록으로 필터링만 중단하려면 비활성화하세요. 구독 및 동기화 기록은 유지됩니다.`,listEnabledToast:`목록이 활성화되었습니다 - 필터 재구성 중`,listDisabledToast:`목록이 비활성화되었습니다 - 필터 재구성 중`,checkDomain:`도메인 확인`,checkDomainHint:`목록은 압축된 필터 형태로 저장되므로 항목을 열람할 수 없습니다. 원하는 도메인을 이 목록에 즉시 테스트할 수 있습니다.`,check:`확인`,checkBlocked:`이 목록에서 차단됨`,checkNotBlocked:`이 목록에서 차단되지 않음`,checkViaParent:`(상위 도메인에서 일치)`,checkNotSynced:`이 목록은 아직 동기화가 끝나지 않아 확인할 것이 없습니다.`,checkListDisabled:`이 목록은 현재 비활성화되어 있어 지금은 아무것도 필터링하지 않습니다.`,checkProbabilisticRate:`필터는 확률적입니다: 약 {{odds}}건 중 1건이 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkProbabilistic:`필터는 확률적이므로 일부 일치는 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkAllowAction:`그래도 허용`,checkAllowed:`예외가 추가되었습니다 - 이제 이 도메인이 확인됩니다`,allowRuleAdded:`{{domain}}에 대한 예외가 추가되었습니다`},l={title:`구성 설정`,subtitle:`DNS 해석 정책 및 고급 옵션을 관리합니다.`,saveChanges:`모든 변경 사항 저장`,saveSuccess:`설정이 성공적으로 저장되었습니다`,saveError:`설정 저장 실패, 나중에 다시 시도하세요`,upstreamTitle:`상류 서비스`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`기존 DNS`,httpsOnly:`HTTPS만 지원`,upstreamDesc:`차단되지 않은 모든 쿼리는 이 서버로 전달됩니다. DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) 또는 기존 DNS를 지원합니다. 기존 DNS는 TCP를 통해 전달됩니다.`,defaultPolicyTitle:`기본 필터링 동작`,onNoMatch:`일치하는 규칙이 없을 때`,allowAll:`모든 쿼리 허용`,blockAll:`모든 쿼리 차단`,logRetentionTitle:`로그 보존`,retentionDuration:`보존 기간`,retentionDesc:`로그는 자동으로 삭제됩니다. `,skipLogOnPass:`허용된 쿼리 기록하지 않기`,skipLogOnPassDesc:`활성화하면 정상적으로 허용된 쿼리는 기록되지 않으며, 차단, 리다이렉트 또는 실패한 쿼리만 저장됩니다.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`상류 서버로 전송되는 ECS 서브넷`,sendEcs:`ECS 제공`,customSubnet:`사용자 지정 서브넷`,customIpv4:`사용자 지정 IPv4 서브넷`,customIpv6:`사용자 지정 IPv6 서브넷`,ipv4Hint:`(예: 1.2.3.0/24)`,ipv6Hint:`(예: 2001:db8::/32)`,testToolTitle:`실시간 해석 테스트 도구`,testDomain:`테스트 도메인`,recordType:`레코드 유형`,runTest:`테스트 실행`,domainPlaceholder:`예: google.com`,hitRule:`일치 규칙 / 이유`,defaultAllow:`기본 허용 정책`,parseLatency:`해석 소요 시간`,sourceIp:`소스 IP 주소`,answerSection:`해석 결과 회신 (Answer Section)`,noRecordsReturned:`이 쿼리는 반환된 레코드가 없습니다.`,diagnostics:`진단 정보`,errorDetail:`오류 세부 정보`,upstreamResponse:`업스트림 응답 내용`,presetCloudflareSecurity:`Cloudflare Security (빠름/악성 및 피싱 도메인 제거)`,presetCloudflareFamilies:`Cloudflare Families (빠름/악성 및 성인 콘텐츠 제거)`,presetQuad9:`Quad9 (악성 도메인 제거/로그 없음/ECS 미제공)`,presetQuad9Ecs:`Quad9 ECS (악성 도메인 제거/로그 없음/ECS 제공)`,presetControlDFree:`ControlD Free (광고/추적/악성 및 피싱 도메인 제거)`,presetControlDUncensored:`ControlD Uncensored (검閲 우회)`,presetAdGuard:`AdGuard (광고/추적 제거)`,presetAdGuardFamily:`AdGuard Family protection (광고/추적/성인 콘텐츠 제거/안전 검색)`,retention10m:`10분`,retention1h:`1시간`,retention24h:`24시간`,retention7d:`7일`,retention30d:`30일`,retention90d:`90일(최대)`,blockModeTitle:`차단 응답 모드`,blockModeDesc:`도메인이 차단되었을 때 반환되는 내용`,default:`기본값`,NXDOMAIN:`NXDOMAIN (존재하지 않는 도메인)`,NODATA:`NODATA (레코드 없음)`,customIP:`사용자 지정 IP`,export:`설정 내보내기`,exportSuccess:`설정을 성공적으로 내보냈습니다`,exportError:`설정 내보내기 실패, 나중에 다시 시도하세요`,nameUpdateSuccess:`설정 이름이 업데이트되었습니다`,saving:`저장 중...`,echTitle:`ECH 재작성`,enableEch:`ECH 재작성 활성화`,echDesc:`Cloudflare 프록시 도메인에 대해 HTTPS(Type 65) / SVCB(Type 64) 쿼리 시 ECH 매개변수와 외부 SNI를 자동으로 재작성하여 프라이버시를 보호합니다.`,echFrontingTitle:`외부 SNI (ECH Fronting)`,echFrontingDesc:`TLS 핸드셰이크 외부에 표시되는 위장 도메인`,echFrontingCustomPlaceholder:`사용자 지정 프론팅 도메인 입력 (예: crypto.cloudflare.com)`,echPreferred:`권장`,whatIsEch:`ECH (Encrypted Client Hello)란 무엇인가요?`,echHelpDesc:`ECH는 실제 목적지 도메인(Inner SNI)을 완전히 암호화하고 네트워크 중간자에게는 위장 도메인(Outer SNI)만 노출하는 TLS 1.3의 핵심 보안 확장 기능입니다.`,echHelpBenefit1:`ISP나 중간자가 방문 중인 세부 하위 도메인을 감청하는 것을 방지`,echHelpBenefit2:`DoH와 결합하여 평문 SNI 노출 및 차단 위험 제거`,retentionDisabled:`비활성화 (개인 정보 보호)`,retentionDisabledDesc:`로그 기록이 비활성화되었습니다. 시스템은 DNS 쿼리 로그를 기록하지 않으며 기존 로그를 즉시 삭제합니다.`},u=JSON.parse(`{"title":"계정 설정","subtitle":"보안 자격 증명 및 시스템 사용자를 관리합니다.","jwtSecretWarningTitle":"보안 알림: 취약한 JWT 시크릿","jwtSecretWarningDesc":"현재 JWT_SECRET 길이가 32자 미만이어서 잠재적인 보안 위험이 있습니다. 봉투 암호화된 기존 TOTP 및 복구 키의 복호화가 가능하도록 JWT_SECRET을 교체하기 전에 KEK_v1 환경 변수를 먼저 구성하십시오.","roleAdmin":"시스템 관리자","roleUser":"사용자","personalInfo":"개인 정보","username":"사용자 이름","userId":"사용자 ID","changePassword":"비밀번호 변경","currentPassword":"현재 비밀번호","newPassword":"새 비밀번호","updatePassword":"비밀번호 업데이트","userManagement":"사용자 관리 (관리자 전용)","createUser":"사용자 생성","role":"역할","createdAt":"생성 시간","lastActive":"최근 활동 시간","lastResolve":"최근 해석 시간","actions":"작업","dangerZone":"위험 구역","clearLogs":"모든 로그 지우기","clearLogsDesc":"계정에 등록된 모든 설정에서 발생한 쿼리 로그를 삭제합니다. 이 작업은 되돌릴 수 없습니다.","clearLogsBtn":"즉시 로그 지우기","deleteAccount":"회원 탈퇴","deleteAccountDesc":"계정 및 모든 관련 데이터를 영구적으로 삭제합니다. 모든 DNS 해석 설정을 잃게 됩니다.","deleteAccountBtn":"탈퇴 및 계정 삭제","createNewUser":"새 사용자 생성","initialPassword":"초기 비밀번호","userRole":"사용자 역할","cancel":"취소","createNow":"즉시 생성","formatTipUsername":"사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식","formatTipPassword":"비밀번호 형식 팁: 12-100자","passwordSuccess":"비밀번호가 성공적으로 변경되었습니다","updateFailed":"수정 실패","confirmDeleteUser":"이 사용자를 삭제하시겠습니까? 소유한 모든 설정도 제거됩니다.","confirmClearLogs":"계정 내 모든 설정의 쿼리 로그를 지우시겠습니까? 이 작업은 취소할 수 없습니다.","clearLogsSuccess":"로그가 성공적으로 지워졌습니다","confirmDeleteAccount":"경고: 정말 회원 탈퇴를 진행하고 본 계정을 삭제하시겠습니까?\\n\\n소유한 모든 DNS 설정, 사용자 지정 규칙 및 쿼리 로그가 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!","inactivityPolicy":"활동 정책","inactivityDesc":"사용자 개인 정보 보호 및 리소스 절약을 위해 30일 동안 DNS 조회 활동이 없는 계정의 모든 쿼리 로그 및 DNS 구성이 자동으로 삭제됩니다. 계정 자체는 90일 동안 로그인 활동이 없을 경우 삭제됩니다.","systemSettings":"시스템 설정 (관리자 전용)","adminOnlyView":"관리자만 볼 수 있음","featureToggle":"기능 토글","enableTurnstileSignup":"회원가입 페이지 보안 문자 활성화","enableTurnstileLogin":"로그인 페이지 보안 문자 활성화","totp":{"title":"인증 앱 (TOTP)","enabled":"활성화됨","disabled":"비활성화됨","setupDesc":"계정에 추가 보안 레이어를 추가합니다. Google Authenticator, Authy 또는 모든 TOTP 호환 앱을 사용하십시오.","setupBtn":"인증 앱 (TOTP) 설정","scanQR":"인증 앱을 사용하여 이 QR 코드를 스캔하세요:","orEnterManually":"또는 수동으로 키를 입력하세요:","enterCode":"확인을 위해 인증 앱 코드를 입력하세요:","enterCodeHint":"키가 올바르게 등록되었는지 확인하려면 6자리 코드를 입력하세요.","activate":"TOTP 활성화","skipPassword":"비밀번호 건너뛰기 — 로그인 시 TOTP 코드만 입력 (비밀번호 입력 생략)","disable":"인증 앱 (TOTP) 비활성화","disableTitle":"인증 앱 (TOTP) 비활성화","disableWarning":"TOTP를 비활성화하면 패스키가 설정되어 있지 않은 경우 계정이 비밀번호로만 보호됩니다.","confirmDisable":"TOTP 비활성화","recoveryKeysTitle":"복구 키를 저장해 주십시오","recoveryKeysWarning":"복구 키를 안전한 곳(비밀번호 관리 앱 등)에 보관하십시오. 각 키는 단 한 번만 사용할 수 있습니다.","copyKeys":"모든 키 복사","copied":"복사 완료!","done":"완료 (키를 저장했습니다)","activeDesc":"인증 앱(TOTP)이 활성화되어 6자리 확인 코드를 생성하고 있습니다."},"activity":{"title":"계정 활동 기록","action":"이벤트","time":"시간","ip":"IP 주소","session":"세션","empty":"활동 기록이 없습니다.","loadMore":"더 보기","signup":"가입","loginSuccess":"로그인 성공","loginFail":"로그인 실패","logout":"로그아웃","pwChangeSuccess":"비밀번호 변경 성공","pwChangeFail":"비밀번호 변경 실패","totpVerifySuccess":"TOTP 인증 성공","totpVerifyFail":"TOTP 인증 실패","totpSetup":"TOTP 인증 앱 설정","totpRemoved":"TOTP 인증 앱 제거","recoveryKeyUsed":"복구 키 사용됨","sessionRevoked":"세션 취소됨","reasons":{"user_active":"수동 로그아웃","user_revoke":"세션 취소","expired":"세션 만료됨","geolocation_mismatch":"지리적 위치 불일치 (원격 액세스 제한)","geolocation_missing":"지리적 위치 정보 누락","token_reuse":"토큰 재사용 (보안 경고)"},"passkeyRegistered":"패스키 등록","passkeyDeleted":"패스키 삭제","passkeyVerifySuccess":"패스키 인증 성공","passkeyVerifyFail":"패스키 인증 실패","recoveryKeyRotated":"비상 복구 키 순환됨"},"sessions":{"title":"활성 세션","session":"세션","device":"기기","ip":"IP 주소","loginTime":"로그인 시간","expires":"만료 시간","action":"작업","current":"현재","revoke":"취소","revokeFailed":"세션을 취소하지 못했습니다.","empty":"활성 세션을 찾을 수 없습니다.","unknownDevice":"알 수 없는 기기","revokeOthers":"다른 세션 취소","confirmRevokeOthers":"다른 세션 취소","revokeOthersConfirmText":"다른 모든 활성 세션을 취소하시겠습니까? 현재 장치를 제외한 모든 로그인된 장치에서 즉시 로그아웃됩니다."},"passkey":{"title":"패스키 (Passkey)","addBtn":"패스키 추가","desc":"생체 인식(Touch ID, Face ID, Windows Hello) 또는 보안 키(YubiKey)를 사용하여 빠르고 피싱에 강한 다단계 인증을 수행하세요.","empty":"추가된 패스키가 없습니다.","addTitle":"패스키 추가","nameLabel":"패스키 이름","namePlaceholder":"예: my_passkey","promptNotice":"계속을 클릭하면 브라우저에 생체 인식 또는 보안 키 등록을 완료하라는 메시지가 표시됩니다.","continue":"계속","renameTitle":"패스키 이름 바꾸기","deleteTitle":"패스키 삭제","deleteConfirm":"패스키 \\"{{name}}\\"을(를) 삭제하시겠습니까? 삭제 후에는 다단계 인증에 사용할 수 없습니다.","defaultName":"패스키","notSupported":"브라우저 또는 현재 환경이 패스키(WebAuthn)를 지원하지 않습니다.","regFailed":"패스키 등록 실패","count":"{{count}}개 구성됨","none":"구성되지 않음","created":"추가 일시","lastUsed":"마지막 사용","neverUsed":"사용 이력 없음","updated":"패스키가 성공적으로 업데이트되었습니다","registered":"패스키가 성공적으로 등록되었습니다","deleted":"패스키 삭제됨","appNameLabel":"도메인","appNameHelper":"패스키가 이 도메인에 바인딩됩니다","formatTip":"패스키 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용","verifyPrompt":"기기의 생체 인식(지문, 얼굴, Windows Hello) 또는 보안 키를 사용하여 인증하세요.","changePwNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다.","submitNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다."},"mfaNone":"없음","resetUserPassword":"비밀번호 재설정","resetPasswordTitle":"사용자 비밀번호 재설정","resetPasswordWarning":"재설정 후 해당 사용자의 모든 활성 세션이 즉시 만료됩니다.","resetPasswordSuccess":"비밀번호가 성공적으로 재설정되었습니다. 활성 세션이 종료되었습니다.","confirmReset":"재설정 확인","mfa":{"title":"다중 요소 인증 (MFA)","enabled":"구성됨","notConfigured":"구성되지 않음","desc":"패스키(Passkey)와 인증 앱(TOTP) 모두 MFA 인증 방식으로 사용할 수 있습니다. 최소 하나를 설정하여 계정을 보호하세요.","passwordlessTitle":"비밀번호 없는 로그인","passwordlessDesc":"활성화하면 비밀번호 입력 없이 패스키 또는 TOTP로 직접 신원을 확인합니다.","unconfiguredHint":"아직 MFA 방식이 설정되지 않았습니다. 아래에서 패스키나 인증 앱을 설정하세요."},"recoveryKey":{"title":"비상 복구 키","desc":"비상 복구 키를 사용하면 모든 패스키나 인증 앱을 분실한 경우에도 계정에 다시 로그인하거나 비밀번호를 재설정할 수 있습니다. KEK 봉투 암호화로 안전하게 보호됩니다.","configured":"설정됨","notConfigured":"미설정","kekProtected":"KEK 암호화 보호","kekTooltip":"KEK 기반 AES-256-GCM 봉투 암호화로 보호됩니다.","viewBtn":"복구 키 보기","rotateBtn":"키 순환","yourKey":"30자리 비상 복구 키","securityTip":"이 복구 키를 안전하게 보관하세요. 이 키를 가진 사람은 누구나 계정에 액세스할 수 있습니다.","rotateConfirm":"복구 키를 순환하면 현재 키가 즉시 무효화됩니다. 계속하시겠습니까?","confirmRotateBtn":"순환 진행","viewVerifyTitle":"복구 키 조회를 위한 본인 확인","rotateVerifyTitle":"복구 키 순환을 위한 본인 확인","rotateSuccess":"복구 키가 성공적으로 순환되었습니다! 새 키를 즉시 안전한 곳에 보관하세요.","legacyNotice":"이전 단방향 해시 형식으로 저장되어 있어 복호화하여 표시할 수 없습니다. 새 KEK 암호화 키를 생성하려면 키를 순환하세요."},"verifyIdentity":"보안 본인 확인","verifyIdentityDesc":"계정 보안을 위해 계속 진행하기 전에 본인 확인을 완료하세요.","usePasskeyInstead":"패스키로 인증","changePasswordWithPasskey":"패스키 인증 후 비밀번호 변경","enableRegistration":"신규 사용자 가입 허용"}`),d={item1Title:`Obex 보호 DNS`,item1Desc:`속도와 보안을 위해 설계된 Cloudflare Workers & D1 기반의 DNS 리졸버입니다.`,item2Title:`DoH 개인정보 보호`,item2Desc:`DNS over HTTPS (RFC 8484) 암호화 터널을 통해 통신사의 위변조를 방지하고 개인정보를 보호합니다.`,item3Title:`글로벌 에지 네트워크`,item3Desc:`Cloudflare의 방대한 에지 네트워크를 활용하여 초고속 해석 및 최저 레이턴시 경험을 제공합니다.`,item4Title:`정밀한 필터링`,item4Desc:`화이트리스트/블랙리스트, AdGuard 규칙 및 사용자 지정 DNS 레코드 리다이렉트를 지원합니다.`,item5Title:`실시간 통계 분석`,item5Desc:`상세한 쿼리 로그와 종합적인 통계 대시보드를 통해 네트워크 상태를 한눈에 보여줍니다.`,item6Title:`현대적인 UI 및 다크 모드`,item6Desc:`엔지니어와 가정용 사용자를 위해 설계된, Palantir의 Blueprint UI 기반 고밀도 관리 패널입니다.`,item7Title:`클라우드 네이티브 인프라`,item7Desc:`서버리스 아키텍처로 제로 유지보수와 무제한 확장성을 보장합니다.`,item8Title:`여러 설정 관리`,item8Desc:`기기나 네트워크 환경에 따라 여러 개의 독립적인 DNS 설정 프로필을 생성하고 관리할 수 있습니다.`,item9Title:`여러 액세스 포인트 관리`,item9Desc:`기기마다 전용 DNS 액세스 포인트를 구성하여 로그 및 통계 데이터의 정밀한 격리 분석이 가능합니다.`},f={title:`DNS Worker 설정 및 배포 가이드`,subtitle:`인스턴스가 아직 완전히 구성되지 않았습니다. DNS Worker를 활성화하려면 아래 단계를 완료하세요.`,dbStatus:`D1 데이터베이스 바인딩 (env.DB)`,jwtStatus:`JWT 비밀 키 (env.JWT_SECRET)`,configured:`구성됨`,missing:`누락됨 / 구성되지 않음`,refresh:`새로고침 및 확인`,methodCli:`CLI 배포`,methodDash:`Cloudflare 대시보드 배포`,copy:`복사`,copied:`복사 완료!`,stepDbTitle:`1. D1 데이터베이스 바인딩`,stepDbDesc:`D1 데이터베이스를 생성하고 Worker에 바인딩합니다. 터미널에서 다음을 실행하세요:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`출력된 D1 데이터베이스 상세 정보를 복사하여 wrangler.toml의 [[d1_databases]] 아래에 붙여넣습니다:`,stepDbCommand2:`[[d1_databases]]
2
+ binding = "DB"
3
+ database_name = "dns_worker_db"
4
+ database_id = "<사용자의_D1_DATABASE_ID>"
5
+ migrations_dir = "migrations"`,stepDbDashDesc:`1. Cloudflare 대시보드 -> Workers & Pages -> D1 -> 데이터베이스 생성 -> 이름을 'dns_worker_db'로 입력합니다.
6
+ 2. Worker -> 설정 -> 변수 -> D1 데이터베이스 바인딩 -> 바인딩 추가를 클릭합니다.
7
+ 3. 바인딩 이름을 'DB'로 설정하고 D1 데이터베이스에서 'dns_worker_db'를 선택한 후 저장합니다.
8
+ 4. D1 데이터베이스 -> 콘솔로 이동하여 migrations 폴더의 SQL 스키마 스크립트를 복사해 실행하여 테이블을 구성합니다.`,stepJwtTitle:`2. JWT 비밀 키 설정`,stepJwtDesc:`DNS Worker는 세션 토큰 서명을 위해 JWT 비밀 키가 필요합니다. Cloudflare 비밀 변수로 구성하세요:`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Worker -> 설정 -> 변수 -> 환경 변수 -> 변수 추가를 클릭합니다.
9
+ 2. 이름을 'JWT_SECRET'으로 설정하고 유형을 '비밀(Secret)'로 선택한 뒤 안전한 무작위 문자열을 입력합니다.
10
+ 3. 저장하고 배포합니다.`,stepJwtDesc2:`Cloudflare 대시보드`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. 배포 및 마이그레이션 적용`,stepDeployDesc:`배포 명령을 실행하여 프론트엔드를 빌드하고 D1 데이터베이스 마이그레이션을 자동으로 적용하여 릴리스합니다:`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`대시보드를 통해 모든 설정을 완료한 경우, Worker의 배포 탭으로 이동하여 '배포' 또는 '재배포' 버튼을 클릭해 릴리스를 완료합니다.`,jwtGeneratorTitle:`안전한 JWT_SECRET 생성기`,jwtGeneratorDesc:`이 암호학적으로 안전한 키 생성기를 사용하여 env.JWT_SECRET에 사용할 임의의 64자 영숫자 암호를 생성하십시오.`,regenerate:`재생성`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
@@ -0,0 +1 @@
1
+ import{$ as e,$a as t,$c as n,$d as r,$f as i,$i as a,$l as o,$n as s,$o as c,$r as l,$s as u,$t as d,$u as f,A as p,Aa as m,Ac as h,Ad as g,Af as _,Ai as v,Al as y,An as b,Ao as x,Ar as S,As as C,At as w,Au as T,B as E,Ba as D,Bc as O,Bd as k,Bf as A,Bi as j,Bl as M,Bn as N,Bo as P,Br as F,Bs as I,Bt as L,Bu as R,C as z,Ca as B,Cc as V,Cd as H,Cf as U,Ci as W,Cl as G,Cn as K,Co as q,Cr as J,Cs as Y,Ct as X,Cu as Z,D as Q,Da as $,Dc as ee,Dd as te,Df as ne,Di as re,Dl as ie,Dn as ae,Do as oe,Dr as se,Ds as ce,Dt as le,Du as ue,E as de,Ea as fe,Ec as pe,Ed as me,Ef as he,Ei as ge,El as _e,En as ve,Eo as ye,Er as be,Es as xe,Et as Se,Eu as Ce,F as we,Fa as Te,Fc as Ee,Fd as De,Ff as Oe,Fi as ke,Fl as Ae,Fn as je,Fo as Me,Fr as Ne,Fs as Pe,Ft as Fe,Fu as Ie,G as Le,Ga as Re,Gc as ze,Gd as Be,Gf as Ve,Gi as He,Gl as Ue,Gn as We,Go as Ge,Gr as Ke,Gs as qe,Gt as Je,Gu as Ye,H as Xe,Ha as Ze,Hc as Qe,Hd as $e,Hf as et,Hi as tt,Hl as nt,Hn as rt,Ho as it,Hr as at,Hs as ot,Ht as st,Hu as ct,I as lt,Ia as ut,Ic as dt,Id as ft,If as pt,Ii as mt,Il as ht,In as gt,Io as _t,Ir as vt,Is as yt,It as bt,Iu as xt,J as St,Ja as Ct,Jc as wt,Jd as Tt,Jf as Et,Ji as Dt,Jl as Ot,Jn as kt,Jo as At,Jr as jt,Js as Mt,Jt as Nt,Ju as Pt,K as Ft,Ka as It,Kc as Lt,Kd as Rt,Kf as zt,Ki as Bt,Kl as Vt,Kn as Ht,Ko as Ut,Kr as Wt,Ks as Gt,Kt,Ku as qt,L as Jt,La as Yt,Lc as Xt,Ld as Zt,Lf as Qt,Li as $t,Ll as en,Ln as tn,Lo as nn,Lr as rn,Ls as an,Lt as on,Lu as sn,M as cn,Ma as ln,Mc as un,Md as dn,Mf as fn,Mi as pn,Ml as mn,Mn as hn,Mo as gn,Mr as _n,Ms as vn,Mt as yn,Mu as bn,N as xn,Na as Sn,Nc as Cn,Nd as wn,Nf as Tn,Ni as En,Nl as Dn,Nn as On,No as kn,Nr as An,Ns as jn,Nt as Mn,Nu as Nn,O as Pn,Oa as Fn,Oc as In,Od as Ln,Of as Rn,Oi as zn,Ol as Bn,On as Vn,Oo as Hn,Or as Un,Os as Wn,Ot as Gn,Ou as Kn,P as qn,Pa as Jn,Pc as Yn,Pd as Xn,Pf as Zn,Pi as Qn,Pl as $n,Pn as er,Po as tr,Pr as nr,Ps as rr,Pt as ir,Pu as ar,Q as or,Qa as sr,Qc as cr,Qd as lr,Qf as ur,Qi as dr,Ql as fr,Qn as pr,Qo as mr,Qr as hr,Qs as gr,Qt as _r,Qu as vr,R as yr,Ra as br,Rc as xr,Rd as Sr,Rf as Cr,Ri as wr,Rl as Tr,Rn as Er,Ro as Dr,Rr as Or,Rs as kr,Rt as Ar,Ru as jr,S as Mr,Sa as Nr,Sc as Pr,Sd as Fr,Sf as Ir,Si as Lr,Sl as Rr,Sn as zr,So as Br,Sr as Vr,Ss as Hr,St as Ur,Su as Wr,T as Gr,Ta as Kr,Tc as qr,Td as Jr,Tf as Yr,Ti as Xr,Tl as Zr,Tn as Qr,To as $r,Tr as ei,Ts as ti,Tt as ni,Tu as ri,U as ii,Ua as ai,Uc as oi,Ud as si,Uf as ci,Ui as li,Ul as ui,Un as di,Uo as fi,Ur as pi,Us as mi,Ut as hi,Uu as gi,V as _i,Va as vi,Vc as yi,Vd as bi,Vf as xi,Vi as Si,Vl as Ci,Vn as wi,Vo as Ti,Vr as Ei,Vs as Di,Vt as Oi,Vu as ki,W as Ai,Wa as ji,Wc as Mi,Wd as Ni,Wf as Pi,Wi as Fi,Wl as Ii,Wn as Li,Wo as Ri,Wr as zi,Ws as Bi,Wt as Vi,Wu as Hi,X as Ui,Xa as Wi,Xc as Gi,Xd as Ki,Xf as qi,Xi as Ji,Xl as Yi,Xn as Xi,Xo as Zi,Xr as Qi,Xs as $i,Xt as ea,Xu as ta,Y as na,Ya as ra,Yc as ia,Yd as aa,Yf as oa,Yi as sa,Yl as ca,Yn as la,Yo as ua,Yr as da,Ys as fa,Yt as pa,Yu as ma,Z as ha,Za as ga,Zc as _a,Zd as va,Zf as ya,Zi as ba,Zl as xa,Zn as Sa,Zo as Ca,Zr as wa,Zs as Ta,Zt as Ea,Zu as Da,_ as Oa,_a as ka,_c as Aa,_d as ja,_f as Ma,_i as Na,_l as Pa,_n as Fa,_o as Ia,_r as La,_s as Ra,_t as za,_u as Ba,a as Va,aa as Ha,ac as Ua,ad as Wa,af as Ga,ai as Ka,al as qa,an as Ja,ao as Ya,ap as Xa,ar as Za,as as Qa,at as $a,au as eo,b as to,ba as no,bc as ro,bd as io,bf as ao,bi as oo,bl as so,bn as co,bo as lo,br as uo,bs as fo,bt as po,bu as mo,c as ho,ca as go,cc as _o,cd as vo,cf as yo,ci as bo,cl as xo,cn as So,co as Co,cr as wo,cs as To,ct as Eo,cu as Do,d as Oo,da as ko,dc as Ao,dd as jo,df as Mo,di as No,dl as Po,dn as Fo,do as Io,dr as Lo,ds as Ro,dt as zo,du as Bo,ea as Vo,ec as Ho,ed as Uo,ef as Wo,ei as Go,el as Ko,en as qo,eo as Jo,ep as Yo,er as Xo,es as Zo,et as Qo,eu as $o,f as es,fa as ts,fc as ns,fd as rs,ff as is,fi as as,fl as os,fn as ss,fo as cs,fr as ls,fs as us,ft as ds,fu as fs,g as ps,ga as ms,gc as hs,gd as gs,gf as _s,gi as vs,gl as ys,gn as bs,go as xs,gr as Ss,gs as Cs,gt as ws,gu as Ts,h as Es,ha as Ds,hc as Os,hd as ks,hf as As,hi as js,hl as Ms,hn as Ns,ho as Ps,hr as Fs,hs as Is,ht as Ls,hu as Rs,i as zs,ia as Bs,ic as Vs,id as Hs,if as Us,ii as Ws,il as Gs,in as Ks,io as qs,ip as Js,ir as Ys,is as Xs,it as Zs,iu as Qs,j as $s,ja as ec,jc as tc,jd as nc,jf as rc,ji as ic,jl as ac,jn as oc,jo as sc,jr as cc,js as lc,jt as uc,ju as dc,k as fc,ka as pc,kc as mc,kd as hc,kf as gc,ki as _c,kl as vc,kn as yc,ko as bc,kr as xc,ks as Sc,kt as Cc,ku as wc,l as Tc,la as Ec,lc as Dc,ld as Oc,lf as kc,li as Ac,ll as jc,ln as Mc,lo as Nc,lr as Pc,ls as Fc,lt as Ic,lu as Lc,m as Rc,ma as zc,mc as Bc,md as Vc,mf as Hc,mi as Uc,ml as Wc,mn as Gc,mo as Kc,mr as qc,ms as Jc,mt as Yc,mu as Xc,n as Zc,na as Qc,nc as $c,nd as el,nf as tl,ni as nl,nl as rl,nn as il,no as al,np as ol,nr as sl,ns as cl,nt as ll,nu as ul,o as dl,oa as fl,oc as pl,od as ml,of as hl,oi as gl,ol as _l,on as vl,oo as yl,or as bl,os as xl,ot as Sl,ou as Cl,p as wl,pa as Tl,pc as El,pd as Dl,pf as Ol,pi as kl,pl as Al,pn as jl,po as Ml,pr as Nl,ps as Pl,pt as Fl,pu as Il,q as Ll,qa as Rl,qc as zl,qd as Bl,qf as Vl,qi as Hl,ql as Ul,qn as Wl,qo as Gl,qr as Kl,qs as ql,qt as Jl,qu as Yl,r as Xl,ra as Zl,rc as Ql,rd as $l,rf as eu,ri as tu,rl as nu,rn as ru,ro as iu,rp as au,rr as ou,rs as su,rt as cu,ru as lu,s as uu,sa as du,sc as fu,sd as pu,sf as mu,si as hu,sl as gu,sn as _u,so as vu,sr as yu,ss as bu,st as xu,su as Su,ta as Cu,tc as wu,td as Tu,tf as Eu,ti as Du,tl as Ou,tn as ku,to as Au,tp as ju,tr as Mu,ts as Nu,tt as Pu,tu as Fu,u as Iu,ua as Lu,uc as Ru,ud as zu,uf as Bu,ui as Vu,ul as Hu,un as Uu,uo as Wu,ur as Gu,us as Ku,ut as qu,uu as Ju,v as Yu,va as Xu,vc as Zu,vd as Qu,vf as $u,vi as ed,vl as td,vn as nd,vo as rd,vr as id,vs as ad,vt as od,vu as sd,w as cd,wa as ld,wc as ud,wd as dd,wf as fd,wi as pd,wl as md,wn as hd,wo as gd,wr as _d,ws as vd,wt as yd,wu as bd,x as xd,xa as Sd,xc as Cd,xd as wd,xf as Td,xi as Ed,xl as Dd,xn as Od,xo as kd,xr as Ad,xs as jd,xt as Md,xu as Nd,y as Pd,ya as Fd,yc as Id,yd as Ld,yf as Rd,yi as zd,yl as Bd,yn as Vd,yo as Hd,yr as Ud,ys as Wd,yt as Gd,yu as Kd,z as qd,za as Jd,zc as Yd,zd as Xd,zf as Zd,zi as Qd,zl as $d,zn as ef,zo as tf,zr as nf,zs as rf,zt as af,zu as of}from"./vendor-icons-20-X5NPN60g.js";export{Xa as Add,Js as AddApplication,au as AddChild,ol as AddClip,ju as AddColumnLeft,Yo as AddColumnRight,i as AddDerivedColumn,ur as AddLocation,ya as AddParent,qi as AddRowBottom,oa as AddRowTop,Et as AddTile,Vl as AddToArtifact,zt as AddToFolder,Ve as AimpointsTarget,Pi as Airplane,ci as AlignCenter,et as AlignJustify,xi as AlignLeft,A as AlignRight,Zd as AlignmentBottom,Cr as AlignmentHorizontalCenter,Qt as AlignmentLeft,pt as AlignmentRight,Oe as AlignmentTop,Zn as AlignmentVerticalCenter,Tn as Ammunition,fn as Anchor,rc as Annotation,_ as Announcement,gc as Antenna,Rn as AppHeader,ne as Application,he as Applications,Yr as Archive,fd as AreaOfInterest,U as Array,Ir as ArrayBoolean,Td as ArrayDate,ao as ArrayFloatingPoint,Rd as ArrayNumeric,$u as ArrayObject,Ma as ArrayString,_s as ArrayTimestamp,As as ArrowBottomLeft,Hc as ArrowBottomRight,Ol as ArrowDown,is as ArrowLeft,Mo as ArrowRight,Bu as ArrowTopLeft,kc as ArrowTopRight,yo as ArrowUp,mu as ArrowsArc,hl as ArrowsHorizontal,Ga as ArrowsVertical,Us as Asterisk,eu as At,tl as AutomaticUpdates,Eu as Axle,Wo as Backlink,r as BackwardTen,lr as Badge,va as BanCircle,Ki as BankAccount,aa as Barcode,Tt as BinaryNumber,Bl as Blank,Rt as BlockPromote,Be as BlockedPerson,Ni as Bold,si as Book,$e as Bookmark,bi as Box,k as BranchLocked,Xd as BranchUnlocked,Sr as Briefcase,Zt as BringData,ft as BringForward,De as BritishPound,Xn as Bug,wn as Buggy,dn as Build,nc as Bullseye,g as Calculator,hc as Calendar,Ln as Camera,te as CaretDown,me as CaretLeft,Jr as CaretRight,dd as CaretUp,H as CargoShip,Fr as CellTower,wd as Changes,io as Chart,Ld as Chat,Qu as ChevronBackward,ja as ChevronDown,gs as ChevronForward,ks as ChevronLeft,Vc as ChevronRight,Dl as ChevronUp,rs as Circle,jo as CircleArrowDown,zu as CircleArrowLeft,Oc as CircleArrowRight,vo as CircleArrowUp,pu as CircleDashed,ml as Citation,Wa as Clean,Hs as Clip,$l as Clipboard,el as ClipboardFile,Tu as Cloud,Uo as CloudDownload,f as CloudServer,vr as CloudTick,Da as CloudUpload,ta as Code,ma as CodeBlock,Pt as Cog,Yl as CollapseAll,qt as ColorFill,Ye as ColumnLayout,Hi as Comment,gi as Comparison,ct as Compass,ki as Compressed,R as Confirm,of as Console,jr as ConsoleAlert,sn as Construction,xt as Contrast,Ie as Control,ar as CreditCard,Nn as Crop,bn as Cross,dc as CrossCircle,T as Crown,wc as CrystalBall,Kn as CssStyle,ue as Cube,Ce as CubeAdd,ri as CubeCutout,bd as CubeCutouts,Z as CubeEdit,Wr as CubeRemove,Nd as Cubes,mo as CurlyBraces,Kd as CurvedRangeChart,sd as Cut,Ba as Cycle,Ts as Dashboard,Rs as DataCloud,Xc as DataConnection,Il as DataLineage,fs as DataSearch,Bo as DataSync,Ju as Database,Lc as Delete,Do as DeleteClip,Su as Delta,Cl as DeriveColumn,eo as Descendant,Qs as Desktop,lu as Detection,ul as Diagnosis,Fu as DiagramTree,$o as DirectionLeft,o as DirectionRight,fr as Disable,xa as Divide,Yi as Document,ca as DocumentCode,Ot as DocumentLocked,Ul as DocumentOpen,Vt as DocumentShare,Ue as Dollar,Ii as Dot,ui as DoubleCaretHorizontal,nt as DoubleCaretVertical,Ci as DoubleChevronDown,M as DoubleChevronLeft,$d as DoubleChevronRight,Tr as DoubleChevronUp,en as DoughnutChart,ht as Download,Ae as DragHandleHorizontal,$n as DragHandleVertical,Dn as Draw,mn as DrawerLeft,ac as DrawerLeftFilled,y as DrawerRight,vc as DrawerRightFilled,Bn as DriveTime,ie as Drone,_e as DroneUav,Zr as Duplicate,md as Edit,G as Eject,Rr as Emoji,Dd as Endnote,so as Endorsed,Bd as Engagement,td as Envelope,Pa as Equals,ys as Eraser,Ms as Error,Wc as Euro,Al as Excavator,os as Exchange,Po as ExcludeRow,Hu as ExpandAll,jc as Explain,xo as Export,gu as EyeOff,_l as EyeOn,qa as EyeOpen,Gs as FastBackward,nu as FastForward,rl as Feed,Ou as FeedSubscribed,Ko as FighterJet,n as Film,cr as Filter,_a as FilterKeep,Gi as FilterList,ia as FilterOpen,wt as FilterRemove,zl as FilterSortAsc,Lt as FilterSortDesc,ze as Flag,Mi as Flame,oi as Flash,Qe as FloatingPoint,yi as FloppyDisk,O as FlowBranch,Yd as FlowEnd,xr as FlowLinear,Xt as FlowReview,dt as FlowReviewBranch,Ee as Flows,Yn as FolderClose,Cn as FolderNew,un as FolderOpen,tc as FolderShared,h as FolderSharedOpen,mc as Follower,In as Following,ee as Font,pe as Fork,qr as ForkEnd,ud as Form,V as ForwardTen,Pr as FrameToFrame,Cd as Fuel,ro as FullCircle,Id as FullStackedChart,Zu as Fullscreen,Aa as Function,hs as FunctionMinimal,Os as GanttChart,Bc as Generate,El as Geofence,ns as Geolocation,Ao as Geosearch,Ru as Geotime,Dc as GiftBox,_o as GitBranch,fu as GitCommit,pl as GitMerge,Ua as GitNewBranch,Vs as GitPull,Ql as GitPush,$c as GitRebase,wu as GitRepo,Ho as Glass,u as Globe,gr as GlobeNetwork,Ta as GlobeNetworkAdd,$i as Graph,fa as GraphRemove,Mt as GreaterThan,ql as GreaterThanOrEqualTo,Gt as Grid,qe as GridView,Bi as GroupItem,mi as GroupObjects,ot as GroupedBarChart,Di as Hand,I as HandDown,rf as HandLeft,kr as HandRight,an as HandUp,yt as Hat,Pe as Header,rr as HeaderOne,jn as HeaderThree,vn as HeaderTwo,lc as Headset,C as Heart,Sc as HeartBroken,Wn as HeatGrid,ce as Heatmap,xe as Helicopter,ti as Help,vd as HelperManagement,Y as Hexagon,Hr as HighPriority,jd as HighVoltagePole,fo as Highlight,Wd as History,ad as Home,Ra as HorizontalBarChart,Cs as HorizontalBarChartAsc,Is as HorizontalBarChartDesc,Jc as HorizontalDistribution,Pl as HorizontalInbetween,us as Hurricane,Ro as IdNumber,Ku as ImageRotateLeft,Fc as ImageRotateRight,To as Import,bu as Inbox,xl as InboxFiltered,Qa as InboxGeo,Xs as InboxSearch,su as InboxUpdate,cl as InfoSign,Nu as Inheritance,Zo as InheritedGroup,c as InnerJoin,mr as Input,Ca as Insert,Zi as Intelligence,ua as Intersection,At as IpAddress,Gl as Issue,Ut as IssueClosed,Ge as IssueNew,Ri as Italic,fi as JoinTable,it as Key,Ti as KeyBackspace,P as KeyCommand,tf as KeyControl,Dr as KeyDelete,nn as KeyEnter,_t as KeyEscape,Me as KeyOption,tr as KeyShift,kn as KeyTab,gn as KnownVehicle,sc as LabTest,x as Label,bc as Layer,Hn as LayerOutline,oe as Layers,ye as Layout,$r as LayoutAuto,gd as LayoutBalloon,q as LayoutBottomRowThreeTiles,Br as LayoutBottomRowTwoTiles,kd as LayoutCircle,lo as LayoutGrid,Hd as LayoutGroupBy,rd as LayoutHierarchy,Ia as LayoutLeftColumnThreeTiles,xs as LayoutLeftColumnTwoTiles,Ps as LayoutLinear,Kc as LayoutRightColumnThreeTiles,Ml as LayoutRightColumnTwoTiles,cs as LayoutSkewGrid,Io as LayoutSortedClusters,Wu as LayoutThreeColumns,Nc as LayoutThreeRows,Co as LayoutTopRowThreeTiles,vu as LayoutTopRowTwoTiles,yl as LayoutTwoColumns,Ya as LayoutTwoRows,qs as Learning,iu as LeftJoin,al as LengthenText,Au as LessThan,Jo as LessThanOrEqualTo,t as Lifesaver,sr as Lightbulb,ga as Lightning,Wi as Link,ra as LinkedSquares,Ct as List,Rl as ListColumns,It as ListDetailView,Re as Locate,ji as Lock,ai as Locomotive,Ze as LogIn,vi as LogOut,D as LowVoltagePole,Jd as Manual,br as ManuallyEnteredData,Yt as ManyToMany,ut as ManyToOne,Te as Map,Jn as MapCreate,Sn as MapMarker,ln as Markdown,ec as Maximize,m as Media,pc as Menu,Fn as MenuClosed,$ as MenuOpen,fe as MergeColumns,Kr as MergeLinks,ld as Microphone,B as Minimize,Nr as Minus,Sd as MobilePhone,no as MobileVideo,Fd as Modal,Xu as ModalFilled,ka as Model,ms as Moon,Ds as More,zc as Mountain,Tl as Move,ts as Mugshot,ko as MultiSelect,Lu as Music,Ec as Nest,go as NewComment,du as NewDrawing,fl as NewGridItem,Ha as NewLayer,Bs as NewLayers,Zl as NewLink,Qc as NewObject,Cu as NewPerson,Vo as NewPrescription,a as NewShield,dr as NewTextBox,ba as Ninja,Ji as NotEqualTo,sa as Notifications,Dt as NotificationsAdd,Hl as NotificationsSnooze,Bt as NotificationsUpdated,He as NumberedList,Fi as Numerical,li as ObjectView,tt as Office,Si as Offline,j as OilField,Qd as OneColumn,wr as OneToMany,$t as OneToOne,mt as OpenApplication,ke as Outdated,Qn as OuterJoin,En as Output,pn as Package,ic as PageBreak,v as PageLayout,_c as Panel,zn as PanelStats,re as PanelTable,ge as Paperclip,Xr as Paragraph,pd as PasteVariable,W as Path,Lr as PathSearch,Ed as Pause,oo as People,zd as Percentage,ed as Person,Na as Phone,vs as PhoneCall,js as PhoneForward,Uc as PhoneSearch,kl as PieChart,as as Pill,No as Pin,Vu as Pistol,Ac as Pivot,bo as PivotTable,hu as Play,gl as Playbook,Ka as Plus,Ws as PolygonFilter,tu as Popout,nl as Power,Du as PredictiveAnalysis,Go as Prescription,l as Presentation,hr as Print,wa as Projects,Qi as Properties,da as Property,jt as PublishFunction,Kl as Pulse,Wt as Rain,Ke as Random,zi as RangeRing,pi as Record,at as RectHeight,Ei as RectWidth,F as Rectangle,nf as Redo,Or as Refresh,rn as RefreshOff,vt as Regex,Ne as RegressionChart,nr as Remove,An as RemoveColumn,_n as RemoveColumnLeft,cc as RemoveColumnRight,S as RemoveRowBottom,xc as RemoveRowTop,Un as Repeat,se as Reset,be as Resolve,ei as Rig,_d as RightJoin,J as Ring,Vr as Rocket,Ad as RocketSlant,uo as RootFolder,Ud as RotateCcw,id as RotateCw,La as RotateDocument,Ss as RotatePage,Fs as Route,qc as RunHistory,Nl as Satellite,ls as Saved,Lo as ScatterPlot,Gu as Search,Pc as SearchAround,wo as SearchTemplate,yu as SearchText,bl as SegmentedControl,Za as Select,Ys as Selection,ou as SelectionBox,sl as SelectionBoxAdd,Mu as SelectionBoxEdit,Xo as SelectionBoxRemove,s as SendBackward,pr as SendMessage,Sa as SendTo,Xi as SendToGraph,la as SendToMap,kt as Sensor,Wl as SeriesAdd,Ht as SeriesConfiguration,We as SeriesDerived,Li as SeriesFiltered,di as SeriesSearch,rt as Server,wi as ServerInstall,N as Settings,ef as Shapes,Er as Share,tn as SharedFilter,gt as Shield,je as Ship,er as Shop,On as ShoppingCart,hn as ShortenText,oc as SignalSearch,b as SimCard,yc as Slash,Vn as SmallCross,ae as SmallInfoSign,ve as SmallMinus,Qr as SmallPlus,hd as SmallSquare,K as SmallTick,zr as Snowflake,Od as SoccerBall,co as SocialMedia,Vd as Sort,nd as SortAlphabetical,Fa as SortAlphabeticalDesc,bs as SortAsc,Ns as SortDesc,Gc as SortNumerical,jl as SortNumericalDesc,ss as SpellCheck,Fo as Spin,Uu as SplitColumns,Mc as SportsStadium,So as Square,_u as StackedChart,vl as StadiumGeometry,Ja as Star,Ks as StarEmpty,ru as StepBackward,il as StepChart,ku as StepForward,qo as Stop,d as Stopwatch,_r as Strikethrough,Ea as Style,ea as Subscript,pa as SubtractRightJoin,Nt as Superscript,Jl as SwapHorizontal,Kt as SwapVertical,Je as Sweep,Vi as Switch,hi as SymbolCircle,st as SymbolCross,Oi as SymbolDiamond,L as SymbolRectangle,af as SymbolSquare,Ar as SymbolTriangleDown,on as SymbolTriangleUp,bt as Syringe,Fe as TableSync,ir as Tag,Mn as TagAdd,yn as TagPromote,uc as TagRefresh,w as TagUndo,Cc as Tags,Gn as TakeAction,le as Tank,Se as Target,ni as Taxi,yd as Team,X as Temperature,Ur as TextHighlight,Md as Th,po as ThAdd,Gd as ThDerived,od as ThDisconnect,za as ThFiltered,ws as ThList,Ls as ThListAdd,Yc as ThVirtual,Fl as ThVirtualAdd,ds as ThirdParty,zo as ThumbsDown,qu as ThumbsUp,Ic as Tick,Eo as TickCircle,xu as Time,Sl as TimelineAreaChart,$a as TimelineBarChart,Zs as TimelineEvents,cu as TimelineLineChart,ll as Tint,Pu as Torch,Qo as Tractor,e as Train,or as Translate,ha as Trash,Ui as Tree,na as TrendingDown,St as TrendingUp,Ll as Trophy,Ft as Truck,Le as TwoColumns,Ai as Unarchive,ii as Underline,Xe as Undo,_i as UngroupObjects,E as UnknownVehicle,qd as Unlink,yr as Unlock,Jt as Unpin,lt as Unresolve,we as Updated,qn as Upload,xn as User,cn as Variable,$s as VariableLayer,p as Vector,fc as VerticalBarChartAsc,Pn as VerticalBarChartDesc,Q as VerticalDistribution,de as VerticalInbetween,Gr as Video,cd as Virus,z as VolumeDown,Mr as VolumeOff,xd as VolumeUp,to as Walk,Pd as WarningSign,Yu as WaterfallChart,Oa as Waves,ps as Widget,Es as WidgetButton,Rc as WidgetFooter,wl as WidgetHeader,es as Wind,Oo as Won,Iu as WrapLines,Tc as Wrench,ho as WrenchRedo,uu as WrenchSnooze,dl as WrenchTime,Va as Yen,zs as ZoomIn,Xl as ZoomOut,Zc as ZoomToFit};
@@ -0,0 +1 @@
1
+ import{$ as e,$a as t,$c as n,$d as r,$f as i,$i as a,$l as o,$n as s,$o as c,$r as l,$s as u,$t as d,$u as f,A as p,Aa as m,Ac as h,Ad as g,Af as _,Ai as v,Al as y,An as b,Ao as x,Ar as S,As as C,At as w,Au as T,B as E,Ba as D,Bc as O,Bd as k,Bf as A,Bi as j,Bl as M,Bn as N,Bo as P,Br as F,Bs as I,Bt as L,Bu as R,C as z,Ca as B,Cc as V,Cd as H,Cf as U,Ci as W,Cl as G,Cn as K,Co as q,Cr as J,Cs as Y,Ct as X,Cu as Z,D as Q,Da as $,Dc as ee,Dd as te,Df as ne,Di as re,Dl as ie,Dn as ae,Do as oe,Dr as se,Ds as ce,Dt as le,Du as ue,E as de,Ea as fe,Ec as pe,Ed as me,Ef as he,Ei as ge,El as _e,En as ve,Eo as ye,Er as be,Es as xe,Et as Se,Eu as Ce,F as we,Fa as Te,Fc as Ee,Fd as De,Ff as Oe,Fi as ke,Fl as Ae,Fn as je,Fo as Me,Fr as Ne,Fs as Pe,Ft as Fe,Fu as Ie,G as Le,Ga as Re,Gc as ze,Gd as Be,Gf as Ve,Gi as He,Gl as Ue,Gn as We,Go as Ge,Gr as Ke,Gs as qe,Gt as Je,Gu as Ye,H as Xe,Ha as Ze,Hc as Qe,Hd as $e,Hf as et,Hi as tt,Hl as nt,Hn as rt,Ho as it,Hr as at,Hs as ot,Ht as st,Hu as ct,I as lt,Ia as ut,Ic as dt,Id as ft,If as pt,Ii as mt,Il as ht,In as gt,Io as _t,Ir as vt,Is as yt,It as bt,Iu as xt,J as St,Ja as Ct,Jc as wt,Jd as Tt,Jf as Et,Ji as Dt,Jl as Ot,Jn as kt,Jo as At,Jr as jt,Js as Mt,Jt as Nt,Ju as Pt,K as Ft,Ka as It,Kc as Lt,Kd as Rt,Kf as zt,Ki as Bt,Kl as Vt,Kn as Ht,Ko as Ut,Kr as Wt,Ks as Gt,Kt,Ku as qt,L as Jt,La as Yt,Lc as Xt,Ld as Zt,Lf as Qt,Li as $t,Ll as en,Ln as tn,Lo as nn,Lr as rn,Ls as an,Lt as on,Lu as sn,M as cn,Ma as ln,Mc as un,Md as dn,Mf as fn,Mi as pn,Ml as mn,Mn as hn,Mo as gn,Mr as _n,Ms as vn,Mt as yn,Mu as bn,N as xn,Na as Sn,Nc as Cn,Nd as wn,Nf as Tn,Ni as En,Nl as Dn,Nn as On,No as kn,Nr as An,Ns as jn,Nt as Mn,Nu as Nn,O as Pn,Oa as Fn,Oc as In,Od as Ln,Of as Rn,Oi as zn,Ol as Bn,On as Vn,Oo as Hn,Or as Un,Os as Wn,Ot as Gn,Ou as Kn,P as qn,Pa as Jn,Pc as Yn,Pd as Xn,Pf as Zn,Pi as Qn,Pl as $n,Pn as er,Po as tr,Pr as nr,Ps as rr,Pt as ir,Pu as ar,Q as or,Qa as sr,Qc as cr,Qd as lr,Qf as ur,Qi as dr,Ql as fr,Qn as pr,Qo as mr,Qr as hr,Qs as gr,Qt as _r,Qu as vr,R as yr,Ra as br,Rc as xr,Rd as Sr,Rf as Cr,Ri as wr,Rl as Tr,Rn as Er,Ro as Dr,Rr as Or,Rs as kr,Rt as Ar,Ru as jr,S as Mr,Sa as Nr,Sc as Pr,Sd as Fr,Sf as Ir,Si as Lr,Sl as Rr,Sn as zr,So as Br,Sr as Vr,Ss as Hr,St as Ur,Su as Wr,T as Gr,Ta as Kr,Tc as qr,Td as Jr,Tf as Yr,Ti as Xr,Tl as Zr,Tn as Qr,To as $r,Tr as ei,Ts as ti,Tt as ni,Tu as ri,U as ii,Ua as ai,Uc as oi,Ud as si,Uf as ci,Ui as li,Ul as ui,Un as di,Uo as fi,Ur as pi,Us as mi,Ut as hi,Uu as gi,V as _i,Va as vi,Vc as yi,Vd as bi,Vf as xi,Vi as Si,Vl as Ci,Vn as wi,Vo as Ti,Vr as Ei,Vs as Di,Vt as Oi,Vu as ki,W as Ai,Wa as ji,Wc as Mi,Wd as Ni,Wf as Pi,Wi as Fi,Wl as Ii,Wn as Li,Wo as Ri,Wr as zi,Ws as Bi,Wt as Vi,Wu as Hi,X as Ui,Xa as Wi,Xc as Gi,Xd as Ki,Xf as qi,Xi as Ji,Xl as Yi,Xn as Xi,Xo as Zi,Xr as Qi,Xs as $i,Xt as ea,Xu as ta,Y as na,Ya as ra,Yc as ia,Yd as aa,Yf as oa,Yi as sa,Yl as ca,Yn as la,Yo as ua,Yr as da,Ys as fa,Yt as pa,Yu as ma,Z as ha,Za as ga,Zc as _a,Zd as va,Zf as ya,Zi as ba,Zl as xa,Zn as Sa,Zo as Ca,Zr as wa,Zs as Ta,Zt as Ea,Zu as Da,_ as Oa,_a as ka,_c as Aa,_d as ja,_f as Ma,_i as Na,_l as Pa,_n as Fa,_o as Ia,_r as La,_s as Ra,_t as za,_u as Ba,a as Va,aa as Ha,ac as Ua,ad as Wa,af as Ga,ai as Ka,al as qa,an as Ja,ao as Ya,ap as Xa,ar as Za,as as Qa,at as $a,au as eo,b as to,ba as no,bc as ro,bd as io,bf as ao,bi as oo,bl as so,bn as co,bo as lo,br as uo,bs as fo,bt as po,bu as mo,c as ho,ca as go,cc as _o,cd as vo,cf as yo,ci as bo,cl as xo,cn as So,co as Co,cr as wo,cs as To,ct as Eo,cu as Do,d as Oo,da as ko,dc as Ao,dd as jo,df as Mo,di as No,dl as Po,dn as Fo,do as Io,dr as Lo,ds as Ro,dt as zo,du as Bo,ea as Vo,ec as Ho,ed as Uo,ef as Wo,ei as Go,el as Ko,en as qo,eo as Jo,ep as Yo,er as Xo,es as Zo,et as Qo,eu as $o,f as es,fa as ts,fc as ns,fd as rs,ff as is,fi as as,fl as os,fn as ss,fo as cs,fr as ls,fs as us,ft as ds,fu as fs,g as ps,ga as ms,gc as hs,gd as gs,gf as _s,gi as vs,gl as ys,gn as bs,go as xs,gr as Ss,gs as Cs,gt as ws,gu as Ts,h as Es,ha as Ds,hc as Os,hd as ks,hf as As,hi as js,hl as Ms,hn as Ns,ho as Ps,hr as Fs,hs as Is,ht as Ls,hu as Rs,i as zs,ia as Bs,ic as Vs,id as Hs,if as Us,ii as Ws,il as Gs,in as Ks,io as qs,ip as Js,ir as Ys,is as Xs,it as Zs,iu as Qs,j as $s,ja as ec,jc as tc,jd as nc,jf as rc,ji as ic,jl as ac,jn as oc,jo as sc,jr as cc,js as lc,jt as uc,ju as dc,k as fc,ka as pc,kc as mc,kd as hc,kf as gc,ki as _c,kl as vc,kn as yc,ko as bc,kr as xc,ks as Sc,kt as Cc,ku as wc,l as Tc,la as Ec,lc as Dc,ld as Oc,lf as kc,li as Ac,ll as jc,ln as Mc,lo as Nc,lr as Pc,ls as Fc,lt as Ic,lu as Lc,m as Rc,ma as zc,mc as Bc,md as Vc,mf as Hc,mi as Uc,ml as Wc,mn as Gc,mo as Kc,mr as qc,ms as Jc,mt as Yc,mu as Xc,na as Zc,nc as Qc,nd as $c,nf as el,ni as tl,nl,nn as rl,no as il,np as al,nr as ol,ns as sl,nt as cl,nu as ll,o as ul,oa as dl,oc as fl,od as pl,of as ml,oi as hl,ol as gl,on as _l,oo as vl,op as yl,or as bl,os as xl,ot as Sl,ou as Cl,p as wl,pa as Tl,pc as El,pd as Dl,pf as Ol,pi as kl,pl as Al,pn as jl,po as Ml,pr as Nl,ps as Pl,pt as Fl,pu as Il,q as Ll,qa as Rl,qc as zl,qd as Bl,qf as Vl,qi as Hl,ql as Ul,qn as Wl,qo as Gl,qr as Kl,qs as ql,qt as Jl,qu as Yl,r as Xl,ra as Zl,rc as Ql,rd as $l,rf as eu,ri as tu,rl as nu,rn as ru,ro as iu,rp as au,rr as ou,rs as su,rt as cu,ru as lu,s as uu,sa as du,sc as fu,sd as pu,sf as mu,si as hu,sl as gu,sn as _u,so as vu,sr as yu,ss as bu,st as xu,su as Su,ta as Cu,tc as wu,td as Tu,tf as Eu,ti as Du,tl as Ou,tn as ku,to as Au,tp as ju,tr as Mu,ts as Nu,tt as Pu,tu as Fu,u as Iu,ua as Lu,uc as Ru,ud as zu,uf as Bu,ui as Vu,ul as Hu,un as Uu,uo as Wu,ur as Gu,us as Ku,ut as qu,uu as Ju,v as Yu,va as Xu,vc as Zu,vd as Qu,vf as $u,vi as ed,vl as td,vn as nd,vo as rd,vr as id,vs as ad,vt as od,vu as sd,w as cd,wa as ld,wc as ud,wd as dd,wf as fd,wi as pd,wl as md,wn as hd,wo as gd,wr as _d,ws as vd,wt as yd,wu as bd,x as xd,xa as Sd,xc as Cd,xd as wd,xf as Td,xi as Ed,xl as Dd,xn as Od,xo as kd,xr as Ad,xs as jd,xt as Md,xu as Nd,y as Pd,ya as Fd,yc as Id,yd as Ld,yf as Rd,yi as zd,yl as Bd,yn as Vd,yo as Hd,yr as Ud,ys as Wd,yt as Gd,yu as Kd,z as qd,za as Jd,zc as Yd,zd as Xd,zf as Zd,zi as Qd,zl as $d,zn as ef,zo as tf,zr as nf,zs as rf,zt as af,zu as of}from"./vendor-icons-16-BgwRBCeU.js";export{yl as Add,Xa as AddApplication,Js as AddChild,au as AddClip,al as AddColumnLeft,ju as AddColumnRight,Yo as AddDerivedColumn,i as AddLocation,ur as AddParent,ya as AddRowBottom,qi as AddRowTop,oa as AddTile,Et as AddToArtifact,Vl as AddToFolder,zt as AimpointsTarget,Ve as Airplane,Pi as AlignCenter,ci as AlignJustify,et as AlignLeft,xi as AlignRight,A as AlignmentBottom,Zd as AlignmentHorizontalCenter,Cr as AlignmentLeft,Qt as AlignmentRight,pt as AlignmentTop,Oe as AlignmentVerticalCenter,Zn as Ammunition,Tn as Anchor,fn as Annotation,rc as Announcement,_ as Antenna,gc as AppHeader,Rn as Application,ne as Applications,he as Archive,Yr as AreaOfInterest,fd as Array,U as ArrayBoolean,Ir as ArrayDate,Td as ArrayFloatingPoint,ao as ArrayNumeric,Rd as ArrayObject,$u as ArrayString,Ma as ArrayTimestamp,_s as ArrowBottomLeft,As as ArrowBottomRight,Hc as ArrowDown,Ol as ArrowLeft,is as ArrowRight,Mo as ArrowTopLeft,Bu as ArrowTopRight,kc as ArrowUp,yo as ArrowsArc,mu as ArrowsHorizontal,ml as ArrowsVertical,Ga as Asterisk,Us as At,eu as AutomaticUpdates,el as Axle,Eu as Backlink,Wo as BackwardTen,r as Badge,lr as BanCircle,va as BankAccount,Ki as Barcode,aa as BinaryNumber,Tt as Blank,Bl as BlockPromote,Rt as BlockedPerson,Be as Bold,Ni as Book,si as Bookmark,$e as Box,bi as BranchLocked,k as BranchUnlocked,Xd as Briefcase,Sr as BringData,Zt as BringForward,ft as BritishPound,De as Bug,Xn as Buggy,wn as Build,dn as Bullseye,nc as Calculator,g as Calendar,hc as Camera,Ln as CaretDown,te as CaretLeft,me as CaretRight,Jr as CaretUp,dd as CargoShip,H as CellTower,Fr as Changes,wd as Chart,io as Chat,Ld as ChevronBackward,Qu as ChevronDown,ja as ChevronForward,gs as ChevronLeft,ks as ChevronRight,Vc as ChevronUp,Dl as Circle,rs as CircleArrowDown,jo as CircleArrowLeft,zu as CircleArrowRight,Oc as CircleArrowUp,vo as CircleDashed,pu as Citation,pl as Clean,Wa as Clip,Hs as Clipboard,$l as ClipboardFile,$c as Cloud,Tu as CloudDownload,Uo as CloudServer,f as CloudTick,vr as CloudUpload,Da as Code,ta as CodeBlock,ma as Cog,Pt as CollapseAll,Yl as ColorFill,qt as ColumnLayout,Ye as Comment,Hi as Comparison,gi as Compass,ct as Compressed,ki as Confirm,R as Console,of as ConsoleAlert,jr as Construction,sn as Contrast,xt as Control,Ie as CreditCard,ar as Crop,Nn as Cross,bn as CrossCircle,dc as Crown,T as CrystalBall,wc as CssStyle,Kn as Cube,ue as CubeAdd,Ce as CubeCutout,ri as CubeCutouts,bd as CubeEdit,Z as CubeRemove,Wr as Cubes,Nd as CurlyBraces,mo as CurvedRangeChart,Kd as Cut,sd as Cycle,Ba as Dashboard,Ts as DataCloud,Rs as DataConnection,Xc as DataLineage,Il as DataSearch,fs as DataSync,Bo as Database,Ju as Delete,Lc as DeleteClip,Do as Delta,Su as DeriveColumn,Cl as Descendant,eo as Desktop,Qs as Detection,lu as Diagnosis,ll as DiagramTree,Fu as DirectionLeft,$o as DirectionRight,o as Disable,fr as Divide,xa as Document,Yi as DocumentCode,ca as DocumentLocked,Ot as DocumentOpen,Ul as DocumentShare,Vt as Dollar,Ue as Dot,Ii as DoubleCaretHorizontal,ui as DoubleCaretVertical,nt as DoubleChevronDown,Ci as DoubleChevronLeft,M as DoubleChevronRight,$d as DoubleChevronUp,Tr as DoughnutChart,en as Download,ht as DragHandleHorizontal,Ae as DragHandleVertical,$n as Draw,Dn as DrawerLeft,mn as DrawerLeftFilled,ac as DrawerRight,y as DrawerRightFilled,vc as DriveTime,Bn as Drone,ie as DroneUav,_e as Duplicate,Zr as Edit,md as Eject,G as Emoji,Rr as Endnote,Dd as Endorsed,so as Engagement,Bd as Envelope,td as Equals,Pa as Eraser,ys as Error,Ms as Euro,Wc as Excavator,Al as Exchange,os as ExcludeRow,Po as ExpandAll,Hu as Explain,jc as Export,xo as EyeOff,gu as EyeOn,gl as EyeOpen,qa as FastBackward,Gs as FastForward,nu as Feed,nl as FeedSubscribed,Ou as FighterJet,Ko as Film,n as Filter,cr as FilterKeep,_a as FilterList,Gi as FilterOpen,ia as FilterRemove,wt as FilterSortAsc,zl as FilterSortDesc,Lt as Flag,ze as Flame,Mi as Flash,oi as FloatingPoint,Qe as FloppyDisk,yi as FlowBranch,O as FlowEnd,Yd as FlowLinear,xr as FlowReview,Xt as FlowReviewBranch,dt as Flows,Ee as FolderClose,Yn as FolderNew,Cn as FolderOpen,un as FolderShared,tc as FolderSharedOpen,h as Follower,mc as Following,In as Font,ee as Fork,pe as ForkEnd,qr as Form,ud as ForwardTen,V as FrameToFrame,Pr as Fuel,Cd as FullCircle,ro as FullStackedChart,Id as Fullscreen,Zu as Function,Aa as FunctionMinimal,hs as GanttChart,Os as Generate,Bc as Geofence,El as Geolocation,ns as Geosearch,Ao as Geotime,Ru as GiftBox,Dc as GitBranch,_o as GitCommit,fu as GitMerge,fl as GitNewBranch,Ua as GitPull,Vs as GitPush,Ql as GitRebase,Qc as GitRepo,wu as Glass,Ho as Globe,u as GlobeNetwork,gr as GlobeNetworkAdd,Ta as Graph,$i as GraphRemove,fa as GreaterThan,Mt as GreaterThanOrEqualTo,ql as Grid,Gt as GridView,qe as GroupItem,Bi as GroupObjects,mi as GroupedBarChart,ot as Hand,Di as HandDown,I as HandLeft,rf as HandRight,kr as HandUp,an as Hat,yt as Header,Pe as HeaderOne,rr as HeaderThree,jn as HeaderTwo,vn as Headset,lc as Heart,C as HeartBroken,Sc as HeatGrid,Wn as Heatmap,ce as Helicopter,xe as Help,ti as HelperManagement,vd as Hexagon,Y as HighPriority,Hr as HighVoltagePole,jd as Highlight,fo as History,Wd as Home,ad as HorizontalBarChart,Ra as HorizontalBarChartAsc,Cs as HorizontalBarChartDesc,Is as HorizontalDistribution,Jc as HorizontalInbetween,Pl as Hurricane,us as IdNumber,Ro as ImageRotateLeft,Ku as ImageRotateRight,Fc as Import,To as Inbox,bu as InboxFiltered,xl as InboxGeo,Qa as InboxSearch,Xs as InboxUpdate,su as InfoSign,sl as Inheritance,Nu as InheritedGroup,Zo as InnerJoin,c as Input,mr as Insert,Ca as Intelligence,Zi as Intersection,ua as IpAddress,At as Issue,Gl as IssueClosed,Ut as IssueNew,Ge as Italic,Ri as JoinTable,fi as Key,it as KeyBackspace,Ti as KeyCommand,P as KeyControl,tf as KeyDelete,Dr as KeyEnter,nn as KeyEscape,_t as KeyOption,Me as KeyShift,tr as KeyTab,kn as KnownVehicle,gn as LabTest,sc as Label,x as Layer,bc as LayerOutline,Hn as Layers,oe as Layout,ye as LayoutAuto,$r as LayoutBalloon,gd as LayoutBottomRowThreeTiles,q as LayoutBottomRowTwoTiles,Br as LayoutCircle,kd as LayoutGrid,lo as LayoutGroupBy,Hd as LayoutHierarchy,rd as LayoutLeftColumnThreeTiles,Ia as LayoutLeftColumnTwoTiles,xs as LayoutLinear,Ps as LayoutRightColumnThreeTiles,Kc as LayoutRightColumnTwoTiles,Ml as LayoutSkewGrid,cs as LayoutSortedClusters,Io as LayoutThreeColumns,Wu as LayoutThreeRows,Nc as LayoutTopRowThreeTiles,Co as LayoutTopRowTwoTiles,vu as LayoutTwoColumns,vl as LayoutTwoRows,Ya as Learning,qs as LeftJoin,iu as LengthenText,il as LessThan,Au as LessThanOrEqualTo,Jo as Lifesaver,t as Lightbulb,sr as Lightning,ga as Link,Wi as LinkedSquares,ra as List,Ct as ListColumns,Rl as ListDetailView,It as Locate,Re as Lock,ji as Locomotive,ai as LogIn,Ze as LogOut,vi as LowVoltagePole,D as Manual,Jd as ManuallyEnteredData,br as ManyToMany,Yt as ManyToOne,ut as Map,Te as MapCreate,Jn as MapMarker,Sn as Markdown,ln as Maximize,ec as Media,m as Menu,pc as MenuClosed,Fn as MenuOpen,$ as MergeColumns,fe as MergeLinks,Kr as Microphone,ld as Minimize,B as Minus,Nr as MobilePhone,Sd as MobileVideo,no as Modal,Fd as ModalFilled,Xu as Model,ka as Moon,ms as More,Ds as Mountain,zc as Move,Tl as Mugshot,ts as MultiSelect,ko as Music,Lu as Nest,Ec as NewComment,go as NewDrawing,du as NewGridItem,dl as NewLayer,Ha as NewLayers,Bs as NewLink,Zl as NewObject,Zc as NewPerson,Cu as NewPrescription,Vo as NewShield,a as NewTextBox,dr as Ninja,ba as NotEqualTo,Ji as Notifications,sa as NotificationsAdd,Dt as NotificationsSnooze,Hl as NotificationsUpdated,Bt as NumberedList,He as Numerical,Fi as ObjectView,li as Office,tt as Offline,Si as OilField,j as OneColumn,Qd as OneToMany,wr as OneToOne,$t as OpenApplication,mt as Outdated,ke as OuterJoin,Qn as Output,En as Package,pn as PageBreak,ic as PageLayout,v as Panel,_c as PanelStats,zn as PanelTable,re as Paperclip,ge as Paragraph,Xr as PasteVariable,pd as Path,W as PathSearch,Lr as Pause,Ed as People,oo as Percentage,zd as Person,ed as Phone,Na as PhoneCall,vs as PhoneForward,js as PhoneSearch,Uc as PieChart,kl as Pill,as as Pin,No as Pistol,Vu as Pivot,Ac as PivotTable,bo as Play,hu as Playbook,hl as Plus,Ka as PolygonFilter,Ws as Popout,tu as Power,tl as PredictiveAnalysis,Du as Prescription,Go as Presentation,l as Print,hr as Projects,wa as Properties,Qi as Property,da as PublishFunction,jt as Pulse,Kl as Rain,Wt as Random,Ke as RangeRing,zi as Record,pi as RectHeight,at as RectWidth,Ei as Rectangle,F as Redo,nf as Refresh,Or as RefreshOff,rn as Regex,vt as RegressionChart,Ne as Remove,nr as RemoveColumn,An as RemoveColumnLeft,_n as RemoveColumnRight,cc as RemoveRowBottom,S as RemoveRowTop,xc as Repeat,Un as Reset,se as Resolve,be as Rig,ei as RightJoin,_d as Ring,J as Rocket,Vr as RocketSlant,Ad as RootFolder,uo as RotateCcw,Ud as RotateCw,id as RotateDocument,La as RotatePage,Ss as Route,Fs as RunHistory,qc as Satellite,Nl as Saved,ls as ScatterPlot,Lo as Search,Gu as SearchAround,Pc as SearchTemplate,wo as SearchText,yu as SegmentedControl,bl as Select,Za as Selection,Ys as SelectionBox,ou as SelectionBoxAdd,ol as SelectionBoxEdit,Mu as SelectionBoxRemove,Xo as SendBackward,s as SendMessage,pr as SendTo,Sa as SendToGraph,Xi as SendToMap,la as Sensor,kt as SeriesAdd,Wl as SeriesConfiguration,Ht as SeriesDerived,We as SeriesFiltered,Li as SeriesSearch,di as Server,rt as ServerInstall,wi as Settings,N as Shapes,ef as Share,Er as SharedFilter,tn as Shield,gt as Ship,je as Shop,er as ShoppingCart,On as ShortenText,hn as SignalSearch,oc as SimCard,b as Slash,yc as SmallCross,Vn as SmallInfoSign,ae as SmallMinus,ve as SmallPlus,Qr as SmallSquare,hd as SmallTick,K as Snowflake,zr as SoccerBall,Od as SocialMedia,co as Sort,Vd as SortAlphabetical,nd as SortAlphabeticalDesc,Fa as SortAsc,bs as SortDesc,Ns as SortNumerical,Gc as SortNumericalDesc,jl as SpellCheck,ss as Spin,Fo as SplitColumns,Uu as SportsStadium,Mc as Square,So as StackedChart,_u as StadiumGeometry,_l as Star,Ja as StarEmpty,Ks as StepBackward,ru as StepChart,rl as StepForward,ku as Stop,qo as Stopwatch,d as Strikethrough,_r as Style,Ea as Subscript,ea as SubtractRightJoin,pa as Superscript,Nt as SwapHorizontal,Jl as SwapVertical,Kt as Sweep,Je as Switch,Vi as SymbolCircle,hi as SymbolCross,st as SymbolDiamond,Oi as SymbolRectangle,L as SymbolSquare,af as SymbolTriangleDown,Ar as SymbolTriangleUp,on as Syringe,bt as TableSync,Fe as Tag,ir as TagAdd,Mn as TagPromote,yn as TagRefresh,uc as TagUndo,w as Tags,Cc as TakeAction,Gn as Tank,le as Target,Se as Taxi,ni as Team,yd as Temperature,X as TextHighlight,Ur as Th,Md as ThAdd,po as ThDerived,Gd as ThDisconnect,od as ThFiltered,za as ThList,ws as ThListAdd,Ls as ThVirtual,Yc as ThVirtualAdd,Fl as ThirdParty,ds as ThumbsDown,zo as ThumbsUp,qu as Tick,Ic as TickCircle,Eo as Time,xu as TimelineAreaChart,Sl as TimelineBarChart,$a as TimelineEvents,Zs as TimelineLineChart,cu as Tint,cl as Torch,Pu as Tractor,Qo as Train,e as Translate,or as Trash,ha as Tree,Ui as TrendingDown,na as TrendingUp,St as Trophy,Ll as Truck,Ft as TwoColumns,Le as Unarchive,Ai as Underline,ii as Undo,Xe as UngroupObjects,_i as UnknownVehicle,E as Unlink,qd as Unlock,yr as Unpin,Jt as Unresolve,lt as Updated,we as Upload,qn as User,xn as Variable,cn as VariableLayer,$s as Vector,p as VerticalBarChartAsc,fc as VerticalBarChartDesc,Pn as VerticalDistribution,Q as VerticalInbetween,de as Video,Gr as Virus,cd as VolumeDown,z as VolumeOff,Mr as VolumeUp,xd as Walk,to as WarningSign,Pd as WaterfallChart,Yu as Waves,Oa as Widget,ps as WidgetButton,Es as WidgetFooter,Rc as WidgetHeader,wl as Wind,es as Won,Oo as WrapLines,Iu as Wrench,Tc as WrenchRedo,ho as WrenchSnooze,uu as WrenchTime,ul as Yen,Va as ZoomIn,zs as ZoomOut,Xl as ZoomToFit};
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n&&t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=e=>t=>l(t.default,e);export{l as i,s as n,u as r,o as t};
@@ -0,0 +1,10 @@
1
+ const e={account:`Аккаунт`,logout:`Выйти`,selectProfile:`Выбрать профиль`,add:`Добавить`,newProfileName:`Имя нового профиля...`,profileNameFormatTip:`Совет по названию: 1-30 символов, не должно совпадать с существующими`,profileLimitExceeded:`Достигнут лимит профилей (макс. {{max}})`,profileNameExists:`Профиль с таким именем уже существует`,profileNameFormatError:`Неверный формат имени профиля`,create:`Создать`,welcome:`Добро пожаловать`,createProfileToStart:`Создайте профиль, чтобы начать.`,loading:`Загрузка...`,errorNetwork:`Сетевая ошибка`,confirmDelete:`Вы уверены, что хотите удалить этот профиль?`,confirmLogout:`Вы уверены, что хотите выйти?`,notFound:`404 - Страница не найдена`,notFoundDesc:`Страница, которую вы пытаетесь открыть, не существует или была удалена.`,backToHome:`На главную`,apac:`APAC`,mainlandChina:`Китай`,HongKong:`Гонконг`,Singapore:`Сингапур`,Tokyo:`Токио`,NorthAmerica:`Северная Америка`,nae:`США, восток`,naw:`США, запад`,eu:`Европа`,invalidFormat:`Неверный формат файла`,import:`Импорт`,importSuccess:`Профиль успешно импортирован`,importError:`Ошибка импорта профиля, проверьте формат и попробуйте позже`,save:`Сохранить`,saveSuccess:`Настройки сохранены`},t={setup:`Установка`,rules:`Правила`,stats:`Статистика`,logs:`Логи`,filter:`Фильтры`,settings:`Настройки`},n={light:`Светлая`,dark:`Темная`,system:`Системная`},r=JSON.parse(`{"login":"Войти в DNS Worker","signup":"Создайте аккаунт, чтобы начать","welcomeBack":"С возвращением, введите учетные данные","protectInternet":"Защитите ваш первый прыжок в интернет","error":"Ошибка","username":"Имя пользователя","usernamePlaceholder":"Ваше имя пользователя","password":"Пароль","passwordPlaceholder":"Ваш пароль","loginBtn":"Войти","signupBtn":"Зарегистрироваться","totpVerification":"TOTP проверка","noAccount":"Нет аккаунта? Зарегистрируйтесь","haveAccount":"Уже есть аккаунт? Войти","formatTipUsername":"Формат имени: 5-32 символа (Unix-стиль: буквы, цифры, _, -)","formatTipPassword":"Формат пароля: 12-100 символов","authFailed":"Ошибка аутентификации, проверьте логин или пароль","networkError":"Сетевая ошибка, попробуйте позже","turnstileRequired":"Пожалуйста, пройдите проверку (CAPTCHA)","turnstileError":"Ошибка загрузки сервиса проверки, проверьте Site Key или конфигурацию домена","verifying":"Выполняется проверка безопасности...","passwordLeaked":"Ваш пароль был скомпрометирован. Для безопасности используйте случайный/сильный пароль.","usernameExists":"Имя пользователя уже занято, выберите другое.","skip":"Пропустить","showPassword":"Показать пароль","hidePassword":"Скрыть пароль","geolocationRequired":"Ошибка геолокации. Пожалуйста, попробуйте войти снова.","unauthorizedDefault":"Ваша сессия истекла, войдите снова.","unauthorizedGeo":"Обнаружено изменение геолокации, сессия завершена.","unauthorizedExpired":"Сессия истекла, войдите снова.","unauthorizedReuse":"Безопасность: обнаружен повторный вход, сессия завершена.","unauthorizedRevoked":"Ваша сессия была отозвана, войдите снова.","sessionLockTitle":"Блокировка неактивной сессии","sessionLockDesc":"Блокирует интерфейс 4-значным PIN-кодом, когда приложение неактивно, для защиты активных сессий от несанкционированного физического доступа.","enableSessionLock":"Включить блокировку сессии","inactivityTimeout":"Тайм-аут неактивности","timeout1m":"1 минута","timeout2m":"2 минуты","timeout5m":"5 минут","timeout15m":"15 минут","timeout30m":"30 минут","timeout60m":"60 минут","changePin":"Изменить PIN","disablePin":"Отключить блокировку сессии","configurePin":"Настроить PIN","newPin":"Новый 4-значный PIN","pinHelper":"Только цифры, например, 1234","confirmPin":"Подтвердить новый PIN","verifyIdentity":"Подтвердить личность","usePassword":"Использовать пароль","use2fa":"Использовать код TOTP","totpCode":"Код TOTP","currentPassword":"Текущий пароль","disablePinWarning":"Отключение PIN-кода полностью отключит функцию автоматической блокировки неактивной сессии.","pinFormatTip":"PIN-код должен состоять ровно из 4 цифр","pinMatchTip":"PIN-коды не совпадают","passwordRequired":"Для подтверждения требуется пароль","sessionLocked":"Сессия заблокирована из-за неактивности","sessionExpired":"Слишком много неудачных попыток. Сессия завершена.","pinIncorrect":"Неверный PIN-код","attemptsRemaining":"Осталось попыток: {{count}}","logoutAndReturn":"Выйти из сессии","lockNow":"Заблокировать сейчас","cfErrorWithDetails":"Ошибка Cloudflare Edge (Ошибка {{code}}: {{desc}}). Сервис временно недоступен, повторите попытку позже. {{rayId}}","cfErrorCodeOnly":"Ошибка Cloudflare Edge (Ошибка {{code}}). Сервис временно недоступен. {{rayId}}","cfErrorGeneric":"Ошибка Cloudflare Edge, сервис временно недоступен. Повторите попытку позже. {{rayId}}","htmlErrorGeneric":"Сервер вернул непредвиденный ответ (HTTP {{status}}). Повторите попытку позже.","tooManyAttempts":"Слишком много запросов или попыток. Пожалуйста, повторите попытку позже.","dbQuotaExceeded":"Превышена дневная квота чтения базы данных. Дождитесь ежедневного сброса.","noUsersRegistered":"Учётные записи отсутствуют. Пожалуйста, зарегистрируйтесь в качестве администратора.","registerAdminTitle":"Регистрация учётной записи администратора","registerAdminDesc":"В системе нет учётных записей. Первый пользователь станет системным администратором.","goToRegisterAdmin":"Зарегистрировать админа","dbNotInitialized":"База данных не инициализирована или отсутствуют таблицы. Выполните npm run db:migrate:prod в терминале.","verifyWithPasskey":"Подтвердить с помощью Passkey","orUseTotp":"Или используйте код аутентификатора","passwordRequiredFirst":"Сначала введите пароль","passkeyVerification":"Верификация Passkey","passkeyPromptDesc":"Подтвердите с помощью биометрии или ключа безопасности","forgotPassword":"Забыли пароль?","forgotPasswordTitle":"Сброс пароля","forgotPasswordDesc":"Безопасно восстановите доступ к аккаунту с помощью многофакторной аутентификации (Passkey или TOTP).","noMfaContactAdmin":"Для этого аккаунта не настроена многофакторная аутентификация (Passkey или TOTP). Обратитесь к системному администратору.","chooseMfaForReset":"Выберите способ подтверждения личности:","authViaPasskey":"Подтвердить с помощью Passkey","authViaPasskeyDesc":"Быстрая аутентификация по биометрии или аппаратному ключу","authViaTotp":"Подтвердить через приложение (TOTP)","authViaTotpDesc":"Введите 6-значный код из приложения аутентификатора","authViaRecoveryKey":"Использовать аварийный ключ восстановления","authViaRecoveryKeyDesc":"Введите 10-значный аварийный ключ восстановления","verifyAndProceed":"Проверить и продолжить","setNewPassword":"Установить новый пароль","setNewPasswordDesc":"Личность подтверждена. Пожалуйста, задайте новый пароль для вашего аккаунта.","newPassword":"Новый пароль","confirmNewPassword":"Подтвердите новый пароль","passwordMismatch":"Пароли не совпадают","saveAndReset":"Сохранить и сбросить","resetSuccessTitle":"Пароль успешно сброшен","resetSuccessDesc":"Пароль обновлен, все предыдущие сессии завершены. Войдите с новым паролем.","goToLogin":"Перейти ко входу","mfaSetupTitle":"Повышение безопасности аккаунта","mfaSetupDesc":"Настройка многофакторной аутентификации (MFA) защищает аккаунт и открывает беспарольный вход.","mfaRecommended":"Рекомендуется","passkeySignupDesc":"Используйте отпечаток пальца, сканирование лица или ключ безопасности. Быстро и надежно.","bindPasskeyNow":"Зарегистрировать Passkey","mfaUniversal":"Универсально","totpSignupDesc":"Используйте Google Authenticator, 1Password или любое стандартное приложение.","setupTotpBtn":"Настроить приложение-аутентификатор","skipMfaSetup":"Пропустить и завершить","backToMfaOptions":"Назад к вариантам","otherOptions":"Другие варианты","next":"Далее","mfaVerification":"Многофакторная аутентификация","totpPrompt":"Введите 6-значный динамический код из приложения аутентификации","recoveryPrompt":"Введите 30-значный ключ восстановления (5 групп по 6 цифр)","recoveryChecksumError":"Ошибка контрольной суммы: эта группа не делится на 11","recoveryChecksumErrorDesc":"Ошибка контрольной суммы в группе {{groups}}, проверьте и повторите попытку","backToPasskey":"Вернуться к аутентификации по Passkey","recoveryKeyRequired":"Пожалуйста, введите ваш ключ восстановления","totpFormatError":"Пожалуйста, введите действительный 6-значный код","registrationDisabledTitle":"Регистрация отключена","registrationDisabledDesc":"Регистрация новых пользователей в настоящее время закрыта. Обратитесь к администратору для получения учетной записи.","backToLogin":"Вернуться ко входу","jwtSecretPreset":"Обнаружен предустановленный JWT_SECRET. Пожалуйста, измените предустановленный JWT_SECRET в переменных окружения перед развертыванием.","jwtSecretMissing":"Отсутствует JWT_SECRET. Пожалуйста, настройте безопасный ключ в переменных окружения перед развертыванием.","jwtSecretInvalid":"Неверный формат JWT_SECRET, проверьте настройки."}`),i={title:`Руководство по установке`,subtitle:`Настройте устройство для использования DNS Worker.`,regionOptimization:`Оптимизация региона (Windows)`,otherRegion:`Другие регионы`,copied:`Скопировано в буфер`,verifyConnection:`Проверить подключение`,verifying:`Проверка...`,connected:`Подключено`,notConnected:`Не подключено`,profileMatch:`Фильтрация через этот профиль активна.`,profileMismatch:`Obex используется, но ID профиля не совпадает.`,verifyHint:`После настройки нажмите кнопку для проверки.`,refreshStatus:`Обновить статус`,egressIp:`Исходящий IP`,currentLocation:`Текущее местоположение`,edgeServer:`Edge-сервер`,dohUrlTitle:`Текущий URL DoH`,accessPointTitle:`Access DoH URL`,defaultAccessPointName:`Устройство-1`,moreAccessPoints:`Еще точки доступа ↗`,accessPointName:`Имя точки доступа`,accessPointToken:`Ключ доступа`,addAccessPoint:`Добавить точку`,renameAccessPoint:`Переименовать`,rotateToken:`Ротация ключа`,rotateTokenConfirmDesc:`Ротация отключит все устройства со старым ключом. Продолжить?`,deleteAccessPoint:`Удалить`,deleteAccessPointConfirm:`Удалить эту точку доступа?`,manageAccessPoints:`Управление точками доступа`,searchAccessPoints:`Поиск точек доступа...`,accessPointNameExists:`Имя точки уже занято`,accessPointCreated:`Точка доступа создана`,accessPointRenamed:`Точка переименована`,accessPointDeleted:`Точка удалена`,accessPointNameFormatTip:`Имя: 1-30 символов (буквы, цифры, _, -)`,accessPointLimitExceeded:`Достигнут лимит (макс. {{max}})`,tokenRotated:`Ключ доступа обновлен`,whatIsDoh:`Что такое DoH?`,dohDesc:`DNS over HTTPS (DoH) — технология резолвинга через зашифрованный HTTPS.`,dohBenefit1:`Защита от перехвата провайдерами`,dohBenefit2:`Повышение безопасности DNS`,learnMore:`Подробнее`,copyUrl:`Копировать URL`,browsers:`Браузеры`,browserTitle:`Настройка браузеров (Chrome/Edge)`,browserSteps:`Настройки > Приватность и безопасность > Безопасность > Безопасный DNS > Пользовательский > Вставьте URL.`,browserTips:`Или вставьте URL в адресную строку:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Настройка Apple через профиль конфигурации.`,appleWarning:`Профили нельзя установить в "Режиме блокировки (Lockdown Mode)".`,downloadConfig:`Скачать профиль`,appleInstallHint:`После скачивания: Настройки > Профили для установки`,windows:`MS Windows`,windowsTitle:`Windows 11 [Регион: {{region}}]`,windowsStep0:`Настройки > Сеть и Интернет`,windowsStep1:`Свойства > DNS-серверы > Изменить > Вручную.`,windowsStep2:`Выберите и введите DNS IP:`,windowsStep3:`Включите DoH (пользовательский шаблон) и вставьте URL.`,windowsStep4:`Отключите откат к незашифрованному DNS.`,android:`Android`,androidTitle:`Android 9+`,androidDesc:`Поддерживает системный «Частный DNS» (DoT) или сторонние приложения для DoH.`,androidDotTitle:`Частный DNS (DoT - режим Serverfull)`,androidDotDesc:`Настройки > Сеть и интернет > Частный DNS > Имя хоста поставщика частного DNS:`,androidWarning:`Примечание: системный «Частный DNS» Android использует протокол DoT. При развертывании в Cloudflare Workers используйте приложения вроде Intra для DoH. В режиме Serverfull с настроенным TLS вы можете напрямую использовать указанное выше имя хоста DoT.`,dynamicFromDomain:`Динамический (из "{{domain}}")`,dynamicFromDomainV6:`Динамический IPv6 (из "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH прокси)`,linuxDesc:`Локальный DNS прокси для шифрования запросов.`,linuxStep1:`Запустите скрипт для установки cloudflared и создания systemd-сервиса (слушает 127.0.0.1:53).`,linuxStep2:`Установите системный DNS на 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Используйте этот резолвер для всех устройств в сети, указав его в качестве DoH-сервера роутера.`,routerosStep1:`Выполните в терминале RouterOS (RouterOS 7):`,routerosNote:`Запросы, пересылаемые роутером, отображаются в журналах как запросы роутера, а не отдельных устройств. Если нужны журналы по устройствам, настройте устройства напрямую.`,routerosDocs:`Документация MikroTik по DNS`,accessPointsCardTitle:`Точки доступа`,currentAccessPoint:`Текущая точка доступа`,selectAccessPointToConfigure:`Выберите точку доступа для настройки`},a={title:`Пользовательские правила`,subtitle:`Управление резолвингом доменов (блокировка, разрешение, перенаправление).`,action:`Действие`,typeBlock:`Блокировать (BLOCK)`,typeAllow:`Разрешить (ALLOW)`,typeRedirect:`Перенаправить (REDIRECT)`,pattern:`Шаблон домена`,patternPlaceholder:`example.com или *.test.com`,addRule:`Добавить правило`,redirectSettings:`Настройки перенаправления`,aRecord:`A запись (IPv4)`,aaaaRecord:`AAAA запись (IPv6)`,cnameRecord:`CNAME запись`,txtRecord:`TXT запись`,optional:`(опционально)`,ipv4Placeholder:`Напр: 1.2.3.4`,ipv6Placeholder:`Напр: 2001:db8::1`,cnamePlaceholder:`Напр: target.com`,txtPlaceholder:`Введите текст...`,saveRedirectRule:`Сохранить правило перенаправления`,noRulesTitle:`Нет правил`,noRulesDesc:`Вы еще не добавили пользовательских правил.`,tableAction:`Действие`,tablePattern:`Шаблон`,tableDetails:`Детали`,tableOps:`Опции`,labelBlock:`Блок`,labelAllow:`Разрешить`,labelRedirect:`Перенапр.`,detailBlock:`Заблокировано`,detailAllow:`Разрешено`,patternEmpty:`Шаблон домена не может быть пустым`,duplicatePattern:`Правило для этого домена уже существует`,addSuccess:`Правило добавлено`,addFailed:`Ошибка добавления правила`,updateSuccess:`Правило обновлено`,updateFailed:`Ошибка обновления правила`,tableCreatedAt:`Дата добавления`,clickToSort:`Нажмите для сортировки`},o={customRange:`Произвольный период`,startTime:`Начало`,endTime:`Конец`,apply:`Применить`,custom:`Свой`,totalQueries:`Всего запросов`,blocked:`Заблокировано`,redirected:`Перенаправлено`,blockRate:`Процент блокировок`,activeDevices:`Активные устройства`,activeIPs:`Активные IP`,queryTrend:`Тренд запросов`,noRecords:`Нет записей за этот период`,topAllowed:`Частые (Разрешенные)`,topBlocked:`Частые (Блокировки)`,noData:`Нет данных`,clientActivity:`Активность клиентов`,ipAddress:`IP-адрес`,location:`Локация`,queries:`Запросы`,destinationDistribution:`Распределение по направлениям`,requests:`Запросы`,topIsps:`Основные провайдеры`,pressToShowMore:`Нажмите, чтобы показать еще`,maximize:`Увеличить`,minimize:`Уменьшить`},s={title:`Логи запросов`,subtitle:`Просмотр истории DNS и блокировок.`,realtime:`В реальном времени`,allStatus:`Все статусы`,onlyPass:`Разрешенные`,onlyBlock:`Блокировки`,onlyRedirect:`Перенаправления`,searchPlaceholder:`Поиск домена...`,noResults:`Результатов не найдено`,noRecords:`Нет записей`,noResultsDesc:`Нет записей для домена "{{query}}".`,noRecordsDesc:`DNS-запросов за выбранный период не поступало.`,tableTime:`Время`,tableDomain:`Домен`,tableAnswer:`Ответ`,tableSource:`Источник`,tableType:`Тип`,tableStatus:`Статус`,tableReason:`Причина`,loadedAll:`Загружено записей: {{count}}`,realtimeLoadMoreTip:`Отключите «Реальное время» для загрузки еще`,filterAccessPoint:`Точка доступа`,allAccessPoint:`Все точки`,allCountry:`Все страны`,filterCountry:`Страна назначения`,allIsp:`Все провайдеры`,filterIsp:`Провайдер`,timeRange:`Временной диапазон`,clearFilters:`Очистить фильтры`,details:`Детали запроса`,detailAccessPoint:`Точка доступа`,basicInfo:`Базовая информация`,detailDomain:`Домен`,detailType:`Тип`,detailTime:`Время`,detailLatency:`Задержка`,detailProfile:`Используемый профиль`,detailStatus:`Статус`,detailUpstream:`Upstream-сервер`,detailReason:`Причина`,detailNoReason:`Нет (разрешено)`,detailECS:`ECS`,resolutionResult:`Результат резолвинга`,noResult:`Нет результата`,networkDetails:`Сетевые детали`,clientSource:`Клиент (источник)`,destination:`Назначение (IP)`,quickActions:`Быстрые действия`,actionAllow:`Разрешить`,actionBlock:`Блокировать`,actionRedirect:`Перенаправить`,statusPass:`Разрешено`,statusBlock:`Блок`,statusRedirect:`Перенаправлено`,export:`Экспорт журналов`,rewritten:`Перезаписано`,logDetails:`Подробности журнала`,searchCountry:`Поиск стран...`,noMatchingCountries:`Подходящие страны не найдены`,searchIsp:`Поиск провайдера...`,noMatchingIsps:`Подходящие провайдеры не найдены`,loadingIsps:`Загрузка провайдеров...`,loggingDisabledTitle:`Ведение журнала отключено`,loggingDisabledDesc:`Хранение журналов для этого профиля отключено. Журналы запросов не записываются. Чтобы просмотреть журналы, включите хранение журналов в настройках.`},c={title:`Внешние списки фильтрации`,subtitle:`Подписки на сторонние списки (напр. AdGuard).`,formatDisclaimer:`Поддерживаются форматы AdGuard и обычные hosts-файлы. Поддерживаются базовые правила (||example.com^), обход «@@» белых списков, поддержка «$» и «*» не реализована. Домены матчатся со всеми поддоменами.`,syncAll:`Синхронизировать все`,urlPlaceholder:`URL списка...`,addSubscription:`Добавить подписку`,supportedFormats:`Поддерживаемые форматы:`,formatAdGuard:`Совместимо с ||domain.com^.`,formatHosts:`Совместимо с hosts (0.0.0.0 domain.com).`,noListsTitle:`Нет списков`,noListsDesc:`Вы еще не подписались ни на один список.`,tableUrl:`URL списка`,tableLastSync:`Последняя синхронизация`,tableStatus:`Статус`,tableOps:`Опции`,neverSynced:`Никогда`,enabled:`Норма`,disabled:`Ошибка синхронизации`,statusNormal:`Нормально`,statusDisabled:`Отключён`,statusOutdated:`Устарело`,statusMissing:`Отсутствует`,presetOisdBig:`OISD Big (Реклама/Малевэр)`,presetOisdNsfw:`OISD NSFW (Контент 18+)`,presetAdGuard:`AdGuard AdServers`,presetStevenBlack:`StevenBlack Hosts (Комбинированный)`,syncTaskStarted:`Синхронизация запущена`,syncCheckComplete:`Синхронизация завершена`,syncTaskFailed:`Ошибка синхронизации`,syncing:`Синхронизация...`,syncSuccess:`Синхронизировано`,syncError:`Ошибка`,syncErrorDesc:`Не удалось скачать список. Проверьте URL.`,deleteConfirm:`Удалить подписку?`,deleteSuccess:`Список удален`,deleteError:`Ошибка удаления`,addSuccess:`Список добавлен`,addError:`Ошибка добавления`,listEnabled:`Список активен`,listEnabledHint:`Отключите, чтобы прекратить фильтрацию по этому списку, не удаляя его. Подписка и история синхронизации сохраняются.`,listEnabledToast:`Список включён - фильтр пересобирается`,listDisabledToast:`Список отключён - фильтр пересобирается`,checkDomain:`Проверить домен`,checkDomainHint:`Списки хранятся в виде компактных фильтров, поэтому их записи нельзя просмотреть. Вы можете мгновенно проверить любой домен по этому списку.`,check:`Проверить`,checkBlocked:`Заблокировано этим списком`,checkNotBlocked:`Не заблокировано этим списком`,checkViaParent:`(совпадение по родительскому домену)`,checkNotSynced:`Этот список ещё не завершил синхронизацию, поэтому проверять пока нечего.`,checkListDisabled:`Этот список сейчас отключён, поэтому он ничего не фильтрует.`,checkProbabilisticRate:`Фильтры вероятностные: примерно 1 совпадение из {{odds}} - ложное срабатывание. Добавление исключения также покрывает все его поддомены.`,checkProbabilistic:`Фильтры вероятностные, поэтому небольшая часть совпадений - ложные срабатывания. Добавление исключения также покрывает все его поддомены.`,checkAllowAction:`Всё равно разрешить`,checkAllowed:`Исключение добавлено - теперь этот домен разрешается`,allowRuleAdded:`Исключение добавлено для {{domain}}`},l={title:`Настройки конфигурации`,subtitle:`Управление политикой DNS.`,saveChanges:`Сохранить`,saveSuccess:`Настройки сохранены`,saveError:`Ошибка сохранения`,upstreamTitle:`Upstream-серверы`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`Классический DNS`,httpsOnly:`Только HTTPS`,upstreamDesc:`Все незаблокированные запросы будут пересылаться на этот сервер. Поддерживает DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) или классический DNS. Классический DNS передается через TCP.`,defaultPolicyTitle:`Фильтрация по умолчанию`,onNoMatch:`Если правил нет`,allowAll:`Разрешать всё`,blockAll:`Блокировать всё`,logRetentionTitle:`Хранение логов`,retentionDuration:`Срок хранения`,retentionDesc:`Журналы удаляются автоматически. `,skipLogOnPass:`Не записывать разрешенные запросы`,skipLogOnPassDesc:`Если включено, обычные разрешенные запросы не записываются в журнал. Сохраняются только заблокированные, перенаправленные или неудачные запросы.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`ECS-подсеть, отправляемая на upstream-сервер`,sendEcs:`Использовать ECS`,customSubnet:`Пользовательская подсеть`,customIpv4:`IPv4`,customIpv6:`IPv6`,ipv4Hint:`(напр. 1.2.3.0/24)`,ipv6Hint:`(напр. 2001:db8::/32)`,testToolTitle:`Инструмент проверки`,testDomain:`Домен`,recordType:`Тип записи`,runTest:`Тест`,domainPlaceholder:`Напр. google.com`,hitRule:`Сработавшее правило`,defaultAllow:`Политика по умолчанию`,parseLatency:`Задержка`,sourceIp:`Исходный IP`,answerSection:`Ответ (Answer Section)`,noRecordsReturned:`Записей не возвращено.`,diagnostics:`Диагностика`,errorDetail:`Сведения об ошибке`,upstreamResponse:`Ответ вышестоящего сервера`,presetCloudflareSecurity:`Cloudflare Security`,presetCloudflareFamilies:`Cloudflare Families`,presetQuad9:`Quad9`,presetQuad9Ecs:`Quad9 ECS`,presetControlDFree:`ControlD Free`,presetControlDUncensored:`ControlD Uncensored`,presetAdGuard:`AdGuard`,presetAdGuardFamily:`AdGuard Family`,retention10m:`10 минут`,retention1h:`1 час`,retention24h:`24 часа`,retention7d:`7 дней`,retention30d:`30 дней`,retention90d:`90 дней (Максимум)`,blockModeTitle:`Режим ответа при блокировке`,blockModeDesc:`Что возвращать при блокировке`,default:`По умолч.`,NXDOMAIN:`NXDOMAIN`,NODATA:`NODATA`,customIP:`Свой IP`,export:`Экспорт`,exportSuccess:`Успешно`,exportError:`Ошибка экспорта`,nameUpdateSuccess:`Имя обновлено`,saving:`Сохранение...`,echTitle:`Перезапись ECH`,enableEch:`Включить перезапись ECH`,echDesc:`Для доменов через Cloudflare автоматически перезаписывает параметры ECH и внешний SNI в запросах HTTPS (Type 65) / SVCB (Type 64) для защиты конфиденциальности.`,echFrontingTitle:`Внешний SNI (ECH Fronting)`,echFrontingDesc:`Доменное имя, видимое в открытом виде во внешнем рукопожатии TLS`,echFrontingCustomPlaceholder:`Введите пользовательский домен fronting, например crypto.cloudflare.com`,echPreferred:`Рекомендуется`,whatIsEch:`Что такое ECH (Encrypted Client Hello)?`,echHelpDesc:`ECH — расширение конфиденциальности TLS 1.3, которое полностью шифрует реальное имя домена (Inner SNI), показывая наблюдателям только маскировочный домен (Outer SNI).`,echHelpBenefit1:`Предотвращает отслеживание провайдерами посещаемых вами поддоменов`,echHelpBenefit2:`В сочетании с DoH устраняет утечки открытого SNI`,retentionDisabled:`Отключено (В целях конфиденциальности)`,retentionDisabledDesc:`Ведение журнала отключено. Система не будет записывать журналы DNS-запросов и немедленно удалит существующие журналы.`},u=JSON.parse(`{"title":"Настройки аккаунта","subtitle":"Управление учетными данными.","jwtSecretWarningTitle":"Уведомление о безопасности: Слабый JWT-секрет","jwtSecretWarningDesc":"Текущий JWT_SECRET содержит менее 32 символов, что создает потенциальную угрозу безопасности. Пожалуйста, настройте переменную окружения KEK_v1 перед ротацией JWT_SECRET, чтобы обеспечить возможность расшифровки существующих данных TOTP и ключей восстановления.","roleAdmin":"Администратор","roleUser":"Пользователь","personalInfo":"Личные данные","username":"Имя пользователя","userId":"ID пользователя","changePassword":"Смена пароля","currentPassword":"Текущий пароль","newPassword":"Новый пароль","updatePassword":"Обновить","userManagement":"Управление (Админ)","createUser":"Создать пользователя","role":"Роль","createdAt":"Дата создания","lastActive":"Последняя активность","lastResolve":"Последний запрос","actions":"Действия","dangerZone":"Опасная зона","clearLogs":"Очистить логи","clearLogsDesc":"Удалит все логи DNS. Необратимо.","clearLogsBtn":"Очистить","deleteAccount":"Удалить аккаунт","deleteAccountDesc":"Удалит аккаунт и данные. Необратимо.","deleteAccountBtn":"Удалить","createNewUser":"Новый пользователь","initialPassword":"Пароль","userRole":"Роль","cancel":"Отмена","createNow":"Создать","formatTipUsername":"Формат: 5-32 символа (Unix-стиль)","formatTipPassword":"Формат: 12-100 символов","passwordSuccess":"Пароль изменен","updateFailed":"Ошибка","confirmDeleteUser":"Удалить пользователя?","confirmClearLogs":"Очистить логи?","clearLogsSuccess":"Логи очищены","confirmDeleteAccount":"ВНИМАНИЕ: Удалить аккаунт? \\\\n\\\\nВсе данные, правила и логи будут удалены. Необратимо!","inactivityPolicy":"Политика активности","inactivityDesc":"Для защиты конфиденциальности пользователей и экономии ресурсов все журналы запросов и конфигурации DNS аккаунтов, не проявлявших активности разрешения в течение 30 дней, будут автоматически удалены. Сам аккаунт будет удален при отсутствии входа в течение 90 дней.","systemSettings":"Система (Админ)","adminOnlyView":"Только для админов","featureToggle":"Переключатели","enableTurnstileSignup":"CAPTCHA при регистрации","enableTurnstileLogin":"CAPTCHA при входе","totp":{"title":"Приложение-аутентификатор (TOTP)","enabled":"Вкл","disabled":"Выкл","setupDesc":"Доп. защита. Используйте Google Authenticator и др.","setupBtn":"Настроить аутентификатор (TOTP)","scanQR":"Сканируйте QR:","orEnterManually":"Или введите ключ:","enterCode":"Введите код для подтверждения:","enterCodeHint":"6 цифр.","activate":"Активировать TOTP","skipPassword":"Вход без пароля (только TOTP)","disable":"Отключить аутентификатор (TOTP)","disableTitle":"Отключение аутентификатора (TOTP)","disableWarning":"После отключения TOTP, если не настроены ключи Passkey, ваш аккаунт будет защищен только паролем.","confirmDisable":"Отключить TOTP","recoveryKeysTitle":"Сохраните ключи восстановления","recoveryKeysWarning":"Сохраните ключ восстановления в надежном месте (например, в менеджере паролей). Каждый ключ одноразовый.","copyKeys":"Копировать","copied":"Скопировано!","done":"Готово","activeDesc":"Приложение аутентификатор (TOTP) активно и генерирует 6-значные коды."},"activity":{"title":"История активности","action":"Событие","time":"Время","ip":"IP","session":"Сессия","empty":"Пусто.","loadMore":"Еще","signup":"Регистрация","loginSuccess":"Успешный вход","loginFail":"Ошибка входа","logout":"Выход","pwChangeSuccess":"Пароль изменен","pwChangeFail":"Ошибка смены пароля","totpVerifySuccess":"Проверка TOTP пройдена","totpVerifyFail":"Ошибка проверки TOTP","totpSetup":"Настроен аутентификатор TOTP","totpRemoved":"Аутентификатор TOTP отключен","recoveryKeyUsed":"Ключ восстановления","sessionRevoked":"Сессия завершена","reasons":{"user_active":"Выход","user_revoke":"Отозвано","expired":"Истекло","geolocation_mismatch":"Гео-ограничение","geolocation_missing":"Нет данных гео","token_reuse":"Повторный вход (безопасность)"},"passkeyRegistered":"Passkey зарегистрирован","passkeyDeleted":"Passkey удален","passkeyVerifySuccess":"Passkey подтвержден","passkeyVerifyFail":"Ошибка верификации Passkey","recoveryKeyRotated":"Ключ восстановления обновлен"},"sessions":{"title":"Активные сеансы","session":"Сеанс","device":"Устройство","ip":"IP-адрес","loginTime":"Время входа","expires":"Истекает","action":"Действие","current":"Текущий","revoke":"Отозвать","revokeFailed":"Не удалось отозвать сеанс.","empty":"Активных сеансов не найдено.","unknownDevice":"Неизвестное устройство","revokeOthers":"Отозвать другие сеансы","confirmRevokeOthers":"Отозвать другие сеансы","revokeOthersConfirmText":"Вы уверены, что хотите отозвать все остальные активные сеансы? Все остальные подключенные устройства будут немедленно отключены."},"passkey":{"title":"Passkey (Ключи доступа)","addBtn":"Добавить Passkey","desc":"Используйте биометрию (Touch ID, Face ID, Windows Hello) или аппаратные ключи безопасности (YubiKey) для быстрой и защищенной от фишинга аутентификации.","empty":"Passkey еще не добавлены.","addTitle":"Добавить Passkey","nameLabel":"Имя Passkey","namePlaceholder":"например: my_passkey","promptNotice":"После нажатия кнопки продолжения браузер предложит пройти биометрическую регистрацию или использовать ключ безопасности.","continue":"Продолжить","renameTitle":"Переименовать Passkey","deleteTitle":"Удалить Passkey","deleteConfirm":"Вы уверены, что хотите удалить ключ доступа \\"{{name}}\\"? Вы больше не сможете использовать его для аутентификации.","defaultName":"Passkey","notSupported":"Ваш браузер или окружение не поддерживают ключи доступа (WebAuthn).","regFailed":"Не удалось зарегистрировать Passkey","count":"Настроено: {{count}}","none":"Не настроено","created":"Создано","lastUsed":"Последнее использование","neverUsed":"Никогда не использовался","updated":"Passkey успешно обновлен","registered":"Passkey успешно зарегистрирован","deleted":"Passkey удален","appNameLabel":"Домен","appNameHelper":"Ключ доступа будет привязан к этому домену","formatTip":"Имя Passkey: 1-30 символов (только буквы, цифры, _, -)","verifyPrompt":"Пройдите проверку с помощью биометрии устройства или ключа безопасности.","changePwNotice":"При отправке вам будет предложено подтвердить личность через Passkey.","submitNotice":"При отправке вам будет предложено подтвердить личность через Passkey."},"mfaNone":"Нет","resetUserPassword":"Сбросить пароль","resetPasswordTitle":"Сброс пароля пользователя","resetPasswordWarning":"После сброса все активные сессии пользователя будут немедленно завершены.","resetPasswordSuccess":"Пароль успешно сброшен. Все активные сессии завершены.","confirmReset":"Подтвердить сброс","mfa":{"title":"Многофакторная аутентификация (MFA)","enabled":"Настроено","notConfigured":"Не настроено","desc":"Ключи доступа (Passkey) и приложения (TOTP) служат методами MFA. Настройте хотя бы один фактор для защиты аккаунта.","passwordlessTitle":"Беспарольный вход","passwordlessDesc":"При включении пароль не требуется — вход выполняется напрямую через Passkey или TOTP.","unconfiguredHint":"Методы MFA еще не настроены. Добавьте Passkey или приложение-аутентификатор ниже."},"recoveryKey":{"title":"Аварийный ключ восстановления","desc":"Аварийный ключ восстановления позволяет восстановить доступ или сбросить пароль при утере всех ключей доступа (Passkeys) или приложений аутентификации.","configured":"Настроено","notConfigured":"Не настроено","kekProtected":"Защищено KEK","kekTooltip":"Защищено конвертным шифрованием AES-256-GCM на основе KEK.","viewBtn":"Показать ключ","rotateBtn":"Сменить ключ","yourKey":"Ваш 30-значный ключ восстановления","securityTip":"Держите этот ключ в секрете. Любой, у кого есть к нему доступ, может получить доступ к вашей учетной записи.","rotateConfirm":"Смена ключа немедленно аннулирует текущий ключ. Продолжить?","confirmRotateBtn":"Подтвердить смену","viewVerifyTitle":"Подтверждение личности для просмотра ключа","rotateVerifyTitle":"Подтверждение личности для смены ключа","rotateSuccess":"Ключ восстановления успешно обновлен! Сохраните новый ключ в надежном месте.","legacyNotice":"Ваш ключ сохранен в виде одностороннего хеша и не может быть расшифрован. Обновите ключ для генерации нового с защитой KEK."},"verifyIdentity":"Проверка безопасности","verifyIdentityDesc":"Для защиты учетной записи подтвердите свою личность перед продолжением.","usePasskeyInstead":"Подтвердить с помощью Passkey","changePasswordWithPasskey":"Подтвердить через Passkey и изменить пароль","enableRegistration":"Разрешить регистрацию пользователей"}`),d={item1Title:`Защищенный DNS Worker`,item1Desc:`DNS-резолвер на базе Cloudflare Workers & D1, оптимизированный для скорости и безопасности.`,item2Title:`Конфиденциальность DoH`,item2Desc:`Предотвращение перехвата и повышение конфиденциальности через DNS over HTTPS (RFC 8484).`,item3Title:`Глобальная Edge-сеть`,item3Desc:`Использование обширной сети Cloudflare для быстрого резолвинга с низкой задержкой.`,item4Title:`Точная фильтрация`,item4Desc:`Полная поддержка черных/белых списков, правил AdGuard и перенаправлений DNS-записей.`,item5Title:`Аналитика в реальном времени`,item5Desc:`Детальные логи запросов и комплексные дэшборды для мониторинга.`,item6Title:`Современный UI и темная тема`,item6Desc:`Высокоплотная панель управления, разработанная для инженеров, на базе Blueprint UI от Palantir.`,item7Title:`Облачная архитектура`,item7Desc:`Serverless-архитектура обеспечивает нулевое обслуживание и бесконечное масштабирование.`,item8Title:`Управление профилями`,item8Desc:`Создание и управление несколькими независимыми профилями для разных устройств.`,item9Title:`Управление точками доступа`,item9Desc:`Настройка отдельных DNS-точек для устройств для детальной изоляции логов и статистики.`},f={title:`Руководство по настройке и развертыванию DNS Worker`,subtitle:`Ваш экземпляр еще не полностью настроен. Пожалуйста, выполните следующие шаги, чтобы включить DNS Worker.`,dbStatus:`Связывание базы данных D1 (env.DB)`,jwtStatus:`Секретный ключ JWT (env.JWT_SECRET)`,configured:`Настроено`,missing:`Отсутствует / Не настроено`,refresh:`Обновить и проверить`,methodCli:`Развертывание через CLI`,methodDash:`Развертывание через панель Cloudflare`,copy:`Копировать`,copied:`Скопировано!`,stepDbTitle:`1. Привязать базу данных D1`,stepDbDesc:`Создайте базу данных D1 и привяжите ее к вашему воркеру. В терминале выполните:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Скопируйте вывод конфигурации D1 и вставьте его в wrangler.toml в раздел [[d1_databases]]:`,stepDbCommand2:`[[d1_databases]]
2
+ binding = "DB"
3
+ database_name = "dns_worker_db"
4
+ database_id = "<ВАШ_D1_DATABASE_ID>"
5
+ migrations_dir = "migrations"`,stepDbDashDesc:`1. Перейдите в панель Cloudflare -> Workers & Pages -> D1 -> Создать базу данных -> Назовите ее 'dns_worker_db'.
6
+ 2. Перейдите в настройки вашего воркера -> Переменные -> Связывания баз данных D1 -> Добавить связывание.
7
+ 3. Установите имя связи 'DB' и выберите базу данных 'dns_worker_db'. Сохраните.
8
+ 4. Перейдите в базу данных D1 -> Консоль, скопируйте и выполните SQL-скрипт из папки migrations для создания структуры таблиц.`,stepJwtTitle:`2. Установить секретный ключ JWT`,stepJwtDesc:`Для DNS Worker требуется секрет JWT для подписи сессионных токенов. Настройте его как Cloudflare Secret:`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Перейдите в настройки воркера -> Переменные -> Переменные окружения -> Добавить переменную.
9
+ 2. Установите имя 'JWT_SECRET', выберите тип 'Secret' и введите безопасную случайную строку.
10
+ 3. Сохраните и разверните.`,stepJwtDesc2:`Панель управления Cloudflare`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. Развертывание и применение миграций`,stepDeployDesc:`Запустите команду развертывания, чтобы скомпилировать фронтенд, автоматически применить миграции базы данных D1 и опубликовать изменения:`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`Если вы выполнили все настройки через панель Cloudflare, перейдите на вкладку Развертывания вашего воркера и нажмите кнопку 'Развернуть' или 'Переразвернуть'.`,jwtGeneratorTitle:`Генератор безопасного JWT_SECRET`,jwtGeneratorDesc:`Используйте этот криптографически безопасный генератор ключей для создания случайного 64-символьного буквенно-цифрового секрета для env.JWT_SECRET.`,regenerate:`Сгенерировать заново`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
@@ -0,0 +1 @@
1
+ import{$ as e,A as t,At as n,B as r,Bt as i,Ct as a,D as o,Dt as s,E as c,Et as l,F as u,Ft as d,G as f,Gt as p,H as m,Ht as h,I as g,It as _,J as v,Jt as y,K as b,Kt as x,L as S,Lt as C,M as w,Mt as T,N as E,Nt as D,O,Ot as k,P as A,Pt as j,Q as M,R as N,Rt as P,St as F,Tt as I,U as L,Ut as R,V as z,Vt as B,W as V,Wt as ee,X as H,Y as U,Yt as W,Z as G,_t as K,at as q,bt as J,ct as Y,dt as X,et as Z,ft as Q,gt as $,ht as te,it as ne,j as re,jt as ie,k as ae,kt as oe,lt as se,mt as ce,nt as le,ot as ue,pt as de,q as fe,qt as pe,rt as me,st as he,tt as ge,ut as _e,vt as ve,wt as ye,xt as be,yt as xe,z as Se,zt as Ce}from"./index-7FKlsF79.js";export{G as exportProfileLogs};
@@ -0,0 +1 @@
1
+ import{t as e}from"./vendor-icons-other-Bme3ywH9.js";export{e as splitPathsBySizeLoader};