@osva-ai/adapter-artifact-memory 0.0.0-stage → 0.1.1
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 +50 -3
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-artifact-blob-store.d.ts +20 -0
- package/dist/memory-artifact-blob-store.d.ts.map +1 -0
- package/dist/memory-artifact-blob-store.js +101 -0
- package/dist/memory-artifact-blob-store.js.map +1 -0
- package/package.json +44 -6
package/README.md
CHANGED
|
@@ -1,3 +1,50 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# @osva-ai/adapter-artifact-memory
|
|
2
|
+
|
|
3
|
+
Reference **A1.1** implementation of `ArtifactBlobStore` backed by a process-local JavaScript `Map`.
|
|
4
|
+
|
|
5
|
+
> **Not production storage.** Bytes are non-durable and isolated to a single Node.js process. **Do not use this adapter for multiprocess production** (web + worker + knowledge-worker will not share bytes). Use OSVA filesystem/S3 drivers or `@osva-ai/adapter-artifact-azure` for durable storage.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @osva-ai/adapter-artifact-memory @osva-ai/contracts@rc
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires Node.js `>=24`. This adapter is tested against **`@osva-ai/contracts@1.1.0-rc.4`** from npm.
|
|
14
|
+
|
|
15
|
+
## Registration
|
|
16
|
+
|
|
17
|
+
The default export satisfies `RegisteredArtifactBlobStoreModule`:
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import adapter from "@osva-ai/adapter-artifact-memory";
|
|
21
|
+
|
|
22
|
+
// OSVA registered loader imports createArtifactBlobStore from operator module specifier.
|
|
23
|
+
export const { createArtifactBlobStore } = adapter;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Operator configuration (OSVA core):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
export OSVA_ARTIFACT_STORAGE_DRIVER=registered
|
|
30
|
+
export OSVA_ARTIFACT_BLOB_STORE_REGISTER_MODULE="@osva-ai/adapter-artifact-memory"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Install the package into the deployment image next to `@osva-ai/contracts@1.1.0-rc.4`. There is no runtime adapter discovery.
|
|
34
|
+
|
|
35
|
+
## Behavior
|
|
36
|
+
|
|
37
|
+
- Streaming `write` with incremental `maxBytes` enforcement.
|
|
38
|
+
- `sha256:` digest via Node `crypto.createHash("sha256")`.
|
|
39
|
+
- Optional `expectedDigest` validation (fail before persist).
|
|
40
|
+
- Safe opaque key validation (no `..`, restricted character set).
|
|
41
|
+
- Duplicate keys replace prior content; `delete` is idempotent.
|
|
42
|
+
- `open` returns isolated buffer copies.
|
|
43
|
+
|
|
44
|
+
## Errors
|
|
45
|
+
|
|
46
|
+
Throws `ArtifactBlobStoreError` with `code` from `ARTIFACT_ERROR_CODES` in `@osva-ai/contracts` (for example `ARTIFACT_PAYLOAD_TOO_LARGE`, `ARTIFACT_DIGEST_MISMATCH`, `ARTIFACT_UNAVAILABLE`).
|
|
47
|
+
|
|
48
|
+
## License
|
|
49
|
+
|
|
50
|
+
Apache-2.0
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ArtifactErrorCode } from "@osva-ai/contracts";
|
|
2
|
+
export declare class ArtifactBlobStoreError extends Error {
|
|
3
|
+
readonly code: ArtifactErrorCode;
|
|
4
|
+
constructor(code: ArtifactErrorCode, message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function payloadTooLarge(maxBytes: number): ArtifactBlobStoreError;
|
|
7
|
+
export declare function digestMismatch(): ArtifactBlobStoreError;
|
|
8
|
+
export declare function blobUnavailable(key: string): ArtifactBlobStoreError;
|
|
9
|
+
export declare function invalidRequest(message: string): ArtifactBlobStoreError;
|
|
10
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBAErB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM;CAKrD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAKxE;AAED,wBAAgB,cAAc,IAAI,sBAAsB,CAKvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAKnE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAKtE"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ARTIFACT_ERROR_CODES, } from "@osva-ai/contracts";
|
|
2
|
+
export class ArtifactBlobStoreError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(code, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "ArtifactBlobStoreError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function payloadTooLarge(maxBytes) {
|
|
11
|
+
return new ArtifactBlobStoreError(ARTIFACT_ERROR_CODES.ARTIFACT_PAYLOAD_TOO_LARGE, `Artifact payload exceeds maxBytes (${String(maxBytes)}).`);
|
|
12
|
+
}
|
|
13
|
+
export function digestMismatch() {
|
|
14
|
+
return new ArtifactBlobStoreError(ARTIFACT_ERROR_CODES.ARTIFACT_DIGEST_MISMATCH, "Artifact digest does not match expectedDigest.");
|
|
15
|
+
}
|
|
16
|
+
export function blobUnavailable(key) {
|
|
17
|
+
return new ArtifactBlobStoreError(ARTIFACT_ERROR_CODES.ARTIFACT_UNAVAILABLE, `Artifact blob is unavailable for key '${key}'.`);
|
|
18
|
+
}
|
|
19
|
+
export function invalidRequest(message) {
|
|
20
|
+
return new ArtifactBlobStoreError(ARTIFACT_ERROR_CODES.ARTIFACT_INVALID_REQUEST, message);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,IAAI,CAAoB;IAEjC,YAAY,IAAuB,EAAE,OAAe;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,IAAI,sBAAsB,CAC/B,oBAAoB,CAAC,0BAA0B,EAC/C,sCAAsC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAC3D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,sBAAsB,CAC/B,oBAAoB,CAAC,wBAAwB,EAC7C,gDAAgD,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,IAAI,sBAAsB,CAC/B,oBAAoB,CAAC,oBAAoB,EACzC,yCAAyC,GAAG,IAAI,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,sBAAsB,CAC/B,oBAAoB,CAAC,wBAAwB,EAC7C,OAAO,CACR,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MemoryArtifactBlobStore, createArtifactBlobStore, createMemoryArtifactBlobStore, } from "./memory-artifact-blob-store.js";
|
|
2
|
+
export { default as registeredArtifactBlobStoreModule } from "./memory-artifact-blob-store.js";
|
|
3
|
+
export { ArtifactBlobStoreError, blobUnavailable, digestMismatch, invalidRequest, payloadTooLarge, } from "./errors.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MemoryArtifactBlobStore, createArtifactBlobStore, createMemoryArtifactBlobStore, } from "./memory-artifact-blob-store.js";
|
|
2
|
+
export { default as registeredArtifactBlobStoreModule } from "./memory-artifact-blob-store.js";
|
|
3
|
+
export { ArtifactBlobStoreError, blobUnavailable, digestMismatch, invalidRequest, payloadTooLarge, } from "./errors.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ARTIFACT_ERROR_CODES, type ArtifactBlobReadHandle, type ArtifactBlobStore, type ArtifactBlobWriteInput, type ArtifactBlobWriteResult, type ArtifactStorageConfigRegistered, type RegisteredArtifactBlobStoreModule } from "@osva-ai/contracts";
|
|
2
|
+
/**
|
|
3
|
+
* Process-local, non-durable artifact byte storage.
|
|
4
|
+
*
|
|
5
|
+
* Bytes are held in a single Node.js heap Map for the lifetime of the store
|
|
6
|
+
* instance. This adapter is suitable for reference tests and single-process
|
|
7
|
+
* development only — not for production durability or cross-process sharing.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MemoryArtifactBlobStore implements ArtifactBlobStore {
|
|
10
|
+
private readonly blobs;
|
|
11
|
+
write(input: ArtifactBlobWriteInput): Promise<ArtifactBlobWriteResult>;
|
|
12
|
+
open(key: string): Promise<ArtifactBlobReadHandle>;
|
|
13
|
+
delete(key: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createMemoryArtifactBlobStore(): MemoryArtifactBlobStore;
|
|
16
|
+
export declare function createArtifactBlobStore(config: ArtifactStorageConfigRegistered): ArtifactBlobStore;
|
|
17
|
+
declare const moduleShape: RegisteredArtifactBlobStoreModule;
|
|
18
|
+
export default moduleShape;
|
|
19
|
+
export { ARTIFACT_ERROR_CODES };
|
|
20
|
+
//# sourceMappingURL=memory-artifact-blob-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-artifact-blob-store.d.ts","sourceRoot":"","sources":["../src/memory-artifact-blob-store.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EAGpB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACvC,MAAM,oBAAoB,CAAC;AAkB5B;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEjD,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkDtE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAclD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAEvE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,+BAA+B,GACtC,iBAAiB,CAGnB;AAED,QAAA,MAAM,WAAW,EAAE,iCAElB,CAAC;AAEF,eAAe,WAAW,CAAC;AA2B3B,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { Readable } from "node:stream";
|
|
3
|
+
import { ARTIFACT_ERROR_CODES, SHA256_INTEGRITY_PREFIX, isSha256IntegrityDigest, } from "@osva-ai/contracts";
|
|
4
|
+
import { ArtifactBlobStoreError, blobUnavailable, digestMismatch, invalidRequest, payloadTooLarge, } from "./errors.js";
|
|
5
|
+
const SAFE_BLOB_KEY_PATTERN = /^[a-zA-Z0-9._/-]+$/;
|
|
6
|
+
/**
|
|
7
|
+
* Process-local, non-durable artifact byte storage.
|
|
8
|
+
*
|
|
9
|
+
* Bytes are held in a single Node.js heap Map for the lifetime of the store
|
|
10
|
+
* instance. This adapter is suitable for reference tests and single-process
|
|
11
|
+
* development only — not for production durability or cross-process sharing.
|
|
12
|
+
*/
|
|
13
|
+
export class MemoryArtifactBlobStore {
|
|
14
|
+
blobs = new Map();
|
|
15
|
+
async write(input) {
|
|
16
|
+
assertSafeBlobKey(input.key);
|
|
17
|
+
assertWriteLimits(input);
|
|
18
|
+
const hash = createHash("sha256");
|
|
19
|
+
const chunks = [];
|
|
20
|
+
let sizeBytes = 0;
|
|
21
|
+
try {
|
|
22
|
+
for await (const chunk of input.content) {
|
|
23
|
+
if (chunk === undefined || chunk === null) {
|
|
24
|
+
throw invalidRequest("Artifact content stream yielded an empty chunk.");
|
|
25
|
+
}
|
|
26
|
+
const buffer = Buffer.from(chunk);
|
|
27
|
+
sizeBytes += buffer.length;
|
|
28
|
+
if (sizeBytes > input.maxBytes) {
|
|
29
|
+
throw payloadTooLarge(input.maxBytes);
|
|
30
|
+
}
|
|
31
|
+
hash.update(buffer);
|
|
32
|
+
chunks.push(buffer);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof ArtifactBlobStoreError) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
throw invalidRequest(error instanceof Error
|
|
40
|
+
? error.message
|
|
41
|
+
: "Artifact content stream failed.");
|
|
42
|
+
}
|
|
43
|
+
const body = Buffer.concat(chunks);
|
|
44
|
+
const digest = `${SHA256_INTEGRITY_PREFIX}${hash.digest("hex")}`;
|
|
45
|
+
if (input.expectedDigest !== undefined && input.expectedDigest !== digest) {
|
|
46
|
+
throw digestMismatch();
|
|
47
|
+
}
|
|
48
|
+
this.blobs.set(input.key, {
|
|
49
|
+
body: Buffer.from(body),
|
|
50
|
+
sizeBytes,
|
|
51
|
+
digest,
|
|
52
|
+
});
|
|
53
|
+
return { sizeBytes, digest };
|
|
54
|
+
}
|
|
55
|
+
async open(key) {
|
|
56
|
+
assertSafeBlobKey(key);
|
|
57
|
+
const entry = this.blobs.get(key);
|
|
58
|
+
if (entry === undefined) {
|
|
59
|
+
throw blobUnavailable(key);
|
|
60
|
+
}
|
|
61
|
+
const isolated = Buffer.from(entry.body);
|
|
62
|
+
return {
|
|
63
|
+
sizeBytes: entry.sizeBytes,
|
|
64
|
+
stream: Readable.from([isolated]),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
async delete(key) {
|
|
68
|
+
assertSafeBlobKey(key);
|
|
69
|
+
this.blobs.delete(key);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function createMemoryArtifactBlobStore() {
|
|
73
|
+
return new MemoryArtifactBlobStore();
|
|
74
|
+
}
|
|
75
|
+
export function createArtifactBlobStore(config) {
|
|
76
|
+
void config;
|
|
77
|
+
return createMemoryArtifactBlobStore();
|
|
78
|
+
}
|
|
79
|
+
const moduleShape = {
|
|
80
|
+
createArtifactBlobStore,
|
|
81
|
+
};
|
|
82
|
+
export default moduleShape;
|
|
83
|
+
function assertWriteLimits(input) {
|
|
84
|
+
if (!Number.isFinite(input.maxBytes) || input.maxBytes < 0) {
|
|
85
|
+
throw invalidRequest("maxBytes must be a non-negative finite number.");
|
|
86
|
+
}
|
|
87
|
+
if (input.expectedDigest !== undefined &&
|
|
88
|
+
!isSha256IntegrityDigest(input.expectedDigest)) {
|
|
89
|
+
throw invalidRequest(`expectedDigest must use the ${SHA256_INTEGRITY_PREFIX} prefix with 64 hex digits.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function assertSafeBlobKey(key) {
|
|
93
|
+
if (typeof key !== "string" || key.length === 0) {
|
|
94
|
+
throw invalidRequest("Blob key is required.");
|
|
95
|
+
}
|
|
96
|
+
if (!SAFE_BLOB_KEY_PATTERN.test(key) || key.includes("..")) {
|
|
97
|
+
throw invalidRequest("Blob key contains unsupported characters.");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export { ARTIFACT_ERROR_CODES };
|
|
101
|
+
//# sourceMappingURL=memory-artifact-blob-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-artifact-blob-store.js","sourceRoot":"","sources":["../src/memory-artifact-blob-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@osva-ai/adapter-artifact-memory",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@osva-ai/adapter-artifact-memory",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Reference in-memory ArtifactBlobStore adapter for OSVA (non-durable, process-local)",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/Osva-AI/osva-adapters.git",
|
|
9
|
+
"directory": "packages/artifact-memory"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/Osva-AI/osva-adapters/tree/main/packages/artifact-memory",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=24"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.json",
|
|
31
|
+
"lint": "eslint .",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
33
|
+
"test": "vitest run --config vitest.config.ts"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@osva-ai/contracts": "1.1.0-rc.4"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "catalog:",
|
|
40
|
+
"eslint": "catalog:",
|
|
41
|
+
"typescript": "catalog:",
|
|
42
|
+
"vitest": "catalog:"
|
|
43
|
+
}
|
|
44
|
+
}
|