@xyo-network/crypto-contract-function-read-plugin 2.84.0 → 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.
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ CryptoContractDiviner: () => CryptoContractDiviner,
24
+ CryptoContractFunctionReadWitness: () => CryptoContractFunctionReadWitness,
25
+ CryptoContractFunctionReadWitnessPlugin: () => CryptoContractFunctionReadWitnessPlugin,
26
+ default: () => src_default
27
+ });
28
+ module.exports = __toCommonJS(src_exports);
29
+
30
+ // src/Plugin.ts
31
+ var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
32
+ var import_payload_model2 = require("@xyo-network/payload-model");
33
+ var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
34
+
35
+ // src/Witness.ts
36
+ var import_assert = require("@xylabs/assert");
37
+ var import_abstract_witness = require("@xyo-network/abstract-witness");
38
+ var import_crypto_contract_function_read_payload_plugin = require("@xyo-network/crypto-contract-function-read-payload-plugin");
39
+ var import_payload_model = require("@xyo-network/payload-model");
40
+ var import_ethers = require("ethers");
41
+ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.AbstractWitness {
42
+ static configSchemas = [import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionReadWitnessConfigSchema];
43
+ get abi() {
44
+ return (0, import_assert.assertEx)(this.config.abi, "Missing abi");
45
+ }
46
+ async observeHandler(inPayloads = []) {
47
+ await this.started("throw");
48
+ try {
49
+ const observations = await Promise.all(
50
+ inPayloads.filter((0, import_payload_model.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
51
+ const { providers } = this.params;
52
+ const provider = providers[Date.now() % providers.length];
53
+ const validatedAddress = (0, import_assert.assertEx)(address ?? this.config.address, "Missing address");
54
+ const validatedFunctionName = (0, import_assert.assertEx)(functionName ?? this.config.functionName, "Missing address");
55
+ const mergedArgs = [...args ?? this.config.args ?? []];
56
+ const contract = new import_ethers.Contract(validatedAddress, this.abi, provider);
57
+ try {
58
+ const result = await contract[validatedFunctionName](...mergedArgs);
59
+ const transformedResult = typeof result === "bigint" ? result.toString(16) : result;
60
+ const observation = {
61
+ address: validatedAddress,
62
+ args: mergedArgs,
63
+ chainId: Number((await provider.getNetwork()).chainId),
64
+ functionName: validatedFunctionName,
65
+ result: transformedResult,
66
+ schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
67
+ };
68
+ return observation;
69
+ } catch (ex) {
70
+ const error = ex;
71
+ console.log(`Error [${this.config.name}]: ${error.code}`);
72
+ const observation = {
73
+ address: validatedAddress,
74
+ args: mergedArgs,
75
+ chainId: Number((await provider.getNetwork()).chainId),
76
+ error: error.code,
77
+ functionName: validatedFunctionName,
78
+ schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
79
+ };
80
+ return observation;
81
+ }
82
+ })
83
+ );
84
+ return observations;
85
+ } catch (ex) {
86
+ const error = ex;
87
+ console.log(`Error [${this.config.name}]: ${error.message}`);
88
+ throw error;
89
+ }
90
+ }
91
+ };
92
+
93
+ // src/Plugin.ts
94
+ var CryptoContractFunctionReadWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
95
+ { required: { [import_crypto_nft_payload_plugin.NftSchema]: 1 }, schema: import_payload_model2.PayloadSetSchema },
96
+ {
97
+ witness: async (params) => {
98
+ const result = await CryptoContractFunctionReadWitness.create(params);
99
+ return result;
100
+ }
101
+ }
102
+ );
103
+
104
+ // src/Diviner/Diviner.ts
105
+ var import_assert2 = require("@xylabs/assert");
106
+ var import_abstract_diviner = require("@xyo-network/abstract-diviner");
107
+ var import_crypto_contract_function_read_payload_plugin2 = require("@xyo-network/crypto-contract-function-read-payload-plugin");
108
+ var import_payload_model3 = require("@xyo-network/payload-model");
109
+ var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract_diviner.AbstractDiviner {
110
+ static configSchemas = [import_crypto_contract_function_read_payload_plugin2.CryptoContractDivinerConfigSchema];
111
+ static labels = import_crypto_contract_function_read_payload_plugin2.CryptoContractDivinerLabels;
112
+ static findCallResult(address, functionName, payloads) {
113
+ var _a;
114
+ const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
115
+ return (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(foundPayload)) == null ? void 0 : _a.result;
116
+ }
117
+ static matchingExistingField(objs, field) {
118
+ var _a;
119
+ const expectedValue = (_a = objs.at(0)) == null ? void 0 : _a[field];
120
+ const didNotMatch = objs.reduce((prev, obj) => {
121
+ return prev || obj[field] !== expectedValue;
122
+ }, false);
123
+ return didNotMatch ? void 0 : expectedValue;
124
+ }
125
+ contractInfoRequiredFields(callResults) {
126
+ return {
127
+ address: (0, import_assert2.assertEx)(_CryptoContractDiviner.matchingExistingField(callResults, "address"), "Mismatched address"),
128
+ chainId: (0, import_assert2.assertEx)(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId"),
129
+ schema: import_crypto_contract_function_read_payload_plugin2.ContractInfoSchema
130
+ };
131
+ }
132
+ async divineHandler(inPayloads = []) {
133
+ const callResults = inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallResultSchema));
134
+ const addresses = Object.keys(
135
+ callResults.reduce((prev, result2) => {
136
+ if (result2.address) {
137
+ prev[result2.address] = true;
138
+ }
139
+ return prev;
140
+ }, {})
141
+ );
142
+ const result = await Promise.all(
143
+ addresses.map(async (address) => {
144
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address);
145
+ const info = {
146
+ ...{ results: await this.reduceResults(foundCallResults) },
147
+ ...this.contractInfoRequiredFields(foundCallResults)
148
+ };
149
+ return info;
150
+ })
151
+ );
152
+ return result;
153
+ }
154
+ reduceResults(callResults) {
155
+ return callResults.reduce((prev, callResult) => {
156
+ var _a;
157
+ prev[callResult.functionName] = (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(callResult)) == null ? void 0 : _a.result;
158
+ return prev;
159
+ }, {});
160
+ }
161
+ };
162
+
163
+ // src/index.ts
164
+ var src_default = CryptoContractFunctionReadWitnessPlugin;
165
+ // Annotate the CommonJS export names for ESM import in node:
166
+ 0 && (module.exports = {
167
+ CryptoContractDiviner,
168
+ CryptoContractFunctionReadWitness,
169
+ CryptoContractFunctionReadWitnessPlugin
170
+ });
171
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/Diviner/Diviner.ts"],"sourcesContent":["import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\n const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const contract = new Contract(validatedAddress, this.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n static labels: CryptoContractDivinerLabels = CryptoContractDivinerLabels\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_payload_model","result"]}
@@ -1,59 +1,34 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- CryptoContractDiviner: () => CryptoContractDiviner,
24
- CryptoContractFunctionReadWitness: () => CryptoContractFunctionReadWitness,
25
- CryptoContractFunctionReadWitnessPlugin: () => CryptoContractFunctionReadWitnessPlugin,
26
- default: () => src_default
27
- });
28
- module.exports = __toCommonJS(src_exports);
29
-
30
1
  // src/Plugin.ts
