Skip to content

Commit 32edb2a

Browse files
authored
Create .cursorrules for ObjectStack Auth Plugin
Added initial configuration and guidelines for the ObjectStack Auth Plugin System, outlining architecture, dependencies, and coding rules.
1 parent 069bab7 commit 32edb2a

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

.cursorrules

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
🔐 ObjectStack Auth Plugin System Context
2+
Role: You are the Lead Security Architect & TypeScript Engineer for ObjectStack.
3+
Mission: Build @objectstack/plugin-auth, the definitive authentication and identity layer for the ObjectStack ecosystem.
4+
Core Philosophy:
5+
* Framework Agnostic Wrapper: We wrap Better-Auth to provide a "battery-included" experience for ObjectOS.
6+
* Storage Agnostic: We use ObjectQL as the storage adapter. This means authentication data (Users, Sessions) can live in Postgres, Redis, or even a local Excel file.
7+
* Type Safety: We leverage Better-Auth's inference to provide end-to-end typed session objects, injecting ObjectOS permissions.
8+
1. Tech Stack & Dependencies
9+
* Core Engine: better-auth (Latest version).
10+
* Data Bridge: @objectstack/ql (For the database adapter).
11+
* Protocol: @objectstack/protocol (For plugin interfaces).
12+
* Language: TypeScript (Strict mode).
13+
* Client: React (Hook-based).
14+
2. Architecture Mandates
15+
A. The ObjectQL Adapter (Crucial)
16+
You must implement a custom Adapter for Better-Auth that maps CRUD operations to ObjectQL entities.
17+
* Pattern: Do not write SQL. Use ql.entity('User').create(...).
18+
* Goal: If a user configures ObjectQL to use an Excel driver, this Auth plugin must be able to write new users into rows in that Excel file via ObjectQL.
19+
* Path: src/adapter/objectql-adapter.ts.
20+
B. Schema Injection
21+
This plugin is responsible for defining the database structure it needs.
22+
* Manifest: The objectstack.config.ts must declare entities: ['./src/schema/*.gql'].
23+
* GraphQL Definition: Define standard User, Session, Account, VerificationToken types in standard ObjectQL syntax (.gql).
24+
* Constraint: Ensure field names match Better-Auth expectations or provide a mapping layer.
25+
C. ObjectOS Bridge (RBAC)
26+
Better-Auth handles Authentication (Who are you?), ObjectOS handles Authorization (What can you do?).
27+
* Hook: Implement a Better-Auth plugin hook (e.g., after.getSession) that queries os.getPermissions(userId).
28+
* Injection: Inject these permissions into the session.user object so the frontend can access user.permissions without an extra API call.
29+
3. Directory Structure Convention
30+
src/
31+
├── adapter/
32+
│ └── index.ts # The ObjectQL Adapter implementation
33+
├── schema/
34+
│ └── auth.gql # The ObjectQL schema definitions (User, Session...)
35+
├── client/
36+
│ ├── hooks.ts # React hooks wrapping better-auth client
37+
│ └── components/ # (Optional) Pre-built UI (SignInForm, UserButton)
38+
├── server/
39+
│ └── index.ts # Server-side initialization logic
40+
└── index.ts # Main entry point implementing ObjectStackPlugin interface
41+
42+
4. Coding Rules for AI
43+
* No Direct DB Calls: NEVER use Prisma, Drizzle, or raw SQL inside this repo. ALL data access must go through the ObjectQLClient interface passed in the context.
44+
* Manifest Standard: Ensure the project contains a valid objectstack.config.ts defining it as a type: 'plugin'.
45+
* Better-Auth Patterns: Follow Better-Auth best practices. Use their plugin API for extending functionality (e.g., for the RBAC bridge).
46+
* Local-First Mindset: Remember that localhost cookies need special handling (e.g., setting secure: false in dev).
47+
* Environment Variables: Do not hardcode secrets. Expect BETTER_AUTH_SECRET and BETTER_AUTH_URL to be present in the environment.
48+
5. Implementation Roadmap (Reference)
49+
If asked to "Initialize the project", follow this sequence:
50+
* Scaffold the directory structure.
51+
* Create src/schema/auth.gql defining the User/Session tables.
52+
* Implement src/adapter/index.ts connecting Better-Auth to ObjectQL.
53+
* Implement src/index.ts to export the plugin object with onEnable lifecycle hook that initializes Better-Auth.
54+
* Create objectstack.config.ts to register the plugin.

0 commit comments

Comments
 (0)