@hyperweb/telescope 1.15.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 (382) hide show
  1. package/README.md +1529 -0
  2. package/main/build.js +183 -0
  3. package/main/builder.js +229 -0
  4. package/main/bundle.js +162 -0
  5. package/main/bundler.js +100 -0
  6. package/main/cli.js +71 -0
  7. package/main/cmds.js +28 -0
  8. package/main/commands/download.js +122 -0
  9. package/main/commands/generate.js +151 -0
  10. package/main/commands/install.js +143 -0
  11. package/main/commands/transpile.js +197 -0
  12. package/main/contracts/generate.js +31 -0
  13. package/main/contracts/install.js +107 -0
  14. package/main/contracts/message-composer.js +31 -0
  15. package/main/contracts/react-query.js +31 -0
  16. package/main/contracts/recoil.js +31 -0
  17. package/main/file.js +20 -0
  18. package/main/generators/create-aggregated-lcd-client.js +87 -0
  19. package/main/generators/create-all-stargate-clients.js +96 -0
  20. package/main/generators/create-amino-converters.js +43 -0
  21. package/main/generators/create-bundle.js +83 -0
  22. package/main/generators/create-cosmwasm-bundle.js +15 -0
  23. package/main/generators/create-custom-stargate-clients.js +100 -0
  24. package/main/generators/create-helpers.js +119 -0
  25. package/main/generators/create-index.js +75 -0
  26. package/main/generators/create-lcd-client-all.js +116 -0
  27. package/main/generators/create-lcd-client-scoped.js +89 -0
  28. package/main/generators/create-lcd-clients.js +78 -0
  29. package/main/generators/create-mcp-server.js +1853 -0
  30. package/main/generators/create-mobx-bundle.js +52 -0
  31. package/main/generators/create-msg-funcs.js +132 -0
  32. package/main/generators/create-pinia-store-bundle.js +50 -0
  33. package/main/generators/create-pinia-store.js +90 -0
  34. package/main/generators/create-query-funcs.js +133 -0
  35. package/main/generators/create-react-query-bundle.js +103 -0
  36. package/main/generators/create-registries.js +49 -0
  37. package/main/generators/create-root-readme.js +259 -0
  38. package/main/generators/create-rpc-msg-client-all.js +135 -0
  39. package/main/generators/create-rpc-msg-client-scoped.js +114 -0
  40. package/main/generators/create-rpc-msg-clients.js +116 -0
  41. package/main/generators/create-rpc-ops-bundle.js +119 -0
  42. package/main/generators/create-rpc-query-client-all.js +137 -0
  43. package/main/generators/create-rpc-query-client-scoped.js +110 -0
  44. package/main/generators/create-rpc-query-clients.js +198 -0
  45. package/main/generators/create-sdk-module-stargate-clients.js +95 -0
  46. package/main/generators/create-stargate-clients.js +96 -0
  47. package/main/generators/create-types.js +164 -0
  48. package/main/generators/customize-utils.js +50 -0
  49. package/main/helpers/__test__/internalTimestamp.js +49 -0
  50. package/main/helpers/__test__/internalTimestampBigint.js +45 -0
  51. package/main/helpers/binary-coder.js +535 -0
  52. package/main/helpers/decimals.js +111 -0
  53. package/main/helpers/external-comet.js +52 -0
  54. package/main/helpers/external-icjs.js +36 -0
  55. package/main/helpers/external.js +31 -0
  56. package/main/helpers/grpc-gateway.js +348 -0
  57. package/main/helpers/grpc-web.js +14 -0
  58. package/main/helpers/helper-func-types-interface.js +106 -0
  59. package/main/helpers/helper-func-types.js +93 -0
  60. package/main/helpers/index.js +38 -0
  61. package/main/helpers/internal-for-bigint.js +259 -0
  62. package/main/helpers/internal.js +240 -0
  63. package/main/helpers/json-safe.js +12 -0
  64. package/main/helpers/mobx.js +80 -0
  65. package/main/helpers/pinia-endpoint.js +20 -0
  66. package/main/helpers/react-query-hooks-icjs.js +223 -0
  67. package/main/helpers/react-query-hooks.js +258 -0
  68. package/main/helpers/react-query.js +93 -0
  69. package/main/helpers/registry-helper.js +229 -0
  70. package/main/helpers/types-helper.js +165 -0
  71. package/main/helpers/utf8-helper.js +146 -0
  72. package/main/helpers/varint.js +486 -0
  73. package/main/helpers/vue-query-hooks.js +226 -0
  74. package/main/imports.js +416 -0
  75. package/main/index.js +24 -0
  76. package/main/parse.js +194 -0
  77. package/main/prompt.js +64 -0
  78. package/main/protod/bufbuild.js +87 -0
  79. package/main/protod/config.js +30 -0
  80. package/main/protod/git-repo.js +58 -0
  81. package/main/protod/index.js +17 -0
  82. package/main/protod/recursive.js +134 -0
  83. package/main/protod/types.js +2 -0
  84. package/main/protod/utils.js +91 -0
  85. package/main/telescope.js +10 -0
  86. package/main/types.js +2 -0
  87. package/main/utils/common-create-bundle.js +29 -0
  88. package/main/utils/contracts.js +39 -0
  89. package/main/utils/files.js +138 -0
  90. package/main/utils/index.js +163 -0
  91. package/main/utils/unused.js +73 -0
  92. package/module/build.js +176 -0
  93. package/module/builder.js +222 -0
  94. package/module/bundle.js +128 -0
  95. package/module/bundler.js +96 -0
  96. package/module/cli.js +44 -0
  97. package/module/cmds.js +22 -0
  98. package/module/commands/download.js +94 -0
  99. package/module/commands/generate.js +123 -0
  100. package/module/commands/install.js +141 -0
  101. package/module/commands/transpile.js +169 -0
  102. package/module/contracts/generate.js +29 -0
  103. package/module/contracts/install.js +105 -0
  104. package/module/contracts/message-composer.js +29 -0
  105. package/module/contracts/react-query.js +29 -0
  106. package/module/contracts/recoil.js +29 -0
  107. package/module/file.js +18 -0
  108. package/module/generators/create-aggregated-lcd-client.js +83 -0
  109. package/module/generators/create-all-stargate-clients.js +92 -0
  110. package/module/generators/create-amino-converters.js +39 -0
  111. package/module/generators/create-bundle.js +79 -0
  112. package/module/generators/create-cosmwasm-bundle.js +11 -0
  113. package/module/generators/create-custom-stargate-clients.js +96 -0
  114. package/module/generators/create-helpers.js +112 -0
  115. package/module/generators/create-index.js +45 -0
  116. package/module/generators/create-lcd-client-all.js +89 -0
  117. package/module/generators/create-lcd-client-scoped.js +62 -0
  118. package/module/generators/create-lcd-clients.js +74 -0
  119. package/module/generators/create-mcp-server.js +1849 -0
  120. package/module/generators/create-mobx-bundle.js +25 -0
  121. package/module/generators/create-msg-funcs.js +128 -0
  122. package/module/generators/create-pinia-store-bundle.js +23 -0
  123. package/module/generators/create-pinia-store.js +86 -0
  124. package/module/generators/create-query-funcs.js +129 -0
  125. package/module/generators/create-react-query-bundle.js +76 -0
  126. package/module/generators/create-registries.js +45 -0
  127. package/module/generators/create-root-readme.js +255 -0
  128. package/module/generators/create-rpc-msg-client-all.js +108 -0
  129. package/module/generators/create-rpc-msg-client-scoped.js +87 -0
  130. package/module/generators/create-rpc-msg-clients.js +112 -0
  131. package/module/generators/create-rpc-ops-bundle.js +92 -0
  132. package/module/generators/create-rpc-query-client-all.js +110 -0
  133. package/module/generators/create-rpc-query-client-scoped.js +83 -0
  134. package/module/generators/create-rpc-query-clients.js +198 -0
  135. package/module/generators/create-sdk-module-stargate-clients.js +91 -0
  136. package/module/generators/create-stargate-clients.js +92 -0
  137. package/module/generators/create-types.js +137 -0
  138. package/module/generators/customize-utils.js +46 -0
  139. package/module/helpers/__test__/internalTimestamp.js +39 -0
  140. package/module/helpers/__test__/internalTimestampBigint.js +38 -0
  141. package/module/helpers/binary-coder.js +531 -0
  142. package/module/helpers/decimals.js +108 -0
  143. package/module/helpers/external-comet.js +49 -0
  144. package/module/helpers/external-icjs.js +33 -0
  145. package/module/helpers/external.js +28 -0
  146. package/module/helpers/grpc-gateway.js +345 -0
  147. package/module/helpers/grpc-web.js +11 -0
  148. package/module/helpers/helper-func-types-interface.js +102 -0
  149. package/module/helpers/helper-func-types.js +89 -0
  150. package/module/helpers/index.js +22 -0
  151. package/module/helpers/internal-for-bigint.js +255 -0
  152. package/module/helpers/internal.js +236 -0
  153. package/module/helpers/json-safe.js +9 -0
  154. package/module/helpers/mobx.js +77 -0
  155. package/module/helpers/pinia-endpoint.js +17 -0
  156. package/module/helpers/react-query-hooks-icjs.js +219 -0
  157. package/module/helpers/react-query-hooks.js +254 -0
  158. package/module/helpers/react-query.js +89 -0
  159. package/module/helpers/registry-helper.js +225 -0
  160. package/module/helpers/types-helper.js +161 -0
  161. package/module/helpers/utf8-helper.js +143 -0
  162. package/module/helpers/varint.js +483 -0
  163. package/module/helpers/vue-query-hooks.js +222 -0
  164. package/module/imports.js +382 -0
  165. package/module/index.js +8 -0
  166. package/module/parse.js +185 -0
  167. package/module/prompt.js +58 -0
  168. package/module/protod/bufbuild.js +76 -0
  169. package/module/protod/config.js +27 -0
  170. package/module/protod/git-repo.js +54 -0
  171. package/module/protod/index.js +1 -0
  172. package/module/protod/recursive.js +125 -0
  173. package/module/protod/types.js +1 -0
  174. package/module/protod/utils.js +77 -0
  175. package/module/telescope.js +8 -0
  176. package/module/types.js +1 -0
  177. package/module/utils/common-create-bundle.js +25 -0
  178. package/module/utils/contracts.js +33 -0
  179. package/module/utils/files.js +106 -0
  180. package/module/utils/index.js +143 -0
  181. package/module/utils/unused.js +47 -0
  182. package/package.json +115 -0
  183. package/src/build.ts +255 -0
  184. package/src/builder.ts +302 -0
  185. package/src/bundle.ts +160 -0
  186. package/src/bundler.ts +153 -0
  187. package/src/cli.js +51 -0
  188. package/src/cmds.js +25 -0
  189. package/src/commands/download.ts +120 -0
  190. package/src/commands/generate.ts +156 -0
  191. package/src/commands/install.ts +154 -0
  192. package/src/commands/transpile.ts +198 -0
  193. package/src/contracts/generate.ts +33 -0
  194. package/src/contracts/install.ts +118 -0
  195. package/src/contracts/message-composer.ts +34 -0
  196. package/src/contracts/react-query.ts +33 -0
  197. package/src/contracts/recoil.ts +32 -0
  198. package/src/file.js +20 -0
  199. package/src/generators/create-aggregated-lcd-client.ts +133 -0
  200. package/src/generators/create-all-stargate-clients.ts +121 -0
  201. package/src/generators/create-amino-converters.ts +62 -0
  202. package/src/generators/create-bundle.ts +97 -0
  203. package/src/generators/create-cosmwasm-bundle.ts +17 -0
  204. package/src/generators/create-custom-stargate-clients.ts +128 -0
  205. package/src/generators/create-helpers.ts +196 -0
  206. package/src/generators/create-index.ts +72 -0
  207. package/src/generators/create-lcd-client-all.ts +139 -0
  208. package/src/generators/create-lcd-client-scoped.ts +109 -0
  209. package/src/generators/create-lcd-clients.ts +108 -0
  210. package/src/generators/create-mcp-server.ts +1902 -0
  211. package/src/generators/create-mobx-bundle.ts +31 -0
  212. package/src/generators/create-msg-funcs.ts +219 -0
  213. package/src/generators/create-pinia-store-bundle.ts +35 -0
  214. package/src/generators/create-pinia-store.ts +121 -0
  215. package/src/generators/create-query-funcs.ts +224 -0
  216. package/src/generators/create-react-query-bundle.ts +111 -0
  217. package/src/generators/create-registries.ts +70 -0
  218. package/src/generators/create-root-readme.ts +316 -0
  219. package/src/generators/create-rpc-msg-client-all.ts +167 -0
  220. package/src/generators/create-rpc-msg-client-scoped.ts +147 -0
  221. package/src/generators/create-rpc-msg-clients.ts +165 -0
  222. package/src/generators/create-rpc-ops-bundle.ts +155 -0
  223. package/src/generators/create-rpc-query-client-all.ts +173 -0
  224. package/src/generators/create-rpc-query-client-scoped.ts +142 -0
  225. package/src/generators/create-rpc-query-clients.ts +304 -0
  226. package/src/generators/create-sdk-module-stargate-clients.ts +120 -0
  227. package/src/generators/create-stargate-clients.ts +123 -0
  228. package/src/generators/create-types.ts +236 -0
  229. package/src/generators/customize-utils.ts +54 -0
  230. package/src/helpers/__test__/internalTimestamp.test.ts +79 -0
  231. package/src/helpers/__test__/internalTimestamp.ts +58 -0
  232. package/src/helpers/__test__/internalTimestampBigint.test.ts +78 -0
  233. package/src/helpers/__test__/internalTimestampBigint.ts +58 -0
  234. package/src/helpers/binary-coder.ts +533 -0
  235. package/src/helpers/decimals.ts +108 -0
  236. package/src/helpers/external-comet.ts +49 -0
  237. package/src/helpers/external-icjs.ts +33 -0
  238. package/src/helpers/external.ts +28 -0
  239. package/src/helpers/grpc-gateway.ts +345 -0
  240. package/src/helpers/grpc-web.ts +11 -0
  241. package/src/helpers/helper-func-types-interface.ts +104 -0
  242. package/src/helpers/helper-func-types.ts +91 -0
  243. package/src/helpers/index.ts +22 -0
  244. package/src/helpers/internal-for-bigint.ts +257 -0
  245. package/src/helpers/internal.ts +238 -0
  246. package/src/helpers/json-safe.ts +11 -0
  247. package/src/helpers/mobx.ts +77 -0
  248. package/src/helpers/pinia-endpoint.ts +17 -0
  249. package/src/helpers/react-query-hooks-icjs.ts +223 -0
  250. package/src/helpers/react-query-hooks.ts +266 -0
  251. package/src/helpers/react-query.ts +101 -0
  252. package/src/helpers/registry-helper.ts +227 -0
  253. package/src/helpers/types-helper.ts +169 -0
  254. package/src/helpers/utf8-helper.ts +143 -0
  255. package/src/helpers/varint.ts +483 -0
  256. package/src/helpers/vue-query-hooks.ts +224 -0
  257. package/src/imports.ts +499 -0
  258. package/src/index.ts +12 -0
  259. package/src/parse.ts +243 -0
  260. package/src/prompt.js +65 -0
  261. package/src/protod/bufbuild.spec.ts +80 -0
  262. package/src/protod/bufbuild.ts +95 -0
  263. package/src/protod/config.ts +30 -0
  264. package/src/protod/git-repo.ts +74 -0
  265. package/src/protod/index.ts +1 -0
  266. package/src/protod/recursive.spec.ts +164 -0
  267. package/src/protod/recursive.ts +180 -0
  268. package/src/protod/test-data/.protod.config.json +42 -0
  269. package/src/protod/test-data/buf.lock +23 -0
  270. package/src/protod/test-data/buf.yaml +25 -0
  271. package/src/protod/test-data/buf2.yaml +20 -0
  272. package/src/protod/test-data/cosmos/buf.lock +23 -0
  273. package/src/protod/test-data/cosmos/crypto/secp256k1/keys.proto +38 -0
  274. package/src/protod/test-data/model.proto +101 -0
  275. package/src/protod/types.ts +55 -0
  276. package/src/protod/utils.spec.ts +68 -0
  277. package/src/protod/utils.ts +90 -0
  278. package/src/telescope.js +9 -0
  279. package/src/types.ts +46 -0
  280. package/src/utils/common-create-bundle.ts +62 -0
  281. package/src/utils/contracts.ts +37 -0
  282. package/src/utils/files.ts +145 -0
  283. package/src/utils/index.ts +150 -0
  284. package/src/utils/unused.ts +52 -0
  285. package/types/build.d.ts +41 -0
  286. package/types/builder.d.ts +50 -0
  287. package/types/bundle.d.ts +30 -0
  288. package/types/bundler.d.ts +31 -0
  289. package/types/cli.d.ts +1 -0
  290. package/types/cmds.d.ts +11 -0
  291. package/types/commands/download.d.ts +5 -0
  292. package/types/commands/generate.d.ts +2 -0
  293. package/types/commands/install.d.ts +2 -0
  294. package/types/commands/transpile.d.ts +4 -0
  295. package/types/contracts/generate.d.ts +2 -0
  296. package/types/contracts/install.d.ts +2 -0
  297. package/types/contracts/message-composer.d.ts +2 -0
  298. package/types/contracts/react-query.d.ts +2 -0
  299. package/types/contracts/recoil.d.ts +2 -0
  300. package/types/file.d.ts +2 -0
  301. package/types/generators/create-aggregated-lcd-client.d.ts +2 -0
  302. package/types/generators/create-all-stargate-clients.d.ts +3 -0
  303. package/types/generators/create-amino-converters.d.ts +3 -0
  304. package/types/generators/create-bundle.d.ts +3 -0
  305. package/types/generators/create-combined-stargate-clients.d.ts +3 -0
  306. package/types/generators/create-cosmwasm-bundle.d.ts +2 -0
  307. package/types/generators/create-custom-stargate-clients.d.ts +3 -0
  308. package/types/generators/create-helpers.d.ts +2 -0
  309. package/types/generators/create-index.d.ts +2 -0
  310. package/types/generators/create-lcd-client-all.d.ts +3 -0
  311. package/types/generators/create-lcd-client-scoped.d.ts +3 -0
  312. package/types/generators/create-lcd-clients.d.ts +3 -0
  313. package/types/generators/create-mcp-server.d.ts +3 -0
  314. package/types/generators/create-mobx-bundle.d.ts +2 -0
  315. package/types/generators/create-msg-funcs.d.ts +3 -0
  316. package/types/generators/create-pinia-store-bundle.d.ts +2 -0
  317. package/types/generators/create-pinia-store.d.ts +3 -0
  318. package/types/generators/create-query-funcs.d.ts +3 -0
  319. package/types/generators/create-react-query-bundle.d.ts +2 -0
  320. package/types/generators/create-registries.d.ts +3 -0
  321. package/types/generators/create-root-readme.d.ts +2 -0
  322. package/types/generators/create-rpc-msg-client-all.d.ts +3 -0
  323. package/types/generators/create-rpc-msg-client-scoped.d.ts +3 -0
  324. package/types/generators/create-rpc-msg-clients.d.ts +3 -0
  325. package/types/generators/create-rpc-ops-bundle.d.ts +2 -0
  326. package/types/generators/create-rpc-query-client-all.d.ts +3 -0
  327. package/types/generators/create-rpc-query-client-scoped.d.ts +3 -0
  328. package/types/generators/create-rpc-query-clients.d.ts +3 -0
  329. package/types/generators/create-scoped-stargate-clients.d.ts +3 -0
  330. package/types/generators/create-sdk-module-stargate-clients.d.ts +3 -0
  331. package/types/generators/create-stargate-clients.d.ts +3 -0
  332. package/types/generators/create-types.d.ts +3 -0
  333. package/types/generators/create-unified-stargate-clients.d.ts +3 -0
  334. package/types/generators/customize-utils.d.ts +2 -0
  335. package/types/helpers/__test__/internalTimestamp.d.ts +21 -0
  336. package/types/helpers/__test__/internalTimestampBigint.d.ts +20 -0
  337. package/types/helpers/binary-coder.d.ts +2 -0
  338. package/types/helpers/decimals.d.ts +1 -0
  339. package/types/helpers/external-comet.d.ts +1 -0
  340. package/types/helpers/external-icjs.d.ts +1 -0
  341. package/types/helpers/external.d.ts +1 -0
  342. package/types/helpers/generated-type.d.ts +1 -0
  343. package/types/helpers/grpc-gateway.d.ts +1 -0
  344. package/types/helpers/grpc-web.d.ts +1 -0
  345. package/types/helpers/helper-func-types-interface.d.ts +2 -0
  346. package/types/helpers/helper-func-types.d.ts +2 -0
  347. package/types/helpers/index.d.ts +22 -0
  348. package/types/helpers/internal-for-bigint.d.ts +2 -0
  349. package/types/helpers/internal.d.ts +2 -0
  350. package/types/helpers/internalForBigInt.d.ts +1 -0
  351. package/types/helpers/json-safe.d.ts +1 -0
  352. package/types/helpers/mobx.d.ts +1 -0
  353. package/types/helpers/pinia-endpoint.d.ts +1 -0
  354. package/types/helpers/react-query-hooks-icjs.d.ts +2 -0
  355. package/types/helpers/react-query-hooks.d.ts +2 -0
  356. package/types/helpers/react-query.d.ts +2 -0
  357. package/types/helpers/registry-helper.d.ts +2 -0
  358. package/types/helpers/types-helper.d.ts +2 -0
  359. package/types/helpers/types.d.ts +1 -0
  360. package/types/helpers/utf8-helper.d.ts +1 -0
  361. package/types/helpers/varint.d.ts +1 -0
  362. package/types/helpers/vue-query-hooks.d.ts +2 -0
  363. package/types/helpers/vue-query.d.ts +2 -0
  364. package/types/imports.d.ts +17 -0
  365. package/types/index.d.ts +6 -0
  366. package/types/parse.d.ts +15 -0
  367. package/types/prompt.d.ts +3 -0
  368. package/types/protod/bufbuild.d.ts +6 -0
  369. package/types/protod/config.d.ts +7 -0
  370. package/types/protod/git-repo.d.ts +11 -0
  371. package/types/protod/index.d.ts +1 -0
  372. package/types/protod/proto-download.d.ts +2 -0
  373. package/types/protod/recursive.d.ts +4 -0
  374. package/types/protod/types.d.ts +49 -0
  375. package/types/protod/utils.d.ts +11 -0
  376. package/types/telescope.d.ts +2 -0
  377. package/types/types.d.ts +43 -0
  378. package/types/utils/common-create-bundle.d.ts +18 -0
  379. package/types/utils/contracts.d.ts +6 -0
  380. package/types/utils/files.d.ts +5 -0
  381. package/types/utils/index.d.ts +16 -0
  382. package/types/utils/unused.d.ts +5 -0
