@aster-rpc/aster 0.1.2

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 (233) hide show
  1. package/dist/capabilities.d.ts +26 -0
  2. package/dist/capabilities.d.ts.map +1 -0
  3. package/dist/capabilities.js +29 -0
  4. package/dist/capabilities.js.map +1 -0
  5. package/dist/client.d.ts +65 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +108 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/codec.d.ts +156 -0
  10. package/dist/codec.d.ts.map +1 -0
  11. package/dist/codec.js +477 -0
  12. package/dist/codec.js.map +1 -0
  13. package/dist/config.d.ts +102 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +454 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/contract/identity.d.ts +115 -0
  18. package/dist/contract/identity.d.ts.map +1 -0
  19. package/dist/contract/identity.js +188 -0
  20. package/dist/contract/identity.js.map +1 -0
  21. package/dist/contract/manifest.d.ts +77 -0
  22. package/dist/contract/manifest.d.ts.map +1 -0
  23. package/dist/contract/manifest.js +127 -0
  24. package/dist/contract/manifest.js.map +1 -0
  25. package/dist/contract/publication.d.ts +71 -0
  26. package/dist/contract/publication.d.ts.map +1 -0
  27. package/dist/contract/publication.js +85 -0
  28. package/dist/contract/publication.js.map +1 -0
  29. package/dist/decorators.d.ts +139 -0
  30. package/dist/decorators.d.ts.map +1 -0
  31. package/dist/decorators.js +175 -0
  32. package/dist/decorators.js.map +1 -0
  33. package/dist/dynamic.d.ts +61 -0
  34. package/dist/dynamic.d.ts.map +1 -0
  35. package/dist/dynamic.js +147 -0
  36. package/dist/dynamic.js.map +1 -0
  37. package/dist/framing.d.ts +74 -0
  38. package/dist/framing.d.ts.map +1 -0
  39. package/dist/framing.js +162 -0
  40. package/dist/framing.js.map +1 -0
  41. package/dist/health.d.ts +127 -0
  42. package/dist/health.d.ts.map +1 -0
  43. package/dist/health.js +236 -0
  44. package/dist/health.js.map +1 -0
  45. package/dist/index.d.ts +67 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +101 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/interceptors/audit.d.ts +25 -0
  50. package/dist/interceptors/audit.d.ts.map +1 -0
  51. package/dist/interceptors/audit.js +46 -0
  52. package/dist/interceptors/audit.js.map +1 -0
  53. package/dist/interceptors/auth.d.ts +13 -0
  54. package/dist/interceptors/auth.d.ts.map +1 -0
  55. package/dist/interceptors/auth.js +34 -0
  56. package/dist/interceptors/auth.js.map +1 -0
  57. package/dist/interceptors/base.d.ts +74 -0
  58. package/dist/interceptors/base.d.ts.map +1 -0
  59. package/dist/interceptors/base.js +103 -0
  60. package/dist/interceptors/base.js.map +1 -0
  61. package/dist/interceptors/capability.d.ts +16 -0
  62. package/dist/interceptors/capability.d.ts.map +1 -0
  63. package/dist/interceptors/capability.js +63 -0
  64. package/dist/interceptors/capability.js.map +1 -0
  65. package/dist/interceptors/circuit-breaker.d.ts +40 -0
  66. package/dist/interceptors/circuit-breaker.d.ts.map +1 -0
  67. package/dist/interceptors/circuit-breaker.js +91 -0
  68. package/dist/interceptors/circuit-breaker.js.map +1 -0
  69. package/dist/interceptors/compression.d.ts +11 -0
  70. package/dist/interceptors/compression.d.ts.map +1 -0
  71. package/dist/interceptors/compression.js +12 -0
  72. package/dist/interceptors/compression.js.map +1 -0
  73. package/dist/interceptors/deadline.d.ts +12 -0
  74. package/dist/interceptors/deadline.d.ts.map +1 -0
  75. package/dist/interceptors/deadline.js +28 -0
  76. package/dist/interceptors/deadline.js.map +1 -0
  77. package/dist/interceptors/metrics.d.ts +43 -0
  78. package/dist/interceptors/metrics.d.ts.map +1 -0
  79. package/dist/interceptors/metrics.js +132 -0
  80. package/dist/interceptors/metrics.js.map +1 -0
  81. package/dist/interceptors/rate-limit.d.ts +24 -0
  82. package/dist/interceptors/rate-limit.d.ts.map +1 -0
  83. package/dist/interceptors/rate-limit.js +84 -0
  84. package/dist/interceptors/rate-limit.js.map +1 -0
  85. package/dist/interceptors/retry.d.ts +25 -0
  86. package/dist/interceptors/retry.d.ts.map +1 -0
  87. package/dist/interceptors/retry.js +55 -0
  88. package/dist/interceptors/retry.js.map +1 -0
  89. package/dist/limits.d.ts +77 -0
  90. package/dist/limits.d.ts.map +1 -0
  91. package/dist/limits.js +137 -0
  92. package/dist/limits.js.map +1 -0
  93. package/dist/logging.d.ts +40 -0
  94. package/dist/logging.d.ts.map +1 -0
  95. package/dist/logging.js +92 -0
  96. package/dist/logging.js.map +1 -0
  97. package/dist/metadata.d.ts +14 -0
  98. package/dist/metadata.d.ts.map +1 -0
  99. package/dist/metadata.js +68 -0
  100. package/dist/metadata.js.map +1 -0
  101. package/dist/metrics.d.ts +40 -0
  102. package/dist/metrics.d.ts.map +1 -0
  103. package/dist/metrics.js +92 -0
  104. package/dist/metrics.js.map +1 -0
  105. package/dist/peer-store.d.ts +53 -0
  106. package/dist/peer-store.d.ts.map +1 -0
  107. package/dist/peer-store.js +105 -0
  108. package/dist/peer-store.js.map +1 -0
  109. package/dist/protocol.d.ts +44 -0
  110. package/dist/protocol.d.ts.map +1 -0
  111. package/dist/protocol.js +59 -0
  112. package/dist/protocol.js.map +1 -0
  113. package/dist/registration.d.ts +81 -0
  114. package/dist/registration.d.ts.map +1 -0
  115. package/dist/registration.js +161 -0
  116. package/dist/registration.js.map +1 -0
  117. package/dist/registry/acl.d.ts +57 -0
  118. package/dist/registry/acl.d.ts.map +1 -0
  119. package/dist/registry/acl.js +104 -0
  120. package/dist/registry/acl.js.map +1 -0
  121. package/dist/registry/client.d.ts +70 -0
  122. package/dist/registry/client.d.ts.map +1 -0
  123. package/dist/registry/client.js +115 -0
  124. package/dist/registry/client.js.map +1 -0
  125. package/dist/registry/gossip.d.ts +43 -0
  126. package/dist/registry/gossip.d.ts.map +1 -0
  127. package/dist/registry/gossip.js +102 -0
  128. package/dist/registry/gossip.js.map +1 -0
  129. package/dist/registry/keys.d.ts +25 -0
  130. package/dist/registry/keys.d.ts.map +1 -0
  131. package/dist/registry/keys.js +47 -0
  132. package/dist/registry/keys.js.map +1 -0
  133. package/dist/registry/models.d.ts +80 -0
  134. package/dist/registry/models.d.ts.map +1 -0
  135. package/dist/registry/models.js +35 -0
  136. package/dist/registry/models.js.map +1 -0
  137. package/dist/registry/publisher.d.ts +65 -0
  138. package/dist/registry/publisher.d.ts.map +1 -0
  139. package/dist/registry/publisher.js +164 -0
  140. package/dist/registry/publisher.js.map +1 -0
  141. package/dist/runtime.d.ts +267 -0
  142. package/dist/runtime.d.ts.map +1 -0
  143. package/dist/runtime.js +1366 -0
  144. package/dist/runtime.js.map +1 -0
  145. package/dist/server.d.ts +100 -0
  146. package/dist/server.d.ts.map +1 -0
  147. package/dist/server.js +511 -0
  148. package/dist/server.js.map +1 -0
  149. package/dist/service.d.ts +72 -0
  150. package/dist/service.d.ts.map +1 -0
  151. package/dist/service.js +98 -0
  152. package/dist/service.js.map +1 -0
  153. package/dist/session.d.ts +64 -0
  154. package/dist/session.d.ts.map +1 -0
  155. package/dist/session.js +350 -0
  156. package/dist/session.js.map +1 -0
  157. package/dist/status.d.ts +113 -0
  158. package/dist/status.d.ts.map +1 -0
  159. package/dist/status.js +206 -0
  160. package/dist/status.js.map +1 -0
  161. package/dist/transport/base.d.ts +46 -0
  162. package/dist/transport/base.d.ts.map +1 -0
  163. package/dist/transport/base.js +10 -0
  164. package/dist/transport/base.js.map +1 -0
  165. package/dist/transport/iroh.d.ts +45 -0
  166. package/dist/transport/iroh.d.ts.map +1 -0
  167. package/dist/transport/iroh.js +225 -0
  168. package/dist/transport/iroh.js.map +1 -0
  169. package/dist/transport/local.d.ts +48 -0
  170. package/dist/transport/local.d.ts.map +1 -0
  171. package/dist/transport/local.js +139 -0
  172. package/dist/transport/local.js.map +1 -0
  173. package/dist/trust/admission.d.ts +60 -0
  174. package/dist/trust/admission.d.ts.map +1 -0
  175. package/dist/trust/admission.js +149 -0
  176. package/dist/trust/admission.js.map +1 -0
  177. package/dist/trust/bootstrap.d.ts +109 -0
  178. package/dist/trust/bootstrap.d.ts.map +1 -0
  179. package/dist/trust/bootstrap.js +311 -0
  180. package/dist/trust/bootstrap.js.map +1 -0
  181. package/dist/trust/clock.d.ts +93 -0
  182. package/dist/trust/clock.d.ts.map +1 -0
  183. package/dist/trust/clock.js +154 -0
  184. package/dist/trust/clock.js.map +1 -0
  185. package/dist/trust/consumer.d.ts +139 -0
  186. package/dist/trust/consumer.d.ts.map +1 -0
  187. package/dist/trust/consumer.js +323 -0
  188. package/dist/trust/consumer.js.map +1 -0
  189. package/dist/trust/credentials.d.ts +98 -0
  190. package/dist/trust/credentials.d.ts.map +1 -0
  191. package/dist/trust/credentials.js +250 -0
  192. package/dist/trust/credentials.js.map +1 -0
  193. package/dist/trust/delegated.d.ts +118 -0
  194. package/dist/trust/delegated.d.ts.map +1 -0
  195. package/dist/trust/delegated.js +292 -0
  196. package/dist/trust/delegated.js.map +1 -0
  197. package/dist/trust/gossip.d.ts +146 -0
  198. package/dist/trust/gossip.d.ts.map +1 -0
  199. package/dist/trust/gossip.js +334 -0
  200. package/dist/trust/gossip.js.map +1 -0
  201. package/dist/trust/hooks.d.ts +84 -0
  202. package/dist/trust/hooks.d.ts.map +1 -0
  203. package/dist/trust/hooks.js +125 -0
  204. package/dist/trust/hooks.js.map +1 -0
  205. package/dist/trust/iid.d.ts +65 -0
  206. package/dist/trust/iid.d.ts.map +1 -0
  207. package/dist/trust/iid.js +104 -0
  208. package/dist/trust/iid.js.map +1 -0
  209. package/dist/trust/mesh.d.ts +43 -0
  210. package/dist/trust/mesh.d.ts.map +1 -0
  211. package/dist/trust/mesh.js +105 -0
  212. package/dist/trust/mesh.js.map +1 -0
  213. package/dist/trust/nonce.d.ts +39 -0
  214. package/dist/trust/nonce.d.ts.map +1 -0
  215. package/dist/trust/nonce.js +46 -0
  216. package/dist/trust/nonce.js.map +1 -0
  217. package/dist/trust/producer.d.ts +80 -0
  218. package/dist/trust/producer.d.ts.map +1 -0
  219. package/dist/trust/producer.js +151 -0
  220. package/dist/trust/producer.js.map +1 -0
  221. package/dist/trust/rcan.d.ts +29 -0
  222. package/dist/trust/rcan.d.ts.map +1 -0
  223. package/dist/trust/rcan.js +57 -0
  224. package/dist/trust/rcan.js.map +1 -0
  225. package/dist/types.d.ts +57 -0
  226. package/dist/types.d.ts.map +1 -0
  227. package/dist/types.js +50 -0
  228. package/dist/types.js.map +1 -0
  229. package/dist/xlang.d.ts +26 -0
  230. package/dist/xlang.d.ts.map +1 -0
  231. package/dist/xlang.js +55 -0
  232. package/dist/xlang.js.map +1 -0
  233. package/package.json +59 -0
