@goatlab/node-backend 0.2.6 → 1.0.0
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.
- package/README.md +146 -14
- package/dist/container/Container.d.ts +86 -2
- package/dist/container/Container.js +260 -10
- package/dist/container/Container.js.map +1 -1
- package/dist/container/examples/batch-operations.example.d.ts +1 -0
- package/dist/container/examples/batch-operations.example.js +165 -0
- package/dist/container/examples/batch-operations.example.js.map +1 -0
- package/dist/container/types.d.ts +50 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bootstraps/getExpressTrpcApp.js +69 -7
- package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
- package/dist/server/middleware/memoryMonitor.example.d.ts +1 -0
- package/dist/server/middleware/memoryMonitor.example.js +109 -0
- package/dist/server/middleware/memoryMonitor.example.js.map +1 -0
- package/dist/server/middleware/memoryMonitor.middleware.d.ts +42 -0
- package/dist/server/middleware/memoryMonitor.middleware.js +134 -0
- package/dist/server/middleware/memoryMonitor.middleware.js.map +1 -0
- package/dist/server/services/secrets/examples/container-preload.example.d.ts +1 -0
- package/dist/server/services/secrets/examples/container-preload.example.js +148 -0
- package/dist/server/services/secrets/examples/container-preload.example.js.map +1 -0
- package/dist/server/services/secrets/index.d.ts +1 -0
- package/dist/server/services/secrets/index.js +6 -0
- package/dist/server/services/secrets/index.js.map +1 -0
- package/dist/server/services/secrets/secret.service.d.ts +46 -6
- package/dist/server/services/secrets/secret.service.js +256 -30
- package/dist/server/services/secrets/secret.service.js.map +1 -1
- package/dist/server/services/translations/translation.model.js +2 -1
- package/dist/server/services/translations/translation.model.js.map +1 -1
- package/dist/server/services/translations/translation.service.d.ts +8 -1
- package/dist/server/services/translations/translation.service.js +123 -13
- package/dist/server/services/translations/translation.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -2,25 +2,183 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SecretService = void 0;
|
|
4
4
|
const fs = require("fs");
|
|
5
|
+
const fs_1 = require("fs");
|
|
5
6
|
const undici_1 = require("undici");
|
|
6
7
|
const node_utils_1 = require("@goatlab/node-utils");
|
|
7
8
|
const colors_1 = require("kleur/colors");
|
|
9
|
+
// Enhanced cache with TTL support
|
|
8
10
|
const memoryCache = {};
|
|
11
|
+
// Default TTL in milliseconds (5 minutes)
|
|
12
|
+
const DEFAULT_TTL_MS = 5 * 60 * 1000;
|
|
9
13
|
class SecretService {
|
|
10
14
|
provider;
|
|
11
15
|
location;
|
|
12
16
|
encryptionKey;
|
|
13
17
|
vaultConfig;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
cacheTTL;
|
|
19
|
+
preloadedSecrets;
|
|
20
|
+
isPreloaded = false;
|
|
21
|
+
fileWatcher;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.provider = config.provider;
|
|
24
|
+
this.location = config.location;
|
|
25
|
+
this.encryptionKey = config.encryptionKey;
|
|
26
|
+
this.vaultConfig = config.vaultConfig;
|
|
27
|
+
this.cacheTTL = config.cacheTTL ?? DEFAULT_TTL_MS;
|
|
19
28
|
}
|
|
20
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Preload secrets asynchronously for synchronous access later
|
|
31
|
+
* This method loads secrets once and stores them in the instance
|
|
32
|
+
*/
|
|
33
|
+
async preload() {
|
|
34
|
+
try {
|
|
35
|
+
const secrets = await this.loadSecretsAsync();
|
|
36
|
+
this.preloadedSecrets = secrets;
|
|
37
|
+
this.isPreloaded = true;
|
|
38
|
+
// Set up file watching for automatic invalidation (FILE provider only)
|
|
39
|
+
if (this.provider === 'FILE' && !this.fileWatcher) {
|
|
40
|
+
this.setupFileWatcher();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
this.isPreloaded = false;
|
|
45
|
+
throw new Error(`Failed to preload secrets: ${error.message}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Invalidate preloaded secrets and stop file watching
|
|
50
|
+
*/
|
|
51
|
+
async invalidate() {
|
|
52
|
+
this.preloadedSecrets = undefined;
|
|
53
|
+
this.isPreloaded = false;
|
|
54
|
+
// Clear cache to force reload
|
|
55
|
+
if (this.provider === 'FILE') {
|
|
56
|
+
delete memoryCache[this.location];
|
|
57
|
+
}
|
|
58
|
+
else if (this.provider === 'ENV') {
|
|
59
|
+
delete memoryCache[`env_${this.location}`];
|
|
60
|
+
}
|
|
61
|
+
else if (this.provider === 'VAULT' && this.vaultConfig) {
|
|
62
|
+
delete memoryCache[`vault_${this.vaultConfig.endpoint}_${this.location}`];
|
|
63
|
+
}
|
|
64
|
+
// Stop file watching
|
|
65
|
+
if (this.fileWatcher) {
|
|
66
|
+
this.fileWatcher.close();
|
|
67
|
+
this.fileWatcher = undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Set up file watching for automatic invalidation
|
|
72
|
+
*/
|
|
73
|
+
setupFileWatcher() {
|
|
74
|
+
if (this.provider !== 'FILE')
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
this.fileWatcher = fs.watch(this.location, async (eventType) => {
|
|
78
|
+
if (eventType === 'change') {
|
|
79
|
+
console.log(`🔄 Secret file changed: ${(0, colors_1.magenta)(this.location)}`);
|
|
80
|
+
await this.invalidate();
|
|
81
|
+
// Optionally auto-reload
|
|
82
|
+
try {
|
|
83
|
+
await this.preload();
|
|
84
|
+
console.log(`✅ Secrets reloaded successfully`);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error(`❌ Failed to reload secrets: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.warn(`⚠️ Failed to set up file watching: ${error.message}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Load secrets asynchronously with decryption for all providers
|
|
98
|
+
*/
|
|
99
|
+
async loadSecretsAsync() {
|
|
100
|
+
let secrets;
|
|
101
|
+
switch (this.provider) {
|
|
102
|
+
case 'FILE':
|
|
103
|
+
secrets = await this.loadSecretsFromFileAsync();
|
|
104
|
+
break;
|
|
105
|
+
case 'ENV':
|
|
106
|
+
secrets = this.loadSecretsFromEnv();
|
|
107
|
+
break;
|
|
108
|
+
case 'VAULT':
|
|
109
|
+
secrets = await this.loadSecretsFromVault();
|
|
110
|
+
break;
|
|
111
|
+
case 'GCP':
|
|
112
|
+
secrets = this.loadSecretsFromGCP();
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
throw new Error(`Unknown provider: ${this.provider}`);
|
|
116
|
+
}
|
|
117
|
+
// No need to decrypt here as each provider method already handles decryption
|
|
118
|
+
return secrets;
|
|
119
|
+
}
|
|
120
|
+
// Helper method to check if cache entry is valid
|
|
121
|
+
isCacheValid(entry) {
|
|
122
|
+
if (!entry)
|
|
123
|
+
return false;
|
|
124
|
+
if (!entry.expiresAt)
|
|
125
|
+
return true; // No expiration set
|
|
126
|
+
return Date.now() < entry.expiresAt;
|
|
127
|
+
}
|
|
128
|
+
// Helper method to set cache with TTL
|
|
129
|
+
setCache(key, data, ttl) {
|
|
130
|
+
const expiresAt = ttl ? Date.now() + ttl : undefined;
|
|
131
|
+
memoryCache[key] = { data, expiresAt };
|
|
132
|
+
}
|
|
133
|
+
// Helper method to get from cache
|
|
134
|
+
getCache(key) {
|
|
135
|
+
const entry = memoryCache[key];
|
|
136
|
+
if (this.isCacheValid(entry)) {
|
|
137
|
+
return entry?.data;
|
|
138
|
+
}
|
|
139
|
+
// Clear expired entry
|
|
140
|
+
if (entry) {
|
|
141
|
+
delete memoryCache[key];
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
// Async version of loadSecretsFromFile
|
|
146
|
+
async loadSecretsFromFileAsync() {
|
|
147
|
+
const cached = this.getCache(this.location);
|
|
148
|
+
if (cached) {
|
|
149
|
+
return cached;
|
|
150
|
+
}
|
|
151
|
+
const start = process.hrtime.bigint();
|
|
152
|
+
try {
|
|
153
|
+
// Check if file exists using async stat
|
|
154
|
+
await fs_1.promises.stat(this.location);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
throw new Error(`Secret file "${this.location}" does not exist`);
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
const fileContents = await fs_1.promises.readFile(this.location, 'utf-8');
|
|
161
|
+
const secretEncryptedObject = JSON.parse(fileContents);
|
|
162
|
+
console.log(`🔐 Secrets loaded: ${(0, colors_1.magenta)(this.location.split('/').slice(-2).join('/'))}`);
|
|
163
|
+
const decrypted = node_utils_1.Security.decryptObject(secretEncryptedObject, this.encryptionKey);
|
|
164
|
+
this.setCache(this.location, decrypted, this.cacheTTL);
|
|
165
|
+
const durationMs = Number(process.hrtime.bigint() - start) / 1_000_000;
|
|
166
|
+
console.log(`⏱️ loadSecrets(${this.location}) took ${durationMs.toFixed(3)}ms`);
|
|
167
|
+
return decrypted;
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
if (err instanceof SyntaxError) {
|
|
171
|
+
throw new Error(`Invalid JSON in secret file: ${this.location}`);
|
|
172
|
+
}
|
|
173
|
+
console.error(err);
|
|
174
|
+
throw new Error(`loadSecrets failed to decrypt: ${this.location}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Synchronous version for backward compatibility
|
|
21
178
|
loadSecretsFromFile() {
|
|
22
|
-
|
|
23
|
-
|
|
179
|
+
const cached = this.getCache(this.location);
|
|
180
|
+
if (cached) {
|
|
181
|
+
return cached;
|
|
24
182
|
}
|
|
25
183
|
if (!fs.existsSync(this.location)) {
|
|
26
184
|
throw new Error(`Secret file "${this.location}" does not exist`);
|
|
@@ -30,11 +188,11 @@ class SecretService {
|
|
|
30
188
|
const secretEncryptedObject = JSON.parse(fileContents);
|
|
31
189
|
console.log(`🔐 Secrets loaded: ${(0, colors_1.magenta)(this.location.split('/').slice(-2).join('/'))}`);
|
|
32
190
|
try {
|
|
33
|
-
const
|
|
34
|
-
|
|
191
|
+
const decrypted = node_utils_1.Security.decryptObject(secretEncryptedObject, this.encryptionKey);
|
|
192
|
+
this.setCache(this.location, decrypted, this.cacheTTL);
|
|
35
193
|
const durationMs = Number(process.hrtime.bigint() - start) / 1_000_000;
|
|
36
194
|
console.log(`⏱️ loadSecrets(${this.location}) took ${durationMs.toFixed(3)}ms`);
|
|
37
|
-
return
|
|
195
|
+
return decrypted;
|
|
38
196
|
}
|
|
39
197
|
catch (err) {
|
|
40
198
|
console.error(err);
|
|
@@ -42,15 +200,27 @@ class SecretService {
|
|
|
42
200
|
}
|
|
43
201
|
}
|
|
44
202
|
loadSecretsFromGCP() {
|
|
45
|
-
|
|
203
|
+
// TODO: Implement GCP Secret Manager integration
|
|
204
|
+
// For now, return empty object but apply decryption if needed
|
|
205
|
+
const secrets = {};
|
|
206
|
+
if (this.encryptionKey) {
|
|
207
|
+
try {
|
|
208
|
+
return node_utils_1.Security.decryptObject(secrets, this.encryptionKey);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
console.warn(`Failed to decrypt GCP secrets: ${error.message}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return secrets;
|
|
46
215
|
}
|
|
47
216
|
loadEncryptionKeyFromGCP() {
|
|
48
217
|
return '';
|
|
49
218
|
}
|
|
50
219
|
loadSecretsFromEnv() {
|
|
51
220
|
const cacheKey = `env_${this.location}`;
|
|
52
|
-
|
|
53
|
-
|
|
221
|
+
const cached = this.getCache(cacheKey);
|
|
222
|
+
if (cached) {
|
|
223
|
+
return cached;
|
|
54
224
|
}
|
|
55
225
|
const start = process.hrtime.bigint();
|
|
56
226
|
try {
|
|
@@ -76,10 +246,21 @@ class SecretService {
|
|
|
76
246
|
if (!this.location) {
|
|
77
247
|
console.warn('ENV provider without location prefix - this will expose all environment variables');
|
|
78
248
|
}
|
|
79
|
-
|
|
249
|
+
// Apply tenant-specific decryption if encryption key is provided
|
|
250
|
+
let decryptedSecrets = secrets;
|
|
251
|
+
if (this.encryptionKey) {
|
|
252
|
+
try {
|
|
253
|
+
decryptedSecrets = node_utils_1.Security.decryptObject(secrets, this.encryptionKey);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
// If decryption fails, assume secrets are not encrypted
|
|
257
|
+
console.warn(`Failed to decrypt ENV secrets: ${error.message}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
this.setCache(cacheKey, decryptedSecrets, this.cacheTTL);
|
|
80
261
|
const durationMs = Number(process.hrtime.bigint() - start) / 1_000_000;
|
|
81
262
|
console.log(`🔐 Secrets loaded from ENV: ${(0, colors_1.magenta)(this.location || 'all')} (${durationMs.toFixed(3)}ms)`);
|
|
82
|
-
return
|
|
263
|
+
return decryptedSecrets;
|
|
83
264
|
}
|
|
84
265
|
catch (error) {
|
|
85
266
|
console.error('Failed to load secrets from ENV:', error.message);
|
|
@@ -91,8 +272,9 @@ class SecretService {
|
|
|
91
272
|
throw new Error('Vault configuration is required for VAULT provider');
|
|
92
273
|
}
|
|
93
274
|
const cacheKey = `vault_${this.vaultConfig.endpoint}_${this.location}`;
|
|
94
|
-
|
|
95
|
-
|
|
275
|
+
const cached = this.getCache(cacheKey);
|
|
276
|
+
if (cached) {
|
|
277
|
+
return cached;
|
|
96
278
|
}
|
|
97
279
|
const start = process.hrtime.bigint();
|
|
98
280
|
try {
|
|
@@ -117,8 +299,18 @@ class SecretService {
|
|
|
117
299
|
}
|
|
118
300
|
const data = (await response.json());
|
|
119
301
|
// Vault KV v2 stores data in data.data
|
|
120
|
-
|
|
121
|
-
|
|
302
|
+
let secrets = data.data?.data || data.data || {};
|
|
303
|
+
// Apply tenant-specific decryption if encryption key is provided
|
|
304
|
+
if (this.encryptionKey) {
|
|
305
|
+
try {
|
|
306
|
+
secrets = node_utils_1.Security.decryptObject(secrets, this.encryptionKey);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
// If decryption fails, assume secrets are not encrypted
|
|
310
|
+
console.warn(`Failed to decrypt Vault secrets: ${error.message}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
this.setCache(cacheKey, secrets, this.cacheTTL);
|
|
122
314
|
const durationMs = Number(process.hrtime.bigint() - start) / 1_000_000;
|
|
123
315
|
console.log(`🔐 Secrets loaded from Vault: ${(0, colors_1.magenta)(this.location)} (${durationMs.toFixed(3)}ms)`);
|
|
124
316
|
return secrets;
|
|
@@ -177,12 +369,14 @@ class SecretService {
|
|
|
177
369
|
if (this.provider === 'ENV') {
|
|
178
370
|
return this.loadSecretsFromEnv();
|
|
179
371
|
}
|
|
180
|
-
return
|
|
372
|
+
// For FILE provider, return async version by default
|
|
373
|
+
// The synchronous loadSecretsFromFile is still available for backward compatibility
|
|
374
|
+
return this.loadSecretsFromFileAsync();
|
|
181
375
|
}
|
|
182
376
|
loadEncryptionKey() {
|
|
183
377
|
return this.encryptionKey;
|
|
184
378
|
}
|
|
185
|
-
async
|
|
379
|
+
async getSecretAsync(secretName) {
|
|
186
380
|
const secrets = await this.loadSecrets();
|
|
187
381
|
const secret = secrets[secretName];
|
|
188
382
|
if (!secret) {
|
|
@@ -190,24 +384,36 @@ class SecretService {
|
|
|
190
384
|
}
|
|
191
385
|
return secret;
|
|
192
386
|
}
|
|
193
|
-
async
|
|
194
|
-
const secretValue = await this.
|
|
387
|
+
async getSecretJsonAsync(secretName) {
|
|
388
|
+
const secretValue = await this.getSecretAsync(secretName);
|
|
195
389
|
return JSON.parse(secretValue);
|
|
196
390
|
}
|
|
197
|
-
//
|
|
391
|
+
// Keep async versions for backward compatibility
|
|
392
|
+
async getSecret(secretName) {
|
|
393
|
+
return this.getSecretAsync(secretName);
|
|
394
|
+
}
|
|
395
|
+
async getSecretJson(secretName) {
|
|
396
|
+
return this.getSecretJsonAsync(secretName);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get a secret synchronously (requires preload() to be called first)
|
|
400
|
+
*/
|
|
198
401
|
getSecretSync(secretName) {
|
|
199
|
-
if (this.
|
|
200
|
-
throw new Error('
|
|
402
|
+
if (!this.isPreloaded || !this.preloadedSecrets) {
|
|
403
|
+
throw new Error('Secrets not preloaded. Call preload() before using synchronous methods.');
|
|
201
404
|
}
|
|
202
|
-
const
|
|
203
|
-
const secret = secrets[secretName];
|
|
405
|
+
const secret = this.preloadedSecrets[secretName];
|
|
204
406
|
if (!secret) {
|
|
205
407
|
throw new Error(`Secret ${secretName.toString()} does not exist in ${this.location} env`);
|
|
206
408
|
}
|
|
207
409
|
return secret;
|
|
208
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* Get a JSON secret synchronously (requires preload() to be called first)
|
|
413
|
+
*/
|
|
209
414
|
getSecretJsonSync(secretName) {
|
|
210
|
-
|
|
415
|
+
const secretValue = this.getSecretSync(secretName);
|
|
416
|
+
return JSON.parse(secretValue);
|
|
211
417
|
}
|
|
212
418
|
// Utility method to clear cache for testing
|
|
213
419
|
static clearCache() {
|
|
@@ -215,6 +421,26 @@ class SecretService {
|
|
|
215
421
|
delete memoryCache[key];
|
|
216
422
|
});
|
|
217
423
|
}
|
|
424
|
+
// Utility method to clear expired cache entries
|
|
425
|
+
static cleanupExpiredCache() {
|
|
426
|
+
const now = Date.now();
|
|
427
|
+
Object.entries(memoryCache).forEach(([key, entry]) => {
|
|
428
|
+
if (entry?.expiresAt && entry.expiresAt < now) {
|
|
429
|
+
delete memoryCache[key];
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Clean up resources (file watchers, etc.) when service is no longer needed
|
|
435
|
+
*/
|
|
436
|
+
dispose() {
|
|
437
|
+
if (this.fileWatcher) {
|
|
438
|
+
this.fileWatcher.close();
|
|
439
|
+
this.fileWatcher = undefined;
|
|
440
|
+
}
|
|
441
|
+
this.preloadedSecrets = undefined;
|
|
442
|
+
this.isPreloaded = false;
|
|
443
|
+
}
|
|
218
444
|
}
|
|
219
445
|
exports.SecretService = SecretService;
|
|
220
446
|
//# sourceMappingURL=secret.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.service.js","sourceRoot":"","sources":["../../../../src/server/services/secrets/secret.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secret.service.js","sourceRoot":"","sources":["../../../../src/server/services/secrets/secret.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.missingTranslationExcludeList = exports.LANG_DEFAULT = void 0;
|
|
3
|
+
exports.missingTranslationExcludeList = exports.LANG_DEFAULT = exports.SUPPORTED_LANGUAGES = void 0;
|
|
4
|
+
exports.SUPPORTED_LANGUAGES = ['en_us', 'en_gb', 'es_us', 'es_cl', 'es_mx'];
|
|
4
5
|
exports.LANG_DEFAULT = 'en_us';
|
|
5
6
|
exports.missingTranslationExcludeList = new Set([]);
|
|
6
7
|
//# sourceMappingURL=translation.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation.model.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.model.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"translation.model.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.model.ts"],"names":[],"mappings":";;;AAEa,QAAA,mBAAmB,GAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAC3E,QAAA,YAAY,GAAG,OAAO,CAAA;AAEtB,QAAA,6BAA6B,GAAG,IAAI,GAAG,CAAS,EAAE,CAAC,CAAA"}
|
|
@@ -4,6 +4,9 @@ export interface UserLanguageOptions {
|
|
|
4
4
|
language: LANG | null;
|
|
5
5
|
}
|
|
6
6
|
declare class TranslationService {
|
|
7
|
+
private initialized;
|
|
8
|
+
private initialize;
|
|
9
|
+
private loadLocaleSync;
|
|
7
10
|
getLocale(lang: LANG | null): StringMap;
|
|
8
11
|
getLocaleMap(): Record<LANG, StringMap>;
|
|
9
12
|
missingKey(key: string): string;
|
|
@@ -13,11 +16,15 @@ declare class TranslationService {
|
|
|
13
16
|
*/
|
|
14
17
|
translateIfExists(key: string, user: UserLanguageOptions, args?: {}): string | undefined;
|
|
15
18
|
formatResult(key: string, text: string, args?: {}): string;
|
|
16
|
-
reportMissing(
|
|
19
|
+
reportMissing(_key: string, opt: UserLanguageOptions): void;
|
|
17
20
|
/**
|
|
18
21
|
* Based on: https://nodejs.org/api/intl.html#intl_detecting_internationalization_support
|
|
19
22
|
*/
|
|
20
23
|
hasFullICU(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Clear cache and reinitialize - useful for testing
|
|
26
|
+
*/
|
|
27
|
+
clearCacheAndReinitialize(): void;
|
|
21
28
|
}
|
|
22
29
|
export declare const translationService: TranslationService;
|
|
23
30
|
export declare function tr(key: string, user: UserLanguageOptions, args?: {}): string;
|
|
@@ -4,14 +4,84 @@ exports.translationService = void 0;
|
|
|
4
4
|
exports.tr = tr;
|
|
5
5
|
exports.trIfExists = trIfExists;
|
|
6
6
|
const pupa_1 = require("@goatlab/js-utils/dist/Strings/pupa");
|
|
7
|
+
const pupa_2 = require("@goatlab/js-utils/dist/Strings/pupa");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
7
10
|
const consts_1 = require("../../consts");
|
|
8
|
-
|
|
11
|
+
// import { templateUtil } from './template.util' // No longer needed with direct pupa usage
|
|
9
12
|
const translation_model_1 = require("./translation.model");
|
|
13
|
+
// Cache for compiled templates - key format: "lang:key"
|
|
14
|
+
const templateCache = new Map();
|
|
15
|
+
// Cache for loaded locale files
|
|
16
|
+
const localeCache = new Map();
|
|
17
|
+
// Precompile template function
|
|
18
|
+
function compileTemplate(template) {
|
|
19
|
+
// Pre-parse the template to identify placeholders
|
|
20
|
+
const doubleBraceRegex = /{{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}}/gi;
|
|
21
|
+
const braceRegex = /{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}/gi;
|
|
22
|
+
const hasDoubleBraces = doubleBraceRegex.test(template);
|
|
23
|
+
const hasSingleBraces = braceRegex.test(template);
|
|
24
|
+
// If no placeholders, return a function that returns the template as-is
|
|
25
|
+
if (!hasDoubleBraces && !hasSingleBraces) {
|
|
26
|
+
return () => template;
|
|
27
|
+
}
|
|
28
|
+
// Return optimized template function
|
|
29
|
+
return (args) => {
|
|
30
|
+
if (!args || Object.keys(args).length === 0) {
|
|
31
|
+
return template;
|
|
32
|
+
}
|
|
33
|
+
return (0, pupa_2.pupa)(template, args);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
10
36
|
class TranslationService {
|
|
11
|
-
|
|
37
|
+
initialized = false;
|
|
38
|
+
// Initialize service by preloading all locale files
|
|
39
|
+
initialize() {
|
|
40
|
+
if (this.initialized)
|
|
41
|
+
return;
|
|
42
|
+
// Preload all supported language files
|
|
43
|
+
if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
44
|
+
for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
|
|
45
|
+
this.loadLocaleSync(lang);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this.initialized = true;
|
|
49
|
+
}
|
|
50
|
+
// Load locale file synchronously (used during initialization)
|
|
51
|
+
loadLocaleSync(lang) {
|
|
52
|
+
if (localeCache.has(lang)) {
|
|
53
|
+
return localeCache.get(lang);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const filePath = (0, node_path_1.join)(consts_1.config.langDir, `${lang}.json`);
|
|
57
|
+
const content = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
|
|
58
|
+
const locale = JSON.parse(content);
|
|
59
|
+
localeCache.set(lang, locale);
|
|
60
|
+
return locale;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
console.warn(`Failed to load locale: ${lang}`);
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Get locale from cache (backward compatible)
|
|
12
68
|
getLocale(lang) {
|
|
69
|
+
if (!lang)
|
|
70
|
+
return undefined;
|
|
71
|
+
// Ensure initialization
|
|
72
|
+
if (!this.initialized) {
|
|
73
|
+
this.initialize();
|
|
74
|
+
}
|
|
75
|
+
const cached = localeCache.get(lang);
|
|
76
|
+
if (cached) {
|
|
77
|
+
// Return a copy to maintain backward compatibility
|
|
78
|
+
return { ...cached };
|
|
79
|
+
}
|
|
80
|
+
// Try to load dynamically if not in cache (backward compatibility)
|
|
13
81
|
try {
|
|
14
|
-
|
|
82
|
+
const locale = { ...require(`${consts_1.config.langDir}/${lang}.json`) };
|
|
83
|
+
localeCache.set(lang, locale);
|
|
84
|
+
return locale;
|
|
15
85
|
}
|
|
16
86
|
catch {
|
|
17
87
|
console.warn(`Unsupported lang ${lang}`);
|
|
@@ -19,10 +89,21 @@ class TranslationService {
|
|
|
19
89
|
}
|
|
20
90
|
}
|
|
21
91
|
getLocaleMap() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
92
|
+
// Ensure initialization
|
|
93
|
+
if (!this.initialized) {
|
|
94
|
+
this.initialize();
|
|
95
|
+
}
|
|
96
|
+
const map = {};
|
|
97
|
+
// Use cached locales if available
|
|
98
|
+
if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
99
|
+
for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
|
|
100
|
+
const locale = localeCache.get(lang) || this.getLocale(lang);
|
|
101
|
+
if (locale) {
|
|
102
|
+
map[lang] = locale;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return map;
|
|
26
107
|
}
|
|
27
108
|
missingKey(key) {
|
|
28
109
|
return `[${key}]`;
|
|
@@ -41,9 +122,14 @@ class TranslationService {
|
|
|
41
122
|
* Implementation based on static ./src/lang/*.json files
|
|
42
123
|
*/
|
|
43
124
|
translateIfExists(key, user, args = {}) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
125
|
+
// Ensure initialization
|
|
126
|
+
if (!this.initialized) {
|
|
127
|
+
this.initialize();
|
|
128
|
+
}
|
|
129
|
+
// Get locale from cache directly for better performance
|
|
130
|
+
const locale = user.language ? localeCache.get(user.language) : undefined;
|
|
131
|
+
const fallbackLocale = localeCache.get(translation_model_1.LANG_DEFAULT) || this.getLocale(translation_model_1.LANG_DEFAULT);
|
|
132
|
+
const value = (locale && locale[key]) ?? (fallbackLocale && fallbackLocale[key]);
|
|
47
133
|
return value && this.formatResult(key, value, args);
|
|
48
134
|
}
|
|
49
135
|
formatResult(key, text, args = {}) {
|
|
@@ -51,15 +137,23 @@ class TranslationService {
|
|
|
51
137
|
return `** ${key} **`;
|
|
52
138
|
}
|
|
53
139
|
if (Object.keys(args).length) {
|
|
140
|
+
// Check template cache first
|
|
141
|
+
const cacheKey = `${key}:${text}`;
|
|
142
|
+
let compiledTemplate = templateCache.get(cacheKey);
|
|
143
|
+
if (!compiledTemplate) {
|
|
144
|
+
// Compile and cache the template
|
|
145
|
+
compiledTemplate = compileTemplate(text);
|
|
146
|
+
templateCache.set(cacheKey, compiledTemplate);
|
|
147
|
+
}
|
|
54
148
|
try {
|
|
55
|
-
return
|
|
149
|
+
return compiledTemplate(args);
|
|
56
150
|
}
|
|
57
151
|
catch (err) {
|
|
58
152
|
if (err instanceof pupa_1.MissingValueError) {
|
|
59
153
|
// sentryService.captureMessage(
|
|
60
154
|
// `template value missing for key=${key}, param=${err.key}`,
|
|
61
155
|
// )
|
|
62
|
-
return
|
|
156
|
+
return (0, pupa_2.pupa)(text, args, { ignoreMissing: true });
|
|
63
157
|
}
|
|
64
158
|
throw err;
|
|
65
159
|
}
|
|
@@ -68,7 +162,7 @@ class TranslationService {
|
|
|
68
162
|
return text;
|
|
69
163
|
}
|
|
70
164
|
}
|
|
71
|
-
reportMissing(
|
|
165
|
+
reportMissing(_key, opt) {
|
|
72
166
|
console.log(opt); // For Sentry
|
|
73
167
|
//sentryService.captureMessage(`translation missing for key=${key}}`)
|
|
74
168
|
}
|
|
@@ -85,8 +179,24 @@ class TranslationService {
|
|
|
85
179
|
return false;
|
|
86
180
|
}
|
|
87
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Clear cache and reinitialize - useful for testing
|
|
184
|
+
*/
|
|
185
|
+
clearCacheAndReinitialize() {
|
|
186
|
+
// Clear all caches
|
|
187
|
+
localeCache.clear();
|
|
188
|
+
templateCache.clear();
|
|
189
|
+
// Reset initialization state
|
|
190
|
+
this.initialized = false;
|
|
191
|
+
// Reinitialize
|
|
192
|
+
this.initialize();
|
|
193
|
+
}
|
|
88
194
|
}
|
|
89
195
|
exports.translationService = new TranslationService();
|
|
196
|
+
// Initialize on module load to preload all locales
|
|
197
|
+
if (typeof translation_model_1.SUPPORTED_LANGUAGES !== 'undefined' && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
198
|
+
exports.translationService['initialize']();
|
|
199
|
+
}
|
|
90
200
|
// Alias
|
|
91
201
|
function tr(key, user, args = {}) {
|
|
92
202
|
return exports.translationService.translate(key, user, args);
|