@toon-protocol/townhouse 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-5O4SBV5O.js +538 -0
- package/dist/chunk-5O4SBV5O.js.map +1 -0
- package/dist/{chunk-4WCMVIO4.js → chunk-W33MEOPM.js} +10568 -180
- package/dist/chunk-W33MEOPM.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/compose/townhouse-hs.yml +8 -8
- package/dist/image-manifest.json +10 -10
- package/dist/index.d.ts +36 -4
- package/dist/index.js +2 -1
- package/dist/{rsa-from-seed-VMNLNDZM.js → rsa-from-seed-XIT6EU73.js} +9 -4
- package/dist/rsa-from-seed-XIT6EU73.js.map +1 -0
- package/package.json +5 -5
- package/dist/chunk-4WCMVIO4.js.map +0 -1
- package/dist/rsa-from-seed-VMNLNDZM.js.map +0 -1
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
# Story 45.4 boots only connector + townhouse-api at apex install
|
|
23
23
|
#
|
|
24
24
|
# Digest placeholders (substituted at build time from dist/image-manifest.json):
|
|
25
|
-
# @sha256:
|
|
26
|
-
# @sha256:
|
|
27
|
-
# @sha256:
|
|
28
|
-
# @sha256:
|
|
25
|
+
# @sha256:43f592ae933cdd2a2626b25b4f866caec3c1af188fa379c0cae0a83b9bd43cf3 → @sha256:<hex>
|
|
26
|
+
# @sha256:e6919812ebe408f1b4ed714916f0f0db86ca4f06563eb01b64370a47dc6a6d50 → @sha256:<hex>
|
|
27
|
+
# @sha256:5ca03ec95205b3c24f44a87ed256c599ef1811a9cc55e380fd81a557974c3871 → @sha256:<hex>
|
|
28
|
+
# @sha256:74db846c9c5b1595d4b7d09edbf42dcb60bcbfd1831b6d591cd7100c188597c5 → @sha256:<hex>
|
|
29
29
|
# @sha256:3343c19649290043e521c81b467b7c6410b8eaedd76d48804ea9b6fc810cddb0 → @sha256:<hex>
|
|
30
30
|
#
|
|
31
31
|
# Scope guard (Story 45.2 does NOT include):
|
|
@@ -152,7 +152,7 @@ services:
|
|
|
152
152
|
# Port D21-008: Fastify host API on 127.0.0.1:28090.
|
|
153
153
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
154
154
|
townhouse-api:
|
|
155
|
-
image: ghcr.io/toon-protocol/townhouse-api@sha256:
|
|
155
|
+
image: ghcr.io/toon-protocol/townhouse-api@sha256:43f592ae933cdd2a2626b25b4f866caec3c1af188fa379c0cae0a83b9bd43cf3
|
|
156
156
|
container_name: townhouse-hs-api
|
|
157
157
|
# Run as the operator's host UID so bind-mounted ~/.townhouse files
|
|
158
158
|
# (rw------- 600) are readable. TOWNHOUSE_UID is injected by `townhouse hs up`.
|
|
@@ -252,7 +252,7 @@ services:
|
|
|
252
252
|
# start at first run).
|
|
253
253
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
254
|
town:
|
|
255
|
-
image: ghcr.io/toon-protocol/town@sha256:
|
|
255
|
+
image: ghcr.io/toon-protocol/town@sha256:e6919812ebe408f1b4ed714916f0f0db86ca4f06563eb01b64370a47dc6a6d50
|
|
256
256
|
container_name: townhouse-hs-town
|
|
257
257
|
profiles: [town]
|
|
258
258
|
networks:
|
|
@@ -303,7 +303,7 @@ services:
|
|
|
303
303
|
# Lazy-provisioned via Epic 46: `townhouse node add mill`
|
|
304
304
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
305
305
|
mill:
|
|
306
|
-
image: ghcr.io/toon-protocol/mill@sha256:
|
|
306
|
+
image: ghcr.io/toon-protocol/mill@sha256:5ca03ec95205b3c24f44a87ed256c599ef1811a9cc55e380fd81a557974c3871
|
|
307
307
|
container_name: townhouse-hs-mill
|
|
308
308
|
profiles: [mill]
|
|
309
309
|
networks:
|
|
@@ -351,7 +351,7 @@ services:
|
|
|
351
351
|
# Lazy-provisioned via Epic 46: `townhouse node add dvm`
|
|
352
352
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
353
353
|
dvm:
|
|
354
|
-
image: ghcr.io/toon-protocol/dvm@sha256:
|
|
354
|
+
image: ghcr.io/toon-protocol/dvm@sha256:74db846c9c5b1595d4b7d09edbf42dcb60bcbfd1831b6d591cd7100c188597c5
|
|
355
355
|
container_name: townhouse-hs-dvm
|
|
356
356
|
profiles: [dvm]
|
|
357
357
|
networks:
|
package/dist/image-manifest.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"townhouseVersion": "0.1.
|
|
4
|
-
"builtAt": "2026-06-
|
|
3
|
+
"townhouseVersion": "0.1.1",
|
|
4
|
+
"builtAt": "2026-06-02T01:56:53.991Z",
|
|
5
5
|
"images": {
|
|
6
6
|
"townhouse-api": {
|
|
7
7
|
"name": "ghcr.io/toon-protocol/townhouse-api",
|
|
8
|
-
"tag": "0.1.
|
|
9
|
-
"digest": "sha256:
|
|
8
|
+
"tag": "0.1.1",
|
|
9
|
+
"digest": "sha256:43f592ae933cdd2a2626b25b4f866caec3c1af188fa379c0cae0a83b9bd43cf3"
|
|
10
10
|
},
|
|
11
11
|
"town": {
|
|
12
12
|
"name": "ghcr.io/toon-protocol/town",
|
|
13
|
-
"tag": "0.1.
|
|
14
|
-
"digest": "sha256:
|
|
13
|
+
"tag": "0.1.1",
|
|
14
|
+
"digest": "sha256:e6919812ebe408f1b4ed714916f0f0db86ca4f06563eb01b64370a47dc6a6d50"
|
|
15
15
|
},
|
|
16
16
|
"mill": {
|
|
17
17
|
"name": "ghcr.io/toon-protocol/mill",
|
|
18
|
-
"tag": "0.1.
|
|
19
|
-
"digest": "sha256:
|
|
18
|
+
"tag": "0.1.1",
|
|
19
|
+
"digest": "sha256:5ca03ec95205b3c24f44a87ed256c599ef1811a9cc55e380fd81a557974c3871"
|
|
20
20
|
},
|
|
21
21
|
"dvm": {
|
|
22
22
|
"name": "ghcr.io/toon-protocol/dvm",
|
|
23
|
-
"tag": "0.1.
|
|
24
|
-
"digest": "sha256:
|
|
23
|
+
"tag": "0.1.1",
|
|
24
|
+
"digest": "sha256:74db846c9c5b1595d4b7d09edbf42dcb60bcbfd1831b6d591cd7100c188597c5"
|
|
25
25
|
},
|
|
26
26
|
"connector": {
|
|
27
27
|
"name": "ghcr.io/toon-protocol/connector",
|
package/dist/index.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ export { A as ApiConfig, b as ComposeLoaderError, C as ComposeLoaderOptions, c a
|
|
|
3
3
|
import { EventEmitter } from 'node:events';
|
|
4
4
|
import Docker from 'dockerode';
|
|
5
5
|
import { FastifyBaseLogger, FastifyInstance } from 'fastify';
|
|
6
|
-
import { MillHealthResponse } from '@toon-protocol/mill';
|
|
7
|
-
export { MillHealthResponse } from '@toon-protocol/mill';
|
|
8
6
|
import { z } from 'zod';
|
|
9
7
|
|
|
10
8
|
/**
|
|
@@ -982,6 +980,41 @@ interface DvmHealthResponse {
|
|
|
982
980
|
basePricePerByte: string;
|
|
983
981
|
jobsRecent: DvmJobsRecent;
|
|
984
982
|
}
|
|
983
|
+
/** Chains a Mill node can settle on. Inlined from packages/mill/src/wallet.ts. */
|
|
984
|
+
type MillChainKind = 'evm' | 'mina' | 'solana';
|
|
985
|
+
/** A configured swap pair, inlined from packages/core/src/types.ts (SwapPair). */
|
|
986
|
+
interface MillSwapPair {
|
|
987
|
+
from: {
|
|
988
|
+
assetCode: string;
|
|
989
|
+
assetScale: number;
|
|
990
|
+
chain: string;
|
|
991
|
+
};
|
|
992
|
+
to: {
|
|
993
|
+
assetCode: string;
|
|
994
|
+
assetScale: number;
|
|
995
|
+
chain: string;
|
|
996
|
+
};
|
|
997
|
+
rate: string;
|
|
998
|
+
minAmount?: string;
|
|
999
|
+
maxAmount?: string;
|
|
1000
|
+
}
|
|
1001
|
+
/**
|
|
1002
|
+
* Response shape for GET /health on the Mill BLS server. Inlined from
|
|
1003
|
+
* packages/mill/src/mill.ts (MillHealthResponse) — keep in sync.
|
|
1004
|
+
*/
|
|
1005
|
+
interface MillHealthResponse {
|
|
1006
|
+
status: 'ok' | 'starting' | 'stopping' | 'stopped';
|
|
1007
|
+
version: string;
|
|
1008
|
+
nodePubkey: string;
|
|
1009
|
+
swapPairsCount: number;
|
|
1010
|
+
chains: readonly MillChainKind[];
|
|
1011
|
+
uptimeSec: number;
|
|
1012
|
+
inventory: Record<string, string>;
|
|
1013
|
+
/** Configured swap pairs — operator-config, no secrets. */
|
|
1014
|
+
swapPairs: MillSwapPair[];
|
|
1015
|
+
/** Per-asset available reserves, parallel to `inventory` (which is total). */
|
|
1016
|
+
inventoryAvailable: Record<string, string>;
|
|
1017
|
+
}
|
|
985
1018
|
/** Node types supported by Townhouse */
|
|
986
1019
|
type NodeType = 'town' | 'mill' | 'dvm';
|
|
987
1020
|
/** Runtime state of a node container */
|
|
@@ -1091,7 +1124,6 @@ interface TimeseriesBucket {
|
|
|
1091
1124
|
interface PacketTimeseriesPayload {
|
|
1092
1125
|
buckets: TimeseriesBucket[];
|
|
1093
1126
|
}
|
|
1094
|
-
|
|
1095
1127
|
/** Minimal common health shape; superset emitted by Town containers. */
|
|
1096
1128
|
interface TownHealthPayload {
|
|
1097
1129
|
status: 'ok' | 'starting' | 'stopping' | 'stopped' | 'error';
|
|
@@ -2006,4 +2038,4 @@ declare class BootReconciler {
|
|
|
2006
2038
|
private appendLog;
|
|
2007
2039
|
}
|
|
2008
2040
|
|
|
2009
|
-
export { type AggregateEarningsInput, type AggregatedEarnings, type AggregatedEarningsStatus, type AggregatorLogger, type ApiDeps, type ApiServer, type BandwidthPayload, BandwidthStats, BootReconciler, ComposeProfile, ConfigValidationError, ConnectorAdminClient, ConnectorConfigGenerator, type ConnectorRuntimeConfig, DEFAULT_ATOR_PROXY, type DeltaComputer, type DepositAddressEntry, type DepositAddressesPayload, type DivergenceAction, type DivergenceLog, DockerOrchestrator, type DvmHealthResponse, EncryptedWallet, HealthCheckOptions, type HealthResponse, type HsHostnameResponse, type ImageManifest, ImageManifestSchema, type JobsByKindEntry, type JobsRecentPayload, type MetricsPayload, type MetricsPeerEntry, type MetricsResponse, type MillSwapsRecentPayload, type NodeDetail, type NodeEarnings, type NodeHealthPayload, type NodeInfo, type NodeState, NodeType$1 as NodeType, type NodesYaml, type NodesYamlEntry, NodesYamlEntrySchema, NodesYamlSchema, type NostrEventPayload, OrchestratorError, type PacketLogEntry, type PacketLogFilter, type PacketTimeseriesPayload, type PeerEntry, type PeerStatus, PeerTypeResolver, type PeersResponse, type PerAsset, type ReconcileSummary, type RevealRequest, type RevealResponse, type SnapshotEntry, SnapshotWriter, type SnapshotWriterOptions, type SwapByPairEntry, type TimeseriesBucket, type TownHealthPayload, TownhouseConfig, type TransactionReceiptPayload, type TransportPatchRequest, type TransportPatchResponse, TransportProbe, type TransportStatusPayload, type WalletBalanceEntry, type WalletBalancesPayload, WalletManager, type WithdrawDryRunResponse, type WithdrawRequest, type WithdrawResponse, type WithdrawSuccessResponse, type WizardInitRequest, type WizardProgressMessage, type WizardStatePayload, type WsBatchMessage, type WsConnectorRestartedMessage, type WsConnectorRestartingMessage, type WsHeartbeatMessage, type WsMessage, type WsMetricsMessage, type WsNodeStateMessage, type WsRelayEventsMessage, createApiServer, createDeltaComputer, createWizardApiServer, decryptWallet, encryptWallet, getDefaultConfig, loadConfig, loadWallet, readImageManifest, readNodesYaml, saveConfig, saveWallet, utcDayBoundary, utcMonthBoundary, utcYearBoundary, validateConfig, writeNodesYaml };
|
|
2041
|
+
export { type AggregateEarningsInput, type AggregatedEarnings, type AggregatedEarningsStatus, type AggregatorLogger, type ApiDeps, type ApiServer, type BandwidthPayload, BandwidthStats, BootReconciler, ComposeProfile, ConfigValidationError, ConnectorAdminClient, ConnectorConfigGenerator, type ConnectorRuntimeConfig, DEFAULT_ATOR_PROXY, type DeltaComputer, type DepositAddressEntry, type DepositAddressesPayload, type DivergenceAction, type DivergenceLog, DockerOrchestrator, type DvmHealthResponse, EncryptedWallet, HealthCheckOptions, type HealthResponse, type HsHostnameResponse, type ImageManifest, ImageManifestSchema, type JobsByKindEntry, type JobsRecentPayload, type MetricsPayload, type MetricsPeerEntry, type MetricsResponse, type MillHealthResponse, type MillSwapsRecentPayload, type NodeDetail, type NodeEarnings, type NodeHealthPayload, type NodeInfo, type NodeState, NodeType$1 as NodeType, type NodesYaml, type NodesYamlEntry, NodesYamlEntrySchema, NodesYamlSchema, type NostrEventPayload, OrchestratorError, type PacketLogEntry, type PacketLogFilter, type PacketTimeseriesPayload, type PeerEntry, type PeerStatus, PeerTypeResolver, type PeersResponse, type PerAsset, type ReconcileSummary, type RevealRequest, type RevealResponse, type SnapshotEntry, SnapshotWriter, type SnapshotWriterOptions, type SwapByPairEntry, type TimeseriesBucket, type TownHealthPayload, TownhouseConfig, type TransactionReceiptPayload, type TransportPatchRequest, type TransportPatchResponse, TransportProbe, type TransportStatusPayload, type WalletBalanceEntry, type WalletBalancesPayload, WalletManager, type WithdrawDryRunResponse, type WithdrawRequest, type WithdrawResponse, type WithdrawSuccessResponse, type WizardInitRequest, type WizardProgressMessage, type WizardStatePayload, type WsBatchMessage, type WsConnectorRestartedMessage, type WsConnectorRestartingMessage, type WsHeartbeatMessage, type WsMessage, type WsMetricsMessage, type WsNodeStateMessage, type WsRelayEventsMessage, createApiServer, createDeltaComputer, createWizardApiServer, decryptWallet, encryptWallet, getDefaultConfig, loadConfig, loadWallet, readImageManifest, readNodesYaml, saveConfig, saveWallet, utcDayBoundary, utcMonthBoundary, utcYearBoundary, validateConfig, writeNodesYaml };
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
hmac,
|
|
4
|
+
sha256
|
|
5
|
+
} from "./chunk-5O4SBV5O.js";
|
|
2
6
|
import "./chunk-I2R4CRUX.js";
|
|
3
7
|
|
|
8
|
+
// ../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/sha256.js
|
|
9
|
+
var sha2562 = sha256;
|
|
10
|
+
|
|
4
11
|
// src/wallet/rsa-from-seed.ts
|
|
5
|
-
import { hmac } from "@noble/hashes/hmac";
|
|
6
|
-
import { sha256 } from "@noble/hashes/sha256";
|
|
7
12
|
function hmacSha256(key, ...parts) {
|
|
8
|
-
const h = hmac.create(
|
|
13
|
+
const h = hmac.create(sha2562, key);
|
|
9
14
|
for (const p of parts) h.update(p);
|
|
10
15
|
return h.digest();
|
|
11
16
|
}
|
|
@@ -59,4 +64,4 @@ async function rsaPrivateKeyPemFromSeed(seed) {
|
|
|
59
64
|
export {
|
|
60
65
|
rsaPrivateKeyPemFromSeed
|
|
61
66
|
};
|
|
62
|
-
//# sourceMappingURL=rsa-from-seed-
|
|
67
|
+
//# sourceMappingURL=rsa-from-seed-XIT6EU73.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/src/sha256.ts","../src/wallet/rsa-from-seed.ts"],"sourcesContent":["/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n SHA224 as SHA224n,\n sha224 as sha224n,\n SHA256 as SHA256n,\n sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n","/**\n * rsa-from-seed — CVE-free replacement for human-crypto-keys RSA derivation.\n *\n * Produces byte-for-byte identical RSA-4096 keys as\n * `human-crypto-keys.getKeyPairFromSeed(seed, {id:'rsa', modulusLength:4096},\n * {privateKeyFormat:'pkcs1-pem'})`.\n *\n * Algorithm (preserved exactly to maintain golden test vectors):\n * 1. HMAC-DRBG(SHA-256, entropy=seed, nonce=[], pers=[])\n * Re-implemented with @noble/hashes (already a workspace dep).\n * Byte-for-byte identical to hmac-drbg@1.0.1 used by human-crypto-keys.\n * 2. node-forge 1.3.3 (CVE-free) PRIMEINC prime search driven by (1).\n * Identical to node-forge 0.8.5 because jsbn.js and the PRIMEINC loop\n * are unchanged between versions (verified by diff).\n * 3. Export private key as PKCS#1 PEM string.\n *\n * Why not Node.js crypto.generateKeyPair?\n * It uses OpenSSL's system CSPRNG and cannot be seeded deterministically.\n *\n * Performance: same as before (~5–30s for RSA-4096 on a 2024 desktop).\n * The on-disk ar-cache.ts already amortises this cost after first derivation.\n */\n\nimport { hmac } from '@noble/hashes/hmac';\nimport { sha256 } from '@noble/hashes/sha256';\n\n// ── HMAC-DRBG (SP 800-90A, SHA-256 variant) ─────────────────────────────────\n//\n// Replicates hmac-drbg@1.0.1 with one key behavioural detail:\n// generate(n) in hmac-drbg discards leftover bytes and calls _update()\n// AFTER each call (not per 32-byte V-block). Our getBytesSync() mirrors\n// that exact behaviour: generate fresh V-chain on every call, discard\n// surplus, then do a 2-step _update (no seed data ⇒ only K/V steps 1+2).\n\nfunction hmacSha256(key: Uint8Array, ...parts: Uint8Array[]): Uint8Array {\n const h = hmac.create(sha256, key);\n for (const p of parts) h.update(p);\n return h.digest();\n}\n\nconst BYTE_00 = new Uint8Array([0x00]);\nconst BYTE_01 = new Uint8Array([0x01]);\n\n/**\n * Create a HMAC-DRBG PRNG that returns forge-compatible \"binary strings\"\n * (Latin-1 encoded byte strings used internally by node-forge).\n *\n * @param seedBytes 32-byte BIP-32 sub-seed (raw entropy; hex-decoding step\n * from human-crypto-keys is a no-op and not replicated).\n * @param rawEncode `forge.util.binary.raw.encode` — converts Uint8Array to\n * forge's internal binary string format.\n */\nfunction makeHmacDrbgPrng(\n seedBytes: Uint8Array,\n rawEncode: (bytes: Uint8Array) => string\n): { getBytesSync: (n: number) => string } {\n // Initialise K and V per SP 800-90A §10.1.2.3\n let K = new Uint8Array(32).fill(0x00);\n let V = new Uint8Array(32).fill(0x01);\n\n // _update(seed) — seeding phase (seed data present → full 4-step update)\n K = hmacSha256(K, V, BYTE_00, seedBytes);\n V = hmacSha256(K, V);\n K = hmacSha256(K, V, BYTE_01, seedBytes);\n V = hmacSha256(K, V);\n\n return {\n getBytesSync(size: number): string {\n // Generate V-chain until we have enough bytes (same as hmac-drbg's\n // `while (temp.length < len) { V = HMAC(K, V); temp.concat(V); }`).\n // Surplus bytes beyond `size` are discarded on purpose — matches the\n // original `temp.slice(0, len)` behaviour that ensures determinism.\n const chunks: Uint8Array[] = [];\n let total = 0;\n while (total < size) {\n V = hmacSha256(K, V);\n chunks.push(V);\n total += V.length;\n }\n // Flatten and slice\n const flat = new Uint8Array(total);\n let offset = 0;\n for (const c of chunks) {\n flat.set(c, offset);\n offset += c.length;\n }\n const out = flat.slice(0, size);\n\n // _update(undefined) — post-generate state update (2-step only,\n // since there is no additional data; mirrors the `if(!seed) return`\n // branch in hmac-drbg._update).\n K = hmacSha256(K, V, BYTE_00);\n V = hmacSha256(K, V);\n\n return rawEncode(out);\n },\n };\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * Derive a deterministic RSA-4096 PKCS#1 PEM private key from a 32-byte seed.\n *\n * Identical output to:\n * `human-crypto-keys.getKeyPairFromSeed(seed, {id:'rsa', modulusLength:4096},\n * {privateKeyFormat:'pkcs1-pem'}).privateKey`\n *\n * @param seed 32-byte BIP-32 sub-seed. Zeroed by caller after this returns.\n * @returns PKCS#1 PEM-encoded RSA-4096 private key string.\n */\nexport async function rsaPrivateKeyPemFromSeed(\n seed: Uint8Array\n): Promise<string> {\n // Lazy-import node-forge so callers that never touch Arweave don't pay the\n // module-load cost. node-forge is a CJS module; dynamic import wraps it.\n const forge = (await import('node-forge')).default;\n\n const prng = makeHmacDrbgPrng(seed, (bytes) =>\n forge.util.binary.raw.encode(bytes)\n );\n\n // Promisify the callback-based generateKeyPair\n const { privateKey } = await new Promise<{\n privateKey: forge.pki.rsa.PrivateKey;\n publicKey: forge.pki.rsa.PublicKey;\n }>((resolve, reject) => {\n forge.pki.rsa.generateKeyPair(\n 4096,\n 65537,\n { prng, algorithm: 'PRIMEINC' },\n (err, kp) => (err ? reject(err) : resolve(kp))\n );\n });\n\n return forge.pki.privateKeyToPem(privateKey);\n}\n"],"mappings":";;;;;;;;AAmBO,IAAMA,UAAyB;;;ACetC,SAAS,WAAW,QAAoB,OAAiC;AACvE,QAAM,IAAI,KAAK,OAAOC,SAAQ,GAAG;AACjC,aAAW,KAAK,MAAO,GAAE,OAAO,CAAC;AACjC,SAAO,EAAE,OAAO;AAClB;AAEA,IAAM,UAAU,IAAI,WAAW,CAAC,CAAI,CAAC;AACrC,IAAM,UAAU,IAAI,WAAW,CAAC,CAAI,CAAC;AAWrC,SAAS,iBACP,WACA,WACyC;AAEzC,MAAI,IAAI,IAAI,WAAW,EAAE,EAAE,KAAK,CAAI;AACpC,MAAI,IAAI,IAAI,WAAW,EAAE,EAAE,KAAK,CAAI;AAGpC,MAAI,WAAW,GAAG,GAAG,SAAS,SAAS;AACvC,MAAI,WAAW,GAAG,CAAC;AACnB,MAAI,WAAW,GAAG,GAAG,SAAS,SAAS;AACvC,MAAI,WAAW,GAAG,CAAC;AAEnB,SAAO;AAAA,IACL,aAAa,MAAsB;AAKjC,YAAM,SAAuB,CAAC;AAC9B,UAAI,QAAQ;AACZ,aAAO,QAAQ,MAAM;AACnB,YAAI,WAAW,GAAG,CAAC;AACnB,eAAO,KAAK,CAAC;AACb,iBAAS,EAAE;AAAA,MACb;AAEA,YAAM,OAAO,IAAI,WAAW,KAAK;AACjC,UAAI,SAAS;AACb,iBAAW,KAAK,QAAQ;AACtB,aAAK,IAAI,GAAG,MAAM;AAClB,kBAAU,EAAE;AAAA,MACd;AACA,YAAM,MAAM,KAAK,MAAM,GAAG,IAAI;AAK9B,UAAI,WAAW,GAAG,GAAG,OAAO;AAC5B,UAAI,WAAW,GAAG,CAAC;AAEnB,aAAO,UAAU,GAAG;AAAA,IACtB;AAAA,EACF;AACF;AAcA,eAAsB,yBACpB,MACiB;AAGjB,QAAM,SAAS,MAAM,OAAO,YAAY,GAAG;AAE3C,QAAM,OAAO;AAAA,IAAiB;AAAA,IAAM,CAAC,UACnC,MAAM,KAAK,OAAO,IAAI,OAAO,KAAK;AAAA,EACpC;AAGA,QAAM,EAAE,WAAW,IAAI,MAAM,IAAI,QAG9B,CAAC,SAAS,WAAW;AACtB,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,MACA,EAAE,MAAM,WAAW,WAAW;AAAA,MAC9B,CAAC,KAAK,OAAQ,MAAM,OAAO,GAAG,IAAI,QAAQ,EAAE;AAAA,IAC9C;AAAA,EACF,CAAC;AAED,SAAO,MAAM,IAAI,gBAAgB,UAAU;AAC7C;","names":["sha256","sha256"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toon-protocol/townhouse",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "TOON Townhouse — host-native orchestrator + dashboard for Docker-containerized TOON nodes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -58,8 +58,7 @@
|
|
|
58
58
|
"react": "^18.3.1",
|
|
59
59
|
"viem": "^2.0.0",
|
|
60
60
|
"yaml": "^2.7.0",
|
|
61
|
-
"zod": "^3.25.0"
|
|
62
|
-
"@toon-protocol/mill": "^0.1.0"
|
|
61
|
+
"zod": "^3.25.0"
|
|
63
62
|
},
|
|
64
63
|
"devDependencies": {
|
|
65
64
|
"@types/dockerode": "^3.3.0",
|
|
@@ -73,9 +72,10 @@
|
|
|
73
72
|
"typescript": "^5.3.0",
|
|
74
73
|
"vitest": "^1.0.0",
|
|
75
74
|
"@toon-protocol/client": "^0.9.1",
|
|
76
|
-
"@toon-protocol/
|
|
75
|
+
"@toon-protocol/mill": "^0.1.0",
|
|
77
76
|
"@toon-protocol/relay": "^1.3.1",
|
|
78
|
-
"@toon-protocol/sdk": "^0.5.0"
|
|
77
|
+
"@toon-protocol/sdk": "^0.5.0",
|
|
78
|
+
"@toon-protocol/core": "^1.4.1"
|
|
79
79
|
},
|
|
80
80
|
"scripts": {
|
|
81
81
|
"build": "tsup",
|