• Joined on 2026-08-11

@yekhan/pxkit (0.2.0)

Published 2026-09-07 17:04:00 +00:00 by yekhan

Installation

@yekhan:registry=https://git.pumax.de/api/packages/yekhan/npm/
npm install @yekhan/pxkit@0.2.0
"@yekhan/pxkit": "0.2.0"

About this package

Pumax-Grundstock-Paket: UI-Kit, Supabase-Client-Helfer, Passwort-Policy, Modul-Gate-Kern. Wird von pxfin, pxtime, pxbook u.a. gemeinsam genutzt.

pxkit

Gemeinsames Grundstock-Paket für alle Pumax-Produkte an der zentralen Supabase-Auth-Instanz (pxfin, pxtime, pxbook, künftig weitere). Bündelt:

  • UI-Kit (ui/index.tsx + ui/tokens.css) — schlanke Basis-Komponenten (Stack, Card, Button, Field, Table etc.) und das zugehörige CSS-Token-System (.px-*-Klassen, CSS-Custom-Properties).
  • Supabase-Client-Helfer (supabase/client.ts, server.ts, service.ts, middleware.ts) — Browser-/Server-/Service-Role-Client sowie eine parametrisierbare Session-Middleware. Alle drei Client-Helfer akzeptieren seit 0.2.0 ein optionales { schema?: string } (Default 'public') — für Produkte mit eigenem Postgres-Schema (Struktur/info.md Regel 11, erster Konsument: pxorder):
    const supabase = await createSupabaseServerClient({ schema: "pxorder" });
    
    Ohne Argument verhalten sich bestehende Aufrufe (pxfin, pxtime) unverändert — betrifft nur .from()/.rpc()/.channel(), supabase.auth.* ist davon unabhängig. Das Ziel-Schema muss serverseitig als "Exposed schema" in PostgREST freigegeben sein (PGRST_DB_SCHEMAS, siehe tools/pxsrv/SCHEMA-TRENNUNG.md Abschnitt 6).
  • Passwort-Policy (auth/passwort.ts) — einheitliche Mindestanforderung (12 Zeichen, Zahl, Klein-/Großbuchstabe, Sonderzeichen).
  • Modul-Gate-Kern (module/hasModule.ts, module/pathMatcher.ts) — Aufruf der geteilten Postgres-Funktion has_module() gegen tenant_modules, plus generischer Pfad-Matcher.

Bewusst NICHT enthalten (bleibt in jedem Produkt-Repo, siehe Analyse in tools/pxtime/status.md "Analyse: Was gehört ins Foundation-Package?"): produktspezifische Modul-Wrapper (hasRechnungModule etc.), Routen- Pfadlisten (RECHNUNG_PFADE etc.), Auth-Mails mit Produkt-Branding (Login-Alarm etc.), sowie alle DB-seitigen RLS-/Berechtigungsfunktionen (is_org_member, has_write_role, record_shares, ...) — das ist geteiltes Datenbankschema, kein npm-Paket-Thema.

Herkunft

Extrahiert 2026-08-31 aus tools/pxfin/app als erster Schritt der Modul-Aufspaltung (siehe tools/pxtime/CLAUDE.md "Zielarchitektur"). pxfin selbst nutzt zu diesem Zeitpunkt noch nicht dieses Paket, sondern weiterhin seine eigenen Kopien — die Umstellung passiert erst beim eigentlichen pxtime/pxbook-Pilot-Split, um den laufenden (eingefrorenen) Monolithen währenddessen nicht anzufassen.

Kein Build-Schritt nötig

Das Paket wird als TypeScript-Quellcode veröffentlicht (kein tsc-Build, kein dist/). Next.js transpiliert node_modules-Pakete standardmäßig nicht — jedes konsumierende Produkt muss deshalb in seiner next.config.js/next.config.mjs eintragen:

const nextConfig = {
  transpilePackages: ["@yekhan/pxkit"],
};

Installation (in einem Produkt-Repo)

  1. .npmrc.example in diesem Ordner nach .npmrc im Produkt-Repo kopieren, NODE_AUTH_TOKEN als Umgebungsvariable setzen (Token-Erzeugung siehe Kommentar in .npmrc.example).
  2. npm install @yekhan/pxkit
  3. CSS-Tokens einmal global einbinden, z.B. in app/layout.tsx:
    import "@yekhan/pxkit/ui.css";
    
  4. Helfer/Komponenten importieren — drei getrennte Einstiegspunkte, nicht mischen in einer Client Component (siehe Kommentar in src/index.ts; Grund: @yekhan/pxkit re-exportiert auch next/headers-abhängigen Code, was jede Client Component zum Absturz bringt, die von dort auch nur ein UI-Bauteil importiert):
    // Server Components / Server Actions / Middleware — voller Umfang:
    import { hasModule, passwortPruefen, createSupabaseServerClient } from "@yekhan/pxkit";
    
    // Client Components ("use client") — NUR die UI-Bausteine, von hier:
    import { Card, Button } from "@yekhan/pxkit/ui";
    
    // Client Components mit authentifiziertem Browser-Supabase-Client (z.B.
    // Realtime-Abos) — dritter, ebenfalls next/headers-freier Einstiegspunkt,
    // seit 0.2.0:
    import { createBrowserSupabaseClient } from "@yekhan/pxkit/client";
    

Veröffentlichen (nach einer Änderung hier)

npm version patch   # oder minor/major
npm publish

Braucht ein .npmrc mit write:package-Scope-Token (siehe .npmrc.example) — Publish erfolgt gegen die private Gitea-npm-Registry unter https://git.pumax.de/api/packages/yekhan/npm/, nicht gegen die öffentliche npm-Registry.

Dependencies

Development Dependencies

ID Version
@supabase/ssr ^0.5.2
@supabase/supabase-js ^2.45.4
@types/node ^22.5.0
@types/react 19.2.18
next 16.3.2
react 19.2.8
typescript ^5.6.3
vitest ^2.1.2

Peer Dependencies

ID Version
@supabase/ssr >=0.5
@supabase/supabase-js >=2
next >=14
react >=18
Details
npm
2026-09-07 17:04:00 +00:00
1
UNLICENSED
11 KiB
Assets (1)
Versions (3) View all
0.3.0 2026-09-11
0.2.0 2026-09-07
0.1.0 2026-09-01