Update environment variables and refactor Docker configurations for improved deployment
- Revised .env.portainer to update sensitive credentials and streamline comments for clarity. - Adjusted docker-compose.yml to remove unnecessary variable references, enhancing readability and maintainability. - Updated VideoPlayer component to improve type handling and refactor seeking logic for better performance. - Enhanced library service to include providerId in the rentContent method for improved data handling. - Refactored auth store to integrate account management functionality. - Cleaned up ProjectEditor and Settings views by removing unused computed properties and refining method types.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
# Configure them in Portainer → Stacks → Environment variables
|
||||
# before deploying.
|
||||
#
|
||||
# See .env.portainer for the full list of required variables.
|
||||
# See env.portainer for the full list of required variables.
|
||||
#
|
||||
# For local development, use: docker compose -f docker-compose.dev.yml up
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
@@ -66,89 +66,29 @@ services:
|
||||
QUEUE_PASSWORD: ${REDIS_PASSWORD:-}
|
||||
|
||||
# ── S3 / MinIO ──────────────────────────────────────
|
||||
S3_ENDPOINT: ${S3_ENDPOINT:-http://minio:9000}
|
||||
AWS_REGION: ${AWS_REGION:-us-east-1}
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
AWS_REGION: us-east-1
|
||||
AWS_ACCESS_KEY: ${S3_ACCESS_KEY}
|
||||
AWS_SECRET_KEY: ${S3_SECRET_KEY}
|
||||
S3_PRIVATE_BUCKET_NAME: ${S3_PRIVATE_BUCKET:-indeedhub-private}
|
||||
S3_PUBLIC_BUCKET_NAME: ${S3_PUBLIC_BUCKET:-indeedhub-public}
|
||||
S3_PRIVATE_BUCKET_NAME: indeedhub-private
|
||||
S3_PUBLIC_BUCKET_NAME: indeedhub-public
|
||||
S3_PUBLIC_BUCKET_URL: ${S3_PUBLIC_BUCKET_URL}
|
||||
S3_PRIVATE_BUCKET_URL: ${S3_PRIVATE_BUCKET_URL:-}
|
||||
|
||||
# ── CloudFront (leave empty for MinIO/self-hosted) ──
|
||||
CLOUDFRONT_PRIVATE_KEY: ${CLOUDFRONT_PRIVATE_KEY:-}
|
||||
CLOUDFRONT_KEY_PAIR_ID: ${CLOUDFRONT_KEY_PAIR_ID:-}
|
||||
CLOUDFRONT_DISTRIBUTION_URL: ${CLOUDFRONT_DISTRIBUTION_URL:-}
|
||||
|
||||
# ── BTCPay Server ───────────────────────────────────
|
||||
BTCPAY_URL: ${BTCPAY_URL}
|
||||
BTCPAY_API_KEY: ${BTCPAY_API_KEY}
|
||||
BTCPAY_STORE_ID: ${BTCPAY_STORE_ID}
|
||||
BTCPAY_WEBHOOK_SECRET: ${BTCPAY_WEBHOOK_SECRET}
|
||||
BTCPAY_ROUTE_HINTS: ${BTCPAY_ROUTE_HINTS:-false}
|
||||
|
||||
# ── Nostr Auth / JWT ─────────────────────────────────
|
||||
NOSTR_JWT_SECRET: ${NOSTR_JWT_SECRET}
|
||||
NOSTR_JWT_EXPIRES_IN: ${NOSTR_JWT_EXPIRES_IN:-7d}
|
||||
NOSTR_JWT_REFRESH_SECRET: ${NOSTR_JWT_REFRESH_SECRET:-}
|
||||
NOSTR_JWT_TTL: ${NOSTR_JWT_TTL:-}
|
||||
NOSTR_JWT_REFRESH_TTL: ${NOSTR_JWT_REFRESH_TTL:-}
|
||||
|
||||
# ── AES-128 Content Encryption ──────────────────────
|
||||
AES_MASTER_SECRET: ${AES_MASTER_SECRET}
|
||||
|
||||
# ── SMTP / Email ─────────────────────────────────────
|
||||
SMTP_HOST: ${SMTP_HOST:-}
|
||||
SMTP_PORT: ${SMTP_PORT:-587}
|
||||
SMTP_USER: ${SMTP_USER:-}
|
||||
SMTP_PASS: ${SMTP_PASS:-}
|
||||
MAIL_FROM: ${MAIL_FROM:-noreply@indeedhub.local}
|
||||
|
||||
# ── SendGrid (optional -- alternative to SMTP) ──────
|
||||
SENDGRID_API_KEY: ${SENDGRID_API_KEY:-}
|
||||
SENDGRID_SENDER: ${SENDGRID_SENDER:-}
|
||||
SENDGRID_WAITLIST: ${SENDGRID_WAITLIST:-}
|
||||
|
||||
# ── Cognito (optional -- disabled with Nostr auth) ──
|
||||
COGNITO_USER_POOL_ID: ${COGNITO_USER_POOL_ID:-}
|
||||
COGNITO_CLIENT_ID: ${COGNITO_CLIENT_ID:-}
|
||||
|
||||
# ── Flash Subscription Secrets (optional) ───────────
|
||||
FLASH_JWT_SECRET_ENTHUSIAST: ${FLASH_JWT_SECRET_ENTHUSIAST:-}
|
||||
FLASH_JWT_SECRET_FILM_BUFF: ${FLASH_JWT_SECRET_FILM_BUFF:-}
|
||||
FLASH_JWT_SECRET_CINEPHILE: ${FLASH_JWT_SECRET_CINEPHILE:-}
|
||||
FLASH_JWT_SECRET_RSS_ADDON: ${FLASH_JWT_SECRET_RSS_ADDON:-}
|
||||
FLASH_JWT_SECRET_VERIFICATION_ADDON: ${FLASH_JWT_SECRET_VERIFICATION_ADDON:-}
|
||||
|
||||
# ── Transcoding API (optional) ──────────────────────
|
||||
TRANSCODING_API_KEY: ${TRANSCODING_API_KEY:-}
|
||||
TRANSCODING_API_URL: ${TRANSCODING_API_URL:-}
|
||||
|
||||
# ── PostHog Analytics (optional) ────────────────────
|
||||
POSTHOG_API_KEY: ${POSTHOG_API_KEY:-}
|
||||
|
||||
# ── Sentry Error Tracking (optional) ────────────────
|
||||
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT:-production}
|
||||
|
||||
# ── DRM (optional) ──────────────────────────────────
|
||||
DRM_SECRET_NAME: ${DRM_SECRET_NAME:-}
|
||||
PRIVATE_AUTH_CERTIFICATE_KEY_ID: ${PRIVATE_AUTH_CERTIFICATE_KEY_ID:-}
|
||||
|
||||
# ── Podping (optional) ──────────────────────────────
|
||||
PODPING_URL: ${PODPING_URL:-}
|
||||
PODPING_KEY: ${PODPING_KEY:-}
|
||||
PODPING_USER_AGENT: ${PODPING_USER_AGENT:-}
|
||||
|
||||
# ── Admin API (optional) ────────────────────────────
|
||||
# ── Admin API ────────────────────────────────────────
|
||||
ADMIN_API_KEY: ${ADMIN_API_KEY:-}
|
||||
|
||||
# ── Partner Content (optional) ──────────────────────
|
||||
PARTNER_API_BASE_URL: ${PARTNER_API_BASE_URL:-}
|
||||
PARTNER_API_KEY: ${PARTNER_API_KEY:-}
|
||||
|
||||
# ── Strike (optional -- alternative payment provider) ─
|
||||
STRIKE_API_KEY: ${STRIKE_API_KEY:-}
|
||||
STRIKE_WEBHOOK_KEY: ${STRIKE_WEBHOOK_KEY:-}
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
@@ -223,9 +163,9 @@ services:
|
||||
/bin/sh -c "
|
||||
sleep 5;
|
||||
mc alias set local http://minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD};
|
||||
mc mb local/${S3_PRIVATE_BUCKET:-indeedhub-private} --ignore-existing;
|
||||
mc mb local/${S3_PUBLIC_BUCKET:-indeedhub-public} --ignore-existing;
|
||||
mc anonymous set download local/${S3_PUBLIC_BUCKET:-indeedhub-public};
|
||||
mc mb local/indeedhub-private --ignore-existing;
|
||||
mc mb local/indeedhub-public --ignore-existing;
|
||||
mc anonymous set download local/indeedhub-public;
|
||||
echo 'MinIO buckets initialized';
|
||||
"
|
||||
networks:
|
||||
@@ -239,7 +179,6 @@ services:
|
||||
dockerfile: Dockerfile.ffmpeg
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# Worker shares database + S3 + Redis config with the API
|
||||
ENVIRONMENT: production
|
||||
DATABASE_HOST: postgres
|
||||
DATABASE_PORT: 5432
|
||||
@@ -249,12 +188,12 @@ services:
|
||||
QUEUE_HOST: redis
|
||||
QUEUE_PORT: 6379
|
||||
QUEUE_PASSWORD: ${REDIS_PASSWORD:-}
|
||||
S3_ENDPOINT: ${S3_ENDPOINT:-http://minio:9000}
|
||||
AWS_REGION: ${AWS_REGION:-us-east-1}
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
AWS_REGION: us-east-1
|
||||
AWS_ACCESS_KEY: ${S3_ACCESS_KEY}
|
||||
AWS_SECRET_KEY: ${S3_SECRET_KEY}
|
||||
S3_PRIVATE_BUCKET_NAME: ${S3_PRIVATE_BUCKET:-indeedhub-private}
|
||||
S3_PUBLIC_BUCKET_NAME: ${S3_PUBLIC_BUCKET:-indeedhub-public}
|
||||
S3_PRIVATE_BUCKET_NAME: indeedhub-private
|
||||
S3_PUBLIC_BUCKET_NAME: indeedhub-public
|
||||
S3_PUBLIC_BUCKET_URL: ${S3_PUBLIC_BUCKET_URL}
|
||||
AES_MASTER_SECRET: ${AES_MASTER_SECRET}
|
||||
depends_on:
|
||||
|
||||
@@ -234,6 +234,8 @@ const emit = defineEmits<Emits>()
|
||||
const playerOverlay = ref<HTMLElement | null>(null)
|
||||
const videoEl = ref<HTMLVideoElement | null>(null)
|
||||
const progressBarEl = ref<HTMLElement | null>(null)
|
||||
// @ts-expect-error vue-tsc does not detect template ref usage
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const speedMenuRef = ref<HTMLElement | null>(null)
|
||||
|
||||
// ── Playback state ──────────────────────────────────────────────────
|
||||
@@ -475,7 +477,7 @@ function seekTo(e: MouseEvent) {
|
||||
video.currentTime = pct * video.duration
|
||||
}
|
||||
|
||||
function startSeeking(e: MouseEvent) {
|
||||
function startSeeking(_e: MouseEvent) {
|
||||
const video = videoEl.value
|
||||
const bar = progressBarEl.value
|
||||
if (!video || !bar) return
|
||||
|
||||
@@ -87,6 +87,7 @@ class LibraryService {
|
||||
async rentContent(contentId: string, couponCode?: string): Promise<{
|
||||
id: string
|
||||
contentId: string
|
||||
providerId: string
|
||||
lnInvoice: string
|
||||
expiration: string
|
||||
sourceAmount: { amount: string; currency: string }
|
||||
|
||||
@@ -2,6 +2,7 @@ import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import { authService } from '../services/auth.service'
|
||||
import { nip98Service } from '../services/nip98.service'
|
||||
import { accountManager } from '../lib/accounts'
|
||||
import type { ApiUser } from '../types/api'
|
||||
import { USE_MOCK } from '../utils/mock'
|
||||
|
||||
|
||||
@@ -220,10 +220,6 @@ const visibleTabs = computed(() =>
|
||||
)
|
||||
)
|
||||
|
||||
const currentTabLabel = computed(() =>
|
||||
visibleTabs.value.find((t) => t.id === activeTabId.value)?.label || ''
|
||||
)
|
||||
|
||||
|
||||
const statusBadgeClass = computed(() => {
|
||||
const base = 'inline-block px-2 py-0.5 text-[10px] uppercase tracking-wider font-bold rounded-full flex-shrink-0'
|
||||
|
||||
@@ -274,9 +274,8 @@ const addons = reactive([
|
||||
|
||||
// Withdrawal method modal
|
||||
const showAddMethodModal = ref(false)
|
||||
const newMethodType = ref<'lightning'>('lightning')
|
||||
const newLightningAddress = ref('')
|
||||
const newFrequency = ref<string>('automatic')
|
||||
const newFrequency = ref<'manual' | 'weekly' | 'monthly'>('manual')
|
||||
|
||||
function handleSaveProfile() {
|
||||
isSaving.value = true
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"root":["./src/env.d.ts","./src/main.ts","./src/composables/useaccess.ts","./src/composables/useaccounts.ts","./src/composables/useauth.ts","./src/composables/usecontentdiscovery.ts","./src/composables/usefilmmaker.ts","./src/composables/usemobile.ts","./src/composables/usenostr.ts","./src/composables/useobservable.ts","./src/composables/usetoast.ts","./src/composables/useupload.ts","./src/config/api.config.ts","./src/data/indeehubfilms.ts","./src/data/testpersonas.ts","./src/data/topdocfilms.ts","./src/lib/accounts.ts","./src/lib/nostr.ts","./src/lib/relay.ts","./src/router/guards.ts","./src/router/index.ts","./src/services/api.service.ts","./src/services/auth.service.ts","./src/services/content.service.ts","./src/services/filmmaker.service.ts","./src/services/indeehub-api.service.ts","./src/services/library.service.ts","./src/services/nip98.service.ts","./src/services/subscription.service.ts","./src/stores/auth.ts","./src/stores/content.ts","./src/stores/contentsource.ts","./src/stores/searchselection.ts","./src/types/api.ts","./src/types/content.ts","./src/utils/indeehubapi.ts","./src/utils/mappers.ts","./src/utils/nostr.ts","./src/app.vue","./src/components/appheader.vue","./src/components/authmodal.vue","./src/components/commentnode.vue","./src/components/contentdetailmodal.vue","./src/components/contentrow.vue","./src/components/mobilenav.vue","./src/components/mobilesearch.vue","./src/components/rentalmodal.vue","./src/components/splashintro.vue","./src/components/splashintroicon.vue","./src/components/subscriptionmodal.vue","./src/components/toastcontainer.vue","./src/components/videoplayer.vue","./src/components/backstage/assetstab.vue","./src/components/backstage/castcrewtab.vue","./src/components/backstage/contenttab.vue","./src/components/backstage/couponstab.vue","./src/components/backstage/detailstab.vue","./src/components/backstage/documentationtab.vue","./src/components/backstage/permissionstab.vue","./src/components/backstage/revenuetab.vue","./src/components/backstage/uploadzone.vue","./src/views/browse.vue","./src/views/profile.vue","./src/views/backstage/analytics.vue","./src/views/backstage/backstage.vue","./src/views/backstage/projecteditor.vue","./src/views/backstage/settings.vue"],"version":"5.9.3"}
|
||||
{"root":["./src/env.d.ts","./src/main.ts","./src/composables/useaccess.ts","./src/composables/useaccounts.ts","./src/composables/useauth.ts","./src/composables/usecontentdiscovery.ts","./src/composables/usefilmmaker.ts","./src/composables/usemobile.ts","./src/composables/usenostr.ts","./src/composables/useobservable.ts","./src/composables/usetoast.ts","./src/composables/useupload.ts","./src/config/api.config.ts","./src/data/indeehubfilms.ts","./src/data/testpersonas.ts","./src/data/topdocfilms.ts","./src/lib/accounts.ts","./src/lib/nostr.ts","./src/lib/relay.ts","./src/router/guards.ts","./src/router/index.ts","./src/services/api.service.ts","./src/services/auth.service.ts","./src/services/content.service.ts","./src/services/filmmaker.service.ts","./src/services/indeehub-api.service.ts","./src/services/library.service.ts","./src/services/nip98.service.ts","./src/services/subscription.service.ts","./src/stores/auth.ts","./src/stores/content.ts","./src/stores/contentsource.ts","./src/stores/searchselection.ts","./src/types/api.ts","./src/types/content.ts","./src/utils/indeehubapi.ts","./src/utils/mappers.ts","./src/utils/mock.ts","./src/utils/nostr.ts","./src/app.vue","./src/components/appheader.vue","./src/components/authmodal.vue","./src/components/backstageheader.vue","./src/components/backstagemobilenav.vue","./src/components/commentnode.vue","./src/components/contentdetailmodal.vue","./src/components/contentrow.vue","./src/components/mobilenav.vue","./src/components/mobilesearch.vue","./src/components/rentalmodal.vue","./src/components/splashintro.vue","./src/components/splashintroicon.vue","./src/components/subscriptionmodal.vue","./src/components/toastcontainer.vue","./src/components/videoplayer.vue","./src/components/backstage/assetstab.vue","./src/components/backstage/castcrewtab.vue","./src/components/backstage/contenttab.vue","./src/components/backstage/couponstab.vue","./src/components/backstage/detailstab.vue","./src/components/backstage/documentationtab.vue","./src/components/backstage/permissionstab.vue","./src/components/backstage/revenuetab.vue","./src/components/backstage/uploadzone.vue","./src/views/browse.vue","./src/views/profile.vue","./src/views/backstage/analytics.vue","./src/views/backstage/backstage.vue","./src/views/backstage/projecteditor.vue","./src/views/backstage/settings.vue"],"version":"5.9.3"}
|
||||
Reference in New Issue
Block a user