Skip to main content

Storage API

src/shared/storage.ts — All Chrome storage access must go through this module.

Important Rule

Direct access to the chrome.storage API is forbidden. All storage operations must go through this module.

Configuration Functions

getConfig()

Loads the current configuration.

async function getConfig(): Promise<GrayToolConfig>

Behavior:

  • Reads configuration from chrome.storage.sync
  • Returns default values if no configuration is found
  • Automatically migrates v1 format to v2 if detected

Usage:

import { getConfig } from "../shared/storage";

const config = await getConfig();
console.log(config.version); // 2
console.log(config.buttons); // ButtonConfig[]

saveConfig()

Saves configuration with a partial update.

async function saveConfig(partial: Partial<GrayToolConfig>): Promise<void>

Behavior:

  • Reads the current configuration
  • Merges the given partial update with the existing configuration
  • Writes to chrome.storage.sync
  • Checks chrome.runtime.lastError

Usage:

import { saveConfig } from "../shared/storage";

// Update only settings
await saveConfig({
settings: {
...config.settings,
enabled: false,
},
});

// Add a button
await saveConfig({
buttons: [...config.buttons, newButton],
});

getDefaultConfig()

Returns the default v2 configuration template.

function getDefaultConfig(): GrayToolConfig

Return Value:

{
version: 2,
urlPatterns: [],
buttons: [],
globalFieldConfig: {
defaultMessageField: null,
rowFieldPrefixes: ["msg.", "context.", ""],
parseJsonStrings: true,
jsonParseMaxDepth: 5,
},
settings: {
enabled: true,
showMessageDetailButton: true,
jsonViewerEnabled: true,
keyboardShortcutsEnabled: true,
searchHistoryEnabled: true,
},
}

Search History Functions

getSearchHistory()

Retrieves search history for a specific URL pattern.

async function getSearchHistory(patternId: string): Promise<SearchHistoryEntry[]>

Parameters:

  • patternId — Unique identifier of the URL pattern

Behavior:

  • Reads from chrome.storage.local
  • Returns an empty array if empty or undefined
  • Maximum 50 entries are stored

saveSearchQuery()

Saves a search query to the history.

async function saveSearchQuery(patternId: string, query: string): Promise<void>

Parameters:

  • patternId — Unique identifier of the URL pattern
  • query — The search query to save

Behavior:

  • Updates the timestamp if the same query already exists
  • Deletes the oldest entry if the 50-entry limit is exceeded
  • Writes to chrome.storage.local

clearSearchHistory()

Clears all search history for a specific URL pattern.

async function clearSearchHistory(patternId: string): Promise<void>

V1 → V2 Migration

When getConfig() detects v1 format, automatic migration is performed:

Converted Properties

V1V2
paramMappingfieldBindings
baseUrl + routeurl (template)
urlPatternIds: [] (all)
Button nameButton label
Route conditionsButton conditions

Migration Flow

v1 config detected

For each button:
├─ paramMapping → fieldBindings conversion
├─ URL template creation
├─ Conditions preserved
└─ urlPatternIds empty (all patterns)

v2 config created

Save to chrome.storage.sync

Return v2 config

Storage Keys

KeyStorageDescription
graytool_configsyncMain configuration
graytool_search_history_{patternId}localSearch history
graytool_tabs_collapsedlocalStorageTab collapse state