@xyo-network/url-plugin 2.57.6

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 (88) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/Plugin.js +16 -0
  4. package/dist/cjs/Plugin.js.map +1 -0
  5. package/dist/cjs/Witness/Config.js +6 -0
  6. package/dist/cjs/Witness/Config.js.map +1 -0
  7. package/dist/cjs/Witness/Params.js +3 -0
  8. package/dist/cjs/Witness/Params.js.map +1 -0
  9. package/dist/cjs/Witness/Witness.js +37 -0
  10. package/dist/cjs/Witness/Witness.js.map +1 -0
  11. package/dist/cjs/Witness/index.js +7 -0
  12. package/dist/cjs/Witness/index.js.map +1 -0
  13. package/dist/cjs/index.js +10 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/util/hashFile.js +25 -0
  16. package/dist/cjs/util/hashFile.js.map +1 -0
  17. package/dist/cjs/util/hashHttpUrl.js +28 -0
  18. package/dist/cjs/util/hashHttpUrl.js.map +1 -0
  19. package/dist/cjs/util/hashUrl.js +20 -0
  20. package/dist/cjs/util/hashUrl.js.map +1 -0
  21. package/dist/cjs/util/index.js +5 -0
  22. package/dist/cjs/util/index.js.map +1 -0
  23. package/dist/docs.json +20153 -0
  24. package/dist/esm/Plugin.js +11 -0
  25. package/dist/esm/Plugin.js.map +1 -0
  26. package/dist/esm/Witness/Config.js +3 -0
  27. package/dist/esm/Witness/Config.js.map +1 -0
  28. package/dist/esm/Witness/Params.js +2 -0
  29. package/dist/esm/Witness/Params.js.map +1 -0
  30. package/dist/esm/Witness/Witness.js +26 -0
  31. package/dist/esm/Witness/Witness.js.map +1 -0
  32. package/dist/esm/Witness/index.js +4 -0
  33. package/dist/esm/Witness/index.js.map +1 -0
  34. package/dist/esm/index.js +6 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/util/hashFile.js +21 -0
  37. package/dist/esm/util/hashFile.js.map +1 -0
  38. package/dist/esm/util/hashHttpUrl.js +23 -0
  39. package/dist/esm/util/hashHttpUrl.js.map +1 -0
  40. package/dist/esm/util/hashUrl.js +15 -0
  41. package/dist/esm/util/hashUrl.js.map +1 -0
  42. package/dist/esm/util/index.js +2 -0
  43. package/dist/esm/util/index.js.map +1 -0
  44. package/dist/types/Plugin.d.ts +3 -0
  45. package/dist/types/Plugin.d.ts.map +1 -0
  46. package/dist/types/Witness/Config.d.ts +8 -0
  47. package/dist/types/Witness/Config.d.ts.map +1 -0
  48. package/dist/types/Witness/Params.d.ts +5 -0
  49. package/dist/types/Witness/Params.d.ts.map +1 -0
  50. package/dist/types/Witness/Witness.d.ts +9 -0
  51. package/dist/types/Witness/Witness.d.ts.map +1 -0
  52. package/dist/types/Witness/index.d.ts +4 -0
  53. package/dist/types/Witness/index.d.ts.map +1 -0
  54. package/dist/types/index.d.ts +5 -0
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/types/util/hashFile.d.ts +2 -0
  57. package/dist/types/util/hashFile.d.ts.map +1 -0
  58. package/dist/types/util/hashHttpUrl.d.ts +2 -0
  59. package/dist/types/util/hashHttpUrl.d.ts.map +1 -0
  60. package/dist/types/util/hashUrl.d.ts +2 -0
  61. package/dist/types/util/hashUrl.d.ts.map +1 -0
  62. package/dist/types/util/index.d.ts +2 -0
  63. package/dist/types/util/index.d.ts.map +1 -0
  64. package/docs/assets/highlight.css +22 -0
  65. package/docs/assets/main.js +58 -0
  66. package/docs/assets/search.js +1 -0
  67. package/docs/assets/style.css +1367 -0
  68. package/docs/classes/UrlWitness.html +971 -0
  69. package/docs/functions/UrlPlugin.html +51 -0
  70. package/docs/index.html +58 -0
  71. package/docs/modules.html +77 -0
  72. package/docs/types/UrlWitnessConfig.html +47 -0
  73. package/docs/types/UrlWitnessConfigSchema.html +48 -0
  74. package/docs/types/UrlWitnessParams.html +47 -0
  75. package/docs/variables/UrlWitnessConfigSchema-1.html +48 -0
  76. package/package.json +58 -0
  77. package/src/Plugin.ts +16 -0
  78. package/src/Witness/Config.ts +10 -0
  79. package/src/Witness/Params.ts +6 -0
  80. package/src/Witness/Witness.ts +33 -0
  81. package/src/Witness/index.ts +3 -0
  82. package/src/index.ts +8 -0
  83. package/src/util/hashFile.ts +21 -0
  84. package/src/util/hashHttpUrl.ts +23 -0
  85. package/src/util/hashUrl.ts +15 -0
  86. package/src/util/index.ts +1 -0
  87. package/src/util/spec/test.txt +1 -0
  88. package/typedoc.json +5 -0
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@xyo-network/url-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/sdk-xyo-client-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xyo-network/module": "^2.57.6",
14
+ "@xyo-network/payload-model": "^2.57.6",
15
+ "@xyo-network/payloadset-plugin": "^2.57.6",
16
+ "@xyo-network/url-payload-plugin": "^2.57.6",
17
+ "@xyo-network/witness": "^2.57.6"
18
+ },
19
+ "devDependencies": {
20
+ "@xylabs/ts-scripts-yarn3": "^2.17.13",
21
+ "@xylabs/tsconfig": "^2.17.13",
22
+ "typescript": "^5.0.4"
23
+ },
24
+ "description": "Primary SDK for using XYO Protocol 2.0",
25
+ "browser": "dist/esm/index.js",
26
+ "docs": "dist/docs.json",
27
+ "exports": {
28
+ ".": {
29
+ "node": {
30
+ "import": "./dist/esm/index.js",
31
+ "require": "./dist/cjs/index.js"
32
+ },
33
+ "browser": {
34
+ "import": "./dist/esm/index.js",
35
+ "require": "./dist/cjs/index.js"
36
+ },
37
+ "default": "./dist/esm/index.js"
38
+ },
39
+ "./dist/docs.json": {
40
+ "default": "./dist/docs.json"
41
+ },
42
+ "./package.json": "./package.json"
43
+ },
44
+ "main": "dist/cjs/index.js",
45
+ "module": "dist/esm/index.js",
46
+ "homepage": "https://xyo.network",
47
+ "license": "LGPL-3.0",
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
54
+ },
55
+ "sideEffects": false,
56
+ "types": "dist/types/index.d.ts",
57
+ "version": "2.57.6"
58
+ }
package/src/Plugin.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { PayloadSetSchema } from '@xyo-network/payload-model'
2
+ import { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'
3
+ import { UrlSchema } from '@xyo-network/url-payload-plugin'
4
+
5
+ import { UrlWitness } from './Witness'
6
+
7
+ export const UrlPlugin = () =>
8
+ createPayloadSetWitnessPlugin<UrlWitness>(
9
+ { required: { [UrlSchema]: 1 }, schema: PayloadSetSchema },
10
+ {
11
+ witness: async (params) => {
12
+ const result = await UrlWitness.create(params)
13
+ return result
14
+ },
15
+ },
16
+ )
@@ -0,0 +1,10 @@
1
+ import { UrlSchema } from '@xyo-network/url-payload-plugin'
2
+ import { WitnessConfig } from '@xyo-network/witness'
3
+
4
+ export const UrlWitnessConfigSchema = `${UrlSchema}.witness.config` as const
5
+ export type UrlWitnessConfigSchema = typeof UrlWitnessConfigSchema
6
+
7
+ export type UrlWitnessConfig = WitnessConfig<{
8
+ schema: UrlWitnessConfigSchema
9
+ url?: string
10
+ }>
@@ -0,0 +1,6 @@
1
+ import { AnyConfigSchema } from '@xyo-network/module'
2
+ import { WitnessParams } from '@xyo-network/witness'
3
+
4
+ import { UrlWitnessConfig } from './Config'
5
+
6
+ export type UrlWitnessParams = WitnessParams<AnyConfigSchema<UrlWitnessConfig>>
@@ -0,0 +1,33 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+ import { UrlPayload, UrlSchema } from '@xyo-network/url-payload-plugin'
3
+ import { AbstractWitness } from '@xyo-network/witness'
4
+
5
+ import { hashUrl } from '../util'
6
+ import { UrlWitnessConfigSchema } from './Config'
7
+ import { UrlWitnessParams } from './Params'
8
+
9
+ export class UrlWitness<TParams extends UrlWitnessParams = UrlWitnessParams> extends AbstractWitness<TParams> {
10
+ static override configSchema = UrlWitnessConfigSchema
11
+
12
+ get url() {
13
+ return this.config?.url
14
+ }
15
+
16
+ override async observe(payloads: Payload[] = []): Promise<Payload[]> {
17
+ const urls: UrlPayload[] = this.url
18
+ ? [{ schema: UrlSchema, url: this.url }]
19
+ : payloads
20
+ .filter((p): p is UrlPayload => p.schema === UrlSchema)
21
+ .map((p) => {
22
+ return { schema: UrlSchema, url: p.url }
23
+ })
24
+ const hashed = await Promise.all(
25
+ urls.map(async (url) => {
26
+ // TODO: Different schema for hashed url
27
+ return { ...url, hash: await hashUrl(url.url) }
28
+ }),
29
+ )
30
+ // TODO: Handle partial success
31
+ return await super.observe(hashed)
32
+ }
33
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Config'
2
+ export * from './Params'
3
+ export * from './Witness'
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { UrlPlugin } from './Plugin'
2
+
3
+ export * from './Witness'
4
+
5
+ export { UrlPlugin }
6
+
7
+ // eslint-disable-next-line import/no-default-export
8
+ export default UrlPlugin
@@ -0,0 +1,21 @@
1
+ import { createHash } from 'crypto'
2
+ import { createReadStream } from 'fs'
3
+ import { fileURLToPath } from 'url'
4
+
5
+ export const hashFile = (url: string): Promise<string> => {
6
+ const path = url.startsWith('file://') ? fileURLToPath(url) : url
7
+ const ret = new Promise<string>((resolve, reject) => {
8
+ const hash = createHash('sha256')
9
+ const stream = createReadStream(path)
10
+ stream.on('data', (data) => {
11
+ hash.update(data)
12
+ })
13
+ stream.on('end', () => {
14
+ resolve(hash.digest('hex'))
15
+ })
16
+ stream.on('error', (err) => {
17
+ reject(err)
18
+ })
19
+ })
20
+ return ret
21
+ }
@@ -0,0 +1,23 @@
1
+ import { createHash } from 'crypto'
2
+ import http from 'http'
3
+ import https from 'https'
4
+
5
+ export const hashHttpUrl = (url: string): Promise<string> => {
6
+ const ret = new Promise<string>((resolve, reject) => {
7
+ const hash = createHash('sha256')
8
+ const lib = url.startsWith('https') ? https : http
9
+ lib
10
+ .get(url, (res) => {
11
+ res.on('data', (data) => {
12
+ hash.update(data)
13
+ })
14
+ res.on('end', () => {
15
+ resolve(hash.digest('hex'))
16
+ })
17
+ })
18
+ .on('error', (err) => {
19
+ reject(err)
20
+ })
21
+ })
22
+ return ret
23
+ }
@@ -0,0 +1,15 @@
1
+ import { hashFile } from './hashFile'
2
+ import { hashHttpUrl } from './hashHttpUrl'
3
+
4
+ export const hashUrl = (url: string): Promise<string> => {
5
+ const scheme = url.split('://')[0]?.toLowerCase()
6
+ switch (scheme) {
7
+ case 'file':
8
+ return hashFile(url)
9
+ case 'http':
10
+ case 'https':
11
+ return hashHttpUrl(url)
12
+ default:
13
+ throw new Error(`Unsupported URL scheme: ${scheme}`)
14
+ }
15
+ }
@@ -0,0 +1 @@
1
+ export * from './hashUrl'
@@ -0,0 +1 @@
1
+ This file exists to test hashing
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["./src/index.ts"],
4
+ "tsconfig": "./tsconfig.typedoc.json"
5
+ }