@open-mercato/shared 0.6.6-develop.6460.1.f94c74174c → 0.6.6-develop.6471.1.9ab5bdd79a
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/.turbo/turbo-build.log +1 -1
- package/AGENTS.md +1 -0
- package/dist/lib/commands/command-bus.js +4 -2
- package/dist/lib/commands/command-bus.js.map +2 -2
- package/dist/lib/commands/command-interceptor-runner.js +4 -2
- package/dist/lib/commands/command-interceptor-runner.js.map +2 -2
- package/dist/lib/commands/flush.js +3 -4
- package/dist/lib/commands/flush.js.map +2 -2
- package/dist/lib/commands/helpers.js +3 -1
- package/dist/lib/commands/helpers.js.map +2 -2
- package/dist/lib/commands/registry.js +5 -3
- package/dist/lib/commands/registry.js.map +2 -2
- package/dist/lib/commands/scope.js +5 -3
- package/dist/lib/commands/scope.js.map +2 -2
- package/dist/lib/crud/advanced-filter-integration.js +3 -1
- package/dist/lib/crud/advanced-filter-integration.js.map +2 -2
- package/dist/lib/crud/cache.js +3 -1
- package/dist/lib/crud/cache.js.map +2 -2
- package/dist/lib/crud/custom-fields.js +4 -2
- package/dist/lib/crud/custom-fields.js.map +2 -2
- package/dist/lib/crud/enricher-runner.js +6 -10
- package/dist/lib/crud/enricher-runner.js.map +2 -2
- package/dist/lib/crud/factory.js +10 -8
- package/dist/lib/crud/factory.js.map +2 -2
- package/dist/lib/crud/interceptor-registry.js +3 -3
- package/dist/lib/crud/interceptor-registry.js.map +2 -2
- package/dist/lib/crud/mutation-guard.js +4 -2
- package/dist/lib/crud/mutation-guard.js.map +2 -2
- package/dist/lib/crud/optimistic-lock.js +5 -6
- package/dist/lib/crud/optimistic-lock.js.map +2 -2
- package/dist/lib/crud/route-mutation-guard.js +3 -1
- package/dist/lib/crud/route-mutation-guard.js.map +2 -2
- package/dist/lib/crud/sync-event-runner.js +3 -1
- package/dist/lib/crud/sync-event-runner.js.map +2 -2
- package/dist/lib/data/engine.js +5 -5
- package/dist/lib/data/engine.js.map +2 -2
- package/dist/lib/db/mikro.js +5 -3
- package/dist/lib/db/mikro.js.map +2 -2
- package/dist/lib/di/container.js +3 -1
- package/dist/lib/di/container.js.map +2 -2
- package/dist/lib/encryption/aes.js +3 -1
- package/dist/lib/encryption/aes.js.map +2 -2
- package/dist/lib/encryption/entityFields.js +3 -1
- package/dist/lib/encryption/entityFields.js.map +2 -2
- package/dist/lib/encryption/entityIds.js +3 -1
- package/dist/lib/encryption/entityIds.js.map +2 -2
- package/dist/lib/encryption/kms.js +25 -32
- package/dist/lib/encryption/kms.js.map +2 -2
- package/dist/lib/encryption/subscriber.js +3 -1
- package/dist/lib/encryption/subscriber.js.map +2 -2
- package/dist/lib/encryption/tenantDataEncryptionService.js +3 -1
- package/dist/lib/encryption/tenantDataEncryptionService.js.map +2 -2
- package/dist/lib/indexers/error-log.js +4 -2
- package/dist/lib/indexers/error-log.js.map +2 -2
- package/dist/lib/indexers/status-log.js +5 -3
- package/dist/lib/indexers/status-log.js.map +2 -2
- package/dist/lib/logger/index.js +28 -0
- package/dist/lib/logger/index.js.map +7 -0
- package/dist/lib/logger/level.js +43 -0
- package/dist/lib/logger/level.js.map +7 -0
- package/dist/lib/logger/transport.console.js +39 -0
- package/dist/lib/logger/transport.console.js.map +7 -0
- package/dist/lib/logger/transport.js +17 -0
- package/dist/lib/logger/transport.js.map +7 -0
- package/dist/lib/logger/transport.pretty.js +85 -0
- package/dist/lib/logger/transport.pretty.js.map +7 -0
- package/dist/lib/logger/transport.server.js +85 -0
- package/dist/lib/logger/transport.server.js.map +7 -0
- package/dist/lib/middleware/page-executor.js +3 -1
- package/dist/lib/middleware/page-executor.js.map +2 -2
- package/dist/lib/modules/registry.js +3 -1
- package/dist/lib/modules/registry.js.map +2 -2
- package/dist/lib/profiler/index.js +3 -2
- package/dist/lib/profiler/index.js.map +2 -2
- package/dist/lib/query/engine.js +5 -6
- package/dist/lib/query/engine.js.map +2 -2
- package/dist/lib/query/query-extension-runner.js +5 -11
- package/dist/lib/query/query-extension-runner.js.map +2 -2
- package/dist/lib/redis/connection.js +3 -1
- package/dist/lib/redis/connection.js.map +2 -2
- package/dist/lib/url.js +7 -5
- package/dist/lib/url.js.map +2 -2
- package/dist/lib/version.js +1 -1
- package/dist/lib/version.js.map +1 -1
- package/dist/modules/analytics.js +3 -1
- package/dist/modules/analytics.js.map +2 -2
- package/dist/modules/dashboard/widgets.js +3 -1
- package/dist/modules/dashboard/widgets.js.map +2 -2
- package/dist/modules/events/factory.js +5 -3
- package/dist/modules/events/factory.js.map +2 -2
- package/dist/modules/overrides.js +16 -34
- package/dist/modules/overrides.js.map +2 -2
- package/dist/modules/registry.js +3 -1
- package/dist/modules/registry.js.map +2 -2
- package/dist/modules/search.js +3 -1
- package/dist/modules/search.js.map +2 -2
- package/dist/modules/widgets/injection-loader.js +6 -6
- package/dist/modules/widgets/injection-loader.js.map +2 -2
- package/dist/modules/widgets/injection-position.js +3 -1
- package/dist/modules/widgets/injection-position.js.map +2 -2
- package/package.json +7 -2
- package/src/lib/commands/__tests__/command-interceptor-runner.test.ts +19 -6
- package/src/lib/commands/__tests__/flush.test.ts +24 -15
- package/src/lib/commands/__tests__/normalizeAuthorUserId.test.ts +14 -2
- package/src/lib/commands/__tests__/registry.test.ts +17 -2
- package/src/lib/commands/__tests__/scope.test.ts +21 -9
- package/src/lib/commands/command-bus.ts +5 -2
- package/src/lib/commands/command-interceptor-runner.ts +5 -2
- package/src/lib/commands/flush.ts +4 -5
- package/src/lib/commands/helpers.ts +9 -2
- package/src/lib/commands/registry.ts +6 -3
- package/src/lib/commands/scope.ts +6 -3
- package/src/lib/crud/__tests__/optimistic-lock.test.ts +21 -6
- package/src/lib/crud/__tests__/route-mutation-guard.test.ts +17 -2
- package/src/lib/crud/__tests__/sync-event-runner.test.ts +17 -3
- package/src/lib/crud/advanced-filter-integration.ts +4 -1
- package/src/lib/crud/cache.ts +4 -1
- package/src/lib/crud/custom-fields.ts +5 -2
- package/src/lib/crud/enricher-runner.ts +7 -10
- package/src/lib/crud/factory.ts +11 -10
- package/src/lib/crud/interceptor-registry.ts +4 -3
- package/src/lib/crud/mutation-guard.ts +5 -2
- package/src/lib/crud/optimistic-lock.ts +6 -10
- package/src/lib/crud/route-mutation-guard.ts +4 -1
- package/src/lib/crud/sync-event-runner.ts +4 -1
- package/src/lib/data/__tests__/engine.event-validation.test.ts +26 -15
- package/src/lib/data/engine.ts +6 -6
- package/src/lib/db/mikro.ts +6 -3
- package/src/lib/di/container.ts +4 -1
- package/src/lib/encryption/aes.ts +4 -2
- package/src/lib/encryption/entityFields.ts +5 -1
- package/src/lib/encryption/entityIds.ts +4 -1
- package/src/lib/encryption/kms.ts +27 -33
- package/src/lib/encryption/subscriber.ts +4 -2
- package/src/lib/encryption/tenantDataEncryptionService.ts +4 -2
- package/src/lib/indexers/__tests__/status-log.test.ts +22 -10
- package/src/lib/indexers/error-log.ts +5 -2
- package/src/lib/indexers/status-log.ts +6 -3
- package/src/lib/logger/__tests__/logger.test.ts +539 -0
- package/src/lib/logger/index.ts +33 -0
- package/src/lib/logger/level.ts +50 -0
- package/src/lib/logger/transport.console.ts +41 -0
- package/src/lib/logger/transport.pretty.ts +94 -0
- package/src/lib/logger/transport.server.ts +125 -0
- package/src/lib/logger/transport.ts +17 -0
- package/src/lib/middleware/page-executor.ts +4 -1
- package/src/lib/modules/__tests__/registry.test.ts +28 -21
- package/src/lib/modules/registry.ts +4 -1
- package/src/lib/profiler/index.ts +4 -2
- package/src/lib/query/__tests__/query-extension-runner.test.ts +21 -7
- package/src/lib/query/engine.ts +7 -10
- package/src/lib/query/query-extension-runner.ts +6 -11
- package/src/lib/redis/connection.ts +5 -1
- package/src/lib/url.ts +10 -5
- package/src/modules/__tests__/overrides.test.ts +17 -3
- package/src/modules/__tests__/route-overrides.test.ts +29 -20
- package/src/modules/analytics.ts +5 -1
- package/src/modules/dashboard/widgets.ts +4 -1
- package/src/modules/events/factory.ts +6 -3
- package/src/modules/overrides.ts +18 -34
- package/src/modules/registry.ts +4 -1
- package/src/modules/search.ts +4 -1
- package/src/modules/widgets/injection-loader.ts +7 -6
- package/src/modules/widgets/injection-position.ts +5 -1
|
@@ -3,6 +3,9 @@ import type { CacheStrategy } from '@open-mercato/cache'
|
|
|
3
3
|
import { decryptWithAesGcm, encryptWithAesGcm, hashForLookup } from './aes'
|
|
4
4
|
import { createKmsService, type KmsService, type TenantDek } from './kms'
|
|
5
5
|
import { isTenantDataEncryptionEnabled, isEncryptionDebugEnabled } from './toggles'
|
|
6
|
+
import { createLogger } from '../logger'
|
|
7
|
+
|
|
8
|
+
const logger = createLogger('shared').child({ component: 'tenant-encryption' })
|
|
6
9
|
|
|
7
10
|
export type EncryptedFieldRule = {
|
|
8
11
|
field: string
|
|
@@ -42,8 +45,7 @@ function cacheKey(key: MapCacheKey): string {
|
|
|
42
45
|
function debug(event: string, payload: Record<string, unknown>) {
|
|
43
46
|
if (!isEncryptionDebugEnabled()) return
|
|
44
47
|
try {
|
|
45
|
-
|
|
46
|
-
console.debug(`${event} [tenant-encryption]`, payload)
|
|
48
|
+
logger.debug(event, payload)
|
|
47
49
|
} catch {
|
|
48
50
|
// ignore
|
|
49
51
|
}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import { recordIndexerLog } from '../status-log'
|
|
2
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
3
|
+
|
|
4
|
+
jest.mock('@open-mercato/shared/lib/logger', () => {
|
|
5
|
+
const mocked = {
|
|
6
|
+
debug: jest.fn(),
|
|
7
|
+
info: jest.fn(),
|
|
8
|
+
warn: jest.fn(),
|
|
9
|
+
error: jest.fn(),
|
|
10
|
+
child: jest.fn(),
|
|
11
|
+
}
|
|
12
|
+
mocked.child.mockImplementation(() => mocked)
|
|
13
|
+
return { createLogger: jest.fn(() => mocked) }
|
|
14
|
+
})
|
|
15
|
+
const loggerError = createLogger('shared').error as jest.Mock
|
|
16
|
+
const loggerWarn = createLogger('shared').warn as jest.Mock
|
|
17
|
+
|
|
2
18
|
|
|
3
19
|
type Behaviors = {
|
|
4
20
|
insert?: () => unknown
|
|
@@ -29,17 +45,13 @@ function makeDb(behaviors: Behaviors): any {
|
|
|
29
45
|
const INPUT = { source: 'vector' as const, handler: 'event:test', message: 'hi' }
|
|
30
46
|
|
|
31
47
|
describe('recordIndexerLog — inactive-transaction de-noising', () => {
|
|
32
|
-
let errorSpy: jest.SpyInstance
|
|
33
|
-
let warnSpy: jest.SpyInstance
|
|
34
48
|
|
|
35
49
|
beforeEach(() => {
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
loggerError.mockClear()
|
|
51
|
+
loggerWarn.mockClear()
|
|
38
52
|
})
|
|
39
53
|
|
|
40
54
|
afterEach(() => {
|
|
41
|
-
errorSpy.mockRestore()
|
|
42
|
-
warnSpy.mockRestore()
|
|
43
55
|
})
|
|
44
56
|
|
|
45
57
|
it('skips quietly when the insert hits an already-committed transaction', async () => {
|
|
@@ -51,7 +63,7 @@ describe('recordIndexerLog — inactive-transaction de-noising', () => {
|
|
|
51
63
|
|
|
52
64
|
await recordIndexerLog({ db }, INPUT)
|
|
53
65
|
|
|
54
|
-
expect(
|
|
66
|
+
expect(loggerError).not.toHaveBeenCalled()
|
|
55
67
|
})
|
|
56
68
|
|
|
57
69
|
it('still logs an unexpected insert failure', async () => {
|
|
@@ -63,7 +75,7 @@ describe('recordIndexerLog — inactive-transaction de-noising', () => {
|
|
|
63
75
|
|
|
64
76
|
await recordIndexerLog({ db }, INPUT)
|
|
65
77
|
|
|
66
|
-
expect(
|
|
78
|
+
expect(loggerError).toHaveBeenCalledTimes(1)
|
|
67
79
|
})
|
|
68
80
|
|
|
69
81
|
it('skips quietly when the prune hits a rolled-back transaction', async () => {
|
|
@@ -76,7 +88,7 @@ describe('recordIndexerLog — inactive-transaction de-noising', () => {
|
|
|
76
88
|
|
|
77
89
|
await recordIndexerLog({ db }, INPUT)
|
|
78
90
|
|
|
79
|
-
expect(
|
|
91
|
+
expect(loggerWarn).not.toHaveBeenCalled()
|
|
80
92
|
})
|
|
81
93
|
|
|
82
94
|
it('still warns on an unexpected prune failure', async () => {
|
|
@@ -89,6 +101,6 @@ describe('recordIndexerLog — inactive-transaction de-noising', () => {
|
|
|
89
101
|
|
|
90
102
|
await recordIndexerLog({ db }, INPUT)
|
|
91
103
|
|
|
92
|
-
expect(
|
|
104
|
+
expect(loggerWarn).toHaveBeenCalledTimes(1)
|
|
93
105
|
})
|
|
94
106
|
})
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
2
|
import { type Kysely, sql } from 'kysely'
|
|
3
|
+
import { createLogger } from '../logger'
|
|
4
|
+
|
|
5
|
+
const logger = createLogger('shared').child({ component: 'indexers' })
|
|
3
6
|
|
|
4
7
|
export type IndexerErrorSource = 'query_index' | 'vector' | 'fulltext'
|
|
5
8
|
|
|
@@ -73,7 +76,7 @@ function pickDb(deps: RecordIndexerErrorDeps): Kysely<any> | null {
|
|
|
73
76
|
export async function recordIndexerError(deps: RecordIndexerErrorDeps, input: RecordIndexerErrorInput): Promise<void> {
|
|
74
77
|
const db = pickDb(deps)
|
|
75
78
|
if (!db) {
|
|
76
|
-
|
|
79
|
+
logger.error('Unable to record indexer error (missing db connection)', {
|
|
77
80
|
source: input.source,
|
|
78
81
|
handler: input.handler,
|
|
79
82
|
})
|
|
@@ -101,6 +104,6 @@ export async function recordIndexerError(deps: RecordIndexerErrorDeps, input: Re
|
|
|
101
104
|
} as any)
|
|
102
105
|
.execute()
|
|
103
106
|
} catch (loggingError) {
|
|
104
|
-
|
|
107
|
+
logger.error('Failed to persist indexer error', { err: loggingError })
|
|
105
108
|
}
|
|
106
109
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
2
|
import { type Kysely, sql } from 'kysely'
|
|
3
3
|
import type { IndexerErrorSource } from './error-log'
|
|
4
|
+
import { createLogger } from '../logger'
|
|
5
|
+
|
|
6
|
+
const logger = createLogger('shared').child({ component: 'indexers' })
|
|
4
7
|
|
|
5
8
|
export type IndexerLogLevel = 'info' | 'warn'
|
|
6
9
|
|
|
@@ -96,7 +99,7 @@ export async function recordIndexerLog(
|
|
|
96
99
|
): Promise<void> {
|
|
97
100
|
const db = pickDb(deps)
|
|
98
101
|
if (!db) {
|
|
99
|
-
|
|
102
|
+
logger.warn('Unable to record indexer log (missing db connection)', {
|
|
100
103
|
source: input.source,
|
|
101
104
|
handler: input.handler,
|
|
102
105
|
})
|
|
@@ -128,7 +131,7 @@ export async function recordIndexerLog(
|
|
|
128
131
|
// A committed/rolled-back caller transaction is an expected, harmless
|
|
129
132
|
// condition for best-effort logging — skip quietly instead of surfacing it.
|
|
130
133
|
if (!isInactiveTransactionError(error)) {
|
|
131
|
-
|
|
134
|
+
logger.error('Failed to persist indexer log', { err: error })
|
|
132
135
|
}
|
|
133
136
|
return
|
|
134
137
|
}
|
|
@@ -137,7 +140,7 @@ export async function recordIndexerLog(
|
|
|
137
140
|
await pruneExcessLogs(db, input.source)
|
|
138
141
|
} catch (pruneError) {
|
|
139
142
|
if (!isInactiveTransactionError(pruneError)) {
|
|
140
|
-
|
|
143
|
+
logger.warn('Failed to prune indexer logs', { err: pruneError })
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
146
|
}
|