epistery 1.4.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/witness.js CHANGED
@@ -415,6 +415,7 @@ export default class Witness {
415
415
  provider: this.serverInfo?.provider,
416
416
  chainId: this.serverInfo?.chainId,
417
417
  rpc: this.serverInfo?.rpc,
418
+ rpcProxy: this.serverInfo?.rpcProxy,
418
419
  nativeCurrency: this.serverInfo?.nativeCurrency,
419
420
  };
420
421
 
@@ -15,7 +15,7 @@
15
15
  * happens exactly once.
16
16
  */
17
17
  export { Chain, ChainConfig, ChainFeeData, ChainPolicy } from './Chain';
18
- export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains } from './registry';
18
+ export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains, configuredChains, defaultChainId } from './registry';
19
19
  export { PolygonChain, AmoyChain } from './PolygonChain';
20
20
  export { EthereumChain, SepoliaChain } from './EthereumChain';
21
21
  export { JapanOpenChain } from './JapanOpenChain';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK/G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjJ,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -16,7 +16,7 @@
16
16
  * happens exactly once.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.JapanOpenChain = exports.SepoliaChain = exports.EthereumChain = exports.AmoyChain = exports.PolygonChain = exports.registeredChains = exports.registeredChainIds = exports.hasRegisteredChain = exports.registerChain = exports.chainFor = exports.Chain = void 0;
19
+ exports.JapanOpenChain = exports.SepoliaChain = exports.EthereumChain = exports.AmoyChain = exports.PolygonChain = exports.defaultChainId = exports.configuredChains = exports.registeredChains = exports.registeredChainIds = exports.hasRegisteredChain = exports.registerChain = exports.chainFor = exports.Chain = void 0;
20
20
  // Public API
21
21
  var Chain_1 = require("./Chain");
22
22
  Object.defineProperty(exports, "Chain", { enumerable: true, get: function () { return Chain_1.Chain; } });
