Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 68 additions & 15 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
# Pictique Configuration
PUBLIC_PICTIQUE_BASE_URL=your_public_pictique_base_url_here
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password

# Blabsy Configuration
PUBLIC_BLABSY_BASE_URL=your_public_blabsy_base_url_here
PUBLIC_EVAULT_SERVER_URI=http://localhost:4000

# Eid Wallet & Pictique Configuration (Svelte)
PUBLIC_REGISTRY_URL=your_public_registry_url_here
PUBLIC_PROVISIONER_URL=your_public_provisioner_url_here
REGISTRY_ENTROPY_KEY_JWK='{"kty":"EC","use":"sig","alg":"ES256","kid":"entropy-key-1","crv":"P-256","x":"your-x-value","y":"your-y-value","d":"your-d-value"}'
ENCRYPTION_PASSWORD="your-encryption-password"
W3ID="@your-w3id"

# Next.js Applications Configuration (eVoting, Blabsy, Group Charter Manager)
NEXT_PUBLIC_REGISTRY_URL=your_public_registry_url_here
REGISTRY_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/registry

# Neo4j Configuration
NEO4J_URI=bolt://neo4j:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_secure_password_here
REGISTRY_SHARED_SECRET="your-registry-shared-secret"
PROVISIONER_DATABASE_URL="postgres://postgres:postgres@localhost:5432/provisioner"
PUBLIC_VERIFF_KEY="your-veriff-key"
VERIFF_HMAC_KEY="your-veriff-hmac-key"

# set this to allow or deny
DUPLICATES_POLICY="DENY"
IP_ADDR="localhost"

PICTIQUE_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/pictique

PICTIQUE_MAPPING_DB_PATH=/path/to/pictique/mapping/db
BLABSY_MAPPING_DB_PATH="/path/to/blabsy/mapping/db"
DREAMSYNC_MAPPING_DB_PATH="/path/to/dreamsync/mapping/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
GROUP_CHARTER_MAPPING_DB_PATH=/path/to/charter/mapping/db
CERBERUS_MAPPING_DB_PATH=/path/to/cerberus/mapping/db

GOOGLE_APPLICATION_CREDENTIALS="/path/to/firebase-secrets.json"

#PUBLIC_REGISTRY_URL="https://registry.w3ds.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.w3ds.metastate.foundation"

#PUBLIC_REGISTRY_URL="https://registry.staging.metastate.foundation"
#PUBLIC_PROVISIONER_URL="https://provisioner.staging.metastate.foundation"

PUBLIC_REGISTRY_URL="http://localhost:4321"
PUBLIC_PROVISIONER_URL="http://localhost:3001"

PUBLIC_PICTIQUE_URL="http://localhost:5173"
PUBLIC_PICTIQUE_BASE_URL="http://localhost:1111"
PUBLIC_BLABSY_URL="http://localhost:8080"
PUBLIC_BLABSY_BASE_URL="http://localhost:4444"

PUBLIC_GROUP_CHARTER_BASE_URL="http://localhost:5555"
GROUP_CHARTER_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/group_charter_manager

CERBERUS_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cerberus
PUBLIC_CERBERUS_BASE_URL="http://localhost:6666"

EVOTING_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/evoting

EVOTING_MAPPING_DB_PATH="/path/to/evoting/mapping/db"

OPENAI_API_KEY=sk-your-openai-api-key

PUBLIC_EVOTING_BASE_URL="http://localhost:7777"
PUBLIC_EVOTING_URL="http://localhost:3001"

PUBLIC_APP_STORE_EID_WALLET=""
PUBLIC_PLAY_STORE_EID_WALLET=""
NOTIFICATION_SHARED_SECRET=your-notification-secret-key

DREAMSYNC_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dreamsync
VITE_DREAMSYNC_BASE_URL="http://localhost:8888"

EREPUTATION_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ereputation
EREPUTATION_MAPPING_DB_PATH="/path/to/erep/mapping/db"
VITE_EREPUTATION_BASE_URL=http://localhost:8765

# eVault Configuration
PORT=4000
LOAD_TEST_USER_COUNT=6
47 changes: 37 additions & 10 deletions .github/workflows/build.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,29 +13,56 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'pnpm'

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential python3

- name: Install pnpm
run: npm install -g pnpm
- name: Setup environment variables
run: |
# Always copy .env.example to .env before builds to ensure env vars are available
# Root level .env
if [ -f .env.example ]; then
cp .env.example .env
echo "✅ Created root .env from .env.example"
else
echo "⚠️ Warning: root .env.example not found, creating minimal .env"
touch .env
fi

