From 8cfcafd5736890f6b7b286b1cf56aad4ad27e8eb Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Wed, 22 Oct 2025 14:41:39 +0200 Subject: [PATCH 1/4] Basic Supabase integration --- packages/core/src/js/integrations/exports.ts | 1 + packages/core/src/js/integrations/supabase.ts | 15 +++++++++++++++ packages/core/test/integrations/supabase.test.ts | 13 +++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 packages/core/src/js/integrations/supabase.ts create mode 100644 packages/core/test/integrations/supabase.test.ts diff --git a/packages/core/src/js/integrations/exports.ts b/packages/core/src/js/integrations/exports.ts index 901c028426..c33323eba4 100644 --- a/packages/core/src/js/integrations/exports.ts +++ b/packages/core/src/js/integrations/exports.ts @@ -26,6 +26,7 @@ export { breadcrumbsIntegration } from './breadcrumbs'; export { primitiveTagIntegration } from './primitiveTagIntegration'; export { logEnricherIntegration } from './logEnricherIntegration'; export { graphqlIntegration } from './graphql'; +export { supabaseIntegration } from './supabase'; export { browserApiErrorsIntegration, diff --git a/packages/core/src/js/integrations/supabase.ts b/packages/core/src/js/integrations/supabase.ts new file mode 100644 index 0000000000..af246289fa --- /dev/null +++ b/packages/core/src/js/integrations/supabase.ts @@ -0,0 +1,15 @@ +import { supabaseIntegration as browserSupabaseIntegration } from '@sentry/browser'; +import type { Integration } from '@sentry/core'; + +type SupabaseReactNativeIntegrationOptions = { + supabaseClient: unknown; +} + +/** + * Use this integration to instrument your Supabase client. + * + * Learn more about Supabase at https://supabase.com + */ +export function supabaseIntegration(options: SupabaseReactNativeIntegrationOptions): Integration { + return browserSupabaseIntegration({supabaseClient: options.supabaseClient}) +} \ No newline at end of file diff --git a/packages/core/test/integrations/supabase.test.ts b/packages/core/test/integrations/supabase.test.ts new file mode 100644 index 0000000000..1da7b5871c --- /dev/null +++ b/packages/core/test/integrations/supabase.test.ts @@ -0,0 +1,13 @@ +import * as environment from '../../src/js/utils/environment'; + +jest.mock('@sentry/browser', () => ({ + supabaseIntegration: jest.fn(), +})); + +describe('supabase', () => { + afterEach(() => { + jest.resetAllMocks(); + }); + + +}); \ No newline at end of file From 28301bd1dcc5cc095967b6610968e5675363de94 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Thu, 23 Oct 2025 09:34:00 +0200 Subject: [PATCH 2/4] Tests for Supabase integration --- .../core/test/integrations/supabase.test.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/core/test/integrations/supabase.test.ts b/packages/core/test/integrations/supabase.test.ts index 1da7b5871c..5dcdaf63f4 100644 --- a/packages/core/test/integrations/supabase.test.ts +++ b/packages/core/test/integrations/supabase.test.ts @@ -1,13 +1,29 @@ -import * as environment from '../../src/js/utils/environment'; +import { supabaseIntegration as browserSupabaseIntegration } from '@sentry/browser'; +import { supabaseIntegration } from '../../src/js'; jest.mock('@sentry/browser', () => ({ supabaseIntegration: jest.fn(), })); +function createMockClient() { + return { + init: jest.fn(), + }; +} + describe('supabase', () => { afterEach(() => { jest.resetAllMocks(); }); + // this test is sufficient to test the integration because everything else + // is covered by the integration tests in the @sentry/browser package + it('passes React Native options to browserSupabaseIntegration', () => { + const mockClient = createMockClient(); + supabaseIntegration({supabaseClient: mockClient}); + expect(browserSupabaseIntegration).toHaveBeenCalledWith({ + supabaseClient: mockClient, + }); + }); }); \ No newline at end of file From 1d9b5aa7d2d3f7833d8dc98e83b402b2cfb0867d Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Thu, 23 Oct 2025 09:42:31 +0200 Subject: [PATCH 3/4] Lint fixes; changelog entry --- CHANGELOG.md | 1 + packages/core/src/js/integrations/supabase.ts | 6 +++--- packages/core/test/integrations/supabase.test.ts | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63cdd0b2e8..b81300d185 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### Features - Adds GraphQL integration ([#5299](https://github.com/getsentry/sentry-react-native/pull/5299)) +- Supabase integration ([#5296](https://github.com/getsentry/sentry-react-native/pull/5296)) ### Dependencies diff --git a/packages/core/src/js/integrations/supabase.ts b/packages/core/src/js/integrations/supabase.ts index af246289fa..d4263f44f9 100644 --- a/packages/core/src/js/integrations/supabase.ts +++ b/packages/core/src/js/integrations/supabase.ts @@ -3,7 +3,7 @@ import type { Integration } from '@sentry/core'; type SupabaseReactNativeIntegrationOptions = { supabaseClient: unknown; -} +}; /** * Use this integration to instrument your Supabase client. @@ -11,5 +11,5 @@ type SupabaseReactNativeIntegrationOptions = { * Learn more about Supabase at https://supabase.com */ export function supabaseIntegration(options: SupabaseReactNativeIntegrationOptions): Integration { - return browserSupabaseIntegration({supabaseClient: options.supabaseClient}) -} \ No newline at end of file + return browserSupabaseIntegration({ supabaseClient: options.supabaseClient }); +} diff --git a/packages/core/test/integrations/supabase.test.ts b/packages/core/test/integrations/supabase.test.ts index 5dcdaf63f4..c502fdf3a8 100644 --- a/packages/core/test/integrations/supabase.test.ts +++ b/packages/core/test/integrations/supabase.test.ts @@ -20,10 +20,10 @@ describe('supabase', () => { // is covered by the integration tests in the @sentry/browser package it('passes React Native options to browserSupabaseIntegration', () => { const mockClient = createMockClient(); - supabaseIntegration({supabaseClient: mockClient}); + supabaseIntegration({ supabaseClient: mockClient }); expect(browserSupabaseIntegration).toHaveBeenCalledWith({ supabaseClient: mockClient, }); }); -}); \ No newline at end of file +}); From a61c20101f9996ffdfa04bc9f0b795dee0cef469 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Thu, 23 Oct 2025 11:42:33 +0200 Subject: [PATCH 4/4] Changelog entry update --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b81300d185..52cf826b47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ ### Features - Adds GraphQL integration ([#5299](https://github.com/getsentry/sentry-react-native/pull/5299)) -- Supabase integration ([#5296](https://github.com/getsentry/sentry-react-native/pull/5296)) +- Adds Supabase integration ([#5296](https://github.com/getsentry/sentry-react-native/pull/5296)) ### Dependencies