@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.
- package/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/cjs/Plugin.js +16 -0
- package/dist/cjs/Plugin.js.map +1 -0
- package/dist/cjs/Witness/Config.js +6 -0
- package/dist/cjs/Witness/Config.js.map +1 -0
- package/dist/cjs/Witness/Params.js +3 -0
- package/dist/cjs/Witness/Params.js.map +1 -0
- package/dist/cjs/Witness/Witness.js +37 -0
- package/dist/cjs/Witness/Witness.js.map +1 -0
- package/dist/cjs/Witness/index.js +7 -0
- package/dist/cjs/Witness/index.js.map +1 -0
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/util/hashFile.js +25 -0
- package/dist/cjs/util/hashFile.js.map +1 -0
- package/dist/cjs/util/hashHttpUrl.js +28 -0
- package/dist/cjs/util/hashHttpUrl.js.map +1 -0
- package/dist/cjs/util/hashUrl.js +20 -0
- package/dist/cjs/util/hashUrl.js.map +1 -0
- package/dist/cjs/util/index.js +5 -0
- package/dist/cjs/util/index.js.map +1 -0
- package/dist/docs.json +20153 -0
- package/dist/esm/Plugin.js +11 -0
- package/dist/esm/Plugin.js.map +1 -0
- package/dist/esm/Witness/Config.js +3 -0
- package/dist/esm/Witness/Config.js.map +1 -0
- package/dist/esm/Witness/Params.js +2 -0
- package/dist/esm/Witness/Params.js.map +1 -0
- package/dist/esm/Witness/Witness.js +26 -0
- package/dist/esm/Witness/Witness.js.map +1 -0
- package/dist/esm/Witness/index.js +4 -0
- package/dist/esm/Witness/index.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/util/hashFile.js +21 -0
- package/dist/esm/util/hashFile.js.map +1 -0
- package/dist/esm/util/hashHttpUrl.js +23 -0
- package/dist/esm/util/hashHttpUrl.js.map +1 -0
- package/dist/esm/util/hashUrl.js +15 -0
- package/dist/esm/util/hashUrl.js.map +1 -0
- package/dist/esm/util/index.js +2 -0
- package/dist/esm/util/index.js.map +1 -0
- package/dist/types/Plugin.d.ts +3 -0
- package/dist/types/Plugin.d.ts.map +1 -0
- package/dist/types/Witness/Config.d.ts +8 -0
- package/dist/types/Witness/Config.d.ts.map +1 -0
- package/dist/types/Witness/Params.d.ts +5 -0
- package/dist/types/Witness/Params.d.ts.map +1 -0
- package/dist/types/Witness/Witness.d.ts +9 -0
- package/dist/types/Witness/Witness.d.ts.map +1 -0
- package/dist/types/Witness/index.d.ts +4 -0
- package/dist/types/Witness/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/util/hashFile.d.ts +2 -0
- package/dist/types/util/hashFile.d.ts.map +1 -0
- package/dist/types/util/hashHttpUrl.d.ts +2 -0
- package/dist/types/util/hashHttpUrl.d.ts.map +1 -0
- package/dist/types/util/hashUrl.d.ts +2 -0
- package/dist/types/util/hashUrl.d.ts.map +1 -0
- package/dist/types/util/index.d.ts +2 -0
- package/dist/types/util/index.d.ts.map +1 -0
- package/docs/assets/highlight.css +22 -0
- package/docs/assets/main.js +58 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1367 -0
- package/docs/classes/UrlWitness.html +971 -0
- package/docs/functions/UrlPlugin.html +51 -0
- package/docs/index.html +58 -0
- package/docs/modules.html +77 -0
- package/docs/types/UrlWitnessConfig.html +47 -0
- package/docs/types/UrlWitnessConfigSchema.html +48 -0
- package/docs/types/UrlWitnessParams.html +47 -0
- package/docs/variables/UrlWitnessConfigSchema-1.html +48 -0
- package/package.json +58 -0
- package/src/Plugin.ts +16 -0
- package/src/Witness/Config.ts +10 -0
- package/src/Witness/Params.ts +6 -0
- package/src/Witness/Witness.ts +33 -0
- package/src/Witness/index.ts +3 -0
- package/src/index.ts +8 -0
- package/src/util/hashFile.ts +21 -0
- package/src/util/hashHttpUrl.ts +23 -0
- package/src/util/hashUrl.ts +15 -0
- package/src/util/index.ts +1 -0
- package/src/util/spec/test.txt +1 -0
- 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,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
|
+
}
|
package/src/index.ts
ADDED
|
@@ -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
|