appos 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +399 -0
- package/build/client/assets/IconMail-BZadZvAd.js +1 -0
- package/build/client/assets/_-CgPm6_fJ.js +1 -0
- package/build/client/assets/_index-BCLDp_mg.js +1 -0
- package/build/client/assets/_layout-CTmjtKOZ.js +1 -0
- package/build/client/assets/_layout-HsJ3Zu5t.js +1 -0
- package/build/client/assets/_layout-OcS85aOt.js +1 -0
- package/build/client/assets/app-sidebar-Bm6e4kn_.js +1 -0
- package/build/client/assets/app-sidebar-D2Nsi85j.js +1 -0
- package/build/client/assets/auth-provider-rkzBVtYX.js +1 -0
- package/build/client/assets/brand-CbTWw97e.js +1 -0
- package/build/client/assets/browser-ponyfill-D3yQFvRu.js +2 -0
- package/build/client/assets/button-DtZhoqpk.js +1 -0
- package/build/client/assets/check-D5D2EGI4.js +1 -0
- package/build/client/assets/checkbox-B35Nn166.js +1 -0
- package/build/client/assets/chunk-JG3XND5A-BetDbdG0.js +1 -0
- package/build/client/assets/chunk-UIGDSWPH-DeiamgQc.js +26 -0
- package/build/client/assets/chunk-vBKQ29Cd.js +1 -0
- package/build/client/assets/circle-alert-DB4JluX5.js +1 -0
- package/build/client/assets/compare-Br3z3FUS-BXkA2ojG.js +2 -0
- package/build/client/assets/compiler-runtime-Co9svCia.js +1 -0
- package/build/client/assets/config-ChcA_Pkv.js +1 -0
- package/build/client/assets/createReactComponent-C2TSpqC7.js +1 -0
- package/build/client/assets/dialog-CQrpvURm.js +1 -0
- package/build/client/assets/dist-B6TkSbxV.js +1 -0
- package/build/client/assets/dist-BNO39Rfs.js +1 -0
- package/build/client/assets/dist-BWnI-4xl.js +1 -0
- package/build/client/assets/dist-CA21wN5I.js +1 -0
- package/build/client/assets/dist-CBNvQRbZ.js +1 -0
- package/build/client/assets/dist-CYRPrwOb.js +1 -0
- package/build/client/assets/dist-DKtC0FSi.js +1 -0
- package/build/client/assets/dist-DhfcebhF.js +1 -0
- package/build/client/assets/dist-VqaKdvZu.js +1 -0
- package/build/client/assets/dist-Yn6lj8QC.js +5 -0
- package/build/client/assets/dropdown-menu-CbzduuDa.js +1 -0
- package/build/client/assets/empty-DQRarCKT.js +1 -0
- package/build/client/assets/entry.client-BN1GPjAL.js +10 -0
- package/build/client/assets/es2015-BJguufLZ.js +41 -0
- package/build/client/assets/eye-Ctrln70x.js +1 -0
- package/build/client/assets/file-preview-dialog-BRkWSRN4.js +14 -0
- package/build/client/assets/index-Del2yBnb.js +1 -0
- package/build/client/assets/initReactI18next-CyHiepAw.js +1 -0
- package/build/client/assets/input-V1lM1yoz.js +1 -0
- package/build/client/assets/jsx-runtime-SCjaiuzT.js +1 -0
- package/build/client/assets/lock-Bj7dxHab.js +1 -0
- package/build/client/assets/manifest-ca813980.js +1 -0
- package/build/client/assets/nav-user-BqPUBe9x.js +1 -0
- package/build/client/assets/nav-user-Yu7wt7b_.js +1 -0
- package/build/client/assets/org-switcher-BIuearbE.js +1 -0
- package/build/client/assets/password-input-bor7e4TM.js +1 -0
- package/build/client/assets/react-dom-Bhi-1tDD.js +1 -0
- package/build/client/assets/realtime-BmU1LPhx.js +1 -0
- package/build/client/assets/root-CS5YIV-V.js +3 -0
- package/build/client/assets/root-D0CFuQYc.css +2 -0
- package/build/client/assets/route-B9cwW-UK.js +1 -0
- package/build/client/assets/route-BD2nV1q2.js +1 -0
- package/build/client/assets/route-BEnDcljt.js +1 -0
- package/build/client/assets/route-BR4LdxHR.js +1 -0
- package/build/client/assets/route-BU5TYmVE.js +0 -0
- package/build/client/assets/route-BVmIPEvK.js +11 -0
- package/build/client/assets/route-BY244T48.js +1 -0
- package/build/client/assets/route-Bwd903CU.js +1 -0
- package/build/client/assets/route-CN9iChOk.js +1 -0
- package/build/client/assets/route-CQ3p9Qb1.js +1 -0
- package/build/client/assets/route-CVLnTONw.js +1 -0
- package/build/client/assets/route-CoMZag4T.js +1 -0
- package/build/client/assets/route-CsYSLbnx.js +1 -0
- package/build/client/assets/route-DWNrq2GE.js +1 -0
- package/build/client/assets/route-Dxfmap_u.js +1 -0
- package/build/client/assets/route-Gnx1fkRX.js +0 -0
- package/build/client/assets/route-NduA4SS_.js +1 -0
- package/build/client/assets/route-u2hskgE_.js +1 -0
- package/build/client/assets/route-v9Jwv-AW.js +1 -0
- package/build/client/assets/select-DATRE76_.js +1 -0
- package/build/client/assets/separator-Cla0V581.js +1 -0
- package/build/client/assets/shim-TRiHENXu.js +1 -0
- package/build/client/assets/sidebar-CqrdL512.js +1 -0
- package/build/client/assets/site-header-CZO3qBhf.js +1 -0
- package/build/client/assets/site-header-CwidwSv1.js +1 -0
- package/build/client/assets/social-providers-Bz7f1_yd.js +1 -0
- package/build/client/assets/test-WdoqKbLa.js +1 -0
- package/build/client/assets/tooltip-BeDraHQn.js +1 -0
- package/build/client/assets/trpc-C1CjVipH.js +6 -0
- package/build/client/assets/trust-indicator-D4tEs4Dr.js +20 -0
- package/build/client/assets/use-file-upload-CNPfWC6W.js +1 -0
- package/build/client/assets/useTranslation-Bz7VuQ7j.js +1 -0
- package/build/client/assets/utils-InBzhUf_.js +1 -0
- package/build/client/assets/x-4CC8aqOW.js +1 -0
- package/build/client/favicon.ico +0 -0
- package/build/client/locales/en/emails.json +11 -0
- package/build/client/locales/en/translation.json +411 -0
- package/build/client/locales/zh-CN/emails.json +11 -0
- package/build/client/locales/zh-CN/translation.json +1 -0
- package/build/client/locales/zh-TW/emails.json +11 -0
- package/build/client/locales/zh-TW/translation.json +1 -0
- package/build/client/logo-invert.png +0 -0
- package/build/client/logo.png +0 -0
- package/build/lib/adapter-factory-CLtf7vT5-CTKiMV2u.mjs +19675 -0
- package/build/lib/bun-sqlite-dialect-DN7EKoIB-0pWIoG0L.mjs +155 -0
- package/build/lib/chunk-BYI67GdN.mjs +1 -0
- package/build/lib/chunk-CkKlU7xI.mjs +44 -0
- package/build/lib/client-BtuhFgvy.mjs +65 -0
- package/build/lib/client.d.ts +2272 -0
- package/build/lib/client.js +24 -0
- package/build/lib/date.d.ts +1 -0
- package/build/lib/date.js +1 -0
- package/build/lib/dialect-BeMwdQoz-D41NdSow.mjs +72 -0
- package/build/lib/dist-cjs-B43A5HXv.mjs +169 -0
- package/build/lib/dist-cjs-B_wkbabY.mjs +214 -0
- package/build/lib/dist-cjs-BmbYbMhp.mjs +143 -0
- package/build/lib/dist-cjs-Cc337rwW.mjs +7 -0
- package/build/lib/dist-cjs-CgzfN8xY.mjs +4974 -0
- package/build/lib/dist-cjs-DBFcizQf.mjs +50 -0
- package/build/lib/dist-cjs-DC-UL-xx.mjs +97 -0
- package/build/lib/dist-cjs-DHlTgXUO.mjs +6975 -0
- package/build/lib/dist-cjs-DYAmJYzN.mjs +323 -0
- package/build/lib/dist-cjs-Ddm6Stp9.mjs +1294 -0
- package/build/lib/dist-cjs-GFGBhaZg.mjs +84 -0
- package/build/lib/dist-cjs-ieCOxrOi.mjs +181 -0
- package/build/lib/dist-cjs-nbOGa7i_.mjs +47 -0
- package/build/lib/dist-cjs-pN6ekzMW.mjs +66 -0
- package/build/lib/dist-cjs-yYlQ1OiO.mjs +102 -0
- package/build/lib/esm-DPet4lFW.mjs +15816 -0
- package/build/lib/event-streams-x9fP9BzF.mjs +185 -0
- package/build/lib/file-preview-dialog-Cugg8tEc.mjs +59 -0
- package/build/lib/kysely-adapter-BTWfu5rn.mjs +183 -0
- package/build/lib/magic-string.es-jZcifc5m.mjs +1013 -0
- package/build/lib/memory-adapter-DiU519m9.mjs +147 -0
- package/build/lib/node-ponyfill-Dmm1SWTU.mjs +38212 -0
- package/build/lib/node-sqlite-dialect-BqISUSC3-DYvTLBpY.mjs +155 -0
- package/build/lib/package-DfozRyK6.mjs +5 -0
- package/build/lib/react-dom-CPjM_WCt.mjs +42 -0
- package/build/lib/server.d.mts +76273 -0
- package/build/lib/server.mjs +325 -0
- package/build/lib/sso-oidc-Qom0PEDW.mjs +1036 -0
- package/build/lib/sts-CLRaHSW_.mjs +13 -0
- package/build/lib/sts-Dl7yZqX1.mjs +1405 -0
- package/build/lib/test.d.mts +8922 -0
- package/build/lib/test.mjs +175650 -0
- package/build/lib/ui/index.d.ts +1643 -0
- package/build/lib/ui/index.js +160 -0
- package/build/lib/utils.d.ts +21 -0
- package/build/lib/utils.js +1 -0
- package/build/lib/zod.d.ts +1 -0
- package/build/lib/zod.js +23 -0
- package/build/main.js +2383 -0
- package/build/server/assets/context-BoNg86Eh.js +35 -0
- package/build/server/assets/dialog-B8YbGNaz.js +54 -0
- package/build/server/assets/file-preview-dialog-qWSViOWQ.js +15 -0
- package/build/server/assets/react-CFQ4y0AA.js +13 -0
- package/build/server/assets/react-dom-Ca1YUVo2.js +5 -0
- package/build/server/assets/server-build-BMOfm0ad.js +118 -0
- package/build/server/assets/server.node-B2oksIp8.js +196 -0
- package/build/server/assets/server.node-VQzoub0A.js +1 -0
- package/build/server/index.js +123 -0
- package/package.json +224 -0
package/README.md
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# AppOS
|
|
2
|
+
|
|
3
|
+
**AppOS** is a self-hostable **backend-as-a-service with type-safe APIs** combined with **14 ready-to-use SaaS modules**. Replace 15+ SaaS subscriptions with one extensible platform that you own and control.
|
|
4
|
+
|
|
5
|
+
Think of it as:
|
|
6
|
+
- **Backend infrastructure**: Type-safe APIs (tRPC + REST), database (PostgreSQL), authentication (SSO/SAML/OAuth), file storage (S3-compatible), background jobs, real-time sync
|
|
7
|
+
- **Business modules**: Billing & subscriptions, CRM with pipelines, team collaboration, customer support, meeting scheduling, link management, and more
|
|
8
|
+
- **Extension layer**: Add custom APIs, workflows, and integrations via `appos/` directory
|
|
9
|
+
|
|
10
|
+
All modules are pre-built, production-ready, and fully self-hostable.
|
|
11
|
+
|
|
12
|
+
### Why AppOS?
|
|
13
|
+
|
|
14
|
+
**One platform replaces 10+ SaaS subscriptions.** For a 50-user company:
|
|
15
|
+
|
|
16
|
+
| AppOS | Traditional SaaS Stack |
|
|
17
|
+
|-------|----------------------|
|
|
18
|
+
| **$0-299/mo** | **$5,900+/mo** |
|
|
19
|
+
| Self-hosted | Multiple vendors |
|
|
20
|
+
| One security audit | 10+ security audits |
|
|
21
|
+
| Full data ownership | Vendor lock-in |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🏗️ Architecture
|
|
26
|
+
|
|
27
|
+
AppOS is a **two-layer platform** that combines backend infrastructure with business modules:
|
|
28
|
+
|
|
29
|
+
### Backend Platform
|
|
30
|
+
The core platform provides a complete backend-as-a-service:
|
|
31
|
+
- **APIs**: REST (OpenAPI spec) + type-safe tRPC + Real-time (WebSockets)
|
|
32
|
+
- **Authentication**: SSO with SAML/OAuth, RBAC, API key management, session handling
|
|
33
|
+
- **Storage**: S3-compatible object storage with automatic image variants, CDN integration
|
|
34
|
+
- **Database**: PostgreSQL 18 with type-safe ORM, migrations, and multi-tenancy
|
|
35
|
+
- **Queue**: Durable workflow engine for background jobs and scheduled tasks
|
|
36
|
+
- **Cache**: Redis-based sessions, rate limiting, and application caching
|
|
37
|
+
|
|
38
|
+
### Business Modules
|
|
39
|
+
14 production-ready SaaS modules:
|
|
40
|
+
- **Auth**: User management, SSO, MFA, API keys
|
|
41
|
+
- **Billing**: Subscriptions, invoicing, payment processing, revenue metrics
|
|
42
|
+
- **CRM**: Contact management, sales pipelines, activity tracking
|
|
43
|
+
- **Projects**: Kanban boards, issue tracking, dependencies
|
|
44
|
+
- **Support**: Ticketing, live chat, knowledge base
|
|
45
|
+
- **HR**: Employee directory, recruiting, onboarding
|
|
46
|
+
- **Scheduling**: Meeting booking, calendar sync, availability management
|
|
47
|
+
- **Links**: Branded short links, QR codes, analytics
|
|
48
|
+
- **Forms**: Public forms, submissions, auto-todo creation
|
|
49
|
+
- **Collaboration**: Team channels, direct messages, file sharing
|
|
50
|
+
- **Site**: Marketing pages, blog, legal docs
|
|
51
|
+
- **Docs**: API documentation, user guides
|
|
52
|
+
- **Notifications**: Email, SMS, push notifications
|
|
53
|
+
- **Webhooks**: Event subscriptions, delivery tracking
|
|
54
|
+
|
|
55
|
+
### Your React Application
|
|
56
|
+
Framework-agnostic frontend integration:
|
|
57
|
+
- **Next.js App Router** - Full-stack React with server components
|
|
58
|
+
- **React Router v7** - SPA with server-side rendering
|
|
59
|
+
- **TanStack Start** - Type-safe full-stack framework
|
|
60
|
+
|
|
61
|
+
AppOS provides **React providers** (auth, tRPC client, realtime) that work with any React meta-framework.
|
|
62
|
+
|
|
63
|
+
### Extension Layer
|
|
64
|
+
Add custom business logic via the `appos/` directory:
|
|
65
|
+
- `appos/api/` - REST API routes (auto-discovered)
|
|
66
|
+
- `appos/emails/` - React Email templates (auto-discovered)
|
|
67
|
+
- `appos/realtime/` - WebSocket event handlers (auto-discovered)
|
|
68
|
+
- `appos/trpc/` - Type-safe API endpoints (auto-discovered)
|
|
69
|
+
- `appos/workflows/` - Durable workflows (auto-discovered)
|
|
70
|
+
|
|
71
|
+
All extensions support hot-reload in development and are type-checked.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 🏗️ Technology Stack
|
|
76
|
+
|
|
77
|
+
- **Runtime**: NodeJS v24+
|
|
78
|
+
- **Database**: PostgreSQL 18+ (appos data store)
|
|
79
|
+
- **Queue**: [DBOS](https://docs.dbos.dev/typescript/programming-guide)
|
|
80
|
+
(PostgreSQL-backed job queue)
|
|
81
|
+
- **Cache**: Redis (sessions, rate limiting)
|
|
82
|
+
- **Search**: MeiliSearch or Typesense
|
|
83
|
+
- **Storage**: S3-compatible (MinIO for self-hosted)
|
|
84
|
+
- **Real-time**: socket.io + Server-Sent Events
|
|
85
|
+
- **Framework**: React Router v7 Framework Mode
|
|
86
|
+
- **Language**: TypeScript
|
|
87
|
+
- **Styling**: Tailwind CSS 4
|
|
88
|
+
- **Components**: Radix UI (shadcn/ui patterns)
|
|
89
|
+
- **State**: TanStack Query + Zustand
|
|
90
|
+
- **Forms**: React Hook Form + Zod
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 📦 Platform Modules
|
|
95
|
+
|
|
96
|
+
AppOS provides 14 production-ready modules with REST and tRPC APIs:
|
|
97
|
+
|
|
98
|
+
| Feature Area | What It Does |
|
|
99
|
+
| ----------------- | ------------------------------------------------------ |
|
|
100
|
+
| **Auth** | SSO (SAML/OAuth), user management, API keys, MFA |
|
|
101
|
+
| **Billing** | Subscriptions, invoicing, payment processing |
|
|
102
|
+
| **Storage** | S3-compatible file storage with image transformations |
|
|
103
|
+
| **Links** | Branded short links, QR codes, click analytics |
|
|
104
|
+
| **Scheduling** | Meeting booking, calendar sync, availability rules |
|
|
105
|
+
| **Webhooks** | Event subscriptions, delivery tracking, retry logic |
|
|
106
|
+
| **CRM** | Contact management, sales pipelines, activity tracking |
|
|
107
|
+
| **Projects** | Kanban boards, issue tracking, roadmap planning |
|
|
108
|
+
| **Collaboration** | Team channels, direct messaging, file sharing |
|
|
109
|
+
| **Support** | Customer support ticketing with live chat |
|
|
110
|
+
| **Notifications** | Multi-channel notifications (email, SMS, push) |
|
|
111
|
+
| **HR** | Employee directory, recruiting, onboarding workflows |
|
|
112
|
+
| **Platform** | System settings, admin tools, audit logs |
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## ⚡ Quick Integration
|
|
117
|
+
|
|
118
|
+
AppOS integrates with any React meta-framework via **React providers**. Wrap your app once, access platform APIs everywhere.
|
|
119
|
+
|
|
120
|
+
### 1. Setup Providers (any React framework)
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
// app/root.tsx (React Router) or app/layout.tsx (Next.js) or app/root.tsx (TanStack Start)
|
|
124
|
+
import { AuthProvider, RealtimeProvider, TRPCProvider } from "appos/client";
|
|
125
|
+
|
|
126
|
+
export default function RootLayout({ children }) {
|
|
127
|
+
return (
|
|
128
|
+
<AuthProvider>
|
|
129
|
+
<TRPCProvider>
|
|
130
|
+
<RealtimeProvider>
|
|
131
|
+
{children}
|
|
132
|
+
</RealtimeProvider>
|
|
133
|
+
</TRPCProvider>
|
|
134
|
+
</AuthProvider>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2. Use Platform APIs
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
// Use tRPC for type-safe API calls
|
|
143
|
+
import { trpc } from "#app/lib/trpc";
|
|
144
|
+
|
|
145
|
+
function Dashboard() {
|
|
146
|
+
const { data: user } = trpc.auth.me.useQuery();
|
|
147
|
+
const { data: subscriptions } = trpc.billing.list.useQuery();
|
|
148
|
+
|
|
149
|
+
return <div>Welcome {user?.name}</div>;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Use auth hooks
|
|
153
|
+
import { useAuth } from "appos/client";
|
|
154
|
+
|
|
155
|
+
function ProfileButton() {
|
|
156
|
+
const { user, client } = useAuth();
|
|
157
|
+
return <button onClick={() => client.signOut()}>Sign Out</button>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Use realtime for live updates
|
|
161
|
+
import { useRealtime } from "appos/client";
|
|
162
|
+
|
|
163
|
+
function ChatRoom() {
|
|
164
|
+
const socket = useRealtime();
|
|
165
|
+
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
socket.on("message", (data) => {
|
|
168
|
+
// Handle realtime message
|
|
169
|
+
});
|
|
170
|
+
}, [socket]);
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 3. Extend Platform (appos/ directory)
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// appos/trpc/posts.ts - Custom tRPC router
|
|
178
|
+
import { type TRPCRouterRecord, publicProcedure } from "appos/server";
|
|
179
|
+
|
|
180
|
+
export default {
|
|
181
|
+
list: publicProcedure.query(async ({ ctx }) => {
|
|
182
|
+
return ctx.container.db.appos.select().from(posts);
|
|
183
|
+
}),
|
|
184
|
+
create: publicProcedure.mutation(async ({ input, ctx }) => {
|
|
185
|
+
return ctx.container.db.appos.insert(posts).values(input);
|
|
186
|
+
}),
|
|
187
|
+
} satisfies TRPCRouterRecord;
|
|
188
|
+
|
|
189
|
+
// Automatically available at: trpc.posts.list.useQuery()
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
// appos/realtime/chat.ts - Custom Socket.IO handler
|
|
194
|
+
import type { Socket, Container } from "appos";
|
|
195
|
+
|
|
196
|
+
export default function (socket: Socket, container: Container) {
|
|
197
|
+
socket.on("chat:message", async (data) => {
|
|
198
|
+
// Handle chat message
|
|
199
|
+
socket.broadcast.emit("chat:new-message", data);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// appos/workflows/send-welcome-email.ts - Durable workflow
|
|
206
|
+
import { defineWorkflow, type Container } from "appos/server";
|
|
207
|
+
|
|
208
|
+
export default defineWorkflow(async (container: Container, userId: string) => {
|
|
209
|
+
// Fetch user
|
|
210
|
+
const user = await container.db.appos.query.users.findFirst({
|
|
211
|
+
where: (users, { eq }) => eq(users.id, userId),
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// Send welcome email
|
|
215
|
+
await container.email.send({
|
|
216
|
+
to: user.email,
|
|
217
|
+
subject: "Welcome to AppOS!",
|
|
218
|
+
template: "welcome",
|
|
219
|
+
data: { name: user.name },
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
// Trigger from anywhere: app.locals.workflows.sendWelcomeEmail(userId)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 🎨 Scaffolding with Generate Command
|
|
229
|
+
|
|
230
|
+
Use `appos generate` (or `appos g`) to scaffold files with correct structure and prevent typos:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# Interactive prompt-based generation
|
|
234
|
+
appos generate
|
|
235
|
+
|
|
236
|
+
# Choose from:
|
|
237
|
+
# - tRPC Router → appos/trpc/*.ts
|
|
238
|
+
# - Workflow → appos/workflows/*.ts
|
|
239
|
+
# - Realtime Handler → appos/realtime/*.ts
|
|
240
|
+
# - API Route → appos/api/**+/index.ts
|
|
241
|
+
# - API Config → appos/api/**+/openapi.ts
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### API Route Generation
|
|
245
|
+
|
|
246
|
+
The generate command accepts intuitive URL paths and converts them to the consistent folder structure:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Input URL pattern: /api/v1/users
|
|
250
|
+
# Generated file: appos/api/v1+/users+/index.ts
|
|
251
|
+
|
|
252
|
+
# Input URL pattern: /api/v1/users/:id
|
|
253
|
+
# Generated file: appos/api/v1+/users+/$id+/index.ts
|
|
254
|
+
|
|
255
|
+
# Input URL pattern: /api/v2/posts/:postId/comments
|
|
256
|
+
# Generated file: appos/api/v2+/posts+/$postId+/comments+/index.ts
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Pattern:** Every URL segment becomes a folder with `+` suffix, all routes use `index.ts`. This allows easy extension without refactoring (e.g., adding child routes later).
|
|
260
|
+
|
|
261
|
+
### Type Generation & Hot Reload
|
|
262
|
+
|
|
263
|
+
All extensions are **automatically type-checked** and merged into `appos/appos.ts`:
|
|
264
|
+
|
|
265
|
+
- **tRPC Routers:** User routers merge with `AppOSRouter` to create the final `AppRouter` type
|
|
266
|
+
- **Workflows:** Extend `AppOS.Workflows` namespace for type-safe workflow invocation
|
|
267
|
+
- **Realtime Events:** Extend `ServerToClientEvents` and `ClientToServerEvents` interfaces
|
|
268
|
+
- **Codegen:** Runs automatically on file changes with 500ms debounce
|
|
269
|
+
- **Hot Reload:** Development mode uses cache-busting for instant updates
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// Auto-generated in appos/appos.ts
|
|
273
|
+
import type { AppOSRouter } from "appos/server";
|
|
274
|
+
|
|
275
|
+
export type UserRouters = {
|
|
276
|
+
posts: typeof import("./trpc/posts").default;
|
|
277
|
+
analytics: typeof import("./trpc/analytics").default;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export type AppRouter = AppOSRouter & UserRouters;
|
|
281
|
+
|
|
282
|
+
// Now fully type-safe on client:
|
|
283
|
+
// trpc.posts.list.useQuery() ✓ Built-in + user routers
|
|
284
|
+
// trpc.auth.me.useQuery() ✓ Built-in AppOS router
|
|
285
|
+
// app.locals.workflows.sendEmail() ✓ Typed workflow handles
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 🔌 API Design
|
|
291
|
+
|
|
292
|
+
AppOS provides type-safe APIs through tRPC with module-specific actions:
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
// Authentication
|
|
296
|
+
trpc.auth.signIn.useMutation()
|
|
297
|
+
trpc.auth.signOut.useMutation()
|
|
298
|
+
trpc.auth.me.useQuery()
|
|
299
|
+
|
|
300
|
+
// Billing
|
|
301
|
+
trpc.billing.createCheckout.useMutation()
|
|
302
|
+
trpc.billing.cancelSubscription.useMutation()
|
|
303
|
+
trpc.billing.list.useQuery()
|
|
304
|
+
|
|
305
|
+
// Storage
|
|
306
|
+
trpc.storage.upload.useMutation()
|
|
307
|
+
trpc.storage.download.useQuery()
|
|
308
|
+
trpc.storage.listBlobs.useQuery()
|
|
309
|
+
|
|
310
|
+
// Add custom endpoints in appos/trpc/
|
|
311
|
+
trpc.posts.list.useQuery() // Your custom router
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
## 🚀 Quick Start
|
|
318
|
+
|
|
319
|
+
### Prerequisites
|
|
320
|
+
|
|
321
|
+
- NodeJS 24+
|
|
322
|
+
- PostgreSQL 18+
|
|
323
|
+
- Redis 8+
|
|
324
|
+
- [mise](https://mise.jdx.dev/) (task runner)
|
|
325
|
+
|
|
326
|
+
### Development Setup
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
# Install dependencies
|
|
330
|
+
mise setup
|
|
331
|
+
|
|
332
|
+
# Setup the local infrastructure with databases seeded
|
|
333
|
+
mise app reset
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Development Commands (mise)
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Start all servers/workers in development mode
|
|
340
|
+
mise dev
|
|
341
|
+
|
|
342
|
+
# Build the React Router v7 and NodeJS main entry
|
|
343
|
+
mise build
|
|
344
|
+
|
|
345
|
+
# Testing
|
|
346
|
+
mise test
|
|
347
|
+
|
|
348
|
+
# Linting & Formatting
|
|
349
|
+
mise app check
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 🛠️ Development
|
|
355
|
+
|
|
356
|
+
### Monorepo Structure
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
appos/
|
|
360
|
+
├── app/ # YOUR REACT APPLICATION
|
|
361
|
+
│ ├── .server/ # Server-side code (loaders, actions)
|
|
362
|
+
│ ├── routes/ # Application routes (Next.js/React Router/TanStack Start)
|
|
363
|
+
│ ├── components/ # Your UI components
|
|
364
|
+
│ ├── lib/ # Your utilities and helpers
|
|
365
|
+
│ │ ├── client.tsx # Client-side exports (hooks, utils)
|
|
366
|
+
│ │ └── trpc.tsx # tRPC client setup
|
|
367
|
+
│ └── root.tsx # Root layout with providers
|
|
368
|
+
│
|
|
369
|
+
├── appos/ # YOUR PLATFORM EXTENSIONS
|
|
370
|
+
│ ├── api/ # Custom REST API endpoints (auto-discovered)
|
|
371
|
+
│ │ └── v1+/ # OpenAPI routes
|
|
372
|
+
│ ├── realtime/ # Custom Socket.IO handlers (auto-discovered)
|
|
373
|
+
│ │ └── *.ts # e.g., chat.ts, notifications.ts
|
|
374
|
+
│ ├── trpc/ # Custom tRPC routers (auto-discovered)
|
|
375
|
+
│ │ └── *.ts # e.g., posts.ts, analytics.ts
|
|
376
|
+
│ └── emails/ # Email templates (auto-discovered)
|
|
377
|
+
│ └── *.tsx # React Email components
|
|
378
|
+
│
|
|
379
|
+
├── db/ # Database schemas
|
|
380
|
+
│ └── appos/ # User-defined schemas
|
|
381
|
+
│ └── schema.ts # Drizzle ORM schema
|
|
382
|
+
│
|
|
383
|
+
├── public/ # Static assets
|
|
384
|
+
├── package.json # Node dependencies
|
|
385
|
+
├── mise.toml # Task runner config (dev, build, test commands)
|
|
386
|
+
└── README.md
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Key Directories:**
|
|
390
|
+
- `app/` - Your React application code (framework-agnostic)
|
|
391
|
+
- `appos/` - Extensions to the AppOS platform (auto-discovered)
|
|
392
|
+
- `db/appos/` - Your database schema definitions
|
|
393
|
+
|
|
394
|
+
## 🔗 Links
|
|
395
|
+
|
|
396
|
+
- **Website**: [appos.sh](https://appos.sh)
|
|
397
|
+
- **Documentation**: [appos.sh/docs](https://appos.sh/docs)
|
|
398
|
+
- **Discord**: [discord.gg/appos](https://discord.gg/appos)
|
|
399
|
+
- **Twitter**: [@appos_sh](https://twitter.com/appos_sh)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-C2TSpqC7.js";var t=e(`outline`,`mail`,`Mail`,[[`path`,{d:`M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z`,key:`svg-0`}],[`path`,{d:`M3 7l9 6l9 -6`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./jsx-runtime-SCjaiuzT.js";import"./react-dom-Bhi-1tDD.js";import{D as n,F as r,P as i,j as a}from"./chunk-UIGDSWPH-DeiamgQc.js";import{t as o}from"./useTranslation-Bz7VuQ7j.js";import"./initReactI18next-CyHiepAw.js";import"./shim-TRiHENXu.js";import{t as s}from"./compiler-runtime-Co9svCia.js";import"./dist-BWnI-4xl.js";import"./check-D5D2EGI4.js";import{a as c,i as l,n as u,r as d,t as f}from"./select-DATRE76_.js";import"./utils-InBzhUf_.js";import"./dist-CBNvQRbZ.js";import{t as p}from"./button-DtZhoqpk.js";import"./dist-B6TkSbxV.js";import"./dist-BNO39Rfs.js";import"./dist-DhfcebhF.js";import"./dist-DKtC0FSi.js";import"./es2015-BJguufLZ.js";import"./dist-CA21wN5I.js";import"./dist-CYRPrwOb.js";import{n as m}from"./realtime-BmU1LPhx.js";var h=s(),g=t();function _(e){let t=(0,h.c)(2),{code:n}=e,r;return t[0]===n?r=t[1]:(r=(0,g.jsx)(`div`,{className:`flex-1 overflow-auto bg-muted`,children:(0,g.jsx)(`pre`,{className:`p-4 text-sm whitespace-pre-wrap break-words`,children:(0,g.jsx)(`code`,{className:`language-html`,children:n})})}),t[0]=n,t[1]=r),r}var v=s();function y(e){let t=(0,v.c)(2),{html:n}=e,r;return t[0]===n?r=t[1]:(r=(0,g.jsx)(`iframe`,{srcDoc:n,className:`w-full flex-1 border-0 bg-white`,title:`Email preview`,sandbox:`allow-same-origin allow-scripts`}),t[0]=n,t[1]=r),r}var b=s();function x(e){let t=(0,b.c)(37),{view:n,onViewChange:r}=e,{t:a,i18n:s}=o(),[m,h]=i(),_;t[0]!==s||t[1]!==h?(_=e=>{s.changeLanguage(e),h(t=>{let n=new URLSearchParams(t);return n.set(`lang`,e),n})},t[0]=s,t[1]=h,t[2]=_):_=t[2];let v=_,y=n===`preview`?`default`:`outline`,x;t[3]===r?x=t[4]:(x=()=>r(`preview`),t[3]=r,t[4]=x);let S;t[5]===a?S=t[6]:(S=a(`emails.toolbar.preview`),t[5]=a,t[6]=S);let C;t[7]!==y||t[8]!==x||t[9]!==S?(C=(0,g.jsx)(p,{variant:y,size:`sm`,onClick:x,children:S}),t[7]=y,t[8]=x,t[9]=S,t[10]=C):C=t[10];let w=n===`code`?`default`:`outline`,T;t[11]===r?T=t[12]:(T=()=>r(`code`),t[11]=r,t[12]=T);let E;t[13]===a?E=t[14]:(E=a(`emails.toolbar.code`),t[13]=a,t[14]=E);let D;t[15]!==w||t[16]!==T||t[17]!==E?(D=(0,g.jsx)(p,{variant:w,size:`sm`,onClick:T,children:E}),t[15]=w,t[16]=T,t[17]=E,t[18]=D):D=t[18];let O;t[19]!==C||t[20]!==D?(O=(0,g.jsxs)(`div`,{className:`flex gap-1`,children:[C,D]}),t[19]=C,t[20]=D,t[21]=O):O=t[21];let k;t[22]!==s.language||t[23]!==m?(k=m.get(`lang`)||s.language,t[22]=s.language,t[23]=m,t[24]=k):k=t[24];let A;t[25]===a?A=t[26]:(A=a(`emails.toolbar.selectLanguage`),t[25]=a,t[26]=A);let j;t[27]===A?j=t[28]:(j=(0,g.jsx)(l,{className:`w-[180px]`,children:(0,g.jsx)(c,{placeholder:A})}),t[27]=A,t[28]=j);let M;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,g.jsxs)(u,{children:[(0,g.jsx)(d,{value:`en`,children:`English`}),(0,g.jsx)(d,{value:`zh-CN`,children:`简体中文`}),(0,g.jsx)(d,{value:`zh-TW`,children:`繁體中文`})]}),t[29]=M):M=t[29];let N;t[30]!==v||t[31]!==k||t[32]!==j?(N=(0,g.jsx)(`div`,{className:`ml-auto`,children:(0,g.jsxs)(f,{value:k,onValueChange:v,children:[j,M]})}),t[30]=v,t[31]=k,t[32]=j,t[33]=N):N=t[33];let P;return t[34]!==O||t[35]!==N?(P=(0,g.jsxs)(`div`,{className:`flex items-center gap-2 p-2 border-b bg-background`,children:[O,N]}),t[34]=O,t[35]=N,t[36]=P):P=t[36],P}var S=s(),C=e();function w(e){let t=(0,S.c)(5),n=m(),r=a(),i,o;t[0]!==e||t[1]!==n||t[2]!==r?(i=()=>{let t=t=>{let{filename:n}=t;n===e&&r.revalidate()};return n.on(`email:changed`,t),()=>{n.off(`email:changed`,t)}},o=[e,n,r],t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=o):(i=t[3],o=t[4]),(0,C.useEffect)(i,o)}var T=s(),E=r(function(){let e=(0,T.c)(14),{rendered:t,filename:r}=n(),[a,o]=i(),s;e[0]===a?s=e[1]:(s=a.get(`view`)||`preview`,e[0]=a,e[1]=s);let c=s,l;e[2]===o?l=e[3]:(l=e=>{o(t=>{let n=new URLSearchParams(t);return n.set(`view`,e),n})},e[2]=o,e[3]=l);let u=l;w(r);let d;e[4]!==u||e[5]!==c?(d=(0,g.jsx)(x,{view:c,onViewChange:u}),e[4]=u,e[5]=c,e[6]=d):d=e[6];let f;e[7]!==t.html||e[8]!==t.prettyHtml||e[9]!==c?(f=c===`preview`?(0,g.jsx)(y,{html:t.html}):(0,g.jsx)(_,{code:t.prettyHtml}),e[7]=t.html,e[8]=t.prettyHtml,e[9]=c,e[10]=f):f=e[10];let p;return e[11]!==d||e[12]!==f?(p=(0,g.jsxs)(`div`,{className:`flex flex-col h-full`,children:[d,f]}),e[11]=d,e[12]=f,e[13]=p):p=e[13],p});export{E as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-SCjaiuzT.js";import{F as t}from"./chunk-UIGDSWPH-DeiamgQc.js";import{t as n}from"./useTranslation-Bz7VuQ7j.js";import"./initReactI18next-CyHiepAw.js";import"./shim-TRiHENXu.js";import{t as r}from"./compiler-runtime-Co9svCia.js";import"./utils-InBzhUf_.js";import"./dist-CBNvQRbZ.js";import{a as i,i as a,o,r as s,t as c}from"./empty-DQRarCKT.js";import"./createReactComponent-C2TSpqC7.js";import{t as l}from"./IconMail-BZadZvAd.js";var u=r(),d=e(),f=t(function(){let e=(0,u.c)(12),{t}=n(),r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,d.jsx)(i,{variant:`icon`,children:(0,d.jsx)(l,{className:`size-12`})}),e[0]=r):r=e[0];let f;e[1]===t?f=e[2]:(f=t(`emails.empty.title`),e[1]=t,e[2]=f);let p;e[3]===f?p=e[4]:(p=(0,d.jsx)(o,{children:f}),e[3]=f,e[4]=p);let m;e[5]===t?m=e[6]:(m=t(`emails.empty.description`),e[5]=t,e[6]=m);let h;e[7]===m?h=e[8]:(h=(0,d.jsx)(s,{children:m}),e[7]=m,e[8]=h);let g;return e[9]!==p||e[10]!==h?(g=(0,d.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,d.jsx)(c,{children:(0,d.jsxs)(a,{children:[r,p,h]})})}),e[9]=p,e[10]=h,e[11]=g):g=e[11],g});export{f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-SCjaiuzT.js";import{F as t,s as n}from"./chunk-UIGDSWPH-DeiamgQc.js";import{r}from"./chunk-JG3XND5A-BetDbdG0.js";import"./compiler-runtime-Co9svCia.js";import"./utils-InBzhUf_.js";import{n as i}from"./auth-provider-rkzBVtYX.js";import"./config-ChcA_Pkv.js";import{t as a}from"./brand-CbTWw97e.js";var o=e(),s=t(function(){let{client:e}=i(),{data:t}=e.useSession();return(0,o.jsx)(`div`,{className:`bg-muted flex min-h-screen flex-col items-center justify-center px-4 py-12`,children:(0,o.jsxs)(`div`,{className:`w-full max-w-[420px] space-y-6`,children:[(0,o.jsx)(`div`,{className:`flex justify-center`,children:(0,o.jsx)(a,{href:t?.user?r(`/home`):r(`/`),size:`lg`,showName:!0})}),(0,o.jsx)(n,{})]})})});export{s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./jsx-runtime-SCjaiuzT.js";import"./react-dom-Bhi-1tDD.js";import{D as n,F as r,O as i,r as a,s as o}from"./chunk-UIGDSWPH-DeiamgQc.js";import{t as s}from"./useTranslation-Bz7VuQ7j.js";import"./initReactI18next-CyHiepAw.js";import"./shim-TRiHENXu.js";import{t as c}from"./compiler-runtime-Co9svCia.js";import"./dist-BWnI-4xl.js";import{a as l,d as u,h as d,i as f,l as p,u as m}from"./sidebar-CqrdL512.js";import"./x-4CC8aqOW.js";import"./utils-InBzhUf_.js";import"./dist-CBNvQRbZ.js";import"./button-DtZhoqpk.js";import"./dist-B6TkSbxV.js";import"./dist-BNO39Rfs.js";import"./dist-DhfcebhF.js";import"./dist-VqaKdvZu.js";import"./es2015-BJguufLZ.js";import"./dist-Yn6lj8QC.js";import"./dist-CYRPrwOb.js";import"./separator-Cla0V581.js";import"./tooltip-BeDraHQn.js";import"./input-V1lM1yoz.js";var h=c(),g=e(),_=t(),v=r(function(){let e=(0,h.c)(8),{emails:t}=n(),r=i(),{t:c}=s(),{setSecondaryContent:v,setHasSecondaryContent:y}=d(),b,x;e[0]!==t||e[1]!==r.pathname||e[2]!==y||e[3]!==v||e[4]!==c?(b=()=>(y(!0),v((0,_.jsx)(f,{className:`px-0`,children:(0,_.jsx)(l,{children:(0,_.jsxs)(p,{children:[t.map(e=>(0,_.jsx)(u,{children:(0,_.jsx)(m,{asChild:!0,isActive:r.pathname===`/platform/emails/${e.slug}`,children:(0,_.jsx)(a,{to:`/platform/emails/${e.slug}`,children:(0,_.jsx)(`span`,{children:e.slug})})})},e.slug)),t.length===0&&(0,_.jsx)(`div`,{className:`px-3 py-2 text-sm text-muted-foreground`,children:c(`emails.noEmailsFound`)})]})})})),()=>{y(!1),v(void 0)}),x=[t,r.pathname,y,v,c],e[0]=t,e[1]=r.pathname,e[2]=y,e[3]=v,e[4]=c,e[5]=b,e[6]=x):(b=e[5],x=e[6]),(0,g.useEffect)(b,x);let S;return e[7]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,_.jsx)(o,{}),e[7]=S):S=e[7],S});export{v as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-SCjaiuzT.js";import"./react-dom-Bhi-1tDD.js";import{F as t,s as n}from"./chunk-UIGDSWPH-DeiamgQc.js";import"./chunk-JG3XND5A-BetDbdG0.js";import"./useTranslation-Bz7VuQ7j.js";import"./initReactI18next-CyHiepAw.js";import"./shim-TRiHENXu.js";import{t as r}from"./compiler-runtime-Co9svCia.js";import"./dist-BWnI-4xl.js";import{c as i,f as a}from"./sidebar-CqrdL512.js";import"./x-4CC8aqOW.js";import"./utils-InBzhUf_.js";import"./dist-CBNvQRbZ.js";import"./button-DtZhoqpk.js";import"./dist-B6TkSbxV.js";import"./dist-BNO39Rfs.js";import"./dist-DhfcebhF.js";import"./dist-DKtC0FSi.js";import"./dist-VqaKdvZu.js";import"./es2015-BJguufLZ.js";import"./dist-Yn6lj8QC.js";import"./nav-user-BqPUBe9x.js";import"./dist-CYRPrwOb.js";import"./dropdown-menu-CbzduuDa.js";import"./separator-Cla0V581.js";import"./tooltip-BeDraHQn.js";import"./auth-provider-rkzBVtYX.js";import"./config-ChcA_Pkv.js";import"./input-V1lM1yoz.js";import"./createReactComponent-C2TSpqC7.js";import{t as o}from"./app-sidebar-D2Nsi85j.js";import"./IconMail-BZadZvAd.js";import"./brand-CbTWw97e.js";import{t as s}from"./site-header-CZO3qBhf.js";var c=r(),l=e(),u=t(function(){let e=(0,c.c)(4),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={"--header-height":`calc(var(--spacing) * 12)`},e[0]=t):t=e[0];let r;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,l.jsx)(o,{variant:`inset`}),e[1]=r):r=e[1];let u;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,l.jsx)(s,{}),e[2]=u):u=e[2];let d;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,l.jsxs)(a,{style:t,children:[r,(0,l.jsxs)(i,{children:[u,(0,l.jsx)(`div`,{className:`flex flex-1 flex-col`,children:(0,l.jsx)(`div`,{className:`@container/main flex flex-1 flex-col gap-2 p-3 md:p-4`,children:(0,l.jsx)(n,{})})})]})]}),e[3]=d):d=e[3],d});export{u as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./jsx-runtime-SCjaiuzT.js";import"./react-dom-Bhi-1tDD.js";import"./chunk-UIGDSWPH-DeiamgQc.js";import"./chunk-JG3XND5A-BetDbdG0.js";import"./useTranslation-Bz7VuQ7j.js";import"./initReactI18next-CyHiepAw.js";import"./shim-TRiHENXu.js";import"./compiler-runtime-Co9svCia.js";import"./dist-BWnI-4xl.js";import"./sidebar-CqrdL512.js";import"./x-4CC8aqOW.js";import"./utils-InBzhUf_.js";import"./dist-CBNvQRbZ.js";import"./button-DtZhoqpk.js";import"./dist-B6TkSbxV.js";import"./dist-BNO39Rfs.js";import"./dist-DhfcebhF.js";import"./dist-DKtC0FSi.js";import"./dist-VqaKdvZu.js";import"./es2015-BJguufLZ.js";import"./dist-Yn6lj8QC.js";import"./nav-user-BqPUBe9x.js";import"./dist-CYRPrwOb.js";import"./dropdown-menu-CbzduuDa.js";import"./separator-Cla0V581.js";import"./tooltip-BeDraHQn.js";import"./auth-provider-rkzBVtYX.js";import"./config-ChcA_Pkv.js";import"./input-V1lM1yoz.js";import"./createReactComponent-C2TSpqC7.js";import"./app-sidebar-D2Nsi85j.js";import"./IconMail-BZadZvAd.js";import"./brand-CbTWw97e.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./jsx-runtime-SCjaiuzT.js";import{O as n,r}from"./chunk-UIGDSWPH-DeiamgQc.js";import{r as i}from"./chunk-JG3XND5A-BetDbdG0.js";import{t as a}from"./useTranslation-Bz7VuQ7j.js";import{a as o,d as s,h as c,i as l,l as u,n as d,o as f,p,r as m,s as h,t as g,u as _}from"./sidebar-CqrdL512.js";import{t as v}from"./utils-InBzhUf_.js";import{t as y}from"./nav-user-BqPUBe9x.js";import{n as b}from"./auth-provider-rkzBVtYX.js";import{t as x}from"./createReactComponent-C2TSpqC7.js";import{t as S}from"./IconMail-BZadZvAd.js";import{t as C}from"./brand-CbTWw97e.js";var w=x(`outline`,`bell`,`Bell`,[[`path`,{d:`M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6`,key:`svg-0`}],[`path`,{d:`M9 17v1a3 3 0 0 0 6 0v-1`,key:`svg-1`}]]),T=x(`outline`,`book`,`Book`,[[`path`,{d:`M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0`,key:`svg-0`}],[`path`,{d:`M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0`,key:`svg-1`}],[`path`,{d:`M3 6l0 13`,key:`svg-2`}],[`path`,{d:`M12 6l0 13`,key:`svg-3`}],[`path`,{d:`M21 6l0 13`,key:`svg-4`}]]),E=x(`outline`,`box`,`Box`,[[`path`,{d:`M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5`,key:`svg-0`}],[`path`,{d:`M12 12l8 -4.5`,key:`svg-1`}],[`path`,{d:`M12 12l0 9`,key:`svg-2`}],[`path`,{d:`M12 12l-8 -4.5`,key:`svg-3`}]]),D=x(`outline`,`building`,`Building`,[[`path`,{d:`M3 21l18 0`,key:`svg-0`}],[`path`,{d:`M9 8l1 0`,key:`svg-1`}],[`path`,{d:`M9 12l1 0`,key:`svg-2`}],[`path`,{d:`M9 16l1 0`,key:`svg-3`}],[`path`,{d:`M14 8l1 0`,key:`svg-4`}],[`path`,{d:`M14 12l1 0`,key:`svg-5`}],[`path`,{d:`M14 16l1 0`,key:`svg-6`}],[`path`,{d:`M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16`,key:`svg-7`}]]),O=x(`outline`,`currency-dollar`,`CurrencyDollar`,[[`path`,{d:`M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2`,key:`svg-0`}],[`path`,{d:`M12 3v3m0 12v3`,key:`svg-1`}]]),k=x(`outline`,`dashboard`,`Dashboard`,[[`path`,{d:`M12 13m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0`,key:`svg-0`}],[`path`,{d:`M13.45 11.55l2.05 -2.05`,key:`svg-1`}],[`path`,{d:`M6.4 20a9 9 0 1 1 11.2 0z`,key:`svg-2`}]]),A=x(`outline`,`folder`,`Folder`,[[`path`,{d:`M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2`,key:`svg-0`}]]),j=x(`outline`,`help`,`Help`,[[`path`,{d:`M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0`,key:`svg-0`}],[`path`,{d:`M12 17l0 .01`,key:`svg-1`}],[`path`,{d:`M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4`,key:`svg-2`}]]),M=x(`outline`,`home`,`Home`,[[`path`,{d:`M5 12l-2 0l9 -9l9 9l-2 0`,key:`svg-0`}],[`path`,{d:`M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7`,key:`svg-1`}],[`path`,{d:`M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6`,key:`svg-2`}]]),N=x(`outline`,`inbox`,`Inbox`,[[`path`,{d:`M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z`,key:`svg-0`}],[`path`,{d:`M4 13h3l3 3h4l3 -3h3`,key:`svg-1`}]]),P=x(`outline`,`layout-kanban`,`LayoutKanban`,[[`path`,{d:`M4 4l6 0`,key:`svg-0`}],[`path`,{d:`M14 4l6 0`,key:`svg-1`}],[`path`,{d:`M4 8m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z`,key:`svg-2`}],[`path`,{d:`M14 8m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z`,key:`svg-3`}]]),F=x(`outline`,`lock`,`Lock`,[[`path`,{d:`M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z`,key:`svg-0`}],[`path`,{d:`M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0`,key:`svg-1`}],[`path`,{d:`M8 11v-4a4 4 0 1 1 8 0v4`,key:`svg-2`}]]),I=x(`outline`,`users`,`Users`,[[`path`,{d:`M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0`,key:`svg-0`}],[`path`,{d:`M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2`,key:`svg-1`}],[`path`,{d:`M16 3.13a4 4 0 0 1 0 7.75`,key:`svg-2`}],[`path`,{d:`M21 21v-2a4 4 0 0 0 -3 -3.85`,key:`svg-3`}]]),L=x(`outline`,`world`,`World`,[[`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0`,key:`svg-0`}],[`path`,{d:`M3.6 9h16.8`,key:`svg-1`}],[`path`,{d:`M3.6 15h16.8`,key:`svg-2`}],[`path`,{d:`M11.5 3a17 17 0 0 0 0 18`,key:`svg-3`}],[`path`,{d:`M12.5 3a17 17 0 0 1 0 18`,key:`svg-4`}]]),R=e(),z=t();function B({...e}){let t=n(),{client:x}=b(),{data:B}=x.useSession(),{t:V}=a(),{hasSecondaryContent:H,secondaryContent:U,setHasSecondaryContent:W,setOpenMobile:G,setSecondaryContent:K}=c(),q=[{title:V(`sidebar.nav.home`),url:i(`/home`),icon:M},{title:V(`sidebar.nav.inbox`),url:i(`/inbox`),icon:N},{title:V(`sidebar.nav.board`),url:i(`/board`),icon:P}],J=[{title:V(`sidebar.platform.auth`),url:i(`/platform/auth`),icon:F,secondaryNav:[{items:[{title:V(`sidebar.platform.authSecondary.overview`),url:i(`/platform/auth/overview`),icon:k},{title:V(`sidebar.platform.authSecondary.organizations`),url:i(`/platform/auth/organizations`),icon:D},{title:V(`sidebar.platform.authSecondary.users`),url:i(`/platform/auth/users`),icon:I}]},{label:V(`sidebar.platform.authSecondary.configuration`),items:[{title:V(`sidebar.platform.authSecondary.authentication`),url:i(`/platform/auth/authentication`),icon:E}]}]},{title:V(`sidebar.platform.billing`),url:i(`/platform/billing`),icon:O,secondaryNav:[]},{title:V(`sidebar.platform.docs`),url:i(`/platform/docs`),icon:T,secondaryNav:[]},{title:V(`sidebar.platform.emails`),url:i(`/platform/emails`),icon:S,secondaryNav:[]},{title:V(`sidebar.platform.notifications`),url:i(`/platform/notifications`),icon:w,secondaryNav:[]},{title:V(`sidebar.platform.site`),url:i(`/platform/site`),icon:L,secondaryNav:[]},{title:V(`sidebar.platform.storage`),url:i(`/platform/storage`),icon:A}],Y=[{title:V(`sidebar.secondary.help`),url:i(`/help`),icon:j}],X=[...q,...J,...Y].find(e=>t.pathname.startsWith(e.url));return(0,R.useEffect)(()=>{let e=J.find(e=>t.pathname.startsWith(e.url)&&e.secondaryNav);if(!e?.secondaryNav){W(!1),K(void 0);return}W(!0),K(e.secondaryNav.map((e,n)=>(0,z.jsxs)(l,{className:`px-0`,children:[e.label&&(0,z.jsx)(f,{className:`px-3 text-xs`,children:e.label}),(0,z.jsx)(o,{children:(0,z.jsx)(u,{children:e.items.map(e=>(0,z.jsx)(s,{children:(0,z.jsx)(_,{asChild:!0,isActive:t.pathname===e.url,children:(0,z.jsxs)(r,{to:e.url,onClick:()=>G(!1),children:[(0,z.jsx)(e.icon,{}),(0,z.jsx)(`span`,{children:e.title})]})})},e.title))})})]},n.toString())))},[t.pathname,W,K]),(0,z.jsxs)(g,{collapsible:`icon`,className:`overflow-hidden *:data-[sidebar=sidebar]:flex-row p-0 pr-px`,...e,children:[(0,z.jsxs)(g,{collapsible:`none`,className:v(`w-[calc(var(--sidebar-width-icon)+1px)]! border-r bg-background overflow-hidden`),children:[(0,z.jsx)(h,{className:`pt-4 pb-1`,children:(0,z.jsx)(C,{className:`ml-1`,showName:!1,size:`sm`,href:i(`/`)})}),(0,z.jsxs)(d,{children:[(0,z.jsx)(l,{children:(0,z.jsx)(o,{className:`px-0`,children:(0,z.jsx)(u,{children:q.map(e=>(0,z.jsx)(s,{children:(0,z.jsx)(_,{asChild:!0,className:`px-2`,isActive:t.pathname.startsWith(e.url),tooltip:{children:e.title,hidden:!1},children:(0,z.jsxs)(r,{to:e.url,onClick:()=>G(!1),children:[(0,z.jsx)(e.icon,{}),(0,z.jsx)(`span`,{className:`sr-only`,children:e.title})]})})},e.title))})})}),(0,z.jsx)(p,{className:`-ml-px`}),(0,z.jsx)(l,{children:(0,z.jsx)(o,{className:`px-0`,children:(0,z.jsx)(u,{children:J.map(e=>(0,z.jsx)(s,{children:(0,z.jsx)(_,{asChild:!0,tooltip:{children:e.title,hidden:!1},isActive:t.pathname.startsWith(e.url),className:`px-2`,children:(0,z.jsxs)(r,{to:e.url,children:[(0,z.jsx)(e.icon,{}),(0,z.jsx)(`span`,{className:`sr-only`,children:e.title})]})})},e.title))})})}),(0,z.jsx)(l,{className:`mt-auto`,children:(0,z.jsx)(o,{className:`px-0`,children:(0,z.jsx)(u,{children:Y.map(e=>(0,z.jsx)(s,{children:(0,z.jsx)(_,{asChild:!0,tooltip:{children:e.title,hidden:!1},isActive:t.pathname.startsWith(e.url),className:`px-2`,children:(0,z.jsxs)(r,{to:e.url,onClick:()=>G(!1),children:[(0,z.jsx)(e.icon,{}),(0,z.jsx)(`span`,{className:`sr-only`,children:e.title})]})})},e.title))})})})]}),(0,z.jsx)(m,{children:B?.user&&(0,z.jsx)(y,{user:B.user})})]}),H&&(0,z.jsxs)(g,{collapsible:`none`,className:`fill-mode-both flex-1 h-auto m-2 bg-background shadow-md rounded-lg animate-in fade-in slide-in-from-bottom-4 duration-300 delay-200`,children:[(0,z.jsx)(h,{className:`border-b p-3.25`,children:(0,z.jsx)(`div`,{className:`flex w-full items-center justify-between`,children:(0,z.jsxs)(`div`,{className:`flex flex-row gap-1.25 text-foreground text-[0.875rem] font-medium`,children:[X?.icon&&(0,z.jsx)(X.icon,{className:`size-5`}),X?.title]})})}),(0,z.jsx)(d,{className:`px-2`,children:U})]})]})}export{B as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./jsx-runtime-SCjaiuzT.js";import{t as n}from"./compiler-runtime-Co9svCia.js";import{t as r}from"./config-ChcA_Pkv.js";var i=()=>({id:`sso-client`,$InferServerPlugin:{}}),a=Object.create(null),o=e=>({}),s=new Proxy(a,{get(e,t){return o()[t]??a[t]},has(e,t){return t in o()||t in a},set(e,t,n){let r=o(!0);return r[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=o(!0);return delete n[t],!0},ownKeys(){let e=o(!0);return Object.keys(e)}});function c(e,t){return typeof process<`u`?{}[e]??t:typeof Deno<`u`?Deno.env.get(e)??t:typeof Bun<`u`?Bun.env[e]??t:t}Object.freeze({get BETTER_AUTH_SECRET(){return c(`BETTER_AUTH_SECRET`)},get AUTH_SECRET(){return c(`AUTH_SECRET`)},get BETTER_AUTH_TELEMETRY(){return c(`BETTER_AUTH_TELEMETRY`)},get BETTER_AUTH_TELEMETRY_ID(){return c(`BETTER_AUTH_TELEMETRY_ID`)},get NODE_ENV(){return c(`NODE_ENV`,`development`)},get PACKAGE_VERSION(){return c(`PACKAGE_VERSION`,`0.0.0`)},get BETTER_AUTH_TELEMETRY_ENDPOINT(){return c(`BETTER_AUTH_TELEMETRY_ENDPOINT`,`https://telemetry.better-auth.com/v1/track`)}});var l=1,u=4,d=8,f=24,p={eterm:u,cons25:u,console:u,cygwin:u,dtterm:u,gnome:u,hurd:u,jfbterm:u,konsole:u,kterm:u,mlterm:u,mosh:f,putty:u,st:u,"rxvt-unicode-24bit":f,terminator:f,"xterm-kitty":f},m=new Map(Object.entries({APPVEYOR:d,BUILDKITE:d,CIRCLECI:f,DRONE:d,GITEA_ACTIONS:f,GITHUB_ACTIONS:f,GITLAB_CI:d,TRAVIS:d})),h=[/ansi/,/color/,/linux/,/direct/,/^con[0-9]*x[0-9]/,/^rxvt/,/^screen/,/^xterm/,/^vt100/,/^vt220/];function g(){if(c(`FORCE_COLOR`)!==void 0)switch(c(`FORCE_COLOR`)){case``:case`1`:case`true`:return u;case`2`:return d;case`3`:return f;default:return l}if(c(`NODE_DISABLE_COLORS`)!==void 0&&c(`NODE_DISABLE_COLORS`)!==``||c(`NO_COLOR`)!==void 0&&c(`NO_COLOR`)!==``||c(`TERM`)===`dumb`)return l;if(c(`TMUX`))return f;if(`TF_BUILD`in s&&`AGENT_NAME`in s)return u;if(`CI`in s){for(let{0:e,1:t}of m)if(e in s)return t;return c(`CI_NAME`)===`codeship`?d:l}if(`TEAMCITY_VERSION`in s)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.exec(c(`TEAMCITY_VERSION`))===null?l:u;switch(c(`TERM_PROGRAM`)){case`iTerm.app`:return!c(`TERM_PROGRAM_VERSION`)||/^[0-2]\./.exec(c(`TERM_PROGRAM_VERSION`))!==null?d:f;case`HyperTerm`:case`MacTerm`:return f;case`Apple_Terminal`:return d}if(c(`COLORTERM`)===`truecolor`||c(`COLORTERM`)===`24bit`)return f;if(c(`TERM`)){if(/truecolor/.exec(c(`TERM`))!==null)return f;if(/^xterm-256/.exec(c(`TERM`))!==null)return d;let e=c(`TERM`).toLowerCase();if(p[e])return p[e];if(h.some(t=>t.exec(e)!==null))return u}return c(`COLORTERM`)?u:l}var _={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,undim:`\x1B[22m`,underscore:`\x1B[4m`,blink:`\x1B[5m`,reverse:`\x1B[7m`,hidden:`\x1B[8m`,fg:{black:`\x1B[30m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`},bg:{black:`\x1B[40m`,red:`\x1B[41m`,green:`\x1B[42m`,yellow:`\x1B[43m`,blue:`\x1B[44m`,magenta:`\x1B[45m`,cyan:`\x1B[46m`,white:`\x1B[47m`}},v=[`info`,`success`,`warn`,`error`,`debug`];function y(e,t){return v.indexOf(t)<=v.indexOf(e)}var b={info:_.fg.blue,success:_.fg.green,warn:_.fg.yellow,error:_.fg.red,debug:_.fg.magenta},ee=(e,t,n)=>{let r=new Date().toISOString();return n?`${_.dim}${r}${_.reset} ${b[e]}${e.toUpperCase()}${_.reset} ${_.bright}[Better Auth]:${_.reset} ${t}`:`${r} ${e.toUpperCase()} [Better Auth]: ${t}`};(e=>{let t=e?.disabled!==!0,n=e?.level??`error`,r=e?.disableColors===void 0?g()!==1:!e.disableColors,i=(i,a,o=[])=>{if(!t||!y(n,i))return;let s=ee(i,a,r);if(!e||typeof e.log!=`function`){i===`error`?console.error(s,...o):i===`warn`?console.warn(s,...o):console.log(s,...o);return}e.log(i===`success`?`info`:i,a,...o)};return{...Object.fromEntries(v.map(e=>[e,(...[t,...n])=>i(e,t,n)])),get level(){return n}}})();var x=class extends Error{constructor(e,t){super(e),this.name=`BetterAuthError`,this.message=e,this.cause=t,this.stack=``}};function te(e){try{return(new URL(e).pathname.replace(/\/+$/,``)||`/`)!==`/`}catch{throw new x(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function ne(e){try{let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw new x(`Invalid base URL: ${e}. URL must include 'http://' or 'https://'`)}catch(t){throw t instanceof x?t:new x(`Invalid base URL: ${e}. Please provide a valid base URL.`,String(t))}}function S(e,t=`/api/auth`){if(ne(e),te(e))return e;let n=e.replace(/\/+$/,``);return!t||t===`/`?n:(t=t.startsWith(`/`)?t:`/${t}`,`${n}${t}`)}function re(e,t,n,r){if(e)return S(e,t);if(r!==!1){let e=s.BETTER_AUTH_URL||s.NEXT_PUBLIC_BETTER_AUTH_URL||s.PUBLIC_BETTER_AUTH_URL||s.NUXT_PUBLIC_BETTER_AUTH_URL||s.NUXT_PUBLIC_AUTH_URL||(s.BASE_URL===`/`?void 0:s.BASE_URL);if(e)return S(e,t)}let i=n?.headers.get(`x-forwarded-host`),a=n?.headers.get(`x-forwarded-proto`);if(i&&a)return S(`${a}://${i}`,t);if(n){let e=ie(n.url);if(!e)throw new x(`Could not get origin from request. Please provide a valid base URL.`);return S(e,t)}if(typeof window<`u`&&window.location)return S(window.location.origin,t)}function ie(e){try{let t=new URL(e);return t.origin===`null`?null:t.origin}catch{return null}}var ae={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},oe=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,C={true:!0,false:!1,null:null,undefined:void 0,nan:NaN,infinity:1/0,"-infinity":-1/0},se=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function ce(e){return e instanceof Date&&!isNaN(e.getTime())}function le(e){let t=se.exec(e);if(!t)return null;let[,n,r,i,a,o,s,c,l,u,d]=t,f=new Date(Date.UTC(parseInt(n,10),parseInt(r,10)-1,parseInt(i,10),parseInt(a,10),parseInt(o,10),parseInt(s,10),c?parseInt(c.padEnd(3,`0`),10):0));if(l){let e=(parseInt(u,10)*60+parseInt(d,10))*(l===`+`?-1:1);f.setUTCMinutes(f.getUTCMinutes()+e)}return ce(f)?f:null}function ue(e,t={}){let{strict:n=!1,warnings:r=!1,reviver:i,parseDates:a=!0}=t;if(typeof e!=`string`)return e;let o=e.trim();if(o.length>0&&o[0]===`"`&&o.endsWith(`"`)&&!o.slice(1,-1).includes(`"`))return o.slice(1,-1);let s=o.toLowerCase();if(s.length<=9&&s in C)return C[s];if(!oe.test(o)){if(n)throw SyntaxError(`[better-json] Invalid JSON`);return e}if(Object.entries(ae).some(([e,t])=>{let n=t.test(o);return n&&r&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${e} pattern`),n})&&n)throw Error(`[better-json] Potential prototype pollution attempt detected`);try{return JSON.parse(o,(e,t)=>{if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){r&&console.warn(`[better-json] Dropping "${e}" key to prevent prototype pollution`);return}if(a&&typeof t==`string`){let e=le(t);if(e)return e}return i?i(e,t):t})}catch(t){if(n)throw t;return e}}function de(e,t={strict:!0}){return ue(e,t)}var fe=Object.defineProperty,pe=Object.defineProperties,me=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,he=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,T=(e,t,n)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||={})he.call(t,n)&&T(e,n,t[n]);if(w)for(var n of w(t))ge.call(t,n)&&T(e,n,t[n]);return e},D=(e,t)=>pe(e,me(t)),_e=class extends Error{constructor(e,t,n){super(t||e.toString(),{cause:n}),this.status=e,this.statusText=t,this.error=n}},ve=async(e,t)=>{let n=t||{},r={onRequest:[t?.onRequest],onResponse:[t?.onResponse],onSuccess:[t?.onSuccess],onError:[t?.onError],onRetry:[t?.onRetry]};if(!t||!t?.plugins)return{url:e,options:n,hooks:r};for(let i of t?.plugins||[]){if(i.init){let r=await i.init?.call(i,e.toString(),t);n=r.options||n,e=r.url}r.onRequest.push(i.hooks?.onRequest),r.onResponse.push(i.hooks?.onResponse),r.onSuccess.push(i.hooks?.onSuccess),r.onError.push(i.hooks?.onError),r.onRetry.push(i.hooks?.onRetry)}return{url:e,options:n,hooks:r}},O=class{constructor(e){this.options=e}shouldAttemptRetry(e,t){return this.options.shouldRetry?Promise.resolve(e<this.options.attempts&&this.options.shouldRetry(t)):Promise.resolve(e<this.options.attempts)}getDelay(){return this.options.delay}},ye=class{constructor(e){this.options=e}shouldAttemptRetry(e,t){return this.options.shouldRetry?Promise.resolve(e<this.options.attempts&&this.options.shouldRetry(t)):Promise.resolve(e<this.options.attempts)}getDelay(e){return Math.min(this.options.maxDelay,this.options.baseDelay*2**e)}};function be(e){if(typeof e==`number`)return new O({type:`linear`,attempts:e,delay:1e3});switch(e.type){case`linear`:return new O(e);case`exponential`:return new ye(e);default:throw Error(`Invalid retry strategy`)}}var xe=async e=>{let t={},n=async e=>typeof e==`function`?await e():e;if(e?.auth){if(e.auth.type===`Bearer`){let r=await n(e.auth.token);if(!r)return t;t.authorization=`Bearer ${r}`}else if(e.auth.type===`Basic`){let r=n(e.auth.username),i=n(e.auth.password);if(!r||!i)return t;t.authorization=`Basic ${btoa(`${r}:${i}`)}`}else if(e.auth.type===`Custom`){let r=n(e.auth.value);if(!r)return t;t.authorization=`${n(e.auth.prefix)} ${r}`}}return t},Se=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function Ce(e){let t=e.headers.get(`content-type`),n=new Set([`image/svg`,`application/xml`,`application/xhtml`,`application/html`]);if(!t)return`json`;let r=t.split(`;`).shift()||``;return Se.test(r)?`json`:n.has(r)||r.startsWith(`text/`)?`text`:`blob`}function we(e){try{return JSON.parse(e),!0}catch{return!1}}function Te(e){if(e===void 0)return!1;let t=typeof e;return t===`string`||t===`number`||t===`boolean`||t===null?!0:t===`object`?Array.isArray(e)?!0:e.buffer?!1:e.constructor&&e.constructor.name===`Object`||typeof e.toJSON==`function`:!1}function Ee(e){try{return JSON.parse(e)}catch{return e}}function k(e){return typeof e==`function`}function De(e){if(e?.customFetchImpl)return e.customFetchImpl;if(typeof globalThis<`u`&&k(globalThis.fetch))return globalThis.fetch;if(typeof window<`u`&&k(window.fetch))return window.fetch;throw Error(`No fetch implementation found`)}async function Oe(e){let t=new Headers(e?.headers),n=await xe(e);for(let[e,r]of Object.entries(n||{}))t.set(e,r);if(!t.has(`content-type`)){let n=ke(e?.body);n&&t.set(`content-type`,n)}return t}function ke(e){return Te(e)?`application/json`:null}function Ae(e){if(!e?.body)return null;let t=new Headers(e?.headers);if(Te(e.body)&&!t.has(`content-type`)){for(let[t,n]of Object.entries(e?.body))n instanceof Date&&(e.body[t]=n.toISOString());return JSON.stringify(e.body)}return e.body}function je(e,t){if(t?.method)return t.method.toUpperCase();if(e.startsWith(`@`)){let n=e.split(`@`)[1]?.split(`/`)[0];return j.includes(n)?n.toUpperCase():t?.body?`POST`:`GET`}return t?.body?`POST`:`GET`}function Me(e,t){let n;return!e?.signal&&e?.timeout&&(n=setTimeout(()=>t?.abort(),e?.timeout)),{abortTimeout:n,clearTimeout:()=>{n&&clearTimeout(n)}}}var Ne=class e extends Error{constructor(t,n){super(n||JSON.stringify(t,null,2)),this.issues=t,Object.setPrototypeOf(this,e.prototype)}};async function A(e,t){let n=await e[`~standard`].validate(t);if(n.issues)throw new Ne(n.issues);return n.value}var j=[`get`,`post`,`put`,`patch`,`delete`],Pe=e=>({id:`apply-schema`,name:`Apply Schema`,version:`1.0.0`,async init(t,n){let r=e.plugins?.find(e=>e.schema?.config?t.startsWith(e.schema.config.baseURL||``)||t.startsWith(e.schema.config.prefix||``):!1)?.schema||e.schema;if(r){let e=t;r.config?.prefix&&e.startsWith(r.config.prefix)&&(e=e.replace(r.config.prefix,``),r.config.baseURL&&(t=t.replace(r.config.prefix,r.config.baseURL))),r.config?.baseURL&&e.startsWith(r.config.baseURL)&&(e=e.replace(r.config.baseURL,``));let i=r.schema[e];if(i){let e=D(E({},n),{method:i.method,output:i.output});return n?.disableValidation||(e=D(E({},e),{body:i.input?await A(i.input,n?.body):n?.body,params:i.params?await A(i.params,n?.params):n?.params,query:i.query?await A(i.query,n?.query):n?.query})),{url:t,options:e}}}return{url:t,options:n}}}),Fe=e=>{async function t(t,n){let r=D(E(E({},e),n),{plugins:[...e?.plugins||[],Pe(e||{})]});if(e?.catchAllError)try{return await M(t,r)}catch(e){return{data:null,error:{status:500,statusText:`Fetch Error`,message:`Fetch related error. Captured by catchAllError option. See error property for more details.`,error:e}}}return await M(t,r)}return t};function Ie(e,t){let{baseURL:n,params:r,query:i}=t||{query:{},params:{},baseURL:``},a=e.startsWith(`http`)?e.split(`/`).slice(0,3).join(`/`):n||``;if(e.startsWith(`@`)){let t=e.toString().split(`@`)[1].split(`/`)[0];j.includes(t)&&(e=e.replace(`@${t}/`,`/`))}a.endsWith(`/`)||(a+=`/`);let[o,s]=e.replace(a,``).split(`?`),c=new URLSearchParams(s);for(let[e,t]of Object.entries(i||{}))t!=null&&c.set(e,String(t));if(r)if(Array.isArray(r)){let e=o.split(`/`).filter(e=>e.startsWith(`:`));for(let[t,n]of e.entries()){let e=r[t];o=o.replace(n,e)}}else for(let[e,t]of Object.entries(r))o=o.replace(`:${e}`,String(t));o=o.split(`/`).map(encodeURIComponent).join(`/`),o.startsWith(`/`)&&(o=o.slice(1));let l=c.toString();return l=l.length>0?`?${l}`.replace(/\+/g,`%20`):``,a.startsWith(`http`)?new URL(`${o}${l}`,a):`${a}${o}${l}`}var M=async(e,t)=>{let{hooks:n,url:r,options:i}=await ve(e,t),a=De(i),o=new AbortController,s=i.signal??o.signal,c=Ie(r,i),l=Ae(i),u=await Oe(i),d=je(r,i),f=D(E({},i),{url:c,headers:u,body:l,method:d,signal:s});for(let e of n.onRequest)if(e){let t=await e(f);t instanceof Object&&(f=t)}(`pipeTo`in f&&typeof f.pipeTo==`function`||typeof t?.body?.pipe==`function`)&&(`duplex`in f||(f.duplex=`half`));let{clearTimeout:p}=Me(i,o),m=await a(f.url,f);p();let h={response:m,request:f};for(let e of n.onResponse)if(e){let n=await e(D(E({},h),{response:t?.hookOptions?.cloneResponse?m.clone():m}));n instanceof Response?m=n:n instanceof Object&&(m=n.response)}if(m.ok){if(f.method===`HEAD`)return{data:``,error:null};let e=Ce(m),r={data:``,response:m,request:f};if(e===`json`||e===`text`){let e=await m.text();r.data=await(f.jsonParser??Ee)(e)}else r.data=await m[e]();f?.output&&f.output&&!f.disableValidation&&(r.data=await A(f.output,r.data));for(let e of n.onSuccess)e&&await e(D(E({},r),{response:t?.hookOptions?.cloneResponse?m.clone():m}));return t?.throw?r.data:{data:r.data,error:null}}let g=t?.jsonParser??Ee,_=await m.text(),v=we(_),y=v?await g(_):null,b={response:m,responseText:_,request:f,error:D(E({},y),{status:m.status,statusText:m.statusText})};for(let e of n.onError)e&&await e(D(E({},b),{response:t?.hookOptions?.cloneResponse?m.clone():m}));if(t?.retry){let r=be(t.retry),i=t.retryAttempt??0;if(await r.shouldAttemptRetry(i,m)){for(let e of n.onRetry)e&&await e(h);let a=r.getDelay(i);return await new Promise(e=>setTimeout(e,a)),await M(e,D(E({},t),{retryAttempt:i+1}))}}if(t?.throw)throw new _e(m.status,m.statusText,v?y:_);return{data:null,error:D(E({},y),{status:m.status,statusText:m.statusText})}},N=[],P=0,F=4;let Le=0,I=e=>{let t=[],n={get(){return n.lc||n.listen(()=>{})(),n.value},lc:0,listen(e){return n.lc=t.push(e),()=>{for(let t=P+F;t<N.length;)N[t]===e?N.splice(t,F):t+=F;let r=t.indexOf(e);~r&&(t.splice(r,1),--n.lc||n.off())}},notify(e,r){Le++;let i=!N.length;for(let i of t)N.push(i,n.value,e,r);if(i){for(P=0;P<N.length;P+=F)N[P](N[P+1],N[P+2],N[P+3]);N.length=0}},off(){},set(e){let t=n.value;t!==e&&(n.value=e,n.notify(t))},subscribe(e){let t=n.listen(e);return e(n.value),t},value:e};return n};var Re=5,L=6,R=10;let ze=(e,t,n,r)=>(e.events=e.events||{},e.events[n+R]||(e.events[n+R]=r(t=>{e.events[n].reduceRight((e,t)=>(t(e),e),{shared:{},...t})})),e.events[n]=e.events[n]||[],e.events[n].push(t),()=>{let r=e.events[n],i=r.indexOf(t);r.splice(i,1),r.length||(delete e.events[n],e.events[n+R](),delete e.events[n+R])}),z=(e,t)=>ze(e,n=>{let r=t(n);r&&e.events[L].push(r)},Re,t=>{let n=e.listen;e.listen=(...r)=>(!e.lc&&!e.active&&(e.active=!0,t()),n(...r));let r=e.off;return e.events[L]=[],e.off=()=>{r(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let t of e.events[L])t();e.events[L]=[]}},1e3)},()=>{e.listen=n,e.off=r}});function Be(e,t,n){let r=new Set(t).add(void 0);return e.listen((e,t,i)=>{r.has(i)&&n(e,t,i)})}var Ve=()=>Math.floor(Date.now()/1e3);function He(e=`better-auth.message`){return{receive(t){let n=n=>{if(n.key!==e)return;let r=JSON.parse(n.newValue??`{}`);r?.event!==`session`||!r?.data||t(r)};return window.addEventListener(`storage`,n),()=>window.removeEventListener(`storage`,n)},post(t){if(!(typeof window>`u`))try{localStorage.setItem(e,JSON.stringify({...t,timestamp:Ve()}))}catch{}}}}var Ue=()=>typeof window>`u`,B=(e,t,n,r)=>{let i=I({data:null,error:null,isPending:!0,isRefetching:!1,refetch:e=>a(e)}),a=e=>{let a=typeof r==`function`?r({data:i.get().data,error:i.get().error,isPending:i.get().isPending}):r;n(t,{...a,query:{...a?.query,...e?.query},async onSuccess(e){i.set({data:e.data,error:null,isPending:!1,isRefetching:!1,refetch:i.value.refetch}),await a?.onSuccess?.(e)},async onError(e){let{request:t}=e,n=typeof t.retry==`number`?t.retry:t.retry?.attempts,r=t.retryAttempt||0;n&&r<n||(i.set({error:e.error,data:null,isPending:!1,isRefetching:!1,refetch:i.value.refetch}),await a?.onError?.(e))},async onRequest(e){let t=i.get();i.set({isPending:t.data===null,data:t.data,error:null,isRefetching:!0,refetch:i.value.refetch}),await a?.onRequest?.(e)}}).catch(e=>{i.set({error:e,data:null,isPending:!1,isRefetching:!1,refetch:i.value.refetch})})};e=Array.isArray(e)?e:[e];let o=!1;for(let t of e)t.subscribe(()=>{Ue()||(o?a():z(i,()=>{let e=setTimeout(()=>{o||=(a(),!0)},0);return()=>{i.off(),t.off(),clearTimeout(e)}}))});return i},V=()=>Math.floor(Date.now()/1e3);function We(e){let{sessionAtom:t,sessionSignal:n,options:r={}}=e,{refetchInterval:i=0,refetchOnWindowFocus:a=!0,refetchWhenOffline:o=!1}=r?.sessionOptions||{},s={lastSync:0,cachedSession:void 0},c=typeof navigator<`u`?navigator.onLine:!0,l=He(),u=()=>typeof window>`u`?!1:o||c,d=e=>{if(!u())return;if(e?.event===`storage`){s.lastSync=V(),n.set(!n.get());return}let r=t.get();(r?.data===null||r?.data===void 0||e?.event===`poll`||e?.event===`visibilitychange`)&&(s.lastSync=V(),n.set(!n.get()))},f=e=>{l.post({event:`session`,data:{trigger:e},clientId:Math.random().toString(36).substring(7)})},p=()=>{i&&i>0&&(s.pollInterval=setInterval(()=>{t.get()?.data&&d({event:`poll`})},i*1e3))},m=()=>{s.unsubscribeBroadcast=l.receive(()=>{d({event:`storage`})})},h=()=>{if(!a||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&d({event:`visibilitychange`})};document.addEventListener(`visibilitychange`,e,!1),s.unsubscribeVisibility=()=>{document.removeEventListener(`visibilitychange`,e,!1)}},g=()=>{if(typeof window>`u`)return;let e=()=>{c=!0,d({event:`visibilitychange`})},t=()=>{c=!1};window.addEventListener(`online`,e),window.addEventListener(`offline`,t),s.unsubscribeOnline=()=>window.removeEventListener(`online`,e),s.unsubscribeOffline=()=>window.removeEventListener(`offline`,t)};return{init:()=>{typeof window>`u`||(p(),m(),h(),g())},cleanup:()=>{s.pollInterval&&=(clearInterval(s.pollInterval),void 0),s.unsubscribeBroadcast&&=(s.unsubscribeBroadcast(),void 0),s.unsubscribeVisibility&&=(s.unsubscribeVisibility(),void 0),s.unsubscribeOnline&&=(s.unsubscribeOnline(),void 0),s.unsubscribeOffline&&=(s.unsubscribeOffline(),void 0),s.lastSync=0,s.cachedSession=void 0},triggerRefetch:d,broadcastSessionUpdate:f}}var Ge={id:`redirect`,name:`Redirect`,hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<`u`&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}},Ke={id:`user-agent`,name:`UserAgent`,hooks:{onRequest(e){e.headers.append(`user-agent`,`better-auth`)}}};function qe(e,t){let n=I(!1),r=B(n,`/get-session`,e,{method:`GET`});return typeof window<`u`&&z(r,()=>{let i=We({sessionAtom:r,sessionSignal:n,$fetch:e,options:t});return i.init(),()=>{i.cleanup()}}),{session:r,$sessionSignal:n}}var Je=(e,t)=>{let n=`credentials`in Request.prototype,r=re(e?.baseURL,e?.basePath,void 0,t)??`/api/auth`,i=e?.plugins?.flatMap(e=>e.fetchPlugins).filter(e=>e!==void 0)||[],a={id:`lifecycle-hooks`,name:`lifecycle-hooks`,hooks:{onSuccess:e?.fetchOptions?.onSuccess,onError:e?.fetchOptions?.onError,onRequest:e?.fetchOptions?.onRequest,onResponse:e?.fetchOptions?.onResponse}},{onSuccess:o,onError:s,onRequest:c,onResponse:l,...u}=e?.fetchOptions||{},d=Fe({baseURL:r,...n?{credentials:`include`}:{},method:`GET`,jsonParser(e){return e?de(e,{strict:!1}):null},customFetchImpl:fetch,...u,plugins:[a,Ke,...u.plugins||[],...e?.disableDefaultFetchPlugins?[]:[Ge],...i]}),{$sessionSignal:f,session:p}=qe(d,e),m=e?.plugins||[],h={},g={$sessionSignal:f,session:p},_={"/sign-out":`POST`,"/revoke-sessions":`POST`,"/revoke-other-sessions":`POST`,"/delete-user":`POST`},v=[{signal:`$sessionSignal`,matcher(e){return e===`/sign-out`||e===`/update-user`||e===`/sign-up/email`||e===`/sign-in/email`||e===`/delete-user`||e===`/verify-email`||e===`/revoke-sessions`||e===`/revoke-session`}}];for(let e of m)e.getAtoms&&Object.assign(g,e.getAtoms?.(d)),e.pathMethods&&Object.assign(_,e.pathMethods),e.atomListeners&&v.push(...e.atomListeners);let y={notify:e=>{g[e].set(!g[e].get())},listen:(e,t)=>{g[e].subscribe(t)},atoms:g};for(let t of m)t.getActions&&Object.assign(h,t.getActions?.(d,y,e));return{get baseURL(){return r},pluginsActions:h,pluginsAtoms:g,pluginPathMethods:_,atomListeners:v,$fetch:d,$store:y}};function Ye(e){return typeof e==`object`&&!!e&&`get`in e&&typeof e.get==`function`&&`lc`in e&&typeof e.lc==`number`}function Xe(e,t,n){let r=t[e],{fetchOptions:i,query:a,...o}=n||{};return r||(i?.method?i.method:o&&Object.keys(o).length>0?`POST`:`GET`)}function Ze(e,t,n,r,i){function a(o=[]){return new Proxy(function(){},{get(t,n){if(typeof n!=`string`||n===`then`||n===`catch`||n===`finally`)return;let r=[...o,n],i=e;for(let e of r)if(i&&typeof i==`object`&&e in i)i=i[e];else{i=void 0;break}return typeof i==`function`||Ye(i)?i:a(r)},apply:async(e,a,s)=>{let c=`/`+o.map(e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)).join(`/`),l=s[0]||{},u=s[1]||{},{query:d,fetchOptions:f,...p}=l,m={...u,...f},h=Xe(c,n,l);return await t(c,{...m,body:h===`GET`?void 0:{...p,...m?.body||{}},query:d||m?.query,method:h,async onSuccess(e){if(await m?.onSuccess?.(e),!i)return;let t=i.filter(e=>e.matcher(c));if(t.length)for(let e of t){let t=r[e.signal];if(!t)return;let n=t.get();setTimeout(()=>{t.set(!n)},10)}}})}})}return a()}function Qe(e){return{authorize(t,n=`AND`){let r=!1;for(let[i,a]of Object.entries(t)){let t=e[i];if(!t)return{success:!1,error:`You are not allowed to access resource: ${i}`};if(Array.isArray(a))r=a.every(e=>t.includes(e));else if(typeof a==`object`){let e=a;r=e.connector===`OR`?e.actions.some(e=>t.includes(e)):e.actions.every(e=>t.includes(e))}else throw new x(`Invalid access control request`);if(r&&n===`OR`)return{success:r};if(!r&&n===`AND`)return{success:!1,error:`unauthorized to access resource "${i}"`}}return r?{success:r}:{success:!1,error:`Not authorized`}},statements:e}}function H(e){return{newRole(e){return Qe(e)},statements:e}}var U=H({user:[`create`,`list`,`set-role`,`ban`,`impersonate`,`delete`,`set-password`,`get`,`update`],session:[`list`,`revoke`,`delete`]}),W=U.newRole({user:[`create`,`list`,`set-role`,`ban`,`impersonate`,`delete`,`set-password`,`get`,`update`],session:[`list`,`revoke`,`delete`]}),G=U.newRole({user:[],session:[]}),$e={admin:W,user:G},et=e=>{if(e.userId&&e.options?.adminUserIds?.includes(e.userId))return!0;if(!e.permissions&&!e.permission)return!1;let t=(e.role||e.options?.defaultRole||`user`).split(`,`),n=e.options?.roles||$e;for(let r of t)if(n[r]?.authorize(e.permission??e.permissions)?.success)return!0;return!1},K=H({organization:[`update`,`delete`],member:[`create`,`update`,`delete`],invitation:[`create`,`cancel`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),q=K.newRole({organization:[`update`],invitation:[`create`,`cancel`],member:[`create`,`update`,`delete`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),J=K.newRole({organization:[`update`,`delete`],member:[`create`,`update`,`delete`],invitation:[`create`,`cancel`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),Y=K.newRole({organization:[],member:[],invitation:[],team:[],ac:[`read`]}),tt={admin:q,owner:J,member:Y},nt=(e,t)=>{if(!e.permissions&&!e.permission)return!1;let n=e.role.split(`,`),r=e.options.creatorRole||`owner`,i=n.includes(r),a=e.allowCreatorAllPermissions||!1;if(i&&a)return!0;for(let r of n)if(t[r]?.authorize(e.permissions??e.permission)?.success)return!0;return!1},rt=e=>({id:`two-factor`,$InferServerPlugin:{},atomListeners:[{matcher:e=>e.startsWith(`/two-factor/`),signal:`$sessionSignal`}],pathMethods:{"/two-factor/disable":`POST`,"/two-factor/enable":`POST`,"/two-factor/send-otp":`POST`,"/two-factor/generate-backup-codes":`POST`},fetchPlugins:[{id:`two-factor`,name:`two-factor`,hooks:{async onSuccess(t){t.data?.twoFactorRedirect&&e?.onTwoFactorRedirect&&await e.onTwoFactorRedirect()}}}]}),it=e=>{let t={admin:W,user:G,...e?.roles};return{id:`admin-client`,$InferServerPlugin:{},getActions:()=>({admin:{checkRolePermission:n=>et({role:n.role,options:{ac:e?.ac,roles:t},permissions:n.permissions??n.permission})}}),pathMethods:{"/admin/list-users":`GET`,"/admin/stop-impersonating":`POST`}}},at=()=>({id:`api-key`,$InferServerPlugin:{},pathMethods:{"/api-key/create":`POST`,"/api-key/delete":`POST`,"/api-key/delete-all-expired-api-keys":`POST`}});function X(e){if(typeof document>`u`)return null;let t=document.cookie.split(`; `).find(t=>t.startsWith(`${e}=`));return t?t.split(`=`)[1]:null}var ot=(e={})=>{let t=e.cookieName||`better-auth.last_used_login_method`;return{id:`last-login-method-client`,getActions(){return{getLastUsedLoginMethod:()=>X(t),clearLastUsedLoginMethod:()=>{typeof document<`u`&&(document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`)},isLastUsedLoginMethod:e=>X(t)===e}}}},st=e=>nt(e,e.options.roles||tt),ct=e=>{let t=I(!1),n=I(!1),r=I(!1),i=I(!1),a={admin:q,member:Y,owner:J,...e?.roles};return{id:`organization`,$InferServerPlugin:{},getActions:(t,n,r)=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{},Team:{}},organization:{checkRolePermission:t=>st({role:t.role,options:{ac:e?.ac,roles:a},permissions:t.permissions??t.permission})}}),getAtoms:e=>{let a=B(t,`/organization/list`,e,{method:`GET`});return{$listOrg:t,$activeOrgSignal:n,$activeMemberSignal:r,$activeMemberRoleSignal:i,activeOrganization:B([n],`/organization/get-full-organization`,e,()=>({method:`GET`})),listOrganizations:a,activeMember:B([r],`/organization/get-active-member`,e,{method:`GET`}),activeMemberRole:B([i],`/organization/get-active-member-role`,e,{method:`GET`})}},pathMethods:{"/organization/get-full-organization":`GET`,"/organization/list-user-teams":`GET`},atomListeners:[{matcher(e){return e===`/organization/create`||e===`/organization/delete`||e===`/organization/update`},signal:`$listOrg`},{matcher(e){return e.startsWith(`/organization`)},signal:`$activeOrgSignal`},{matcher(e){return e.startsWith(`/organization/set-active`)},signal:`$sessionSignal`},{matcher(e){return e.includes(`/organization/update-member-role`)},signal:`$activeMemberSignal`},{matcher(e){return e.includes(`/organization/update-member-role`)},signal:`$activeMemberRoleSignal`}]}},Z=e();function lt(e,t={}){let n=(0,Z.useRef)(e.get()),{keys:r,deps:i=[e,r]}=t,a=(0,Z.useCallback)(t=>{let i=e=>{n.current!==e&&(n.current=e,t())};return i(e.value),r?.length?Be(e,r,i):e.listen(i)},i),o=()=>n.current;return(0,Z.useSyncExternalStore)(a,o,o)}function ut(e){return`use${dt(e)}`}function dt(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ft(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:r,$fetch:i,$store:a,atomListeners:o}=Je(e),s={};for(let[e,t]of Object.entries(r))s[ut(e)]=()=>lt(t);return Ze({...n,...s,$fetch:i,$store:a},i,t,r,o)}function pt({features:e}){let t=[it($)];return e.apiKey&&t.push(at()),e.lastLoginMethod&&t.push(ot()),e.organization&&t.push(ct({ac:$.ac,dynamicAccessControl:{enabled:!1},roles:$.roles,team:{enabled:e.organization.teams??!1}})),e.sso&&t.push(i()),e.twoFactor&&t.push(rt()),ft({basePath:r,plugins:t})}var Q=H({accounts:[],apiKeys:[],invitations:[],members:[],organizations:[],sessions:[`list`,`revoke`,`delete`],ssoProviders:[],teamMembers:[],teams:[],twoFactors:[],users:[`ban`,`create`,`delete`,`impersonate`,`list`,`set-password`,`set-role`,`update`],verifications:[],storageAttachments:[],storageBlobs:[],storageVariantRecords:[]});const $={ac:Q,adminRoles:[`admin`],defaultRole:`user`,roles:{admin:Q.newRole({sessions:[`list`,`revoke`,`delete`],users:[`create`,`list`,`set-role`,`ban`,`impersonate`,`delete`,`set-password`,`update`]}),user:Q.newRole({users:[]})}};var mt=n(),ht=t();const gt=(0,Z.createContext)({});function _t(e){let t=(0,mt.c)(8),{features:n,children:r}=e,i;t[0]===n?i=t[1]:(i=pt({features:n}),t[0]=n,t[1]=i);let a=i,o;t[2]!==a||t[3]!==n?(o={client:a,features:n},t[2]=a,t[3]=n,t[4]=o):o=t[4];let s;return t[5]!==r||t[6]!==o?(s=(0,ht.jsx)(gt.Provider,{value:o,children:r}),t[5]=r,t[6]=o,t[7]=s):s=t[7],s}function vt(){let e=(0,Z.useContext)(gt);if(!e.client)throw Error(`useAuth must be used within AuthProvider`);return e}export{vt as n,_t as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./jsx-runtime-SCjaiuzT.js";import{r as n}from"./chunk-UIGDSWPH-DeiamgQc.js";import{t as r}from"./compiler-runtime-Co9svCia.js";import{t as i}from"./utils-InBzhUf_.js";var a=r(),o=e(),s=t(),c={sm:{icon:`size-6`,iconInner:`size-4`,text:`text-base`},md:{icon:`size-8`,iconInner:`size-5`,text:`text-lg`},lg:{icon:`size-9`,iconInner:`size-6`,text:`text-2xl`}};const l=(0,o.forwardRef)((e,t)=>{let r=(0,a.c)(36),o,l,u,d,f,p,m,h;r[0]===e?(o=r[1],l=r[2],u=r[3],d=r[4],f=r[5],p=r[6],m=r[7],h=r[8]):({className:o,href:l,name:f,nameClassName:u,showName:p,size:m,spaNavigation:h,...d}=e,r[0]=e,r[1]=o,r[2]=l,r[3]=u,r[4]=d,r[5]=f,r[6]=p,r[7]=m,r[8]=h);let g=f===void 0?`AppOS`:f,_=p===void 0?!0:p,v=m===void 0?`sm`:m,y=h===void 0?!0:h,b=c[v],x;r[9]!==o||r[10]!==b.text?(x=i(`flex items-center gap-2 font-medium`,b.text,o),r[9]=o,r[10]=b.text,r[11]=x):x=r[11];let S=x,C;r[12]===b.icon?C=r[13]:(C=i(`flex items-center justify-center rounded-md`,b.icon),r[12]=b.icon,r[13]=C);let w;r[14]!==g||r[15]!==C?(w=(0,s.jsx)(`img`,{className:C,src:`/logo.png`,alt:g}),r[14]=g,r[15]=C,r[16]=w):w=r[16];let T;r[17]!==g||r[18]!==u||r[19]!==_?(T=_&&(0,s.jsx)(`span`,{className:i(`text-foreground`,u),children:g}),r[17]=g,r[18]=u,r[19]=_,r[20]=T):T=r[20];let E;r[21]!==w||r[22]!==T?(E=(0,s.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[w,T]}),r[21]=w,r[22]=T,r[23]=E):E=r[23];let D=E;if(l){let e;r[24]!==l||r[25]!==d||r[26]!==y?(e=e=>{if(!y){e.preventDefault(),window.location.href=l;return}d.onClick?.(e)},r[24]=l,r[25]=d,r[26]=y,r[27]=e):e=r[27];let t;return r[28]!==S||r[29]!==D||r[30]!==l||r[31]!==e?(t=(0,s.jsx)(n,{to:l,className:S,onClick:e,children:D}),r[28]=S,r[29]=D,r[30]=l,r[31]=e,r[32]=t):t=r[32],t}let O;return r[33]!==S||r[34]!==D?(O=(0,s.jsx)(`div`,{className:S,children:D}),r[33]=S,r[34]=D,r[35]=O):O=r[35],O});export{l as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./chunk-vBKQ29Cd.js";var t=e(((e,t)=>{var n=typeof globalThis<`u`&&globalThis||typeof self<`u`&&self||typeof global<`u`&&global,r=function(){function e(){this.fetch=!1,this.DOMException=n.DOMException}return e.prototype=n,new e}();(function(e){(function(t){var n=e!==void 0&&e||typeof self<`u`&&self||n!==void 0&&n,r={searchParams:`URLSearchParams`in n,iterable:`Symbol`in n&&`iterator`in Symbol,blob:`FileReader`in n&&`Blob`in n&&function(){try{return new Blob,!0}catch{return!1}}(),formData:`FormData`in n,arrayBuffer:`ArrayBuffer`in n};function i(e){return e&&DataView.prototype.isPrototypeOf(e)}if(r.arrayBuffer)var a=[`[object Int8Array]`,`[object Uint8Array]`,`[object Uint8ClampedArray]`,`[object Int16Array]`,`[object Uint16Array]`,`[object Int32Array]`,`[object Uint32Array]`,`[object Float32Array]`,`[object Float64Array]`],o=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};function s(e){if(typeof e!=`string`&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||e===``)throw TypeError(`Invalid character in header field name: "`+e+`"`);return e.toLowerCase()}function c(e){return typeof e!=`string`&&(e=String(e)),e}function l(e){var t={next:function(){var t=e.shift();return{done:t===void 0,value:t}}};return r.iterable&&(t[Symbol.iterator]=function(){return t}),t}function u(e){this.map={},e instanceof u?e.forEach(function(e,t){this.append(t,e)},this):Array.isArray(e)?e.forEach(function(e){this.append(e[0],e[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}u.prototype.append=function(e,t){e=s(e),t=c(t);var n=this.map[e];this.map[e]=n?n+`, `+t:t},u.prototype.delete=function(e){delete this.map[s(e)]},u.prototype.get=function(e){return e=s(e),this.has(e)?this.map[e]:null},u.prototype.has=function(e){return this.map.hasOwnProperty(s(e))},u.prototype.set=function(e,t){this.map[s(e)]=c(t)},u.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},u.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),l(e)},u.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),l(e)},u.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),l(e)},r.iterable&&(u.prototype[Symbol.iterator]=u.prototype.entries);function d(e){if(e.bodyUsed)return Promise.reject(TypeError(`Already read`));e.bodyUsed=!0}function f(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function p(e){var t=new FileReader,n=f(t);return t.readAsArrayBuffer(e),n}function m(e){var t=new FileReader,n=f(t);return t.readAsText(e),n}function h(e){for(var t=new Uint8Array(e),n=Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join(``)}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function _(){return this.bodyUsed=!1,this._initBody=function(e){this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?typeof e==`string`?this._bodyText=e:r.blob&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:r.formData&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:r.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():r.arrayBuffer&&r.blob&&i(e)?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):r.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(e)||o(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText=``,this.headers.get(`content-type`)||(typeof e==`string`?this.headers.set(`content-type`,`text/plain;charset=UTF-8`):this._bodyBlob&&this._bodyBlob.type?this.headers.set(`content-type`,this._bodyBlob.type):r.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set(`content-type`,`application/x-www-form-urlencoded;charset=UTF-8`))},r.blob&&(this.blob=function(){var e=d(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw Error(`could not read FormData body as blob`);return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?d(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(p)}),this.text=function(){var e=d(this);if(e)return e;if(this._bodyBlob)return m(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(h(this._bodyArrayBuffer));if(this._bodyFormData)throw Error(`could not read FormData body as text`);return Promise.resolve(this._bodyText)},r.formData&&(this.formData=function(){return this.text().then(x)}),this.json=function(){return this.text().then(JSON.parse)},this}var v=[`DELETE`,`GET`,`HEAD`,`OPTIONS`,`POST`,`PUT`];function y(e){var t=e.toUpperCase();return v.indexOf(t)>-1?t:e}function b(e,t){if(!(this instanceof b))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);t||={};var n=t.body;if(e instanceof b){if(e.bodyUsed)throw TypeError(`Already read`);this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new u(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,!n&&e._bodyInit!=null&&(n=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||`same-origin`,(t.headers||!this.headers)&&(this.headers=new u(t.headers)),this.method=y(t.method||this.method||`GET`),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(this.method===`GET`||this.method===`HEAD`)&&n)throw TypeError(`Body not allowed for GET or HEAD requests`);if(this._initBody(n),(this.method===`GET`||this.method===`HEAD`)&&(t.cache===`no-store`||t.cache===`no-cache`)){var r=/([?&])_=[^&]*/;r.test(this.url)?this.url=this.url.replace(r,`$1_=`+new Date().getTime()):this.url+=(/\?/.test(this.url)?`&`:`?`)+`_=`+new Date().getTime()}}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})};function x(e){var t=new FormData;return e.trim().split(`&`).forEach(function(e){if(e){var n=e.split(`=`),r=n.shift().replace(/\+/g,` `),i=n.join(`=`).replace(/\+/g,` `);t.append(decodeURIComponent(r),decodeURIComponent(i))}}),t}function S(e){var t=new u;return e.replace(/\r?\n[\t ]+/g,` `).split(`\r`).map(function(e){return e.indexOf(`
|
|
2
|
+
`)===0?e.substr(1,e.length):e}).forEach(function(e){var n=e.split(`:`),r=n.shift().trim();if(r){var i=n.join(`:`).trim();t.append(r,i)}}),t}_.call(b.prototype);function C(e,t){if(!(this instanceof C))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);t||={},this.type=`default`,this.status=t.status===void 0?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText===void 0?``:``+t.statusText,this.headers=new u(t.headers),this.url=t.url||``,this._initBody(e)}_.call(C.prototype),C.prototype.clone=function(){return new C(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new u(this.headers),url:this.url})},C.error=function(){var e=new C(null,{status:0,statusText:``});return e.type=`error`,e};var w=[301,302,303,307,308];C.redirect=function(e,t){if(w.indexOf(t)===-1)throw RangeError(`Invalid status code`);return new C(null,{status:t,headers:{location:e}})},t.DOMException=n.DOMException;try{new t.DOMException}catch{t.DOMException=function(e,t){this.message=e,this.name=t,this.stack=Error(e).stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function T(e,i){return new Promise(function(a,o){var s=new b(e,i);if(s.signal&&s.signal.aborted)return o(new t.DOMException(`Aborted`,`AbortError`));var l=new XMLHttpRequest;function d(){l.abort()}l.onload=function(){var e={status:l.status,statusText:l.statusText,headers:S(l.getAllResponseHeaders()||``)};e.url=`responseURL`in l?l.responseURL:e.headers.get(`X-Request-URL`);var t=`response`in l?l.response:l.responseText;setTimeout(function(){a(new C(t,e))},0)},l.onerror=function(){setTimeout(function(){o(TypeError(`Network request failed`))},0)},l.ontimeout=function(){setTimeout(function(){o(TypeError(`Network request failed`))},0)},l.onabort=function(){setTimeout(function(){o(new t.DOMException(`Aborted`,`AbortError`))},0)};function f(e){try{return e===``&&n.location.href?n.location.href:e}catch{return e}}l.open(s.method,f(s.url),!0),s.credentials===`include`?l.withCredentials=!0:s.credentials===`omit`&&(l.withCredentials=!1),`responseType`in l&&(r.blob?l.responseType=`blob`:r.arrayBuffer&&s.headers.get(`Content-Type`)&&s.headers.get(`Content-Type`).indexOf(`application/octet-stream`)!==-1&&(l.responseType=`arraybuffer`)),i&&typeof i.headers==`object`&&!(i.headers instanceof u)?Object.getOwnPropertyNames(i.headers).forEach(function(e){l.setRequestHeader(e,c(i.headers[e]))}):s.headers.forEach(function(e,t){l.setRequestHeader(t,e)}),s.signal&&(s.signal.addEventListener(`abort`,d),l.onreadystatechange=function(){l.readyState===4&&s.signal.removeEventListener(`abort`,d)}),l.send(s._bodyInit===void 0?null:s._bodyInit)})}return T.polyfill=!0,n.fetch||(n.fetch=T,n.Headers=u,n.Request=b,n.Response=C),t.Headers=u,t.Request=b,t.Response=C,t.fetch=T,t})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=n.fetch?n:r;e=i.fetch,e.default=i.fetch,e.fetch=i.fetch,e.Headers=i.Headers,e.Request=i.Request,e.Response=i.Response,t.exports=e}));export default t();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-SCjaiuzT.js";import{t}from"./compiler-runtime-Co9svCia.js";import{t as n}from"./dist-BWnI-4xl.js";import{t as r}from"./utils-InBzhUf_.js";import{t as i}from"./dist-CBNvQRbZ.js";var a=t(),o=e(),s=i(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,{variants:{variant:{default:`bg-primary text-primary-foreground shadow-xs hover:bg-primary/90`,destructive:`bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`}},defaultVariants:{variant:`default`,size:`default`}});function c(e){let t=(0,a.c)(14),i,c,l,u,d;t[0]===e?(i=t[1],c=t[2],l=t[3],u=t[4],d=t[5]):({className:i,variant:d,size:l,asChild:u,...c}=e,t[0]=e,t[1]=i,t[2]=c,t[3]=l,t[4]=u,t[5]=d);let f=u!==void 0&&u?n:`button`,p;t[6]!==i||t[7]!==l||t[8]!==d?(p=r(s({variant:d,size:l,className:i})),t[6]=i,t[7]=l,t[8]=d,t[9]=p):p=t[9];let m;return t[10]!==f||t[11]!==c||t[12]!==p?(m=(0,o.jsx)(f,{"data-slot":`button`,className:p,...c}),t[10]=f,t[11]=c,t[12]=p,t[13]=m):m=t[13],m}export{s as n,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./dist-BWnI-4xl.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./chunk-vBKQ29Cd.js";import{n as t,t as n}from"./jsx-runtime-SCjaiuzT.js";import{t as r}from"./compiler-runtime-Co9svCia.js";import{a as i}from"./dist-BWnI-4xl.js";import{t as a}from"./check-D5D2EGI4.js";import{t as o}from"./utils-InBzhUf_.js";import{t as s}from"./dist-B6TkSbxV.js";import{a as c,r as l,t as u}from"./dist-DhfcebhF.js";import{t as d}from"./dist-VqaKdvZu.js";import{t as f}from"./dist-CA21wN5I.js";import{t as p}from"./dist-CYRPrwOb.js";var m=e(t(),1),h=n(),g=`Checkbox`,[_,v]=c(g),[y,b]=_(g);function x(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:d=`on`,internal_do_not_use_render:f}=e,[p,_]=u({prop:n,defaultProp:i??!1,onChange:c,caller:g}),[v,b]=m.useState(null),[x,S]=m.useState(null),C=m.useRef(!1),w=v?!!o||!!v.closest(`form`):!0,T={checked:p,disabled:a,setChecked:_,control:v,setControl:b,name:s,form:o,value:d,hasConsumerStoppedPropagationRef:C,required:l,defaultChecked:A(i)?!1:i,isFormControl:w,bubbleInput:x,setBubbleInput:S};return(0,h.jsx)(y,{scope:t,...T,children:k(f)?f(T):r})}var S=`CheckboxTrigger`,C=m.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...r},a)=>{let{control:o,value:c,disabled:u,checked:d,required:f,setControl:p,setChecked:g,hasConsumerStoppedPropagationRef:_,isFormControl:v,bubbleInput:y}=b(S,e),x=i(a,p),C=m.useRef(d);return m.useEffect(()=>{let e=o?.form;if(e){let t=()=>g(C.current);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[o,g]),(0,h.jsx)(s.button,{type:`button`,role:`checkbox`,"aria-checked":A(d)?`mixed`:d,"aria-required":f,"data-state":j(d),"data-disabled":u?``:void 0,disabled:u,value:c,...r,ref:x,onKeyDown:l(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:l(n,e=>{g(e=>A(e)?!0:!e),y&&v&&(_.current=e.isPropagationStopped(),_.current||e.stopPropagation())})})});C.displayName=S;var w=m.forwardRef((e,t)=>{let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,h.jsx)(x,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(C,{...d,ref:t,__scopeCheckbox:n}),e&&(0,h.jsx)(O,{__scopeCheckbox:n})]})})});w.displayName=g;var T=`CheckboxIndicator`,E=m.forwardRef((e,t)=>{let{__scopeCheckbox:n,forceMount:r,...i}=e,a=b(T,n);return(0,h.jsx)(d,{present:r||A(a.checked)||a.checked===!0,children:(0,h.jsx)(s.span,{"data-state":j(a.checked),"data-disabled":a.disabled?``:void 0,...i,ref:t,style:{pointerEvents:`none`,...e.style}})})});E.displayName=T;var D=`CheckboxBubbleInput`,O=m.forwardRef(({__scopeCheckbox:e,...t},n)=>{let{control:r,hasConsumerStoppedPropagationRef:a,checked:o,defaultChecked:c,required:l,disabled:u,name:d,value:g,form:_,bubbleInput:v,setBubbleInput:y}=b(D,e),x=i(n,y),S=f(o),C=p(r);m.useEffect(()=>{let e=v;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(S!==o&&n){let t=new Event(`click`,{bubbles:r});e.indeterminate=A(o),n.call(e,A(o)?!1:o),e.dispatchEvent(t)}},[v,S,o,a]);let w=m.useRef(A(o)?!1:o);return(0,h.jsx)(s.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:u,name:d,value:g,form:_,...t,tabIndex:-1,ref:x,style:{...t.style,...C,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});O.displayName=D;function k(e){return typeof e==`function`}function A(e){return e===`indeterminate`}function j(e){return A(e)?`indeterminate`:e?`checked`:`unchecked`}var M=r();function N(e){let t=(0,M.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=o(`peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,n),t[3]=n,t[4]=i);let s;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,h.jsx)(E,{"data-slot":`checkbox-indicator`,className:`flex items-center justify-center text-current transition-none`,children:(0,h.jsx)(a,{className:`size-3.5`})}),t[5]=s):s=t[5];let c;return t[6]!==r||t[7]!==i?(c=(0,h.jsx)(w,{"data-slot":`checkbox`,className:i,...r,children:s}),t[6]=r,t[7]=i,t[8]=c):c=t[8],c}export{N as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,t}from"./chunk-vBKQ29Cd.js";import{n}from"./jsx-runtime-SCjaiuzT.js";import{T as r,o as i,t as a,w as o}from"./chunk-UIGDSWPH-DeiamgQc.js";var s=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0})})),c=e(n(),1);s(),[...i];function l(e,...t){let n=t[0],r=e.replace(/\/*\*?$/,``).replace(/\/:([\w-]+)(\?)?/g,(t,r,i)=>{let a=i===void 0,o=n?n[r]:void 0;if(a&&o===void 0)throw Error(`Path '${e}' requires param '${r}' but it was not provided`);return o===void 0?``:`/`+o});if(e.endsWith(`*`)){let e=n?n[`*`]:void 0;e!==void 0&&(r+=`/`+e)}return r||`/`}new TextEncoder,c.use;function u(e){if(!e)return null;let t=Object.entries(e),n={};for(let[e,r]of t)if(r&&r.__type===`RouteErrorResponse`)n[e]=new a(r.status,r.statusText,r.data,r.internal===!0);else if(r&&r.__type===`Error`){if(r.__subType){let t=window[r.__subType];if(typeof t==`function`)try{let i=new t(r.message);i.stack=r.stack,n[e]=i}catch{}}if(n[e]==null){let t=Error(r.message);t.stack=r.stack,n[e]=t}}else n[e]=r;return n}function d({state:e,routes:t,getRouteInfo:n,location:i,basename:a,isSpaMode:s}){let c={...e,loaderData:{...e.loaderData}},l=o(t,i,a);if(l)for(let e of l){let t=e.route.id,i=n(t);r(t,i.clientLoader,i.hasLoader,s)&&(i.hasHydrateFallback||!i.hasLoader)?delete c.loaderData[t]:i.hasLoader||(c.loaderData[t]=null)}return c}export{d as n,l as r,u as t};
|