@dedot/codegen 0.18.8 → 1.0.0

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 (91) hide show
  1. package/chaintypes/generator/ConstsGen.js +1 -1
  2. package/chaintypes/generator/ErrorsGen.js +3 -3
  3. package/chaintypes/generator/EventsGen.js +3 -3
  4. package/chaintypes/generator/IndexGen.d.ts +1 -0
  5. package/chaintypes/generator/IndexGen.js +34 -2
  6. package/chaintypes/generator/JsonRpcGen.js +1 -1
  7. package/chaintypes/generator/QueryGen.js +4 -4
  8. package/chaintypes/generator/RuntimeApisGen.js +5 -5
  9. package/chaintypes/generator/TxGen.js +6 -10
  10. package/chaintypes/generator/ViewFunctionsGen.js +3 -3
  11. package/chaintypes/index.d.ts +22 -3
  12. package/chaintypes/index.js +63 -13
  13. package/chaintypes/templates/consts.hbs +1 -1
  14. package/chaintypes/templates/errors.hbs +1 -1
  15. package/chaintypes/templates/events.hbs +1 -1
  16. package/chaintypes/templates/index.hbs +10 -14
  17. package/chaintypes/templates/json-rpc.hbs +3 -3
  18. package/chaintypes/templates/query.hbs +1 -1
  19. package/chaintypes/templates/runtime.hbs +1 -1
  20. package/chaintypes/templates/tx.hbs +1 -1
  21. package/chaintypes/templates/view-functions.hbs +1 -1
  22. package/cjs/chaintypes/generator/ConstsGen.js +1 -1
  23. package/cjs/chaintypes/generator/ErrorsGen.js +3 -3
  24. package/cjs/chaintypes/generator/EventsGen.js +3 -3
  25. package/cjs/chaintypes/generator/IndexGen.js +34 -2
  26. package/cjs/chaintypes/generator/JsonRpcGen.js +1 -1
  27. package/cjs/chaintypes/generator/QueryGen.js +4 -4
  28. package/cjs/chaintypes/generator/RuntimeApisGen.js +5 -5
  29. package/cjs/chaintypes/generator/TxGen.js +6 -10
  30. package/cjs/chaintypes/generator/ViewFunctionsGen.js +3 -3
  31. package/cjs/chaintypes/index.js +61 -11
  32. package/cjs/chaintypes/templates/consts.hbs +1 -1
  33. package/cjs/chaintypes/templates/errors.hbs +1 -1
  34. package/cjs/chaintypes/templates/events.hbs +1 -1
  35. package/cjs/chaintypes/templates/index.hbs +10 -14
  36. package/cjs/chaintypes/templates/json-rpc.hbs +3 -3
  37. package/cjs/chaintypes/templates/query.hbs +1 -1
  38. package/cjs/chaintypes/templates/runtime.hbs +1 -1
  39. package/cjs/chaintypes/templates/tx.hbs +1 -1
  40. package/cjs/chaintypes/templates/view-functions.hbs +1 -1
  41. package/cjs/index.js +3 -0
  42. package/cjs/sol/generator/ConstructorQueryGen.js +1 -1
  43. package/cjs/sol/generator/ConstructorTxGen.js +1 -1
  44. package/cjs/sol/generator/IndexGen.js +1 -1
  45. package/cjs/sol/generator/QueryGen.js +1 -1
  46. package/cjs/sol/generator/TxGen.js +1 -1
  47. package/cjs/sol/templates/constructor-query.hbs +1 -1
  48. package/cjs/sol/templates/constructor-tx.hbs +1 -2
  49. package/cjs/sol/templates/events.hbs +1 -1
  50. package/cjs/sol/templates/index.hbs +7 -7
  51. package/cjs/sol/templates/query.hbs +1 -1
  52. package/cjs/sol/templates/tx.hbs +1 -1
  53. package/cjs/typink/generator/ConstructorQueryGen.js +1 -1
  54. package/cjs/typink/generator/ConstructorTxGen.js +1 -1
  55. package/cjs/typink/generator/IndexGen.js +1 -1
  56. package/cjs/typink/generator/QueryGen.js +1 -1
  57. package/cjs/typink/generator/TxGen.js +1 -1
  58. package/cjs/typink/templates/constructor-query.hbs +1 -1
  59. package/cjs/typink/templates/constructor-tx.hbs +1 -2
  60. package/cjs/typink/templates/events.hbs +1 -1
  61. package/cjs/typink/templates/index.hbs +7 -7
  62. package/cjs/typink/templates/query.hbs +1 -1
  63. package/cjs/typink/templates/tx.hbs +1 -1
  64. package/cjs/utils.js +27 -1
  65. package/index.d.ts +1 -0
  66. package/index.js +1 -0
  67. package/package.json +11 -11
  68. package/sol/generator/ConstructorQueryGen.js +1 -1
  69. package/sol/generator/ConstructorTxGen.js +1 -1
  70. package/sol/generator/IndexGen.js +1 -1
  71. package/sol/generator/QueryGen.js +1 -1
  72. package/sol/generator/TxGen.js +1 -1
  73. package/sol/templates/constructor-query.hbs +1 -1
  74. package/sol/templates/constructor-tx.hbs +1 -2
  75. package/sol/templates/events.hbs +1 -1
  76. package/sol/templates/index.hbs +7 -7
  77. package/sol/templates/query.hbs +1 -1
  78. package/sol/templates/tx.hbs +1 -1
  79. package/typink/generator/ConstructorQueryGen.js +1 -1
  80. package/typink/generator/ConstructorTxGen.js +1 -1
  81. package/typink/generator/IndexGen.js +1 -1
  82. package/typink/generator/QueryGen.js +1 -1
  83. package/typink/generator/TxGen.js +1 -1
  84. package/typink/templates/constructor-query.hbs +1 -1
  85. package/typink/templates/constructor-tx.hbs +1 -2
  86. package/typink/templates/events.hbs +1 -1
  87. package/typink/templates/index.hbs +7 -7
  88. package/typink/templates/query.hbs +1 -1
  89. package/typink/templates/tx.hbs +1 -1
  90. package/utils.d.ts +9 -0
  91. package/utils.js +25 -0
