@xyo-network/evm-call-witness 2.84.1

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 (67) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/browser/Diviner.d.cts +31 -0
  4. package/dist/browser/Diviner.d.cts.map +1 -0
  5. package/dist/browser/Diviner.d.mts +31 -0
  6. package/dist/browser/Diviner.d.mts.map +1 -0
  7. package/dist/browser/Diviner.d.ts +31 -0
  8. package/dist/browser/Diviner.d.ts.map +1 -0
  9. package/dist/browser/Payload.d.cts +53 -0
  10. package/dist/browser/Payload.d.cts.map +1 -0
  11. package/dist/browser/Payload.d.mts +53 -0
  12. package/dist/browser/Payload.d.mts.map +1 -0
  13. package/dist/browser/Payload.d.ts +53 -0
  14. package/dist/browser/Payload.d.ts.map +1 -0
  15. package/dist/browser/Witness.d.cts +20 -0
  16. package/dist/browser/Witness.d.cts.map +1 -0
  17. package/dist/browser/Witness.d.mts +20 -0
  18. package/dist/browser/Witness.d.mts.map +1 -0
  19. package/dist/browser/Witness.d.ts +20 -0
  20. package/dist/browser/Witness.d.ts.map +1 -0
  21. package/dist/browser/index.cjs +178 -0
  22. package/dist/browser/index.cjs.map +1 -0
  23. package/dist/browser/index.d.cts +4 -0
  24. package/dist/browser/index.d.cts.map +1 -0
  25. package/dist/browser/index.d.mts +4 -0
  26. package/dist/browser/index.d.mts.map +1 -0
  27. package/dist/browser/index.d.ts +4 -0
  28. package/dist/browser/index.d.ts.map +1 -0
  29. package/dist/browser/index.js +155 -0
  30. package/dist/browser/index.js.map +1 -0
  31. package/dist/node/Diviner.d.cts +31 -0
  32. package/dist/node/Diviner.d.cts.map +1 -0
  33. package/dist/node/Diviner.d.mts +31 -0
  34. package/dist/node/Diviner.d.mts.map +1 -0
  35. package/dist/node/Diviner.d.ts +31 -0
  36. package/dist/node/Diviner.d.ts.map +1 -0
  37. package/dist/node/Payload.d.cts +53 -0
  38. package/dist/node/Payload.d.cts.map +1 -0
  39. package/dist/node/Payload.d.mts +53 -0
  40. package/dist/node/Payload.d.mts.map +1 -0
  41. package/dist/node/Payload.d.ts +53 -0
  42. package/dist/node/Payload.d.ts.map +1 -0
  43. package/dist/node/Witness.d.cts +20 -0
  44. package/dist/node/Witness.d.cts.map +1 -0
  45. package/dist/node/Witness.d.mts +20 -0
  46. package/dist/node/Witness.d.mts.map +1 -0
  47. package/dist/node/Witness.d.ts +20 -0
  48. package/dist/node/Witness.d.ts.map +1 -0
  49. package/dist/node/index.cjs +194 -0
  50. package/dist/node/index.cjs.map +1 -0
  51. package/dist/node/index.d.cts +4 -0
  52. package/dist/node/index.d.cts.map +1 -0
  53. package/dist/node/index.d.mts +4 -0
  54. package/dist/node/index.d.mts.map +1 -0
  55. package/dist/node/index.d.ts +4 -0
  56. package/dist/node/index.d.ts.map +1 -0
  57. package/dist/node/index.js +157 -0
  58. package/dist/node/index.js.map +1 -0
  59. package/package.json +78 -0
  60. package/src/Diviner.ts +102 -0
  61. package/src/Payload.ts +51 -0
  62. package/src/Witness.ts +106 -0
  63. package/src/index.ts +3 -0
  64. package/src/spec/Erc721Sentinel.json +134 -0
  65. package/src/spec/Erc721TokenSentinel.json +86 -0
  66. package/typedoc.json +5 -0
  67. package/xy.config.ts +14 -0
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@xyo-network/evm-call-witness",
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
+ "@xylabs/assert": "^2.13.20",
14
+ "@xylabs/promise": "^2.13.20",
15
+ "@xyo-network/abstract-diviner": "^2.84.3",
16
+ "@xyo-network/diviner-model": "^2.84.3",
17
+ "@xyo-network/erc1822-witness": "~2.84.1",
18
+ "@xyo-network/erc1967-witness": "~2.84.1",
19
+ "@xyo-network/payload-model": "^2.84.3",
20
+ "@xyo-network/witness-blockchain-abstract": "^2.84.3",
21
+ "ethers": "^6.9.0"
22
+ },
23
+ "devDependencies": {
24
+ "@xylabs/jest-helpers": "^2.13.20",
25
+ "@xylabs/profile": "^2.13.20",
26
+ "@xylabs/ts-scripts-yarn3": "^3.2.19",
27
+ "@xylabs/tsconfig": "^3.2.19",
28
+ "@xyo-network/account": "^2.84.3",
29
+ "@xyo-network/manifest": "^2.84.3",
30
+ "@xyo-network/module-model": "^2.84.3",
31
+ "@xyo-network/open-zeppelin-typechain": "^3.0.5",
32
+ "@xyo-network/sentinel-model": "^2.84.3",
33
+ "@xyo-network/witness-model": "^2.84.3",
34
+ "jest": "^29.7.0",
35
+ "typescript": "^5.3.3"
36
+ },
37
+ "description": "Typescript/Javascript Plugins for XYO Platform",
38
+ "types": "dist/node/index.d.ts",
39
+ "exports": {
40
+ ".": {
41
+ "browser": {
42
+ "require": {
43
+ "types": "./dist/browser/index.d.cts",
44
+ "default": "./dist/browser/index.cjs"
45
+ },
46
+ "import": {
47
+ "types": "./dist/browser/index.d.mts",
48
+ "default": "./dist/browser/index.js"
49
+ }
50
+ },
51
+ "node": {
52
+ "require": {
53
+ "types": "./dist/node/index.d.cts",
54
+ "default": "./dist/node/index.cjs"
55
+ },
56
+ "import": {
57
+ "types": "./dist/node/index.d.mts",
58
+ "default": "./dist/node/index.js"
59
+ }
60
+ }
61
+ },
62
+ "./package.json": "./package.json"
63
+ },
64
+ "main": "dist/node/index.cjs",
65
+ "module": "dist/node/index.js",
66
+ "homepage": "https://xyo.network",
67
+ "license": "LGPL-3.0-only",
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
71
+ "repository": {
72
+ "type": "git",
73
+ "url": "https://github.com/XYOracleNetwork/plugins.git"
74
+ },
75
+ "sideEffects": false,
76
+ "version": "2.84.1",
77
+ "type": "module"
78
+ }
package/src/Diviner.ts ADDED
@@ -0,0 +1,102 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { Promisable } from '@xylabs/promise'
3
+ import { AbstractDiviner } from '@xyo-network/abstract-diviner'
4
+ import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'
5
+ import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'
6
+
7
+ import { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'
8
+
9
+ export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]
10
+
11
+ export const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'
12
+ export type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema
13
+
14
+ export type EvmCallDivinerConfig = DivinerConfig<{
15
+ schema: EvmCallDivinerConfigSchema
16
+ }>
17
+ export type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>
18
+
19
+ export const EvmCallResultsSchema = 'network.xyo.evm.call.results'
20
+ export type EvmCallResultsSchema = typeof EvmCallResultsSchema
21
+
22
+ export type EvmCallResults = Payload<
23
+ {
24
+ address: string
25
+ chainId: string
26
+ results?: Record<
27
+ string,
28
+ {
29
+ args?: unknown[]
30
+ result: unknown
31
+ }
32
+ >
33
+ },
34
+ EvmCallResultsSchema
35
+ >
36
+
37
+ export class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
38
+ static override configSchemas = [EvmCallDivinerConfigSchema]
39
+
40
+ protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {
41
+ const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)
42
+ return asEvmCallSuccess(foundPayload)?.result as TResult | undefined
43
+ }
44
+
45
+ protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {
46
+ const expectedValue = objs.at(0)?.[field] as R
47
+ const didNotMatch = objs.reduce((prev, obj) => {
48
+ return prev || obj[field] !== expectedValue
49
+ }, false)
50
+ return didNotMatch ? undefined : expectedValue
51
+ }
52
+
53
+ protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {
54
+ return {
55
+ address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),
56
+ chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),
57
+ schema: EvmCallResultsSchema,
58
+ }
59
+ }
60
+
61
+ protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {
62
+ const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))
63
+ const addresses = Object.keys(
64
+ callResults.reduce<Record<string, boolean>>((prev, result) => {
65
+ if (result.address) {
66
+ prev[result.address] = true
67
+ }
68
+ return prev
69
+ }, {}),
70
+ )
71
+ const result = await Promise.all(
72
+ addresses.map(async (address) => {
73
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address)
74
+ const results: EvmCallResults = {
75
+ ...{ results: await this.reduceResults(foundCallResults) },
76
+ ...this.contractInfoRequiredFields(foundCallResults),
77
+ }
78
+ return results
79
+ }),
80
+ )
81
+
82
+ return result
83
+ }
84
+
85
+ protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {
86
+ return callResults.reduce<
87
+ Record<
88
+ string,
89
+ {
90
+ args?: unknown[]
91
+ result: unknown
92
+ }
93
+ >
94
+ >((prev, callResult) => {
95
+ const typedCallResult = asEvmCallSuccess(callResult)
96
+ if (typedCallResult) {
97
+ prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }
98
+ }
99
+ return prev
100
+ }, {})
101
+ }
102
+ }
package/src/Payload.ts ADDED
@@ -0,0 +1,51 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ export const EvmCallSchema = 'network.xyo.blockchain.contract.call'
4
+ export type EvmCallSchema = typeof EvmCallSchema
5
+
6
+ export type EvmCall = Payload<
7
+ {
8
+ address?: string
9
+ args?: unknown[]
10
+ block?: number
11
+ functionName?: string
12
+ },
13
+ EvmCallSchema
14
+ >
15
+
16
+ export const EvmCallResultSchema = 'network.xyo.blockchain.contract.call.result'
17
+ export type EvmCallResultSchema = typeof EvmCallResultSchema
18
+
19
+ export type EvmCallResultBase = Payload<
20
+ {
21
+ address: string
22
+ args: unknown[]
23
+ block?: number
24
+ chainId: number
25
+ functionName: string
26
+ implementation?: string
27
+ },
28
+ EvmCallResultSchema
29
+ >
30
+
31
+ export type EvmCallSuccess = EvmCallResultBase & {
32
+ result: unknown
33
+ }
34
+
35
+ export type EvmCallFailure = EvmCallResultBase & {
36
+ error: string
37
+ }
38
+
39
+ export type EvmCallResult = EvmCallSuccess | EvmCallFailure
40
+
41
+ export const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {
42
+ return (payload as EvmCallSuccess | undefined)?.result !== undefined
43
+ }
44
+
45
+ export const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {
46
+ return (payload as EvmCallFailure | undefined)?.error !== undefined
47
+ }
48
+
49
+ export const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)
50
+
51
+ export const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)
package/src/Witness.ts ADDED
@@ -0,0 +1,106 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'
3
+ import { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'
4
+ import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
5
+ import { AbstractBlockchainWitness, BlockchainWitnessConfig, BlockchainWitnessParams } from '@xyo-network/witness-blockchain-abstract'
6
+ import { Contract, JsonFragment } from 'ethers'
7
+
8
+ import { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'
9
+
10
+ export type Abi = string | ReadonlyArray<JsonFragment | string>
11
+
12
+ export const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'
13
+ export type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema
14
+
15
+ export type EvmCallWitnessConfig = BlockchainWitnessConfig<
16
+ {
17
+ abi?: Abi
18
+ address?: string
19
+ args?: unknown[]
20
+ block?: number
21
+ functionName?: string
22
+ },
23
+ EvmCallWitnessConfigSchema
24
+ >
25
+
26
+ export type EvmCallWitnessParams = BlockchainWitnessParams<EvmCallWitnessConfig>
27
+
28
+ const prefixHex = (value?: string) => {
29
+ if (value !== undefined) {
30
+ const lowerValue = value.toLowerCase()
31
+ return lowerValue.startsWith('0x') ? lowerValue : `0x${lowerValue}`
32
+ }
33
+ }
34
+
35
+ const isHexZero = (value?: string) => {
36
+ const prefixedValue = prefixHex(value)
37
+ return prefixedValue === undefined ? true : BigInt(prefixedValue) === 0n
38
+ }
39
+
40
+ export class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractBlockchainWitness<
41
+ TParams,
42
+ EvmCall,
43
+ EvmCallResult
44
+ > {
45
+ static override configSchemas = [EvmCallWitnessConfigSchema]
46
+
47
+ get abi() {
48
+ return assertEx(this.config.abi, 'Missing abi')
49
+ }
50
+
51
+ protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {
52
+ await this.started('throw')
53
+ //calling it here to make sure we rests the cache
54
+ await this.getProviders()
55
+ try {
56
+ const observations = await Promise.all(
57
+ inPayloads.filter(isPayloadOfSchemaType(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
58
+ const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')
59
+ const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')
60
+ const mergedArgs = [...(args ?? this.config.args ?? [])]
61
+
62
+ const provider = await this.getProvider(true, true)
63
+
64
+ const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())
65
+
66
+ //Check if ERC-1967 Upgradeable
67
+ const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)
68
+
69
+ //Check if ERC-1822 Upgradeable
70
+ const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)
71
+
72
+ const implementation = isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation
73
+
74
+ const contract = new Contract(implementation, this.abi, provider)
75
+ let transformedResult: unknown
76
+ try {
77
+ const result = await contract[validatedFunctionName](...mergedArgs)
78
+ transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result
79
+ } catch (ex) {
80
+ //const error = ex as Error & { code: string }
81
+ //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)
82
+ }
83
+ const observation: EvmCallSuccess = {
84
+ address: validatedAddress,
85
+ args: mergedArgs,
86
+ block,
87
+ chainId: Number((await provider.getNetwork()).chainId),
88
+ functionName: validatedFunctionName,
89
+ result: transformedResult,
90
+ schema: EvmCallResultSchema,
91
+ }
92
+ if (implementation !== validatedAddress) {
93
+ observation.implementation = implementation
94
+ }
95
+ console.log(`observation: ${JSON.stringify(observation, null, 2)}`)
96
+ return observation
97
+ }),
98
+ )
99
+ return observations
100
+ } catch (ex) {
101
+ const error = ex as Error
102
+ console.log(`Error [${this.config.name}]: ${error.message}`)
103
+ throw error
104
+ }
105
+ }
106
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './Diviner'
2
+ export * from './Payload'
3
+ export * from './Witness'
@@ -0,0 +1,134 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
3
+ "nodes": [
4
+ {
5
+ "config": {
6
+ "name": "Erc721Info",
7
+ "schema": "network.xyo.node.config"
8
+ },
9
+ "modules": {
10
+ "public": [
11
+ {
12
+ "config": {
13
+ "functionName": "name",
14
+ "labels": {
15
+ "network.xyo.evm.interface": "Erc721"
16
+ },
17
+ "language": "javascript",
18
+ "name": "Erc721NameWitness",
19
+ "params": [],
20
+ "schema": "network.xyo.evm.call.witness.config"
21
+ }
22
+ },
23
+ {
24
+ "config": {
25
+ "functionName": "symbol",
26
+ "labels": {
27
+ "network.xyo.evm.interface": "Erc721"
28
+ },
29
+ "language": "javascript",
30
+ "name": "Erc721SymbolWitness",
31
+ "params": [],
32
+ "schema": "network.xyo.evm.call.witness.config"
33
+ }
34
+ },
35
+ {
36
+ "config": {
37
+ "functionName": "tokenURI",
38
+ "labels": {
39
+ "network.xyo.evm.interface": "Erc721"
40
+ },
41
+ "language": "javascript",
42
+ "name": "Erc721TokenURIWitness",
43
+ "schema": "network.xyo.evm.call.witness.config"
44
+ }
45
+ },
46
+ {
47
+ "config": {
48
+ "functionName": "ownerOf",
49
+ "labels": {
50
+ "network.xyo.evm.interface": "Erc721"
51
+ },
52
+ "language": "javascript",
53
+ "name": "Erc721OwnerOfWitness",
54
+ "schema": "network.xyo.evm.call.witness.config"
55
+ }
56
+ },
57
+ {
58
+ "config": {
59
+ "functionName": "totalSupply",
60
+ "labels": {
61
+ "network.xyo.evm.interface": "Erc721Enumerable"
62
+ },
63
+ "language": "javascript",
64
+ "name": "Erc721TotalSupplyWitness",
65
+ "params": [],
66
+ "schema": "network.xyo.evm.call.witness.config"
67
+ }
68
+ },
69
+ {
70
+ "config": {
71
+ "functionName": "tokenByIndex",
72
+ "labels": {
73
+ "network.xyo.evm.interface": "Erc721Enumerable"
74
+ },
75
+ "language": "javascript",
76
+ "name": "Erc721TokenByIndexWitness",
77
+ "schema": "network.xyo.evm.call.witness.config"
78
+ }
79
+ },
80
+ {
81
+ "config": {
82
+ "functionName": "uri",
83
+ "labels": {
84
+ "network.xyo.evm.interface": "Erc1155"
85
+ },
86
+ "language": "javascript",
87
+ "name": "Erc1155UriWitness",
88
+ "params": [],
89
+ "schema": "network.xyo.evm.call.witness.config"
90
+ }
91
+ },
92
+ {
93
+ "config": {
94
+ "language": "javascript",
95
+ "name": "ContractInfoDiviner",
96
+ "schema": "network.xyo.evm.call.diviner.config"
97
+ }
98
+ },
99
+ {
100
+ "config": {
101
+ "language": "javascript",
102
+ "name": "NftInfoSentinel",
103
+ "schema": "network.xyo.sentinel.config",
104
+ "synchronous": "true",
105
+ "tasks": [
106
+ {
107
+ "input": true,
108
+ "module": "Erc721NameWitness"
109
+ },
110
+ {
111
+ "input": true,
112
+ "module": "Erc721SymbolWitness"
113
+ },
114
+ {
115
+ "input": true,
116
+ "module": "Erc721TotalSupplyWitness"
117
+ },
118
+ {
119
+ "input": [
120
+ "Erc721NameWitness",
121
+ "Erc721SymbolWitness",
122
+ "Erc721TotalSupplyWitness"
123
+ ],
124
+ "module": "ContractInfoDiviner"
125
+ }
126
+ ]
127
+ }
128
+ }
129
+ ]
130
+ }
131
+ }
132
+ ],
133
+ "schema": "network.xyo.manifest"
134
+ }
@@ -0,0 +1,86 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
3
+ "nodes": [
4
+ {
5
+ "config": {
6
+ "name": "Erc721TokenInfo",
7
+ "schema": "network.xyo.node.config"
8
+ },
9
+ "modules": {
10
+ "public": [
11
+ {
12
+ "config": {
13
+ "functionName": "tokenURI",
14
+ "labels": {
15
+ "network.xyo.evm.interface": "ERC721URIStorage"
16
+ },
17
+ "language": "javascript",
18
+ "name": "Erc721TokenURIWitness",
19
+ "schema": "network.xyo.evm.call.witness.config"
20
+ }
21
+ },
22
+ {
23
+ "config": {
24
+ "functionName": "ownerOf",
25
+ "labels": {
26
+ "network.xyo.evm.interface": "Erc721"
27
+ },
28
+ "language": "javascript",
29
+ "name": "Erc721OwnerOfWitness",
30
+ "schema": "network.xyo.evm.call.witness.config"
31
+ }
32
+ },
33
+ {
34
+ "config": {
35
+ "functionName": "uri",
36
+ "labels": {
37
+ "network.xyo.evm.interface": "Erc1155"
38
+ },
39
+ "language": "javascript",
40
+ "name": "Erc1155UriWitness",
41
+ "schema": "network.xyo.evm.call.witness.config"
42
+ }
43
+ },
44
+ {
45
+ "config": {
46
+ "language": "javascript",
47
+ "name": "TokenInfoDiviner",
48
+ "schema": "network.xyo.evm.call.diviner.config"
49
+ }
50
+ },
51
+ {
52
+ "config": {
53
+ "language": "javascript",
54
+ "name": "NftTokenInfoSentinel",
55
+ "schema": "network.xyo.sentinel.config",
56
+ "synchronous": "true",
57
+ "tasks": [
58
+ {
59
+ "input": true,
60
+ "module": "Erc721TokenURIWitness"
61
+ },
62
+ {
63
+ "input": true,
64
+ "module": "Erc721OwnerOfWitness"
65
+ },
66
+ {
67
+ "input": true,
68
+ "module": "Erc1155UriWitness"
69
+ },
70
+ {
71
+ "input": [
72
+ "Erc721TokenURIWitness",
73
+ "Erc721OwnerOfWitness",
74
+ "Erc1155UriWitness"
75
+ ],
76
+ "module": "TokenInfoDiviner"
77
+ }
78
+ ]
79
+ }
80
+ }
81
+ ]
82
+ }
83
+ }
84
+ ],
85
+ "schema": "network.xyo.manifest"
86
+ }
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
+ }
package/xy.config.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
+ const config: XyTsupConfig = {
3
+ compile: {
4
+ browser: {
5
+ src: true,
6
+ },
7
+ node: {
8
+ src: true,
9
+ },
10
+ },
11
+ }
12
+
13
+ // eslint-disable-next-line import/no-default-export
14
+ export default config