webext.hsb.horse

Changelog

Every published Header Relay release, generated from the repository's versioned CHANGELOG.md.

Release-note entries are shown in their original Japanese, which is the source language of the project changelog.

RSS →

Header Relay

Minor changes

  • Profile に固定 Cookie と追跡 Cookie を追加できるようになりました。対象オリジンのレスポンスに含まれるSet-Cookieから登録済み Cookie の値を自動取得し、次回以降の対象リクエストでCookieヘッダーを完全に置き換えます。送信候補が 0 件のリクエストでは Chrome が生成したCookieをそのまま通します。 固定/追跡 Cookie 名の登録、Max-AgeExpiresによる削除判定、複数 Profile の決定的な統合順、同名 Cookie 競合時の DNR Session Ruleset 停止、URL Probe への最終Cookie値表示を含みます。Fixed Header Cookie は自動的に専用の固定 Cookie へ変換され、変換できない設定は移行時の問題として保持されます。監査ログには Cookie 名と処理結果のみを記録し、値と元のSet-Cookieは記録しません。cookies権限は追加していません。
  • 管理画面のプロファイル切替・新規作成とナビゲーションを整理し、ヘッダー設定の統合画面と URL プローブ・監査ログ・JSON 編集の高度な設定タブを追加しました。移行時の問題は必要な場合だけ Cookie 画面に表示します。

Patch changes

  • Cookie 機能: Excluded Path を持つ origin で、除外パスの Chrome 既存 Cookie が意図せず上書きされる問題を修正。この場合はその origin の Cookie 送信を行わず、Runtime Status と URL Probe に警告を表示します。あわせて Popup の選択肢がname=value形式のまま表示されることがある移行時の問題を修正。
  • ルール適用に失敗したときの挙動を改善。不要になったルールが残る場合は自動で削除を再試行し、それでも失敗した場合は「古いルールが送信され続けている可能性」を Runtime Status に表示します。Popup にも同じ警告をインライン表示します(全 8 ロケール対応)。

Minor changes

  • UI の対応言語にスペイン語・フランス語・ドイツ語・簡体字中国語・繁体字中国語を追加

Patch changes

  • Popup の設定ボタンの遷移先を manage.html#/settings から manage.html#/(Profile 概要)に変更。ユーザが Popup から manage を開く目的は主に Profile 操作であり、UI 設定ではないため。

Minor changes

  • 監査ログにリクエスト URL を永続化しないように変更。URL はオリジン一致判定のためメモリ上でのみ処理し、直近ログへの表示用に現在のブラウザセッション中だけ session storage(メモリのみ)へ保持、ブラウザ終了時に破棄する。アップグレード時には IndexedDB の監査ログストアを再作成し、旧バージョンが保存した URL 入りログを完全に削除する。
  • Profile を削除できるようにし、UI にコンパクト表示モードを追加した。
    • 管理画面のプロファイル一覧から各プロファイルを削除できるようにした(プロファイルが 1 つだけのときは削除ボタンを表示しない)。削除すると取得済みの値も破棄し、選択中プロファイルを削除した場合は先頭のプロファイルへ切り替える。
    • 管理画面の Settings セクションに「コンパクト表示」トグルを追加した。設定は uiDensity として保存され、Popup・管理画面の行やコントロールの余白を詰めて表示する。表示のみの設定で、適用されるヘッダーには影響しない。
  • manage.html をブラウザの拡張機能オプションページ (options_ui) として開けるようにした。Profile 管理を既定表示とし、拡張機能全体の設定は同じ画面のサイドバーから開ける。
  • キャプチャしたヘッダー値を管理画面でデフォルトマスク表示に変更し、「表示」「コピー」の明示的な操作を追加。あわせて、Popup からの固定ヘッダー値更新時に監査ログへ新旧の値が記録されていた問題を修正し、ヘッダー値が監査ログへ混入しないことをテストで保証するようにした。
  • 監査ログを障害解析に必要な診断イベントのみに最小化。ユーザー操作履歴にあたる profile_enabled / profile_disabled / fixed_header_value_updated と成功時の session_cleared を記録しないように変更(session_cleared は DNR 同期失敗時のみ warn として記録)。
  • ホスト権限を optional_host_permissions へ移行。インストール時に全サイトへのアクセス権限(<all_urls>)を要求せず、Target Origin の保存・Profile の有効化・「アクセスを許可」ボタンの操作時に、対象ホストへの権限だけを要求するように変更。未許可のオリジンには DNR ルールを生成せず(fail-closed)、権限の付与・取消を検知してルールを自動再同期する。管理画面にはオリジンごとの権限状態(許可済み / 要許可 / 非対応)と許可ボタンを表示し、Popup には要許可オリジンの警告を表示する。どのプロファイルからも使われなくなったホスト権限は確認付きで解除を提案する。
  • 機密ヘッダーに警告と安全な禁止ルールを追加し、取得値のセッション限定保持・削除タイミングを明確化しました。ホスト権限取消時は影響するプロファイルの取得値を自動消去します。