package/cjs/utils.js CHANGED
@@ -26,7 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getVariantDeprecationComment = exports.getDeprecationComment = exports.isNativeType = exports.isReservedWord = exports.compileTemplate = exports.beautifySourceCode = exports.commentBlock = exports.TUPLE_TYPE_REGEX = exports.WRAPPER_TYPE_REGEX = void 0;
29
+ exports.resolveBlockHash = exports.getVariantDeprecationComment = exports.getDeprecationComment = exports.isNativeType = exports.isReservedWord = exports.compileTemplate = exports.beautifySourceCode = exports.commentBlock = exports.TUPLE_TYPE_REGEX = exports.WRAPPER_TYPE_REGEX = void 0;
30
+ const utils_1 = require("@dedot/utils");
30
31
  const fs = __importStar(require("fs"));
31
32
  const handlebars_1 = __importDefault(require("handlebars"));
32
33
  const path = __importStar(require("path"));
@@ -51,6 +52,7 @@ exports.commentBlock = commentBlock;
51
52
  const beautifySourceCode = async (source) => {
52
53
  const prettierOptions = await prettier.resolveConfig(path.resolve((0, dirname_js_1.currentDirname)(), '../../../.prettierrc.cjs'));
53
54
  return prettier.format(source, { parser: 'babel-ts', ...prettierOptions });
55
+ // return source;
54
56
  };
55
57
  exports.beautifySourceCode = beautifySourceCode;
56
58
  const compileTemplate = (templateFile) => {
@@ -141,3 +143,27 @@ const getVariantDeprecationComment = (deprecationInfo, variantIndex) => {
141
143
  }
142
144
  };
