@xyo-network/file-browser-plugin 2.87.2

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.
Files changed (143) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/browser/BrowserFileWitness.d.cts +20 -0
  4. package/dist/browser/BrowserFileWitness.d.cts.map +1 -0
  5. package/dist/browser/BrowserFileWitness.d.mts +20 -0
  6. package/dist/browser/BrowserFileWitness.d.mts.map +1 -0
  7. package/dist/browser/BrowserFileWitness.d.ts +20 -0
  8. package/dist/browser/BrowserFileWitness.d.ts.map +1 -0
  9. package/dist/browser/Config.d.cts +8 -0
  10. package/dist/browser/Config.d.cts.map +1 -0
  11. package/dist/browser/Config.d.mts +8 -0
  12. package/dist/browser/Config.d.mts.map +1 -0
  13. package/dist/browser/Config.d.ts +8 -0
  14. package/dist/browser/Config.d.ts.map +1 -0
  15. package/dist/browser/Params.d.cts +4 -0
  16. package/dist/browser/Params.d.cts.map +1 -0
  17. package/dist/browser/Params.d.mts +4 -0
  18. package/dist/browser/Params.d.mts.map +1 -0
  19. package/dist/browser/Params.d.ts +4 -0
  20. package/dist/browser/Params.d.ts.map +1 -0
  21. package/dist/browser/Payload.d.cts +14 -0
  22. package/dist/browser/Payload.d.cts.map +1 -0
  23. package/dist/browser/Payload.d.mts +14 -0
  24. package/dist/browser/Payload.d.mts.map +1 -0
  25. package/dist/browser/Payload.d.ts +14 -0
  26. package/dist/browser/Payload.d.ts.map +1 -0
  27. package/dist/browser/PluginBrowser.d.cts +3 -0
  28. package/dist/browser/PluginBrowser.d.cts.map +1 -0
  29. package/dist/browser/PluginBrowser.d.mts +3 -0
  30. package/dist/browser/PluginBrowser.d.mts.map +1 -0
  31. package/dist/browser/PluginBrowser.d.ts +3 -0
  32. package/dist/browser/PluginBrowser.d.ts.map +1 -0
  33. package/dist/browser/Schema.d.cts +3 -0
  34. package/dist/browser/Schema.d.cts.map +1 -0
  35. package/dist/browser/Schema.d.mts +3 -0
  36. package/dist/browser/Schema.d.mts.map +1 -0
  37. package/dist/browser/Schema.d.ts +3 -0
  38. package/dist/browser/Schema.d.ts.map +1 -0
  39. package/dist/browser/Witness.d.cts +12 -0
  40. package/dist/browser/Witness.d.cts.map +1 -0
  41. package/dist/browser/Witness.d.mts +12 -0
  42. package/dist/browser/Witness.d.mts.map +1 -0
  43. package/dist/browser/Witness.d.ts +12 -0
  44. package/dist/browser/Witness.d.ts.map +1 -0
  45. package/dist/browser/index.cjs +125 -0
  46. package/dist/browser/index.cjs.map +1 -0
  47. package/dist/browser/index.d.cts +7 -0
  48. package/dist/browser/index.d.cts.map +1 -0
  49. package/dist/browser/index.d.mts +7 -0
  50. package/dist/browser/index.d.mts.map +1 -0
  51. package/dist/browser/index.d.ts +7 -0
  52. package/dist/browser/index.d.ts.map +1 -0
  53. package/dist/browser/index.js +92 -0
  54. package/dist/browser/index.js.map +1 -0
  55. package/dist/browser/util/GenerateDataUri.d.cts +2 -0
  56. package/dist/browser/util/GenerateDataUri.d.cts.map +1 -0
  57. package/dist/browser/util/GenerateDataUri.d.mts +2 -0
  58. package/dist/browser/util/GenerateDataUri.d.mts.map +1 -0
  59. package/dist/browser/util/GenerateDataUri.d.ts +2 -0
  60. package/dist/browser/util/GenerateDataUri.d.ts.map +1 -0
  61. package/dist/browser/util/index.d.cts +2 -0
  62. package/dist/browser/util/index.d.cts.map +1 -0
  63. package/dist/browser/util/index.d.mts +2 -0
  64. package/dist/browser/util/index.d.mts.map +1 -0
  65. package/dist/browser/util/index.d.ts +2 -0
  66. package/dist/browser/util/index.d.ts.map +1 -0
  67. package/dist/node/BrowserFileWitness.d.cts +20 -0
  68. package/dist/node/BrowserFileWitness.d.cts.map +1 -0
  69. package/dist/node/BrowserFileWitness.d.mts +20 -0
  70. package/dist/node/BrowserFileWitness.d.mts.map +1 -0
  71. package/dist/node/BrowserFileWitness.d.ts +20 -0
  72. package/dist/node/BrowserFileWitness.d.ts.map +1 -0
  73. package/dist/node/Config.d.cts +8 -0
  74. package/dist/node/Config.d.cts.map +1 -0
  75. package/dist/node/Config.d.mts +8 -0
  76. package/dist/node/Config.d.mts.map +1 -0
  77. package/dist/node/Config.d.ts +8 -0
  78. package/dist/node/Config.d.ts.map +1 -0
  79. package/dist/node/Params.d.cts +4 -0
  80. package/dist/node/Params.d.cts.map +1 -0
  81. package/dist/node/Params.d.mts +4 -0
  82. package/dist/node/Params.d.mts.map +1 -0
  83. package/dist/node/Params.d.ts +4 -0
  84. package/dist/node/Params.d.ts.map +1 -0
  85. package/dist/node/Payload.d.cts +14 -0
  86. package/dist/node/Payload.d.cts.map +1 -0
  87. package/dist/node/Payload.d.mts +14 -0
  88. package/dist/node/Payload.d.mts.map +1 -0
  89. package/dist/node/Payload.d.ts +14 -0
  90. package/dist/node/Payload.d.ts.map +1 -0
  91. package/dist/node/PluginBrowser.d.cts +3 -0
  92. package/dist/node/PluginBrowser.d.cts.map +1 -0
  93. package/dist/node/PluginBrowser.d.mts +3 -0
  94. package/dist/node/PluginBrowser.d.mts.map +1 -0
  95. package/dist/node/PluginBrowser.d.ts +3 -0
  96. package/dist/node/PluginBrowser.d.ts.map +1 -0
  97. package/dist/node/Schema.d.cts +3 -0
  98. package/dist/node/Schema.d.cts.map +1 -0
  99. package/dist/node/Schema.d.mts +3 -0
  100. package/dist/node/Schema.d.mts.map +1 -0
  101. package/dist/node/Schema.d.ts +3 -0
  102. package/dist/node/Schema.d.ts.map +1 -0
  103. package/dist/node/Witness.d.cts +12 -0
  104. package/dist/node/Witness.d.cts.map +1 -0
  105. package/dist/node/Witness.d.mts +12 -0
  106. package/dist/node/Witness.d.mts.map +1 -0
  107. package/dist/node/Witness.d.ts +12 -0
  108. package/dist/node/Witness.d.ts.map +1 -0
  109. package/dist/node/index.cjs +134 -0
  110. package/dist/node/index.cjs.map +1 -0
  111. package/dist/node/index.d.cts +7 -0
  112. package/dist/node/index.d.cts.map +1 -0
  113. package/dist/node/index.d.mts +7 -0
  114. package/dist/node/index.d.mts.map +1 -0
  115. package/dist/node/index.d.ts +7 -0
  116. package/dist/node/index.d.ts.map +1 -0
  117. package/dist/node/index.js +93 -0
  118. package/dist/node/index.js.map +1 -0
  119. package/dist/node/util/GenerateDataUri.d.cts +2 -0
  120. package/dist/node/util/GenerateDataUri.d.cts.map +1 -0
  121. package/dist/node/util/GenerateDataUri.d.mts +2 -0
  122. package/dist/node/util/GenerateDataUri.d.mts.map +1 -0
  123. package/dist/node/util/GenerateDataUri.d.ts +2 -0
  124. package/dist/node/util/GenerateDataUri.d.ts.map +1 -0
  125. package/dist/node/util/index.d.cts +2 -0
  126. package/dist/node/util/index.d.cts.map +1 -0
  127. package/dist/node/util/index.d.mts +2 -0
  128. package/dist/node/util/index.d.mts.map +1 -0
  129. package/dist/node/util/index.d.ts +2 -0
  130. package/dist/node/util/index.d.ts.map +1 -0
  131. package/package.json +71 -0
  132. package/src/BrowserFileWitness.ts +62 -0
  133. package/src/Config.ts +9 -0
  134. package/src/Params.ts +3 -0
  135. package/src/Payload.ts +19 -0
  136. package/src/PluginBrowser.ts +16 -0
  137. package/src/Schema.ts +2 -0
  138. package/src/Witness.ts +19 -0
  139. package/src/index.ts +6 -0
  140. package/src/util/GenerateDataUri.ts +5 -0
  141. package/src/util/index.ts +1 -0
  142. package/typedoc.json +5 -0
  143. package/xy.config.ts +15 -0
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ BrowserFilePlugin: () => BrowserFilePlugin,
34
+ BrowserFileWitness: () => BrowserFileWitness,
35
+ FileSchema: () => FileSchema,
36
+ FileWitness: () => FileWitness,
37
+ FileWitnessConfigSchema: () => FileWitnessConfigSchema,
38
+ default: () => BrowserFilePlugin
39
+ });
40
+ module.exports = __toCommonJS(src_exports);
41
+
42
+ // src/BrowserFileWitness.ts
43
+ var import_assert = require("@xylabs/assert");
44
+ var import_payload_builder = require("@xyo-network/payload-builder");
45
+ var import_sha = __toESM(require("sha.js"), 1);
46
+
47
+ // src/Config.ts
48
+ var FileWitnessConfigSchema = "network.xyo.file.witness.config";
49
+
50
+ // src/Schema.ts
51
+ var FileSchema = "network.xyo.file";
52
+
53
+ // src/util/GenerateDataUri.ts
54
+ var import_base = require("@scure/base");
55
+ var generateDataUri = (data) => {
56
+ return `data:application/octet-stream;base64,${import_base.base64.encode(data)}`;
57
+ };
58
+
59
+ // src/Witness.ts
60
+ var import_abstract_witness = require("@xyo-network/abstract-witness");
61
+ var FileWitness = class extends import_abstract_witness.AbstractWitness {
62
+ static configSchemas = [FileWitnessConfigSchema];
63
+ observeHandler(payloads) {
64
+ return [{ ...payloads == null ? void 0 : payloads[0], schema: FileSchema }];
65
+ }
66
+ };
67
+
68
+ // src/BrowserFileWitness.ts
69
+ var BrowserFileWitness = class extends FileWitness {
70
+ static configSchemas = [FileWitnessConfigSchema];
71
+ async observeHandler() {
72
+ try {
73
+ const [payload] = await this.witnessBrowserFile();
74
+ console.log(`BrowserFileWitness: ${await import_payload_builder.PayloadBuilder.dataHash(payload)}`);
75
+ return [payload];
76
+ } catch (e) {
77
+ throw new Error(`Error reading file: ${e}`);
78
+ }
79
+ }
80
+ readBinaryFile(file) {
81
+ return new Promise((resolve, reject) => {
82
+ const fileReader = new FileReader();
83
+ fileReader.addEventListener("load", (event) => {
84
+ var _a;
85
+ const arrayBuffer = (_a = event.target) == null ? void 0 : _a.result;
86
+ resolve(new Uint8Array(arrayBuffer));
87
+ });
88
+ fileReader.onerror = () => reject(fileReader.error);
89
+ fileReader.readAsArrayBuffer(file);
90
+ });
91
+ }
92
+ async witnessBrowserFile() {
93
+ const file = (0, import_assert.assertEx)(this.params.file, "File is missing from params");
94
+ const fileBinary = await this.readBinaryFile(file);
95
+ const result = new Uint8Array(fileBinary);
96
+ const hash = (0, import_sha.default)("sha256").update(result).digest("hex").padStart(64, "0");
97
+ return [
98
+ {
99
+ hash,
100
+ length: fileBinary.byteLength,
101
+ meta: {
102
+ name: file.name,
103
+ type: file.type
104
+ },
105
+ modified: file.lastModified,
106
+ schema: FileSchema,
107
+ uri: this.config.storage === "data-uri" ? generateDataUri(fileBinary) : file.name
108
+ },
109
+ fileBinary
110
+ ];
111
+ }
112
+ };
113
+
114
+ // src/PluginBrowser.ts
115
+ var import_payload_model = require("@xyo-network/payload-model");
116
+ var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
117
+ var BrowserFilePlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
118
+ { required: { [FileSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
119
+ {
120
+ witness: async (params) => {
121
+ const result = await BrowserFileWitness.create(params);
122
+ return result;
123
+ }
124
+ }
125
+ );
126
+ // Annotate the CommonJS export names for ESM import in node:
127
+ 0 && (module.exports = {
128
+ BrowserFilePlugin,
129
+ BrowserFileWitness,
130
+ FileSchema,
131
+ FileWitness,
132
+ FileWitnessConfigSchema
133
+ });
134
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts","../../src/BrowserFileWitness.ts","../../src/Config.ts","../../src/Schema.ts","../../src/util/GenerateDataUri.ts","../../src/Witness.ts","../../src/PluginBrowser.ts"],"sourcesContent":["export * from './BrowserFileWitness'\nexport * from './Config'\nexport * from './Params'\nexport { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser'\nexport * from './Schema'\nexport * from './Witness'\n","import { assertEx } from '@xylabs/assert'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport shajs from 'sha.js'\n\nimport { FileWitnessConfigSchema } from './Config'\nimport { BrowserFileWitnessAdditionalParams } from './Params'\nimport { FilePayload } from './Payload'\nimport { FileSchema } from './Schema'\nimport { generateDataUri } from './util'\nimport { FileWitness, FileWitnessParams } from './Witness'\n\ntype BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams\n\nexport class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {\n static override configSchemas = [FileWitnessConfigSchema]\n\n protected override async observeHandler() {\n try {\n const [payload] = await this.witnessBrowserFile()\n console.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 hash = shajs('sha256').update(result).digest('hex').padStart(64, '0')\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 { WitnessConfig } from '@xyo-network/witness-model'\n\nexport type FileWitnessConfigSchema = 'network.xyo.file.witness.config'\nexport const FileWitnessConfigSchema: FileWitnessConfigSchema = 'network.xyo.file.witness.config'\n\nexport type FileWitnessConfig = WitnessConfig<{\n schema: FileWitnessConfigSchema\n storage?: 'data-uri'\n}>\n","export type FileSchema = 'network.xyo.file'\nexport const FileSchema: FileSchema = 'network.xyo.file'\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 { Promisable } from '@xylabs/promise'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { WitnessModule, WitnessParams } from '@xyo-network/witness-model'\n\nimport { FileWitnessConfig, FileWitnessConfigSchema } from './Config'\nimport { FileSchema } from './Schema'\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 configSchemas = [FileWitnessConfigSchema]\n\n protected override observeHandler(payloads?: Payload[]): Promisable<Payload[]> {\n return [{ ...payloads?.[0], schema: FileSchema }]\n }\n}\n","import { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { BrowserFileWitness } from './BrowserFileWitness'\nimport { FileSchema } from './Schema'\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyB;AACzB,6BAA+B;AAC/B,iBAAkB;;;ACCX,IAAM,0BAAmD;;;ACFzD,IAAM,aAAyB;;;ACDtC,kBAAuB;AAEhB,IAAM,kBAAkB,CAAC,SAA6B;AAC3D,SAAO,wCAAwC,mBAAO,OAAO,IAAI,CAAC;AACpE;;;ACHA,8BAAgC;AAWzB,IAAe,cAAf,cAA0F,wCAAkD;AAAA,EACjJ,OAAgB,gBAAgB,CAAC,uBAAuB;AAAA,EAErC,eAAe,UAA6C;AAC7E,WAAO,CAAC,EAAE,GAAG,qCAAW,IAAI,QAAQ,WAAW,CAAC;AAAA,EAClD;AACF;;;AJLO,IAAM,qBAAN,cAAiC,YAAsC;AAAA,EAC5E,OAAgB,gBAAgB,CAAC,uBAAuB;AAAA,EAExD,MAAyB,iBAAiB;AACxC,QAAI;AACF,YAAM,CAAC,OAAO,IAAI,MAAM,KAAK,mBAAmB;AAChD,cAAQ,IAAI,uBAAuB,MAAM,sCAAe,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;AA7BrD;AA8BQ,cAAM,eAAc,WAAM,WAAN,mBAAc;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,WAAO,wBAAS,KAAK,OAAO,MAAM,6BAA6B;AACrE,UAAM,aAAa,MAAM,KAAK,eAAe,IAAI;AACjD,UAAM,SAAS,IAAI,WAAW,UAAU;AACxC,UAAM,WAAO,WAAAA,SAAM,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,IAAI,GAAG;AAE1E,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;;;AK7DA,2BAAiC;AACjC,+BAA8C;AAKvC,IAAM,oBAAoB,UAC/B;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,UAAU,GAAG,EAAE,GAAG,QAAQ,sCAAiB;AAAA,EAC1D;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,mBAAmB,OAAO,MAAM;AACrD,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["shajs"]}
@@ -0,0 +1,7 @@
1
+ export * from './BrowserFileWitness';
2
+ export * from './Config';
3
+ export * from './Params';
4
+ export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser';
5
+ export * from './Schema';
6
+ export * from './Witness';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACjF,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from './BrowserFileWitness';
2
+ export * from './Config';
3
+ export * from './Params';
4
+ export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser';
5
+ export * from './Schema';
6
+ export * from './Witness';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACjF,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from './BrowserFileWitness';
2
+ export * from './Config';
3
+ export * from './Params';
4
+ export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser';
5
+ export * from './Schema';
6
+ export * from './Witness';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACjF,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,93 @@
1
+ // src/BrowserFileWitness.ts
2
+ import { assertEx } from "@xylabs/assert";
3
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
4
+ import shajs from "sha.js";
5
+
6
+ // src/Config.ts
7
+ var FileWitnessConfigSchema = "network.xyo.file.witness.config";
8
+
9
+ // src/Schema.ts
10
+ var FileSchema = "network.xyo.file";
11
+
12
+ // src/util/GenerateDataUri.ts
13
+ import { base64 } from "@scure/base";
14
+ var generateDataUri = (data) => {
15
+ return `data:application/octet-stream;base64,${base64.encode(data)}`;
16
+ };
17
+
18
+ // src/Witness.ts
19
+ import { AbstractWitness } from "@xyo-network/abstract-witness";
20
+ var FileWitness = class extends AbstractWitness {
21
+ static configSchemas = [FileWitnessConfigSchema];
22
+ observeHandler(payloads) {
23
+ return [{ ...payloads == null ? void 0 : payloads[0], schema: FileSchema }];
24
+ }
25
+ };
26
+
27
+ // src/BrowserFileWitness.ts
28
+ var BrowserFileWitness = class extends FileWitness {
29
+ static configSchemas = [FileWitnessConfigSchema];
30
+ async observeHandler() {
31
+ try {
32
+ const [payload] = await this.witnessBrowserFile();
33
+ console.log(`BrowserFileWitness: ${await PayloadBuilder.dataHash(payload)}`);
34
+ return [payload];
35
+ } catch (e) {
36
+ throw new Error(`Error reading file: ${e}`);
37
+ }
38
+ }
39
+ readBinaryFile(file) {
40
+ return new Promise((resolve, reject) => {
41
+ const fileReader = new FileReader();
42
+ fileReader.addEventListener("load", (event) => {
43
+ var _a;
44
+ const arrayBuffer = (_a = event.target) == null ? void 0 : _a.result;
45
+ resolve(new Uint8Array(arrayBuffer));
46
+ });
47
+ fileReader.onerror = () => reject(fileReader.error);
48
+ fileReader.readAsArrayBuffer(file);
49
+ });
50
+ }
51
+ async witnessBrowserFile() {
52
+ const file = assertEx(this.params.file, "File is missing from params");
53
+ const fileBinary = await this.readBinaryFile(file);
54
+ const result = new Uint8Array(fileBinary);
55
+ const hash = shajs("sha256").update(result).digest("hex").padStart(64, "0");
56
+ return [
57
+ {
58
+ hash,
59
+ length: fileBinary.byteLength,
60
+ meta: {
61
+ name: file.name,
62
+ type: file.type
63
+ },
64
+ modified: file.lastModified,
65
+ schema: FileSchema,
66
+ uri: this.config.storage === "data-uri" ? generateDataUri(fileBinary) : file.name
67
+ },
68
+ fileBinary
69
+ ];
70
+ }
71
+ };
72
+
73
+ // src/PluginBrowser.ts
74
+ import { PayloadSetSchema } from "@xyo-network/payload-model";
75
+ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
76
+ var BrowserFilePlugin = () => createPayloadSetWitnessPlugin(
77
+ { required: { [FileSchema]: 1 }, schema: PayloadSetSchema },
78
+ {
79
+ witness: async (params) => {
80
+ const result = await BrowserFileWitness.create(params);
81
+ return result;
82
+ }
83
+ }
84
+ );
85
+ export {
86
+ BrowserFilePlugin,
87
+ BrowserFileWitness,
88
+ FileSchema,
89
+ FileWitness,
90
+ FileWitnessConfigSchema,
91
+ BrowserFilePlugin as default
92
+ };
93
+ //# sourceMappingURL=index.js.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/PluginBrowser.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport shajs from 'sha.js'\n\nimport { FileWitnessConfigSchema } from './Config'\nimport { BrowserFileWitnessAdditionalParams } from './Params'\nimport { FilePayload } from './Payload'\nimport { FileSchema } from './Schema'\nimport { generateDataUri } from './util'\nimport { FileWitness, FileWitnessParams } from './Witness'\n\ntype BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams\n\nexport class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {\n static override configSchemas = [FileWitnessConfigSchema]\n\n protected override async observeHandler() {\n try {\n const [payload] = await this.witnessBrowserFile()\n console.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 hash = shajs('sha256').update(result).digest('hex').padStart(64, '0')\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 { WitnessConfig } from '@xyo-network/witness-model'\n\nexport type FileWitnessConfigSchema = 'network.xyo.file.witness.config'\nexport const FileWitnessConfigSchema: FileWitnessConfigSchema = 'network.xyo.file.witness.config'\n\nexport type FileWitnessConfig = WitnessConfig<{\n schema: FileWitnessConfigSchema\n storage?: 'data-uri'\n}>\n","export type FileSchema = 'network.xyo.file'\nexport const FileSchema: FileSchema = 'network.xyo.file'\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 { Promisable } from '@xylabs/promise'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { WitnessModule, WitnessParams } from '@xyo-network/witness-model'\n\nimport { FileWitnessConfig, FileWitnessConfigSchema } from './Config'\nimport { FileSchema } from './Schema'\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 configSchemas = [FileWitnessConfigSchema]\n\n protected override observeHandler(payloads?: Payload[]): Promisable<Payload[]> {\n return [{ ...payloads?.[0], schema: FileSchema }]\n }\n}\n","import { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { BrowserFileWitness } from './BrowserFileWitness'\nimport { FileSchema } from './Schema'\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;AACzB,SAAS,sBAAsB;AAC/B,OAAO,WAAW;;;ACCX,IAAM,0BAAmD;;;ACFzD,IAAM,aAAyB;;;ACDtC,SAAS,cAAc;AAEhB,IAAM,kBAAkB,CAAC,SAA6B;AAC3D,SAAO,wCAAwC,OAAO,OAAO,IAAI,CAAC;AACpE;;;ACHA,SAAS,uBAAuB;AAWzB,IAAe,cAAf,cAA0F,gBAAkD;AAAA,EACjJ,OAAgB,gBAAgB,CAAC,uBAAuB;AAAA,EAErC,eAAe,UAA6C;AAC7E,WAAO,CAAC,EAAE,GAAG,qCAAW,IAAI,QAAQ,WAAW,CAAC;AAAA,EAClD;AACF;;;AJLO,IAAM,qBAAN,cAAiC,YAAsC;AAAA,EAC5E,OAAgB,gBAAgB,CAAC,uBAAuB;AAAA,EAExD,MAAyB,iBAAiB;AACxC,QAAI;AACF,YAAM,CAAC,OAAO,IAAI,MAAM,KAAK,mBAAmB;AAChD,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;AA7BrD;AA8BQ,cAAM,eAAc,WAAM,WAAN,mBAAc;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,6BAA6B;AACrE,UAAM,aAAa,MAAM,KAAK,eAAe,IAAI;AACjD,UAAM,SAAS,IAAI,WAAW,UAAU;AACxC,UAAM,OAAO,MAAM,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,IAAI,GAAG;AAE1E,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;;;AK7DA,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":[]}
@@ -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,SAAU,UAAU,KAAG,MAElD,CAAA"}
@@ -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,SAAU,UAAU,KAAG,MAElD,CAAA"}
@@ -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,SAAU,UAAU,KAAG,MAElD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './GenerateDataUri';
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,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './GenerateDataUri';
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,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './GenerateDataUri';
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,mBAAmB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@xyo-network/file-browser-plugin",
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/plugins/issues"
11
+ },
12
+ "dependencies": {
13
+ "@scure/base": "^1.1.5",
14
+ "@xylabs/assert": "^2.14.0",
15
+ "@xylabs/promise": "^2.14.0",
16
+ "@xyo-network/abstract-witness": "^2.89.3",
17
+ "@xyo-network/module-model": "^2.89.3",
18
+ "@xyo-network/payload-builder": "^2.89.3",
19
+ "@xyo-network/payload-model": "^2.89.3",
20
+ "@xyo-network/payloadset-plugin": "^2.89.3",
21
+ "@xyo-network/witness-model": "^2.89.3",
22
+ "sha.js": "^2.4.11"
23
+ },
24
+ "devDependencies": {
25
+ "@xylabs/ts-scripts-yarn3": "^3.2.42",
26
+ "@xylabs/tsconfig": "^3.2.42",
27
+ "@xyo-network/account": "^2.89.3",
28
+ "typescript": "^5.3.3"
29
+ },
30
+ "description": "Typescript/Javascript Plugins for XYO Platform",
31
+ "exports": {
32
+ ".": {
33
+ "browser": {
34
+ "require": {
35
+ "types": "./dist/browser/index.d.cts",
36
+ "default": "./dist/browser/index.cjs"
37
+ },
38
+ "import": {
39
+ "types": "./dist/browser/index.d.mts",
40
+ "default": "./dist/browser/index.js"
41
+ }
42
+ },
43
+ "node": {
44
+ "require": {
45
+ "types": "./dist/node/index.d.cts",
46
+ "default": "./dist/node/index.cjs"
47
+ },
48
+ "import": {
49
+ "types": "./dist/node/index.d.mts",
50
+ "default": "./dist/node/index.js"
51
+ }
52
+ }
53
+ },
54
+ "./package.json": "./package.json"
55
+ },
56
+ "main": "dist/node/index.cjs",
57
+ "module": "dist/node/index.js",
58
+ "types": "dist/node/index.d.ts",
59
+ "homepage": "https://xyo.network",
60
+ "license": "LGPL-3.0-only",
61
+ "publishConfig": {
62
+ "access": "public"
63
+ },
64
+ "repository": {
65
+ "type": "git",
66
+ "url": "https://github.com/XYOracleNetwork/plugins.git"
67
+ },
68
+ "sideEffects": false,
69
+ "version": "2.87.2",
70
+ "type": "module"
71
+ }
@@ -0,0 +1,62 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
3
+ import shajs from 'sha.js'
4
+
5
+ import { FileWitnessConfigSchema } from './Config'
6
+ import { BrowserFileWitnessAdditionalParams } from './Params'
7
+ import { FilePayload } from './Payload'
8
+ import { FileSchema } from './Schema'
9
+ import { generateDataUri } from './util'
10
+ import { FileWitness, FileWitnessParams } from './Witness'
11
+
12
+ type BrowserFileWitnessParams = FileWitnessParams & BrowserFileWitnessAdditionalParams
13
+
14
+ export class BrowserFileWitness extends FileWitness<BrowserFileWitnessParams> {
15
+ static override configSchemas = [FileWitnessConfigSchema]
16
+
17
+ protected override async observeHandler() {
18
+ try {
19
+ const [payload] = await this.witnessBrowserFile()
20
+ console.log(`BrowserFileWitness: ${await PayloadBuilder.dataHash(payload)}`)
21
+ return [payload]
22
+ } catch (e) {
23
+ throw new Error(`Error reading file: ${e}`)
24
+ }
25
+ }
26
+
27
+ private readBinaryFile(file: File): Promise<Uint8Array> {
28
+ return new Promise((resolve, reject) => {
29
+ const fileReader = new FileReader()
30
+ fileReader.addEventListener('load', (event) => {
31
+ const arrayBuffer = event.target?.result as ArrayBuffer
32
+ resolve(new Uint8Array(arrayBuffer))
33
+ })
34
+ // eslint-disable-next-line unicorn/prefer-add-event-listener
35
+ fileReader.onerror = () => reject(fileReader.error)
36
+ // eslint-disable-next-line unicorn/prefer-blob-reading-methods
37
+ fileReader.readAsArrayBuffer(file)
38
+ })
39
+ }
40
+
41
+ private async witnessBrowserFile(): Promise<[FilePayload, Uint8Array]> {
42
+ const file = assertEx(this.params.file, 'File is missing from params')
43
+ const fileBinary = await this.readBinaryFile(file)
44
+ const result = new Uint8Array(fileBinary)
45
+ const hash = shajs('sha256').update(result).digest('hex').padStart(64, '0')
46
+
47
+ return [
48
+ {
49
+ hash,
50
+ length: fileBinary.byteLength,
51
+ meta: {
52
+ name: file.name,
53
+ type: file.type,
54
+ },
55
+ modified: file.lastModified,
56
+ schema: FileSchema,
57
+ uri: this.config.storage === 'data-uri' ? generateDataUri(fileBinary) : file.name,
58
+ },
59
+ fileBinary,
60
+ ]
61
+ }
62
+ }
package/src/Config.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { WitnessConfig } from '@xyo-network/witness-model'
2
+
3
+ export type FileWitnessConfigSchema = 'network.xyo.file.witness.config'
4
+ export const FileWitnessConfigSchema: FileWitnessConfigSchema = 'network.xyo.file.witness.config'
5
+
6
+ export type FileWitnessConfig = WitnessConfig<{
7
+ schema: FileWitnessConfigSchema
8
+ storage?: 'data-uri'
9
+ }>
package/src/Params.ts ADDED
@@ -0,0 +1,3 @@
1
+ export type BrowserFileWitnessAdditionalParams = {
2
+ file?: File
3
+ }
package/src/Payload.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ import { FileSchema } from './Schema'
4
+
5
+ export type BinaryDataHash = string
6
+
7
+ /** @description File location and optional data */
8
+ export type FilePayload = Payload<
9
+ {
10
+ created?: number
11
+ hash: BinaryDataHash
12
+ length: number
13
+ /** @field Storage specific meta data */
14
+ meta?: Record<string, string | number>
15
+ modified?: number
16
+ uri: string
17
+ },
18
+ FileSchema
19
+ >
@@ -0,0 +1,16 @@
1
+ import { PayloadSetSchema } from '@xyo-network/payload-model'
2
+ import { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'
3
+
4
+ import { BrowserFileWitness } from './BrowserFileWitness'
5
+ import { FileSchema } from './Schema'
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 ADDED
@@ -0,0 +1,2 @@
1
+ export type FileSchema = 'network.xyo.file'
2
+ export const FileSchema: FileSchema = 'network.xyo.file'
package/src/Witness.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { Promisable } from '@xylabs/promise'
2
+ import { AbstractWitness } from '@xyo-network/abstract-witness'
3
+ import { AnyConfigSchema } from '@xyo-network/module-model'
4
+ import { Payload } from '@xyo-network/payload-model'
5
+ import { WitnessModule, WitnessParams } from '@xyo-network/witness-model'
6
+
7
+ import { FileWitnessConfig, FileWitnessConfigSchema } from './Config'
8
+ import { FileSchema } from './Schema'
9
+
10
+ export type FileWitnessParams = WitnessParams<AnyConfigSchema<FileWitnessConfig>>
11
+
12
+ // Abstract so that derived classes provide a type for the file param and methods to parse it
13
+ export abstract class FileWitness<TParams extends FileWitnessParams = FileWitnessParams> extends AbstractWitness<TParams> implements WitnessModule {
14
+ static override configSchemas = [FileWitnessConfigSchema]
15
+
16
+ protected override observeHandler(payloads?: Payload[]): Promisable<Payload[]> {
17
+ return [{ ...payloads?.[0], schema: FileSchema }]
18
+ }
19
+ }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './BrowserFileWitness'
2
+ export * from './Config'
3
+ export * from './Params'
4
+ export { BrowserFilePlugin, BrowserFilePlugin as default } from './PluginBrowser'
5
+ export * from './Schema'
6
+ export * from './Witness'
@@ -0,0 +1,5 @@
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
+ }
@@ -0,0 +1 @@
1
+ export * from './GenerateDataUri'
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["./src/indexNode.ts"],
4
+ "tsconfig": "./tsconfig.typedoc.json"
5
+ }
package/xy.config.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
+ const config: XyTsupConfig = {
3
+ compile: {
4
+ browser: {
5
+ src: true,
6
+ },
7
+ entryMode: 'single',
8
+ node: {
9
+ src: true,
10
+ },
11
+ },
12
+ }
13
+
14
+ // eslint-disable-next-line import/no-default-export
15
+ export default config