Returning to
—
Overview
Platform Admin—
—
—
Apps
—
accessible
Managed
—
you control
Quick Access
Loading…
Security Activity
Devices, networks, and link origins observed on your PAP account.
Live posture
See what looks normal — and what does not.
This feed tracks authenticated PAP activity using request metadata, browser hints, and Cloudflare edge headers when available. It is your early-warning panel for strange logins and unfamiliar regions.
Origin map
Recent activity across the world
Recent events
Login and session signals
Easy phase: PAP + browser + Cloudflare headers. Rich ASN/VPN intelligence can be layered in later.
Loading security activity…
Derived signals
What stands out in this activity
Fast country changes, unusual referrers, and device churn are inferred locally from the recent feed.
Analyzing recent signals…
Route watch
Recent travel and path transitions
These hops are inferred from consecutive PAP sessions, not full packet-level traces.
Building route trace…
Apps
All apps connected to your PAP identity.
Loading apps…
Integration Docs
How to connect any app to PortAuthorityPass for authentication.
How it works
PortAuthorityPass (PAP) is a centralized auth gateway. Any app you own can delegate its login flow to PAP. Once a user is authenticated here, PAP redirects them back to your app. Your app then uses the Supabase session to verify who the user is.
https://auth.plabs.cloud/?return_to=https://yourapp.comreturn_to URLStep 1 — Register your app (Admin only)
Go to Admin → Apps → + Add App. Fill in:
- Name — display name shown in the portal
- Slug — a unique lowercase ID, e.g.
my-tool - Entry URL — the base URL of your app, e.g.
https://mytool.plabs.cloud - Icon — optional emoji shown next to the app name
Once saved, the app appears in the platform and users with membership can access it.
Step 2 — Add your Supabase client
In your app, install @supabase/supabase-js and initialise it with the same project URL and anon key as PAP:
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
'https://api.plabs.cloud', // PAP Supabase URL
'YOUR_ANON_KEY' // from supabase/config.toml → anon key
);
Because both PAP and your app share the same Supabase project, the user's session cookie/token is valid in both places.
Step 3 — Redirect to PAP for login
Instead of a login form, send users to PAP with a return_to parameter:
// In your app — detect unauthenticated user, then: window.location.href = 'https://auth.plabs.cloud/?return_to=' + encodeURIComponent(window.location.href);
Step 4 — Read the user in your app
After PAP redirects back, call getSession() to confirm the user:
const { data: { session } } = await supabase.auth.getSession();
if (!session) {
// Not authenticated — redirect to PAP
} else {
const user = session.user;
console.log('Logged in as', user.email);
}
Supabase credentials
Find these in supabase/config.toml or by running npx supabase status:
- API URL:
— - Anon Key:
—
Settings
Profile
Profile QR + Sharing
—
Profile sharing is ready.
Account
Security
Danger Zone
Identity Links
A) Go to #join in Ghost Ship 404 → click Get My Link Code → enter the code below.
B) Click Generate code here → go to #join in Discord → click I have a PAP code → enter the code.