@open-mercato/enterprise 0.8.1-develop.7241.1.fad7b2ce2a → 0.8.1-develop.7254.1.ab24f26208
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.
|
@@ -7,35 +7,39 @@ import { createRecordLockCrudMutationGuardService } from "./lib/crudMutationGuar
|
|
|
7
7
|
function register(container) {
|
|
8
8
|
container.register({
|
|
9
9
|
recordLockService: asFunction(
|
|
10
|
-
(
|
|
11
|
-
em,
|
|
12
|
-
moduleConfigService: moduleConfigService ?? null,
|
|
13
|
-
actionLogService: actionLogService ?? null,
|
|
14
|
-
rbacService: rbacService ?? null
|
|
10
|
+
(cradle) => createRecordLockService({
|
|
11
|
+
em: cradle.em,
|
|
12
|
+
moduleConfigService: cradle.moduleConfigService ?? null,
|
|
13
|
+
actionLogService: cradle.actionLogService ?? null,
|
|
14
|
+
rbacService: cradle.rbacService ?? null
|
|
15
15
|
})
|
|
16
|
-
).scoped(),
|
|
16
|
+
).scoped().proxy(),
|
|
17
17
|
// CRUD guard decorator: chains the OSS `updated_at` floor first (built here
|
|
18
18
|
// because this DI key overrides the platform default), then adds the
|
|
19
19
|
// record_locks enrichment. record_locks can only ADD a 409, never skip the
|
|
20
20
|
// floor (S1/H2). Spec: .ai/specs/enterprise/2026-06-09-record-locks-unified-coverage.md (Phase 0)
|
|
21
|
+
// `.proxy()`: CLASSIC injection resolves by parameter NAME, which a bundler
|
|
22
|
+
// may rename — see the comment on the platform default in
|
|
23
|
+
// packages/shared/src/lib/di/container.ts. A silent failure here disables
|
|
24
|
+
// the record-lock 409 as well as the OSS floor beneath it.
|
|
21
25
|
crudMutationGuardService: asFunction(
|
|
22
|
-
(
|
|
23
|
-
recordLockService,
|
|
26
|
+
(cradle) => createRecordLockCrudMutationGuardService(
|
|
27
|
+
cradle.recordLockService,
|
|
24
28
|
createOptimisticLockGuardService({
|
|
25
|
-
getEm: () => em,
|
|
29
|
+
getEm: () => cradle.em,
|
|
26
30
|
readers: getAllOptimisticLockReaders()
|
|
27
31
|
})
|
|
28
32
|
)
|
|
29
|
-
).scoped(),
|
|
33
|
+
).scoped().proxy(),
|
|
30
34
|
// Command guard override: lock-backed `resolveExpected` derived from
|
|
31
35
|
// authoritative server state (never requiring a client lock token, H2),
|
|
32
36
|
// awaited by `enforceCommandOptimisticLockWithGuards`. The OSS floor still
|
|
33
37
|
// runs first inside that runner.
|
|
34
38
|
commandOptimisticLockGuardService: asFunction(
|
|
35
|
-
(
|
|
36
|
-
resolveExpected: ({ expectedFromHeader, resourceKind }) => recordLockService.resolveExpectedVersion({ expectedFromHeader, resourceKind })
|
|
39
|
+
(cradle) => createCommandOptimisticLockGuardService({
|
|
40
|
+
resolveExpected: ({ expectedFromHeader, resourceKind }) => cradle.recordLockService.resolveExpectedVersion({ expectedFromHeader, resourceKind })
|
|
37
41
|
})
|
|
38
|
-
).scoped()
|
|
42
|
+
).scoped().proxy()
|
|
39
43
|
});
|
|
40
44
|
}
|
|
41
45
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/record_locks/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { asFunction } from 'awilix'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport type { ModuleConfigService } from '@open-mercato/core/modules/configs/lib/module-config-service'\nimport type { ActionLogService } from '@open-mercato/core/modules/audit_logs/services/actionLogService'\nimport type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'\nimport { createOptimisticLockGuardService } from '@open-mercato/shared/lib/crud/optimistic-lock'\nimport { getAllOptimisticLockReaders } from '@open-mercato/shared/lib/crud/optimistic-lock-store'\nimport { createCommandOptimisticLockGuardService } from '@open-mercato/shared/lib/crud/optimistic-lock-command'\nimport { createRecordLockService } from './lib/recordLockService'\nimport type { RecordLockService } from './lib/recordLockService'\nimport { createRecordLockCrudMutationGuardService } from './lib/crudMutationGuardService'\n\nexport function register(container: AppContainer) {\n container.register({\n recordLockService: asFunction((\n em: EntityManager
|
|
5
|
-
"mappings": "AAAA,SAAS,kBAAkB;AAM3B,SAAS,wCAAwC;AACjD,SAAS,mCAAmC;AAC5C,SAAS,+CAA+C;AACxD,SAAS,+BAA+B;AAExC,SAAS,gDAAgD;AAElD,SAAS,SAAS,WAAyB;AAChD,YAAU,SAAS;AAAA,IACjB,mBAAmB;AAAA,MAAW,
|
|
4
|
+
"sourcesContent": ["import { asFunction } from 'awilix'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport type { ModuleConfigService } from '@open-mercato/core/modules/configs/lib/module-config-service'\nimport type { ActionLogService } from '@open-mercato/core/modules/audit_logs/services/actionLogService'\nimport type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'\nimport { createOptimisticLockGuardService } from '@open-mercato/shared/lib/crud/optimistic-lock'\nimport { getAllOptimisticLockReaders } from '@open-mercato/shared/lib/crud/optimistic-lock-store'\nimport { createCommandOptimisticLockGuardService } from '@open-mercato/shared/lib/crud/optimistic-lock-command'\nimport { createRecordLockService } from './lib/recordLockService'\nimport type { RecordLockService } from './lib/recordLockService'\nimport { createRecordLockCrudMutationGuardService } from './lib/crudMutationGuardService'\n\nexport function register(container: AppContainer) {\n container.register({\n recordLockService: asFunction((cradle: {\n em: EntityManager\n moduleConfigService?: ModuleConfigService | null\n actionLogService?: ActionLogService | null\n rbacService?: RbacService | null\n }) =>\n createRecordLockService({\n em: cradle.em,\n moduleConfigService: cradle.moduleConfigService ?? null,\n actionLogService: cradle.actionLogService ?? null,\n rbacService: cradle.rbacService ?? null,\n }),\n ).scoped().proxy(),\n // CRUD guard decorator: chains the OSS `updated_at` floor first (built here\n // because this DI key overrides the platform default), then adds the\n // record_locks enrichment. record_locks can only ADD a 409, never skip the\n // floor (S1/H2). Spec: .ai/specs/enterprise/2026-06-09-record-locks-unified-coverage.md (Phase 0)\n // `.proxy()`: CLASSIC injection resolves by parameter NAME, which a bundler\n // may rename \u2014 see the comment on the platform default in\n // packages/shared/src/lib/di/container.ts. A silent failure here disables\n // the record-lock 409 as well as the OSS floor beneath it.\n crudMutationGuardService: asFunction((cradle: {\n recordLockService: RecordLockService\n em: EntityManager\n }) =>\n createRecordLockCrudMutationGuardService(\n cradle.recordLockService,\n createOptimisticLockGuardService({\n getEm: () => cradle.em,\n readers: getAllOptimisticLockReaders(),\n }),\n ),\n ).scoped().proxy(),\n // Command guard override: lock-backed `resolveExpected` derived from\n // authoritative server state (never requiring a client lock token, H2),\n // awaited by `enforceCommandOptimisticLockWithGuards`. The OSS floor still\n // runs first inside that runner.\n commandOptimisticLockGuardService: asFunction((cradle: { recordLockService: RecordLockService }) =>\n createCommandOptimisticLockGuardService({\n resolveExpected: ({ expectedFromHeader, resourceKind }) =>\n cradle.recordLockService.resolveExpectedVersion({ expectedFromHeader, resourceKind }),\n }),\n ).scoped().proxy(),\n })\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,kBAAkB;AAM3B,SAAS,wCAAwC;AACjD,SAAS,mCAAmC;AAC5C,SAAS,+CAA+C;AACxD,SAAS,+BAA+B;AAExC,SAAS,gDAAgD;AAElD,SAAS,SAAS,WAAyB;AAChD,YAAU,SAAS;AAAA,IACjB,mBAAmB;AAAA,MAAW,CAAC,WAM7B,wBAAwB;AAAA,QACtB,IAAI,OAAO;AAAA,QACX,qBAAqB,OAAO,uBAAuB;AAAA,QACnD,kBAAkB,OAAO,oBAAoB;AAAA,QAC7C,aAAa,OAAO,eAAe;AAAA,MACrC,CAAC;AAAA,IACH,EAAE,OAAO,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASjB,0BAA0B;AAAA,MAAW,CAAC,WAIpC;AAAA,QACE,OAAO;AAAA,QACP,iCAAiC;AAAA,UAC/B,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS,4BAA4B;AAAA,QACvC,CAAC;AAAA,MACH;AAAA,IACF,EAAE,OAAO,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKjB,mCAAmC;AAAA,MAAW,CAAC,WAC7C,wCAAwC;AAAA,QACtC,iBAAiB,CAAC,EAAE,oBAAoB,aAAa,MACnD,OAAO,kBAAkB,uBAAuB,EAAE,oBAAoB,aAAa,CAAC;AAAA,MACxF,CAAC;AAAA,IACH,EAAE,OAAO,EAAE,MAAM;AAAA,EACnB,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/enterprise",
|
|
3
|
-
"version": "0.8.1-develop.
|
|
3
|
+
"version": "0.8.1-develop.7254.1.ab24f26208",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
"@dnd-kit/core": "^6.3.1",
|
|
71
71
|
"@dnd-kit/sortable": "^10.0.0",
|
|
72
72
|
"@dnd-kit/utilities": "^3.2.2",
|
|
73
|
-
"@open-mercato/ai-assistant": "0.8.1-develop.
|
|
74
|
-
"@open-mercato/core": "0.8.1-develop.
|
|
75
|
-
"@open-mercato/queue": "0.8.1-develop.
|
|
76
|
-
"@open-mercato/scheduler": "0.8.1-develop.
|
|
77
|
-
"@open-mercato/ui": "0.8.1-develop.
|
|
78
|
-
"@open-mercato/web-research": "0.8.1-develop.
|
|
73
|
+
"@open-mercato/ai-assistant": "0.8.1-develop.7254.1.ab24f26208",
|
|
74
|
+
"@open-mercato/core": "0.8.1-develop.7254.1.ab24f26208",
|
|
75
|
+
"@open-mercato/queue": "0.8.1-develop.7254.1.ab24f26208",
|
|
76
|
+
"@open-mercato/scheduler": "0.8.1-develop.7254.1.ab24f26208",
|
|
77
|
+
"@open-mercato/ui": "0.8.1-develop.7254.1.ab24f26208",
|
|
78
|
+
"@open-mercato/web-research": "0.8.1-develop.7254.1.ab24f26208",
|
|
79
79
|
"@simplewebauthn/browser": "^13.3.0",
|
|
80
80
|
"@simplewebauthn/server": "^13.3.2",
|
|
81
81
|
"@simplewebauthn/types": "^12.0.0",
|
|
@@ -87,13 +87,13 @@
|
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"@mikro-orm/core": "^7.0.14",
|
|
90
|
-
"@open-mercato/shared": "0.8.1-develop.
|
|
90
|
+
"@open-mercato/shared": "0.8.1-develop.7254.1.ab24f26208",
|
|
91
91
|
"react": "^19.0.0",
|
|
92
92
|
"react-dom": "^19.0.0",
|
|
93
93
|
"zod": ">=3.23.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
|
-
"@open-mercato/shared": "0.8.1-develop.
|
|
96
|
+
"@open-mercato/shared": "0.8.1-develop.7254.1.ab24f26208",
|
|
97
97
|
"@types/jest": "^30.0.0",
|
|
98
98
|
"@types/react": "^19.2.18",
|
|
99
99
|
"@types/react-dom": "^19.2.5",
|
|
@@ -13,44 +13,48 @@ import { createRecordLockCrudMutationGuardService } from './lib/crudMutationGuar
|
|
|
13
13
|
|
|
14
14
|
export function register(container: AppContainer) {
|
|
15
15
|
container.register({
|
|
16
|
-
recordLockService: asFunction((
|
|
17
|
-
em: EntityManager
|
|
18
|
-
moduleConfigService?: ModuleConfigService | null
|
|
19
|
-
actionLogService?: ActionLogService | null
|
|
20
|
-
rbacService?: RbacService | null
|
|
21
|
-
) =>
|
|
16
|
+
recordLockService: asFunction((cradle: {
|
|
17
|
+
em: EntityManager
|
|
18
|
+
moduleConfigService?: ModuleConfigService | null
|
|
19
|
+
actionLogService?: ActionLogService | null
|
|
20
|
+
rbacService?: RbacService | null
|
|
21
|
+
}) =>
|
|
22
22
|
createRecordLockService({
|
|
23
|
-
em,
|
|
24
|
-
moduleConfigService: moduleConfigService ?? null,
|
|
25
|
-
actionLogService: actionLogService ?? null,
|
|
26
|
-
rbacService: rbacService ?? null,
|
|
23
|
+
em: cradle.em,
|
|
24
|
+
moduleConfigService: cradle.moduleConfigService ?? null,
|
|
25
|
+
actionLogService: cradle.actionLogService ?? null,
|
|
26
|
+
rbacService: cradle.rbacService ?? null,
|
|
27
27
|
}),
|
|
28
|
-
).scoped(),
|
|
28
|
+
).scoped().proxy(),
|
|
29
29
|
// CRUD guard decorator: chains the OSS `updated_at` floor first (built here
|
|
30
30
|
// because this DI key overrides the platform default), then adds the
|
|
31
31
|
// record_locks enrichment. record_locks can only ADD a 409, never skip the
|
|
32
32
|
// floor (S1/H2). Spec: .ai/specs/enterprise/2026-06-09-record-locks-unified-coverage.md (Phase 0)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
// `.proxy()`: CLASSIC injection resolves by parameter NAME, which a bundler
|
|
34
|
+
// may rename — see the comment on the platform default in
|
|
35
|
+
// packages/shared/src/lib/di/container.ts. A silent failure here disables
|
|
36
|
+
// the record-lock 409 as well as the OSS floor beneath it.
|
|
37
|
+
crudMutationGuardService: asFunction((cradle: {
|
|
38
|
+
recordLockService: RecordLockService
|
|
39
|
+
em: EntityManager
|
|
40
|
+
}) =>
|
|
37
41
|
createRecordLockCrudMutationGuardService(
|
|
38
|
-
recordLockService,
|
|
42
|
+
cradle.recordLockService,
|
|
39
43
|
createOptimisticLockGuardService({
|
|
40
|
-
getEm: () => em,
|
|
44
|
+
getEm: () => cradle.em,
|
|
41
45
|
readers: getAllOptimisticLockReaders(),
|
|
42
46
|
}),
|
|
43
47
|
),
|
|
44
|
-
).scoped(),
|
|
48
|
+
).scoped().proxy(),
|
|
45
49
|
// Command guard override: lock-backed `resolveExpected` derived from
|
|
46
50
|
// authoritative server state (never requiring a client lock token, H2),
|
|
47
51
|
// awaited by `enforceCommandOptimisticLockWithGuards`. The OSS floor still
|
|
48
52
|
// runs first inside that runner.
|
|
49
|
-
commandOptimisticLockGuardService: asFunction((recordLockService: RecordLockService) =>
|
|
53
|
+
commandOptimisticLockGuardService: asFunction((cradle: { recordLockService: RecordLockService }) =>
|
|
50
54
|
createCommandOptimisticLockGuardService({
|
|
51
55
|
resolveExpected: ({ expectedFromHeader, resourceKind }) =>
|
|
52
|
-
recordLockService.resolveExpectedVersion({ expectedFromHeader, resourceKind }),
|
|
56
|
+
cradle.recordLockService.resolveExpectedVersion({ expectedFromHeader, resourceKind }),
|
|
53
57
|
}),
|
|
54
|
-
).scoped(),
|
|
58
|
+
).scoped().proxy(),
|
|
55
59
|
})
|
|
56
60
|
}
|