package/dist/config.js ADDED
@@ -0,0 +1,454 @@
1
+ /**
2
+ * AsterConfig — configuration resolution.
3
+ *
4
+ * Three-layer resolution order:
5
+ * 1. Built-in defaults
6
+ * 2. Config file (aster.config.ts, aster.toml, .asterrc)
7
+ * 3. Environment variables (ASTER_* prefix, always win)
8
+ */
9
+ function envBool(key, fallback) {
10
+ const v = process.env[key]?.toLowerCase();
11
+ if (!v)
12
+ return fallback;
13
+ return ['true', '1', 'yes', 'on'].includes(v);
14
+ }
15
+ function envInt(key, fallback) {
16
+ const v = process.env[key];
17
+ if (!v)
18
+ return fallback;
19
+ const n = parseInt(v, 10);
20
+ return isNaN(n) ? fallback : n;
21
+ }
22
+ function envString(key) {
23
+ return process.env[key] || undefined;
24
+ }
25
+ function envBytes(key) {
26
+ const hex = process.env[key];
27
+ if (!hex)
28
+ return undefined;
29
+ return new Uint8Array(Buffer.from(hex, 'hex'));
30
+ }
31
+ /** Load config from environment variables with built-in defaults. */
32
+ export function configFromEnv() {
33
+ return {
34
+ rootPubkey: envBytes('ASTER_ROOT_PUBKEY'),
35
+ rootPubkeyFile: envString('ASTER_ROOT_PUBKEY_FILE'),
36
+ enrollmentCredentialFile: envString('ASTER_ENROLLMENT_CREDENTIAL'),
37
+ allowAllConsumers: envBool('ASTER_ALLOW_ALL_CONSUMERS', false),
38
+ allowAllProducers: envBool('ASTER_ALLOW_ALL_PRODUCERS', true),
39
+ endpointAddr: envString('ASTER_ENDPOINT_ADDR'),
40
+ storagePath: envString('ASTER_STORAGE_PATH'),
41
+ healthPort: envInt('ASTER_HEALTH_PORT', 0),
42
+ healthHost: envString('ASTER_HEALTH_HOST') ?? '127.0.0.1',
43
+ secretKey: envBytes('ASTER_SECRET_KEY'),
44
+ relayMode: envString('ASTER_RELAY_MODE'),
45
+ bindAddr: envString('ASTER_BIND_ADDR'),
46
+ enableMonitoring: envBool('ASTER_ENABLE_MONITORING', false),
47
+ enableHooks: envBool('ASTER_ENABLE_HOOKS', false),
48
+ hookTimeoutMs: envInt('ASTER_HOOK_TIMEOUT_MS', 5000),
49
+ logFormat: (envString('ASTER_LOG_FORMAT') ?? 'text'),
50
+ logLevel: (envString('ASTER_LOG_LEVEL') ?? 'info'),
51
+ logMask: envBool('ASTER_LOG_MASK', true),
52
+ identityFile: envString('ASTER_IDENTITY_FILE'),
53
+ };
54
+ }
55
+ /**
56
+ * Load config from a TOML file, then overlay env vars.
57
+ *
58
+ * Supports aster.toml with sections: [trust], [connect], [storage],
59
+ * [network], [logging], [health].
60
+ */
61
+ export function configFromFile(filePath) {
62
+ const { readFileSync } = require('node:fs');
63
+ const text = readFileSync(filePath, 'utf-8');
64
+ const toml = parseSimpleToml(text);
65
+ const base = configFromEnv(); // env always wins
66
+ // Merge TOML values (only if env didn't set them)
67
+ const trust = toml.trust;
68
+ if (trust) {
69
+ if (!base.rootPubkey && trust.root_pubkey) {
70
+ base.rootPubkey = new Uint8Array(Buffer.from(trust.root_pubkey, 'hex'));
71
+ }
72
+ if (!base.rootPubkeyFile && trust.root_pubkey_file) {
73
+ base.rootPubkeyFile = trust.root_pubkey_file;
74
+ }
75
+ if (!base.enrollmentCredentialFile && trust.enrollment_credential) {
76
+ base.enrollmentCredentialFile = trust.enrollment_credential;
77
+ }
78
+ if (trust.allow_all_consumers !== undefined && !process.env.ASTER_ALLOW_ALL_CONSUMERS) {
79
+ base.allowAllConsumers = !!trust.allow_all_consumers;
80
+ }
81
+ if (trust.allow_all_producers !== undefined && !process.env.ASTER_ALLOW_ALL_PRODUCERS) {
82
+ base.allowAllProducers = !!trust.allow_all_producers;
83
+ }
84
+ }
85
+ const connect = toml.connect;
86
+ if (connect) {
87
+ if (!base.endpointAddr && connect.endpoint_addr) {
88
+ base.endpointAddr = connect.endpoint_addr;
89
+ }
90
+ }
91
+ const storage = toml.storage;
92
+ if (storage) {
93
+ if (!base.storagePath && storage.path) {
94
+ base.storagePath = storage.path;
95
+ }
96
+ }
97
+ const network = toml.network;
98
+ if (network) {
99
+ if (!base.secretKey && network.secret_key) {
100
+ base.secretKey = new Uint8Array(Buffer.from(network.secret_key, 'base64'));
101
+ }
102
+ if (!base.relayMode && network.relay_mode) {
103
+ base.relayMode = network.relay_mode;
104
+ }
105
+ if (!base.bindAddr && network.bind_addr) {
106
+ base.bindAddr = network.bind_addr;
107
+ }
108
+ if (network.enable_monitoring !== undefined && !process.env.ASTER_ENABLE_MONITORING) {
109
+ base.enableMonitoring = !!network.enable_monitoring;
110
+ }
111
+ if (network.enable_hooks !== undefined && !process.env.ASTER_ENABLE_HOOKS) {
112
+ base.enableHooks = !!network.enable_hooks;
113
+ }
114
+ if (network.hook_timeout_ms !== undefined && !process.env.ASTER_HOOK_TIMEOUT_MS) {
115
+ base.hookTimeoutMs = network.hook_timeout_ms;
116
+ }
117
+ }
118
+ const logging = toml.logging;
119
+ if (logging) {
120
+ if (!process.env.ASTER_LOG_FORMAT && logging.format) {
121
+ base.logFormat = logging.format;
122
+ }
123
+ if (!process.env.ASTER_LOG_LEVEL && logging.level) {
124
+ base.logLevel = logging.level;
125
+ }
126
+ if (!process.env.ASTER_LOG_MASK && logging.mask !== undefined) {
127
+ base.logMask = !!logging.mask;
128
+ }
129
+ }
130
+ const health = toml.health;
131
+ if (health) {
132
+ if (!process.env.ASTER_HEALTH_PORT && health.port !== undefined) {
133
+ base.healthPort = health.port;
134
+ }
135
+ if (!process.env.ASTER_HEALTH_HOST && health.host) {
136
+ base.healthHost = health.host;
137
+ }
138
+ }
139
+ return base;
140
+ }
141
+ /**
142
+ * Load and parse an .aster-identity TOML file.
143
+ *
144
+ * Synthesizes ``aster.role`` and ``aster.name`` into each peer's
145
+ * ``attributes`` from the top-level ``role`` and ``name`` fields.
146
+ * Merges the top-level ``[published_services.*]`` into each peer's
147
+ * ``published_services`` so callers always see a complete peer dict.
148
+ *
149
+ * Returns the full parsed identity or null if the file doesn't exist.
150
+ */
151
+ export function loadIdentityFile(filePath) {
152
+ const { existsSync, readFileSync } = require('node:fs');
153
+ const { join } = require('node:path');
154
+ const path = filePath ?? join(process.cwd(), '.aster-identity');
155
+ if (!existsSync(path))
156
+ return null;
157
+ try {
158
+ const text = readFileSync(path, 'utf-8');
159
+ const data = parseSimpleToml(text);
160
+ const node = (data.node ?? {});
161
+ const peers = (data.peers ?? []);
162
+ const publishedServices = (data.published_services ?? {});
163
+ // Synthesize aster.role / aster.name into attributes, merge published_services
164
+ for (const peer of peers) {
165
+ const attrs = (peer.attributes ?? {});
166
+ if (!('aster.role' in attrs) && peer.role) {
167
+ attrs['aster.role'] = peer.role;
168
+ }
169
+ if (!('aster.name' in attrs) && peer.name) {
170
+ attrs['aster.name'] = peer.name;
171
+ }
172
+ peer.attributes = attrs;
173
+ // Each peer gets the top-level published_services as default
174
+ if (!peer.published_services) {
175
+ peer.published_services = publishedServices;
176
+ }
177
+ }
178
+ return { node, peers, published_services: publishedServices };
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ /**
185
+ * Load identity from a .aster-identity TOML file.
186
+ *
187
+ * Returns secretKey + matching peer, or null if not found.
188
+ * This is the simple convenience wrapper; use loadIdentityFile()
189
+ * for full access to published_services and all peers.
190
+ */
191
+ export function loadIdentity(filePath, peerName, role) {
192
+ const identity = loadIdentityFile(filePath);
193
+ if (!identity)
194
+ return null;
195
+ const node = identity.node;
196
+ if (!node?.secret_key)
197
+ return null;
198
+ const secretKey = new Uint8Array(Buffer.from(node.secret_key, 'base64'));
199
+ // Find matching peer
200
+ let peer;
201
+ if (peerName) {
202
+ peer = identity.peers.find(p => p.name === peerName);
203
+ }
204
+ else if (role) {
205
+ peer = identity.peers.find(p => p.role === role);
206
+ }
207
+ else {
208
+ peer = identity.peers[0];
209
+ }
210
+ return { secretKey, peer: peer ?? {} };
211
+ }
212
+ /**
213
+ * Find a peer entry by name or role from parsed identity data.
214
+ */
215
+ export function findPeer(identity, name, role) {
216
+ for (const peer of identity.peers) {
217
+ if (name !== undefined && peer.name === name)
218
+ return peer;
219
+ if (name === undefined && role !== undefined && peer.role === role)
220
+ return peer;
221
+ }
222
+ return undefined;
223
+ }
224
+ /**
225
+ * Extract producer tokens from a peer's published_services.
226
+ *
227
+ * Returns a map of service name to token data (entries that
228
+ * have a ``producer_token`` field).
229
+ */
230
+ export function getProducerTokens(peer) {
231
+ const published = peer.published_services;
232
+ if (!published || typeof published !== 'object')
233
+ return {};
234
+ const tokens = {};
235
+ for (const [svcName, entry] of Object.entries(published)) {
236
+ if (entry && typeof entry === 'object' && entry.producer_token) {
237
+ tokens[svcName] = entry;
238
+ }
239
+ }
240
+ return tokens;
241
+ }
242
+ /**
243
+ * Minimal TOML parser for config files.
244
+ * Handles sections (including dotted like [a.b]), array-of-tables,
245
+ * strings, numbers, booleans, inline tables, and simple arrays.
246
+ * Not a full TOML parser.
247
+ */
248
+ export function parseSimpleToml(text) {
249
+ const result = {};
250
+ let currentSection = result;
251
+ for (const line of text.split('\n')) {
252
+ const trimmed = line.trim();
253
+ if (!trimmed || trimmed.startsWith('#'))
254
+ continue;
255
+ // Array of tables [[name]]
256
+ const arrayMatch = trimmed.match(/^\[\[([^\]]+)\]\]$/);
257
+ if (arrayMatch) {
258
+ const name = arrayMatch[1];
259
+ if (!Array.isArray(result[name]))
260
+ result[name] = [];
261
+ const entry = {};
262
+ result[name].push(entry);
263
+ currentSection = entry;
264
+ continue;
265
+ }
266
+ // Section header [name] or [name.subkey]
267
+ const sectionMatch = trimmed.match(/^\[([^\]]+)\]$/);
268
+ if (sectionMatch) {
269
+ const name = sectionMatch[1];
270
+ const dotIdx = name.indexOf('.');
271
+ if (dotIdx !== -1) {
272
+ // Dotted section: [parent.child] → result.parent.child = {}
273
+ const parent = name.slice(0, dotIdx);
274
+ const child = name.slice(dotIdx + 1);
275
+ if (!result[parent] || typeof result[parent] !== 'object' || Array.isArray(result[parent])) {
276
+ result[parent] = {};
277
+ }
278
+ const parentObj = result[parent];
279
+ parentObj[child] = parentObj[child] ?? {};
280
+ currentSection = parentObj[child];
281
+ }
282
+ else {
283
+ result[name] = result[name] ?? {};
284
+ currentSection = result[name];
285
+ }
286
+ continue;
287
+ }
288
+ // Key = value
289
+ const kvMatch = trimmed.match(/^(\w+)\s*=\s*(.+)$/);
290
+ if (kvMatch) {
291
+ const [, key, rawValue] = kvMatch;
292
+ currentSection[key] = parseTomlValue(rawValue.trim());
293
+ }
294
+ }
295
+ return result;
296
+ }
297
+ function splitTopLevel(s, sep) {
298
+ const out = [];
299
+ let depth = 0;
300
+ let inStr = null;
301
+ let buf = '';
302
+ for (let i = 0; i < s.length; i++) {
303
+ const ch = s[i];
304
+ if (inStr) {
305
+ if (ch === inStr)
306
+ inStr = null;
307
+ buf += ch;
308
+ continue;
309
+ }
310
+ if (ch === '"' || ch === "'") {
311
+ inStr = ch;
312
+ buf += ch;
313
+ continue;
314
+ }
315
+ if (ch === '{' || ch === '[')
316
+ depth++;
317
+ else if (ch === '}' || ch === ']')
318
+ depth--;
319
+ if (ch === sep && depth === 0) {
320
+ out.push(buf);
321
+ buf = '';
322
+ continue;
323
+ }
324
+ buf += ch;
325
+ }
326
+ if (buf.length > 0)
327
+ out.push(buf);
328
+ return out;
329
+ }
330
+ function findTopLevelEquals(s) {
331
+ let inStr = null;
332
+ for (let i = 0; i < s.length; i++) {
333
+ const ch = s[i];
334
+ if (inStr) {
335
+ if (ch === inStr)
336
+ inStr = null;
337
+ continue;
338
+ }
339
+ if (ch === '"' || ch === "'") {
340
+ inStr = ch;
341
+ continue;
342
+ }
343
+ if (ch === '=')
344
+ return i;
345
+ }
346
+ return -1;
347
+ }
348
+ function parseTomlValue(raw) {
349
+ // Quoted string
350
+ if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
351
+ return raw.slice(1, -1);
352
+ }
353
+ // Boolean
354
+ if (raw === 'true')
355
+ return true;
356
+ if (raw === 'false')
357
+ return false;
358
+ // Number
359
+ const num = Number(raw);
360
+ if (!isNaN(num) && raw !== '')
361
+ return num;
362
+ // Inline table { key = "val", ... }
363
+ if (raw.startsWith('{') && raw.endsWith('}')) {
364
+ const inner = raw.slice(1, -1).trim();
365
+ if (!inner)
366
+ return {};
367
+ const obj = {};
368
+ for (const pair of splitTopLevel(inner, ',')) {
369
+ const eqIdx = findTopLevelEquals(pair);
370
+ if (eqIdx === -1)
371
+ continue;
372
+ const k = pair.slice(0, eqIdx).trim().replace(/^["']|["']$/g, '');
373
+ const v = pair.slice(eqIdx + 1).trim();
374
+ obj[k] = parseTomlValue(v);
375
+ }
376
+ return obj;
377
+ }
378
+ // Array (simple flat arrays)
379
+ if (raw.startsWith('[') && raw.endsWith(']')) {
380
+ const inner = raw.slice(1, -1).trim();
381
+ if (!inner)
382
+ return [];
383
+ return inner.split(',').map(v => parseTomlValue(v.trim()));
384
+ }
385
+ return raw;
386
+ }
387
+ /**
388
+ * Load endpoint config from a file path (alias for configFromFile).
389
+ */
390
+ export function loadEndpointConfig(filePath) {
391
+ return configFromFile(filePath);
392
+ }
393
+ /**
394
+ * Resolve the root public key from config (raw bytes or from file).
395
+ * Returns undefined if neither is set.
396
+ */
397
+ export function resolveRootPubkey(config) {
398
+ if (config.rootPubkey)
399
+ return config.rootPubkey;
400
+ if (config.rootPubkeyFile) {
401
+ try {
402
+ const { readFileSync } = require('node:fs');
403
+ const raw = readFileSync(config.rootPubkeyFile, 'utf-8').trim();
404
+ // Support both raw hex and JSON {"public_key": "hex"} format
405
+ let hex = raw;
406
+ if (raw.startsWith('{')) {
407
+ try {
408
+ hex = JSON.parse(raw).public_key;
409
+ }
410
+ catch { /* fall through */ }
411
+ }
412
+ return new Uint8Array(Buffer.from(hex, 'hex'));
413
+ }
414
+ catch {
415
+ return undefined;
416
+ }
417
+ }
418
+ return undefined;
419
+ }
420
+ /**
421
+ * Convert AsterConfig to an endpoint-specific config subset.
422
+ * Returns the config fields relevant to network endpoint setup.
423
+ */
424
+ export function toEndpointConfig(config) {
425
+ return {
426
+ secretKey: config.secretKey,
427
+ bindAddr: config.bindAddr,
428
+ relayMode: config.relayMode,
429
+ storagePath: config.storagePath,
430
+ };
431
+ }
432
+ /** Print resolved config (masks sensitive values). */
433
+ export function printConfig(config) {
434
+ const mask = (v) => v ? '****' : '<not set>';
435
+ console.log(` [trust]`);
436
+ console.log(` root_pubkey : ${config.rootPubkey ? `${Buffer.from(config.rootPubkey).toString('hex').slice(0, 8)}...` : '<not set>'}`);
437
+ console.log(` allow_all_consumers : ${config.allowAllConsumers}`);
438
+ console.log(` allow_all_producers : ${config.allowAllProducers}`);
439
+ console.log(` [connect]`);
440
+ console.log(` endpoint_addr : ${config.endpointAddr ?? '<not set>'}`);
441
+ console.log(` [network]`);
442
+ console.log(` secret_key : ${mask(config.secretKey)}`);
443
+ console.log(` relay_mode : ${config.relayMode ?? '<default>'}`);
444
+ console.log(` bind_addr : ${config.bindAddr ?? '<any>'}`);
445
+ console.log(` [storage]`);
446
+ console.log(` path : ${config.storagePath ?? '<in-memory>'}`);
447
+ console.log(` [logging]`);
448
+ console.log(` format : ${config.logFormat}`);
449
+ console.log(` level : ${config.logLevel}`);
450
+ console.log(` [health]`);
451
+ console.log(` port : ${config.healthPort || 'disabled'}`);
452
+ console.log(` host : ${config.healthHost}`);
453
+ }
454
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Contract identity — canonical serialization and BLAKE3 hashing.
3
+ *
4
+ * Spec reference: Aster-ContractIdentity.md S11.3
5
+ *
6
+ * Contract ID = BLAKE3(canonical_xlang_bytes(ServiceContract))
7
+ *
8
+ * All canonical encoding and hashing is delegated to the Rust core via
9
+ * NAPI-RS. The native binding is required — without it, there is no Iroh
10
+ * transport either, so the entire binding is non-functional.
11
+ */
12
+ export declare const TypeKind: {
13
+ readonly PRIMITIVE: 0;
14
+ readonly REF: 1;
15
+ readonly SELF_REF: 2;
16
+ readonly ANY: 3;
17
+ };
18
+ export declare const ContainerKind: {
19
+ readonly NONE: 0;
20
+ readonly LIST: 1;
21
+ readonly SET: 2;
22
+ readonly MAP: 3;
23
+ };
24
+ export declare const TypeDefKind: {
25
+ readonly MESSAGE: 0;
26
+ readonly ENUM: 1;
27
+ readonly UNION: 2;
28
+ };
29
+ export declare const MethodPattern: {
30
+ readonly UNARY: 0;
31
+ readonly SERVER_STREAM: 1;
32
+ readonly CLIENT_STREAM: 2;
33
+ readonly BIDI_STREAM: 3;
34
+ };
35
+ export declare const CapabilityKind: {
36
+ readonly ROLE: 0;
37
+ readonly ANY_OF: 1;
38
+ readonly ALL_OF: 2;
39
+ };
40
+ export declare const ScopeKind: {
41
+ readonly SHARED: 0;
42
+ readonly SESSION: 1;
43
+ /** Legacy alias kept for back-compat with code that imported ScopeKind.STREAM.
44
+ * Resolves to the same integer (1), so contract ids are unaffected. */
45
+ readonly STREAM: 1;
46
+ };
47
+ export interface CapabilityRequirement {
48
+ kind: number;
49
+ roles: string[];
50
+ }
51
+ export interface MethodDef {
52
+ name: string;
53
+ pattern: number;
54
+ requestType: Uint8Array;
55
+ responseType: Uint8Array;
56
+ idempotent: boolean;
57
+ defaultTimeout: number;
58
+ requires?: CapabilityRequirement;
59
+ }
60
+ export interface ServiceContract {
61
+ name: string;
62
+ version: number;
63
+ methods: MethodDef[];
64
+ serializationModes: string[];
65
+ scoped: number;
66
+ requires?: CapabilityRequirement;
67
+ }
68
+ interface NativeContract {
69
+ canonicalBytesFromJson(typeName: string, json: string): Uint8Array;
70
+ computeTypeHash(data: Uint8Array): Uint8Array;
71
+ computeContractIdFromJson(json: string): string;
72
+ }
73
+ /**
74
+ * Set the native contract binding. Called once at startup when the
75
+ * NAPI-RS addon is loaded.
76
+ */
77
+ export declare function setNativeContract(native: NativeContract): void;
78
+ /** Serialize a ServiceContract to canonical XLANG bytes via Rust core. */
79
+ export declare function canonicalXlangBytes(contract: ServiceContract): Uint8Array;
80
+ /** Compute BLAKE3 hash of canonical bytes. Returns 64-char hex string. */
81
+ export declare function computeContractId(canonicalBytes: Uint8Array): string;
82
+ /** Compute contract ID directly from a ServiceContract (most efficient path). */
83
+ export declare function contractIdFromJson(contract: ServiceContract): string;
84
+ /** Alias for contractIdFromJson. */
85
+ export declare function contractIdFromContract(contract: ServiceContract): string;
86
+ /**
87
+ * Compute a contract ID from a @Service-decorated class.
88
+ * Builds the ServiceContract from service info and computes its ID.
89
+ */
90
+ export declare function contractIdFromService(serviceClass: new (...args: any[]) => any): string;
91
+ /**
92
+ * Build the transitive type graph for a set of @WireType classes.
93
+ * Alias for walkTypeGraph (from codec.ts) for contract identity use.
94
+ */
95
+ export declare function buildTypeGraph(rootTypes: (new (...args: any[]) => any)[]): (new (...args: any[]) => any)[];
96
+ /**
97
+ * Build a ServiceContract from a ServiceInfo object.
98
+ * Used for contract identity verification.
99
+ */
100
+ export declare function fromServiceInfo(info: {
101
+ name: string;
102
+ version: number;
103
+ scoped?: string;
104
+ methods: Map<string, {
105
+ name: string;
106
+ pattern: string;
107
+ idempotent?: boolean;
108
+ }>;
109
+ requires?: {
110
+ kind: string;
111
+ roles: string[];
112
+ };
113
+ }): ServiceContract;
114
+ export {};
115
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/contract/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,QAAQ;;;;;CAAyD,CAAC;AAC/E,eAAO,MAAM,aAAa;;;;;CAAgD,CAAC;AAC3E,eAAO,MAAM,WAAW;;;;CAA6C,CAAC;AACtE,eAAO,MAAM,aAAa;;;;;CAA4E,CAAC;AACvG,eAAO,MAAM,cAAc;;;;CAA6C,CAAC;AACzE,eAAO,MAAM,SAAS;;;IAGpB;4EACwE;;CAEhE,CAAC;AAIX,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AA6CD,UAAU,cAAc;IACtB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnE,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IAC9C,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACjD;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE9D;AAeD,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,UAAU,CAGzE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,CAIpE;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAGpE;AAED,oCAAoC;AACpC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAExE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,MAAM,CA2BvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,CAoB1G;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9C,GAAG,eAAe,CAsBlB"}