@vibecook/truffle 0.1.0 → 0.2.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 James Yong
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.d.ts CHANGED
@@ -1,13 +1,4 @@
1
- export { MeshNode, createMeshNode } from '@vibecook/truffle-mesh';
2
- export type { MeshNodeConfig, MeshNodeEvents, MeshTimingConfig, IncomingMeshMessage } from '@vibecook/truffle-mesh';
3
- export { DeviceManager } from '@vibecook/truffle-mesh';
4
- export type { DeviceManagerEvents, DeviceIdentity } from '@vibecook/truffle-mesh';
5
- export { PrimaryElection } from '@vibecook/truffle-mesh';
6
- export type { ElectionConfig, ElectionState, PrimaryElectionEvents } from '@vibecook/truffle-mesh';
7
- export { MeshMessageBus } from '@vibecook/truffle-mesh';
8
- export { StoreSyncAdapter } from '@vibecook/truffle-store-sync';
9
- export type { ISyncableStore, StoreSyncAdapterConfig } from '@vibecook/truffle-store-sync';
10
- export { createLogger, TypedEventEmitter } from '@vibecook/truffle-types';
11
- export type { BaseDevice, DeviceRole, DeviceStatus, MeshMessage, MeshMessageType, MeshEnvelope, Logger, DeviceSlice, SidecarConfig, SidecarStatus, TailnetPeer, } from '@vibecook/truffle-types';
12
- export type { IMessageBus, BusMessage, BusMessageHandler } from '@vibecook/truffle-protocol';
1
+ export { NapiMeshNode, NapiFileTransferAdapter, NapiMessageBus, NapiStoreSyncAdapter, } from '@vibecook/truffle-native';
2
+ export type { NapiMeshNodeConfig, NapiMeshTimingConfig, NapiBaseDevice, NapiIncomingMessage, NapiTailnetPeer, NapiMeshEvent, NapiFileTransferAdapterConfig, NapiFileTransferOffer, NapiAdapterTransferInfo, NapiBusMessage, NapiFileTransferEvent, NapiStoreSyncConfig, NapiOutgoingSyncMessage, NapiDeviceSlice, } from '@vibecook/truffle-native';
3
+ export { resolveSidecarPath } from './sidecar.js';
13
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAG3F,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,MAAM,EACN,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,13 +1,5 @@
1
- // ═══════════════════════════════════════════════════════════════════════════
2
- // @vibecook/truffle Unified entry point for Truffle mesh networking
3
- // ═══════════════════════════════════════════════════════════════════════════
4
- // Mesh node (primary API)
5
- export { MeshNode, createMeshNode } from '@vibecook/truffle-mesh';
6
- export { DeviceManager } from '@vibecook/truffle-mesh';
7
- export { PrimaryElection } from '@vibecook/truffle-mesh';
8
- export { MeshMessageBus } from '@vibecook/truffle-mesh';
9
- // Store sync
10
- export { StoreSyncAdapter } from '@vibecook/truffle-store-sync';
11
- // Types & utilities
12
- export { createLogger, TypedEventEmitter } from '@vibecook/truffle-types';
1
+ // Re-export classes (values) from the native Rust addon
2
+ export { NapiMeshNode, NapiFileTransferAdapter, NapiMessageBus, NapiStoreSyncAdapter, } from '@vibecook/truffle-native';
3
+ // Sidecar binary resolution
4
+ export { resolveSidecarPath } from './sidecar.js';
13
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,0BAA0B;AAC1B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAoBlC,4BAA4B;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Sidecar binary resolution for @vibecook/truffle.
3
+ *
4
+ * Resolves the Go sidecar binary path using a 3-level fallback:
5
+ * 1. Platform-specific npm package (installed via optionalDependencies)
6
+ * 2. Postinstall-downloaded binary (fallback for --no-optional)
7
+ * 3. Error with clear instructions
8
+ *
9
+ * Follows the esbuild pattern for distributing platform-specific binaries.
10
+ */
11
+ /**
12
+ * Resolve the path to the Go sidecar binary for the current platform.
13
+ *
14
+ * Resolution order:
15
+ * 1. Platform-specific `@vibecook/truffle-sidecar-{os}-{arch}` npm package
16
+ * 2. Binary downloaded by postinstall into `packages/core/bin/`
17
+ *
18
+ * @throws {Error} if no binary is found for the current platform
19
+ */
20
+ export declare function resolveSidecarPath(): string;
21
+ //# sourceMappingURL=sidecar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA8B3C"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Sidecar binary resolution for @vibecook/truffle.
3
+ *
4
+ * Resolves the Go sidecar binary path using a 3-level fallback:
5
+ * 1. Platform-specific npm package (installed via optionalDependencies)
6
+ * 2. Postinstall-downloaded binary (fallback for --no-optional)
7
+ * 3. Error with clear instructions
8
+ *
9
+ * Follows the esbuild pattern for distributing platform-specific binaries.
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import { createRequire } from 'node:module';
13
+ import { dirname, join } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ const require = createRequire(import.meta.url);
16
+ const PLATFORM_PACKAGES = {
17
+ 'darwin-arm64': '@vibecook/truffle-sidecar-darwin-arm64',
18
+ 'darwin-x64': '@vibecook/truffle-sidecar-darwin-x64',
19
+ 'linux-x64': '@vibecook/truffle-sidecar-linux-x64',
20
+ 'linux-arm64': '@vibecook/truffle-sidecar-linux-arm64',
21
+ 'win32-x64': '@vibecook/truffle-sidecar-win32-x64',
22
+ };
23
+ /**
24
+ * Resolve the path to the Go sidecar binary for the current platform.
25
+ *
26
+ * Resolution order:
27
+ * 1. Platform-specific `@vibecook/truffle-sidecar-{os}-{arch}` npm package
28
+ * 2. Binary downloaded by postinstall into `packages/core/bin/`
29
+ *
30
+ * @throws {Error} if no binary is found for the current platform
31
+ */
32
+ export function resolveSidecarPath() {
33
+ const key = `${process.platform}-${process.arch}`;
34
+ const ext = process.platform === 'win32' ? '.exe' : '';
35
+ const binName = `sidecar-slim${ext}`;
36
+ // 1. Try platform-specific npm package (optionalDependency)
37
+ const pkg = PLATFORM_PACKAGES[key];
38
+ if (pkg) {
39
+ try {
40
+ const pkgJsonPath = require.resolve(`${pkg}/package.json`);
41
+ const binPath = join(dirname(pkgJsonPath), 'bin', binName);
42
+ if (existsSync(binPath))
43
+ return binPath;
44
+ }
45
+ catch {
46
+ // Package not installed — fall through
47
+ }
48
+ }
49
+ // 2. Try postinstall-downloaded binary (fallback)
50
+ const __dirname = dirname(fileURLToPath(import.meta.url));
51
+ const localBin = join(__dirname, '..', 'bin', binName);
52
+ if (existsSync(localBin))
53
+ return localBin;
54
+ // 3. Nothing found
55
+ const supported = Object.keys(PLATFORM_PACKAGES).join(', ');
56
+ throw new Error(`[truffle] Sidecar binary not found for platform "${key}".\n` +
57
+ `Supported platforms: ${supported}\n` +
58
+ `Try reinstalling: npm install @vibecook/truffle\n` +
59
+ `Or build from source: cd packages/sidecar-slim && go build -o bin/sidecar-slim`);
60
+ }
61
+ //# sourceMappingURL=sidecar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,iBAAiB,GAA2B;IAChD,cAAc,EAAE,wCAAwC;IACxD,YAAY,EAAE,sCAAsC;IACpD,WAAW,EAAE,qCAAqC;IAClD,aAAa,EAAE,uCAAuC;IACtD,WAAW,EAAE,qCAAqC;CACnD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,eAAe,GAAG,EAAE,CAAC;IAErC,4DAA4D;IAC5D,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3D,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE1C,mBAAmB;IACnB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,KAAK,CACb,oDAAoD,GAAG,MAAM;QAC3D,wBAAwB,SAAS,IAAI;QACrC,mDAAmD;QACnD,gFAAgF,CACnF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,9 @@
1
1
  {
2
2
  "name": "@vibecook/truffle",
3
- "version": "0.1.0",
3
+ "version": "0.2.3",
4
4
  "description": "Mesh networking for local-first apps, built on Tailscale",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- }
