@dailyautomations/auth 1.0.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/dist/client.d.ts +56 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +169 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +49 -0
- package/dist/errors.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAuth.d.ts +22 -0
- package/dist/hooks/useAuth.d.ts.map +1 -0
- package/dist/hooks/useAuth.js +221 -0
- package/dist/hooks/useAuth.js.map +1 -0
- package/dist/hooks/useUser.d.ts +36 -0
- package/dist/hooks/useUser.d.ts.map +1 -0
- package/dist/hooks/useUser.js +40 -0
- package/dist/hooks/useUser.js.map +1 -0
- package/dist/identity.d.ts +42 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +179 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +49 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +116 -0
- package/dist/middleware.js.map +1 -0
- package/dist/provisioning.d.ts +41 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +224 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/react.d.ts +7 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +14 -0
- package/dist/react.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +28 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +121 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth Provisioning Service
|
|
4
|
+
* Auto-provision workspaces and app registrations for users
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ProvisioningService = void 0;
|
|
8
|
+
const errors_js_1 = require("./errors.js");
|
|
9
|
+
class ProvisioningService {
|
|
10
|
+
supabase;
|
|
11
|
+
appSlug;
|
|
12
|
+
constructor(supabase, appSlug) {
|
|
13
|
+
this.supabase = supabase;
|
|
14
|
+
this.appSlug = appSlug;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Provision a new user with workspace and app registration
|
|
18
|
+
* Called on signup
|
|
19
|
+
*/
|
|
20
|
+
async provisionNewUser(userId, email, options) {
|
|
21
|
+
const workspaceName = options?.workspaceName || this.generateWorkspaceName(email);
|
|
22
|
+
const workspaceSlug = options?.workspaceSlug || this.generateSlug(workspaceName);
|
|
23
|
+
try {
|
|
24
|
+
// Create workspace
|
|
25
|
+
const { data: workspace, error: wsError } = await this.supabase
|
|
26
|
+
.from('daily_core.workspaces')
|
|
27
|
+
.insert({
|
|
28
|
+
name: workspaceName,
|
|
29
|
+
slug: workspaceSlug,
|
|
30
|
+
owner_id: userId,
|
|
31
|
+
settings: {},
|
|
32
|
+
})
|
|
33
|
+
.select()
|
|
34
|
+
.single();
|
|
35
|
+
if (wsError) {
|
|
36
|
+
throw new errors_js_1.DailyAuthError('PROVISIONING_FAILED', `Failed to create workspace: ${wsError.message}`);
|
|
37
|
+
}
|
|
38
|
+
// Create workspace membership (owner)
|
|
39
|
+
const { data: membership, error: memberError } = await this.supabase
|
|
40
|
+
.from('daily_core.workspace_members')
|
|
41
|
+
.insert({
|
|
42
|
+
workspace_id: workspace.id,
|
|
43
|
+
user_id: userId,
|
|
44
|
+
role: 'owner',
|
|
45
|
+
})
|
|
46
|
+
.select()
|
|
47
|
+
.single();
|
|
48
|
+
if (memberError) {
|
|
49
|
+
throw new errors_js_1.DailyAuthError('PROVISIONING_FAILED', `Failed to create membership: ${memberError.message}`);
|
|
50
|
+
}
|
|
51
|
+
// Create app registration
|
|
52
|
+
const { data: appReg, error: appError } = await this.supabase
|
|
53
|
+
.from('daily_core.app_registrations')
|
|
54
|
+
.insert({
|
|
55
|
+
workspace_id: workspace.id,
|
|
56
|
+
app_slug: this.appSlug,
|
|
57
|
+
enabled: true,
|
|
58
|
+
settings: options?.appSettings || {},
|
|
59
|
+
})
|
|
60
|
+
.select()
|
|
61
|
+
.single();
|
|
62
|
+
if (appError) {
|
|
63
|
+
throw new errors_js_1.DailyAuthError('PROVISIONING_FAILED', `Failed to create app registration: ${appError.message}`);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
workspace: {
|
|
67
|
+
id: workspace.id,
|
|
68
|
+
name: workspace.name,
|
|
69
|
+
slug: workspace.slug,
|
|
70
|
+
role: 'owner',
|
|
71
|
+
},
|
|
72
|
+
appRegistration: {
|
|
73
|
+
id: appReg.id,
|
|
74
|
+
appSlug: this.appSlug,
|
|
75
|
+
enabled: true,
|
|
76
|
+
isFirstAccess: true,
|
|
77
|
+
},
|
|
78
|
+
membership: {
|
|
79
|
+
id: membership.id,
|
|
80
|
+
role: 'owner',
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (err instanceof errors_js_1.DailyAuthError)
|
|
86
|
+
throw err;
|
|
87
|
+
throw new errors_js_1.DailyAuthError('PROVISIONING_FAILED', `Provisioning failed: ${err.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Ensure user has access to current app
|
|
92
|
+
* Creates app_registration if missing (first time on this app)
|
|
93
|
+
*/
|
|
94
|
+
async ensureAppAccess(userId) {
|
|
95
|
+
// Get user's primary workspace (first one they own)
|
|
96
|
+
const workspaces = await this.getUserWorkspaces(userId);
|
|
97
|
+
if (workspaces.length === 0) {
|
|
98
|
+
// User has no workspace - shouldn't happen after proper signup
|
|
99
|
+
return {};
|
|
100
|
+
}
|
|
101
|
+
// Use first owned workspace, or first available
|
|
102
|
+
const workspace = workspaces.find((w) => w.role === 'owner') || workspaces[0];
|
|
103
|
+
// Check if app registration exists for this workspace
|
|
104
|
+
const { data: existingReg } = await this.supabase
|
|
105
|
+
.from('daily_core.app_registrations')
|
|
106
|
+
.select('*')
|
|
107
|
+
.eq('workspace_id', workspace.id)
|
|
108
|
+
.eq('app_slug', this.appSlug)
|
|
109
|
+
.single();
|
|
110
|
+
if (existingReg) {
|
|
111
|
+
return {
|
|
112
|
+
workspace,
|
|
113
|
+
appRegistration: {
|
|
114
|
+
id: existingReg.id,
|
|
115
|
+
appSlug: this.appSlug,
|
|
116
|
+
enabled: existingReg.enabled,
|
|
117
|
+
isFirstAccess: false,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// First time accessing this app - create registration
|
|
122
|
+
const { data: newReg, error } = await this.supabase
|
|
123
|
+
.from('daily_core.app_registrations')
|
|
124
|
+
.insert({
|
|
125
|
+
workspace_id: workspace.id,
|
|
126
|
+
app_slug: this.appSlug,
|
|
127
|
+
enabled: true,
|
|
128
|
+
settings: {},
|
|
129
|
+
})
|
|
130
|
+
.select()
|
|
131
|
+
.single();
|
|
132
|
+
if (error) {
|
|
133
|
+
console.error('Failed to create app registration:', error);
|
|
134
|
+
return { workspace };
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
workspace,
|
|
138
|
+
appRegistration: {
|
|
139
|
+
id: newReg.id,
|
|
140
|
+
appSlug: this.appSlug,
|
|
141
|
+
enabled: true,
|
|
142
|
+
isFirstAccess: true,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get all workspaces for a user
|
|
148
|
+
*/
|
|
149
|
+
async getUserWorkspaces(userId) {
|
|
150
|
+
// Get memberships
|
|
151
|
+
const { data: memberships, error: memberError } = await this.supabase
|
|
152
|
+
.from('daily_core.workspace_members')
|
|
153
|
+
.select('workspace_id, role')
|
|
154
|
+
.eq('user_id', userId);
|
|
155
|
+
if (memberError || !memberships || memberships.length === 0) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
const workspaceIds = memberships.map((m) => m.workspace_id);
|
|
159
|
+
// Get workspace details
|
|
160
|
+
const { data: workspaces, error: wsError } = await this.supabase
|
|
161
|
+
.from('daily_core.workspaces')
|
|
162
|
+
.select('id, name, slug')
|
|
163
|
+
.in('id', workspaceIds);
|
|
164
|
+
if (wsError || !workspaces) {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
// Combine data
|
|
168
|
+
return workspaces.map((ws) => {
|
|
169
|
+
const membership = memberships.find((m) => m.workspace_id === ws.id);
|
|
170
|
+
return {
|
|
171
|
+
id: ws.id,
|
|
172
|
+
name: ws.name,
|
|
173
|
+
slug: ws.slug,
|
|
174
|
+
role: (membership?.role || 'member'),
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if app registration exists for workspace
|
|
180
|
+
*/
|
|
181
|
+
async getAppRegistration(workspaceId) {
|
|
182
|
+
const { data, error } = await this.supabase
|
|
183
|
+
.from('daily_core.app_registrations')
|
|
184
|
+
.select('*')
|
|
185
|
+
.eq('workspace_id', workspaceId)
|
|
186
|
+
.eq('app_slug', this.appSlug)
|
|
187
|
+
.single();
|
|
188
|
+
if (error || !data) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
id: data.id,
|
|
193
|
+
appSlug: this.appSlug,
|
|
194
|
+
enabled: data.enabled,
|
|
195
|
+
isFirstAccess: false,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Generate workspace name from email
|
|
200
|
+
*/
|
|
201
|
+
generateWorkspaceName(email) {
|
|
202
|
+
const localPart = email.split('@')[0];
|
|
203
|
+
// Capitalize and clean up
|
|
204
|
+
return localPart
|
|
205
|
+
.replace(/[._-]/g, ' ')
|
|
206
|
+
.replace(/\b\w/g, (c) => c.toUpperCase())
|
|
207
|
+
.trim() + "'s Workspace";
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Generate URL-safe slug from name
|
|
211
|
+
*/
|
|
212
|
+
generateSlug(name) {
|
|
213
|
+
const base = name
|
|
214
|
+
.toLowerCase()
|
|
215
|
+
.replace(/[']/g, '')
|
|
216
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
217
|
+
.replace(/^-|-$/g, '');
|
|
218
|
+
// Add random suffix to ensure uniqueness
|
|
219
|
+
const suffix = Math.random().toString(36).substring(2, 6);
|
|
220
|
+
return `${base}-${suffix}`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.ProvisioningService = ProvisioningService;
|
|
224
|
+
//# sourceMappingURL=provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../src/provisioning.ts"],"names":[],"mappings":"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"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EACP,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth React hooks
|
|
4
|
+
*
|
|
5
|
+
* Import via: import { AuthProvider, useAuth, useUser } from '@daily/auth/react';
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.useAuthClient = exports.useUser = exports.useAuth = exports.AuthProvider = void 0;
|
|
9
|
+
var index_js_1 = require("./hooks/index.js");
|
|
10
|
+
Object.defineProperty(exports, "AuthProvider", { enumerable: true, get: function () { return index_js_1.AuthProvider; } });
|
|
11
|
+
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return index_js_1.useAuth; } });
|
|
12
|
+
Object.defineProperty(exports, "useUser", { enumerable: true, get: function () { return index_js_1.useUser; } });
|
|
13
|
+
Object.defineProperty(exports, "useAuthClient", { enumerable: true, get: function () { return index_js_1.useAuthClient; } });
|
|
14
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAK0B;AAJxB,wGAAA,YAAY,OAAA;AACZ,mGAAA,OAAO,OAAA;AACP,mGAAA,OAAO,OAAA;AACP,yGAAA,aAAa,OAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth Types
|
|
3
|
+
* Standard auth toolkit for Daily applications
|
|
4
|
+
*/
|
|
5
|
+
import type { User, Session } from '@supabase/supabase-js';
|
|
6
|
+
export type WorkspaceRole = 'owner' | 'admin' | 'member' | 'viewer';
|
|
7
|
+
export type OAuthProvider = 'google' | 'github' | 'azure';
|
|
8
|
+
export interface DailyAuthOptions {
|
|
9
|
+
/** Supabase project URL */
|
|
10
|
+
supabaseUrl: string;
|
|
11
|
+
/** Supabase anon key (client-side) */
|
|
12
|
+
supabaseAnonKey: string;
|
|
13
|
+
/** Service role key for server-side operations (optional) */
|
|
14
|
+
serviceKey?: string;
|
|
15
|
+
/** Auto-create workspace on signup (default: true) */
|
|
16
|
+
autoCreateWorkspace?: boolean;
|
|
17
|
+
/** Default workspace name template */
|
|
18
|
+
workspaceNameTemplate?: (email: string) => string;
|
|
19
|
+
}
|
|
20
|
+
export interface SignUpParams {
|
|
21
|
+
email: string;
|
|
22
|
+
password: string;
|
|
23
|
+
metadata?: {
|
|
24
|
+
displayName?: string;
|
|
25
|
+
avatarUrl?: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
/** Custom workspace name (optional) */
|
|
29
|
+
workspaceName?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SignInParams {
|
|
32
|
+
email: string;
|
|
33
|
+
password: string;
|
|
34
|
+
}
|
|
35
|
+
export interface OAuthParams {
|
|
36
|
+
provider: OAuthProvider;
|
|
37
|
+
redirectTo?: string;
|
|
38
|
+
scopes?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ResetPasswordParams {
|
|
41
|
+
email: string;
|
|
42
|
+
redirectTo?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AuthResult {
|
|
45
|
+
user: User | null;
|
|
46
|
+
session: Session | null;
|
|
47
|
+
isNewUser: boolean;
|
|
48
|
+
workspace?: WorkspaceInfo;
|
|
49
|
+
error?: AuthErrorInfo;
|
|
50
|
+
}
|
|
51
|
+
export interface WorkspaceInfo {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
slug: string;
|
|
55
|
+
role: WorkspaceRole;
|
|
56
|
+
}
|
|
57
|
+
export interface AuthErrorInfo {
|
|
58
|
+
code: AuthErrorCode;
|
|
59
|
+
message: string;
|
|
60
|
+
hint?: string;
|
|
61
|
+
}
|
|
62
|
+
export type AuthErrorCode = 'INVALID_CREDENTIALS' | 'EMAIL_NOT_CONFIRMED' | 'EMAIL_ALREADY_EXISTS' | 'WEAK_PASSWORD' | 'WORKSPACE_CREATION_FAILED' | 'RATE_LIMITED' | 'NETWORK_ERROR' | 'UNKNOWN_ERROR';
|
|
63
|
+
export interface JWTPayload {
|
|
64
|
+
sub: string;
|
|
65
|
+
email?: string;
|
|
66
|
+
role?: string;
|
|
67
|
+
aud: string;
|
|
68
|
+
exp: number;
|
|
69
|
+
iat: number;
|
|
70
|
+
}
|
|
71
|
+
export interface AuthMiddlewareOptions {
|
|
72
|
+
supabaseUrl: string;
|
|
73
|
+
supabaseServiceKey: string;
|
|
74
|
+
/** Routes that don't require authentication */
|
|
75
|
+
publicPaths?: string[];
|
|
76
|
+
}
|
|
77
|
+
export interface AuthenticatedRequest {
|
|
78
|
+
user: User;
|
|
79
|
+
session: Session;
|
|
80
|
+
workspace?: WorkspaceInfo;
|
|
81
|
+
}
|
|
82
|
+
export interface AuthState {
|
|
83
|
+
user: User | null;
|
|
84
|
+
session: Session | null;
|
|
85
|
+
workspace: WorkspaceInfo | null;
|
|
86
|
+
isLoading: boolean;
|
|
87
|
+
isAuthenticated: boolean;
|
|
88
|
+
error: AuthErrorInfo | null;
|
|
89
|
+
}
|
|
90
|
+
export interface AuthActions {
|
|
91
|
+
signUp: (params: SignUpParams) => Promise<AuthResult>;
|
|
92
|
+
signIn: (params: SignInParams) => Promise<AuthResult>;
|
|
93
|
+
signInWithOAuth: (params: OAuthParams) => Promise<void>;
|
|
94
|
+
signOut: () => Promise<void>;
|
|
95
|
+
resetPassword: (params: ResetPasswordParams) => Promise<void>;
|
|
96
|
+
switchWorkspace: (workspaceId: string) => Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
export type UseAuthReturn = AuthState & AuthActions;
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAM3D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAM1D,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IAExB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,sCAAsC;IACtC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,MAAM,aAAa,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,eAAe,GACf,2BAA2B,GAC3B,cAAc,GACd,eAAe,GACf,eAAe,CAAC;AAMpB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAMD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth Workspace Service
|
|
3
|
+
* Create and manage workspaces for users
|
|
4
|
+
*/
|
|
5
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
6
|
+
import type { WorkspaceInfo } from './types.js';
|
|
7
|
+
export declare class WorkspaceService {
|
|
8
|
+
private supabase;
|
|
9
|
+
private nameTemplate?;
|
|
10
|
+
constructor(supabase: SupabaseClient, nameTemplate?: ((email: string) => string) | undefined);
|
|
11
|
+
/**
|
|
12
|
+
* Create a workspace for a new user
|
|
13
|
+
*/
|
|
14
|
+
createForUser(userId: string, email: string, customName?: string): Promise<WorkspaceInfo>;
|
|
15
|
+
/**
|
|
16
|
+
* Get all workspaces for a user
|
|
17
|
+
*/
|
|
18
|
+
getForUser(userId: string): Promise<WorkspaceInfo[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Generate workspace name from email
|
|
21
|
+
*/
|
|
22
|
+
private generateName;
|
|
23
|
+
/**
|
|
24
|
+
* Generate URL-safe slug
|
|
25
|
+
*/
|
|
26
|
+
private generateSlug;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAG/D,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY,CAAC;gBADb,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,aAAA;IAGlD;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC;IAyDzB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkC1D;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth Workspace Service
|
|
4
|
+
* Create and manage workspaces for users
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.WorkspaceService = void 0;
|
|
8
|
+
const errors_js_1 = require("./errors.js");
|
|
9
|
+
class WorkspaceService {
|
|
10
|
+
supabase;
|
|
11
|
+
nameTemplate;
|
|
12
|
+
constructor(supabase, nameTemplate) {
|
|
13
|
+
this.supabase = supabase;
|
|
14
|
+
this.nameTemplate = nameTemplate;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a workspace for a new user
|
|
18
|
+
*/
|
|
19
|
+
async createForUser(userId, email, customName) {
|
|
20
|
+
const workspaceName = customName || this.generateName(email);
|
|
21
|
+
const workspaceSlug = this.generateSlug(workspaceName);
|
|
22
|
+
try {
|
|
23
|
+
// Create workspace
|
|
24
|
+
const { data: workspace, error: wsError } = await this.supabase
|
|
25
|
+
.from('workspaces')
|
|
26
|
+
.insert({
|
|
27
|
+
name: workspaceName,
|
|
28
|
+
slug: workspaceSlug,
|
|
29
|
+
owner_id: userId,
|
|
30
|
+
settings: {},
|
|
31
|
+
})
|
|
32
|
+
.select()
|
|
33
|
+
.single();
|
|
34
|
+
if (wsError) {
|
|
35
|
+
throw new errors_js_1.DailyAuthError('WORKSPACE_CREATION_FAILED', `Failed to create workspace: ${wsError.message}`);
|
|
36
|
+
}
|
|
37
|
+
// Create membership (owner)
|
|
38
|
+
const { error: memberError } = await this.supabase
|
|
39
|
+
.from('workspace_members')
|
|
40
|
+
.insert({
|
|
41
|
+
workspace_id: workspace.id,
|
|
42
|
+
user_id: userId,
|
|
43
|
+
role: 'owner',
|
|
44
|
+
});
|
|
45
|
+
if (memberError) {
|
|
46
|
+
// Try to clean up workspace
|
|
47
|
+
await this.supabase.from('workspaces').delete().eq('id', workspace.id);
|
|
48
|
+
throw new errors_js_1.DailyAuthError('WORKSPACE_CREATION_FAILED', `Failed to create membership: ${memberError.message}`);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
id: workspace.id,
|
|
52
|
+
name: workspace.name,
|
|
53
|
+
slug: workspace.slug,
|
|
54
|
+
role: 'owner',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (err instanceof errors_js_1.DailyAuthError)
|
|
59
|
+
throw err;
|
|
60
|
+
throw new errors_js_1.DailyAuthError('WORKSPACE_CREATION_FAILED', `Workspace creation failed: ${err.message}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all workspaces for a user
|
|
65
|
+
*/
|
|
66
|
+
async getForUser(userId) {
|
|
67
|
+
// Get memberships
|
|
68
|
+
const { data: memberships, error: memberError } = await this.supabase
|
|
69
|
+
.from('workspace_members')
|
|
70
|
+
.select('workspace_id, role')
|
|
71
|
+
.eq('user_id', userId);
|
|
72
|
+
if (memberError || !memberships || memberships.length === 0) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
const workspaceIds = memberships.map((m) => m.workspace_id);
|
|
76
|
+
// Get workspace details
|
|
77
|
+
const { data: workspaces, error: wsError } = await this.supabase
|
|
78
|
+
.from('workspaces')
|
|
79
|
+
.select('id, name, slug')
|
|
80
|
+
.in('id', workspaceIds);
|
|
81
|
+
if (wsError || !workspaces) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
return workspaces.map((ws) => {
|
|
85
|
+
const membership = memberships.find((m) => m.workspace_id === ws.id);
|
|
86
|
+
return {
|
|
87
|
+
id: ws.id,
|
|
88
|
+
name: ws.name,
|
|
89
|
+
slug: ws.slug,
|
|
90
|
+
role: (membership?.role || 'member'),
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Generate workspace name from email
|
|
96
|
+
*/
|
|
97
|
+
generateName(email) {
|
|
98
|
+
if (this.nameTemplate) {
|
|
99
|
+
return this.nameTemplate(email);
|
|
100
|
+
}
|
|
101
|
+
const localPart = email.split('@')[0];
|
|
102
|
+
return (localPart
|
|
103
|
+
.replace(/[._-]/g, ' ')
|
|
104
|
+
.replace(/\b\w/g, (c) => c.toUpperCase())
|
|
105
|
+
.trim() + "'s Workspace");
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generate URL-safe slug
|
|
109
|
+
*/
|
|
110
|
+
generateSlug(name) {
|
|
111
|
+
const base = name
|
|
112
|
+
.toLowerCase()
|
|
113
|
+
.replace(/[']/g, '')
|
|
114
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
115
|
+
.replace(/^-|-$/g, '');
|
|
116
|
+
const suffix = Math.random().toString(36).substring(2, 6);
|
|
117
|
+
return `${base}-${suffix}`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.WorkspaceService = WorkspaceService;
|
|
121
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dailyautomations/auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Unified SSO authentication for Daily applications",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./client": {
|
|
13
|
+
"types": "./dist/client.d.ts",
|
|
14
|
+
"default": "./dist/client.js"
|
|
15
|
+
},
|
|
16
|
+
"./middleware": {
|
|
17
|
+
"types": "./dist/middleware.d.ts",
|
|
18
|
+
"default": "./dist/middleware.js"
|
|
19
|
+
},
|
|
20
|
+
"./react": {
|
|
21
|
+
"types": "./dist/react.d.ts",
|
|
22
|
+
"default": "./dist/react.js"
|
|
23
|
+
},
|
|
24
|
+
"./hooks": {
|
|
25
|
+
"types": "./dist/hooks/index.d.ts",
|
|
26
|
+
"default": "./dist/hooks/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./types": {
|
|
29
|
+
"types": "./dist/types.d.ts",
|
|
30
|
+
"default": "./dist/types.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc",
|
|
39
|
+
"watch": "tsc --watch",
|
|
40
|
+
"test": "vitest",
|
|
41
|
+
"test:coverage": "vitest --coverage",
|
|
42
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
43
|
+
"typecheck": "tsc --noEmit"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"daily",
|
|
47
|
+
"auth",
|
|
48
|
+
"sso",
|
|
49
|
+
"supabase",
|
|
50
|
+
"authentication"
|
|
51
|
+
],
|
|
52
|
+
"author": "DailyX Engineering Team",
|
|
53
|
+
"license": "UNLICENSED",
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@supabase/supabase-js": "^2.0.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^20.11.0",
|
|
59
|
+
"@types/react": "^18.2.0",
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
61
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
62
|
+
"eslint": "^8.56.0",
|
|
63
|
+
"typescript": "^5.3.3",
|
|
64
|
+
"vitest": "^1.2.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"@supabase/supabase-js": "^2.0.0",
|
|
68
|
+
"react": ">=18.0.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependenciesMeta": {
|
|
71
|
+
"react": {
|
|
72
|
+
"optional": true
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|