@xyo-network/file-browser-plugin 5.3.2 → 5.3.3

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,15 @@
1
+ import type { Schema } from '@xyo-network/payload-model';
2
+ import type { BrowserFileWitnessAdditionalParams } from './Params.ts';
3
+ import type { FilePayload } from './Payload.ts';
4
+ import type { FileWitnessParams } from './Witness.ts';
5
+ import { FileWitness } from './Witness.ts';
6
+ type BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams;
7
+ export declare class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {
8
+ static readonly configSchemas: Schema[];
9
+ static readonly defaultConfigSchema: Schema;
10
+ protected observeHandler(): Promise<FilePayload[]>;
11
+ private readBinaryFile;
12
+ private witnessBrowserFile;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=BrowserFileWitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserFileWitness.d.ts","sourceRoot":"","sources":["../../src/BrowserFileWitness.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAIxD,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,KAAK,wBAAwB,GAAG,iBAAiB,GAAG,kCAAkC,CAAA;AAEtF,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,wBAAwB,CAAC;IAC3E,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAoD;IACpG,gBAAyB,mBAAmB,EAAE,MAAM,CAA0B;cAErD,cAAc;IAWvC,OAAO,CAAC,cAAc;YAcR,kBAAkB;CAyBjC"}
@@ -0,0 +1,10 @@
1
+ import type { WitnessConfig } from '@xyo-network/witness-model';
2
+ export type FileWitnessConfigSchema = typeof FileWitnessConfigSchema;
3
+ export declare const FileWitnessConfigSchema: "network.xyo.file.witness.config" & {
4
+ readonly __schema: true;
5
+ };
6
+ export type FileWitnessConfig = WitnessConfig<{
7
+ schema: FileWitnessConfigSchema;
8
+ storage?: 'data-uri';
9
+ }>;
10
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAA;AACpE,eAAO,MAAM,uBAAuB;;CAAoD,CAAA;AAExF,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;IAC5C,MAAM,EAAE,uBAAuB,CAAA;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export type BrowserFileWitnessAdditionalParams = {
2
+ file?: File;
3
+ };
4
+ //# sourceMappingURL=Params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Params.d.ts","sourceRoot":"","sources":["../../src/Params.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { Payload } from '@xyo-network/payload-model';
2
+ import { FileSchema } from './Schema.ts';
3
+ export type BinaryDataHash = string;
4
+ /** @description File location and optional data */
5
+ export type FilePayload = Payload<{
6
+ created?: number;
7
+ hash: BinaryDataHash;
8
+ length: number;
9
+ /** @field Storage specific meta data */
10
+ meta?: Record<string, string | number>;
11
+ modified?: number;
12
+ uri: string;
13
+ }, FileSchema>;
14
+ export declare const isFilePayload: (x?: unknown | null) => x is FilePayload;
15
+ //# sourceMappingURL=Payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AAEnC,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B;IACE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;CACZ,EACD,UAAU,CACX,CAAA;AAED,eAAO,MAAM,aAAa,0CAAiD,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { BrowserFileWitness } from './BrowserFileWitness.ts';
2
+ export declare const BrowserFilePlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<BrowserFileWitness>;
3
+ //# sourceMappingURL=PluginBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginBrowser.d.ts","sourceRoot":"","sources":["../../src/PluginBrowser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAG5D,eAAO,MAAM,iBAAiB,4FAS3B,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type FileSchema = typeof FileSchema;
2
+ export declare const FileSchema: "network.xyo.file" & {
3
+ readonly __schema: true;
4
+ };
5
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAA;AAC1C,eAAO,MAAM,UAAU;;CAAqC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { Promisable } from '@xylabs/sdk-js';
2
+ import { AbstractWitness } from '@xyo-network/abstract-witness';
3
+ import type { AnyConfigSchema } from '@xyo-network/module-model';
4
+ import type { Payload, Schema } from '@xyo-network/payload-model';
5
+ import type { WitnessModule, WitnessParams } from '@xyo-network/witness-model';
6
+ import type { FileWitnessConfig } from './Config.ts';
7
+ export type FileWitnessParams = WitnessParams<AnyConfigSchema<FileWitnessConfig>>;
8
+ export declare abstract class FileWitness<TParams extends FileWitnessParams = FileWitnessParams> extends AbstractWitness<TParams> implements WitnessModule {
9
+ static readonly configSchemas: Schema[];
10
+ static readonly defaultConfigSchema: Schema;
11
+ protected observeHandler(payloads?: Payload[]): Promisable<Payload[]>;
12
+ }
13
+ //# sourceMappingURL=Witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAIpD,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAGjF,8BAAsB,WAAW,CAAC,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAE,YAAW,aAAa;IAChJ,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAoD;IACpG,gBAAyB,mBAAmB,EAAE,MAAM,CAA0B;cAE3D,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;CAG/E"}
@@ -0,0 +1,8 @@
1
+ export * from './BrowserFileWitness.ts';
2
+ export * from './Config.ts';
3
+ export * from './Params.ts';
4
+ export * from './Payload.ts';
5
+ export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser.ts';
6
+ export * from './Schema.ts';
7
+ export * from './Witness.ts';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACpF,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,103 @@
1
+ // src/BrowserFileWitness.ts
2
+ import { assertEx } from "@xylabs/sdk-js";
3
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
4
+
5
+ // src/Config.ts
6
+ import { asSchema } from "@xyo-network/payload-model";
7
+ var FileWitnessConfigSchema = asSchema("network.xyo.file.witness.config", true);
8
+
9
+ // src/Schema.ts
10
+ import { asSchema as asSchema2 } from "@xyo-network/payload-model";
11
+ var FileSchema = asSchema2("network.xyo.file", true);
12
+
13
+ // src/util/GenerateDataUri.ts
14
+ import { base64 } from "@scure/base";
15
+ var generateDataUri = (data) => {
16
+ return `data:application/octet-stream;base64,${base64.encode(data)}`;
17
+ };
18
+
19
+ // src/Witness.ts
20
+ import { AbstractWitness } from "@xyo-network/abstract-witness";
21
+ var FileWitness = class extends AbstractWitness {
22
+ static configSchemas = [...super.configSchemas, FileWitnessConfigSchema];
23
+ static defaultConfigSchema = FileWitnessConfigSchema;
24
+ observeHandler(payloads) {
25
+ return [{ ...payloads?.[0], schema: FileSchema }];
26
+ }
27
+ };
28
+
29
+ // src/BrowserFileWitness.ts
30
+ var BrowserFileWitness = class extends FileWitness {
31
+ static configSchemas = [...super.configSchemas, FileWitnessConfigSchema];
32
+ static defaultConfigSchema = FileWitnessConfigSchema;
33
+ async observeHandler() {
34
+ try {
35
+ const [payload] = await this.witnessBrowserFile();
36
+ const { logger } = this.params;
37
+ logger?.log(`BrowserFileWitness: ${await PayloadBuilder.dataHash(payload)}`);
38
+ return [payload];
39
+ } catch (e) {
40
+ throw new Error(`Error reading file: ${e}`);
41
+ }
42
+ }
43
+ readBinaryFile(file) {
44
+ return new Promise((resolve, reject) => {
45
+ const fileReader = new FileReader();
46
+ fileReader.addEventListener("load", (event) => {
47
+ const arrayBuffer = event.target?.result;
48
+ resolve(new Uint8Array(arrayBuffer));
49
+ });
50
+ fileReader.onerror = () => reject(fileReader.error);
51
+ fileReader.readAsArrayBuffer(file);
52
+ });
53
+ }
54
+ async witnessBrowserFile() {
55
+ const file = assertEx(this.params.file, () => "File is missing from params");
56
+ const fileBinary = await this.readBinaryFile(file);
57
+ const result = new Uint8Array(fileBinary);
58
+ const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", result);
59
+ const hashArray = [...new Uint8Array(hashBuffer)];
60
+ const hash = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
61
+ return [
62
+ {
63
+ hash,
64
+ length: fileBinary.byteLength,
65
+ meta: {
66
+ name: file.name,
67
+ type: file.type
68
+ },
69
+ modified: file.lastModified,
70
+ schema: FileSchema,
71
+ uri: this.config.storage === "data-uri" ? generateDataUri(fileBinary) : file.name
72
+ },
73
+ fileBinary
74
+ ];
75
+ }
76
+ };
77
+
78
+ // src/Payload.ts
79
+ import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
80
+ var isFilePayload = isPayloadOfSchemaType(FileSchema);
81
+
82
+ // src/PluginBrowser.ts
83
+ import { PayloadSetSchema } from "@xyo-network/payload-model";
84
+ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
85
+ var BrowserFilePlugin = () => createPayloadSetWitnessPlugin(
86
+ { required: { [FileSchema]: 1 }, schema: PayloadSetSchema },
87
+ {
88
+ witness: async (params) => {
89
+ const result = await BrowserFileWitness.create(params);
90
+ return result;
91
+ }
92
+ }
93
+ );
94
+ export {
95
+ BrowserFilePlugin,
96
+ BrowserFileWitness,
97
+ FileSchema,
98
+ FileWitness,
99
+ FileWitnessConfigSchema,
100
+ BrowserFilePlugin as default,
101
+ isFilePayload
102
+ };
103
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/BrowserFileWitness.ts","../../src/Config.ts","../../src/Schema.ts","../../src/util/GenerateDataUri.ts","../../src/Witness.ts","../../src/Payload.ts","../../src/PluginBrowser.ts"],"sourcesContent":["import { assertEx } from '@xylabs/sdk-js'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\n\nimport { FileWitnessConfigSchema } from './Config.ts'\nimport type { BrowserFileWitnessAdditionalParams } from './Params.ts'\nimport type { FilePayload } from './Payload.ts'\nimport { FileSchema } from './Schema.ts'\nimport { generateDataUri } from './util/index.ts'\nimport type { FileWitnessParams } from './Witness.ts'\nimport { FileWitness } from './Witness.ts'\n\ntype BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams\n\nexport class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, FileWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = FileWitnessConfigSchema\n\n protected override async observeHandler() {\n try {\n const [payload] = await this.witnessBrowserFile()\n const { logger } = this.params\n logger?.log(`BrowserFileWitness: ${await PayloadBuilder.dataHash(payload)}`)\n return [payload]\n } catch (e) {\n throw new Error(`Error reading file: ${e}`)\n }\n }\n\n private readBinaryFile(file: File): Promise<Uint8Array> {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader()\n fileReader.addEventListener('load', (event) => {\n const arrayBuffer = event.target?.result as ArrayBuffer\n resolve(new Uint8Array(arrayBuffer))\n })\n // eslint-disable-next-line unicorn/prefer-add-event-listener\n fileReader.onerror = () => reject(fileReader.error)\n // eslint-disable-next-line unicorn/prefer-blob-reading-methods\n fileReader.readAsArrayBuffer(file)\n })\n }\n\n private async witnessBrowserFile(): Promise<[FilePayload, Uint8Array]> {\n const file = assertEx(this.params.file, () => 'File is missing from params')\n const fileBinary = await this.readBinaryFile(file)\n const result = new Uint8Array(fileBinary)\n const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', result)\n\n // Convert ArrayBuffer to hex string\n const hashArray = [...new Uint8Array(hashBuffer)]\n const hash = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n\n return [\n {\n hash,\n length: fileBinary.byteLength,\n meta: {\n name: file.name,\n type: file.type,\n },\n modified: file.lastModified,\n schema: FileSchema,\n uri: this.config.storage === 'data-uri' ? generateDataUri(fileBinary) : file.name,\n },\n fileBinary,\n ]\n }\n}\n","import { asSchema } from '@xyo-network/payload-model'\nimport type { WitnessConfig } from '@xyo-network/witness-model'\n\nexport type FileWitnessConfigSchema = typeof FileWitnessConfigSchema\nexport const FileWitnessConfigSchema = asSchema('network.xyo.file.witness.config', true)\n\nexport type FileWitnessConfig = WitnessConfig<{\n schema: FileWitnessConfigSchema\n storage?: 'data-uri'\n}>\n","import { asSchema } from '@xyo-network/payload-model'\n\nexport type FileSchema = typeof FileSchema\nexport const FileSchema = asSchema('network.xyo.file', true)\n","import { base64 } from '@scure/base'\n\nexport const generateDataUri = (data: Uint8Array): string => {\n return `data:application/octet-stream;base64,${base64.encode(data)}`\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type { WitnessModule, WitnessParams } from '@xyo-network/witness-model'\n\nimport type { FileWitnessConfig } from './Config.ts'\nimport { FileWitnessConfigSchema } from './Config.ts'\nimport { FileSchema } from './Schema.ts'\n\nexport type FileWitnessParams = WitnessParams<AnyConfigSchema<FileWitnessConfig>>\n\n// Abstract so that derived classes provide a type for the file param and methods to parse it\nexport abstract class FileWitness<TParams extends FileWitnessParams = FileWitnessParams> extends AbstractWitness<TParams> implements WitnessModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, FileWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = FileWitnessConfigSchema\n\n protected override observeHandler(payloads?: Payload[]): Promisable<Payload[]> {\n return [{ ...payloads?.[0], schema: FileSchema }]\n }\n}\n","import type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { FileSchema } from './Schema.ts'\n\nexport type BinaryDataHash = string\n\n/** @description File location and optional data */\nexport type FilePayload = Payload<\n {\n created?: number\n hash: BinaryDataHash\n length: number\n /** @field Storage specific meta data */\n meta?: Record<string, string | number>\n modified?: number\n uri: string\n },\n FileSchema\n>\n\nexport const isFilePayload = isPayloadOfSchemaType<FilePayload>(FileSchema)\n","import { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { BrowserFileWitness } from './BrowserFileWitness.ts'\nimport { FileSchema } from './Schema.ts'\n\nexport const BrowserFilePlugin = () =>\n createPayloadSetWitnessPlugin<BrowserFileWitness>(\n { required: { [FileSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await BrowserFileWitness.create(params)\n return result\n },\n },\n )\n"],"mappings":";AAAA,SAAS,gBAAgB;AAEzB,SAAS,sBAAsB;;;ACF/B,SAAS,gBAAgB;AAIlB,IAAM,0BAA0B,SAAS,mCAAmC,IAAI;;;ACJvF,SAAS,YAAAA,iBAAgB;AAGlB,IAAM,aAAaA,UAAS,oBAAoB,IAAI;;;ACH3D,SAAS,cAAc;AAEhB,IAAM,kBAAkB,CAAC,SAA6B;AAC3D,SAAO,wCAAwC,OAAO,OAAO,IAAI,CAAC;AACpE;;;ACHA,SAAS,uBAAuB;AAYzB,IAAe,cAAf,cAA0F,gBAAkD;AAAA,EACjJ,OAAyB,gBAA0B,CAAC,GAAG,MAAM,eAAe,uBAAuB;AAAA,EACnG,OAAyB,sBAA8B;AAAA,EAEpC,eAAe,UAA6C;AAC7E,WAAO,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,QAAQ,WAAW,CAAC;AAAA,EAClD;AACF;;;AJNO,IAAM,qBAAN,cAAiC,YAAsC;AAAA,EAC5E,OAAyB,gBAA0B,CAAC,GAAG,MAAM,eAAe,uBAAuB;AAAA,EACnG,OAAyB,sBAA8B;AAAA,EAEvD,MAAyB,iBAAiB;AACxC,QAAI;AACF,YAAM,CAAC,OAAO,IAAI,MAAM,KAAK,mBAAmB;AAChD,YAAM,EAAE,OAAO,IAAI,KAAK;AACxB,cAAQ,IAAI,uBAAuB,MAAM,eAAe,SAAS,OAAO,CAAC,EAAE;AAC3E,aAAO,CAAC,OAAO;AAAA,IACjB,SAAS,GAAG;AACV,YAAM,IAAI,MAAM,uBAAuB,CAAC,EAAE;AAAA,IAC5C;AAAA,EACF;AAAA,EAEQ,eAAe,MAAiC;AACtD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,aAAa,IAAI,WAAW;AAClC,iBAAW,iBAAiB,QAAQ,CAAC,UAAU;AAC7C,cAAM,cAAc,MAAM,QAAQ;AAClC,gBAAQ,IAAI,WAAW,WAAW,CAAC;AAAA,MACrC,CAAC;AAED,iBAAW,UAAU,MAAM,OAAO,WAAW,KAAK;AAElD,iBAAW,kBAAkB,IAAI;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,qBAAyD;AACrE,UAAM,OAAO,SAAS,KAAK,OAAO,MAAM,MAAM,6BAA6B;AAC3E,UAAM,aAAa,MAAM,KAAK,eAAe,IAAI;AACjD,UAAM,SAAS,IAAI,WAAW,UAAU;AACxC,UAAM,aAAa,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,MAAM;AAG1E,UAAM,YAAY,CAAC,GAAG,IAAI,WAAW,UAAU,CAAC;AAChD,UAAM,OAAO,UAAU,IAAI,OAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAExE,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,MAAM;AAAA,UACJ,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,QACb;AAAA,QACA,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,QACR,KAAK,KAAK,OAAO,YAAY,aAAa,gBAAgB,UAAU,IAAI,KAAK;AAAA,MAC/E;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AKnEA,SAAS,6BAA6B;AAoB/B,IAAM,gBAAgB,sBAAmC,UAAU;;;ACrB1E,SAAS,wBAAwB;AACjC,SAAS,qCAAqC;AAKvC,IAAM,oBAAoB,MAC/B;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,UAAU,GAAG,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EAC1D;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,mBAAmB,OAAO,MAAM;AACrD,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["asSchema"]}
@@ -0,0 +1,2 @@
1
+ export declare const generateDataUri: (data: Uint8Array) => string;
2
+ //# sourceMappingURL=GenerateDataUri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateDataUri.d.ts","sourceRoot":"","sources":["../../../src/util/GenerateDataUri.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,GAAI,MAAM,UAAU,KAAG,MAElD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './GenerateDataUri.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/file-browser-plugin",
3
- "version": "5.3.2",
3
+ "version": "5.3.3",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -30,14 +30,12 @@
30
30
  "types": "dist/browser/index.d.ts",
31
31
  "files": [
32
32
  "dist",
33
- "src",
34
- "!**/*.bench.*",
35
- "!**/*.spec.*",
36
- "!**/*.test.*"
33
+ "README.md"
37
34
  ],
38
35
  "devDependencies": {
39
36
  "@scure/base": "~2.0.0",
40
37
  "@xylabs/sdk-js": "^5.0.90",
38
+ "@xylabs/ts-scripts-common": "~7.5.10",
41
39
  "@xylabs/ts-scripts-yarn3": "~7.5.10",
42
40
  "@xylabs/tsconfig": "~7.5.10",
43
41
  "@xylabs/vitest-extended": "~5.0.90",
@@ -52,7 +50,14 @@
52
50
  "zod": "^4.3.6"
53
51
  },
54
52
  "peerDependencies": {
53
+ "@scure/base": "^2",
55
54
  "@xylabs/sdk-js": "^5",
55
+ "@xyo-network/abstract-witness": "^5",
56
+ "@xyo-network/module-model": "^5",
57
+ "@xyo-network/payload-model": "^5",
58
+ "@xyo-network/payloadset-plugin": "^5",
59
+ "@xyo-network/sdk-js": "^5",
60
+ "@xyo-network/witness-model": "^5",
56
61
  "zod": "^4"
57
62
  },
58
63
  "publishConfig": {
@@ -1,69 +0,0 @@
1
- import { assertEx } from '@xylabs/sdk-js'
2
- import type { Schema } from '@xyo-network/payload-model'
3
- import { PayloadBuilder } from '@xyo-network/sdk-js'
4
-
5
- import { FileWitnessConfigSchema } from './Config.ts'
6
- import type { BrowserFileWitnessAdditionalParams } from './Params.ts'
7
- import type { FilePayload } from './Payload.ts'
8
- import { FileSchema } from './Schema.ts'
9
- import { generateDataUri } from './util/index.ts'
10
- import type { FileWitnessParams } from './Witness.ts'
11
- import { FileWitness } from './Witness.ts'
12
-
13
- type BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams
14
-
15
- export class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {
16
- static override readonly configSchemas: Schema[] = [...super.configSchemas, FileWitnessConfigSchema]
17
- static override readonly defaultConfigSchema: Schema = FileWitnessConfigSchema
18
-
19
- protected override async observeHandler() {
20
- try {
21
- const [payload] = await this.witnessBrowserFile()
22
- const { logger } = this.params
23
- logger?.log(`BrowserFileWitness: ${await PayloadBuilder.dataHash(payload)}`)
24
- return [payload]
25
- } catch (e) {
26
- throw new Error(`Error reading file: ${e}`)
27
- }
28
- }
29
-
30
- private readBinaryFile(file: File): Promise<Uint8Array> {
31
- return new Promise((resolve, reject) => {
32
- const fileReader = new FileReader()
33
- fileReader.addEventListener('load', (event) => {
34
- const arrayBuffer = event.target?.result as ArrayBuffer
35
- resolve(new Uint8Array(arrayBuffer))
36
- })
37
- // eslint-disable-next-line unicorn/prefer-add-event-listener
38
- fileReader.onerror = () => reject(fileReader.error)
39
- // eslint-disable-next-line unicorn/prefer-blob-reading-methods
40
- fileReader.readAsArrayBuffer(file)
41
- })
42
- }
43
-
44
- private async witnessBrowserFile(): Promise<[FilePayload, Uint8Array]> {
45
- const file = assertEx(this.params.file, () => 'File is missing from params')
46
- const fileBinary = await this.readBinaryFile(file)
47
- const result = new Uint8Array(fileBinary)
48
- const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', result)
49
-
50
- // Convert ArrayBuffer to hex string
51
- const hashArray = [...new Uint8Array(hashBuffer)]
52
- const hash = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
53
-
54
- return [
55
- {
56
- hash,
57
- length: fileBinary.byteLength,
58
- meta: {
59
- name: file.name,
60
- type: file.type,
61
- },
62
- modified: file.lastModified,
63
- schema: FileSchema,
64
- uri: this.config.storage === 'data-uri' ? generateDataUri(fileBinary) : file.name,
65
- },
66
- fileBinary,
67
- ]
68
- }
69
- }
package/src/Config.ts DELETED
@@ -1,10 +0,0 @@
1
- import { asSchema } from '@xyo-network/payload-model'
2
- import type { WitnessConfig } from '@xyo-network/witness-model'
3
-
4
- export type FileWitnessConfigSchema = typeof FileWitnessConfigSchema
5
- export const FileWitnessConfigSchema = asSchema('network.xyo.file.witness.config', true)
6
-
7
- export type FileWitnessConfig = WitnessConfig<{
8
- schema: FileWitnessConfigSchema
9
- storage?: 'data-uri'
10
- }>
package/src/Params.ts DELETED
@@ -1,3 +0,0 @@
1
- export type BrowserFileWitnessAdditionalParams = {
2
- file?: File
3
- }
package/src/Payload.ts DELETED
@@ -1,22 +0,0 @@
1
- import type { Payload } from '@xyo-network/payload-model'
2
- import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
3
-
4
- import { FileSchema } from './Schema.ts'
5
-
6
- export type BinaryDataHash = string
7
-
8
- /** @description File location and optional data */
9
- export type FilePayload = Payload<
10
- {
11
- created?: number
12
- hash: BinaryDataHash
13
- length: number
14
- /** @field Storage specific meta data */
15
- meta?: Record<string, string | number>
16
- modified?: number
17
- uri: string
18
- },
19
- FileSchema
20
- >
21
-
22
- export const isFilePayload = isPayloadOfSchemaType<FilePayload>(FileSchema)
@@ -1,16 +0,0 @@
1
- import { PayloadSetSchema } from '@xyo-network/payload-model'
2
- import { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'
3
-
4
- import { BrowserFileWitness } from './BrowserFileWitness.ts'
5
- import { FileSchema } from './Schema.ts'
6
-
7
- export const BrowserFilePlugin = () =>
8
- createPayloadSetWitnessPlugin<BrowserFileWitness>(
9
- { required: { [FileSchema]: 1 }, schema: PayloadSetSchema },
10
- {
11
- witness: async (params) => {
12
- const result = await BrowserFileWitness.create(params)
13
- return result
14
- },
15
- },
16
- )
package/src/Schema.ts DELETED
@@ -1,4 +0,0 @@
1
- import { asSchema } from '@xyo-network/payload-model'
2
-
3
- export type FileSchema = typeof FileSchema
4
- export const FileSchema = asSchema('network.xyo.file', true)
package/src/Witness.ts DELETED
@@ -1,21 +0,0 @@
1
- import type { Promisable } from '@xylabs/sdk-js'
2
- import { AbstractWitness } from '@xyo-network/abstract-witness'
3
- import type { AnyConfigSchema } from '@xyo-network/module-model'
4
- import type { Payload, Schema } from '@xyo-network/payload-model'
5
- import type { WitnessModule, WitnessParams } from '@xyo-network/witness-model'
6
-
7
- import type { FileWitnessConfig } from './Config.ts'
8
- import { FileWitnessConfigSchema } from './Config.ts'
9
- import { FileSchema } from './Schema.ts'
10
-
11
- export type FileWitnessParams = WitnessParams<AnyConfigSchema<FileWitnessConfig>>
12
-
13
- // Abstract so that derived classes provide a type for the file param and methods to parse it
14
- export abstract class FileWitness<TParams extends FileWitnessParams = FileWitnessParams> extends AbstractWitness<TParams> implements WitnessModule {
15
- static override readonly configSchemas: Schema[] = [...super.configSchemas, FileWitnessConfigSchema]
16
- static override readonly defaultConfigSchema: Schema = FileWitnessConfigSchema
17
-
18
- protected override observeHandler(payloads?: Payload[]): Promisable<Payload[]> {
19
- return [{ ...payloads?.[0], schema: FileSchema }]
20
- }
21
- }
package/src/index.ts DELETED
@@ -1,7 +0,0 @@
1
- export * from './BrowserFileWitness.ts'
2
- export * from './Config.ts'
3
- export * from './Params.ts'
4
- export * from './Payload.ts'
5
- export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser.ts'
6
- export * from './Schema.ts'
7
- export * from './Witness.ts'
@@ -1,5 +0,0 @@
1
- import { base64 } from '@scure/base'
2
-
3
- export const generateDataUri = (data: Uint8Array): string => {
4
- return `data:application/octet-stream;base64,${base64.encode(data)}`
5
- }
package/src/util/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './GenerateDataUri.ts'