13
- },
14
5
  "license": "MIT",
6
+ "author": "James Yong",
15
7
  "repository": {
16
8
  "type": "git",
17
9
  "url": "https://github.com/jamesyong-42/truffle.git",
@@ -21,22 +13,53 @@
21
13
  "bugs": {
22
14
  "url": "https://github.com/jamesyong-42/truffle/issues"
23
15
  },
24
- "files": ["dist"],
16
+ "keywords": [
17
+ "mesh",
18
+ "networking",
19
+ "tailscale",
20
+ "local-first",
21
+ "p2p",
22
+ "napi",
23
+ "rust"
24
+ ],
25
25
  "engines": {
26
26
  "node": ">=18"
27
27
  },
28
- "scripts": {
29
- "build": "tsc",
30
- "clean": "rm -rf dist",
31
- "typecheck": "tsc --noEmit"
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "sideEffects": false,
32
+ "type": "module",
33
+ "main": "dist/index.js",
34
+ "types": "dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.js"
39
+ }
32
40
  },
41
+ "files": [
42
+ "dist",
43
+ "bin",
44
+ "scripts"
45
+ ],
33
46
  "dependencies": {
34
- "@vibecook/truffle-types": "workspace:*",
35
- "@vibecook/truffle-protocol": "workspace:*",
36
- "@vibecook/truffle-mesh": "workspace:*",
37
- "@vibecook/truffle-store-sync": "workspace:*"
47
+ "@vibecook/truffle-native": "0.2.3"
48
+ },
49
+ "optionalDependencies": {
50
+ "@vibecook/truffle-sidecar-darwin-arm64": "0.1.0",
51
+ "@vibecook/truffle-sidecar-darwin-x64": "0.1.0",
52
+ "@vibecook/truffle-sidecar-linux-x64": "0.1.0",
53
+ "@vibecook/truffle-sidecar-linux-arm64": "0.1.0",
54
+ "@vibecook/truffle-sidecar-win32-x64": "0.1.0"
38
55
  },