143
145
  exports.getVariantDeprecationComment = getVariantDeprecationComment;
146
+ /**
147
+ * Resolve block hash from either a block hash or block number
148
+ * @param client - The API client
149
+ * @param at - Block hash (0x...) or block number (number)
150
+ * @returns The resolved block hash
151
+ */
152
+ async function resolveBlockHash(client, at) {
153
+ // Check if it's a hex string (block hash)
154
+ if ((0, utils_1.isHex)(at)) {
155
+ return at;
156
+ }
157
+ // Try to parse as a number (block height)
158
+ const blockNumber = parseInt(at, 10);
159
+ if (isNaN(blockNumber) || blockNumber < 0) {
160
+ throw new utils_1.DedotError(`Invalid block specifier: ${at}. Must be a block hash (0x...) or block number.`);
161
+ }
162
+ // Resolve block number to block hash
163
+ const blockHash = await client.rpc.chain_getBlockHash(blockNumber);
164
+ if (!blockHash) {
165
+ throw new utils_1.DedotError(`Block not found at height: ${blockNumber}`);
166
+ }
167
+ return blockHash;
168
+ }
169
+ exports.resolveBlockHash = resolveBlockHash;
package/index.d.ts CHANGED
@@ -2,3 +2,4 @@ export * from './types.js';
2
2
  export * from './chaintypes/index.js';
3
3
  export * from './typink/index.js';
4
4
  export * from './sol/index.js';
5
+ export { resolveBlockHash } from './utils.js';
package/index.js CHANGED
@@ -2,3 +2,4 @@ export * from './types.js';
2
2
  export * from './chaintypes/index.js';
3
3
  export * from './typink/index.js';
4
4
  export * from './sol/index.js';
5
+ export { resolveBlockHash } from './utils.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dedot/codegen",
3
- "version": "0.18.8",
3
+ "version": "1.0.0",
4
4
  "description": "Generate types",
5
5
  "author": "Thang X. Vu <thang@dedot.dev>",
6
6
  "homepage": "https://dedot.dev",
@@ -19,16 +19,16 @@
19
19
  "copy": "cp -R ./src/chaintypes/templates ./dist/chaintypes && cp -R ./src/chaintypes/templates ./dist/cjs/chaintypes && cp -R ./src/typink/templates ./dist/typink && cp -R ./src/typink/templates ./dist/cjs/typink && cp -R ./src/sol/templates ./dist/sol && cp -R ./src/sol/templates ./dist/cjs/sol"
20
20
  },
21
21
  "dependencies": {
22
- "@dedot/api": "0.18.8",
23
- "@dedot/codecs": "0.18.8",
24
- "@dedot/contracts": "0.18.8",
25
- "@dedot/providers": "0.18.8",
26
- "@dedot/runtime-specs": "0.18.8",
27
- "@dedot/shape": "0.18.8",
28
- "@dedot/types": "0.18.8",
29
- "@dedot/utils": "0.18.8",
22
+ "@dedot/api": "1.0.0",
23
+ "@dedot/codecs": "1.0.0",
24
+ "@dedot/contracts": "1.0.0",
25
+ "@dedot/providers": "1.0.0",
26
+ "@dedot/runtime-specs": "1.0.0",
27
+ "@dedot/shape": "1.0.0",
28
+ "@dedot/types": "1.0.0",
29
+ "@dedot/utils": "1.0.0",
30
30
  "handlebars": "^4.7.8",
31
- "prettier": "^3.6.2"
31
+ "prettier": "^3.7.3"
32
32
  },
33
33
  "publishConfig": {
34
34
  "access": "public",
@@ -38,7 +38,7 @@
38
38
  "node": ">=18"
39
39
  },
40
40
  "license": "Apache-2.0",
41
- "gitHead": "5f87f515d4ce4183038681dd02b20bb682a5fdce",
41
+ "gitHead": "7767062a2188b4ac90561c5ad3cc3f06ac608a24",
42
42
  "module": "./index.js",
