@aopslab/domain-kit-docman 0.1.4

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.
Files changed (64) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +6 -0
  3. package/README.md +79 -0
  4. package/dist/config/config.d.ts +55 -0
  5. package/dist/config/config.js +176 -0
  6. package/dist/domain-services/index.d.ts +7 -0
  7. package/dist/domain-services/index.js +7 -0
  8. package/dist/domain-services/jwt.d.ts +1 -0
  9. package/dist/domain-services/jwt.js +5 -0
  10. package/dist/domain-services/metrics.d.ts +5 -0
  11. package/dist/domain-services/metrics.js +7 -0
  12. package/dist/domain-services/presets.d.ts +3 -0
  13. package/dist/domain-services/presets.js +4 -0
  14. package/dist/domain-services/provider.d.ts +2 -0
  15. package/dist/domain-services/provider.js +564 -0
  16. package/dist/domain-services/resilience.d.ts +6 -0
  17. package/dist/domain-services/resilience.js +19 -0
  18. package/dist/domain-services/types.d.ts +179 -0
  19. package/dist/domain-services/types.js +1 -0
  20. package/dist/domain-services/unified.d.ts +272 -0
  21. package/dist/domain-services/unified.js +210 -0
  22. package/dist/errors/error.map.d.ts +21 -0
  23. package/dist/errors/error.map.js +47 -0
  24. package/dist/errors/friendly.d.ts +31 -0
  25. package/dist/errors/friendly.js +407 -0
  26. package/dist/errors/i18n.d.ts +4 -0
  27. package/dist/errors/i18n.js +10 -0
  28. package/dist/errors/index.d.ts +3 -0
  29. package/dist/errors/index.js +3 -0
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.js +7 -0
  32. package/dist/operations/catalog.d.ts +11 -0
  33. package/dist/operations/catalog.js +299 -0
  34. package/dist/operations/contract.d.ts +31 -0
  35. package/dist/operations/contract.js +667 -0
  36. package/dist/operations/dcm.d.ts +58 -0
  37. package/dist/operations/dcm.js +168 -0
  38. package/dist/operations/definition.d.ts +6 -0
  39. package/dist/operations/definition.js +140 -0
  40. package/dist/operations/executor.d.ts +10 -0
  41. package/dist/operations/executor.js +269 -0
  42. package/dist/operations/host-projection.d.ts +11 -0
  43. package/dist/operations/host-projection.js +156 -0
  44. package/dist/operations/index.d.ts +10 -0
  45. package/dist/operations/index.js +10 -0
  46. package/dist/operations/io-types.d.ts +125 -0
  47. package/dist/operations/io-types.js +1 -0
  48. package/dist/operations/schemas.d.ts +10 -0
  49. package/dist/operations/schemas.js +872 -0
  50. package/dist/operations/scope-owned-create.d.ts +3 -0
  51. package/dist/operations/scope-owned-create.js +12 -0
  52. package/dist/operations/tool-input.d.ts +11 -0
  53. package/dist/operations/tool-input.js +357 -0
  54. package/dist/operations/types.d.ts +37 -0
  55. package/dist/operations/types.js +1 -0
  56. package/dist/resources/index.d.ts +1 -0
  57. package/dist/resources/index.js +1 -0
  58. package/dist/resources/resources.docman.server.errors.d.ts +14 -0
  59. package/dist/resources/resources.docman.server.errors.js +36 -0
  60. package/dist/shared/index.d.ts +5 -0
  61. package/dist/shared/index.js +1 -0
  62. package/dist/shared/tool-input-guard.d.ts +1 -0
  63. package/dist/shared/tool-input-guard.js +1 -0
  64. package/package.json +69 -0
@@ -0,0 +1,156 @@
1
+ import { buildDocmanDomainCapabilityManifest } from './dcm.js';
2
+ const CRUD_KINDS = new Set(['list', 'get', 'create', 'update', 'delete']);
3
+ const CUSTOM_ROUTE_OVERRIDES = {
4
+ 'document.delete.safe': {
5
+ method: 'DELETE',
6
+ pattern: '/documents/:id/safe',
7
+ summary: 'Safely delete document'
8
+ },
9
+ 'document-version.delete.safe': {
10
+ method: 'DELETE',
11
+ pattern: '/document-versions/:id/safe',
12
+ summary: 'Safely delete document version'
13
+ },
14
+ 'document-version.import-headings': {
15
+ method: 'POST',
16
+ pattern: '/document-versions/:id/import-headings',
17
+ summary: 'Import parsed heading graph into document version'
18
+ },
19
+ 'document.compose.index': {
20
+ method: 'POST',
21
+ pattern: '/document-versions/:id/compose-index',
22
+ summary: 'Build composed index for document version'
23
+ },
24
+ 'document.index.build': {
25
+ method: 'POST',
26
+ pattern: '/document-versions/:id/index',
27
+ summary: 'Build persisted retrieval index for document version'
28
+ },
29
+ 'document.index.get': {
30
+ method: 'GET',
31
+ pattern: '/document-versions/:id/index',
32
+ summary: 'Get persisted retrieval index for document version'
33
+ },
34
+ 'document.summary.build': {
35
+ method: 'POST',
36
+ pattern: '/document-versions/:id/summaries',
37
+ summary: 'Build persisted summaries for document version'
38
+ },
39
+ 'document.summary.get': {
40
+ method: 'GET',
41
+ pattern: '/document-versions/:id/summaries',
42
+ summary: 'Get persisted summaries for document version'
43
+ },
44
+ 'document.search': {
45
+ method: 'GET',
46
+ pattern: '/document-versions/:id/search',
47
+ summary: 'Search persisted retrieval index for document version'
48
+ },
49
+ 'document.scope.search': {
50
+ method: 'GET',
51
+ pattern: '/scopes/:id/documents/search',
52
+ summary: 'Search persisted retrieval index across latest document versions in one scope'
53
+ },
54
+ 'document.answer-pack': {
55
+ method: 'GET',
56
+ pattern: '/document-versions/:id/answer-pack',
57
+ summary: 'Get deterministic answer pack for document version'
58
+ },
59
+ 'document.compose.fetch': {
60
+ method: 'POST',
61
+ pattern: '/document-versions/:id/compose-fetch',
62
+ summary: 'Fetch composed fragment'
63
+ },
64
+ 'document.publish.materialize': {
65
+ method: 'POST',
66
+ pattern: '/document-versions/:id/materialize',
67
+ summary: 'Materialize publish fragment'
68
+ },
69
+ 'document-section-link.usage.list': {
70
+ method: 'GET',
71
+ pattern: '/sections/:id/document-link-usage',
72
+ summary: 'List document section-link usage by section'
73
+ }
74
+ };
75
+ function parseCrudOperation(operationId) {
76
+ const segments = operationId.split('.').map((segment) => segment.trim()).filter(Boolean);
77
+ if (segments.length !== 2)
78
+ return null;
79
+ const [entity, kindRaw] = segments;
80
+ if (!CRUD_KINDS.has(kindRaw))
81
+ return null;
82
+ return {
83
+ entity,
84
+ kind: kindRaw
85
+ };
86
+ }
87
+ function pluralizePathSegment(segment) {
88
+ const normalized = segment.trim();
89
+ if (!normalized)
90
+ return normalized;
91
+ if (normalized.endsWith('s'))
92
+ return `${normalized}es`;
93
+ return `${normalized}s`;
94
+ }
95
+ function toCrudRoute(operationId, summary) {
96
+ const parsed = parseCrudOperation(operationId);
97
+ if (!parsed)
98
+ return null;
99
+ const resourcePath = `/${pluralizePathSegment(parsed.entity)}`;
100
+ const id = `docman.${operationId.replace(/\./g, '.')}`;
101
+ if (parsed.kind === 'list') {
102
+ return { id, method: 'GET', pattern: resourcePath, operation: operationId, ...(summary ? { summary } : {}) };
103
+ }
104
+ if (parsed.kind === 'get') {
105
+ return { id, method: 'GET', pattern: `${resourcePath}/:id`, operation: operationId, ...(summary ? { summary } : {}) };
106
+ }
107
+ if (parsed.kind === 'create') {
108
+ return { id, method: 'POST', pattern: resourcePath, operation: operationId, ...(summary ? { summary } : {}) };
109
+ }
110
+ if (parsed.kind === 'update') {
111
+ return { id, method: 'PATCH', pattern: `${resourcePath}/:id`, operation: operationId, ...(summary ? { summary } : {}) };
112
+ }
113
+ return { id, method: 'DELETE', pattern: `${resourcePath}/:id`, operation: operationId, ...(summary ? { summary } : {}) };
114
+ }
115
+ function toCustomFallbackRoute(operationId, summary) {
116
+ const normalizedPath = operationId.replace(/\./g, '/');
117
+ const id = `docman.${operationId.replace(/\./g, '-')}`;
118
+ return {
119
+ id,
120
+ method: 'POST',
121
+ pattern: `/operations/${normalizedPath}`,
122
+ operation: operationId,
123
+ ...(summary ? { summary } : {})
124
+ };
125
+ }
126
+ function toRouteFromOperation(operationId, summary) {
127
+ const override = CUSTOM_ROUTE_OVERRIDES[operationId];
128
+ if (override) {
129
+ return {
130
+ id: `docman.${operationId.replace(/\./g, '-')}`,
131
+ method: override.method,
132
+ pattern: override.pattern,
133
+ operation: operationId,
134
+ summary: override.summary ?? summary
135
+ };
136
+ }
137
+ const crudRoute = toCrudRoute(operationId, summary);
138
+ if (crudRoute)
139
+ return crudRoute;
140
+ return toCustomFallbackRoute(operationId, summary);
141
+ }
142
+ export function buildDocmanHostRouteProjection(options) {
143
+ const manifest = buildDocmanDomainCapabilityManifest({
144
+ refresh: options?.refresh,
145
+ includeDocs: true
146
+ });
147
+ const unique = new Map();
148
+ for (const operation of manifest.capabilities.operations) {
149
+ const summary = manifest.docs?.operations?.[operation.operationId]?.summary ?? operation.title;
150
+ const route = toRouteFromOperation(operation.operationId, summary);
151
+ const key = `${route.method} ${route.pattern}`;
152
+ if (!unique.has(key))
153
+ unique.set(key, route);
154
+ }
155
+ return [...unique.values()].sort((left, right) => left.operation.localeCompare(right.operation));
156
+ }
@@ -0,0 +1,10 @@
1
+ export * from './types.js';
2
+ export * from './definition.js';
3
+ export * from './io-types.js';
4
+ export * from './schemas.js';
5
+ export * from './host-projection.js';
6
+ export * from './catalog.js';
7
+ export * from './tool-input.js';
8
+ export * from './contract.js';
9
+ export * from './executor.js';
10
+ export * from './dcm.js';
@@ -0,0 +1,10 @@
1
+ export * from './types.js';
2
+ export * from './definition.js';
3
+ export * from './io-types.js';
4
+ export * from './schemas.js';
5
+ export * from './host-projection.js';
6
+ export * from './catalog.js';
7
+ export * from './tool-input.js';
8
+ export * from './contract.js';
9
+ export * from './executor.js';
10
+ export * from './dcm.js';
@@ -0,0 +1,125 @@
1
+ import type { IbmDocument, IbmDocumentInsert } from '@aopslab/domain-dm-docman/models';
2
+ import type { DocmanComposeSourceFormat, DocmanDocumentAnswerPackInput, DocmanDocumentAnswerPackResult, DocmanDocumentComposeFetchInput, DocmanDocumentComposeFetchResult, DocmanDocumentComposeIndex, DocmanDocumentIndexBuildInput, DocmanDocumentIndexGetInput, DocmanDocumentIndexSnapshot, DocmanDocumentSummaryBuildInput, DocmanDocumentSummaryGetInput, DocmanDocumentSummarySnapshot, DocmanDocumentSearchInput, DocmanDocumentSearchResult, DocmanDocumentPublishMaterializeInput, DocmanDocumentPublishMaterializeResult, DocmanDocumentVersionImportHeadingsInput, DocmanDocumentVersionImportHeadingsResult, DocmanScopeDocumentSearchInput, DocmanScopeDocumentSearchResult, DocmanPublishTarget, DocmanPublishedFragmentWarning, DocumentListOptions, DocmanResolvedAssetReference, IbmDocumentWithVersions } from '@aopslab/domain-dm-docman/ports';
3
+ import type { DocumentSectionLinkUsageItem } from '@aopslab/domain-dm-docman/repository-ports';
4
+ export type { DocmanDocumentComposeFetchInput, DocmanDocumentComposeFetchResult, DocmanDocumentComposeIndex, DocmanDocumentAnswerPackInput, DocmanDocumentAnswerPackResult, DocmanDocumentIndexBuildInput, DocmanDocumentIndexGetInput, DocmanDocumentIndexSnapshot, DocmanDocumentSummaryBuildInput, DocmanDocumentSummaryGetInput, DocmanDocumentSummarySnapshot, DocmanDocumentSearchInput, DocmanDocumentSearchResult, DocmanScopeDocumentSearchInput, DocmanScopeDocumentSearchResult, DocmanDocumentPublishMaterializeInput, DocmanDocumentPublishMaterializeResult, DocmanDocumentVersionImportHeadingsInput, DocmanDocumentVersionImportHeadingsResult, DocmanComposeSourceFormat, DocmanPublishTarget, DocmanPublishedFragmentWarning, DocmanResolvedAssetReference, DocumentListOptions, IbmDocument, IbmDocumentInsert, IbmDocumentWithVersions, };
5
+ export type DocmanCrudEntity = 'document' | 'document-group' | 'document-version' | 'section' | 'page' | 'page-version' | 'document-section-link' | 'section-page-link' | 'snippet' | 'page-snippet-link' | 'asset' | 'asset-version' | 'embed' | 'page-embed-link';
6
+ export type DocmanCrudKind = 'list' | 'get' | 'create' | 'update' | 'delete';
7
+ export type DocmanCrudOperationId = `${DocmanCrudEntity}.${DocmanCrudKind}`;
8
+ type DocmanCrudInput<TId extends DocmanCrudOperationId> = TId extends `${string}.list` ? {
9
+ filter?: Record<string, unknown>;
10
+ options?: DocumentListOptions;
11
+ } : TId extends `${string}.get` ? {
12
+ id: string;
13
+ options?: DocumentListOptions;
14
+ } : TId extends `${string}.create` ? {
15
+ data: Record<string, unknown>;
16
+ } : TId extends `${string}.update` ? {
17
+ id: string;
18
+ patch: Record<string, unknown>;
19
+ } : {
20
+ id: string;
21
+ };
22
+ type DocmanCrudOutput<TId extends DocmanCrudOperationId> = TId extends `${string}.list` ? unknown[] : TId extends `${string}.get` ? unknown | null : TId extends `${string}.create` | `${string}.update` ? unknown : unknown;
23
+ export type DocmanDocumentListOperationInput = {
24
+ filter?: Partial<IbmDocument>;
25
+ options?: DocumentListOptions;
26
+ };
27
+ export type DocmanDocumentGetOperationInput = {
28
+ id: string;
29
+ options?: DocumentListOptions;
30
+ };
31
+ export type DocmanDocumentCreateOperationInput = {
32
+ data: IbmDocumentInsert;
33
+ };
34
+ export type DocmanDocumentUpdateOperationInput = {
35
+ id: string;
36
+ patch: Partial<IbmDocument>;
37
+ };
38
+ export type DocmanDocumentComposeIndexOperationInput = {
39
+ documentVersionId: string;
40
+ options?: {
41
+ locale?: string;
42
+ fallbackLocale?: string;
43
+ };
44
+ };
45
+ export type DocmanDocumentIndexBuildOperationInput = DocmanDocumentIndexBuildInput;
46
+ export type DocmanDocumentIndexGetOperationInput = DocmanDocumentIndexGetInput;
47
+ export type DocmanDocumentSummaryBuildOperationInput = DocmanDocumentSummaryBuildInput;
48
+ export type DocmanDocumentSummaryGetOperationInput = DocmanDocumentSummaryGetInput;
49
+ export type DocmanDocumentSearchOperationInput = DocmanDocumentSearchInput;
50
+ export type DocmanScopeDocumentSearchOperationInput = DocmanScopeDocumentSearchInput;
51
+ export type DocmanDocumentAnswerPackOperationInput = DocmanDocumentAnswerPackInput;
52
+ export type DocmanDocumentDeleteSafeOperationInput = {
53
+ id: string;
54
+ confirmName: string;
55
+ };
56
+ export type DocmanDocumentVersionDeleteSafeOperationInput = {
57
+ id: string;
58
+ };
59
+ export type DocmanDocumentVersionImportHeadingsOperationInput = DocmanDocumentVersionImportHeadingsInput;
60
+ export type DocmanDocumentVersionSetCurrentOperationInput = {
61
+ documentVersionId: string;
62
+ documentId?: string;
63
+ publish?: boolean;
64
+ publishedAt?: Date | string;
65
+ expectedPreviousVersionId?: string;
66
+ };
67
+ export type DocmanDocumentVersionSetCurrentOperationOutput = {
68
+ documentId: string;
69
+ currentVersionId: string;
70
+ previousCurrentVersionIds: string[];
71
+ changed: boolean;
72
+ publishedAt: Date | null;
73
+ status: string | null;
74
+ warnings: string[];
75
+ };
76
+ export type DocmanDocumentSectionLinkUsageListOperationInput = {
77
+ sectionId: string;
78
+ };
79
+ type DocmanCustomOperationInputById = {
80
+ 'document.compose.index': DocmanDocumentComposeIndexOperationInput;
81
+ 'document.index.build': DocmanDocumentIndexBuildOperationInput;
82
+ 'document.index.get': DocmanDocumentIndexGetOperationInput;
83
+ 'document.summary.build': DocmanDocumentSummaryBuildOperationInput;
84
+ 'document.summary.get': DocmanDocumentSummaryGetOperationInput;
85
+ 'document.search': DocmanDocumentSearchOperationInput;
86
+ 'document.scope.search': DocmanScopeDocumentSearchOperationInput;
87
+ 'document.answer-pack': DocmanDocumentAnswerPackOperationInput;
88
+ 'document.compose.fetch': DocmanDocumentComposeFetchInput;
89
+ 'document.publish.materialize': DocmanDocumentPublishMaterializeInput;
90
+ 'document.delete.safe': DocmanDocumentDeleteSafeOperationInput;
91
+ 'document-version.delete.safe': DocmanDocumentVersionDeleteSafeOperationInput;
92
+ 'document-version.import-headings': DocmanDocumentVersionImportHeadingsOperationInput;
93
+ 'document-version.set-current': DocmanDocumentVersionSetCurrentOperationInput;
94
+ 'document-section-link.usage.list': DocmanDocumentSectionLinkUsageListOperationInput;
95
+ };
96
+ type DocmanCustomOperationOutputById = {
97
+ 'document.compose.index': DocmanDocumentComposeIndex;
98
+ 'document.index.build': DocmanDocumentIndexSnapshot;
99
+ 'document.index.get': DocmanDocumentIndexSnapshot;
100
+ 'document.summary.build': DocmanDocumentSummarySnapshot;
101
+ 'document.summary.get': DocmanDocumentSummarySnapshot;
102
+ 'document.search': DocmanDocumentSearchResult;
103
+ 'document.scope.search': DocmanScopeDocumentSearchResult;
104
+ 'document.answer-pack': DocmanDocumentAnswerPackResult;
105
+ 'document.compose.fetch': DocmanDocumentComposeFetchResult;
106
+ 'document.publish.materialize': DocmanDocumentPublishMaterializeResult;
107
+ 'document.delete.safe': unknown;
108
+ 'document-version.delete.safe': unknown;
109
+ 'document-version.import-headings': DocmanDocumentVersionImportHeadingsResult;
110
+ 'document-version.set-current': DocmanDocumentVersionSetCurrentOperationOutput;
111
+ 'document-section-link.usage.list': DocumentSectionLinkUsageItem[];
112
+ };
113
+ export type DocmanOperationInputById = {
114
+ [TId in DocmanCrudOperationId]: DocmanCrudInput<TId>;
115
+ } & DocmanCustomOperationInputById;
116
+ export type DocmanOperationOutputById = {
117
+ [TId in DocmanCrudOperationId]: DocmanCrudOutput<TId>;
118
+ } & DocmanCustomOperationOutputById;
119
+ export type DocmanTypedOperationId = Extract<keyof DocmanOperationInputById, string>;
120
+ export type DocmanOperationHostContextInput = {
121
+ scopeId?: string;
122
+ scopeResolution?: 'explicit' | 'cascade';
123
+ };
124
+ export type DocmanOperationInput<TId extends DocmanTypedOperationId> = DocmanOperationInputById[TId] & DocmanOperationHostContextInput;
125
+ export type DocmanOperationOutput<TId extends DocmanTypedOperationId> = DocmanOperationOutputById[TId];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { DocmanOperationSchemaRef } from './types.js';
2
+ type JsonSchema = Record<string, unknown>;
3
+ export declare function createDocmanSchemaRef(ref: string): DocmanOperationSchemaRef;
4
+ export declare function getDocmanOperationIoSchemaRefs(operationId: string): {
5
+ inputRef: string;
6
+ outputRef: string;
7
+ } | undefined;
8
+ export declare function getDocmanContractSchema(ref: string): JsonSchema | undefined;
9
+ export declare function resolveDocmanSchemaRefName(schema: unknown): string | undefined;
10
+ export {};