@@ -26,6 +26,9 @@ Object.defineProperty(exports, "registerChain", { enumerable: true, get: functio
26
26
  Object.defineProperty(exports, "hasRegisteredChain", { enumerable: true, get: function () { return registry_1.hasRegisteredChain; } });
27
27
  Object.defineProperty(exports, "registeredChainIds", { enumerable: true, get: function () { return registry_1.registeredChainIds; } });
28
28
  Object.defineProperty(exports, "registeredChains", { enumerable: true, get: function () { return registry_1.registeredChains; } });
29
+ Object.defineProperty(exports, "configuredChains", { enumerable: true, get: function () { return registry_1.configuredChains; } });
30
+ Object.defineProperty(exports, "defaultChainId", { enumerable: true, get: function () { return registry_1.defaultChainId; } });
31
+ // registeredChains: internal use + configuredChains(); not re-exported from index.mjs
29
32
  // Built-in chains — imported for their registerChain() side effect.
30
33
  // Re-exported so callers that want a concrete subclass (e.g. for instanceof
31
34
  // checks or to subclass it themselves) can import from the barrel.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,aAAa;AACb,iCAAwE;AAA/D,8FAAA,KAAK,OAAA;AACd,uCAA+G;AAAtG,oGAAA,QAAQ,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAE1F,oEAAoE;AACpE,4EAA4E;AAC5E,mEAAmE;AACnE,+CAAyD;AAAhD,4GAAA,YAAY,OAAA;AAAE,yGAAA,SAAS,OAAA;AAChC,iDAA8D;AAArD,8GAAA,aAAa,OAAA;AAAE,6GAAA,YAAY,OAAA;AACpC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,aAAa;AACb,iCAAwE;AAA/D,8FAAA,KAAK,OAAA;AACd,uCAAiJ;AAAxI,oGAAA,QAAQ,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAC5H,sFAAsF;AAEtF,oEAAoE;AACpE,4EAA4E;AAC5E,mEAAmE;AACnE,+CAAyD;AAAhD,4GAAA,YAAY,OAAA;AAAE,yGAAA,SAAS,OAAA;AAChC,iDAA8D;AAArD,8GAAA,aAAa,OAAA;AAAE,6GAAA,YAAY,OAAA;AACpC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
@@ -28,6 +28,23 @@ export declare function chainFor(config: ChainConfig): Chain;
28
28
  * UI dropdowns. No root config needed.
29
29
  */
30
30
  export declare function registeredChains(): ChainConfig[];
31
+ /**
32
+ * Return the chain list with `privateRpc` overlaid from root config.
33
+ *
34
+ * Looks in `~/.epistery/config.ini` for:
35
+ * - `[default.rpc.<chainId>] privateRpc = ...` (per-chain override)
36
+ * - `[default.provider] privateRpc / rpc` (legacy single-chain fallback)
37
+ *
38
+ * Chains without a config override are returned unchanged.
39
+ */
40
+ export declare function configuredChains(): ChainConfig[];
41
+ /**
42
+ * Return the configured default chainId from root config.
43
+ *
44
+ * Checks `[default] defaultChainId`, then `[default.provider] chainId`,
45
+ * falling back to Polygon mainnet (137).
46
+ */
47
+ export declare function defaultChainId(): string;
31
48
  /** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
32
49
  export declare function hasRegisteredChain(chainId: number): boolean;
33
50
  /** Visible for tests / debug. Returns the list of registered chainIds. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7C,KAAK,SAAS,GAAG,CAAC,KAAK,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC;AAmB3F;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAEpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAanD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAShD;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG7C,KAAK,SAAS,GAAG,CAAC,KAAK,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC;AAmB3F;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAEpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAanD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAShD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAWhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
@@ -3,9 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerChain = registerChain;
4
4
  exports.chainFor = chainFor;
5
5
  exports.registeredChains = registeredChains;
6
+ exports.configuredChains = configuredChains;
7
+ exports.defaultChainId = defaultChainId;
6
8
  exports.hasRegisteredChain = hasRegisteredChain;
7
9
  exports.registeredChainIds = registeredChainIds;
8
10
  const Chain_1 = require("./Chain");
11
+ const Config_1 = require("../utils/Config");
9
12
  /**
10
13
  * Registry of chainId → Chain subclass.
11
14
  *
@@ -72,6 +75,40 @@ function registeredChains() {
72
75
  }
73
76
  return chains;
74
77
  }
78
+ /**
79
+ * Return the chain list with `privateRpc` overlaid from root config.
80
+ *
81
+ * Looks in `~/.epistery/config.ini` for:
82
+ * - `[default.rpc.<chainId>] privateRpc = ...` (per-chain override)
83
+ * - `[default.provider] privateRpc / rpc` (legacy single-chain fallback)
84
+ *
85
+ * Chains without a config override are returned unchanged.
86
+ */
87
+ function configuredChains() {
88
+ const config = new Config_1.Config();
89
+ const rootData = config.read('/');
90
+ return registeredChains().map(chain => {
91
+ const id = String(chain.chainId);
92
+ const privateRpc = rootData?.default?.rpc?.[id]?.privateRpc
93
+ || (rootData?.default?.provider && String(rootData.default.provider.chainId) === id
94
+ ? (rootData.default.provider.privateRpc || rootData.default.provider.rpc)
95
+ : null);
96
+ return privateRpc ? { ...chain, privateRpc } : chain;
97
+ });
98
+ }
99
+ /**
100
+ * Return the configured default chainId from root config.
101
+ *
102
+ * Checks `[default] defaultChainId`, then `[default.provider] chainId`,
103
+ * falling back to Polygon mainnet (137).
104
+ */
105
+ function defaultChainId() {
106
+ const config = new Config_1.Config();
107
+ const rootData = config.read('/');
108
+ return String(rootData?.default?.defaultChainId
109
+ || rootData?.default?.provider?.chainId
110
+ || '137');
111
+ }
75
112
  /** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
76
113
  function hasRegisteredChain(chainId) {
77
114
  return REGISTRY.has(Number(chainId));
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":";;AA0BA,sCAEC;AAeD,4BAaC;AAOD,4CASC;AAGD,gDAEC;AAGD,gDAEC;AAlFD,mCAA6C;AAI7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE9C;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAe,EAAE,IAAe;IAC5D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,QAAQ,CAAC,MAAmB;IAC1C,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,aAAK,CAAC;IAC3D,gEAAgE;IAChE,MAAM,MAAM,GAAgB,EAAE,GAAI,IAAI,CAAC,QAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7E,oEAAoE;IACpE,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC;YACV,GAAI,IAAI,CAAC,QAAwB;YACjC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,SAAgB,kBAAkB,CAAC,OAAe;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,0EAA0E;AAC1E,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/chains/registry.ts"],"names":[],"mappings":"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"}
package/index.mjs CHANGED
@@ -5,7 +5,7 @@ import { fileURLToPath } from "url";
5
5
  import { Epistery } from "./dist/epistery.js";
6
6
  import { Utils } from "./dist/utils/Utils.js";
7
7
  import { Config } from "./dist/utils/Config.js";
8
- import { chainFor, registerChain, registeredChains, Chain } from "./dist/chains/index.js";
8
+ import { chainFor, registerChain, configuredChains, defaultChainId, Chain } from "./dist/chains/index.js";
9
9
  import createRoutes from "./routes/index.mjs";
10
10
 
11
11
  const __filename = fileURLToPath(import.meta.url);
@@ -627,4 +627,4 @@ class EpisteryAttach {
627
627
  }
628
628
  }
629
629
 
630
- export { EpisteryAttach as Epistery, Config, chainFor, registerChain, registeredChains, Chain };
630
+ export { EpisteryAttach as Epistery, Config, chainFor, registerChain, configuredChains, defaultChainId, Chain };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "epistery",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Epistery brings blockchain capabilities to mundane web tasks like engagement metrics, authentication and commerce of all sorts.",
5
5
  "author": "Rootz Corp.",
6
6
  "license": "MIT",
@@ -17,7 +17,8 @@
17
17
 
18
18
  // Public API
19
19
  export { Chain, ChainConfig, ChainFeeData, ChainPolicy } from './Chain';
20
- export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains } from './registry';
20
+ export { chainFor, registerChain, hasRegisteredChain, registeredChainIds, registeredChains, configuredChains, defaultChainId } from './registry';
21
+ // registeredChains: internal use + configuredChains(); not re-exported from index.mjs
21
22
 
22
23
  // Built-in chains — imported for their registerChain() side effect.
23
24
  // Re-exported so callers that want a concrete subclass (e.g. for instanceof
@@ -1,4 +1,5 @@
1
1
  import { Chain, ChainConfig } from './Chain';
2
+ import { Config } from '../utils/Config';
2
3
 
3
4
  type ChainCtor = (new (config: ChainConfig) => Chain) & { defaults: Partial<ChainConfig> };
4
5
 
@@ -72,6 +73,44 @@ export function registeredChains(): ChainConfig[] {
72
73
  return chains;
73
74
  }
74
75
 
76
+ /**
77
+ * Return the chain list with `privateRpc` overlaid from root config.
78
+ *
79
+ * Looks in `~/.epistery/config.ini` for:
80
+ * - `[default.rpc.<chainId>] privateRpc = ...` (per-chain override)
81
+ * - `[default.provider] privateRpc / rpc` (legacy single-chain fallback)
82
+ *
83
+ * Chains without a config override are returned unchanged.
84
+ */
85
+ export function configuredChains(): ChainConfig[] {
86
+ const config = new Config();
87
+ const rootData = config.read('/');
88
+ return registeredChains().map(chain => {
89
+ const id = String(chain.chainId);
90
+ const privateRpc = rootData?.default?.rpc?.[id]?.privateRpc
91
+ || (rootData?.default?.provider && String(rootData.default.provider.chainId) === id
92
+ ? (rootData.default.provider.privateRpc || rootData.default.provider.rpc)
93
+ : null);
94
+ return privateRpc ? { ...chain, privateRpc } : chain;
95
+ });
96
+ }
97
+
98
+ /**
99
+ * Return the configured default chainId from root config.
100
+ *
101
+ * Checks `[default] defaultChainId`, then `[default.provider] chainId`,
102
+ * falling back to Polygon mainnet (137).
103
+ */
104
+ export function defaultChainId(): string {
105
+ const config = new Config();
106
+ const rootData = config.read('/');
107
+ return String(
108
+ rootData?.default?.defaultChainId
109
+ || rootData?.default?.provider?.chainId
110
+ || '137'
111
+ );
112
+ }
113
+
75
114
  /** Visible for tests / debug. Returns true if a chainId has a registered subclass. */
76
115
  export function hasRegisteredChain(chainId: number): boolean {
77
116
  return REGISTRY.has(Number(chainId));