43
43
  "types": "./index.d.ts",
44
44
  "exports": {
@@ -29,7 +29,7 @@ export class ConstructorQueryGen {
29
29
  }
30
30
  generateMethodDef(abiItem, optionsParamName = 'options') {
31
31
  const paramsOut = this.generateParamsOut(abiItem);
32
- return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorCallOptions) => Promise<GenericConstructorCallResult<[], ContractInstantiateResult<ChainApi>>>, Type>`;
32
+ return `GenericConstructorQueryCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorCallOptions) => Promise<GenericConstructorCallResult<[], ContractInstantiateResult>>, Type>`;
33
33
  }
34
34
  generateParamsOut(abiItem) {
35
35
  return abiItem.inputs
@@ -13,6 +13,6 @@ export class ConstructorTxGen extends ConstructorQueryGen {
13
13
  }
14
14
  generateMethodDef(abiItem, optionsParamName = 'options') {
15
15
  const paramsOut = this.generateParamsOut(abiItem);
16
- return `GenericConstructorTxCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorTxOptions) => GenericInstantiateSubmittableExtrinsic<ChainApi, ContractApi>, Type>`;
16
+ return `GenericConstructorTxCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorTxOptions) => GenericInstantiateSubmittableExtrinsic<ContractApi>, Type>`;
17
17
  }
18
18
  }
@@ -10,7 +10,7 @@ export class IndexGen {
10
10
  generate(useSubPaths = false) {
11
11
  const interfaceName = this.interfaceName;
12
12
  const typeImports = new TypeImports();
13
- typeImports.addKnownType('VersionedGenericSubstrateApi', 'RpcVersion', 'RpcV2');
13
+ typeImports.addKnownType('GenericSubstrateApi', 'RpcVersion', 'RpcV2');
14
14
  typeImports.addContractType('SolGenericContractApi', 'SolRegistry');
15
15
  typeImports.addChainType('SubstrateApi');
16
16
  const importTypes = typeImports.toImports({ useSubPaths });
@@ -36,7 +36,7 @@ export class QueryGen {
36
36
  const typeOutInner = `${outputs.map((o) => this.typesGen.generateType(o, abiItem, 1, true)).join(',')}`;
37
37
  // If there is only one output, we don't need to wrap it in a tuple, for user-friendly
38
38
  const typeOut = outputs.length === 1 ? typeOutInner : `[${typeOutInner}]`;
39
- return `GenericContractQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult<ChainApi>>>, Type>`;
39
+ return `GenericContractQueryCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult>>, Type>`;
40
40
  }
41
41
  generateParamsOut(abiItem) {
42
42
  return abiItem.inputs
@@ -13,6 +13,6 @@ export class TxGen extends QueryGen {
13
13
  }
14
14
  generateMethodDef(abiItem, optionsParamName = 'options') {
15
15
  const paramsOut = this.generateParamsOut(abiItem);
16
- return `GenericContractTxCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractTxOptions) => ContractSubmittableExtrinsic<ChainApi>, Type>`;
16
+ return `GenericContractTxCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractTxOptions) => ContractSubmittableExtrinsic, Type>`;
17
17
  }
18
18
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ConstructorQuery <ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericConstructorQuery <ChainApi, Type> {
5
+ export interface ConstructorQuery<Type extends MetadataType> extends GenericConstructorQuery<Type> {
6
6
  {{{ constructorsOut }}}
7
7
  }
@@ -3,9 +3,8 @@
3
3
  {{{ importTypes }}}
4
4
 
5
5
  export interface ConstructorTx<
6
- ChainApi extends GenericSubstrateApi,
7
6
  ContractApi extends SolGenericContractApi,
8
7
  Type extends MetadataType
9
- > extends GenericConstructorTx <ChainApi, Type> {
8
+ > extends GenericConstructorTx<Type> {
10
9
  {{{ constructorsOut }}}
11
10
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractEvents <ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractEvents <ChainApi, Type> {
5
+ export interface ContractEvents<Type extends MetadataType> extends GenericContractEvents<Type> {
6
6
  {{{ eventsOut }}}
7
7
  }
@@ -9,15 +9,15 @@ import { ContractEvents } from './events.js';
9
9
 
10
10
  export * from './types.js';
11
11
 
12
- {{{interfaceDocs}}}export interface {{{interfaceName}}}<Rv extends RpcVersion = RpcVersion, ChainApi extends VersionedGenericSubstrateApi = SubstrateApi> extends SolGenericContractApi<Rv, ChainApi> {
12
+ {{{interfaceDocs}}}export interface {{{interfaceName}}}<ChainApi extends GenericSubstrateApi = SubstrateApi> extends SolGenericContractApi<ChainApi> {
13
13
  metadataType: 'sol';
14
- query: ContractQuery<ChainApi[Rv], 'sol'>;
15
- tx: ContractTx<ChainApi[Rv], 'sol'>;
16
- constructorQuery: ConstructorQuery<ChainApi[Rv], 'sol'>;
17
- events: ContractEvents<ChainApi[Rv], 'sol'>;
18
- constructorTx: ConstructorTx<ChainApi[Rv], {{{interfaceName}}}, 'sol'>;
14
+ query: ContractQuery<'sol'>;
15
+ tx: ContractTx<'sol'>;
16
+ constructorQuery: ConstructorQuery<'sol'>;
17
+ events: ContractEvents<'sol'>;
18
+ constructorTx: ConstructorTx<{{{interfaceName}}}, 'sol'>;
19
19
 
20
20
  types: {
21
- ChainApi: ChainApi[Rv];
21
+ ChainApi: ChainApi;
22
22
  };
23
23
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractQuery<ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractQuery<ChainApi, Type> {
5
+ export interface ContractQuery<Type extends MetadataType> extends GenericContractQuery<Type> {
6
6
  {{{ queryCallsOut }}}
7
7
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractTx<ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractTx<ChainApi, Type> {
5
+ export interface ContractTx<Type extends MetadataType> extends GenericContractTx<Type> {
6
6
  {{{ txCallsOut }}}
7
7
  }
@@ -17,6 +17,6 @@ export class ConstructorQueryGen extends QueryGen {
17
17
  const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
18
18
  // Unwrap langError result
19
19
  const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
20
- return `GenericConstructorQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorCallOptions) => Promise<GenericConstructorCallResult<${typeOut}, ContractInstantiateResult<ChainApi>>>, Type>`;
20
+ return `GenericConstructorQueryCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorCallOptions) => Promise<GenericConstructorCallResult<${typeOut}, ContractInstantiateResult>>, Type>`;
21
21
  }
22
22
  }
@@ -13,6 +13,6 @@ export class ConstructorTxGen extends QueryGen {
13
13
  }
14
14
  generateMethodDef(def, optionsParamName = 'options') {
15
15
  const paramsOut = this.generateParamsOut(def.args);
16
- return `GenericConstructorTxCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorTxOptions) => GenericInstantiateSubmittableExtrinsic<ChainApi, ContractApi>, Type>`;
16
+ return `GenericConstructorTxCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ConstructorTxOptions) => GenericInstantiateSubmittableExtrinsic<ContractApi>, Type>`;
17
17
  }
18
18
  }
@@ -15,7 +15,7 @@ export class IndexGen {
15
15
  const langErrorId = this.contractMetadata.spec.lang_error.type;
16
16
  const langErrorName = this.typesGen.cleanPath(this.contractMetadata.types[langErrorId].type.path);
17
17
  const typeImports = new TypeImports();
18
- typeImports.addKnownType('VersionedGenericSubstrateApi', 'RpcVersion', 'RpcV2');
18
+ typeImports.addKnownType('GenericSubstrateApi', 'RpcVersion', 'RpcV2');
19
19
  typeImports.addContractType('InkGenericContractApi', 'WithLazyStorage');
20
20
  typeImports.addChainType('SubstrateApi');
21
21
  typeImports.addPortableType(langErrorName);
@@ -37,7 +37,7 @@ export class QueryGen {
37
37
  const typeOutRaw = this.typesGen.generateType(returnType.type, 0, true);
38
38
  // Unwrap langError result
39
39
  const typeOut = typeOutRaw.match(/^(\w+)<(.*), (.*)>$/).at(2);
40
- return `GenericContractQueryCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult<ChainApi>>>, Type>`;
40
+ return `GenericContractQueryCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractCallOptions) => Promise<GenericContractCallResult<${typeOut}, ContractCallResult>>, Type>`;
41
41
  }
42
42
  generateParamsOut(args) {
43
43
  return args
@@ -14,6 +14,6 @@ export class TxGen extends QueryGen {
14
14
  }
15
15
  generateMethodDef(def, optionsParamName = 'options') {
16
16
  const paramsOut = this.generateParamsOut(def.args);
17
- return `GenericContractTxCall<ChainApi, (${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractTxOptions) => ContractSubmittableExtrinsic<ChainApi>, Type>`;
17
+ return `GenericContractTxCall<(${paramsOut && `${paramsOut},`} ${optionsParamName}?: ContractTxOptions) => ContractSubmittableExtrinsic, Type>`;
18
18
  }
19
19
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ConstructorQuery<ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericConstructorQuery<ChainApi, Type> {
5
+ export interface ConstructorQuery<Type extends MetadataType> extends GenericConstructorQuery<Type> {
6
6
  {{{ constructorsOut }}}
7
7
  }
@@ -3,9 +3,8 @@
3
3
  {{{ importTypes }}}
4
4
 
5
5
  export interface ConstructorTx<
6
- ChainApi extends GenericSubstrateApi,
7
6
  ContractApi extends InkGenericContractApi,
8
7
  Type extends MetadataType
9
- > extends GenericConstructorTx<ChainApi, Type> {
8
+ > extends GenericConstructorTx<Type> {
10
9
  {{{ constructorsOut }}}
11
10
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractEvents <ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractEvents <ChainApi, Type> {
5
+ export interface ContractEvents<Type extends MetadataType> extends GenericContractEvents <Type> {
6
6
  {{{ eventsOut }}}
7
7
  }
@@ -9,20 +9,20 @@ import { ContractEvents } from './events.js';
9
9
 
10
10
  export * from './types.js';
11
11
 
12
- {{{interfaceDocs}}}export interface {{{interfaceName}}}<Rv extends RpcVersion = RpcVersion, ChainApi extends VersionedGenericSubstrateApi = SubstrateApi> extends InkGenericContractApi<Rv, ChainApi> {
12
+ {{{interfaceDocs}}}export interface {{{interfaceName}}}<ChainApi extends GenericSubstrateApi = SubstrateApi> extends InkGenericContractApi<ChainApi> {
13
13
  metadataType: 'ink';
14
- query: ContractQuery<ChainApi[Rv], 'ink'>;
15
- tx: ContractTx<ChainApi[Rv], 'ink'>;
16
- constructorQuery: ConstructorQuery<ChainApi[Rv], 'ink'>;
17
- constructorTx: ConstructorTx<ChainApi[Rv], {{{interfaceName}}}, 'ink'>;
18
- events: ContractEvents<ChainApi[Rv], 'ink'>;
14
+ query: ContractQuery<'ink'>;
15
+ tx: ContractTx<'ink'>;
16
+ constructorQuery: ConstructorQuery<'ink'>;
17
+ constructorTx: ConstructorTx<{{{interfaceName}}}, 'ink'>;
18
+ events: ContractEvents<'ink'>;
19
19
  storage: {
20
20
  root(): Promise<{{{rootStorageName}}}>;
21
21
  lazy(): {{{lazyStorageName}}};
22
22
  };
23
23
 
24
24
  types: {
25
- ChainApi: ChainApi[Rv];
25
+ ChainApi: ChainApi;
26
26
  RootStorage: {{{rootStorageName}}};
27
27
  LazyStorage: {{{lazyStorageName}}};
28
28
  LangError: {{{langErrorName}}};
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractQuery<ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractQuery<ChainApi, Type> {
5
+ export interface ContractQuery<Type extends MetadataType> extends GenericContractQuery<Type> {
6
6
  {{{ queryCallsOut }}}
7
7
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  {{{ importTypes }}}
4
4
 
5
- export interface ContractTx<ChainApi extends GenericSubstrateApi, Type extends MetadataType> extends GenericContractTx<ChainApi, Type> {
5
+ export interface ContractTx<Type extends MetadataType> extends GenericContractTx<Type> {
6
6
  {{{ txCallsOut }}}
7
7
  }
package/utils.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { DedotClient } from '@dedot/api';
1
2
  import { ItemDeprecationInfoDefV16, EnumDeprecationInfoDefV16 } from '@dedot/codecs';
3
+ import { HexString } from '@dedot/utils';
2
4
  export declare const WRAPPER_TYPE_REGEX: RegExp;
3
5
  export declare const TUPLE_TYPE_REGEX: RegExp;
4
6
  export declare const commentBlock: (...docs: (string | string[])[]) => string;
@@ -27,3 +29,10 @@ export declare const getDeprecationComment: (deprecationInfo: ItemDeprecationInf
27
29
  * @param variantIndex
28
30
  */
29
31
  export declare const getVariantDeprecationComment: (deprecationInfo: EnumDeprecationInfoDefV16 | undefined, variantIndex: number) => string[];
32
+ /**
33
+ * Resolve block hash from either a block hash or block number
34
+ * @param client - The API client
35
+ * @param at - Block hash (0x...) or block number (number)
36
+ * @returns The resolved block hash
37
+ */
38
+ export declare function resolveBlockHash(client: DedotClient, at: string): Promise<HexString>;
package/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { DedotError, isHex } from '@dedot/utils';
1
2
  import * as fs from 'fs';
2
3
  import handlebars from 'handlebars';
3
4
  import * as path from 'path';
@@ -21,6 +22,7 @@ ${flatLines.map((line) => `* ${line.replaceAll(/\s+/g, ' ').trim()}`).join('\n')
21
22
  export const beautifySourceCode = async (source) => {
22
23
  const prettierOptions = await prettier.resolveConfig(path.resolve(currentDirname(), '../../../.prettierrc.cjs'));
23
24
  return prettier.format(source, { parser: 'babel-ts', ...prettierOptions });
25
+ // return source;
24
26
  };
25
27
  export const compileTemplate = (templateFile) => {
26
28
  const templateFilePath = path.resolve(currentDirname(), templateFile);
@@ -105,3 +107,26 @@ export const getVariantDeprecationComment = (deprecationInfo, variantIndex) => {
105
107
  return [];
106
108
  }
107
109
  };
110
+ /**
111
+ * Resolve block hash from either a block hash or block number
112
+ * @param client - The API client
113
+ * @param at - Block hash (0x...) or block number (number)
114
+ * @returns The resolved block hash
115
+ */
116
+ export async function resolveBlockHash(client, at) {
117
+ // Check if it's a hex string (block hash)
118
+ if (isHex(at)) {
119
+ return at;
120
+ }
121
+ // Try to parse as a number (block height)
122
+ const blockNumber = parseInt(at, 10);
123
+ if (isNaN(blockNumber) || blockNumber < 0) {
124
+ throw new DedotError(`Invalid block specifier: ${at}. Must be a block hash (0x...) or block number.`);
125
+ }
126
+ // Resolve block number to block hash
127
+ const blockHash = await client.rpc.chain_getBlockHash(blockNumber);
128
+ if (!blockHash) {
129
+ throw new DedotError(`Block not found at height: ${blockNumber}`);
130
+ }
131
+ return blockHash;
132
+ }