@xyo-network/filesystem-archivist 2.41.8

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.
@@ -0,0 +1,37 @@
1
+ import { XyoArchivist, XyoArchivistConfig } from '@xyo-network/archivist';
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness';
3
+ import { XyoModuleParams } from '@xyo-network/module';
4
+ import { XyoPayload } from '@xyo-network/payload';
5
+ import { PromisableArray } from '@xyo-network/promise';
6
+ export interface FileSystemArchivistData {
7
+ payloads: XyoPayload[];
8
+ }
9
+ export type FilesystemArchivistConfigSchema = 'network.xyo.module.config.archivist.filesystem';
10
+ export declare const FilesystemArchivistConfigSchema: FilesystemArchivistConfigSchema;
11
+ export type FilesystemArchivistConfig = XyoArchivistConfig<{
12
+ filePath: string;
13
+ schema: FilesystemArchivistConfigSchema;
14
+ }>;
15
+ /** @description Currently only a read-only archivist that loads payloads from filesystem
16
+ * but allows for future expansion to read/write
17
+ */
18
+ export declare class FilesystemArchivist<TConfig extends FilesystemArchivistConfig = FilesystemArchivistConfig> extends XyoArchivist<TConfig> {
19
+ static configSchema: "network.xyo.module.config.archivist.filesystem";
20
+ private _memoryArchivist?;
21
+ protected constructor(params: XyoModuleParams<TConfig>);
22
+ get filePath(): string;
23
+ private get memoryArchivist();
24
+ static create(params?: XyoModuleParams<FilesystemArchivistConfig>): Promise<FilesystemArchivist>;
25
+ private static dataFromRawJson;
26
+ private static payloadsFromRawPayloads;
27
+ all(): PromisableArray<XyoPayload>;
28
+ clear(): void | Promise<void>;
29
+ commit(): Promise<XyoBoundWitness[]>;
30
+ delete(hashes: string[]): PromisableArray<boolean>;
31
+ get(hashes: string[]): Promise<XyoPayload[]>;
32
+ insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]>;
33
+ queries(): string[];
34
+ protected loadFromFile(): Promise<void>;
35
+ private rawJsonFromFile;
36
+ }
37
+ //# sourceMappingURL=FilesystemArchivist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilesystemArchivist.d.ts","sourceRoot":"","sources":["../../src/FilesystemArchivist.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EAGZ,kBAAkB,EAGnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAkB,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB;AAED,MAAM,MAAM,+BAA+B,GAAG,gDAAgD,CAAA;AAC9F,eAAO,MAAM,+BAA+B,EAAE,+BAAkF,CAAA;AAEhI,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,+BAA+B,CAAA;CACxC,CAAC,CAAA;AAEF;;GAEG;AACH,qBAAa,mBAAmB,CAAC,OAAO,SAAS,yBAAyB,GAAG,yBAAyB,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IACnI,OAAgB,YAAY,mDAAkC;IAE9D,OAAO,CAAC,gBAAgB,CAAC,CAAoB;IAE7C,SAAS,aAAa,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC;IAItD,IAAW,QAAQ,WAElB;IAED,OAAO,KAAK,eAAe,GAE1B;WAEqB,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM/G,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAKtB,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC;IAIlC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI1C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAIrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI5C,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIvD,OAAO;cAIP,YAAY;YAYd,eAAe;CAG9B"}
@@ -0,0 +1,74 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { assertEx } from '@xylabs/assert';
3
+ import { XyoArchivist, XyoArchivistAllQuerySchema, XyoArchivistCommitQuerySchema, XyoArchivistFindQuerySchema, XyoMemoryArchivist, } from '@xyo-network/archivist';
4
+ import { PayloadWrapper } from '@xyo-network/payload';
5
+ export const FilesystemArchivistConfigSchema = 'network.xyo.module.config.archivist.filesystem';
6
+ /** @description Currently only a read-only archivist that loads payloads from filesystem
7
+ * but allows for future expansion to read/write
8
+ */
9
+ export class FilesystemArchivist extends XyoArchivist {
10
+ static configSchema = FilesystemArchivistConfigSchema;
11
+ _memoryArchivist;
12
+ constructor(params) {
13
+ super(params);
14
+ }
15
+ get filePath() {
16
+ return this.config?.filePath ?? 'archivist.xyo.json';
17
+ }
18
+ get memoryArchivist() {
19
+ return assertEx(this._memoryArchivist);
20
+ }
21
+ static async create(params) {
22
+ const instance = (await super.create(params));
23
+ await instance.loadFromFile();
24
+ return instance;
25
+ }
26
+ static dataFromRawJson(rawJson) {
27
+ const data = JSON.parse(rawJson);
28
+ assertEx(typeof data === 'object', 'Archivist Data must be object');
29
+ assertEx(Array.isArray(data.payloads), 'Archivist Data "payloads" field must be array of payloads');
30
+ data.payloads = this.payloadsFromRawPayloads(data.payloads);
31
+ return data;
32
+ }
33
+ static payloadsFromRawPayloads(rawPayloads) {
34
+ //validation should be done in here. I don't believe parse does much validation yet.
35
+ return rawPayloads.map((payload) => PayloadWrapper.parse(payload).payload);
36
+ }
37
+ all() {
38
+ return this.memoryArchivist.all();
39
+ }
40
+ clear() {
41
+ return this.memoryArchivist.clear();
42
+ }
43
+ async commit() {
44
+ return await this.memoryArchivist.commit();
45
+ }
46
+ delete(hashes) {
47
+ return this.memoryArchivist.delete(hashes);
48
+ }
49
+ async get(hashes) {
50
+ return await this.memoryArchivist.get(hashes);
51
+ }
52
+ async insert(payloads) {
53
+ return await this.memoryArchivist.insert(payloads);
54
+ }
55
+ queries() {
56
+ return [XyoArchivistAllQuerySchema, XyoArchivistFindQuerySchema, XyoArchivistCommitQuerySchema, ...super.queries()];
57
+ }
58
+ async loadFromFile() {
59
+ this._memoryArchivist = await XyoMemoryArchivist.create();
60
+ try {
61
+ const data = FilesystemArchivist.dataFromRawJson(await this.rawJsonFromFile());
62
+ await this._memoryArchivist.insert(data.payloads);
63
+ }
64
+ catch (ex) {
65
+ const error = ex;
66
+ this.logger?.error(error.message);
67
+ throw ex;
68
+ }
69
+ }
70
+ async rawJsonFromFile() {
71
+ return await readFile(this.filePath, { encoding: 'utf8' });
72
+ }
73
+ }
74
+ //# sourceMappingURL=FilesystemArchivist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilesystemArchivist.js","sourceRoot":"","sources":["../../src/FilesystemArchivist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './FilesystemArchivist';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './FilesystemArchivist';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@xyo-network/filesystem-archivist",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xylabs/assert": "^2.6.9",
14
+ "@xyo-network/archivist": "^2.41.8",
15
+ "@xyo-network/boundwitness": "^2.41.8",
16
+ "@xyo-network/module": "^2.41.8",
17
+ "@xyo-network/payload": "^2.41.8",
18
+ "@xyo-network/promise": "^2.41.8",
19
+ "tslib": "^2.4.1"
20
+ },
21
+ "description": "Primary SDK for using XYO Protocol 2.0",
22
+ "browser": "dist/esm/index.js",
23
+ "docs": "dist/docs.json",
24
+ "exports": {
25
+ ".": {
26
+ "node": {
27
+ "import": "./dist/esm/index.js",
28
+ "require": "./dist/cjs/index.js"
29
+ },
30
+ "browser": {
31
+ "import": "./dist/esm/index.js",
32
+ "require": "./dist/cjs/index.js"
33
+ },
34
+ "default": "./dist/esm/index.js"
35
+ },
36
+ "./dist/docs.json": {
37
+ "default": "./dist/docs.json"
38
+ },
39
+ "./package.json": "./package.json"
40
+ },
41
+ "main": "dist/cjs/index.js",
42
+ "module": "dist/esm/index.js",
43
+ "homepage": "https://xyo.network",
44
+ "license": "LGPL-3.0-only",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
51
+ },
52
+ "sideEffects": false,
53
+ "types": "dist/esm/index.d.ts",
54
+ "version": "2.41.8"
55
+ }
@@ -0,0 +1,12 @@
1
+ import { FilesystemArchivist, FilesystemArchivistConfigSchema } from './FilesystemArchivist'
2
+
3
+ test('FilesystemArchivist Load', async () => {
4
+ const archivist = await FilesystemArchivist.create({
5
+ config: {
6
+ filePath: './packages/modules/packages/filesystem/packages/archivist/src/sample.archivist.xyo.json',
7
+ schema: FilesystemArchivistConfigSchema,
8
+ },
9
+ })
10
+ const all = await archivist.all()
11
+ expect(all.length).toBe(4)
12
+ })
@@ -0,0 +1,111 @@
1
+ import { readFile } from 'node:fs/promises'
2
+
3
+ import { assertEx } from '@xylabs/assert'
4
+ import {
5
+ XyoArchivist,
6
+ XyoArchivistAllQuerySchema,
7
+ XyoArchivistCommitQuerySchema,
8
+ XyoArchivistConfig,
9
+ XyoArchivistFindQuerySchema,
10
+ XyoMemoryArchivist,
11
+ } from '@xyo-network/archivist'
12
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
13
+ import { XyoModuleParams } from '@xyo-network/module'
14
+ import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
15
+ import { PromisableArray } from '@xyo-network/promise'
16
+
17
+ export interface FileSystemArchivistData {
18
+ payloads: XyoPayload[]
19
+ }
20
+
21
+ export type FilesystemArchivistConfigSchema = 'network.xyo.module.config.archivist.filesystem'
22
+ export const FilesystemArchivistConfigSchema: FilesystemArchivistConfigSchema = 'network.xyo.module.config.archivist.filesystem'
23
+
24
+ export type FilesystemArchivistConfig = XyoArchivistConfig<{
25
+ filePath: string
26
+ schema: FilesystemArchivistConfigSchema
27
+ }>
28
+
29
+ /** @description Currently only a read-only archivist that loads payloads from filesystem
30
+ * but allows for future expansion to read/write
31
+ */
32
+ export class FilesystemArchivist<TConfig extends FilesystemArchivistConfig = FilesystemArchivistConfig> extends XyoArchivist<TConfig> {
33
+ static override configSchema = FilesystemArchivistConfigSchema
34
+
35
+ private _memoryArchivist?: XyoMemoryArchivist
36
+
37
+ protected constructor(params: XyoModuleParams<TConfig>) {
38
+ super(params)
39
+ }
40
+
41
+ public get filePath() {
42
+ return this.config?.filePath ?? 'archivist.xyo.json'
43
+ }
44
+
45
+ private get memoryArchivist() {
46
+ return assertEx(this._memoryArchivist)
47
+ }
48
+
49
+ static override async create(params?: XyoModuleParams<FilesystemArchivistConfig>): Promise<FilesystemArchivist> {
50
+ const instance = (await super.create(params)) as FilesystemArchivist
51
+ await instance.loadFromFile()
52
+ return instance
53
+ }
54
+
55
+ private static dataFromRawJson(rawJson: string) {
56
+ const data: FileSystemArchivistData = JSON.parse(rawJson)
57
+ assertEx(typeof data === 'object', 'Archivist Data must be object')
58
+ assertEx(Array.isArray(data.payloads), 'Archivist Data "payloads" field must be array of payloads')
59
+ data.payloads = this.payloadsFromRawPayloads(data.payloads)
60
+ return data
61
+ }
62
+
63
+ private static payloadsFromRawPayloads(rawPayloads: XyoPayload[]) {
64
+ //validation should be done in here. I don't believe parse does much validation yet.
65
+ return rawPayloads.map((payload) => PayloadWrapper.parse(payload).payload)
66
+ }
67
+
68
+ public override all(): PromisableArray<XyoPayload> {
69
+ return this.memoryArchivist.all()
70
+ }
71
+
72
+ public override clear(): void | Promise<void> {
73
+ return this.memoryArchivist.clear()
74
+ }
75
+
76
+ public override async commit(): Promise<XyoBoundWitness[]> {
77
+ return await this.memoryArchivist.commit()
78
+ }
79
+
80
+ public override delete(hashes: string[]): PromisableArray<boolean> {
81
+ return this.memoryArchivist.delete(hashes)
82
+ }
83
+
84
+ public async get(hashes: string[]): Promise<XyoPayload[]> {
85
+ return await this.memoryArchivist.get(hashes)
86
+ }
87
+
88
+ public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
89
+ return await this.memoryArchivist.insert(payloads)
90
+ }
91
+
92
+ public override queries() {
93
+ return [XyoArchivistAllQuerySchema, XyoArchivistFindQuerySchema, XyoArchivistCommitQuerySchema, ...super.queries()]
94
+ }
95
+
96
+ protected async loadFromFile() {
97
+ this._memoryArchivist = await XyoMemoryArchivist.create()
98
+ try {
99
+ const data = FilesystemArchivist.dataFromRawJson(await this.rawJsonFromFile())
100
+ await this._memoryArchivist.insert(data.payloads)
101
+ } catch (ex) {
102
+ const error = ex as Error
103
+ this.logger?.error(error.message)
104
+ throw ex
105
+ }
106
+ }
107
+
108
+ private async rawJsonFromFile() {
109
+ return await readFile(this.filePath, { encoding: 'utf8' })
110
+ }
111
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './FilesystemArchivist'
@@ -0,0 +1,16 @@
1
+ {
2
+ "payloads": [
3
+ {
4
+ "schema": "network.xyo.test.1"
5
+ },
6
+ {
7
+ "schema": "network.xyo.test.2"
8
+ },
9
+ {
10
+ "schema": "network.xyo.test.3"
11
+ },
12
+ {
13
+ "schema": "network.xyo.test.4"
14
+ }
15
+ ]
16
+ }
package/typedoc.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "intentionallyNotExported": [
3
+ "WithXyoPayloadMeta",
4
+ "XyoPayload",
5
+ "XyoPayloadFull",
6
+ "XyoBoundWitness",
7
+ "XyoDataLike",
8
+ "Huri",
9
+ "XyoSchemaPayload"
10
+ ]
11
+ }