Patch changes

  • localhost の HTTP 通信を追加の権限許可なしで扱えるようにする
  • Compact 表示を管理画面サイドバーの Settings セクションに集約し、Popup と管理画面ヘッダーを簡潔にするとともにトグルを小型化しました。サイドバー下部から Homepage と Buy Me a Coffee も開けます。

Minor changes

  • 複数の Profile を同時に有効化できるようにしました。
    • Profile の「選択(管理画面で編集中)」と「有効化(ブラウザへ適用)」を分離しました。管理画面の Profile 一覧では、行の選択と有効化トグルが別の操作になります。トグルは即時反映されます。
    • 有効な Profile 群をコンパイルし、単一の DNR Session Ruleset として適用します。DNR 生成・URL Probe・Runtime Status は同じコンパイル結果を参照するため、Probe の表示と実際の挙動が一致します。
    • Captured Header と Session を Profile 単位で保持するようになりました。ある Profile を無効化・保存しても、他の Profile の取得済みヘッダーは保持されます。
    • 同一 Origin・同一 Header Name を複数の有効 Profile が付与する場合は競合として検出し、DNR ルールを適用せずにエラーを表示します(fixed/captured の組み合わせを問いません)。
    • URL Probe は一致した全ての有効 Profile と、最終的に付与されるヘッダーを表示します。Overview に有効 Profile 数・DNR ルール総数・コンパイルエラー/警告の Runtime Status を追加しました。
    • popup は全 Profile の一覧とトグル、有効 Profile 全体の固定ヘッダー・取得値を表示します。
    • 既存設定は自動で移行されます(activeProfileIdselectedProfileId)。各 Profile の enabled 値はそのまま維持されます。
  • Popup から、現在のタブに適用される固定ヘッダーの値を変更できるようにしました。管理画面の固定ヘッダー設定に「ポップアップに表示」を追加し、入力形式(テキスト / 選択肢)と選択肢の Label・Value・並び順を設定できます。公開したヘッダーだけが Popup に表示され、既存の固定ヘッダーは初期状態で非表示のままです。値の変更は対象ヘッダーのみを部分更新し、Compiler と DNR 同期を経て即時反映されます。

