File size: 2,471 Bytes
8b37604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Workspace

## Overview

pnpm workspace monorepo using TypeScript. Each package manages its own dependencies.

## Stack

- **Monorepo tool**: pnpm workspaces
- **Node.js version**: 24
- **Package manager**: pnpm
- **TypeScript version**: 5.9
- **API framework**: Express 5
- **Database**: PostgreSQL + Drizzle ORM
- **Validation**: Zod (`zod/v4`), `drizzle-zod`
- **API codegen**: Orval (from OpenAPI spec)
- **Build**: esbuild (CJS bundle)

## Key Commands

- `pnpm run typecheck` — full typecheck across all packages
- `pnpm run build` — typecheck + build all packages
- `pnpm --filter @workspace/api-spec run codegen` — regenerate API hooks and Zod schemas from OpenAPI spec
- `pnpm --filter @workspace/db run push` — push DB schema changes (dev only)
- `pnpm --filter @workspace/api-server run dev` — run API server locally

See the `pnpm-workspace` skill for workspace structure, TypeScript setup, and package details.

## FB Group Publisher PRO (artifacts/fb-publisher)

Arabic RTL web port of the Chrome extension. Architecture:
- **Web app** (this artifact): hosts UI, auth, subscriptions, saved lists, all main logic.
- **Bridge extension** (`public/extension/`): tiny Chrome extension installed by users; injects a content script on the web app that exposes Facebook cookies and tab scripting via `window.postMessage` (sources: `fbpub-web``fbpub-bridge`).
- **Auth**: Clerk (mandatory). Express uses `clerkMiddleware` + a proxy from web `/api` to api-server.
- **Payments**: PayPal Sandbox subscription, $2.50 every 2 months with 1‑month free trial. Plan auto-created on first subscribe and IDs cached in `app_config` table.
- **DB tables**: `users`, `subscriptions`, `saved_lists`, `app_config` (drizzle).
- **Pages**: Landing, Sign-in/up, InstallExtension, Subscription, SubscriptionReturn, Publisher.

## Chrome Extension — حماية الكود

- **الكود المصدري الأصلي** محفوظ في: `artifacts/fb-publisher/public/extension/src/background.source.js` (مُستبعد من Git)
- **الكود الموزّع** في `background.js` مُشفّر دائماً باستخدام javascript-obfuscator
- **لتعديل الكود**: عدّل `src/background.source.js` ثم شغّل `pnpm run obfuscate-extension`
- **السكريبت**: `scripts/obfuscate-extension.cjs` — يشفّر الكود ويبني ZIP تلقائياً
- **التبعية**: `javascript-obfuscator` مثبتة في الجذر (workspace root)