# Package-level .env files (e.g., blabsy)
for dir in platforms/* infrastructure/*; do
if [ -d "$dir" ] && [ -f "$dir/.env.example" ]; then
cp "$dir/.env.example" "$dir/.env"
echo "✅ Created $dir/.env from $dir/.env.example"
fi
done

- name: Install Dependencies
run: pnpm install

- name: Clean and rebuild native modules
run: |
# Remove any pre-built binaries that might be incompatible
find node_modules -name "*.node" -delete 2>/dev/null || true
# Rebuild all native modules
pnpm rebuild
# Install all dependencies (optional dependencies are installed by default)
# Use --frozen-lockfile to ensure reproducible builds
pnpm install --frozen-lockfile

- name: Rebuild native modules
run: |
# Rebuild native modules to ensure compatibility with CI environment
pnpm rebuild || echo "Rebuild completed with warnings (some packages may not need rebuilding)"

- name: Build All Packages
run: pnpm build
run: |
# Build all packages using turbo
pnpm build

3 changes: 3 additions & 0 deletions .npmrc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
optional=true
strict-peer-dependencies=false

2 changes: 1 addition & 1 deletion infrastructure/control-panel/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,4 +54,4 @@
"lucide-svelte": "^0.539.0",
"tailwind-merge": "^3.0.2"
}
}
}
6 changes: 5 additions & 1 deletion infrastructure/web3-adapter/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -180,7 +180,11 @@ async function createGroupManifestWithRetry(
const endpoint = new URL("/graphql", response.data.uri).toString();

const { GraphQLClient } = await import("graphql-request");
const client = new GraphQLClient(endpoint);
const client = new GraphQLClient(endpoint, {
headers: {
"X-ENAME": w3id,
},
});

const STORE_META_ENVELOPE = `
mutation StoreMetaEnvelope($input: MetaEnvelopeInput!) {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -35,11 +35,13 @@
"onlyBuiltDependencies": [
"@biomejs/biome",
"@parcel/watcher",
"@rollup/rollup-linux-x64-gnu",
"cpu-features",
"es5-ext",
"esbuild",
"msw",
"protobufjs",
"rollup",
"sqlite3",
"ssh2",
"svelte-preprocess"
Expand Down
18 changes: 15 additions & 3 deletions platforms/blabsy/.env.example
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
# Registry URL for fetching motd and other registry services
# Note: In Next.js, environment variables exposed to the browser must be prefixed with NEXT_PUBLIC_
NEXT_PUBLIC_REGISTRY_URL=http://localhost:4321
PUBLIC_REGISTRY_URL="PUBLIC_REGISTRY_URL"
# Dev URL
NEXT_PUBLIC_URL=NEXT_PUBLIC_URL
NEXT_PUBLIC_BASE_URL=NEXT_PUBLIC_BASE_URL

# Emulator
NEXT_PUBLIC_USE_EMULATOR=false

# Firebase
NEXT_PUBLIC_API_KEY="API-KEY"
NEXT_PUBLIC_AUTH_DOMAIN="auth-domain"
NEXT_PUBLIC_PROJECT_ID="project-id"
NEXT_PUBLIC_STORAGE_BUCKET="bucket-id"
NEXT_PUBLIC_MESSAGING_SENDER_ID="sender-id"
NEXT_PUBLIC_APP_ID="app-id"
NEXT_PUBLIC_MEASUREMENT_ID="measurement-id"
11 changes: 9 additions & 2 deletions platforms/cerberus/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
57 changes: 29 additions & 28 deletions platforms/dreamSync/vite.config.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,36 +6,37 @@ import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal";
const envDir = path.resolve(import.meta.dirname, "../../");
console.log("🔍 Vite envDir:", envDir);

export default defineConfig({
plugins: [
export default defineConfig(async () => {
const plugins = [
react(),
runtimeErrorOverlay(),
...(process.env.NODE_ENV !== "production" &&
process.env.REPL_ID !== undefined
? [
await import("@replit/vite-plugin-cartographer").then((m) =>
m.cartographer(),
),
]
: []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
];

if (process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined) {
const { cartographer } = await import("@replit/vite-plugin-cartographer");
plugins.push(cartographer());
}

return {
plugins,
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "client", "src"),
"@shared": path.resolve(import.meta.dirname, "shared"),
"@assets": path.resolve(import.meta.dirname, "attached_assets"),
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
},
root: path.resolve(import.meta.dirname, "client"),
build: {
outDir: path.resolve(import.meta.dirname, "dist/public"),
emptyOutDir: true,
},
server: {
fs: {
strict: true,
deny: ["**/.*"],
server: {
fs: {
strict: true,
deny: ["**/.*"],
},
},
},
envDir: envDir,
envDir: envDir,
};
});
11 changes: 9 additions & 2 deletions platforms/dreamsync-api/src/services/PlatformEVaultService.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ export class PlatformEVaultService {
private static instance: PlatformEVaultService;
private client: GraphQLClient | null = null;
private endpoint: string | null = null;
private w3id: string | null = null;

private constructor() {}

Expand DownExpand Up@@ -169,9 +170,15 @@ export class PlatformEVaultService {
* Ensure we have a valid GraphQL client
*/
private async ensureClient(w3id: string): Promise<GraphQLClient> {
if (!this.endpoint || !this.client) {
// Recreate client if w3id changed or client/endpoint is missing
if (!this.endpoint || !this.client || this.w3id !== w3id) {
this.endpoint = await this.resolveEndpoint(w3id);
this.client = new GraphQLClient(this.endpoint);
this.client = new GraphQLClient(this.endpoint, {
headers: {
"X-ENAME": w3id,
},
});
this.w3id = w3id;
}
return this.client;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Expand Down
2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,9 +6,11 @@ packages:
- tests/
onlyBuiltDependencies:
- '@biomejs/biome'
- '@rollup/rollup-linux-x64-gnu'
- cpu-features
- esbuild
- msw
- protobufjs
- rollup
- ssh2
- svelte-preprocess