toykity commited on
Commit
ec77f12
·
1 Parent(s): 4e6481e

patch: remove youtubepartner scope from youtube provider

Browse files
var/docker/docker/.DS_Store ADDED
Binary file (6.15 kB). View file
 
var/docker/docker/create-namespace-default.sh ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ sleep 5
4
+
5
+ tctl namespace create --namespace "default" --description 'Default namespace' --rd 1
6
+
7
+ tini -s -- sleep infinity
var/docker/docker/docker-build.sh ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ set -o xtrace
4
+
5
+ docker rmi localhost/postiz || true
6
+ docker build --target dist -t localhost/postiz -f Dockerfile.dev .
7
+ docker build --target devcontainer -t localhost/postiz-devcontainer -f Dockerfile.dev .
var/docker/docker/docker-create.sh ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+
3
+ docker kill postiz || true
4
+ docker rm postiz || true
5
+ docker create --name postiz -p 3000:3000 -p 4200:4200 localhost/postiz
var/docker/docker/nginx.conf ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Nginx config for Hugging Face Spaces
2
+ # Runs as UID 1000 (app user) on port 7860
3
+ pid /data/nginx.pid;
4
+ error_log /data/nginx-error.log;
5
+ worker_processes 1;
6
+
7
+ events {
8
+ worker_connections 1024;
9
+ }
10
+
11
+ http {
12
+ include /etc/nginx/mime.types;
13
+ default_type application/octet-stream;
14
+ sendfile on;
15
+ access_log /data/nginx-access.log;
16
+ client_max_body_size 2G;
17
+ server {
18
+ listen 7860;
19
+ server_name _;
20
+ gzip on;
21
+ gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
22
+
23
+ # Backend API prefix (strips /api/ prefix)
24
+ location /api/ {
25
+ proxy_pass http://localhost:3000/;
26
+ proxy_http_version 1.1;
27
+ proxy_set_header Host $host;
28
+ proxy_set_header X-Real-IP $remote_addr;
29
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
30
+ proxy_set_header X-Forwarded-Proto $scheme;
31
+ proxy_set_header Reload $http_reload;
32
+ proxy_set_header Onboarding $http_onboarding;
33
+ proxy_set_header Activate $http_activate;
34
+ proxy_set_header Auth $http_auth;
35
+ proxy_set_header Showorg $http_showorg;
36
+ proxy_set_header Impersonate $http_impersonate;
37
+ proxy_set_header Accept-Language $http_accept_language;
38
+ proxy_set_header i18next $http_i18next;
39
+ }
40
+
41
+ # Frontend — inject /api prefix into backendUrl at runtime
42
+ # The official image has NEXT_PUBLIC_BACKEND_URL="" baked in (build-time).
43
+ # sub_filter rewrites the JS bundles to set backendUrl="/api" so all
44
+ # frontend API calls go to /api/auth/register, /api/posts, etc.
45
+ location / {
46
+ proxy_pass http://localhost:4200/;
47
+ proxy_http_version 1.1;
48
+ proxy_set_header Host $host;
49
+ proxy_set_header X-Real-IP $remote_addr;
50
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
51
+ proxy_set_header X-Forwarded-Proto $scheme;
52
+ proxy_set_header Accept-Encoding "";
53
+ proxy_set_header Reload $http_reload;
54
+ proxy_set_header Onboarding $http_onboarding;
55
+ proxy_set_header Activate $http_activate;
56
+ proxy_set_header Auth $http_auth;
57
+ proxy_set_header Showorg $http_showorg;
58
+ proxy_set_header Impersonate $http_impersonate;
59
+ proxy_set_header Accept-Language $http_accept_language;
60
+ proxy_set_header i18next $http_i18next;
61
+
62
+ # Rewrite backendUrl from "" to "/api" in JS bundles
63
+ sub_filter 'backendUrl:""' 'backendUrl:"/api"';
64
+ sub_filter_once off;
65
+ sub_filter_types application/javascript text/javascript;
66
+ }
67
+ }
68
+ }
var/docker/docker/start.sh ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+ set -e
3
+
4
+ echo "=== Postiz HF Space Startup ==="
5
+
6
+ # Start cloudflared access tcp proxy for PostgreSQL (if configured)
7
+ if [ -n "$TUNNEL_SERVICE_TOKEN_ID" ] && [ -n "$CF_TUNNEL_HOSTNAME" ]; then
8
+ echo "Starting cloudflared access tcp proxy -> $CF_TUNNEL_HOSTNAME (PG)"
9
+ cloudflared access tcp \
10
+ --hostname "$CF_TUNNEL_HOSTNAME" \
11
+ --url localhost:5432 &
12
+ for i in $(seq 1 30); do
13
+ (echo > /dev/tcp/localhost/5432) 2>/dev/null && break
14
+ sleep 1
15
+ done
16
+ echo "cloudflared PostgreSQL proxy ready"
17
+ fi
18
+
19
+ # Start cloudflared access tcp proxy for Redis (if configured)
20
+ if [ -n "$TUNNEL_SERVICE_TOKEN_ID" ] && [ -n "$CF_REDIS_HOSTNAME" ]; then
21
+ echo "Starting cloudflared access tcp proxy -> $CF_REDIS_HOSTNAME (Redis)"
22
+ cloudflared access tcp \
23
+ --hostname "$CF_REDIS_HOSTNAME" \
24
+ --url localhost:6379 &
25
+ for i in $(seq 1 30); do
26
+ (echo > /dev/tcp/localhost/6379) 2>/dev/null && break
27
+ sleep 1
28
+ done
29
+ echo "cloudflared Redis proxy ready"
30
+ fi
31
+
32
+ # Patch compiled temporal.module.js to support mTLS client certificates
33
+ # Field names must match @temporalio/common TLSConfig:
34
+ # serverNameOverride, serverRootCACertificate, clientCertPair: { crt, key }
35
+ PATCH_DIR="/app"
36
+
37
+ for DIST_DIR in "$PATCH_DIR/apps/backend/dist" "$PATCH_DIR/apps/orchestrator/dist"; do
38
+ TARGET="$DIST_DIR/libraries/nestjs-libraries/src/temporal/temporal.module.js"
39
+ if [ -f "$TARGET" ]; then
40
+ echo "Patching $TARGET for mTLS support..."
41
+ node -e "
42
+ const fs = require('fs');
43
+ let code = fs.readFileSync('$TARGET', 'utf8');
44
+
45
+ const oldCode = \"...process.env.TEMPORAL_TLS === 'true' ? { tls: true } : {}\";
46
+ const newCode = \"...(() => { if (process.env.TEMPORAL_TLS !== 'true') return {}; const cp = process.env.TEMPORAL_TLS_CERT; const kp = process.env.TEMPORAL_TLS_KEY; if (cp && kp) { return { tls: { serverNameOverride: process.env.TEMPORAL_TLS_SERVERNAME || undefined, clientCertPair: { crt: require('fs').readFileSync(cp), key: require('fs').readFileSync(kp) } }}; } return { tls: true }; })()\";
47
+
48
+ if (code.includes(oldCode)) {
49
+ code = code.replace(oldCode, newCode);
50
+ fs.writeFileSync('$TARGET', code);
51
+ console.log('Patched successfully');
52
+ } else {
53
+ console.log('Pattern not found, skipping');
54
+ }
55
+ "
56
+ fi
57
+ done
58
+
59
+ # Also patch health controller in orchestrator
60
+ HEALTH_TARGET="$PATCH_DIR/apps/orchestrator/dist/apps/orchestrator/src/health.controller.js"
61
+ if [ -f "$HEALTH_TARGET" ]; then
62
+ echo "Patching $HEALTH_TARGET for mTLS support..."
63
+ node -e "
64
+ const fs = require('fs');
65
+ let code = fs.readFileSync('$HEALTH_TARGET', 'utf8');
66
+
67
+ const oldCode = \"...(process.env.TEMPORAL_TLS === 'true' ? { tls: true } : {})\";
68
+ const newCode = \"...(() => { if (process.env.TEMPORAL_TLS !== 'true') return {}; const cp = process.env.TEMPORAL_TLS_CERT; const kp = process.env.TEMPORAL_TLS_KEY; if (cp && kp) { return { tls: { serverNameOverride: process.env.TEMPORAL_TLS_SERVERNAME || undefined, clientCertPair: { crt: require('fs').readFileSync(cp), key: require('fs').readFileSync(kp) } }}; } return { tls: true }; })()\";
69
+
70
+ if (code.includes(oldCode)) {
71
+ code = code.replace(oldCode, newCode);
72
+ fs.writeFileSync('$HEALTH_TARGET', code);
73
+ console.log('Health controller patched successfully');
74
+ } else {
75
+ console.log('Pattern not found in health controller, skipping');
76
+ }
77
+ "
78
+ fi
79
+
80
+ # Write Temporal env overrides to .env
81
+ echo "TEMPORAL_ADDRESS=temporal.firela.io:443" >> /app/.env
82
+ echo "TEMPORAL_TLS=true" >> /app/.env
83
+ echo "TEMPORAL_TLS_CERT=/etc/nginx/ssl/client.crt" >> /app/.env
84
+ echo "TEMPORAL_TLS_KEY=/etc/nginx/ssl/client.key" >> /app/.env
85
+ echo "TEMPORAL_TLS_CA=/etc/nginx/ssl/ca.crt" >> /app/.env
86
+ echo "TEMPORAL_TLS_SERVERNAME=temporal.firela.io" >> /app/.env
87
+
88
+ # Patch no.auth.integrations.controller.js to log OAuth errors
89
+ OAUTH_TARGET="$PATCH_DIR/apps/backend/dist/apps/backend/src/api/routes/no.auth.integrations.controller.js"
90
+ if [ -f "$OAUTH_TARGET" ]; then
91
+ echo "Patching $OAUTH_TARGET for OAuth error logging..."
92
+ node -e "
93
+ const fs = require('fs');
94
+ let code = fs.readFileSync('$OAUTH_TARGET', 'utf8');
95
+ const oldCatch = \"catch (err) {\\n if (err instanceof social_abstract_1.NotEnoughScopes)\";
96
+ const newCatch = \"catch (err) {\\n console.log('[social-connect] OAuth error for', body ? body.state : 'unknown', ':', err);\\n if (err instanceof social_abstract_1.NotEnoughScopes)\";
97
+ if (code.includes(oldCatch)) {
98
+ code = code.replace(oldCatch, newCatch);
99
+ fs.writeFileSync('$OAUTH_TARGET', code);
100
+ console.log('OAuth error logging patched');
101
+ } else {
102
+ console.log('OAuth patch pattern not found, skipping');
103
+ }
104
+ "
105
+ fi
106
+
107
+ echo "=== Patching complete, starting app ==="
108
+
109
+ # Delegate to original entrypoint + CMD (nginx && pnpm run pm2)
110
+ exec docker-entrypoint.sh sh -c "nginx && pnpm run pm2"
var/docker/docker/temporal/Dockerfile ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Temporal Server for Hugging Face Spaces
2
+ # Uses official auto-setup image + nginx gRPC proxy on port 7860
3
+ FROM temporalio/auto-setup:latest
4
+
5
+ # All build steps run as root
6
+ USER root
7
+
8
+ # Install nginx for gRPC reverse proxy (port 7860 → 7233)
9
+ RUN apk add --no-cache nginx
10
+
11
+ # HF Spaces runtime directories
12
+ RUN mkdir -p /data /run/nginx && \
13
+ chown -R temporal:temporal /data /run/nginx
14
+
15
+ # nginx config: gRPC proxy on 7860 → Temporal 7233
16
+ COPY nginx.conf /etc/nginx/nginx.conf
17
+
18
+ # Startup script: nginx + temporal auto-setup
19
+ COPY start.sh /start.sh
20
+ RUN chmod +x /start.sh
21
+
22
+ # Clear base image ENTRYPOINT so our CMD runs directly
23
+ ENTRYPOINT []
24
+
25
+ EXPOSE 7860
26
+
27
+ CMD ["/start.sh"]
var/docker/docker/temporal/nginx.conf ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Nginx gRPC proxy for Hugging Face Spaces
2
+ # Proxies gRPC traffic on port 7860 → Temporal Server on 7233
3
+ pid /data/nginx.pid;
4
+ error_log /data/nginx-error.log;
5
+ worker_processes 1;
6
+
7
+ events {
8
+ worker_connections 1024;
9
+ }
10
+
11
+ http {
12
+ access_log /data/nginx-access.log;
13
+ server {
14
+ listen 7860 http2;
15
+ server_name _;
16
+
17
+ # Proxy all gRPC traffic to Temporal Server
18
+ location / {
19
+ grpc_pass grpc://localhost:7233;
20
+ grpc_connect_timeout 60s;
21
+ grpc_read_timeout 300s;
22
+ grpc_send_timeout 300s;
23
+ }
24
+ }
25
+ }
var/docker/docker/temporal/start.sh ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "=== Temporal Server on HF Spaces ==="
5
+
6
+ # Start nginx (gRPC proxy: port 7860 → 7233)
7
+ echo "Starting nginx gRPC proxy on port 7860..."
8
+ nginx
9
+ echo "Nginx started."
10
+
11
+ # Render the config template
12
+ echo "Rendering Temporal config..."
13
+ dockerize -template /etc/temporal/config/config_template.yaml:/etc/temporal/config/docker.yaml
14
+ echo "Config rendered."
15
+
16
+ # Run auto-setup for schema migration (exits when done)
17
+ export SKIP_DB_CREATE=true
18
+ echo "Running Temporal auto-setup for schema migration..."
19
+ /etc/temporal/auto-setup.sh
20
+ echo "Auto-setup completed."
21
+
22
+ # Start the Temporal server directly
23
+ echo "Starting Temporal server..."
24
+ exec /etc/temporal/start-temporal.sh
var/docker/docker/temporal/temporal-mtls/ca.crt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFMTCCAxmgAwIBAgIUHE8n33VQ5hENc+MWXIjBy1KV/f4wDQYJKoZIhvcNAQEL
3
+ BQAwJzEPMA0GA1UECgwGVG95S2l0MRQwEgYDVQQDDAtUZW1wb3JhbCBDQTAgFw0y
4
+ NjA0MjAwMjQzNDRaGA8yMzI2MDIwNzAyNDM0NFowJzEPMA0GA1UECgwGVG95S2l0
5
+ MRQwEgYDVQQDDAtUZW1wb3JhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
6
+ AgoCggIBAImRQd1sgtMdnjysDGC+W2/pywJojYSxvnL7Ke9yv5Q3cDWnoxegXG2l
7
+ DaImLShcCuKyNvYtYpKAq2NLzT8ZcaYICOmK9KqocMDtMEn6QUFFC+VoBSy/4JC9
8
+ CAr5mEg8g1pZ/bV2xqaGoBLirHMvv2RAvWPnfnYINEU477WsOR29XkaeYOzn/xUF
9
+ mMDzgBX7edwvOYeUpLK520+Nn/kYE7XYEOMBNv5d9zP8Vo56wj8rmUZsGhdv6/3n
10
+ aS4YzHV9KrViJzcsJ7aevqNLbNgihftq48oxtk0YKDuZVNFn6X1tmO9XYqEeXqeo
11
+ Xnbl9Qn0oFFYivGR08AKQNs+b21XLTyR+vkFUzC2Eg9xCFJ9NxzheTJwKxTm0iXg
12
+ lr6cfC+hY2Z7i5cKQ1yr5XEcyvIg9ybNupYIX/GS0fxmDmDWskR8CPgQlSXQnW0n
13
+ lipAvLIyeaQM2n949nXV7UAkPtNrksmYO55QeVwxb7UzLymDic7IJXZwUMsaQksK
14
+ R8s8G5El5sBKmncHGMisoajUa0QkOicxL7WIBd9y9/dbxhqhStiYnB/o7VdYTnXL
15
+ 9oxDA2SA9xTOXBzv0b/3ItvrXOPjzV2mkbxaKRA0aaZ+/dV0wbpFYBln7kESogqA
16
+ c+RvazsR/8j95wuMinGecgGjEI+bawWvPP39GH+Nq8A/LLigvzwVAgMBAAGjUzBR
17
+ MB0GA1UdDgQWBBSnBwXrR7lOfjmHVLh86DRn1oJa+jAfBgNVHSMEGDAWgBSnBwXr
18
+ R7lOfjmHVLh86DRn1oJa+jAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
19
+ A4ICAQAIr442UkCGH48B+qmtr7u9tGZuVpc3SL1RIlVO684I52g33u1+AVfBd9vd
20
+ JQnbw+O8zm+5j6+CA72OjP1Ixf/ejSm3MGtQPHa0SNdG757EuvAO7DJw7TJe8uLO
21
+ DAonqIWlv5Q4jw9C2ATqvHSRghn2eHgi2zvOlGSo31v7dVIret0hlyHiTte0urY0
22
+ p8H4kjZyb4SMIAPFgrSaO1XMuFPCEaS210LofZP/Pb6OyOqxYu0o97Bif/jJ55+b
23
+ 87uTcghg2xue7qJRS30XoXzct1kt0i8sEe9+VYb1e9JOg0Ktl6kp1UNtDXJCaNrL
24
+ 5GWZ7T3rz4usHxFrRl9x1edvZGwjiuleAHEH83P63c/Zwt5Z12WFrxBxv90I7T88
25
+ w3/ElgiK3b9hg7jz1RRO5BHG+anMOxDbYXunbxq5c3jABJpHG02EA1kFbh0b4oo0
26
+ 0E02Xq2cIowX2p9KCGhJEjLdMYfSalpq7TilbpB++NP09xi1L0TwmPYEyZjyf4Qw
27
+ QiHwqiV6N/6CXfuDGoh1aCusxLFK5oBosF2uY+aH4lQUnMG4JUpM+DERKyJ/40QS
28
+ JLJQviNbCqvAqdMxajDD+b/hxQK5tUF4LHWGfiWP7CAPM1Ykz9kPCsJLKcqX4IaY
29
+ w4etgtcaaoSWrXB2Pa7aCN1wxNCegmXvexgaU2Dc5Xt74gLx+w==
30
+ -----END CERTIFICATE-----
var/docker/docker/temporal/temporal-mtls/ca.key ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ HD456gOreRjaJ49/b7TWQ9sJWQ5OC4E=
52
+ -----END PRIVATE KEY-----
var/docker/docker/temporal/temporal-mtls/client.crt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFNzCCAx+gAwIBAgIUPzS3u6pIJN+Nx8yKmJeCaG2RstUwDQYJKoZIhvcNAQEL
3
+ BQAwJzEPMA0GA1UECgwGVG95S2l0MRQwEgYDVQQDDAtUZW1wb3JhbCBDQTAgFw0y
4
+ NjA0MjAwMjQzNDRaGA8yMzI2MDIwNzAyNDM0NFowKTEPMA0GA1UECgwGVG95S2l0
5
+ MRYwFAYDVQQDDA1wb3N0aXotY2xpZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
6
+ MIICCgKCAgEAweQD67LuXudFvtdsTj0mOHwXsRg41doU/Lvo/7UohZ7hKiSQ1XNH
7
+ 0XdNtXNSHre0CDmnL1W7XibmdpXj1KPfs1Ab7SSCMay+TpeP+kuSA1LstZnqkIkP
8
+ zQz+lxhmVWVIcGBGClnvwGiF4RpHdOO4nmCdC4I9Gu0eoIZpQisZ5KouqvYulaEK
9
+ EboV42b9YHeDzfUT7Wlt0hU9qO+At1sgQiSM52LYHcz3Rvw78xrV9ufwIuXNtIcq
10
+ rSjURzCWzgcpd4HKyDmfIf4wqsR+fey2wlGg2FutXWt3SdK6vZLUk7I1Melxh3PB
11
+ 1R2EA5762fXYwqFvB1wFtj/VRXW9noYR19+jp4S6DIvmO3zYx3pCMfe1mguRHciL
12
+ HRlMLuQzJ7PhBY8vBLuFBnG3mpbUlanPoxSpudHZF3u/7RUbiReTvlhCj2/BW+cX
13
+ e8fjcHC6n66Hu9JydPHuABf06eP7DIv1W70w+dShyI3oPsCCW/YD035LZRt9uMJY
14
+ vbiAeXmN7vxsu0Por7WpeG5N1PPDyWPdczUaTudSQErha48zhE0C2GT4eXKwI7WU
15
+ yXEWBLxPkw2hRC0d3DJCccQ7YrfcU//v43BKSIyIWCw19PnTN3Sp1De+50C1TF34
16
+ wbDFvK/oBsjyXNhMyhDhTDsm1b+zLjqzshaieH5uDxQ76ZHo1pf28wkCAwEAAaNX
17
+ MFUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFCWx9hhlcMg523HTB9sE
18
+ ozwIo1XsMB8GA1UdIwQYMBaAFKcHBetHuU5+OYdUuHzoNGfWglr6MA0GCSqGSIb3
19
+ DQEBCwUAA4ICAQAERGTLMEm7nlYt8OJAvggzyfmdVzLELtbYVTcA3SVQS/lW0+SA
20
+ iYNbLyeXeEuu3SG+pavd97NCxFpDofwm7UN3CCJf2e5RLGZmiC9omVMxk1/ItK5J
21
+ lA0DGN3JdgU0wYinsOhBm0CXgWl7JnGMrYibGlZLeGTRl/El0JSD1j3U41ajA+Df
22
+ I85HVMESEMo+rYEDxTwQEVvYcRQEc+SnOPqIXOx6Hd/f7066mL9kMBTCkRn5I67B
23
+ h02GKAzYiSl4NLZo6xxsD/uH2WkD2l8EbubLteq0yoIvXtwtr8kom4npwwnYj2yL
24
+ eVEbjUzGtoJRbUykcXmSMAdQvDA5b/Gf0szz9ansZLktG/9xR84NwVFAV+snAuDK
25
+ NKcGnV/BdRThlx4aPkb2A58MOnmpwTKXm20iWl0xEWNEk7/w/rx4oTM/uhm9k4hV
26
+ 2St9mpfPgzSV+P+R5H8GJbBaUYfJveoMjYySbepho5KMWGdW5Hgy20d1Yf1nWHq8
27
+ K7vKMGf7+mrcSHO9J9qKzy0MrWqGqsl5w212GUoQ8W7Hxiz+QGI3t7nRgqNMAmur
28
+ 7z0yy7lWP1zn+X9IvXL1uWZVVAEHGXkn+5j4QNds4KXYuXQdoVyGLxkPk+EbXuYd
29
+ 5/ItUty/mwe6l7NXKonFwCoTpao9rF239O+KCDhdh0Z/ew4yntkxkyXW/A==
30
+ -----END CERTIFICATE-----
var/docker/docker/temporal/temporal-mtls/client.key ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDB5APrsu5e50W+
3
+ 12xOPSY4fBexGDjV2hT8u+j/tSiFnuEqJJDVc0fRd021c1Iet7QIOacvVbteJuZ2
4
+ lePUo9+zUBvtJIIxrL5Ol4/6S5IDUuy1meqQiQ/NDP6XGGZVZUhwYEYKWe/AaIXh
5
+ Gkd047ieYJ0Lgj0a7R6ghmlCKxnkqi6q9i6VoQoRuhXjZv1gd4PN9RPtaW3SFT2o
6
+ 74C3WyBCJIznYtgdzPdG/DvzGtX25/Ai5c20hyqtKNRHMJbOByl3gcrIOZ8h/jCq
7
+ xH597LbCUaDYW61da3dJ0rq9ktSTsjUx6XGHc8HVHYQDnvrZ9djCoW8HXAW2P9VF
8
+ db2ehhHX36OnhLoMi+Y7fNjHekIx97WaC5EdyIsdGUwu5DMns+EFjy8Eu4UGcbea
9
+ ltSVqc+jFKm50dkXe7/tFRuJF5O+WEKPb8Fb5xd7x+NwcLqfroe70nJ08e4AF/Tp
10
+ 4/sMi/VbvTD51KHIjeg+wIJb9gPTfktlG324wli9uIB5eY3u/Gy7Q+ivtal4bk3U
11
+ 88PJY91zNRpO51JASuFrjzOETQLYZPh5crAjtZTJcRYEvE+TDaFELR3cMkJxxDti
12
+ t9xT/+/jcEpIjIhYLDX0+dM3dKnUN77nQLVMXfjBsMW8r+gGyPJc2EzKEOFMOybV
13
+ v7MuOrOyFqJ4fm4PFDvpkejWl/bzCQIDAQABAoICACWeY2JaQ6SXM7GM438knyNL
14
+ dF9QZ0qatwK4RMNEN1oBkwdVs+IuLUuHXcTsXI0IMH5+DSGCfUmNu55bg6pQp0kH
15
+ rHts33Pa48uk3XL/MZPChZnQhLHJXg73S/gt7ED6Vz0yeLRucbV/siYULrQPsNTN
16
+ wvqmKMvuIMide5OygCIdINPb0vsGFUmONMv7wgJy/dg6ikTAdWXS6DU8TtmEbTRY
17
+ GhyU0YCqsXmM2+bVmJkAtFdZBfnWVeHl75XmaAQOYK3GuXzyrRzv0Cp52F7/TBBU
18
+ vSPtWawr+yeQItpAQE1twKNv+y6AN6XtRZ1cPaiHaiiNINkpMhSDuxHwf7tfoNtO
19
+ m/k1ZFUFLkpFNfHrOjh5fKJcZ1hqgtIrVlgQfyYDd5rUB5Ol6KHotsOarBTQ2vmz
20
+ 9hi4VJvQnlB4E/1nossfxQlceUPxsjKXUVVYR8ql+0DnS0qCZh3/G/Kv6VV59qzh
21
+ N+v6D1E/WBXA82c9771NXExDBB2VxESs2stUYVng9Q6KkzIuyAy8ptkIw1w9ciWN
22
+ 5Ymmdancg1L2aqZMVvlOEp9simI+mssl65o4O/k5fKnksi0qgW0lLOavh9DZMEag
23
+ Bi0eUJwGoEg2RdjNeExHwaTD8LBwHkMqmI3ySjCtZfUlv4rIknCSIyNMZL+GS8xs
24
+ qdVqUCgYopzJh0yLlVOvAoIBAQDhODPkt+vdCWnCKzlBC1r35Jh+kmff6MJ7C9x+
25
+ lmSyUGy7Waj+MTyhJk6opYZ1gHld57rYiRqhNr0RF708GVHYyQLdf8wP1FMjHQ6Y
26
+ RolE8XEjEOuG+QhQVzIgK2czMbbcXQXHX36hpisEQvKCbBYVqZ/2RTfOGZo/af48
27
+ SLuJFhdU1s8T2moRjfWIErvcTdRr0gxLT9Qz2iAq6WIrzcTAcAyFwxvxZCD/DUMP
28
+ YK0hYjFM1F+8TXp9m4+Nbn59b04Agg2Jb43I1s2jW/IzZjaJcVJxFzFaKP9Gocm8
29
+ vaCwh0kSkuMdKIo4bbab7IxvMX+B0++GPq4k7Pky74hb7lGjAoIBAQDcY7RDsrcV
30
+ 79NhTbr5uOeIx0ZdQXRt6MZ3i6QcCtu8sBGfSdgCnn7DJ9Lu0wg4MGN8jr54MYik
31
+ VeMcMf3a2aCKTZYVetd250Qx+oXudLu1TIHHH7TFK3/+lH2xwGCY0GQu6txTVe6q
32
+ zzTxoH+97H6fSm5bLev+ObbDTF+dDIqwtwRB0kW9b8GxL2pV48mnxBEE/p+F2M0R
33
+ Diud/5EXqz5xv8VbIybkXyuENYyopqwSXDfxkdtQNLGQSimB0N7H6HFu1wPok8P9
34
+ wTRFpMeJ5tF957LBzBoDGlYILedljtzY+gzXrlClwzld9hXbm8pz1VT9OyFfZR1+
35
+ ZhfmLLan/StjAoIBAHOpwnTOw9HTeL3gJtoxs7kla+9szu3eAqrgj49vOy2cQgsB
36
+ Y9mPfbyhCLpxr5j+rtW8IWf9GXD7xKNXlrabpj34FYGdlTX36+5XiNxJNUvz1w+U
37
+ K/E4Sb3A2hxNTgWrnWaUW1hlwYnQ5bydiR/T1I+xelYmfB9bZKz2iTt6et1PPBI0
38
+ 80oV3G1Bg3wratEcI2BwEiJHUAqFFgoTq3glh8rwgG3doqcYrh1uOSdXlfJUFE+J
39
+ rdTt0V9amaGfwlQ26k82ey8+3Ajtz9P6b2tYLd/uE9HCgHT2IwuqIQnONQ0TnUJt
40
+ rzeVT07lgWeYVxLvz7TkG9nMrPCHxv8SpuvXe5MCggEAIe8sM3xSGouZ5ZKdZpQk
41
+ +neMixFoBwBfhsq2kybM3MnTfM5W91hGNnBsVx+hVV2GBAjKpSEjZAJhfNbpuofl
42
+ 40W9BUOr54AGjReBBc1tlaXZGbr1D6L6C0376KGxffYgZuT81cwWerB6+3V2Fd1T
43
+ Rd2lDl8MxlFGpd2dn0XuGPWlLylcWaXakhi169GuHCnhYP5/u5E9ShH/f015nsZc
44
+ UBFyJu1LsMBCqBHCvbkkJ5ORfZ2ywi/K42e36mgp1WgiByoOTQJrnCfij5KmssIa
45
+ oaNKb/KoUq/8bTf8ODP+J16hGZiajFt5+tDIXs8nJhzEAFXZdqHQH8VCist5uHYP
46
+ 9wKCAQA0AgsC8MO1GO9IFUMDTTcU0L96vSJKXX+JaC0TQFbbxzh7EfI4sPpRzUn3
47
+ JB/fdroEASc8yDixK+VqonC+ns2mZKU8+97EXAYeFFt9tBmhKygnishtbI84Hqx+
48
+ m6JQRcj8Or1eyhpwL4bjovTT9jp7rUvoTAkUz8soeHfWWibxePHrq/8RIvqcTph9
49
+ c5wF8mCXI5E99S/3bakfdlIxOhcztBoqCt3t4EODTAY4OTGB/iybRAcLvycOPCYB
50
+ jPigiID045aEkejZc8NemMBeIIgGaP+lZeQ/oetG8M+v6zE9A6nPweCDWfXUHVDi
51
+ 3yLdOa7h/8e15N+x55L8z6vwmA/S
52
+ -----END PRIVATE KEY-----
var/docker/start.sh CHANGED
@@ -104,6 +104,28 @@ if (code.includes(oldCatch)) {
104
  "
105
  fi
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  # Write a global Node.js preload script to extend undici fetch timeout
108
  # HF Spaces has intermittent connectivity to external APIs (e.g. Discord)
109
  # Default undici connect timeout is 10s; we extend to 30s
 
104
  "
105
  fi
106
 
107
+ # Patch youtube.provider.js to remove youtubepartner scope
108
+ # The youtubepartner scope requires YouTube Content ID access which normal accounts don't have.
109
+ # Google silently drops it from granted scopes, causing checkScopes to fail.
110
+ YT_TARGET="$PATCH_DIR/libraries/nestjs-libraries/dist/integrations/social/youtube.provider.js"
111
+ if [ -f "$YT_TARGET" ]; then
112
+ echo "Patching $YT_TARGET to remove youtubepartner scope..."
113
+ node -e "
114
+ const fs = require('fs');
115
+ let code = fs.readFileSync('$YT_TARGET', 'utf8');
116
+ const scope = 'https://www.googleapis.com/auth/youtubepartner';
117
+ if (code.includes(scope)) {
118
+ code = code.replace(\"'\" + scope + \"'\", \"/* removed: '\" + scope + \"' */''\");
119
+ // Also remove from the generated auth URL scope list
120
+ code = code.replace('\"' + scope + '\"', \"/* removed: '\" + scope + \"' */''\");
121
+ fs.writeFileSync('$YT_TARGET', code);
122
+ console.log('youtubepartner scope removed');
123
+ } else {
124
+ console.log('youtubepartner not found in youtube provider, skipping');
125
+ }
126
+ "
127
+ fi
128
+
129
  # Write a global Node.js preload script to extend undici fetch timeout
130
  # HF Spaces has intermittent connectivity to external APIs (e.g. Discord)
131
  # Default undici connect timeout is 10s; we extend to 30s