@x12i/memorix-writer 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 +145 -0
- package/catalox-seeds/memorix-write-descriptors.manifest.json +164 -0
- package/dist/client/create-client.d.ts +3 -0
- package/dist/client/create-client.d.ts.map +1 -0
- package/dist/client/create-client.js +81 -0
- package/dist/client/create-client.js.map +1 -0
- package/dist/client/create-from-env.d.ts +3 -0
- package/dist/client/create-from-env.d.ts.map +1 -0
- package/dist/client/create-from-env.js +21 -0
- package/dist/client/create-from-env.js.map +1 -0
- package/dist/client/ensure-tier.d.ts +3 -0
- package/dist/client/ensure-tier.d.ts.map +1 -0
- package/dist/client/ensure-tier.js +4 -0
- package/dist/client/ensure-tier.js.map +1 -0
- package/dist/client/types.d.ts +165 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/constants.js.map +1 -0
- package/dist/content/compute-content-metadata.d.ts +16 -0
- package/dist/content/compute-content-metadata.d.ts.map +1 -0
- package/dist/content/compute-content-metadata.js +13 -0
- package/dist/content/compute-content-metadata.js.map +1 -0
- package/dist/content/generate-content-key.d.ts +13 -0
- package/dist/content/generate-content-key.d.ts.map +1 -0
- package/dist/content/generate-content-key.js +22 -0
- package/dist/content/generate-content-key.js.map +1 -0
- package/dist/content/generate-preview.d.ts +2 -0
- package/dist/content/generate-preview.d.ts.map +1 -0
- package/dist/content/generate-preview.js +7 -0
- package/dist/content/generate-preview.js.map +1 -0
- package/dist/content/map-content-write-errors.d.ts +3 -0
- package/dist/content/map-content-write-errors.d.ts.map +1 -0
- package/dist/content/map-content-write-errors.js +9 -0
- package/dist/content/map-content-write-errors.js.map +1 -0
- package/dist/content/resolve-content-write-config.d.ts +25 -0
- package/dist/content/resolve-content-write-config.d.ts.map +1 -0
- package/dist/content/resolve-content-write-config.js +35 -0
- package/dist/content/resolve-content-write-config.js.map +1 -0
- package/dist/content/write-content-object.d.ts +40 -0
- package/dist/content/write-content-object.d.ts.map +1 -0
- package/dist/content/write-content-object.js +117 -0
- package/dist/content/write-content-object.js.map +1 -0
- package/dist/data/collection-name.d.ts +30 -0
- package/dist/data/collection-name.d.ts.map +1 -0
- package/dist/data/collection-name.js +86 -0
- package/dist/data/collection-name.js.map +1 -0
- package/dist/data/identity.d.ts +13 -0
- package/dist/data/identity.d.ts.map +1 -0
- package/dist/data/identity.js +29 -0
- package/dist/data/identity.js.map +1 -0
- package/dist/data/memorix-write-adapter.d.ts +33 -0
- package/dist/data/memorix-write-adapter.d.ts.map +1 -0
- package/dist/data/memorix-write-adapter.js +45 -0
- package/dist/data/memorix-write-adapter.js.map +1 -0
- package/dist/descriptors/entity-descriptor-types.d.ts +59 -0
- package/dist/descriptors/entity-descriptor-types.d.ts.map +1 -0
- package/dist/descriptors/entity-descriptor-types.js +2 -0
- package/dist/descriptors/entity-descriptor-types.js.map +1 -0
- package/dist/descriptors/load-entity-descriptor.d.ts +7 -0
- package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-entity-descriptor.js +23 -0
- package/dist/descriptors/load-entity-descriptor.js.map +1 -0
- package/dist/descriptors/load-write-descriptor.d.ts +5 -0
- package/dist/descriptors/load-write-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-write-descriptor.js +19 -0
- package/dist/descriptors/load-write-descriptor.js.map +1 -0
- package/dist/descriptors/secret-scan.d.ts +2 -0
- package/dist/descriptors/secret-scan.d.ts.map +1 -0
- package/dist/descriptors/secret-scan.js +39 -0
- package/dist/descriptors/secret-scan.js.map +1 -0
- package/dist/descriptors/validate-write-descriptor.d.ts +4 -0
- package/dist/descriptors/validate-write-descriptor.d.ts.map +1 -0
- package/dist/descriptors/validate-write-descriptor.js +45 -0
- package/dist/descriptors/validate-write-descriptor.js.map +1 -0
- package/dist/descriptors/write-descriptor-types.d.ts +112 -0
- package/dist/descriptors/write-descriptor-types.d.ts.map +1 -0
- package/dist/descriptors/write-descriptor-types.js +2 -0
- package/dist/descriptors/write-descriptor-types.js.map +1 -0
- package/dist/errors/errors.d.ts +6 -0
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/errors/errors.js +12 -0
- package/dist/errors/errors.js.map +1 -0
- package/dist/errors/issues.d.ts +13 -0
- package/dist/errors/issues.d.ts.map +1 -0
- package/dist/errors/issues.js +9 -0
- package/dist/errors/issues.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mongo/collection-documents.d.ts +54 -0
- package/dist/mongo/collection-documents.d.ts.map +1 -0
- package/dist/mongo/collection-documents.js +100 -0
- package/dist/mongo/collection-documents.js.map +1 -0
- package/dist/mongo/collection-name-validate.d.ts +2 -0
- package/dist/mongo/collection-name-validate.d.ts.map +1 -0
- package/dist/mongo/collection-name-validate.js +19 -0
- package/dist/mongo/collection-name-validate.js.map +1 -0
- package/dist/mongo/connection.d.ts +3 -0
- package/dist/mongo/connection.d.ts.map +1 -0
- package/dist/mongo/connection.js +8 -0
- package/dist/mongo/connection.js.map +1 -0
- package/dist/mongo/default-collections.d.ts +3 -0
- package/dist/mongo/default-collections.d.ts.map +1 -0
- package/dist/mongo/default-collections.js +14 -0
- package/dist/mongo/default-collections.js.map +1 -0
- package/dist/mongo/env.d.ts +6 -0
- package/dist/mongo/env.d.ts.map +1 -0
- package/dist/mongo/env.js +33 -0
- package/dist/mongo/env.js.map +1 -0
- package/dist/mongo/id-normalize.d.ts +3 -0
- package/dist/mongo/id-normalize.d.ts.map +1 -0
- package/dist/mongo/id-normalize.js +23 -0
- package/dist/mongo/id-normalize.js.map +1 -0
- package/dist/mongo/index.d.ts +5 -0
- package/dist/mongo/index.d.ts.map +1 -0
- package/dist/mongo/index.js +5 -0
- package/dist/mongo/index.js.map +1 -0
- package/dist/mongo/target.d.ts +4 -0
- package/dist/mongo/target.d.ts.map +1 -0
- package/dist/mongo/target.js +9 -0
- package/dist/mongo/target.js.map +1 -0
- package/dist/mongo/tier-env.d.ts +9 -0
- package/dist/mongo/tier-env.d.ts.map +1 -0
- package/dist/mongo/tier-env.js +11 -0
- package/dist/mongo/tier-env.js.map +1 -0
- package/dist/mongo/tier.d.ts +22 -0
- package/dist/mongo/tier.d.ts.map +1 -0
- package/dist/mongo/tier.js +50 -0
- package/dist/mongo/tier.js.map +1 -0
- package/dist/utils/path.d.ts +4 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +42 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/validation/validate-content.d.ts +17 -0
- package/dist/validation/validate-content.d.ts.map +1 -0
- package/dist/validation/validate-content.js +47 -0
- package/dist/validation/validate-content.js.map +1 -0
- package/dist/validation/validate-fields.d.ts +8 -0
- package/dist/validation/validate-fields.d.ts.map +1 -0
- package/dist/validation/validate-fields.js +49 -0
- package/dist/validation/validate-fields.js.map +1 -0
- package/dist/validation/validate-identity.d.ts +3 -0
- package/dist/validation/validate-identity.d.ts.map +1 -0
- package/dist/validation/validate-identity.js +2 -0
- package/dist/validation/validate-identity.js.map +1 -0
- package/dist/validation/validate-immutability.d.ts +9 -0
- package/dist/validation/validate-immutability.d.ts.map +1 -0
- package/dist/validation/validate-immutability.js +35 -0
- package/dist/validation/validate-immutability.js.map +1 -0
- package/dist/validation/validate-values.d.ts +4 -0
- package/dist/validation/validate-values.d.ts.map +1 -0
- package/dist/validation/validate-values.js +55 -0
- package/dist/validation/validate-values.js.map +1 -0
- package/dist/writer/apply-audit.d.ts +10 -0
- package/dist/writer/apply-audit.d.ts.map +1 -0
- package/dist/writer/apply-audit.js +39 -0
- package/dist/writer/apply-audit.js.map +1 -0
- package/dist/writer/apply-field-mapping.d.ts +9 -0
- package/dist/writer/apply-field-mapping.d.ts.map +1 -0
- package/dist/writer/apply-field-mapping.js +32 -0
- package/dist/writer/apply-field-mapping.js.map +1 -0
- package/dist/writer/apply-timestamps.d.ts +8 -0
- package/dist/writer/apply-timestamps.d.ts.map +1 -0
- package/dist/writer/apply-timestamps.js +12 -0
- package/dist/writer/apply-timestamps.js.map +1 -0
- package/dist/writer/build-record.d.ts +28 -0
- package/dist/writer/build-record.d.ts.map +1 -0
- package/dist/writer/build-record.js +36 -0
- package/dist/writer/build-record.js.map +1 -0
- package/dist/writer/resolve-conflict.d.ts +12 -0
- package/dist/writer/resolve-conflict.d.ts.map +1 -0
- package/dist/writer/resolve-conflict.js +32 -0
- package/dist/writer/resolve-conflict.js.map +1 -0
- package/dist/writer/resolve-idempotency.d.ts +23 -0
- package/dist/writer/resolve-idempotency.d.ts.map +1 -0
- package/dist/writer/resolve-idempotency.js +69 -0
- package/dist/writer/resolve-idempotency.js.map +1 -0
- package/dist/writer/resolve-operation.d.ts +4 -0
- package/dist/writer/resolve-operation.d.ts.map +1 -0
- package/dist/writer/resolve-operation.js +9 -0
- package/dist/writer/resolve-operation.js.map +1 -0
- package/dist/writer/resolve-write-field-target.d.ts +4 -0
- package/dist/writer/resolve-write-field-target.d.ts.map +1 -0
- package/dist/writer/resolve-write-field-target.js +7 -0
- package/dist/writer/resolve-write-field-target.js.map +1 -0
- package/dist/writer/validate-write.d.ts +3 -0
- package/dist/writer/validate-write.d.ts.map +1 -0
- package/dist/writer/validate-write.js +72 -0
- package/dist/writer/validate-write.js.map +1 -0
- package/dist/writer/write-record.d.ts +3 -0
- package/dist/writer/write-record.d.ts.map +1 -0
- package/dist/writer/write-record.js +472 -0
- package/dist/writer/write-record.js.map +1 -0
- package/dist/writer/write-records.d.ts +3 -0
- package/dist/writer/write-records.d.ts.map +1 -0
- package/dist/writer/write-records.js +79 -0
- package/dist/writer/write-records.js.map +1 -0
- package/docs/MEMORIX-DATABASE-CONVENTIONS.md +324 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# @x12i/memorix-writer
|
|
2
|
+
|
|
3
|
+
Descriptor-driven write layer for Memorix. Turns Catalox write descriptors, entity descriptors, validated input, and optional Markdown/text content into Memorix records and external content object pointers.
|
|
4
|
+
|
|
5
|
+
Shared MongoDB naming rules: [docs/MEMORIX-DATABASE-CONVENTIONS.md](./docs/MEMORIX-DATABASE-CONVENTIONS.md).
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
- **Catalox** — `memorix-write-descriptors`, `memorix-entity-descriptors`
|
|
10
|
+
- **MongoDB** — built-in `MemorixDataTier` + collection-name CRUD (no separate `@x12i/memorix` package)
|
|
11
|
+
- **@x12i/memorix-descriptors** — shared catalog ids and descriptor validation (aligned with retrieval)
|
|
12
|
+
- **@x12i/helpers** — GCS/S3 content uploads (`contentWriters.gcs` / `contentWriters.s3`)
|
|
13
|
+
- **@x12i/memorix-retrieval** (optional) — `returnMode: "retrievalItem"`
|
|
14
|
+
|
|
15
|
+
## Quick start
|
|
16
|
+
|
|
17
|
+
Set `MONGO_URI` and provide a Catalox client. Database names, entity vs event routing, and collection resolution are handled internally.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
MONGO_URI=mongodb://localhost:27017
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import {
|
|
25
|
+
createMemorixWriterFromEnv,
|
|
26
|
+
writeMemorixRecord,
|
|
27
|
+
} from "@x12i/memorix-writer";
|
|
28
|
+
|
|
29
|
+
const writer = await createMemorixWriterFromEnv({
|
|
30
|
+
catalox: boundCatalox, // must implement getCatalogItem(appId, catalogId, itemId)
|
|
31
|
+
contentWriters: {
|
|
32
|
+
gcs: myGcsUploader, // uploadObject({ key, body, contentType })
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const result = await writeMemorixRecord(writer, {
|
|
37
|
+
writeDescriptorId: "asset-analysis-write",
|
|
38
|
+
entityId: "10.150.68.31",
|
|
39
|
+
input: { riskLevel: "HIGH", summary: "..." },
|
|
40
|
+
content: {
|
|
41
|
+
fields: {
|
|
42
|
+
investigationReport: { body: "# Report\n...", format: "markdown" },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await writer.close?.();
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Lazy connect (same env, no upfront `await`):
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { createMemorixWriter, writeMemorixRecord } from "@x12i/memorix-writer";
|
|
54
|
+
|
|
55
|
+
const writer = createMemorixWriter({ catalox: boundCatalox });
|
|
56
|
+
// connects to Mongo on first write using MONGO_URI
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Advanced (optional)
|
|
60
|
+
|
|
61
|
+
Override defaults only when you need to:
|
|
62
|
+
|
|
63
|
+
| Option | Purpose |
|
|
64
|
+
|--------|---------|
|
|
65
|
+
| `MEMORIX_ENTITIES_DB` / `MEMORIX_EVENTS_DB` | Non-default database names |
|
|
66
|
+
| `MEMORIX_ENTITIES_COLLECTION_*` / `MEMORIX_EVENTS_COLLECTION_*` | Per-type collection overrides |
|
|
67
|
+
| `memorix` | Inject a pre-configured `MemorixDataTier` instead of built-in Mongo connect |
|
|
68
|
+
| `mongo` | Reuse an existing `MongoClient` |
|
|
69
|
+
| `processEnv` | Custom env object (default: `process.env`) |
|
|
70
|
+
|
|
71
|
+
## Collection resolution
|
|
72
|
+
|
|
73
|
+
Writes target **`memorix-entities`** or **`memorix-events`** based on the write descriptor (`target.kind`, defaulting from `identity.idField`). Database names follow [Memorix Database Conventions](./docs/MEMORIX-DATABASE-CONVENTIONS.md) (`MEMORIX_ENTITIES_DB`, `MEMORIX_EVENTS_DB`, …).
|
|
74
|
+
|
|
75
|
+
Collection name resolution order:
|
|
76
|
+
|
|
77
|
+
1. Explicit override (API/code parameter)
|
|
78
|
+
2. Write descriptor `target.targetCollection`
|
|
79
|
+
3. Entity descriptor content type `collection`
|
|
80
|
+
4. `MEMORIX_ENTITIES_COLLECTION_*` / `MEMORIX_EVENTS_COLLECTION_*` env vars
|
|
81
|
+
5. Write descriptor `target.targetCollectionCandidates`
|
|
82
|
+
6. Content-type slice `{collectionPrefix}-{postfix}` (e.g. `assets-analysis`)
|
|
83
|
+
7. Built-in defaults for known `entityType` values
|
|
84
|
+
8. Heuristic (`<entityType>` or `<entityType>-events`)
|
|
85
|
+
9. Verify the collection exists in the target database (skipped for `dryRun` / `validateOnly`)
|
|
86
|
+
|
|
87
|
+
For content-type slices, step 6 runs before canonical entity defaults so `assets` + `analysis` still resolves to `assets-analysis` unless overridden explicitly.
|
|
88
|
+
|
|
89
|
+
## Operations
|
|
90
|
+
|
|
91
|
+
| Operation | Default | Notes |
|
|
92
|
+
|-----------|---------|--------|
|
|
93
|
+
| `add` | yes | Always inserts a new record |
|
|
94
|
+
| `upsert` | descriptor-gated | Requires `conflict.matchBy` |
|
|
95
|
+
| `patch` | descriptor-gated | Updates writable fields on existing row |
|
|
96
|
+
| `replace` | descriptor-gated | Full replace |
|
|
97
|
+
|
|
98
|
+
## Catalox seeds
|
|
99
|
+
|
|
100
|
+
Validate the example write descriptor seed:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm run catalox:seed:write-descriptors:validate
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Seed file: [`catalox-seeds/memorix-write-descriptors.manifest.json`](catalox-seeds/memorix-write-descriptors.manifest.json)
|
|
107
|
+
|
|
108
|
+
## Acceptance criteria
|
|
109
|
+
|
|
110
|
+
| ID | Status |
|
|
111
|
+
|----|--------|
|
|
112
|
+
| AC-1 | Generic descriptor-driven write |
|
|
113
|
+
| AC-2 | Prefix/postfix collection resolution |
|
|
114
|
+
| AC-3 | Identity: exactly one of `entityId` / `eventId` |
|
|
115
|
+
| AC-4 | Default operation `add` |
|
|
116
|
+
| AC-5 | Upsert only when allowed |
|
|
117
|
+
| AC-6 | Patch only when allowed |
|
|
118
|
+
| AC-7 | Writable field allowlist / unknown fields |
|
|
119
|
+
| AC-8 | Required fields |
|
|
120
|
+
| AC-9 | Content body → object storage + pointer |
|
|
121
|
+
| AC-10 | Existing content pointer |
|
|
122
|
+
| AC-11 | Content maxBytes |
|
|
123
|
+
| AC-12 | No secrets in descriptors |
|
|
124
|
+
| AC-13 | Idempotency |
|
|
125
|
+
| AC-14 | `dryRun` |
|
|
126
|
+
| AC-15 | `validateOnly` |
|
|
127
|
+
| AC-16 | Retrieval delegated when configured |
|
|
128
|
+
|
|
129
|
+
## Development
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm run build
|
|
133
|
+
npm test
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Mongo collection I/O is built in (`insertMemorixCollectionDocument`, etc. under `src/mongo/`).
|
|
137
|
+
|
|
138
|
+
## Publish
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm run build
|
|
142
|
+
npm publish --access public
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Or from the x12i workspace root: `./scripts/publish-memorix-packages.sh`
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
{
|
|
2
|
+
"presetVersion": 1,
|
|
3
|
+
"id": "memorix-write-descriptors",
|
|
4
|
+
"name": "Memorix write descriptors",
|
|
5
|
+
"description": "Write descriptors for @x12i/memorix-writer (example: asset analysis write).",
|
|
6
|
+
"catalogs": [
|
|
7
|
+
{
|
|
8
|
+
"catalogId": "memorix-write-descriptors",
|
|
9
|
+
"name": "Memorix write descriptors",
|
|
10
|
+
"catalogType": "memorix",
|
|
11
|
+
"sourceMode": "native",
|
|
12
|
+
"native": {
|
|
13
|
+
"itemIdField": "id",
|
|
14
|
+
"titleField": "title"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"descriptors": [
|
|
19
|
+
{
|
|
20
|
+
"catalogId": "memorix-write-descriptors",
|
|
21
|
+
"descriptorVersion": "1",
|
|
22
|
+
"mode": "replace",
|
|
23
|
+
"descriptor": {
|
|
24
|
+
"catalogId": "memorix-write-descriptors",
|
|
25
|
+
"label": "Memorix write descriptors",
|
|
26
|
+
"sourceMode": "native",
|
|
27
|
+
"status": "active",
|
|
28
|
+
"capabilities": {
|
|
29
|
+
"canList": true,
|
|
30
|
+
"canGet": true,
|
|
31
|
+
"canCreate": true,
|
|
32
|
+
"canEdit": true,
|
|
33
|
+
"canDelete": true,
|
|
34
|
+
"canImport": true,
|
|
35
|
+
"canExport": true,
|
|
36
|
+
"canSync": false,
|
|
37
|
+
"canValidate": true,
|
|
38
|
+
"canViewReferences": true
|
|
39
|
+
},
|
|
40
|
+
"queryableFields": [
|
|
41
|
+
{
|
|
42
|
+
"key": "id",
|
|
43
|
+
"label": "Id",
|
|
44
|
+
"type": "string",
|
|
45
|
+
"indexed": true,
|
|
46
|
+
"filterable": true,
|
|
47
|
+
"listVisible": true,
|
|
48
|
+
"detailVisible": true
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"key": "entity",
|
|
52
|
+
"label": "Entity",
|
|
53
|
+
"type": "string",
|
|
54
|
+
"indexed": true,
|
|
55
|
+
"filterable": true,
|
|
56
|
+
"listVisible": true,
|
|
57
|
+
"detailVisible": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"key": "title",
|
|
61
|
+
"label": "Title",
|
|
62
|
+
"type": "string",
|
|
63
|
+
"indexed": true,
|
|
64
|
+
"filterable": true,
|
|
65
|
+
"listVisible": true,
|
|
66
|
+
"detailVisible": true
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"identity": {
|
|
70
|
+
"itemIdStrategy": "natural",
|
|
71
|
+
"itemIdField": "id",
|
|
72
|
+
"titleField": "title"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"bindings": [
|
|
78
|
+
{
|
|
79
|
+
"appId": "memorix",
|
|
80
|
+
"catalogId": "memorix-write-descriptors",
|
|
81
|
+
"access": {
|
|
82
|
+
"canRead": true,
|
|
83
|
+
"canWrite": true
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"items": [
|
|
88
|
+
{
|
|
89
|
+
"catalogId": "memorix-write-descriptors",
|
|
90
|
+
"data": {
|
|
91
|
+
"id": "asset-analysis-write",
|
|
92
|
+
"entity": "assets",
|
|
93
|
+
"title": "Write Asset Analysis",
|
|
94
|
+
"target": { "contentType": "analysis" },
|
|
95
|
+
"identity": {
|
|
96
|
+
"idField": "entityId",
|
|
97
|
+
"requireExistingCanonical": true,
|
|
98
|
+
"createCanonicalIfMissing": false
|
|
99
|
+
},
|
|
100
|
+
"operations": {
|
|
101
|
+
"allowed": ["add"],
|
|
102
|
+
"default": "add"
|
|
103
|
+
},
|
|
104
|
+
"fields": {
|
|
105
|
+
"riskLevel": {
|
|
106
|
+
"label": "Risk Level",
|
|
107
|
+
"inputPath": "riskLevel",
|
|
108
|
+
"target": { "path": "data.riskLevel" },
|
|
109
|
+
"required": true,
|
|
110
|
+
"writable": true,
|
|
111
|
+
"valueType": "enum",
|
|
112
|
+
"enumValues": ["LOW", "MEDIUM", "HIGH", "CRITICAL"]
|
|
113
|
+
},
|
|
114
|
+
"summary": {
|
|
115
|
+
"label": "Summary",
|
|
116
|
+
"inputPath": "summary",
|
|
117
|
+
"target": { "path": "data.summary" },
|
|
118
|
+
"writable": true,
|
|
119
|
+
"valueType": "string"
|
|
120
|
+
},
|
|
121
|
+
"investigationReport": {
|
|
122
|
+
"label": "Investigation Report",
|
|
123
|
+
"inputPath": "investigationReport",
|
|
124
|
+
"target": { "path": "data.investigationReport" },
|
|
125
|
+
"writable": true,
|
|
126
|
+
"valueType": "content",
|
|
127
|
+
"content": {
|
|
128
|
+
"enabled": true,
|
|
129
|
+
"objectType": "memorix-content-object",
|
|
130
|
+
"acceptBody": true,
|
|
131
|
+
"acceptPointer": true,
|
|
132
|
+
"format": "markdown",
|
|
133
|
+
"maxBytes": 5242880,
|
|
134
|
+
"contentKeyTemplate": "{{entity}}/{{contentType}}/{{entityId}}/{{recordId}}/{{field}}.md",
|
|
135
|
+
"generatePreview": true,
|
|
136
|
+
"previewMaxChars": 500,
|
|
137
|
+
"computeMetadata": true,
|
|
138
|
+
"storage": {
|
|
139
|
+
"provider": "gcs",
|
|
140
|
+
"bucket": "memorix-content",
|
|
141
|
+
"prefix": "assets"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"content": {
|
|
147
|
+
"allowed": true,
|
|
148
|
+
"allowedFields": ["investigationReport"],
|
|
149
|
+
"generatePreview": true,
|
|
150
|
+
"previewMaxChars": 500,
|
|
151
|
+
"computeMetadata": true,
|
|
152
|
+
"maxBytes": 5242880
|
|
153
|
+
},
|
|
154
|
+
"validation": {
|
|
155
|
+
"rejectUnknownFields": true,
|
|
156
|
+
"requireAtLeastOneWritableField": true
|
|
157
|
+
},
|
|
158
|
+
"return": {
|
|
159
|
+
"defaultMode": "summary"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
]
|
|
164
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../src/client/create-client.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAsEpB,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAyBrB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { createMemorixDataTier, } from "../mongo/tier.js";
|
|
2
|
+
import { DEFAULT_CANONICAL_CONTENT_TYPE, DEFAULT_CONTENT_KEY_TEMPLATE, DEFAULT_CONTENT_MAX_BYTES, DEFAULT_DATA_ROOT, DEFAULT_EFFECTIVE_DATE_PATH, DEFAULT_MEMORIX_APP_ID, DEFAULT_MEMORIX_METADATA_PATH, } from "../constants.js";
|
|
3
|
+
import { connectMemorixMongo } from "../mongo/connection.js";
|
|
4
|
+
import { resolveMemorixDbName } from "../mongo/env.js";
|
|
5
|
+
function resolveDefaults(partial) {
|
|
6
|
+
return {
|
|
7
|
+
canonicalContentType: partial?.canonicalContentType ?? DEFAULT_CANONICAL_CONTENT_TYPE,
|
|
8
|
+
dataRoot: partial?.dataRoot ?? DEFAULT_DATA_ROOT,
|
|
9
|
+
effectiveDatePath: partial?.effectiveDatePath ?? DEFAULT_EFFECTIVE_DATE_PATH,
|
|
10
|
+
contentMaxBytes: partial?.contentMaxBytes ?? DEFAULT_CONTENT_MAX_BYTES,
|
|
11
|
+
packageMaxContentBytes: partial?.packageMaxContentBytes,
|
|
12
|
+
defaultWriteMode: partial?.defaultWriteMode ?? "add",
|
|
13
|
+
defaultConflictBehavior: partial?.defaultConflictBehavior ?? "fail",
|
|
14
|
+
defaultReturnMode: partial?.defaultReturnMode ?? "summary",
|
|
15
|
+
contentKeyTemplate: partial?.contentKeyTemplate ?? DEFAULT_CONTENT_KEY_TEMPLATE,
|
|
16
|
+
memorixMetadataPath: partial?.memorixMetadataPath ?? DEFAULT_MEMORIX_METADATA_PATH,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createLazyMemorixTierAccess(args) {
|
|
20
|
+
let tier = args.memorix ?? null;
|
|
21
|
+
let ownedMongo = !args.memorix && !args.mongo;
|
|
22
|
+
let mongoClient = args.mongo ?? null;
|
|
23
|
+
let tierConnect = null;
|
|
24
|
+
const getMemorixTier = async () => {
|
|
25
|
+
if (tier?.memorixReady)
|
|
26
|
+
return tier;
|
|
27
|
+
if (!tierConnect) {
|
|
28
|
+
tierConnect = (async () => {
|
|
29
|
+
if (!mongoClient) {
|
|
30
|
+
mongoClient = await connectMemorixMongo(args.processEnv);
|
|
31
|
+
}
|
|
32
|
+
const nextTier = createMemorixDataTier({
|
|
33
|
+
memorixDb: resolveMemorixDbName("entity", args.processEnv),
|
|
34
|
+
processEnv: args.processEnv,
|
|
35
|
+
client: mongoClient,
|
|
36
|
+
});
|
|
37
|
+
await nextTier.init();
|
|
38
|
+
tier = nextTier;
|
|
39
|
+
return nextTier;
|
|
40
|
+
})();
|
|
41
|
+
}
|
|
42
|
+
return tierConnect;
|
|
43
|
+
};
|
|
44
|
+
const close = async () => {
|
|
45
|
+
if (tier) {
|
|
46
|
+
await tier.close();
|
|
47
|
+
tier = null;
|
|
48
|
+
tierConnect = null;
|
|
49
|
+
}
|
|
50
|
+
if (ownedMongo && mongoClient) {
|
|
51
|
+
await mongoClient.close();
|
|
52
|
+
mongoClient = null;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
return { getMemorixTier, close };
|
|
56
|
+
}
|
|
57
|
+
export function createMemorixWriter(options) {
|
|
58
|
+
if (!options.catalox) {
|
|
59
|
+
throw new Error("MemorixWriter: catalox client is required");
|
|
60
|
+
}
|
|
61
|
+
const processEnv = options.processEnv ?? process.env;
|
|
62
|
+
const tierAccess = createLazyMemorixTierAccess({
|
|
63
|
+
memorix: options.memorix,
|
|
64
|
+
mongo: options.mongo,
|
|
65
|
+
processEnv,
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
appId: options.appId ?? DEFAULT_MEMORIX_APP_ID,
|
|
69
|
+
catalox: options.catalox,
|
|
70
|
+
memorix: options.memorix,
|
|
71
|
+
retrieval: options.retrieval,
|
|
72
|
+
contentWriters: options.contentWriters ?? {},
|
|
73
|
+
defaults: resolveDefaults(options.defaults),
|
|
74
|
+
getMemorixTier: async () => {
|
|
75
|
+
const tier = await tierAccess.getMemorixTier();
|
|
76
|
+
return tier;
|
|
77
|
+
},
|
|
78
|
+
close: tierAccess.close,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=create-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-client.js","sourceRoot":"","sources":["../../src/client/create-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-from-env.d.ts","sourceRoot":"","sources":["../../src/client/create-from-env.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iCAAiC,EACjC,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,mBAAmB,CAAC,CAgB9B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createMemorixDataTier } from "../mongo/tier.js";
|
|
2
|
+
import { connectMemorixMongo } from "../mongo/connection.js";
|
|
3
|
+
import { resolveMemorixDbName } from "../mongo/env.js";
|
|
4
|
+
import { createMemorixWriter } from "./create-client.js";
|
|
5
|
+
export async function createMemorixWriterFromEnv(options) {
|
|
6
|
+
const processEnv = options.processEnv ?? process.env;
|
|
7
|
+
const mongo = options.mongo ?? (await connectMemorixMongo(processEnv));
|
|
8
|
+
const tier = createMemorixDataTier({
|
|
9
|
+
memorixDb: resolveMemorixDbName("entity", processEnv),
|
|
10
|
+
processEnv,
|
|
11
|
+
client: mongo,
|
|
12
|
+
});
|
|
13
|
+
await tier.init();
|
|
14
|
+
return createMemorixWriter({
|
|
15
|
+
...options,
|
|
16
|
+
memorix: tier,
|
|
17
|
+
processEnv,
|
|
18
|
+
mongo,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=create-from-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-from-env.js","sourceRoot":"","sources":["../../src/client/create-from-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAMzD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IACrD,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACjC,SAAS,EAAE,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC;QACrD,UAAU;QACV,MAAM,EAAE,KAAc;KACvB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,OAAO,mBAAmB,CAAC;QACzB,GAAG,OAAO;QACV,OAAO,EAAE,IAAI;QACb,UAAU;QACV,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-tier.d.ts","sourceRoot":"","sources":["../../src/client/ensure-tier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,uDAErE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-tier.js","sourceRoot":"","sources":["../../src/client/ensure-tier.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA2B;IACpE,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import type { MongoClient } from "mongodb";
|
|
2
|
+
import type { MemorixDataTier } from "../mongo/tier.js";
|
|
3
|
+
import type { MemorixContentObject } from "../descriptors/entity-descriptor-types.js";
|
|
4
|
+
import type { MemorixWriteIssue } from "../errors/issues.js";
|
|
5
|
+
export type CataloxLike = {
|
|
6
|
+
getCatalogItem(appId: string, catalogId: string, itemId: string): Promise<{
|
|
7
|
+
data: Record<string, unknown>;
|
|
8
|
+
} | null>;
|
|
9
|
+
};
|
|
10
|
+
export type MemorixObjectWriterLike = {
|
|
11
|
+
uploadObject(args: {
|
|
12
|
+
key: string;
|
|
13
|
+
body: string | Uint8Array;
|
|
14
|
+
contentType?: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
deleteObject?(args: {
|
|
17
|
+
key: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
export type MemorixContentWriterRegistry = {
|
|
21
|
+
gcs?: MemorixObjectWriterLike;
|
|
22
|
+
s3?: MemorixObjectWriterLike;
|
|
23
|
+
};
|
|
24
|
+
export type MemorixRetrievalClient = {
|
|
25
|
+
fetchMemorixItem(args: {
|
|
26
|
+
itemDescriptorId: string;
|
|
27
|
+
entityId?: string;
|
|
28
|
+
eventId?: string;
|
|
29
|
+
recordId?: string;
|
|
30
|
+
}): Promise<Record<string, unknown>>;
|
|
31
|
+
};
|
|
32
|
+
export type MemorixWriterDefaults = {
|
|
33
|
+
canonicalContentType: string;
|
|
34
|
+
dataRoot: string;
|
|
35
|
+
effectiveDatePath: string;
|
|
36
|
+
contentMaxBytes: number;
|
|
37
|
+
packageMaxContentBytes?: number;
|
|
38
|
+
defaultWriteMode: "add" | "upsert" | "patch" | "replace";
|
|
39
|
+
defaultConflictBehavior: "fail" | "skip" | "append";
|
|
40
|
+
defaultReturnMode: "summary" | "record" | "retrievalItem";
|
|
41
|
+
contentKeyTemplate: string;
|
|
42
|
+
memorixMetadataPath: string;
|
|
43
|
+
};
|
|
44
|
+
export type CreateMemorixWriterOptions = {
|
|
45
|
+
appId?: string;
|
|
46
|
+
catalox: CataloxLike;
|
|
47
|
+
/** Advanced: inject Memorix tier. Omit to connect from `MONGO_URI` on first write. */
|
|
48
|
+
memorix?: MemorixDataTier;
|
|
49
|
+
/** Advanced: reuse an existing MongoClient (simple mode lazy/eager connect). */
|
|
50
|
+
mongo?: MongoClient;
|
|
51
|
+
processEnv?: NodeJS.ProcessEnv;
|
|
52
|
+
retrieval?: MemorixRetrievalClient;
|
|
53
|
+
contentWriters?: MemorixContentWriterRegistry;
|
|
54
|
+
defaults?: Partial<MemorixWriterDefaults>;
|
|
55
|
+
};
|
|
56
|
+
export type CreateMemorixWriterFromEnvOptions = Omit<CreateMemorixWriterOptions, "memorix">;
|
|
57
|
+
export type MemorixWriterClient = {
|
|
58
|
+
appId: string;
|
|
59
|
+
catalox: CataloxLike;
|
|
60
|
+
/** Resolved tier (available after `getMemorixTier()` or first write). */
|
|
61
|
+
memorix?: MemorixDataTier;
|
|
62
|
+
retrieval?: MemorixRetrievalClient;
|
|
63
|
+
contentWriters: MemorixContentWriterRegistry;
|
|
64
|
+
defaults: MemorixWriterDefaults;
|
|
65
|
+
/** Internal: lazy Mongo tier from env (simple mode). */
|
|
66
|
+
getMemorixTier: () => Promise<MemorixDataTier>;
|
|
67
|
+
close?: () => Promise<void>;
|
|
68
|
+
};
|
|
69
|
+
export type WriteMemorixRecordRequest = {
|
|
70
|
+
writeDescriptorId: string;
|
|
71
|
+
operation?: "add" | "upsert" | "patch" | "replace";
|
|
72
|
+
entityId?: string;
|
|
73
|
+
eventId?: string;
|
|
74
|
+
input: Record<string, unknown>;
|
|
75
|
+
content?: {
|
|
76
|
+
fields?: Record<string, {
|
|
77
|
+
body: string;
|
|
78
|
+
format?: "markdown" | "text";
|
|
79
|
+
filename?: string;
|
|
80
|
+
metadata?: Record<string, unknown>;
|
|
81
|
+
} | MemorixContentObject>;
|
|
82
|
+
};
|
|
83
|
+
source?: {
|
|
84
|
+
system?: string;
|
|
85
|
+
connector?: string;
|
|
86
|
+
runId?: string;
|
|
87
|
+
jobId?: string;
|
|
88
|
+
recordId?: string;
|
|
89
|
+
};
|
|
90
|
+
actor?: {
|
|
91
|
+
type: "user" | "service" | "agent" | "system";
|
|
92
|
+
id?: string;
|
|
93
|
+
name?: string;
|
|
94
|
+
};
|
|
95
|
+
options?: {
|
|
96
|
+
dryRun?: boolean;
|
|
97
|
+
validateOnly?: boolean;
|
|
98
|
+
idempotencyKey?: string;
|
|
99
|
+
correlationId?: string;
|
|
100
|
+
returnMode?: "summary" | "record" | "retrievalItem";
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export type WriteMemorixRecordResponse = {
|
|
104
|
+
ok: boolean;
|
|
105
|
+
writeDescriptorId: string;
|
|
106
|
+
entity: string;
|
|
107
|
+
contentType: string;
|
|
108
|
+
collection: string;
|
|
109
|
+
operation: "add" | "upsert" | "patch" | "replace";
|
|
110
|
+
action: "inserted" | "updated" | "patched" | "replaced" | "skipped" | "deduplicated" | "validated";
|
|
111
|
+
entityId?: string;
|
|
112
|
+
eventId?: string;
|
|
113
|
+
recordId?: string;
|
|
114
|
+
idempotencyKey?: string;
|
|
115
|
+
writtenAt?: string;
|
|
116
|
+
contentObjects?: Record<string, {
|
|
117
|
+
contentKey: string;
|
|
118
|
+
sizeBytes?: number;
|
|
119
|
+
format?: "markdown" | "text";
|
|
120
|
+
written: boolean;
|
|
121
|
+
}>;
|
|
122
|
+
record?: Record<string, unknown>;
|
|
123
|
+
retrievalItem?: Record<string, unknown>;
|
|
124
|
+
issues?: MemorixWriteIssue[];
|
|
125
|
+
};
|
|
126
|
+
export type WriteMemorixRecordsRequest = {
|
|
127
|
+
writeDescriptorId: string;
|
|
128
|
+
operation?: "add" | "upsert" | "patch" | "replace";
|
|
129
|
+
records: Array<{
|
|
130
|
+
entityId?: string;
|
|
131
|
+
eventId?: string;
|
|
132
|
+
input: Record<string, unknown>;
|
|
133
|
+
content?: WriteMemorixRecordRequest["content"];
|
|
134
|
+
source?: WriteMemorixRecordRequest["source"];
|
|
135
|
+
actor?: WriteMemorixRecordRequest["actor"];
|
|
136
|
+
options?: Pick<NonNullable<WriteMemorixRecordRequest["options"]>, "idempotencyKey" | "correlationId">;
|
|
137
|
+
}>;
|
|
138
|
+
options?: {
|
|
139
|
+
dryRun?: boolean;
|
|
140
|
+
validateOnly?: boolean;
|
|
141
|
+
continueOnError?: boolean;
|
|
142
|
+
returnMode?: "summary" | "record";
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
export type WriteMemorixRecordsResponse = {
|
|
146
|
+
ok: boolean;
|
|
147
|
+
writeDescriptorId: string;
|
|
148
|
+
entity: string;
|
|
149
|
+
contentType: string;
|
|
150
|
+
count: {
|
|
151
|
+
requested: number;
|
|
152
|
+
inserted: number;
|
|
153
|
+
updated: number;
|
|
154
|
+
skipped: number;
|
|
155
|
+
failed: number;
|
|
156
|
+
};
|
|
157
|
+
results: WriteMemorixRecordResponse[];
|
|
158
|
+
issues?: MemorixWriteIssue[];
|
|
159
|
+
};
|
|
160
|
+
export type ValidateMemorixWriteResponse = {
|
|
161
|
+
ok: boolean;
|
|
162
|
+
issues?: MemorixWriteIssue[];
|
|
163
|
+
plannedRecord?: Record<string, unknown>;
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,IAAI,EAAE;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,YAAY,CAAC,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IAC9B,EAAE,CAAC,EAAE,uBAAuB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,CAAC,IAAI,EAAE;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACzD,uBAAuB,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpD,iBAAiB,EAAE,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC1D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,sFAAsF;IACtF,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,gFAAgF;IAChF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,cAAc,CAAC,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,0BAA0B,EAC1B,SAAS,CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,cAAc,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,EAAE,qBAAqB,CAAC;IAChC,wDAAwD;IACxD,cAAc,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACJ;YACE,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;YAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACpC,GACD,oBAAoB,CACvB,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;KACrD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAClD,MAAM,EACF,UAAU,GACV,SAAS,GACT,SAAS,GACT,UAAU,GACV,SAAS,GACT,cAAc,GACd,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CACrB,MAAM,EACN;QACE,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;QAC7B,OAAO,EAAE,OAAO,CAAC;KAClB,CACF,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACnD,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,CAAC,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,EAAE,IAAI,CACZ,WAAW,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EACjD,gBAAgB,GAAG,eAAe,CACnC,CAAC;KACH,CAAC,CAAC;IACH,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const DEFAULT_MEMORIX_APP_ID = "memorix";
|
|
2
|
+
export declare const MEMORIX_WRITE_DESCRIPTORS_CATALOG_ID = "memorix-write-descriptors";
|
|
3
|
+
export declare const MEMORIX_ENTITY_DESCRIPTORS_CATALOG_ID = "memorix-entity-descriptors";
|
|
4
|
+
export declare const DEFAULT_CANONICAL_CONTENT_TYPE = "snapshots";
|
|
5
|
+
export declare const DEFAULT_DATA_ROOT = "data";
|
|
6
|
+
export declare const DEFAULT_EFFECTIVE_DATE_PATH = "modifiedAt";
|
|
7
|
+
export declare const DEFAULT_CONTENT_MAX_BYTES: number;
|
|
8
|
+
export declare const DEFAULT_MEMORIX_METADATA_PATH = "_memorix";
|
|
9
|
+
export declare const DEFAULT_AUDIT_PATH = "_memorix.audit";
|
|
10
|
+
export declare const DEFAULT_IDEMPOTENCY_KEY_PATH = "_memorix.idempotencyKey";
|
|
11
|
+
export declare const DEFAULT_PAYLOAD_HASH_PATH = "_memorix.payloadHash";
|
|
12
|
+
export declare const DEFAULT_CONTENT_KEY_TEMPLATE = "{{entity}}/{{contentType}}/{{id}}/{{recordId}}/{{field}}.md";
|
|
13
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,oCAAoC,8BAA8B,CAAC;AAChF,eAAO,MAAM,qCAAqC,+BAA+B,CAAC;AAElF,eAAO,MAAM,8BAA8B,cAAc,CAAC;AAC1D,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,2BAA2B,eAAe,CAAC;AACxD,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AACzD,eAAO,MAAM,6BAA6B,aAAa,CAAC;AACxD,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AACnD,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AACtE,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAEhE,eAAO,MAAM,4BAA4B,gEACsB,CAAC"}
|