@twin.org/blob-storage-connector-memory 0.0.3-next.1 → 0.0.3-next.11

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # TWIN Blob Storage Connector Memory
2
2
 
3
- Blob Storage connector implementation using in-memory storage.
3
+ This package provides an in-memory connector for blob storage workflows where persistence is not required. It is suited to local development, automated testing, and fast feedback loops that benefit from isolated, ephemeral storage.
4
4
 
5
5
  ## Installation
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { ContextIdHelper, ContextIdStore } from "@twin.org/context";
2
- import { Converter, GeneralError, Guards, Urn } from "@twin.org/core";
2
+ import { ComponentFactory, Converter, GeneralError, Guards, HealthStatus, Urn } from "@twin.org/core";
3
3
  import { Sha256 } from "@twin.org/crypto";
4
4
  /**
5
5
  * Class for performing blob storage operations in-memory.
@@ -38,6 +38,22 @@ export class MemoryBlobStorageConnector {
38
38
  className() {
39
39
  return MemoryBlobStorageConnector.CLASS_NAME;
40
40
  }
41
+ /**
42
+ * Returns the health status of the component.
43
+ * @returns The health status of the component.
44
+ */
45
+ async health() {
46
+ return [
47
+ {
48
+ source: MemoryBlobStorageConnector.CLASS_NAME,
49
+ status: HealthStatus.Ok,
50
+ description: "healthDescription",
51
+ data: {
52
+ storedItemCount: Object.keys(this._store).length
53
+ }
54
+ }
55
+ ];
56
+ }
41
57
  /**
42
58
  * Set the blob.
43
59
  * @param blob The data for the blob.
@@ -96,6 +112,47 @@ export class MemoryBlobStorageConnector {
96
112
  }
97
113
  return false;
98
114
  }
115
+ /**
116
+ * Teardown the component and remove any resources it created.
117
+ * @param nodeLoggingComponentType The node logging component type.
118
+ * @returns True if the teardown process was successful.
119
+ */
120
+ async teardown(nodeLoggingComponentType) {
121
+ const nodeLogging = ComponentFactory.getIfExists(nodeLoggingComponentType);
122
+ await nodeLogging?.log({
123
+ level: "info",
124
+ source: MemoryBlobStorageConnector.CLASS_NAME,
125
+ message: "storeTearingDown"
126
+ });
127
+ for (const key of Object.keys(this._store)) {
128
+ delete this._store[key];
129
+ }
130
+ await nodeLogging?.log({
131
+ level: "info",
132
+ source: MemoryBlobStorageConnector.CLASS_NAME,
133
+ message: "storeTornDown"
134
+ });
135
+ return true;
136
+ }
137
+ /**
138
+ * Remove all blobs from the storage.
139
+ * @returns Nothing.
140
+ */
141
+ async empty() {
142
+ try {
143
+ const contextIds = await ContextIdStore.getContextIds();
144
+ const partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);
145
+ const prefix = `${partitionKey ?? "root"}/`;
146
+ for (const key of Object.keys(this._store)) {
147
+ if (key.startsWith(prefix)) {
148
+ delete this._store[key];
149
+ }
150
+ }
151
+ }
152
+ catch (err) {
153
+ throw new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, "emptyFailed", undefined, err);
154
+ }
155
+ }
99
156
  /**
100
157
  * Get the memory store.
101
158
  * @returns The store.
@@ -1 +1 @@
1
- {"version":3,"file":"memoryBlobStorageConnector.js","sourceRoot":"","sources":["../../src/memoryBlobStorageConnector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IBlobStorageConnector } from \"@twin.org/blob-storage-models\";\nimport { ContextIdHelper, ContextIdStore } from \"@twin.org/context\";\nimport { Converter, GeneralError, Guards, Urn } from \"@twin.org/core\";\nimport { Sha256 } from \"@twin.org/crypto\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IMemoryStorageConnectorConstructorOptions } from \"./models/IMemoryStorageConnectorConstructorOptions.js\";\n\n/**\n * Class for performing blob storage operations in-memory.\n */\nexport class MemoryBlobStorageConnector implements IBlobStorageConnector {\n\t/**\n\t * The namespace for the items.\n\t */\n\tpublic static readonly NAMESPACE: string = \"memory\";\n\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<MemoryBlobStorageConnector>();\n\n\t/**\n\t * The keys to use from the context ids to create partitions.\n\t * @internal\n\t */\n\tprivate readonly _partitionContextIds?: string[];\n\n\t/**\n\t * The storage for the in-memory items.\n\t * @internal\n\t */\n\tprivate readonly _store: { [id: string]: Uint8Array };\n\n\t/**\n\t * Create a new instance of MemoryBlobStorageConnector.\n\t * @param options The options for the connector.\n\t */\n\tconstructor(options?: IMemoryStorageConnectorConstructorOptions) {\n\t\tthis._partitionContextIds = options?.partitionContextIds;\n\t\tthis._store = {};\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn MemoryBlobStorageConnector.CLASS_NAME;\n\t}\n\n\t/**\n\t * Set the blob.\n\t * @param blob The data for the blob.\n\t * @returns The id of the stored blob in urn format.\n\t */\n\tpublic async set(blob: Uint8Array): Promise<string> {\n\t\tGuards.uint8Array(MemoryBlobStorageConnector.CLASS_NAME, nameof(blob), blob);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst id = Converter.bytesToHex(Sha256.sum256(blob));\n\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${id}`;\n\t\tthis._store[fullKey] = blob;\n\n\t\treturn `blob:${new Urn(MemoryBlobStorageConnector.NAMESPACE, id).toString()}`;\n\t}\n\n\t/**\n\t * Get the blob.\n\t * @param id The id of the blob to get in urn format.\n\t * @returns The data for the blob if it can be found or undefined.\n\t */\n\tpublic async get(id: string): Promise<Uint8Array | undefined> {\n\t\tUrn.guard(MemoryBlobStorageConnector.CLASS_NAME, nameof(id), id);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceMethod() !== MemoryBlobStorageConnector.NAMESPACE) {\n\t\t\tthrow new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: MemoryBlobStorageConnector.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst namespaceId = urnParsed.namespaceSpecific(1);\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${namespaceId}`;\n\t\treturn this._store[fullKey];\n\t}\n\n\t/**\n\t * Remove the blob.\n\t * @param id The id of the blob to remove in urn format.\n\t * @returns True if the blob was found.\n\t */\n\tpublic async remove(id: string): Promise<boolean> {\n\t\tUrn.guard(MemoryBlobStorageConnector.CLASS_NAME, nameof(id), id);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceMethod() !== MemoryBlobStorageConnector.NAMESPACE) {\n\t\t\tthrow new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: MemoryBlobStorageConnector.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst namespaceId = urnParsed.namespaceSpecific(1);\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${namespaceId}`;\n\t\tif (this._store[fullKey]) {\n\t\t\tdelete this._store[fullKey];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get the memory store.\n\t * @returns The store.\n\t */\n\tpublic getStore(): { [id: string]: Uint8Array } {\n\t\treturn this._store;\n\t}\n}\n"]}
1
+ {"version":3,"file":"memoryBlobStorageConnector.js","sourceRoot":"","sources":["../../src/memoryBlobStorageConnector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IBlobStorageConnector } from \"@twin.org/blob-storage-models\";\nimport { ContextIdHelper, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tHealthStatus,\n\tUrn,\n\ttype IHealth\n} from \"@twin.org/core\";\nimport { Sha256 } from \"@twin.org/crypto\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IMemoryStorageConnectorConstructorOptions } from \"./models/IMemoryStorageConnectorConstructorOptions.js\";\n\n/**\n * Class for performing blob storage operations in-memory.\n */\nexport class MemoryBlobStorageConnector implements IBlobStorageConnector {\n\t/**\n\t * The namespace for the items.\n\t */\n\tpublic static readonly NAMESPACE: string = \"memory\";\n\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<MemoryBlobStorageConnector>();\n\n\t/**\n\t * The keys to use from the context ids to create partitions.\n\t * @internal\n\t */\n\tprivate readonly _partitionContextIds?: string[];\n\n\t/**\n\t * The storage for the in-memory items.\n\t * @internal\n\t */\n\tprivate readonly _store: { [id: string]: Uint8Array };\n\n\t/**\n\t * Create a new instance of MemoryBlobStorageConnector.\n\t * @param options The options for the connector.\n\t */\n\tconstructor(options?: IMemoryStorageConnectorConstructorOptions) {\n\t\tthis._partitionContextIds = options?.partitionContextIds;\n\t\tthis._store = {};\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn MemoryBlobStorageConnector.CLASS_NAME;\n\t}\n\n\t/**\n\t * Returns the health status of the component.\n\t * @returns The health status of the component.\n\t */\n\tpublic async health(): Promise<IHealth[]> {\n\t\treturn [\n\t\t\t{\n\t\t\t\tsource: MemoryBlobStorageConnector.CLASS_NAME,\n\t\t\t\tstatus: HealthStatus.Ok,\n\t\t\t\tdescription: \"healthDescription\",\n\t\t\t\tdata: {\n\t\t\t\t\tstoredItemCount: Object.keys(this._store).length\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t}\n\n\t/**\n\t * Set the blob.\n\t * @param blob The data for the blob.\n\t * @returns The id of the stored blob in urn format.\n\t */\n\tpublic async set(blob: Uint8Array): Promise<string> {\n\t\tGuards.uint8Array(MemoryBlobStorageConnector.CLASS_NAME, nameof(blob), blob);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst id = Converter.bytesToHex(Sha256.sum256(blob));\n\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${id}`;\n\t\tthis._store[fullKey] = blob;\n\n\t\treturn `blob:${new Urn(MemoryBlobStorageConnector.NAMESPACE, id).toString()}`;\n\t}\n\n\t/**\n\t * Get the blob.\n\t * @param id The id of the blob to get in urn format.\n\t * @returns The data for the blob if it can be found or undefined.\n\t */\n\tpublic async get(id: string): Promise<Uint8Array | undefined> {\n\t\tUrn.guard(MemoryBlobStorageConnector.CLASS_NAME, nameof(id), id);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceMethod() !== MemoryBlobStorageConnector.NAMESPACE) {\n\t\t\tthrow new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: MemoryBlobStorageConnector.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst namespaceId = urnParsed.namespaceSpecific(1);\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${namespaceId}`;\n\t\treturn this._store[fullKey];\n\t}\n\n\t/**\n\t * Remove the blob.\n\t * @param id The id of the blob to remove in urn format.\n\t * @returns True if the blob was found.\n\t */\n\tpublic async remove(id: string): Promise<boolean> {\n\t\tUrn.guard(MemoryBlobStorageConnector.CLASS_NAME, nameof(id), id);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst partitionKey = ContextIdHelper.combinedContextKey(contextIds, this._partitionContextIds);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceMethod() !== MemoryBlobStorageConnector.NAMESPACE) {\n\t\t\tthrow new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: MemoryBlobStorageConnector.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst namespaceId = urnParsed.namespaceSpecific(1);\n\t\tconst fullKey = `${partitionKey ?? \"root\"}/${namespaceId}`;\n\t\tif (this._store[fullKey]) {\n\t\t\tdelete this._store[fullKey];\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Teardown the component and remove any resources it created.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t * @returns True if the teardown process was successful.\n\t */\n\tpublic async teardown(nodeLoggingComponentType?: string): Promise<boolean> {\n\t\tconst nodeLogging = ComponentFactory.getIfExists<ILoggingComponent>(nodeLoggingComponentType);\n\n\t\tawait nodeLogging?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: MemoryBlobStorageConnector.CLASS_NAME,\n\t\t\tmessage: \"storeTearingDown\"\n\t\t});\n\n\t\tfor (const key of Object.keys(this._store)) {\n\t\t\tdelete this._store[key];\n\t\t}\n\n\t\tawait nodeLogging?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: MemoryBlobStorageConnector.CLASS_NAME,\n\t\t\tmessage: \"storeTornDown\"\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Remove all blobs from the storage.\n\t * @returns Nothing.\n\t */\n\tpublic async empty(): Promise<void> {\n\t\ttry {\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\tconst partitionKey = ContextIdHelper.combinedContextKey(\n\t\t\t\tcontextIds,\n\t\t\t\tthis._partitionContextIds\n\t\t\t);\n\t\t\tconst prefix = `${partitionKey ?? \"root\"}/`;\n\t\t\tfor (const key of Object.keys(this._store)) {\n\t\t\t\tif (key.startsWith(prefix)) {\n\t\t\t\t\tdelete this._store[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthrow new GeneralError(MemoryBlobStorageConnector.CLASS_NAME, \"emptyFailed\", undefined, err);\n\t\t}\n\t}\n\n\t/**\n\t * Get the memory store.\n\t * @returns The store.\n\t */\n\tpublic getStore(): { [id: string]: Uint8Array } {\n\t\treturn this._store;\n\t}\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { IBlobStorageConnector } from "@twin.org/blob-storage-models";
2
+ import { type IHealth } from "@twin.org/core";
2
3
  import type { IMemoryStorageConnectorConstructorOptions } from "./models/IMemoryStorageConnectorConstructorOptions.js";
3
4
  /**
4
5
  * Class for performing blob storage operations in-memory.
@@ -22,6 +23,11 @@ export declare class MemoryBlobStorageConnector implements IBlobStorageConnector
22
23
  * @returns The class name of the component.
23
24
  */
24
25
  className(): string;
26
+ /**
27
+ * Returns the health status of the component.
28
+ * @returns The health status of the component.
29
+ */
30
+ health(): Promise<IHealth[]>;
25
31
  /**
26
32
  * Set the blob.
27
33
  * @param blob The data for the blob.
@@ -40,6 +46,17 @@ export declare class MemoryBlobStorageConnector implements IBlobStorageConnector
40
46
  * @returns True if the blob was found.
41
47
  */
42
48
  remove(id: string): Promise<boolean>;
49
+ /**
50
+ * Teardown the component and remove any resources it created.
51
+ * @param nodeLoggingComponentType The node logging component type.
52
+ * @returns True if the teardown process was successful.
53
+ */
54
+ teardown(nodeLoggingComponentType?: string): Promise<boolean>;
55
+ /**
56
+ * Remove all blobs from the storage.
57
+ * @returns Nothing.
58
+ */
59
+ empty(): Promise<void>;
43
60
  /**
44
61
  * Get the memory store.
45
62
  * @returns The store.
package/docs/changelog.md CHANGED
@@ -1,16 +1,162 @@
1
- # @twin.org/blob-storage-connector-memory - Changelog
1
+ # Changelog
2
2
 
3
- ## [0.0.3-next.1](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.0...blob-storage-connector-memory-v0.0.3-next.1) (2025-11-11)
3
+ ## [0.0.3-next.11](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.10...blob-storage-connector-memory-v0.0.3-next.11) (2026-05-08)
4
4
 
5
5
 
6
6
  ### Features
7
7
 
8
- * add context id features ([#30](https://github.com/twinfoundation/blob-storage/issues/30)) ([fbf1c92](https://github.com/twinfoundation/blob-storage/commit/fbf1c9276424c841ef5ef3f4de8469ab3fba7e9c))
9
- * add validate-locales ([f20fcec](https://github.com/twinfoundation/blob-storage/commit/f20fceced91e39a0c9edb770b2e43ce944c92f3c))
10
- * eslint migration to flat config ([e4239dd](https://github.com/twinfoundation/blob-storage/commit/e4239dd1c721955cff7f0357255d2bba15319972))
11
- * update dependencies ([56f0094](https://github.com/twinfoundation/blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
12
- * update framework core ([ff339fe](https://github.com/twinfoundation/blob-storage/commit/ff339fe7e3f09ddff429907834bdf43617e9c05e))
13
- * use shared store mechanism ([#12](https://github.com/twinfoundation/blob-storage/issues/12)) ([cae8110](https://github.com/twinfoundation/blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
8
+ * add empty and teardown methods ([#49](https://github.com/iotaledger/twin-blob-storage/issues/49)) ([cec6248](https://github.com/iotaledger/twin-blob-storage/commit/cec624809ffd2f2baa4b7b8cbf72a7247b8703ed))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.10 to 0.0.3-next.11
16
+
17
+ ## [0.0.3-next.10](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.9...blob-storage-connector-memory-v0.0.3-next.10) (2026-05-07)
18
+
19
+
20
+ ### Features
21
+
22
+ * additional information in health ([1ef83be](https://github.com/iotaledger/twin-blob-storage/commit/1ef83bef81148489b7950d5131a2af5121910e99))
23
+
24
+
25
+ ### Dependencies
26
+
27
+ * The following workspace dependencies were updated
28
+ * dependencies
29
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.9 to 0.0.3-next.10
30
+
31
+ ## [0.0.3-next.9](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.8...blob-storage-connector-memory-v0.0.3-next.9) (2026-05-07)
32
+
33
+
34
+ ### Features
35
+
36
+ * add context id features ([#30](https://github.com/iotaledger/twin-blob-storage/issues/30)) ([fbf1c92](https://github.com/iotaledger/twin-blob-storage/commit/fbf1c9276424c841ef5ef3f4de8469ab3fba7e9c))
37
+ * add validate-locales ([f20fcec](https://github.com/iotaledger/twin-blob-storage/commit/f20fceced91e39a0c9edb770b2e43ce944c92f3c))
38
+ * eslint migration to flat config ([e4239dd](https://github.com/iotaledger/twin-blob-storage/commit/e4239dd1c721955cff7f0357255d2bba15319972))
39
+ * health checks ([#44](https://github.com/iotaledger/twin-blob-storage/issues/44)) ([4a4041c](https://github.com/iotaledger/twin-blob-storage/commit/4a4041c19b68c40ed1aba6d1cdb4318ac4208b7d))
40
+ * update dependencies ([56f0094](https://github.com/iotaledger/twin-blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
41
+ * update framework core ([ff339fe](https://github.com/iotaledger/twin-blob-storage/commit/ff339fe7e3f09ddff429907834bdf43617e9c05e))
42
+ * use shared store mechanism ([#12](https://github.com/iotaledger/twin-blob-storage/issues/12)) ([cae8110](https://github.com/iotaledger/twin-blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
43
+
44
+
45
+ ### Dependencies
46
+
47
+ * The following workspace dependencies were updated
48
+ * dependencies
49
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.8 to 0.0.3-next.9
50
+
51
+ ## [0.0.3-next.8](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.7...blob-storage-connector-memory-v0.0.3-next.8) (2026-05-07)
52
+
53
+
54
+ ### Features
55
+
56
+ * health checks ([#44](https://github.com/iotaledger/twin-blob-storage/issues/44)) ([4a4041c](https://github.com/iotaledger/twin-blob-storage/commit/4a4041c19b68c40ed1aba6d1cdb4318ac4208b7d))
57
+
58
+
59
+ ### Dependencies
60
+
61
+ * The following workspace dependencies were updated
62
+ * dependencies
63
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.7 to 0.0.3-next.8
64
+
65
+ ## [0.0.3-next.7](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.6...blob-storage-connector-memory-v0.0.3-next.7) (2026-02-25)
66
+
67
+
68
+ ### Miscellaneous Chores
69
+
70
+ * **blob-storage-connector-memory:** Synchronize repo versions
71
+
72
+
73
+ ### Dependencies
74
+
75
+ * The following workspace dependencies were updated
76
+ * dependencies
77
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.6 to 0.0.3-next.7
78
+
79
+ ## [0.0.3-next.6](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.5...blob-storage-connector-memory-v0.0.3-next.6) (2026-02-09)
80
+
81
+
82
+ ### Miscellaneous Chores
83
+
84
+ * **blob-storage-connector-memory:** Synchronize repo versions
85
+
86
+
87
+ ### Dependencies
88
+
89
+ * The following workspace dependencies were updated
90
+ * dependencies
91
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.5 to 0.0.3-next.6
92
+
93
+ ## [0.0.3-next.5](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.4...blob-storage-connector-memory-v0.0.3-next.5) (2026-01-26)
94
+
95
+
96
+ ### Miscellaneous Chores
97
+
98
+ * **blob-storage-connector-memory:** Synchronize repo versions
99
+
100
+
101
+ ### Dependencies
102
+
103
+ * The following workspace dependencies were updated
104
+ * dependencies
105
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.4 to 0.0.3-next.5
106
+
107
+ ## [0.0.3-next.4](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.3...blob-storage-connector-memory-v0.0.3-next.4) (2026-01-23)
108
+
109
+
110
+ ### Miscellaneous Chores
111
+
112
+ * **blob-storage-connector-memory:** Synchronize repo versions
113
+
114
+
115
+ ### Dependencies
116
+
117
+ * The following workspace dependencies were updated
118
+ * dependencies
119
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.3 to 0.0.3-next.4
120
+
121
+ ## [0.0.3-next.3](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.2...blob-storage-connector-memory-v0.0.3-next.3) (2026-01-21)
122
+
123
+
124
+ ### Miscellaneous Chores
125
+
126
+ * **blob-storage-connector-memory:** Synchronize repo versions
127
+
128
+
129
+ ### Dependencies
130
+
131
+ * The following workspace dependencies were updated
132
+ * dependencies
133
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.2 to 0.0.3-next.3
134
+
135
+ ## [0.0.3-next.2](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.1...blob-storage-connector-memory-v0.0.3-next.2) (2026-01-14)
136
+
137
+
138
+ ### Miscellaneous Chores
139
+
140
+ * **blob-storage-connector-memory:** Synchronize repo versions
141
+
142
+
143
+ ### Dependencies
144
+
145
+ * The following workspace dependencies were updated
146
+ * dependencies
147
+ * @twin.org/blob-storage-models bumped from 0.0.3-next.1 to 0.0.3-next.2
148
+
149
+ ## [0.0.3-next.1](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.3-next.0...blob-storage-connector-memory-v0.0.3-next.1) (2025-11-11)
150
+
151
+
152
+ ### Features
153
+
154
+ * add context id features ([#30](https://github.com/iotaledger/twin-blob-storage/issues/30)) ([fbf1c92](https://github.com/iotaledger/twin-blob-storage/commit/fbf1c9276424c841ef5ef3f4de8469ab3fba7e9c))
155
+ * add validate-locales ([f20fcec](https://github.com/iotaledger/twin-blob-storage/commit/f20fceced91e39a0c9edb770b2e43ce944c92f3c))
156
+ * eslint migration to flat config ([e4239dd](https://github.com/iotaledger/twin-blob-storage/commit/e4239dd1c721955cff7f0357255d2bba15319972))
157
+ * update dependencies ([56f0094](https://github.com/iotaledger/twin-blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
158
+ * update framework core ([ff339fe](https://github.com/iotaledger/twin-blob-storage/commit/ff339fe7e3f09ddff429907834bdf43617e9c05e))
159
+ * use shared store mechanism ([#12](https://github.com/iotaledger/twin-blob-storage/issues/12)) ([cae8110](https://github.com/iotaledger/twin-blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
14
160
 
15
161
 
16
162
  ### Dependencies
@@ -19,12 +165,12 @@
19
165
  * dependencies
20
166
  * @twin.org/blob-storage-models bumped from 0.0.3-next.0 to 0.0.3-next.1
21
167
 
22
- ## [0.0.2-next.5](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.4...blob-storage-connector-memory-v0.0.2-next.5) (2025-10-09)
168
+ ## [0.0.2-next.5](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.4...blob-storage-connector-memory-v0.0.2-next.5) (2025-10-09)
23
169
 
24
170
 
25
171
  ### Features
26
172
 
27
- * add validate-locales ([f20fcec](https://github.com/twinfoundation/blob-storage/commit/f20fceced91e39a0c9edb770b2e43ce944c92f3c))
173
+ * add validate-locales ([f20fcec](https://github.com/iotaledger/twin-blob-storage/commit/f20fceced91e39a0c9edb770b2e43ce944c92f3c))
28
174
 
29
175
 
30
176
  ### Dependencies
@@ -33,7 +179,7 @@
33
179
  * dependencies
34
180
  * @twin.org/blob-storage-models bumped from 0.0.2-next.4 to 0.0.2-next.5
35
181
 
36
- ## [0.0.2-next.4](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.3...blob-storage-connector-memory-v0.0.2-next.4) (2025-10-02)
182
+ ## [0.0.2-next.4](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.3...blob-storage-connector-memory-v0.0.2-next.4) (2025-10-02)
37
183
 
38
184
 
39
185
  ### Miscellaneous Chores
@@ -47,12 +193,12 @@
47
193
  * dependencies
48
194
  * @twin.org/blob-storage-models bumped from 0.0.2-next.3 to 0.0.2-next.4
49
195
 
50
- ## [0.0.2-next.3](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.2...blob-storage-connector-memory-v0.0.2-next.3) (2025-08-29)
196
+ ## [0.0.2-next.3](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.2...blob-storage-connector-memory-v0.0.2-next.3) (2025-08-29)
51
197
 
52
198
 
53
199
  ### Features
54
200
 
55
- * eslint migration to flat config ([e4239dd](https://github.com/twinfoundation/blob-storage/commit/e4239dd1c721955cff7f0357255d2bba15319972))
201
+ * eslint migration to flat config ([e4239dd](https://github.com/iotaledger/twin-blob-storage/commit/e4239dd1c721955cff7f0357255d2bba15319972))
56
202
 
57
203
 
58
204
  ### Dependencies
@@ -61,12 +207,12 @@
61
207
  * dependencies
62
208
  * @twin.org/blob-storage-models bumped from 0.0.2-next.2 to 0.0.2-next.3
63
209
 
64
- ## [0.0.2-next.2](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.1...blob-storage-connector-memory-v0.0.2-next.2) (2025-08-20)
210
+ ## [0.0.2-next.2](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.1...blob-storage-connector-memory-v0.0.2-next.2) (2025-08-20)
65
211
 
66
212
 
67
213
  ### Features
68
214
 
69
- * update framework core ([ff339fe](https://github.com/twinfoundation/blob-storage/commit/ff339fe7e3f09ddff429907834bdf43617e9c05e))
215
+ * update framework core ([ff339fe](https://github.com/iotaledger/twin-blob-storage/commit/ff339fe7e3f09ddff429907834bdf43617e9c05e))
70
216
 
71
217
 
72
218
  ### Dependencies
@@ -75,13 +221,13 @@
75
221
  * dependencies
76
222
  * @twin.org/blob-storage-models bumped from 0.0.2-next.1 to 0.0.2-next.2
77
223
 
78
- ## [0.0.2-next.1](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.0...blob-storage-connector-memory-v0.0.2-next.1) (2025-07-24)
224
+ ## [0.0.2-next.1](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.2-next.0...blob-storage-connector-memory-v0.0.2-next.1) (2025-07-24)
79
225
 
80
226
 
81
227
  ### Features
82
228
 
83
- * update dependencies ([56f0094](https://github.com/twinfoundation/blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
84
- * use shared store mechanism ([#12](https://github.com/twinfoundation/blob-storage/issues/12)) ([cae8110](https://github.com/twinfoundation/blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
229
+ * update dependencies ([56f0094](https://github.com/iotaledger/twin-blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
230
+ * use shared store mechanism ([#12](https://github.com/iotaledger/twin-blob-storage/issues/12)) ([cae8110](https://github.com/iotaledger/twin-blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
85
231
 
86
232
 
87
233
  ### Dependencies
@@ -95,7 +241,7 @@
95
241
 
96
242
  ### Features
97
243
 
98
- * release to production ([eacfe75](https://github.com/twinfoundation/blob-storage/commit/eacfe754a0dcd9243d9e13d86422327d0a605164))
244
+ * release to production ([eacfe75](https://github.com/iotaledger/twin-blob-storage/commit/eacfe754a0dcd9243d9e13d86422327d0a605164))
99
245
 
100
246
 
101
247
  ### Dependencies
@@ -104,7 +250,7 @@
104
250
  * dependencies
105
251
  * @twin.org/blob-storage-models bumped from ^0.0.0 to ^0.0.1
106
252
 
107
- ## [0.0.1-next.37](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.36...blob-storage-connector-memory-v0.0.1-next.37) (2025-06-20)
253
+ ## [0.0.1-next.37](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.36...blob-storage-connector-memory-v0.0.1-next.37) (2025-06-20)
108
254
 
109
255
 
110
256
  ### Miscellaneous Chores
@@ -118,7 +264,7 @@
118
264
  * dependencies
119
265
  * @twin.org/blob-storage-models bumped from 0.0.1-next.36 to 0.0.1-next.37
120
266
 
121
- ## [0.0.1-next.36](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.35...blob-storage-connector-memory-v0.0.1-next.36) (2025-06-19)
267
+ ## [0.0.1-next.36](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.35...blob-storage-connector-memory-v0.0.1-next.36) (2025-06-19)
122
268
 
123
269
 
124
270
  ### Miscellaneous Chores
@@ -132,7 +278,7 @@
132
278
  * dependencies
133
279
  * @twin.org/blob-storage-models bumped from 0.0.1-next.35 to 0.0.1-next.36
134
280
 
135
- ## [0.0.1-next.35](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.34...blob-storage-connector-memory-v0.0.1-next.35) (2025-06-17)
281
+ ## [0.0.1-next.35](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.34...blob-storage-connector-memory-v0.0.1-next.35) (2025-06-17)
136
282
 
137
283
 
138
284
  ### Miscellaneous Chores
@@ -146,12 +292,12 @@
146
292
  * dependencies
147
293
  * @twin.org/blob-storage-models bumped from 0.0.1-next.34 to 0.0.1-next.35
148
294
 
149
- ## [0.0.1-next.34](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.33...blob-storage-connector-memory-v0.0.1-next.34) (2025-06-12)
295
+ ## [0.0.1-next.34](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.33...blob-storage-connector-memory-v0.0.1-next.34) (2025-06-12)
150
296
 
151
297
 
152
298
  ### Features
153
299
 
154
- * update dependencies ([56f0094](https://github.com/twinfoundation/blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
300
+ * update dependencies ([56f0094](https://github.com/iotaledger/twin-blob-storage/commit/56f0094b68d8bd22864cd899ac1b61d95540f719))
155
301
 
156
302
 
157
303
  ### Dependencies
@@ -160,7 +306,7 @@
160
306
  * dependencies
161
307
  * @twin.org/blob-storage-models bumped from 0.0.1-next.33 to 0.0.1-next.34
162
308
 
163
- ## [0.0.1-next.33](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.32...blob-storage-connector-memory-v0.0.1-next.33) (2025-06-03)
309
+ ## [0.0.1-next.33](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.32...blob-storage-connector-memory-v0.0.1-next.33) (2025-06-03)
164
310
 
165
311
 
166
312
  ### Miscellaneous Chores
@@ -174,7 +320,7 @@
174
320
  * dependencies
175
321
  * @twin.org/blob-storage-models bumped from 0.0.1-next.32 to 0.0.1-next.33
176
322
 
177
- ## [0.0.1-next.32](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.31...blob-storage-connector-memory-v0.0.1-next.32) (2025-05-28)
323
+ ## [0.0.1-next.32](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.31...blob-storage-connector-memory-v0.0.1-next.32) (2025-05-28)
178
324
 
179
325
 
180
326
  ### Miscellaneous Chores
@@ -188,7 +334,7 @@
188
334
  * dependencies
189
335
  * @twin.org/blob-storage-models bumped from 0.0.1-next.31 to 0.0.1-next.32
190
336
 
191
- ## [0.0.1-next.31](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.30...blob-storage-connector-memory-v0.0.1-next.31) (2025-05-08)
337
+ ## [0.0.1-next.31](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.30...blob-storage-connector-memory-v0.0.1-next.31) (2025-05-08)
192
338
 
193
339
 
194
340
  ### Miscellaneous Chores
@@ -202,12 +348,12 @@
202
348
  * dependencies
203
349
  * @twin.org/blob-storage-models bumped from 0.0.1-next.30 to 0.0.1-next.31
204
350
 
205
- ## [0.0.1-next.30](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.29...blob-storage-connector-memory-v0.0.1-next.30) (2025-04-17)
351
+ ## [0.0.1-next.30](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.29...blob-storage-connector-memory-v0.0.1-next.30) (2025-04-17)
206
352
 
207
353
 
208
354
  ### Features
209
355
 
210
- * use shared store mechanism ([#12](https://github.com/twinfoundation/blob-storage/issues/12)) ([cae8110](https://github.com/twinfoundation/blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
356
+ * use shared store mechanism ([#12](https://github.com/iotaledger/twin-blob-storage/issues/12)) ([cae8110](https://github.com/iotaledger/twin-blob-storage/commit/cae8110681847a1ac4fcac968b8196694e49c320))
211
357
 
212
358
 
213
359
  ### Dependencies
@@ -216,7 +362,7 @@
216
362
  * dependencies
217
363
  * @twin.org/blob-storage-models bumped from 0.0.1-next.29 to 0.0.1-next.30
218
364
 
219
- ## [0.0.1-next.29](https://github.com/twinfoundation/blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.28...blob-storage-connector-memory-v0.0.1-next.29) (2025-03-28)
365
+ ## [0.0.1-next.29](https://github.com/iotaledger/twin-blob-storage/compare/blob-storage-connector-memory-v0.0.1-next.28...blob-storage-connector-memory-v0.0.1-next.29) (2025-03-28)
220
366
 
221
367
 
222
368
  ### Miscellaneous Chores
package/docs/examples.md CHANGED
@@ -1 +1,35 @@
1
- # @twin.org/blob-storage-connector-memory - Examples
1
+ # Memory Connector Examples
2
+
3
+ Use these snippets to test fast in-memory blob workflows where you want deterministic behaviour without external dependencies.
4
+
5
+ ## MemoryBlobStorageConnector
6
+
7
+ ```typescript
8
+ import { MemoryBlobStorageConnector } from '@twin.org/blob-storage-connector-memory';
9
+
10
+ const connector = new MemoryBlobStorageConnector({
11
+ partitionContextIds: ['tenant', 'environment']
12
+ });
13
+
14
+ console.log(connector.className()); // MemoryBlobStorageConnector
15
+ ```
16
+
17
+ ```typescript
18
+ import { Converter } from '@twin.org/core';
19
+ import { MemoryBlobStorageConnector } from '@twin.org/blob-storage-connector-memory';
20
+
21
+ const connector = new MemoryBlobStorageConnector();
22
+
23
+ const blobData = Converter.utf8ToBytes('Memory payload');
24
+ const blobId = await connector.set(blobData);
25
+ console.log(blobId); // blob:urn:blob:memory:...
26
+
27
+ const storedBlob = await connector.get(blobId);
28
+ console.log(storedBlob?.length); // 14
29
+
30
+ const currentStore = connector.getStore();
31
+ console.log(Object.keys(currentStore).length); // 1
32
+
33
+ const removed = await connector.remove(blobId);
34
+ console.log(removed); // true
35
+ ```
@@ -28,7 +28,7 @@ The options for the connector.
28
28
 
29
29
  ## Properties
30
30
 
31
- ### NAMESPACE
31
+ ### NAMESPACE {#namespace}
32
32
 
33
33
  > `readonly` `static` **NAMESPACE**: `string` = `"memory"`
34
34
 
@@ -36,7 +36,7 @@ The namespace for the items.
36
36
 
37
37
  ***
38
38
 
39
- ### CLASS\_NAME
39
+ ### CLASS\_NAME {#class_name}
40
40
 
41
41
  > `readonly` `static` **CLASS\_NAME**: `string`
42
42
 
@@ -44,7 +44,7 @@ Runtime name for the class.
44
44
 
45
45
  ## Methods
46
46
 
47
- ### className()
47
+ ### className() {#classname}
48
48
 
49
49
  > **className**(): `string`
50
50
 
@@ -62,7 +62,25 @@ The class name of the component.
62
62
 
63
63
  ***
64
64
 
65
- ### set()
65
+ ### health() {#health}
66
+
67
+ > **health**(): `Promise`\<`IHealth`[]\>
68
+
69
+ Returns the health status of the component.
70
+
71
+ #### Returns
72
+
73
+ `Promise`\<`IHealth`[]\>
74
+
75
+ The health status of the component.
76
+
77
+ #### Implementation of
78
+
79
+ `IBlobStorageConnector.health`
80
+
81
+ ***
82
+
83
+ ### set() {#set}
66
84
 
67
85
  > **set**(`blob`): `Promise`\<`string`\>
68
86
 
@@ -88,7 +106,7 @@ The id of the stored blob in urn format.
88
106
 
89
107
  ***
90
108
 
91
- ### get()
109
+ ### get() {#get}
92
110
 
93
111
  > **get**(`id`): `Promise`\<`Uint8Array`\<`ArrayBufferLike`\> \| `undefined`\>
94
112
 
@@ -114,7 +132,7 @@ The data for the blob if it can be found or undefined.
114
132
 
115
133
  ***
116
134
 
117
- ### remove()
135
+ ### remove() {#remove}
118
136
 
119
137
  > **remove**(`id`): `Promise`\<`boolean`\>
120
138
 
@@ -140,7 +158,51 @@ True if the blob was found.
140
158
 
141
159
  ***
142
160
 
143
- ### getStore()
161
+ ### teardown() {#teardown}
162
+
163
+ > **teardown**(`nodeLoggingComponentType?`): `Promise`\<`boolean`\>
164
+
165
+ Teardown the component and remove any resources it created.
166
+
167
+ #### Parameters
168
+
169
+ ##### nodeLoggingComponentType?
170
+
171
+ `string`
172
+
173
+ The node logging component type.
174
+
175
+ #### Returns
176
+
177
+ `Promise`\<`boolean`\>
178
+
179
+ True if the teardown process was successful.
180
+
181
+ #### Implementation of
182
+
183
+ `IBlobStorageConnector.teardown`
184
+
185
+ ***
186
+
187
+ ### empty() {#empty}
188
+
189
+ > **empty**(): `Promise`\<`void`\>
190
+
191
+ Remove all blobs from the storage.
192
+
193
+ #### Returns
194
+
195
+ `Promise`\<`void`\>
196
+
197
+ Nothing.
198
+
199
+ #### Implementation of
200
+
201
+ `IBlobStorageConnector.empty`
202
+
203
+ ***
204
+
205
+ ### getStore() {#getstore}
144
206
 
145
207
  > **getStore**(): `object`
146
208
 
@@ -4,8 +4,8 @@ Options for the Memory Blob Storage Connector constructor.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### partitionContextIds?
7
+ ### partitionContextIds? {#partitioncontextids}
8
8
 
9
- > `optional` **partitionContextIds**: `string`[]
9
+ > `optional` **partitionContextIds?**: `string`[]
10
10
 
11
11
  The keys to use from the context ids to create partitions.
package/locales/en.json CHANGED
@@ -1,7 +1,19 @@
1
1
  {
2
+ "info": {
3
+ "memoryBlobStorageConnector": {
4
+ "storeTearingDown": "Tearing down memory blob storage",
5
+ "storeTornDown": "Memory blob storage torn down"
6
+ }
7
+ },
8
+ "health": {
9
+ "memoryBlobStorageConnector": {
10
+ "healthDescription": "Memory blob storage connector is healthy, storing \"{storedItemCount}\" items"
11
+ }
12
+ },
2
13
  "error": {
3
14
  "memoryBlobStorageConnector": {
4
- "namespaceMismatch": "The namespace in the urn \"{id}\" does not match the namespace of the blob storage \"{namespace}\""
15
+ "namespaceMismatch": "The namespace in the urn \"{id}\" does not match the namespace of the blob storage \"{namespace}\"",
16
+ "emptyFailed": "Failed to empty memory blob storage"
5
17
  }
6
18
  }
7
19
  }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@twin.org/blob-storage-connector-memory",
3
- "version": "0.0.3-next.1",
4
- "description": "Blob Storage connector implementation using in-memory storage",
3
+ "version": "0.0.3-next.11",
4
+ "description": "Provides an in-memory connector for fast local testing and ephemeral blob workflows.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/twinfoundation/blob-storage.git",
7
+ "url": "git+https://github.com/iotaledger/blob-storage.git",
8
8
  "directory": "packages/blob-storage-connector-memory"
9
9
  },
10
10
  "author": "martyn.janes@iota.org",
@@ -14,10 +14,11 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/blob-storage-models": "0.0.3-next.1",
17
+ "@twin.org/blob-storage-models": "0.0.3-next.11",
18
18
  "@twin.org/context": "next",
19
19
  "@twin.org/core": "next",
20
20
  "@twin.org/crypto": "next",
21
+ "@twin.org/logging-models": "next",
21
22
  "@twin.org/nameof": "next"
22
23
  },
23
24
  "main": "./dist/es/index.js",
@@ -55,7 +56,7 @@
55
56
  "testing"
56
57
  ],
57
58
  "bugs": {
58
- "url": "git+https://github.com/twinfoundation/blob-storage/issues"
59
+ "url": "git+https://github.com/iotaledger/blob-storage/issues"
59
60
  },
60
61
  "homepage": "https://twindev.org"
61
62
  }