local-storage.ts 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. export const LOCAL_STORAGE_KEYS = {
  2. /**
  3. * STUDIO
  4. */
  5. AI_ASSISTANT_STATE: (projectRef: string | undefined) =>
  6. `briven-ai-assistant-state-${projectRef}`,
  7. SIDEBAR_BEHAVIOR: 'briven-sidebar-behavior',
  8. EDITOR_PANEL_STATE: 'briven-editor-panel-state',
  9. PROJECTS_VIEW: 'projects-view',
  10. PROJECTS_FILTER: 'projects-filter',
  11. PROJECTS_SORT: 'projects-sort',
  12. FEEDBACK_WIDGET_CONTENT: 'feedback-widget-content',
  13. FEEDBACK_WIDGET_SCREENSHOT: 'feedback-widget-screenshot',
  14. INCIDENT_BANNER_DISMISSED_IDS: 'incident-banner-dismissed-ids',
  15. MAINTENANCE_BANNER_DISMISSED: (id: string) => `maintenance-banner-dismissed-${id}`,
  16. DASHBOARD_PREFERENCES: (ref: string) => `dashboard-preferences-${ref}`,
  17. UNIFIED_LOGS_DOCK: 'unified-logs-dock',
  18. UI_TIMEZONE: 'briven-ui-timezone',
  19. UI_PREVIEW_CLS: 'briven-ui-cls',
  20. UI_PREVIEW_INLINE_EDITOR: 'briven-ui-preview-inline-editor',
  21. UI_PREVIEW_UNIFIED_LOGS: 'briven-ui-preview-unified-logs',
  22. UI_ONBOARDING_NEW_PAGE_SHOWN: 'briven-ui-onboarding-new-page-shown',
  23. UI_PREVIEW_ADVISOR_RULES: 'briven-ui-advisor-rules',
  24. UI_PREVIEW_QUEUE_OPERATIONS: 'briven-ui-queue-operations',
  25. UI_PREVIEW_PG_DELTA_DIFF: 'briven-ui-pg-delta-diff',
  26. UI_PREVIEW_PLATFORM_WEBHOOKS: 'briven-ui-platform-webhooks',
  27. UI_PREVIEW_JIT_DB_ACCESS: 'briven-ui-jit-db-access',
  28. UI_PREVIEW_RLS_TESTER: 'briven-ui-rls-tester',
  29. UI_PREVIEW_MARKETPLACE: 'briven-ui-marketplace',
  30. NEW_LAYOUT_NOTICE_ACKNOWLEDGED: 'new-layout-notice-acknowledge',
  31. TABS_INTERFACE_ACKNOWLEDGED: 'tabs-interface-acknowledge',
  32. AI_ASSISTANT_MCP_OPT_IN: 'ai-assistant-mcp-opt-in',
  33. DASHBOARD_HISTORY: (ref: string) => `dashboard-history-${ref}`,
  34. STORAGE_PREFERENCE: (ref: string) => `storage-explorer-${ref}`,
  35. AUTH_USERS_FILTER: (ref: string) => `auth-users-filter-${ref}`,
  36. AUTH_USERS_SORT_BY_VALUE: (ref: string) => `auth-users-sort-by-value-${ref}`,
  37. AUTH_USERS_COLUMNS_CONFIGURATION: (ref: string) => `briven-auth-users-columns-${ref}`,
  38. AUTH_USERS_IMPROVED_SEARCH_DISMISSED: (ref: string) =>
  39. `auth-users-improved-search-dismissed-${ref}`,
  40. SQL_EDITOR_INTELLISENSE: 'briven_sql-editor-intellisense-enabled',
  41. SQL_EDITOR_SPLIT_SIZE: 'briven_sql-editor-split-size',
  42. // Key to track which schemas are ok to be sent to AI. The project ref is intentionally put at the end for easier search in the browser console.
  43. SQL_EDITOR_AI_SCHEMA: (ref: string) => `briven_sql-editor-ai-schema-enabled-${ref}`,
  44. SQL_EDITOR_AI_OPEN: 'briven_sql-editor-ai-open',
  45. SQL_EDITOR_LAST_SELECTED_DB: (ref: string) => `sql-editor-last-selected-db-${ref}`,
  46. SQL_EDITOR_SQL_BLOCK_ACKNOWLEDGED: (ref: string) => `sql-editor-sql-block-acknowledged-${ref}`,
  47. SQL_EDITOR_SECTION_STATE: (ref: string) => `sql-editor-section-state-${ref}`,
  48. SQL_EDITOR_SORT: (ref: string) => `sql-editor-sort-${ref}`,
  49. LOG_EXPLORER_SPLIT_SIZE: 'briven_log-explorer-split-size',
  50. GRAPHIQL_RLS_BYPASS_WARNING: 'graphiql-rls-bypass-warning-dismissed',
  51. GRAPHQL_INTROSPECTION_NOTICE_COLLAPSED: (ref: string) =>
  52. `graphql-introspection-notice-collapsed-${ref}`,
  53. CLS_DIFF_WARNING: 'cls-diff-warning-dismissed',
  54. CLS_SELECT_STAR_WARNING: 'cls-select-star-warning-dismissed',
  55. QUERY_PERF_SHOW_BOTTOM_SECTION: 'briven-query-perf-show-bottom-section',
  56. LINTER_SHOW_FOOTER: 'briven-linter-show-footer',
  57. // Key to track account deletion requests
  58. ACCOUNT_DELETION_REQUEST: 'briven-account-deletion-request',
  59. // Used for storing a user id when sending reports to Sentry. The id is hashed for anonymity.
  60. SENTRY_USER_ID: 'briven-sentry-user-id',
  61. // Used for storing the last sign in method used by the user
  62. LAST_SIGN_IN_METHOD: 'briven-last-sign-in-method',
  63. // Key to track the last selected schema. The project ref is intentionally put at the end for easier search in the browser console.
  64. LAST_SELECTED_SCHEMA: (ref: string) => `last-selected-schema-${ref}`,
  65. // Track position of nodes for schema visualizer
  66. SCHEMA_VISUALIZER_POSITIONS: (ref: string, schemaId: number) =>
  67. `schema-visualizer-positions-${ref}-${schemaId}`,
  68. // Used for allowing the main nav panel to expand on hover
  69. EXPAND_NAVIGATION_PANEL: 'briven-expand-navigation-panel',
  70. GITHUB_AUTHORIZATION_STATE: 'briven-github-authorization-state',
  71. // Notice banner keys
  72. FLY_DEPRECATION_2026_05_31: 'fly-deprecation-2026-05-31-dismissed',
  73. API_KEYS_FEEDBACK_DISMISSED: (ref: string) => `briven-api-keys-feedback-dismissed-${ref}`,
  74. TERMS_OF_SERVICE_UPDATE: 'terms-of-service-update-2026-06-06',
  75. REPORT_DATERANGE: 'briven-report-daterange',
  76. PROJECT_PAUSING_STARTED_AT: (ref: string) => `briven-project-pausing-started-at-${ref}`,
  77. PROJECT_RESTORING_STARTED_AT: (ref: string) => `briven-project-restoring-started-at-${ref}`,
  78. // api keys view switcher for new and legacy api keys
  79. API_KEYS_VIEW: (ref: string) => `briven-api-keys-view-${ref}`,
  80. // Shortcut preferences
  81. SHORTCUT_STORAGE_KEY: 'briven-shortcut-preferences',
  82. LAST_VISITED_ORGANIZATION: 'last-visited-organization',
  83. // user impersonation selector previous searches
  84. USER_IMPERSONATION_SELECTOR_PREVIOUS_SEARCHES: (ref: string) =>
  85. `user-impersonation-selector-previous-searches-${ref}`,
  86. LAST_OPENED_SIDE_BAR: (ref: string) => `last-opened-sidebar-${ref}`,
  87. // Index Advisor notice dismissed
  88. INDEX_ADVISOR_NOTICE_DISMISSED: (ref: string) => `index-advisor-notice-dismissed-${ref}`,
  89. // RLS event trigger banner dismissed
  90. RLS_EVENT_TRIGGER_BANNER_DISMISSED: (ref: string) => `rls-event-trigger-banner-dismissed-${ref}`,
  91. PROJECT_SECURITY_DISMISSED_AT: (ref: string) => `project-security-dismissed-at-${ref}`,
  92. RLS_TESTER_BANNER_DISMISSED: (ref: string) => `rls-tester-banner-dismissed-${ref}`,
  93. // Observability banner dismissed
  94. OBSERVABILITY_BANNER_DISMISSED: (ref: string) => `observability-banner-dismissed-${ref}`,
  95. ORGANIZATION_MARKETPLACE_BANNER_DISMISSED: (orgSlug: string, managedBy: string) =>
  96. `organization-marketplace-banner-dismissed-${orgSlug}-${managedBy}`,
  97. PROJECT_INTEGRATION_BANNER_DISMISSED: (ref: string, integrationSource: string) =>
  98. `project-integration-banner-dismissed-${ref}-${integrationSource}`,
  99. TABLE_EDITOR_QUEUE_OPERATIONS_BANNER_DISMISSED: (ref: string) =>
  100. `table-editor-queue-operations-banner-dismissed-${ref}`,
  101. FREE_MICRO_UPGRADE_BANNER_DISMISSED: (ref: string) =>
  102. `free-micro-upgrade-banner-dismissed-${ref}`,
  103. STORAGE_PUBLIC_BUCKET_SELECT_POLICY_WARNING_DISMISSED: (ref: string, bucketId: string) =>
  104. `storage-public-bucket-select-policy-warning-dismissed-${ref}-${bucketId}`,
  105. PRIVACY_NOTICE_ACKNOWLEDGED: 'privacy-notice-acknowledged-2026-03',
  106. /**
  107. * COMMON
  108. */
  109. /** @deprecated – we're using usercentrics instead to handle telemetry consent */
  110. TELEMETRY_CONSENT: 'briven-consent-ph',
  111. /**
  112. * DOCS
  113. */
  114. SAVED_ORG: 'docs.ui.user.selected.org',
  115. SAVED_PROJECT: 'docs.ui.user.selected.project',
  116. SAVED_BRANCH: 'docs.ui.user.selected.branch',
  117. HIDE_PROMO_TOAST: 'briven-hide-promo-toast-lw15-ticket',
  118. /**
  119. * WWW
  120. */
  121. BLOG_VIEW: 'briven-blog-view',
  122. } as const
  123. export type LocalStorageKey = (typeof LOCAL_STORAGE_KEYS)[keyof typeof LOCAL_STORAGE_KEYS]
  124. const LOCAL_STORAGE_KEYS_ALLOWLIST = [
  125. 'graphiql:theme',
  126. 'theme',
  127. 'brivenDarkMode',
  128. 'briven.dashboard.auth.debug',
  129. 'briven.dashboard.auth.navigatorLock.disabled',
  130. LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT,
  131. LOCAL_STORAGE_KEYS.UI_PREVIEW_INLINE_EDITOR,
  132. LOCAL_STORAGE_KEYS.UI_PREVIEW_QUEUE_OPERATIONS,
  133. LOCAL_STORAGE_KEYS.UI_PREVIEW_CLS,
  134. LOCAL_STORAGE_KEYS.UI_PREVIEW_UNIFIED_LOGS,
  135. LOCAL_STORAGE_KEYS.UI_PREVIEW_PLATFORM_WEBHOOKS,
  136. LOCAL_STORAGE_KEYS.UI_PREVIEW_JIT_DB_ACCESS,
  137. LOCAL_STORAGE_KEYS.UI_PREVIEW_MARKETPLACE,
  138. LOCAL_STORAGE_KEYS.LAST_SIGN_IN_METHOD,
  139. LOCAL_STORAGE_KEYS.HIDE_PROMO_TOAST,
  140. LOCAL_STORAGE_KEYS.BLOG_VIEW,
  141. LOCAL_STORAGE_KEYS.AI_ASSISTANT_MCP_OPT_IN,
  142. LOCAL_STORAGE_KEYS.LINTER_SHOW_FOOTER,
  143. LOCAL_STORAGE_KEYS.SIDEBAR_BEHAVIOR,
  144. LOCAL_STORAGE_KEYS.UI_TIMEZONE,
  145. ]
  146. export function clearLocalStorage() {
  147. for (const key in localStorage) {
  148. if (!LOCAL_STORAGE_KEYS_ALLOWLIST.includes(key)) {
  149. localStorage.removeItem(key)
  150. }
  151. }
  152. }