Compare commits
No commits in common. "e39eaa632db16c0d2abdd78710467639e74ddcf4" and "711a017e8cf774e5a81c7b88b88e558443efc7ca" have entirely different histories.
e39eaa632d
...
711a017e8c
4 changed files with 11 additions and 36 deletions
28
Dockerfile
28
Dockerfile
|
|
@ -1,32 +1,20 @@
|
||||||
# Patched from upstream kind-0/nsecbunkerd Dockerfile to use pnpm — the
|
|
||||||
# upstream version uses `npm install` but package.json declares
|
|
||||||
# `@nostr-dev-kit/ndk` as `workspace:*`, which only pnpm understands.
|
|
||||||
# A clean clone of upstream fails to build with `EUNSUPPORTEDPROTOCOL`
|
|
||||||
# under npm. Switching to pnpm matches the lockfile that ships in-repo.
|
|
||||||
# Also drops `--frozen-lockfile` because the upstream pnpm-lock.yaml is
|
|
||||||
# out of date vs. package.json (ERR_PNPM_OUTDATED_LOCKFILE) — bug to
|
|
||||||
# file upstream once we've verified the rest of the stack works.
|
|
||||||
|
|
||||||
FROM node:20.11-bullseye AS build
|
FROM node:20.11-bullseye AS build
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN npm install -g pnpm@9
|
# Copy package files and install dependencies
|
||||||
|
COPY package*.json ./
|
||||||
# Copy lockfile + manifest first so the install layer caches across
|
RUN npm install
|
||||||
# source changes.
|
|
||||||
COPY package.json pnpm-lock.yaml ./
|
|
||||||
RUN pnpm install --no-frozen-lockfile
|
|
||||||
|
|
||||||
# Copy application files
|
# Copy application files
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Generate prisma client and build the application
|
# Generate prisma client and build the application
|
||||||
RUN npx prisma generate
|
RUN npx prisma generate
|
||||||
RUN pnpm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Runtime stage
|
# Runtime stage
|
||||||
FROM node:20.11-alpine AS runtime
|
FROM node:20.11-alpine as runtime
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
|
@ -34,13 +22,11 @@ RUN apk update && \
|
||||||
apk add --no-cache openssl && \
|
apk add --no-cache openssl && \
|
||||||
rm -rf /var/cache/apk/*
|
rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
RUN npm install -g pnpm@9
|
|
||||||
|
|
||||||
# Copy built files from the build stage
|
# Copy built files from the build stage
|
||||||
COPY --from=build /app .
|
COPY --from=build /app .
|
||||||
|
|
||||||
# Install only runtime dependencies (pnpm respects the workspace protocol)
|
# Install only runtime dependencies
|
||||||
RUN pnpm install --prod --no-frozen-lockfile
|
RUN npm install --only=production
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
"@fastify/view": "^8.2.0",
|
"@fastify/view": "^8.2.0",
|
||||||
"@inquirer/password": "^1.1.2",
|
"@inquirer/password": "^1.1.2",
|
||||||
"@inquirer/prompts": "^1.2.3",
|
"@inquirer/prompts": "^1.2.3",
|
||||||
"@nostr-dev-kit/ndk": "2.8.1",
|
"@nostr-dev-kit/ndk": "workspace:*",
|
||||||
"@prisma/client": "^5.4.1",
|
"@prisma/client": "^5.4.1",
|
||||||
"@scure/base": "^1.1.1",
|
"@scure/base": "^1.1.1",
|
||||||
"@types/yargs": "^17.0.24",
|
"@types/yargs": "^17.0.24",
|
||||||
|
|
|
||||||
|
|
@ -122,12 +122,7 @@ class AdminInterface {
|
||||||
|
|
||||||
this.rpc.on('request', (req) => this.handleRequest(req));
|
this.rpc.on('request', (req) => this.handleRequest(req));
|
||||||
|
|
||||||
// pingOrDie disabled — NDK 2.8.1 outbox model doesn't echo
|
pingOrDie(this.ndk);
|
||||||
// self-published events back through subscriptions on
|
|
||||||
// non-public relay channels, so the watchdog fires false
|
|
||||||
// positives and exits the bunker every 50s on private relays.
|
|
||||||
// See aiolabs/nsecbunkerd#4 + #7.
|
|
||||||
// pingOrDie(this.ndk);
|
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log('❌ admin connection failed');
|
console.log('❌ admin connection failed');
|
||||||
console.log(err);
|
console.log(err);
|
||||||
|
|
|
||||||
|
|
@ -230,14 +230,8 @@ class Daemon {
|
||||||
|
|
||||||
if (nsec.startsWith('nsec1')) {
|
if (nsec.startsWith('nsec1')) {
|
||||||
try {
|
try {
|
||||||
// NDK 2.8.1's NDKPrivateKeySigner constructor passes its
|
const key = new NDKPrivateKeySigner(nsec);
|
||||||
// arg straight to nostr-tools getPublicKey() which requires
|
hexpk = key.privateKey!;
|
||||||
// 32-byte hex / bytes / bigint, not bech32. Without this
|
|
||||||
// decode, every key created via create_new_key fails to
|
|
||||||
// load with the nostr-tools getPublicKey type error, so
|
|
||||||
// the bunker can never sign for any target it provisions.
|
|
||||||
// See aiolabs/nsecbunkerd#8.
|
|
||||||
hexpk = nip19.decode(nsec).data as string;
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.error(`Error loading key ${name}:`, e);
|
console.error(`Error loading key ${name}:`, e);
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue