@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.
- package/LICENSE +165 -0
- package/README.md +81 -0
- package/dist/cjs/FilesystemArchivist.d.ts +37 -0
- package/dist/cjs/FilesystemArchivist.d.ts.map +1 -0
- package/dist/cjs/FilesystemArchivist.js +95 -0
- package/dist/cjs/FilesystemArchivist.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/docs.json +7052 -0
- package/dist/esm/FilesystemArchivist.d.ts +37 -0
- package/dist/esm/FilesystemArchivist.d.ts.map +1 -0
- package/dist/esm/FilesystemArchivist.js +74 -0
- package/dist/esm/FilesystemArchivist.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/package.json +55 -0
- package/src/FilesystemArchivist.spec.ts +12 -0
- package/src/FilesystemArchivist.ts +111 -0
- package/src/index.ts +1 -0
- package/src/sample.archivist.xyo.json +16 -0
- package/typedoc.json +11 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
|
@@ -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'
|