@realtimex/email-automator 2.9.6 → 2.9.7

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.
@@ -1,9 +1,21 @@
1
1
  import { Router } from 'express';
2
2
  import { getServerSupabase } from '../services/supabase.js';
3
3
  import { config } from '../config/index.js';
4
+ import { readFileSync } from 'fs';
5
+ import { join } from 'path';
4
6
 
5
7
  const router = Router();
6
8
 
9
+ // Read version from package.json
10
+ let version = '1.0.0';
11
+ try {
12
+ const pkgPath = join(config.packageRoot, 'package.json');
13
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
14
+ version = pkg.version;
15
+ } catch (e) {
16
+ console.error('Failed to read version from package.json', e);
17
+ }
18
+
7
19
  router.get('/', async (_req, res) => {
8
20
  const supabase = getServerSupabase();
9
21
  let dbStatus = 'unknown';
@@ -22,7 +34,7 @@ router.get('/', async (_req, res) => {
22
34
  res.json({
23
35
  status: 'healthy',
24
36
  timestamp: new Date().toISOString(),
25
- version: '1.0.0',
37
+ version,
26
38
  environment: config.nodeEnv,
27
39
  services: {
28
40
  database: dbStatus,
@@ -5,6 +5,7 @@ import { createLogger } from '../utils/logger.js';
5
5
  const logger = createLogger('SupabaseService');
6
6
 
7
7
  let serverClient: SupabaseClient | null = null;
8
+ let lastConfigHash = '';
8
9
 
9
10
  export function isValidUrl(url: string): boolean {
10
11
  try {
@@ -14,16 +15,22 @@ export function isValidUrl(url: string): boolean {
14
15
  }
15
16
  }
16
17
 
17
- export function getServerSupabase(): SupabaseClient | null {
18
- if (serverClient) return serverClient;
18
+ function getConfigHash() {
19
+ return `${config.supabase.url}_${config.supabase.anonKey}`;
20
+ }
21
+
22
+ export function getServerSupabase(forceRefresh = false): SupabaseClient | null {
23
+ const currentHash = getConfigHash();
24
+
25
+ if (serverClient && !forceRefresh && currentHash === lastConfigHash) {
26
+ return serverClient;
27
+ }
19
28
 
20
29
  const url = config.supabase.url;
21
30
  const key = config.supabase.anonKey;
22
31
 
23
32
  if (!url || !key || !isValidUrl(url)) {
24
- logger.warn('Supabase not configured or invalid URL - skipping client initialization', {
25
- url: url || 'missing'
26
- });
33
+ logger.warn('Supabase not configured or invalid URL - skipping client initialization');
27
34
  return null;
28
35
  }
29
36
 
@@ -35,7 +42,8 @@ export function getServerSupabase(): SupabaseClient | null {
35
42
  },
36
43
  });
37
44
 
38
- logger.info('Server Supabase client initialized');
45
+ lastConfigHash = currentHash;
46
+ logger.info('Server Supabase client initialized/refreshed');
39
47
  return serverClient;
40
48
  } catch (error) {
41
49
  logger.error('Failed to initialize Supabase client', error);
@@ -1,7 +1,19 @@
1
1
  import { Router } from 'express';
2
2
  import { getServerSupabase } from '../services/supabase.js';
3
3
  import { config } from '../config/index.js';
4
+ import { readFileSync } from 'fs';
5
+ import { join } from 'path';
4
6
  const router = Router();
7
+ // Read version from package.json
8
+ let version = '1.0.0';
9
+ try {
10
+ const pkgPath = join(config.packageRoot, 'package.json');
11
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
12
+ version = pkg.version;
13
+ }
14
+ catch (e) {
15
+ console.error('Failed to read version from package.json', e);
16
+ }
5
17
  router.get('/', async (_req, res) => {
6
18
  const supabase = getServerSupabase();
7
19
  let dbStatus = 'unknown';
@@ -20,7 +32,7 @@ router.get('/', async (_req, res) => {
20
32
  res.json({
21
33
  status: 'healthy',
22
34
  timestamp: new Date().toISOString(),
23
- version: '1.0.0',
35
+ version,
24
36
  environment: config.nodeEnv,
25
37
  services: {
26
38
  database: dbStatus,
@@ -3,6 +3,7 @@ import { config } from '../config/index.js';
3
3
  import { createLogger } from '../utils/logger.js';
4
4
  const logger = createLogger('SupabaseService');
5
5
  let serverClient = null;
6
+ let lastConfigHash = '';
6
7
  export function isValidUrl(url) {
7
8
  try {
8
9
  return url.startsWith('http://') || url.startsWith('https://');
@@ -11,15 +12,18 @@ export function isValidUrl(url) {
11
12
  return false;
12
13
  }
13
14
  }
14
- export function getServerSupabase() {
15
- if (serverClient)
15
+ function getConfigHash() {
16
+ return `${config.supabase.url}_${config.supabase.anonKey}`;
17
+ }
18
+ export function getServerSupabase(forceRefresh = false) {
19
+ const currentHash = getConfigHash();
20
+ if (serverClient && !forceRefresh && currentHash === lastConfigHash) {
16
21
  return serverClient;
22
+ }
17
23
  const url = config.supabase.url;
18
24
  const key = config.supabase.anonKey;
19
25
  if (!url || !key || !isValidUrl(url)) {
20
- logger.warn('Supabase not configured or invalid URL - skipping client initialization', {
21
- url: url || 'missing'
22
- });
26
+ logger.warn('Supabase not configured or invalid URL - skipping client initialization');
23
27
  return null;
24
28
  }
25
29
  try {
@@ -29,7 +33,8 @@ export function getServerSupabase() {
29
33
  persistSession: false,
30
34
  },
31
35
  });
32
- logger.info('Server Supabase client initialized');
36
+ lastConfigHash = currentHash;
37
+ logger.info('Server Supabase client initialized/refreshed');
33
38
  return serverClient;
34
39
  }
35
40
  catch (error) {