39
56
  "devDependencies": {
40
57
  "typescript": "^5.7.0"
58
+ },
59
+ "scripts": {
60
+ "build": "tsc",
61
+ "clean": "rm -rf dist",
62
+ "typecheck": "tsc --noEmit",
63
+ "postinstall": "node scripts/postinstall.cjs"
41
64
  }
42
- }
65
+ }
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script for @vibecook/truffle.
5
+ *
6
+ * Verifies the sidecar binary is available via optionalDependencies.
7
+ * If missing (e.g., --no-optional), falls back to downloading from GitHub Releases.
8
+ *
9
+ * This follows the esbuild pattern: optionalDependencies as primary, HTTP download as fallback.
10
+ */
11
+
12
+ /* eslint-disable @typescript-eslint/no-require-imports */
13
+
14
+ const { existsSync, mkdirSync, chmodSync } = require('fs');
15
+ const { join, dirname } = require('path');
16
+ const { execSync } = require('child_process');
17
+
18
+ const GITHUB_REPO = 'jamesyong-42/truffle';
19
+
20
+ const PLATFORM_PACKAGES = {
21
+ 'darwin-arm64': '@vibecook/truffle-sidecar-darwin-arm64',
22
+ 'darwin-x64': '@vibecook/truffle-sidecar-darwin-x64',
23
+ 'linux-x64': '@vibecook/truffle-sidecar-linux-x64',
24
+ 'linux-arm64': '@vibecook/truffle-sidecar-linux-arm64',
25
+ 'win32-x64': '@vibecook/truffle-sidecar-win32-x64',
26
+ };
27
+
28
+ // Go asset names use GOOS/GOARCH conventions (amd64 instead of x64)
29
+ const GITHUB_ASSETS = {
30
+ 'darwin-arm64': 'tsnet-sidecar-darwin-arm64',
31
+ 'darwin-x64': 'tsnet-sidecar-darwin-amd64',
32
+ 'linux-x64': 'tsnet-sidecar-linux-amd64',
33
+ 'linux-arm64': 'tsnet-sidecar-linux-arm64',
34
+ 'win32-x64': 'tsnet-sidecar-windows-amd64.exe',
35
+ };
36
+
37
+ function main() {
38
+ const key = `${process.platform}-${process.arch}`;
39
+ const pkg = PLATFORM_PACKAGES[key];
40
+ const ext = process.platform === 'win32' ? '.exe' : '';
41
+ const binName = `sidecar-slim${ext}`;
42
+
43
+ if (!pkg) {
44
+ console.warn(`[truffle] No prebuilt sidecar for ${key}. Build from source: cd packages/sidecar-slim && go build`);
45
+ return;
46
+ }
47
+
48
+ // Check if the optionalDependency was installed
49
+ try {
50
+ const pkgJson = require.resolve(`${pkg}/package.json`);
51
+ const binPath = join(dirname(pkgJson), 'bin', binName);
52
+ if (existsSync(binPath)) {
53
+ return; // All good
54
+ }
55
+ } catch {
56
+ // Not installed — fall through to download
57
+ }
58
+
59
+ // Fallback: download from GitHub Releases
60
+ const asset = GITHUB_ASSETS[key];
61
+ if (!asset) return;
62
+
63
+ const version = require('../package.json').version;
64
+ const url = `https://github.com/${GITHUB_REPO}/releases/download/v${version}/${asset}`;
65
+
66
+ console.log(`[truffle] Sidecar not found via npm. Downloading from GitHub Releases...`);
67
+
68
+ try {
69
+ const binDir = join(__dirname, '..', 'bin');
70
+ mkdirSync(binDir, { recursive: true });
71
+ const dest = join(binDir, binName);
72
+
73
+ execSync(`curl -fsSL "${url}" -o "${dest}"`, { stdio: 'pipe' });
74
+
75
+ if (process.platform !== 'win32') {
76
+ chmodSync(dest, 0o755);
77
+ }
78
+
79
+ console.log(`[truffle] Sidecar downloaded successfully.`);
80
+ } catch {
81
+ console.warn(`[truffle] Could not download sidecar binary.`);
82
+ console.warn(`[truffle] Download manually: ${url}`);
83
+ console.warn(`[truffle] Or build from source: cd packages/sidecar-slim && go build -o bin/sidecar-slim`);
84
+ }
85
+ }
86
+
87
+ main();