31
- var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
32
- var import_payload_model2 = require("@xyo-network/payload-model");
33
- var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
2
+ import { NftSchema } from "@xyo-network/crypto-nft-payload-plugin";
3
+ import { PayloadSetSchema } from "@xyo-network/payload-model";
4
+ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
34
5
 
35
6
  // src/Witness.ts
36
- var import_assert = require("@xylabs/assert");
37
- var import_abstract_witness = require("@xyo-network/abstract-witness");
38
- var import_crypto_contract_function_read_payload_plugin = require("@xyo-network/crypto-contract-function-read-payload-plugin");
39
- var import_payload_model = require("@xyo-network/payload-model");
40
- var import_ethers = require("ethers");
41
- var CryptoContractFunctionReadWitness = class extends import_abstract_witness.AbstractWitness {
42
- static configSchemas = [import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionReadWitnessConfigSchema];
7
+ import { assertEx } from "@xylabs/assert";
8
+ import { AbstractWitness } from "@xyo-network/abstract-witness";
9
+ import {
10
+ CryptoContractFunctionCallResultSchema,
11
+ CryptoContractFunctionCallSchema,
12
+ CryptoContractFunctionReadWitnessConfigSchema
13
+ } from "@xyo-network/crypto-contract-function-read-payload-plugin";
14
+ import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
15
+ import { Contract } from "ethers";
16
+ var CryptoContractFunctionReadWitness = class extends AbstractWitness {
17
+ static configSchemas = [CryptoContractFunctionReadWitnessConfigSchema];
43
18
  get abi() {
44
- return (0, import_assert.assertEx)(this.config.abi, "Missing abi");
19
+ return assertEx(this.config.abi, "Missing abi");
45
20
  }
46
21
  async observeHandler(inPayloads = []) {
47
22
  await this.started("throw");
48
23
  try {
49
24
  const observations = await Promise.all(
50
- inPayloads.filter((0, import_payload_model.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
25
+ inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
51
26
  const { providers } = this.params;
52
27
  const provider = providers[Date.now() % providers.length];
53
- const validatedAddress = (0, import_assert.assertEx)(address ?? this.config.address, "Missing address");
54
- const validatedFunctionName = (0, import_assert.assertEx)(functionName ?? this.config.functionName, "Missing address");
28
+ const validatedAddress = assertEx(address ?? this.config.address, "Missing address");
29
+ const validatedFunctionName = assertEx(functionName ?? this.config.functionName, "Missing address");
55
30
  const mergedArgs = [...args ?? this.config.args ?? []];
56
- const contract = new import_ethers.Contract(validatedAddress, this.abi, provider);
31
+ const contract = new Contract(validatedAddress, this.abi, provider);
57
32
  try {
58
33
  const result = await contract[validatedFunctionName](...mergedArgs);
59
34
  const transformedResult = typeof result === "bigint" ? result.toString(16) : result;
@@ -63,7 +38,7 @@ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.Ab
63
38
  chainId: Number((await provider.getNetwork()).chainId),
64
39
  functionName: validatedFunctionName,
65
40
  result: transformedResult,
66
- schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
41
+ schema: CryptoContractFunctionCallResultSchema
67
42
  };
68
43
  return observation;
69
44
  } catch (ex) {
@@ -75,7 +50,7 @@ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.Ab
75
50
  chainId: Number((await provider.getNetwork()).chainId),
76
51
  error: error.code,
77
52
  functionName: validatedFunctionName,
78
- schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
53
+ schema: CryptoContractFunctionCallResultSchema
79
54
  };
80
55
  return observation;
81
56
  }
@@ -91,8 +66,8 @@ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.Ab
91
66
  };
92
67
 
93
68
  // src/Plugin.ts
94
- var CryptoContractFunctionReadWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
95
- { required: { [import_crypto_nft_payload_plugin.NftSchema]: 1 }, schema: import_payload_model2.PayloadSetSchema },
69
+ var CryptoContractFunctionReadWitnessPlugin = () => createPayloadSetWitnessPlugin(
70
+ { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
96
71
  {
97
72
  witness: async (params) => {
98
73
  const result = await CryptoContractFunctionReadWitness.create(params);
@@ -102,17 +77,23 @@ var CryptoContractFunctionReadWitnessPlugin = () => (0, import_payloadset_plugin
102
77
  );
103
78
 
104
79
  // src/Diviner/Diviner.ts
105
- var import_assert2 = require("@xylabs/assert");
106
- var import_abstract_diviner = require("@xyo-network/abstract-diviner");
107
- var import_crypto_contract_function_read_payload_plugin2 = require("@xyo-network/crypto-contract-function-read-payload-plugin");
108
- var import_payload_model3 = require("@xyo-network/payload-model");
109
- var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract_diviner.AbstractDiviner {
110
- static configSchemas = [import_crypto_contract_function_read_payload_plugin2.CryptoContractDivinerConfigSchema];
111
- static labels = import_crypto_contract_function_read_payload_plugin2.CryptoContractDivinerLabels;
80
+ import { assertEx as assertEx2 } from "@xylabs/assert";
81
+ import { AbstractDiviner } from "@xyo-network/abstract-diviner";
82
+ import {
83
+ asCryptoContractFunctionCallSuccess,
84
+ ContractInfoSchema,
85
+ CryptoContractDivinerConfigSchema,
86
+ CryptoContractDivinerLabels,
87
+ CryptoContractFunctionCallResultSchema as CryptoContractFunctionCallResultSchema2
88
+ } from "@xyo-network/crypto-contract-function-read-payload-plugin";
89
+ import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
90
+ var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner {
91
+ static configSchemas = [CryptoContractDivinerConfigSchema];
92
+ static labels = CryptoContractDivinerLabels;
112
93
  static findCallResult(address, functionName, payloads) {
113
94
  var _a;
114
95
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
115
- return (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(foundPayload)) == null ? void 0 : _a.result;
96
+ return (_a = asCryptoContractFunctionCallSuccess(foundPayload)) == null ? void 0 : _a.result;
116
97
  }
117
98
  static matchingExistingField(objs, field) {
118
99
  var _a;
@@ -124,13 +105,13 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract
124
105
  }
125
106
  contractInfoRequiredFields(callResults) {
126
107
  return {
127
- address: (0, import_assert2.assertEx)(_CryptoContractDiviner.matchingExistingField(callResults, "address"), "Mismatched address"),
128
- chainId: (0, import_assert2.assertEx)(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId"),
129
- schema: import_crypto_contract_function_read_payload_plugin2.ContractInfoSchema
108
+ address: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "address"), "Mismatched address"),
109
+ chainId: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId"),
110
+ schema: ContractInfoSchema
130
111
  };
131
112
  }
132
113
  async divineHandler(inPayloads = []) {
133
- const callResults = inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallResultSchema));
114
+ const callResults = inPayloads.filter(isPayloadOfSchemaType2(CryptoContractFunctionCallResultSchema2));
134
115
  const addresses = Object.keys(
135
116
  callResults.reduce((prev, result2) => {
136
117
  if (result2.address) {
@@ -154,7 +135,7 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract
154
135
  reduceResults(callResults) {
155
136
  return callResults.reduce((prev, callResult) => {
156
137
  var _a;
157
- prev[callResult.functionName] = (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(callResult)) == null ? void 0 : _a.result;
138
+ prev[callResult.functionName] = (_a = asCryptoContractFunctionCallSuccess(callResult)) == null ? void 0 : _a.result;
158
139
  return prev;
159
140
  }, {});
160
141
  }
@@ -162,10 +143,10 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract
162
143
 
163
144
  // src/index.ts
164
145
  var src_default = CryptoContractFunctionReadWitnessPlugin;
165
- // Annotate the CommonJS export names for ESM import in node:
166
- 0 && (module.exports = {
146
+ export {
167
147
  CryptoContractDiviner,
168
148
  CryptoContractFunctionReadWitness,
169
- CryptoContractFunctionReadWitnessPlugin
170
- });
149
+ CryptoContractFunctionReadWitnessPlugin,
150
+ src_default as default
151
+ };
171
152
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/Diviner/Diviner.ts"],"sourcesContent":["import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\n const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const contract = new Contract(validatedAddress, this.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n static labels: CryptoContractDivinerLabels = CryptoContractDivinerLabels\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_payload_model","result"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/Diviner/Diviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\n const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const contract = new Contract(validatedAddress, this.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n static labels: CryptoContractDivinerLabels = CryptoContractDivinerLabels\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":"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","names":["assertEx","CryptoContractFunctionCallResultSchema","isPayloadOfSchemaType","result"]}
package/package.json CHANGED
@@ -12,41 +12,40 @@
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.13.20",
14
14
  "@xylabs/promise": "^2.13.20",
15
- "@xyo-network/abstract-diviner": "^2.84.0",
16
- "@xyo-network/abstract-witness": "^2.84.0",
17
- "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.84.0",
18
- "@xyo-network/crypto-nft-payload-plugin": "~2.84.0",
19
- "@xyo-network/module-model": "^2.84.0",
20
- "@xyo-network/payload-model": "^2.84.0",
21
- "@xyo-network/payloadset-plugin": "^2.84.0",
22
- "@xyo-network/witness-model": "^2.84.0",
15
+ "@xyo-network/abstract-diviner": "^2.84.3",
16
+ "@xyo-network/abstract-witness": "^2.84.3",
17
+ "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.84.1",
18
+ "@xyo-network/crypto-nft-payload-plugin": "~2.84.1",
19
+ "@xyo-network/module-model": "^2.84.3",
20
+ "@xyo-network/payload-model": "^2.84.3",
21
+ "@xyo-network/payloadset-plugin": "^2.84.3",
22
+ "@xyo-network/witness-model": "^2.84.3",
23
23
  "ethers": "^6.9.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@xylabs/hex": "^2.13.20",
27
27
  "@xylabs/jest-helpers": "^2.13.20",
28
- "@xylabs/ts-scripts-yarn3": "^3.2.10",
29
- "@xylabs/tsconfig": "^3.2.10",
30
- "@xyo-network/account": "^2.84.0",
31
- "@xyo-network/diviner-boundwitness-memory": "^2.84.0",
32
- "@xyo-network/diviner-jsonpatch": "^2.84.0",
33
- "@xyo-network/diviner-model": "^2.84.0",
34
- "@xyo-network/diviner-payload-memory": "^2.84.0",
35
- "@xyo-network/diviner-payload-model": "^2.84.0",
36
- "@xyo-network/diviner-temporal-indexing": "^2.83.0",
37
- "@xyo-network/manifest": "^2.84.0",
38
- "@xyo-network/memory-archivist": "^2.84.0",
39
- "@xyo-network/node-memory": "^2.84.0",
28
+ "@xylabs/ts-scripts-yarn3": "^3.2.19",
29
+ "@xylabs/tsconfig": "^3.2.19",
30
+ "@xyo-network/account": "^2.84.3",
31
+ "@xyo-network/diviner-boundwitness-memory": "^2.84.3",
32
+ "@xyo-network/diviner-jsonpatch": "^2.84.3",
33
+ "@xyo-network/diviner-model": "^2.84.3",
34
+ "@xyo-network/diviner-payload-memory": "^2.84.3",
35
+ "@xyo-network/diviner-payload-model": "^2.84.3",
36
+ "@xyo-network/diviner-temporal-indexing": "^2.84.3",
37
+ "@xyo-network/manifest": "^2.84.3",
38
+ "@xyo-network/memory-archivist": "^2.84.3",
39
+ "@xyo-network/node-memory": "^2.84.3",
40
40
  "@xyo-network/open-zeppelin-typechain": "^3.0.5",
41
- "@xyo-network/sentinel-model": "^2.84.0",
42
- "@xyo-network/witness-blockchain-abstract": "^2.84.0",
43
- "@xyo-network/witness-timestamp": "^2.84.0",
41
+ "@xyo-network/sentinel-model": "^2.84.3",
42
+ "@xyo-network/witness-blockchain-abstract": "^2.84.3",
43
+ "@xyo-network/witness-timestamp": "^2.84.3",
44
44
  "async-mutex": "^0.4.0",
45
45
  "jest": "^29.7.0",
46
46
  "typescript": "^5.3.3"
47
47
  },
48
48
  "description": "Typescript/Javascript Plugins for XYO Platform",
49
- "docs": "dist/docs.json",
50
49
  "types": "dist/node/index.d.ts",
51
50
  "exports": {
52
51
  ".": {
@@ -62,19 +61,19 @@
62
61
  },
63
62
  "node": {
64
63
  "require": {
65
- "types": "./dist/node/index.d.ts",
66
- "default": "./dist/node/index.js"
64
+ "types": "./dist/node/index.d.cts",
65
+ "default": "./dist/node/index.cjs"
67
66
  },
68
67
  "import": {
69
68
  "types": "./dist/node/index.d.mts",
70
- "default": "./dist/node/index.mjs"
69
+ "default": "./dist/node/index.js"
71
70
  }
72
71
  }
73
72
  },
74
73
  "./package.json": "./package.json"
75
74
  },
76
- "main": "dist/node/index.js",
77
- "module": "dist/node/index.mjs",
75
+ "main": "dist/node/index.cjs",
76
+ "module": "dist/node/index.js",
78
77
  "homepage": "https://xyo.network",
79
78
  "license": "LGPL-3.0-only",
80
79
  "publishConfig": {
@@ -85,5 +84,6 @@
85
84
  "url": "https://github.com/XYOracleNetwork/plugins.git"
86
85
  },
87
86
  "sideEffects": false,
88
- "version": "2.84.0"
87
+ "version": "2.84.1",
88
+ "type": "module"
89
89
  }
@@ -1,152 +0,0 @@
1
- // src/Plugin.ts
2
- import { NftSchema } from "@xyo-network/crypto-nft-payload-plugin";
3
- import { PayloadSetSchema } from "@xyo-network/payload-model";
4
- import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
5
-
6
- // src/Witness.ts
7
- import { assertEx } from "@xylabs/assert";
8
- import { AbstractWitness } from "@xyo-network/abstract-witness";
9
- import {
10
- CryptoContractFunctionCallResultSchema,
11
- CryptoContractFunctionCallSchema,
12
- CryptoContractFunctionReadWitnessConfigSchema
13
- } from "@xyo-network/crypto-contract-function-read-payload-plugin";
14
- import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
15
- import { Contract } from "ethers";
16
- var CryptoContractFunctionReadWitness = class extends AbstractWitness {
17
- static configSchemas = [CryptoContractFunctionReadWitnessConfigSchema];
18
- get abi() {
19
- return assertEx(this.config.abi, "Missing abi");
20
- }
21
- async observeHandler(inPayloads = []) {
22
- await this.started("throw");
23
- try {
24
- const observations = await Promise.all(
25
- inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
26
- const { providers } = this.params;
27
- const provider = providers[Date.now() % providers.length];
28
- const validatedAddress = assertEx(address ?? this.config.address, "Missing address");
29
- const validatedFunctionName = assertEx(functionName ?? this.config.functionName, "Missing address");
30
- const mergedArgs = [...args ?? this.config.args ?? []];
31
- const contract = new Contract(validatedAddress, this.abi, provider);
32
- try {
33
- const result = await contract[validatedFunctionName](...mergedArgs);
34
- const transformedResult = typeof result === "bigint" ? result.toString(16) : result;
35
- const observation = {
36
- address: validatedAddress,
37
- args: mergedArgs,
38
- chainId: Number((await provider.getNetwork()).chainId),
39
- functionName: validatedFunctionName,
40
- result: transformedResult,
41
- schema: CryptoContractFunctionCallResultSchema
42
- };
43
- return observation;
44
- } catch (ex) {
45
- const error = ex;
46
- console.log(`Error [${this.config.name}]: ${error.code}`);
47
- const observation = {
48
- address: validatedAddress,
49
- args: mergedArgs,
50
- chainId: Number((await provider.getNetwork()).chainId),
51
- error: error.code,
52
- functionName: validatedFunctionName,
53
- schema: CryptoContractFunctionCallResultSchema
54
- };
55
- return observation;
56
- }
57
- })
58
- );
59
- return observations;
60
- } catch (ex) {
61
- const error = ex;
62
- console.log(`Error [${this.config.name}]: ${error.message}`);
63
- throw error;
64
- }
65
- }
66
- };
67
-
68
- // src/Plugin.ts
69
- var CryptoContractFunctionReadWitnessPlugin = () => createPayloadSetWitnessPlugin(
70
- { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
71
- {
72
- witness: async (params) => {
73
- const result = await CryptoContractFunctionReadWitness.create(params);
74
- return result;
75
- }
76
- }
77
- );
78
-
79
- // src/Diviner/Diviner.ts
80
- import { assertEx as assertEx2 } from "@xylabs/assert";
81
- import { AbstractDiviner } from "@xyo-network/abstract-diviner";
82
- import {
83
- asCryptoContractFunctionCallSuccess,
84
- ContractInfoSchema,
85
- CryptoContractDivinerConfigSchema,
86
- CryptoContractDivinerLabels,
87
- CryptoContractFunctionCallResultSchema as CryptoContractFunctionCallResultSchema2
88
- } from "@xyo-network/crypto-contract-function-read-payload-plugin";
89
- import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
90
- var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner {
91
- static configSchemas = [CryptoContractDivinerConfigSchema];
92
- static labels = CryptoContractDivinerLabels;
93
- static findCallResult(address, functionName, payloads) {
94
- var _a;
95
- const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
96
- return (_a = asCryptoContractFunctionCallSuccess(foundPayload)) == null ? void 0 : _a.result;
97
- }
98
- static matchingExistingField(objs, field) {
99
- var _a;
100
- const expectedValue = (_a = objs.at(0)) == null ? void 0 : _a[field];
101
- const didNotMatch = objs.reduce((prev, obj) => {
102
- return prev || obj[field] !== expectedValue;
103
- }, false);
104
- return didNotMatch ? void 0 : expectedValue;
105
- }
106
- contractInfoRequiredFields(callResults) {
107
- return {
108
- address: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "address"), "Mismatched address"),
109
- chainId: assertEx2(_CryptoContractDiviner.matchingExistingField(callResults, "chainId"), "Mismatched chainId"),
110
- schema: ContractInfoSchema
111
- };
112
- }
113
- async divineHandler(inPayloads = []) {
114
- const callResults = inPayloads.filter(isPayloadOfSchemaType2(CryptoContractFunctionCallResultSchema2));
115
- const addresses = Object.keys(
116
- callResults.reduce((prev, result2) => {
117
- if (result2.address) {
118
- prev[result2.address] = true;
119
- }
120
- return prev;
121
- }, {})
122
- );
123
- const result = await Promise.all(
124
- addresses.map(async (address) => {
125
- const foundCallResults = callResults.filter((callResult) => callResult.address === address);
126
- const info = {
127
- ...{ results: await this.reduceResults(foundCallResults) },
128
- ...this.contractInfoRequiredFields(foundCallResults)
129
- };
130
- return info;
131
- })
132
- );
133
- return result;
134
- }
135
- reduceResults(callResults) {
136
- return callResults.reduce((prev, callResult) => {
137
- var _a;
138
- prev[callResult.functionName] = (_a = asCryptoContractFunctionCallSuccess(callResult)) == null ? void 0 : _a.result;
139
- return prev;
140
- }, {});
141
- }
142
- };
143
-
144
- // src/index.ts
145
- var src_default = CryptoContractFunctionReadWitnessPlugin;
146
- export {
147
- CryptoContractDiviner,
148
- CryptoContractFunctionReadWitness,
149
- CryptoContractFunctionReadWitnessPlugin,
150
- src_default as default
151
- };
152
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/Diviner/Diviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\n const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const contract = new Contract(validatedAddress, this.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).chainId),\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n static labels: CryptoContractDivinerLabels = CryptoContractDivinerLabels\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":"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","names":["assertEx","CryptoContractFunctionCallResultSchema","isPayloadOfSchemaType","result"]}