@@ -0,0 +1,236 @@
1
+ import * as t from "@babel/types";
2
+ import { Bundler } from "../bundler";
3
+ import { TelescopeBuilder } from "../builder";
4
+ import { buildAllImports } from "../imports";
5
+ import { parse } from "../parse";
6
+ import { writeFileSync } from "fs";
7
+ import { dirname } from "path";
8
+ import { mkdirp } from "mkdirp";
9
+ import { getNestedProto, isRefExcluded } from "@cosmology/proto-parser";
10
+ import {
11
+ createRpcClientClass,
12
+ createRpcClientImpl,
13
+ createRpcClientInterface,
14
+ createRpcQueryExtension,
15
+ } from "@cosmology/ast";
16
+ import { BundlerFile } from "src/types";
17
+ import { camel, getQueryMethodNames, swapKeyValue } from "@cosmology/utils";
18
+ import { getExportedTypeNames } from "../utils/files";
19
+
20
+ export const plugin = (builder: TelescopeBuilder, bundler: Bundler) => {
21
+ const instantRpcBundlerFiles: {
22
+ [key: string]: BundlerFile[];
23
+ } = {};
24
+
25
+ // [x] search for all files that live in package
26
+ const baseProtos = builder.store.getProtos().filter((ref) => {
27
+ return ref.proto.package.split(".")[0] === bundler.bundle.base;
28
+ });
29
+
30
+ // [x] write out all TS files for package
31
+ bundler.contexts = baseProtos
32
+ .map((ref) => {
33
+ const context = builder.context(ref);
34
+
35
+ parse(context);
36
+ context.buildBase();
37
+ const allTypes = context.types.filter(
38
+ (type) => type.obj.type === "Enum" || type.obj.type === "Type"
39
+ );
40
+
41
+ //// Anything except Msg Service OK...
42
+ const allowedRpcServices =
43
+ builder.options.rpcClients.enabledServices.filter((a) => a !== "Msg");
44
+
45
+ const localname = bundler.getLocalFilename(ref);
46
+ const filename = bundler.getFilename(localname);
47
+
48
+ const bundlerFile: BundlerFile = {
49
+ proto: context.ref.filename,
50
+ package: context.ref.proto.package,
51
+ localname,
52
+ filename,
53
+ };
54
+
55
+ if (context.proto.pluginValue("rpcClients.inline")) {
56
+ const proto = getNestedProto(context.ref.traversed);
57
+
58
+ const instantOps = context.options.rpcClients?.instantOps ?? [];
59
+ const useCamelCase = context.options.rpcClients?.camelCase;
60
+
61
+ allowedRpcServices.forEach((svcKey) => {
62
+ if (proto[svcKey]) {
63
+ const svc = proto[svcKey];
64
+
65
+ context.body.push(
66
+ createRpcClientInterface(context.generic, proto[svcKey])
67
+ );
68
+
69
+ instantOps.forEach((item) => {
70
+ let nameMapping = {
71
+ ...swapKeyValue(item.nameMapping?.All ?? {}),
72
+ ...swapKeyValue(item.nameMapping?.Query ?? {}),
73
+ };
74
+
75
+ // get all query methods
76
+ const patterns = item.include?.patterns;
77
+ const serviceTypes = item.include?.serviceTypes;
78
+
79
+ if (serviceTypes && !serviceTypes.includes("Query")) {
80
+ return;
81
+ }
82
+
83
+ const methodKeys = getQueryMethodNames(
84
+ bundlerFile.package,
85
+ Object.keys(proto[svcKey].methods ?? {}),
86
+ patterns,
87
+ useCamelCase ? camel : String
88
+ );
89
+
90
+ if (!methodKeys || !methodKeys.length) {
91
+ return;
92
+ }
93
+
94
+ context.body.push(
95
+ createRpcClientInterface(
96
+ context.generic,
97
+ svc,
98
+ item.className,
99
+ methodKeys,
100
+ nameMapping
101
+ )
102
+ );
103
+
104
+ bundlerFile.instantExportedMethods = methodKeys.map(
105
+ (key) => proto[svcKey].methods[key]
106
+ );
107
+
108
+ if (!instantRpcBundlerFiles[item.className]) {
109
+ instantRpcBundlerFiles[item.className] = [];
110
+ }
111
+
112
+ instantRpcBundlerFiles[item.className].push({ ...bundlerFile });
113
+ });
114
+
115
+ context.body.push(
116
+ createRpcClientClass(context.generic, proto[svcKey])
117
+ );
118
+ if (context.proto.pluginValue("rpcClients.extensions")) {
119
+ context.body.push(
120
+ createRpcQueryExtension(context.generic, proto[svcKey])
121
+ );
122
+ } else {
123
+ const env = context.proto.pluginValue("env");
124
+ if (env === "v-next") {
125
+ context.body.push(
126
+ createRpcClientImpl(context.generic, proto[svcKey])
127
+ );
128
+ }
129
+ }
130
+ }
131
+ });
132
+
133
+ if (proto.Msg) {
134
+ bundlerFile.isMsg = true;
135
+ context.body.push(
136
+ createRpcClientInterface(context.generic, proto.Msg)
137
+ );
138
+
139
+ instantOps.forEach((item) => {
140
+ let nameMapping = {
141
+ ...swapKeyValue(item.nameMapping?.All ?? {}),
142
+ ...swapKeyValue(item.nameMapping?.Msg ?? {}),
143
+ };
144
+
145
+ // get all msg methods
146
+ const patterns = item.include?.patterns;
147
+ const serviceTypes = item.include?.serviceTypes;
148
+
149
+ if (serviceTypes && !serviceTypes.includes("Tx")) {
150
+ return;
151
+ }
152
+
153
+ const methodKeys = getQueryMethodNames(
154
+ bundlerFile.package,
155
+ Object.keys(proto.Msg.methods ?? {}),
156
+ patterns,
157
+ useCamelCase ? camel : String
158
+ );
159
+
160
+ if (!methodKeys || !methodKeys.length) {
161
+ return;
162
+ }
163
+
164
+ context.body.push(
165
+ createRpcClientInterface(
166
+ context.generic,
167
+ proto.Msg,
168
+ item.className,
169
+ methodKeys,
170
+ nameMapping
171
+ )
172
+ );
173
+
174
+ bundlerFile.instantExportedMethods = methodKeys.map(
175
+ (key) => proto["Msg"].methods[key]
176
+ );
177
+ if (!instantRpcBundlerFiles[item.className]) {
178
+ instantRpcBundlerFiles[item.className] = [];
179
+ }
180
+
181
+ instantRpcBundlerFiles[item.className].push({ ...bundlerFile });
182
+ });
183
+
184
+ context.body.push(createRpcClientClass(context.generic, proto.Msg));
185
+ const env = context.proto.pluginValue("env");
186
+ if (env === "v-next") {
187
+ context.body.push(createRpcClientImpl(context.generic, proto.Msg));
188
+ }
189
+ }
190
+ }
191
+
192
+ // build BASE file
193
+ const importStmts = buildAllImports(context, null, context.ref.filename);
194
+ const prog = [].concat(importStmts);
195
+ // package var
196
+ if (context.proto.pluginValue("prototypes.includePackageVar")) {
197
+ prog.push(
198
+ t.exportNamedDeclaration(
199
+ t.variableDeclaration("const", [
200
+ t.variableDeclarator(
201
+ t.identifier("protobufPackage"),
202
+ t.stringLiteral(context.ref.proto.package)
203
+ ),
204
+ ])
205
+ )
206
+ );
207
+ }
208
+
209
+ // body
210
+ prog.push.apply(prog, context.body);
211
+
212
+ if (context.body.length > 0) {
213
+ const exportedTypeNames = getExportedTypeNames(prog);
214
+
215
+ exportedTypeNames.forEach((name) => {
216
+ context.store.setTypeFilesMapping(name, localname);
217
+ });
218
+
219
+ bundler.writeAst(prog, filename);
220
+ bundler.addExportObjToBundle(context.ref.proto.package, localname, exportedTypeNames);
221
+ } else {
222
+ mkdirp.sync(dirname(filename));
223
+ writeFileSync(filename, `export {}`);
224
+ }
225
+
226
+ return context;
227
+ })
228
+ .filter(Boolean);
229
+
230
+ Object.keys(instantRpcBundlerFiles).forEach((className) => {
231
+ bundler.addStateManagers(
232
+ `instantRpc_${className}`,
233
+ instantRpcBundlerFiles[className]
234
+ );
235
+ });
236
+ };
@@ -0,0 +1,54 @@
1
+ import { TelescopeBuilder } from '../builder';
2
+ import { UTILS } from '../utils';
3
+
4
+ export const plugin = (builder: TelescopeBuilder) => {
5
+ if(builder.options.useInterchainJs) {
6
+ UTILS.encodePubkey = '@interchainjs/pubkey';
7
+ UTILS.decodePubkey = '@interchainjs/pubkey';
8
+
9
+ UTILS.fromBase64 = '@interchainjs/encoding';
10
+ UTILS.fromBech32 = '@interchainjs/encoding';
11
+ UTILS.fromHex = '@interchainjs/encoding';
12
+ UTILS.fromUtf8 = '@interchainjs/encoding';
13
+ UTILS.toBase64 = '@interchainjs/encoding';
14
+ UTILS.toUtf8 = '@interchainjs/encoding';
15
+
16
+ UTILS.Decimal = '@interchainjs/math';
17
+
18
+ UTILS.DeliverTxResponse = '@interchainjs/types';
19
+ }
20
+
21
+ if (
22
+ builder.options.prototypes.typingsFormat.customTypes.useEnhancedDecimal ===
23
+ true
24
+ ) {
25
+ UTILS.Decimal = '__decimals__';
26
+ } else {
27
+ if (builder.options.useInterchainJs) {
28
+ UTILS.Decimal = '@interchainjs/math';
29
+ } else {
30
+ UTILS.Decimal = '@cosmjs/math';
31
+ }
32
+ }
33
+
34
+ if (
35
+ builder.options.prototypes.typingsFormat.customTypes.base64Lib ===
36
+ '@endo/base64'
37
+ ) {
38
+ UTILS.base64FromBytes = {
39
+ type: 'import',
40
+ path: '@endo/base64',
41
+ name: 'encodeBase64',
42
+ importAs: 'base64FromBytes',
43
+ };
44
+ UTILS.bytesFromBase64 = {
45
+ type: 'import',
46
+ path: '@endo/base64',
47
+ name: 'decodeBase64',
48
+ importAs: 'bytesFromBase64',
49
+ };
50
+ } else {
51
+ UTILS.base64FromBytes = '__helpers__';
52
+ UTILS.bytesFromBase64 = '__helpers__';
53
+ }
54
+ };
@@ -0,0 +1,79 @@
1
+ import {
2
+ toTimestamp,
3
+ fromTimestamp,
4
+ fromJsonTimestamp,
5
+ } from "./internalTimestamp";
6
+ import Long from "long";
7
+
8
+ describe("Timestamp Utilities", () => {
9
+ describe("toTimestamp", () => {
10
+ it("should convert a date to a Timestamp", () => {
11
+ const date = new Date("2000-01-01T00:00:00Z");
12
+ const result = toTimestamp(date);
13
+ expect(result.seconds.equals(Long.fromNumber(946684800))).toBeTruthy(); // 2000-01-01T00:00:00Z in Unix time
14
+ expect(result.nanos).toBe(0);
15
+ });
16
+
17
+ it("should handle nanosecond conversion correctly", () => {
18
+ const date = new Date(946684800001); // 1 millisecond after 2000-01-01T00:00:00Z
19
+ const result = toTimestamp(date);
20
+ expect(result.seconds.equals(Long.fromNumber(946684800))).toBeTruthy();
21
+ expect(result.nanos).toBe(1000000); // 1 millisecond is 1,000,000 nanoseconds
22
+ });
23
+ });
24
+
25
+ describe("fromTimestamp", () => {
26
+ it("should convert a Timestamp to a date", () => {
27
+ const timestamp = { seconds: Long.fromNumber(946684800), nanos: 0 };
28
+ const result = fromTimestamp(timestamp);
29
+ expect(result.getTime()).toBe(946684800000); // 2000-01-01T00:00:00Z in Unix time
30
+ });
31
+
32
+ it("should handle nanosecond conversion correctly", () => {
33
+ const timestamp = { seconds: Long.fromNumber(946684800), nanos: 1000000 };
34
+ const result = fromTimestamp(timestamp);
35
+ expect(result.getTime()).toBe(946684800001); // 1 millisecond after 2000-01-01T00:00:00Z
36
+ });
37
+
38
+ it("should handle negative seconds with positive nanoseconds", () => {
39
+ const timestamp = { seconds: Long.fromNumber(-1), nanos: 1000000 };
40
+ const result = fromTimestamp(timestamp);
41
+ expect(result.getTime()).toBe(-999); // 1 millisecond before 1970-01-01T00:00:00Z
42
+ });
43
+ });
44
+
45
+ describe("fromJsonTimestamp", () => {
46
+ it("should convert a Date object to a Timestamp", () => {
47
+ const date = new Date("2000-01-01T00:00:00Z");
48
+ const result = fromJsonTimestamp(date);
49
+ const expected = toTimestamp(date);
50
+ expect(result.seconds.equals(expected.seconds)).toBeTruthy();
51
+ expect(result.nanos).toBe(expected.nanos);
52
+ });
53
+
54
+ it("should convert a string date to a Timestamp", () => {
55
+ const dateString = "2000-01-01T00:00:00Z";
56
+ const result = fromJsonTimestamp(dateString);
57
+ const expected = toTimestamp(new Date(dateString));
58
+ expect(result.seconds.equals(expected.seconds)).toBeTruthy();
59
+ expect(result.nanos).toBe(expected.nanos);
60
+ });
61
+
62
+ it("should convert a JSON object to a Timestamp", () => {
63
+ const json = {
64
+ seconds: "946684800",
65
+ nanos: "1000000",
66
+ };
67
+ const result = fromJsonTimestamp(json);
68
+ expect(result.seconds.equals(Long.fromValue(json.seconds))).toBeTruthy();
69
+ expect(result.nanos).toBe(Number(json.nanos));
70
+ });
71
+
72
+ it("should handle JSON object with missing values", () => {
73
+ const json = {};
74
+ const result = fromJsonTimestamp(json);
75
+ expect(result.seconds.equals(Long.ZERO)).toBeTruthy();
76
+ expect(result.nanos).toBe(0);
77
+ });
78
+ });
79
+ });
@@ -0,0 +1,58 @@
1
+ import Long from 'long';
2
+
3
+ interface Timestamp {
4
+ /**
5
+ * Represents seconds of UTC time since Unix epoch
6
+ * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
7
+ * 9999-12-31T23:59:59Z inclusive.
8
+ */
9
+ seconds: Long;
10
+ /**
11
+ * Non-negative fractions of a second at nanosecond resolution. Negative
12
+ * second values with fractions must still have non-negative nanos values
13
+ * that count forward in time. Must be from 0 to 999,999,999
14
+ * inclusive.
15
+ */
16
+
17
+ nanos: number;
18
+ }
19
+
20
+ export function isSet(value: any): boolean {
21
+ return value !== null && value !== undefined;
22
+ }
23
+
24
+ export function toTimestamp(date: Date): Timestamp {
25
+ const seconds = numberToLong(date.getTime() / 1_000);
26
+ const nanos = date.getTime() % 1000 * 1000000;
27
+ return {
28
+ seconds,
29
+ nanos
30
+ };
31
+ };
32
+
33
+ export function fromTimestamp(t: Timestamp): Date {
34
+ let millis = t.seconds.toNumber() * 1000;
35
+ millis += t.nanos / 1000000;
36
+ return new Date(millis);
37
+ };
38
+
39
+ const timestampFromJSON = (object: any): Timestamp => {
40
+ return {
41
+ seconds: isSet(object.seconds) ? Long.fromValue(object.seconds) : Long.ZERO,
42
+ nanos: isSet(object.nanos) ? Number(object.nanos) : 0,
43
+ };
44
+ }
45
+
46
+ export function fromJsonTimestamp(o: any): Timestamp {
47
+ if (o instanceof Date) {
48
+ return toTimestamp(o);
49
+ } else if (typeof o === "string") {
50
+ return toTimestamp(new Date(o));
51
+ } else {
52
+ return timestampFromJSON(o);
53
+ }
54
+ }
55
+
56
+ function numberToLong(number: number) {
57
+ return Long.fromNumber(number);
58
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ toTimestamp,
3
+ fromTimestamp,
4
+ fromJsonTimestamp,
5
+ } from "./internalTimestampBigint";
6
+
7
+ describe("Timestamp Utilities", () => {
8
+ describe("toTimestamp", () => {
9
+ it("should convert a date to a Timestamp", () => {
10
+ const date = new Date("2000-01-01T00:00:00Z");
11
+ const result = toTimestamp(date);
12
+ expect(result.seconds).toBe(BigInt(946684800)); // 2000-01-01T00:00:00Z in Unix time
13
+ expect(result.nanos).toBe(0);
14
+ });
15
+
16
+ it("should handle nanosecond conversion correctly", () => {
17
+ const date = new Date(946684800001); // 1 millisecond after 2000-01-01T00:00:00Z
18
+ const result = toTimestamp(date);
19
+ expect(result.seconds).toBe(BigInt(946684800));
20
+ expect(result.nanos).toBe(1000000); // 1 millisecond is 1,000,000 nanoseconds
21
+ });
22
+ });
23
+
24
+ describe("fromTimestamp", () => {
25
+ it("should convert a Timestamp to a date", () => {
26
+ const timestamp = { seconds: BigInt(946684800), nanos: 0 };
27
+ const result = fromTimestamp(timestamp);
28
+ expect(result.getTime()).toBe(946684800000); // 2000-01-01T00:00:00Z in Unix time
29
+ });
30
+
31
+ it("should handle nanosecond conversion correctly", () => {
32
+ const timestamp = { seconds: BigInt(946684800), nanos: 1000000 };
33
+ const result = fromTimestamp(timestamp);
34
+ expect(result.getTime()).toBe(946684800001); // 1 millisecond after 2000-01-01T00:00:00Z
35
+ });
36
+
37
+ it("should handle negative seconds with positive nanoseconds", () => {
38
+ const timestamp = { seconds: BigInt(-1), nanos: 1000000 };
39
+ const result = fromTimestamp(timestamp);
40
+ expect(result.getTime()).toBe(-999); // 1 millisecond before 1970-01-01T00:00:00Z
41
+ });
42
+ });
43
+
44
+ describe("fromJsonTimestamp", () => {
45
+ it("should convert a Date object to a Timestamp", () => {
46
+ const date = new Date("2000-01-01T00:00:00Z");
47
+ const result = fromJsonTimestamp(date);
48
+ const expected = toTimestamp(date);
49
+ expect(result.seconds).toBe(expected.seconds);
50
+ expect(result.nanos).toBe(expected.nanos);
51
+ });
52
+
53
+ it("should convert a string date to a Timestamp", () => {
54
+ const dateString = "2000-01-01T00:00:00Z";
55
+ const result = fromJsonTimestamp(dateString);
56
+ const expected = toTimestamp(new Date(dateString));
57
+ expect(result.seconds).toBe(expected.seconds);
58
+ expect(result.nanos).toBe(expected.nanos);
59
+ });
60
+
61
+ it("should convert a JSON object with string values to a Timestamp", () => {
62
+ const json = {
63
+ seconds: "946684800",
64
+ nanos: "1000000",
65
+ };
66
+ const result = fromJsonTimestamp(json);
67
+ expect(result.seconds).toBe(BigInt(json.seconds));
68
+ expect(result.nanos).toBe(Number(json.nanos));
69
+ });
70
+
71
+ it("should handle JSON object with missing values", () => {
72
+ const json = {};
73
+ const result = fromJsonTimestamp(json);
74
+ expect(result.seconds).toBe(BigInt(0));
75
+ expect(result.nanos).toBe(0);
76
+ });
77
+ });
78
+ });
@@ -0,0 +1,58 @@
1
+ interface Timestamp {
2
+ /**
3
+ * Represents seconds of UTC time since Unix epoch
4
+ * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
5
+ * 9999-12-31T23:59:59Z inclusive.
6
+ */
7
+ seconds: bigint;
8
+ /**
9
+ * Non-negative fractions of a second at nanosecond resolution. Negative
10
+ * second values with fractions must still have non-negative nanos values
11
+ * that count forward in time. Must be from 0 to 999,999,999
12
+ * inclusive.
13
+ */
14
+
15
+ nanos: number;
16
+ }
17
+
18
+ export function isSet(value: any): boolean {
19
+ return value !== null && value !== undefined;
20
+ }
21
+
22
+ export function toTimestamp(date: Date): Timestamp {
23
+ const seconds = numberToLong(date.getTime() / 1_000);
24
+ const nanos = (date.getTime() % 1000) * 1000000;
25
+ return {
26
+ seconds,
27
+ nanos
28
+ };
29
+ }
30
+
31
+ export function fromTimestamp(t: Timestamp): Date {
32
+ let millis = Number(t.seconds) * 1000;
33
+ millis += t.nanos / 1000000;
34
+ return new Date(millis);
35
+ }
36
+
37
+ const timestampFromJSON = (object: any): Timestamp => {
38
+ return {
39
+ seconds: isSet(object.seconds)
40
+ ? BigInt(object.seconds.toString())
41
+ : BigInt(0),
42
+ nanos: isSet(object.nanos) ? Number(object.nanos) : 0
43
+ };
44
+ };
45
+
46
+ export function fromJsonTimestamp(o: any): Timestamp {
47
+ if (o instanceof Date) {
48
+ return toTimestamp(o);
49
+ } else if (typeof o === 'string') {
50
+ return toTimestamp(new Date(o));
51
+ } else {
52
+ return timestampFromJSON(o);
53
+ }
54
+ }
55
+
56
+ function numberToLong(number: number) {
57
+ return BigInt(Math.trunc(number));
58
+ }