Minor changes

  • 除外パスのマッチングを前方一致から glob(全体一致)に変更。* は同一パスセグメント内、** はセグメントを跨ぐ任意、? は 1 文字に一致し、パターンは pathname 全体に一致する(配下すべてを対象にするには /assets/** のように指定)。DNR ルールの regexFilter も同じ glob セマンティクスで生成する。あわせて除外パステスターが無効化中のプロファイルでも対象オリジン・除外判定を評価できるよう修正。 また、プロファイル名の編集中にサイドバーの表示名が即時変更されていた挙動を修正し、保存後に反映されるようにした。
  • manage 画面ヘッダーを簡素化: プロファイル名・有効/無効バッジ・未保存バッジを削除し、保存ボタンを未保存時に強調表示へ変更。プライバシーリンクをサイドバー最下部へ移動。
  • 管理画面の保存状態をセクション単位に分離。対象オリジン・固定ヘッダー・取得ヘッダー・除外パス・プロファイル基本情報の各セクションが独立した未保存状態と保存ボタンを持つようになり、変更したセクションだけを個別に保存できる。保存時は該当セクションのみをストレージへ書き込み、DNR ルールを再構築する。ヘッダーのグローバル保存ボタンと「未保存の変更」表示は廃止した。

Minor changes

  • 管理画面の情報設計と Application Shell を再構成し、未保存 Draft の URL プローブ、除外パスの共有検証と判定テスター、監査ログ展開状態の保持、空の初期設定、未保存変更の保護を追加しました。
  • 管理画面を Popup と共通の iOS 風デザインに統一し、ダークモードとアクセシビリティに対応しました。
  • 管理画面にセクション単位の URL ルーティングを導入し、直接表示やブラウザの戻る・進む操作に対応しました。
  • i18n 対応を追加(デフォルト: 英語、日本語・韓国語をサポート)。UI 文字列と manifest を browser.i18n(_locales)で多言語化

Patch changes

  • Popup UI をコンパクト化(幅 480px、行高さ 36px、セクション間余白縮小)し、セクション構成を Fixed Headers / Captured Headers に再編
  • プライバシーポリシーページを拡張機能内から外部サイト(hsblabs.github.io)へのリンクに変更。UI の言語設定(ja/ko/その他)に応じて対応する言語ページへ遷移する。

Nandemo Formatter

Patch changes

  • Évite d'analyser plusieurs fois le même JSON pendant l'analyse et l'affichage des documents structurés.
  • Charge les paramètres, les analyses et les messages de contrôle du site depuis un runtime partagé à chargement différé. Le runtime de chaque format analyse moins de code avant l'affichage de l'interface.
  • Construit les runtimes injectés pour les navigateurs modernes sans convertir la syntaxe déjà prise en charge par Chromium.
  • Reconnaît les URL .geojson comme des documents JSON et regroupe les modules principaux associés par domaine.
  • Centralise les extensions et les types MIME répétés afin de les partager entre le noyau, l'interface et le runtime de l'extension.
  • Enregistre l'état initial de l'arbre JSON avec une profondeur et des exceptions explicites.
  • Ignore les heuristiques du corps lorsque le type MIME identifie déjà un format pris en charge.
  • Charge les sérialiseurs des formats structurés uniquement lors de la conversion d'un document. Le runtime initial du formateur est plus petit.

Patch changes

  • Explique l'objectif de la vue automatique des documents bruts dans chaque titre localisé du Chrome Web Store.

Patch changes

  • Envoie les événements d'installation, de mise à jour et d'utilisation des fonctions principales après le consentement. Les événements d'anomalie de performance de plus de 500ms sont envoyés avec un ID à usage unique, quel que soit le consentement.
  • Convertit le Client ID envoyé à GA4 au format accepté par Measurement Protocol et active les statistiques d'utilisation en production.

Patch changes

  • Mesure la taille d'une image avec le nombre d'octets de la réponse originale, et non avec la valeur après réencodage. Évite le traitement Canvas inutile pour les grandes images.
  • Compresse les métadonnées des lignes virtuelles des grands JSON et corrige la régression mémoire lors de la conservation de documents de 1 MiB.
  • Remplace React par Solid et réduit de 63% la taille totale du JavaScript brut des runtimes injectés.

Patch changes

  • Centralise la validation de l'émetteur des messages de l'extension et rend explicites les modes d'affichage du formateur sans modifier le comportement existant.
  • Supprime les sélecteurs réservés aux tests des builds de production et conserve des sélecteurs stables dans les builds E2E.
  • Réduit la taille brute de l'extension en utilisant l'anglais dans les vues du formateur injecté. Le popup et les options restent localisés.
  • Simplifie le popup de la barre d'outils. Il affiche l'état de la page, restaure les origines désactivées et ouvre les paramètres.

Minor changes

  • Ajoute un bouton de téléchargement à la barre d'outils. Il enregistre le document brut, le JSON minifié ou une conversion avec le nom du document et l'extension de la vue. La conversion de config.json en YAML produit config.yaml.
  • Virtualise l'arbre JSON imbriqué afin de limiter le DOM pendant le défilement de grands documents.
  • Dirige le lien d'assistance vers la page d'assistance de l'extension sur le site du produit. Le japonais ouvre /ja/ et les autres langues ouvrent la page par défaut. Le lien About inclut la version de l'extension et l'agent utilisateur.
  • Ouvre la page des paramètres dans un onglet séparé depuis le pied du formateur.
  • Crée et conserve un Client ID UUIDv7 lors de l'installation ou de la mise à jour, quel que soit le choix concernant les statistiques d'utilisation. Le consentement contrôle uniquement l'envoi. Le même ID local reste donc utilisé après un refus ou un retrait.

Minor changes

  • Ajoute les thèmes système, clair et sombre, une vue originale ponctuelle, des contrôles de formatage par origine et des statistiques d'utilisation basées sur le consentement. Ajoute aussi des sorties rapides pour les pages non formatées et empêche le remplacement des pages HTML dont l'URL contient une extension prise en charge.

Minor changes

  • Première version publique sur le Chrome Web Store.
  • Détecte les liens HTTP, HTTPS et mailto, et non plus seulement HTTPS. Ne convertit jamais en liens les schémas qui contiennent des scripts ou du contenu, comme javascript:, data:, blob: et file:.
  • Rend le Markdown sur les hôtes qui utilisent une CSP stricte. Remplace le rendu WASM, qui ne pouvait pas démarrer sur raw.githubusercontent.com et des hôtes similaires, par un rendu JavaScript pur. Le bundle passe de 806 kB à 440 kB. La détection YAML fonctionne aussi lorsque le document contient surtout des séquences. Le bouton de liens est disponible pour tous les formats structurés.
  • Améliore la fiabilité de la détection des formats. Ne formate pas comme INI les fichiers rc du shell qui commencent par KEY=value. Reconnaît TOML lorsque l'en-tête de section suit les clés de niveau supérieur. Si l'analyse d'une détection basée uniquement sur le corps échoue, laisse la page inchangée au lieu d'afficher une erreur. Détecte le JSON avec tout type MIME qui se termine par +json, comme application/problem+json et application/vnd.api+json.
  • Convertit le document courant vers un autre format structuré depuis la barre d'outils. Les conversions impossibles, comme un tableau de niveau supérieur vers TOML, affichent une erreur d'analyse au lieu d'échouer silencieusement.
  • Ajoute au visualiseur les actions tout développer et tout réduire, la recherche dans les clés et les valeurs avec mise en évidence, la copie du chemin de chaque nœud (data.items[0].id) et des erreurs d'analyse qui indiquent la ligne concernée.
  • Renforce la détection afin de ne pas remplacer les pages qui ne contiennent pas de données structurées.
    • Détermine le Markdown uniquement avec le type MIME et l'extension. Ne l'infère pas du corps, car renderMarkdown accepte tout texte.
    • Traite --- comme un marqueur de document YAML et non comme un signal Markdown. Le YAML servi comme text/plain est donc aussi formaté.
    • Exige que 70% des lignes non vides ressemblent à des associations YAML. Les journaux, les listes d'en-têtes et la prose qui commence par deux-points restent ainsi en mode Raw.
    • Ne suppose pas qu'un corps de plus de 5 MB est du JSON sans le vérifier.
    • Affiche les littéraux de date YAML et TOML comme des chaînes et non comme des objets vides.
  • Ajoute un menu About au pied de page. Il s'ouvre vers le haut au survol ou lorsque le clavier lui donne le focus. Il contient des liens vers la page d'accueil, la politique de confidentialité et le formulaire d'assistance.
  • Garde le menu About ouvert pendant que le pointeur se déplace vers lui.
  • Supprime le bouton Raw propre au visualiseur Markdown. La barre d'outils possède déjà ce bouton.
  • Aligne les informations du Store sur le comportement réel. La description cite JSON, YAML, TOML, INI, Markdown et les images. La politique de confidentialité indique que seule une valeur booléenne du bouton de liens est conservée. La version du manifeste suit package.json au lieu d'être écrite en dur.