@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,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth useUser Hook
|
|
4
|
+
* Simplified user access hook
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.useUser = useUser;
|
|
8
|
+
exports.useRequiredUser = useRequiredUser;
|
|
9
|
+
const useAuth_js_1 = require("./useAuth.js");
|
|
10
|
+
/**
|
|
11
|
+
* Simplified hook for accessing current user info
|
|
12
|
+
* Use this when you only need user data, not auth actions
|
|
13
|
+
*/
|
|
14
|
+
function useUser() {
|
|
15
|
+
const { user, workspace, isLoading, isAuthenticated } = (0, useAuth_js_1.useAuth)();
|
|
16
|
+
return {
|
|
17
|
+
user,
|
|
18
|
+
workspace,
|
|
19
|
+
email: user?.email || null,
|
|
20
|
+
displayName: user?.user_metadata?.displayName || null,
|
|
21
|
+
avatarUrl: user?.user_metadata?.avatarUrl || null,
|
|
22
|
+
isLoading,
|
|
23
|
+
isAuthenticated,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hook that throws if user is not authenticated
|
|
28
|
+
* Use in components that require authentication
|
|
29
|
+
*/
|
|
30
|
+
function useRequiredUser() {
|
|
31
|
+
const data = useUser();
|
|
32
|
+
if (!data.isAuthenticated || !data.user) {
|
|
33
|
+
throw new Error('User must be authenticated to access this component');
|
|
34
|
+
}
|
|
35
|
+
if (!data.workspace) {
|
|
36
|
+
throw new Error('User must have a workspace to access this component');
|
|
37
|
+
}
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=useUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUser.js","sourceRoot":"","sources":["../../src/hooks/useUser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA2BH,0BAYC;AAMD,0CAkBC;AA7DD,6CAAuC;AAqBvC;;;GAGG;AACH,SAAgB,OAAO;IACrB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAA,oBAAO,GAAE,CAAC;IAElE,OAAO;QACL,IAAI;QACJ,SAAS;QACT,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;QAC1B,WAAW,EAAG,IAAI,EAAE,aAAa,EAAE,WAAsB,IAAI,IAAI;QACjE,SAAS,EAAG,IAAI,EAAE,aAAa,EAAE,SAAoB,IAAI,IAAI;QAC7D,SAAS;QACT,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAI7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAGN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth Identity Service
|
|
3
|
+
* Cross-app identity resolution and management
|
|
4
|
+
*/
|
|
5
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
6
|
+
import type { IdentityCheckResult, IdentityInfo, AppSlug } from './types.js';
|
|
7
|
+
export declare class IdentityService {
|
|
8
|
+
private supabase;
|
|
9
|
+
constructor(supabase: SupabaseClient);
|
|
10
|
+
/**
|
|
11
|
+
* Check if an email exists in the system
|
|
12
|
+
* Returns identity info if found
|
|
13
|
+
*/
|
|
14
|
+
checkEmail(email: string): Promise<IdentityCheckResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Get full identity info for a user
|
|
17
|
+
* Includes workspaces, app access, and linked providers
|
|
18
|
+
*/
|
|
19
|
+
getIdentityInfo(userId: string): Promise<IdentityInfo | undefined>;
|
|
20
|
+
/**
|
|
21
|
+
* Get all workspaces a user belongs to
|
|
22
|
+
*/
|
|
23
|
+
private getUserWorkspaces;
|
|
24
|
+
/**
|
|
25
|
+
* Get all apps user has registered for
|
|
26
|
+
*/
|
|
27
|
+
private getUserAppAccess;
|
|
28
|
+
/**
|
|
29
|
+
* Extract OAuth providers from Supabase metadata
|
|
30
|
+
*/
|
|
31
|
+
private extractProviders;
|
|
32
|
+
/**
|
|
33
|
+
* Check if user has access to a specific app
|
|
34
|
+
*/
|
|
35
|
+
hasAppAccess(userId: string, appSlug: AppSlug): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Merge settings from user's other apps
|
|
38
|
+
* Used when provisioning for a new app
|
|
39
|
+
*/
|
|
40
|
+
getMergedUserSettings(userId: string): Promise<Record<string, unknown>>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EAGZ,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAE5C;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsB7D;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA+BxE;;OAEG;YACW,iBAAiB;IAmC/B;;OAEG;YACW,gBAAgB;IA6B9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtE;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAyB9E"}
|
package/dist/identity.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth Identity Service
|
|
4
|
+
* Cross-app identity resolution and management
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.IdentityService = void 0;
|
|
8
|
+
class IdentityService {
|
|
9
|
+
supabase;
|
|
10
|
+
constructor(supabase) {
|
|
11
|
+
this.supabase = supabase;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if an email exists in the system
|
|
15
|
+
* Returns identity info if found
|
|
16
|
+
*/
|
|
17
|
+
async checkEmail(email) {
|
|
18
|
+
// Query auth.users for email
|
|
19
|
+
const { data: users, error } = await this.supabase
|
|
20
|
+
.from('auth.users')
|
|
21
|
+
.select('id, email, created_at, raw_app_meta_data')
|
|
22
|
+
.eq('email', email.toLowerCase())
|
|
23
|
+
.limit(1);
|
|
24
|
+
if (error || !users || users.length === 0) {
|
|
25
|
+
return { exists: false };
|
|
26
|
+
}
|
|
27
|
+
const user = users[0];
|
|
28
|
+
const identity = await this.getIdentityInfo(user.id);
|
|
29
|
+
return {
|
|
30
|
+
exists: true,
|
|
31
|
+
identity,
|
|
32
|
+
linkedProviders: identity?.providers,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get full identity info for a user
|
|
37
|
+
* Includes workspaces, app access, and linked providers
|
|
38
|
+
*/
|
|
39
|
+
async getIdentityInfo(userId) {
|
|
40
|
+
// Get user info
|
|
41
|
+
const { data: user, error: userError } = await this.supabase
|
|
42
|
+
.from('auth.users')
|
|
43
|
+
.select('id, email, created_at, raw_app_meta_data')
|
|
44
|
+
.eq('id', userId)
|
|
45
|
+
.single();
|
|
46
|
+
if (userError || !user) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
// Get workspaces
|
|
50
|
+
const workspaces = await this.getUserWorkspaces(userId);
|
|
51
|
+
// Get app access
|
|
52
|
+
const appAccess = await this.getUserAppAccess(userId);
|
|
53
|
+
// Extract linked providers from metadata
|
|
54
|
+
const providers = this.extractProviders(user.raw_app_meta_data);
|
|
55
|
+
return {
|
|
56
|
+
userId: user.id,
|
|
57
|
+
email: user.email,
|
|
58
|
+
providers,
|
|
59
|
+
workspaces,
|
|
60
|
+
appAccess,
|
|
61
|
+
createdAt: new Date(user.created_at),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get all workspaces a user belongs to
|
|
66
|
+
*/
|
|
67
|
+
async getUserWorkspaces(userId) {
|
|
68
|
+
// Get memberships
|
|
69
|
+
const { data: memberships, error: memberError } = await this.supabase
|
|
70
|
+
.from('daily_core.workspace_members')
|
|
71
|
+
.select('workspace_id, role')
|
|
72
|
+
.eq('user_id', userId);
|
|
73
|
+
if (memberError || !memberships || memberships.length === 0) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const workspaceIds = memberships.map((m) => m.workspace_id);
|
|
77
|
+
// Get workspace details
|
|
78
|
+
const { data: workspaces, error: wsError } = await this.supabase
|
|
79
|
+
.from('daily_core.workspaces')
|
|
80
|
+
.select('id, name, slug')
|
|
81
|
+
.in('id', workspaceIds);
|
|
82
|
+
if (wsError || !workspaces) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
// Combine data
|
|
86
|
+
return workspaces.map((ws) => {
|
|
87
|
+
const membership = memberships.find((m) => m.workspace_id === ws.id);
|
|
88
|
+
return {
|
|
89
|
+
id: ws.id,
|
|
90
|
+
name: ws.name,
|
|
91
|
+
slug: ws.slug,
|
|
92
|
+
role: (membership?.role || 'member'),
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get all apps user has registered for
|
|
98
|
+
*/
|
|
99
|
+
async getUserAppAccess(userId) {
|
|
100
|
+
// Get user's workspaces first
|
|
101
|
+
const { data: memberships, error: memberError } = await this.supabase
|
|
102
|
+
.from('daily_core.workspace_members')
|
|
103
|
+
.select('workspace_id')
|
|
104
|
+
.eq('user_id', userId);
|
|
105
|
+
if (memberError || !memberships || memberships.length === 0) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const workspaceIds = memberships.map((m) => m.workspace_id);
|
|
109
|
+
// Get app registrations for those workspaces
|
|
110
|
+
const { data: registrations, error: regError } = await this.supabase
|
|
111
|
+
.from('daily_core.app_registrations')
|
|
112
|
+
.select('app_slug')
|
|
113
|
+
.in('workspace_id', workspaceIds)
|
|
114
|
+
.eq('enabled', true);
|
|
115
|
+
if (regError || !registrations) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
// Return unique app slugs
|
|
119
|
+
const apps = new Set(registrations.map((r) => r.app_slug));
|
|
120
|
+
return Array.from(apps);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract OAuth providers from Supabase metadata
|
|
124
|
+
*/
|
|
125
|
+
extractProviders(metadata) {
|
|
126
|
+
if (!metadata)
|
|
127
|
+
return [];
|
|
128
|
+
const providers = [];
|
|
129
|
+
// Supabase stores provider info in various places
|
|
130
|
+
if (metadata.provider) {
|
|
131
|
+
providers.push(metadata.provider);
|
|
132
|
+
}
|
|
133
|
+
if (Array.isArray(metadata.providers)) {
|
|
134
|
+
providers.push(...metadata.providers);
|
|
135
|
+
}
|
|
136
|
+
// Check for specific provider flags
|
|
137
|
+
if (metadata.google_id)
|
|
138
|
+
providers.push('google');
|
|
139
|
+
if (metadata.github_id)
|
|
140
|
+
providers.push('github');
|
|
141
|
+
if (metadata.azure_id)
|
|
142
|
+
providers.push('azure');
|
|
143
|
+
return [...new Set(providers)];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check if user has access to a specific app
|
|
147
|
+
*/
|
|
148
|
+
async hasAppAccess(userId, appSlug) {
|
|
149
|
+
const apps = await this.getUserAppAccess(userId);
|
|
150
|
+
return apps.includes(appSlug);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Merge settings from user's other apps
|
|
154
|
+
* Used when provisioning for a new app
|
|
155
|
+
*/
|
|
156
|
+
async getMergedUserSettings(userId) {
|
|
157
|
+
// Get user's first workspace
|
|
158
|
+
const { data: memberships, error: memberError } = await this.supabase
|
|
159
|
+
.from('daily_core.workspace_members')
|
|
160
|
+
.select('workspace_id')
|
|
161
|
+
.eq('user_id', userId)
|
|
162
|
+
.limit(1);
|
|
163
|
+
if (memberError || !memberships || memberships.length === 0) {
|
|
164
|
+
return {};
|
|
165
|
+
}
|
|
166
|
+
// Get workspace settings
|
|
167
|
+
const { data: workspace, error: wsError } = await this.supabase
|
|
168
|
+
.from('daily_core.workspaces')
|
|
169
|
+
.select('settings')
|
|
170
|
+
.eq('id', memberships[0].workspace_id)
|
|
171
|
+
.single();
|
|
172
|
+
if (wsError || !workspace) {
|
|
173
|
+
return {};
|
|
174
|
+
}
|
|
175
|
+
return workspace.settings || {};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.IdentityService = IdentityService;
|
|
179
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAWH,MAAa,eAAe;IACN;IAApB,YAAoB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAAG,CAAC;IAEhD;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,6BAA6B;QAC7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAC/C,IAAI,CAAC,YAAY,CAAC;aAClB,MAAM,CAAC,0CAA0C,CAAC;aAClD,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;aAChC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEZ,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,QAAQ;YACR,eAAe,EAAE,QAAQ,EAAE,SAAS;SACrC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,gBAAgB;QAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aACzD,IAAI,CAAC,YAAY,CAAC;aAClB,MAAM,CAAC,0CAA0C,CAAC;aAClD,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;aAChB,MAAM,EAAE,CAAC;QAEZ,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExD,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEtD,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAmD,CAAC,CAAC;QAElG,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS;YACT,UAAU;YACV,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;SACrC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAC5C,kBAAkB;QAClB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAClE,IAAI,CAAC,8BAA8B,CAAC;aACpC,MAAM,CAAC,oBAAoB,CAAC;aAC5B,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEzB,IAAI,WAAW,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE5D,wBAAwB;QACxB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAC7D,IAAI,CAAC,uBAAuB,CAAC;aAC7B,MAAM,CAAC,gBAAgB,CAAC;aACxB,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE1B,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,eAAe;QACf,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACrE,OAAO;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,IAAI,QAAQ,CAA0B;aAC9D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,MAAc;QAC3C,8BAA8B;QAC9B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAClE,IAAI,CAAC,8BAA8B,CAAC;aACpC,MAAM,CAAC,cAAc,CAAC;aACtB,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEzB,IAAI,WAAW,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE5D,6CAA6C;QAC7C,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aACjE,IAAI,CAAC,8BAA8B,CAAC;aACpC,MAAM,CAAC,UAAU,CAAC;aAClB,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;aAChC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEvB,IAAI,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAmB,CAAC,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAwC;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,SAAS,GAAoB,EAAE,CAAC;QAEtC,kDAAkD;QAClD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAyB,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,GAAI,QAAQ,CAAC,SAA6B,CAAC,CAAC;QAC7D,CAAC;QAED,oCAAoC;QACpC,IAAI,QAAQ,CAAC,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,OAAgB;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CAAC,MAAc;QACxC,6BAA6B;QAC7B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAClE,IAAI,CAAC,8BAA8B,CAAC;aACpC,MAAM,CAAC,cAAc,CAAC;aACtB,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,CAAC,CAAC,CAAC;QAEZ,IAAI,WAAW,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,yBAAyB;QACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ;aAC5D,IAAI,CAAC,uBAAuB,CAAC;aAC7B,MAAM,CAAC,UAAU,CAAC;aAClB,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;aACrC,MAAM,EAAE,CAAC;QAEZ,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAQ,SAAS,CAAC,QAAoC,IAAI,EAAE,CAAC;IAC/D,CAAC;CACF;AApMD,0CAoMC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth
|
|
3
|
+
* Standard auth toolkit for Daily applications
|
|
4
|
+
*
|
|
5
|
+
* @package @daily/auth
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export { DailyAuth } from './client.js';
|
|
9
|
+
export { WorkspaceService } from './workspace.js';
|
|
10
|
+
export { createAuthMiddleware, expressAuthMiddleware, fastifyAuthMiddleware, validateAuthToken, type MiddlewareContext, } from './middleware.js';
|
|
11
|
+
export { DailyAuthError } from './errors.js';
|
|
12
|
+
export type { WorkspaceRole, OAuthProvider, DailyAuthOptions, SignUpParams, SignInParams, OAuthParams, ResetPasswordParams, AuthResult, WorkspaceInfo, AuthErrorInfo, AuthErrorCode, JWTPayload, AuthMiddlewareOptions, AuthenticatedRequest, AuthState, AuthActions, UseAuthReturn, } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAEV,aAAa,EACb,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,mBAAmB,EAEnB,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EAEb,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EAEpB,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth
|
|
4
|
+
* Standard auth toolkit for Daily applications
|
|
5
|
+
*
|
|
6
|
+
* @package @daily/auth
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DailyAuthError = exports.validateAuthToken = exports.fastifyAuthMiddleware = exports.expressAuthMiddleware = exports.createAuthMiddleware = exports.WorkspaceService = exports.DailyAuth = void 0;
|
|
11
|
+
// Core client
|
|
12
|
+
var client_js_1 = require("./client.js");
|
|
13
|
+
Object.defineProperty(exports, "DailyAuth", { enumerable: true, get: function () { return client_js_1.DailyAuth; } });
|
|
14
|
+
// Services
|
|
15
|
+
var workspace_js_1 = require("./workspace.js");
|
|
16
|
+
Object.defineProperty(exports, "WorkspaceService", { enumerable: true, get: function () { return workspace_js_1.WorkspaceService; } });
|
|
17
|
+
// Middleware
|
|
18
|
+
var middleware_js_1 = require("./middleware.js");
|
|
19
|
+
Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return middleware_js_1.createAuthMiddleware; } });
|
|
20
|
+
Object.defineProperty(exports, "expressAuthMiddleware", { enumerable: true, get: function () { return middleware_js_1.expressAuthMiddleware; } });
|
|
21
|
+
Object.defineProperty(exports, "fastifyAuthMiddleware", { enumerable: true, get: function () { return middleware_js_1.fastifyAuthMiddleware; } });
|
|
22
|
+
Object.defineProperty(exports, "validateAuthToken", { enumerable: true, get: function () { return middleware_js_1.validateAuthToken; } });
|
|
23
|
+
// Errors
|
|
24
|
+
var errors_js_1 = require("./errors.js");
|
|
25
|
+
Object.defineProperty(exports, "DailyAuthError", { enumerable: true, get: function () { return errors_js_1.DailyAuthError; } });
|
|
26
|
+
// React hooks available via '@daily/auth/react'
|
|
27
|
+
// import { AuthProvider, useAuth, useUser, useAuthClient } from '@daily/auth/react';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,cAAc;AACd,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,WAAW;AACX,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AAEzB,aAAa;AACb,iDAMyB;AALvB,qHAAA,oBAAoB,OAAA;AACpB,sHAAA,qBAAqB,OAAA;AACrB,sHAAA,qBAAqB,OAAA;AACrB,kHAAA,iBAAiB,OAAA;AAInB,SAAS;AACT,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AA4BvB,gDAAgD;AAChD,qFAAqF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth Middleware
|
|
3
|
+
* Server-side JWT validation
|
|
4
|
+
*/
|
|
5
|
+
import { type User } from '@supabase/supabase-js';
|
|
6
|
+
import type { AuthMiddlewareOptions, WorkspaceInfo } from './types.js';
|
|
7
|
+
export interface MiddlewareContext {
|
|
8
|
+
user: User;
|
|
9
|
+
workspaces: WorkspaceInfo[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create auth middleware for Express/Fastify/etc.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createAuthMiddleware(options: AuthMiddlewareOptions): (req: {
|
|
15
|
+
headers: Record<string, string | undefined>;
|
|
16
|
+
path?: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
}, res: {
|
|
19
|
+
status?: (code: number) => {
|
|
20
|
+
json: (body: unknown) => void;
|
|
21
|
+
};
|
|
22
|
+
}, next?: () => void | Promise<void>) => Promise<MiddlewareContext | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Express-style middleware wrapper
|
|
25
|
+
*/
|
|
26
|
+
export declare function expressAuthMiddleware(options: AuthMiddlewareOptions): (req: {
|
|
27
|
+
headers: Record<string, string | undefined>;
|
|
28
|
+
path: string;
|
|
29
|
+
}, res: {
|
|
30
|
+
status: (code: number) => {
|
|
31
|
+
json: (body: unknown) => void;
|
|
32
|
+
};
|
|
33
|
+
}, next: (err?: Error) => void) => Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Fastify-style middleware wrapper
|
|
36
|
+
*/
|
|
37
|
+
export declare function fastifyAuthMiddleware(options: AuthMiddlewareOptions): (request: {
|
|
38
|
+
headers: Record<string, string | undefined>;
|
|
39
|
+
url: string;
|
|
40
|
+
}, reply: {
|
|
41
|
+
code: (code: number) => {
|
|
42
|
+
send: (body: unknown) => void;
|
|
43
|
+
};
|
|
44
|
+
}) => Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Standalone token validation
|
|
47
|
+
*/
|
|
48
|
+
export declare function validateAuthToken(token: string, options: Pick<AuthMiddlewareOptions, 'supabaseUrl' | 'supabaseServiceKey'>): Promise<User | null>;
|
|
49
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAqC,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,IAoC/D,KAAK;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,KAAK;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,EACrE,OAAO,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAChC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoCrC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,IAIhE,KAAK;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAClE,KAAK;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,EACpE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,mBAQ9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,IAIhE,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrE,OAAO;IAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,mBAUvE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,oBAAoB,CAAC,GACzE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAUtB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @daily/auth Middleware
|
|
4
|
+
* Server-side JWT validation
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createAuthMiddleware = createAuthMiddleware;
|
|
8
|
+
exports.expressAuthMiddleware = expressAuthMiddleware;
|
|
9
|
+
exports.fastifyAuthMiddleware = fastifyAuthMiddleware;
|
|
10
|
+
exports.validateAuthToken = validateAuthToken;
|
|
11
|
+
const supabase_js_1 = require("@supabase/supabase-js");
|
|
12
|
+
const workspace_js_1 = require("./workspace.js");
|
|
13
|
+
/**
|
|
14
|
+
* Create auth middleware for Express/Fastify/etc.
|
|
15
|
+
*/
|
|
16
|
+
function createAuthMiddleware(options) {
|
|
17
|
+
const { supabaseUrl, supabaseServiceKey, publicPaths = [] } = options;
|
|
18
|
+
const supabase = (0, supabase_js_1.createClient)(supabaseUrl, supabaseServiceKey, {
|
|
19
|
+
auth: { autoRefreshToken: false, persistSession: false },
|
|
20
|
+
});
|
|
21
|
+
const workspace = new workspace_js_1.WorkspaceService(supabase);
|
|
22
|
+
const isPublicPath = (path) => {
|
|
23
|
+
return publicPaths.some((p) => {
|
|
24
|
+
if (p.endsWith('*')) {
|
|
25
|
+
return path.startsWith(p.slice(0, -1));
|
|
26
|
+
}
|
|
27
|
+
return path === p;
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const extractToken = (authHeader) => {
|
|
31
|
+
if (!authHeader)
|
|
32
|
+
return null;
|
|
33
|
+
const parts = authHeader.split(' ');
|
|
34
|
+
if (parts.length !== 2 || parts[0].toLowerCase() !== 'bearer') {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return parts[1];
|
|
38
|
+
};
|
|
39
|
+
const validateToken = async (token) => {
|
|
40
|
+
const { data, error } = await supabase.auth.getUser(token);
|
|
41
|
+
if (error || !data.user) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return data.user;
|
|
45
|
+
};
|
|
46
|
+
return async function authMiddleware(req, res, next) {
|
|
47
|
+
const path = req.path || req.url || '';
|
|
48
|
+
if (isPublicPath(path)) {
|
|
49
|
+
if (next)
|
|
50
|
+
await next();
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const token = extractToken(req.headers.authorization || req.headers.Authorization);
|
|
54
|
+
if (!token) {
|
|
55
|
+
if (res.status) {
|
|
56
|
+
res.status(401).json({ error: 'Missing authorization header' });
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const user = await validateToken(token);
|
|
61
|
+
if (!user) {
|
|
62
|
+
if (res.status) {
|
|
63
|
+
res.status(401).json({ error: 'Invalid or expired token' });
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const workspaces = await workspace.getForUser(user.id);
|
|
68
|
+
const context = { user, workspaces };
|
|
69
|
+
req.auth = context;
|
|
70
|
+
if (next)
|
|
71
|
+
await next();
|
|
72
|
+
return context;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Express-style middleware wrapper
|
|
77
|
+
*/
|
|
78
|
+
function expressAuthMiddleware(options) {
|
|
79
|
+
const middleware = createAuthMiddleware(options);
|
|
80
|
+
return async (req, res, next) => {
|
|
81
|
+
try {
|
|
82
|
+
await middleware(req, res, () => next());
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
next(err);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Fastify-style middleware wrapper
|
|
91
|
+
*/
|
|
92
|
+
function fastifyAuthMiddleware(options) {
|
|
93
|
+
const middleware = createAuthMiddleware(options);
|
|
94
|
+
return async (request, reply) => {
|
|
95
|
+
const res = {
|
|
96
|
+
status: (code) => ({
|
|
97
|
+
json: (body) => reply.code(code).send(body),
|
|
98
|
+
}),
|
|
99
|
+
};
|
|
100
|
+
await middleware({ headers: request.headers, path: request.url }, res, undefined);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Standalone token validation
|
|
105
|
+
*/
|
|
106
|
+
async function validateAuthToken(token, options) {
|
|
107
|
+
const supabase = (0, supabase_js_1.createClient)(options.supabaseUrl, options.supabaseServiceKey, {
|
|
108
|
+
auth: { autoRefreshToken: false, persistSession: false },
|
|
109
|
+
});
|
|
110
|
+
const { data, error } = await supabase.auth.getUser(token);
|
|
111
|
+
if (error || !data.user) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return data.user;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,oDA2EC;AAKD,sDAcC;AAKD,sDAeC;AAKD,8CAaC;AAhJD,uDAAqF;AAErF,iDAAkD;AAOlD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAA8B;IACjE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEtE,MAAM,QAAQ,GAAG,IAAA,0BAAY,EAAC,WAAW,EAAE,kBAAkB,EAAE;QAC7D,IAAI,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE;KACzD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,+BAAgB,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;QAC7C,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,UAAmB,EAAiB,EAAE;QAC1D,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAwB,EAAE;QAClE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,KAAK,UAAU,cAAc,CAClC,GAAiF,EACjF,GAAqE,EACrE,IAAiC;QAEjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAEvC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,IAAI;gBAAE,MAAM,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEnF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAEvD,GAA8C,CAAC,IAAI,GAAG,OAAO,CAAC;QAE/D,IAAI,IAAI;YAAE,MAAM,IAAI,EAAE,CAAC;QAEvB,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAA8B;IAClE,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO,KAAK,EACV,GAAkE,EAClE,GAAoE,EACpE,IAA2B,EAC3B,EAAE;QACF,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAY,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAA8B;IAClE,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEjD,OAAO,KAAK,EACV,OAAqE,EACrE,KAAoE,EACpE,EAAE;QACF,MAAM,GAAG,GAAG;YACV,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;gBACzB,IAAI,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aACrD,CAAC;SACH,CAAC;QAEF,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,KAAa,EACb,OAA0E;IAE1E,MAAM,QAAQ,GAAG,IAAA,0BAAY,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,EAAE;QAC7E,IAAI,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE;KACzD,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @daily/auth Provisioning Service
|
|
3
|
+
* Auto-provision workspaces and app registrations for users
|
|
4
|
+
*/
|
|
5
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
6
|
+
import type { AppSlug, WorkspaceInfo, AppRegistrationInfo, ProvisioningResult, ProvisioningOptions } from './types.js';
|
|
7
|
+
export declare class ProvisioningService {
|
|
8
|
+
private supabase;
|
|
9
|
+
private appSlug;
|
|
10
|
+
constructor(supabase: SupabaseClient, appSlug: AppSlug);
|
|
11
|
+
/**
|
|
12
|
+
* Provision a new user with workspace and app registration
|
|
13
|
+
* Called on signup
|
|
14
|
+
*/
|
|
15
|
+
provisionNewUser(userId: string, email: string, options?: ProvisioningOptions): Promise<ProvisioningResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Ensure user has access to current app
|
|
18
|
+
* Creates app_registration if missing (first time on this app)
|
|
19
|
+
*/
|
|
20
|
+
ensureAppAccess(userId: string): Promise<{
|
|
21
|
+
workspace?: WorkspaceInfo;
|
|
22
|
+
appRegistration?: AppRegistrationInfo;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Get all workspaces for a user
|
|
26
|
+
*/
|
|
27
|
+
getUserWorkspaces(userId: string): Promise<WorkspaceInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if app registration exists for workspace
|
|
30
|
+
*/
|
|
31
|
+
getAppRegistration(workspaceId: string): Promise<AppRegistrationInfo | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Generate workspace name from email
|
|
34
|
+
*/
|
|
35
|
+
private generateWorkspaceName;
|
|
36
|
+
/**
|
|
37
|
+
* Generate URL-safe slug from name
|
|
38
|
+
*/
|
|
39
|
+
private generateSlug;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=provisioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../src/provisioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBADP,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,OAAO;IAG1B;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAwF9B;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,SAAS,CAAC,EAAE,aAAa,CAAC;QAC1B,eAAe,CAAC,EAAE,mBAAmB,CAAC;KACvC,CAAC;IA6DF;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmCjE;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAoBtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;OAEG;IACH,OAAO,CAAC,YAAY;CAWrB"}
|