@gftdcojp/gftd-orm
Version:
Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture
575 lines • 16.2 kB
TypeScript
/**
* Auth0統合 - Auth0 JWTトークンとAuthorization Extension APIとの連携
*/
import { UserPayload } from './types';
/**
* 🏢 Organization API Type Definitions
*/
export interface Organization {
id: string;
name: string;
display_name?: string;
branding?: {
logo_url?: string;
colors?: {
primary?: string;
page_background?: string;
};
};
metadata?: Record<string, any>;
enabled_connections?: Array<{
connection_id: string;
assign_membership_on_login?: boolean;
show_as_button?: boolean;
}>;
}
export interface OrganizationMember {
user_id: string;
name?: string;
email?: string;
picture?: string;
roles?: Array<{
id: string;
name: string;
}>;
}
export interface OrganizationInvitation {
id: string;
inviter: {
name: string;
};
invitee: {
email: string;
};
invitation_url: string;
organization_id: string;
client_id: string;
connection_id?: string;
expires_at: string;
created_at: string;
roles?: string[];
app_metadata?: Record<string, any>;
user_metadata?: Record<string, any>;
}
export interface OrganizationRole {
id: string;
name: string;
description?: string;
}
/**
* Auth0設定
*/
interface Auth0Config {
domain: string;
audience: string;
clientId?: string;
jwksUri?: string;
authorizationExtension?: {
url: string;
clientId: string;
clientSecret: string;
audience: string;
region: 'us-west' | 'europe' | 'australia';
};
}
/**
* Auth0ユーザークレーム
*/
interface Auth0Claims {
sub: string;
email?: string;
email_verified?: boolean;
name?: string;
picture?: string;
nickname?: string;
'https://your-app.com/roles'?: string[];
'https://your-app.com/permissions'?: string[];
'https://your-app.com/tenant_id'?: string;
[key: string]: any;
}
/**
* 🔐 NEW: Authorization Extension API レスポンス型
*/
interface AuthExtensionGroup {
_id: string;
name: string;
description: string;
members?: string[];
mappings?: Array<{
_id: string;
groupName: string;
connectionName: string;
}>;
nested?: string[];
roles?: string[];
}
interface AuthExtensionRole {
_id: string;
name: string;
description: string;
applicationId: string;
permissions?: string[];
}
interface AuthExtensionPolicy {
groups: string[];
roles: string[];
permissions: string[];
}
/**
* Auth0統合マネージャー
*/
export declare class Auth0Integration {
private static instance;
private config;
private jwksClient;
private extensionAccessToken;
private extensionTokenExpiry;
private constructor();
/**
* 🔐 NEW: Extension URLを構築
*/
private buildExtensionUrl;
/**
* シングルトンインスタンスを取得
*/
static getInstance(customConfig?: Partial<Auth0Config>): Auth0Integration;
/**
* 設定を更新
*/
private updateConfig;
/**
* 🔐 NEW: Machine-to-Machine認証でExtension Access Tokenを取得
*/
private getExtensionAccessToken;
/**
* 🔐 NEW: Extension APIリクエストヘルパー
*/
private extensionApiRequest;
/**
* Auth0 JWTトークンを検証
*/
verifyAuth0Token(token: string): Promise<Auth0Claims | null>;
/**
* Auth0クレームをGFTD ORMユーザーペイロードに変換
*/
mapAuth0ToUserPayload(auth0Claims: Auth0Claims): UserPayload;
/**
* Auth0トークンからGFTD ORMユーザーを認証
*/
authenticateWithAuth0(token: string): Promise<{
success: boolean;
user?: UserPayload;
error?: string;
}>;
/**
* Auth0権限をチェック
*/
checkAuth0Permission(user: UserPayload, permission: string): boolean;
/**
* Auth0ロールをチェック
*/
checkAuth0Role(user: UserPayload, role: string): boolean;
/**
* Auth0のManagement APIを使ってユーザー情報を取得
*/
getAuth0UserInfo(managementToken: string, userId: string): Promise<any>;
/**
* Auth0のManagement APIを使ってユーザーロールを更新
*/
updateAuth0UserRoles(managementToken: string, userId: string, roles: string[]): Promise<void>;
/**
* �� NEW: Extension API - 全グループを取得
*/
getGroups(): Promise<{
groups: AuthExtensionGroup[];
total: number;
}>;
/**
* 🔐 NEW: Extension API - 特定のグループを取得
*/
getGroup(groupId: string, expand?: boolean): Promise<AuthExtensionGroup>;
/**
* 🔐 NEW: Extension API - グループを作成
*/
createGroup(name: string, description?: string): Promise<AuthExtensionGroup>;
/**
* 🔐 NEW: Extension API - グループを更新
*/
updateGroup(groupId: string, updates: Partial<AuthExtensionGroup>): Promise<AuthExtensionGroup>;
/**
* 🔐 NEW: Extension API - グループを削除
*/
deleteGroup(groupId: string): Promise<void>;
/**
* 🔐 NEW: Extension API - 全ロールを取得
*/
getRoles(): Promise<AuthExtensionRole[]>;
/**
* 🔐 NEW: Extension API - 特定のロールを取得
*/
getRole(roleId: string): Promise<AuthExtensionRole>;
/**
* 🔐 NEW: Extension API - ロールを作成
*/
createRole(name: string, description?: string, applicationId?: string): Promise<AuthExtensionRole>;
/**
* 🔐 NEW: Extension API - ロールを更新
*/
updateRole(roleId: string, updates: Partial<AuthExtensionRole>): Promise<AuthExtensionRole>;
/**
* 🔐 NEW: Extension API - ロールを削除
*/
deleteRole(roleId: string): Promise<void>;
/**
* 🔐 NEW: Extension API - ユーザーのロールを取得
*/
getUserRoles(userId: string): Promise<AuthExtensionRole[]>;
/**
* 🔐 NEW: Extension API - ユーザーにロールを追加
*/
addUserToRoles(userId: string, roleIds: string[]): Promise<void>;
/**
* 🔐 NEW: Extension API - ユーザーからロールを削除
*/
removeUserFromRoles(userId: string, roleIds: string[]): Promise<void>;
/**
* 🔐 NEW: Extension API - ユーザーのロールを計算(グループ含む)
*/
calculateUserRoles(userId: string): Promise<AuthExtensionRole[]>;
/**
* 🔐 NEW: Extension API - 認可ポリシーを実行
*/
executeAuthorizationPolicy(userId: string, clientId: string, connectionName: string, groups?: string[]): Promise<AuthExtensionPolicy>;
/**
* 🔐 NEW: Extension API - ユーザーのグループを取得
*/
getUserGroups(userId: string): Promise<AuthExtensionGroup[]>;
/**
* 🔐 NEW: Extension API - ユーザーをグループに追加
*/
addUserToGroups(userId: string, groupIds: string[]): Promise<void>;
/**
* 🔐 NEW: Extension API - ユーザーをグループから削除
*/
removeUserFromGroups(userId: string, groupIds: string[]): Promise<void>;
/**
* Auth0 Universal Login URLを生成
*/
buildLoginUrl(options: {
redirectUri: string;
responseType?: 'code' | 'token';
scope?: string;
state?: string;
nonce?: string;
connection?: string;
prompt?: 'login' | 'consent' | 'select_account';
}): string;
/**
* Auth0 Universal Signup URLを生成
*/
buildSignupUrl(options: {
redirectUri: string;
responseType?: 'code' | 'token';
scope?: string;
state?: string;
nonce?: string;
connection?: string;
}): string;
/**
* Auth0 Logout URLを生成
*/
buildLogoutUrl(options: {
returnTo: string;
clientId?: string;
}): string;
/**
* Auth0 Password Reset URLを生成
*/
buildPasswordResetUrl(options: {
email: string;
connection?: string;
}): string;
/**
* Authorization Codeを使ってTokenを取得
*/
exchangeCodeForToken(options: {
code: string;
redirectUri: string;
codeVerifier?: string;
clientSecret?: string;
}): Promise<{
access_token: string;
id_token: string;
token_type: string;
expires_in: number;
scope: string;
refresh_token?: string;
}>;
/**
* Refresh Tokenを使って新しいAccess Tokenを取得
*/
refreshAccessToken(refreshToken: string): Promise<{
access_token: string;
id_token: string;
token_type: string;
expires_in: number;
scope: string;
}>;
/**
* Management APIアクセストークンを取得
*/
getManagementApiToken(): Promise<string>;
/**
* Management APIを使ってユーザーを作成
*/
createUser(options: {
email: string;
password: string;
name?: string;
connection?: string;
email_verified?: boolean;
user_metadata?: any;
app_metadata?: any;
}): Promise<any>;
/**
* Management APIを使ってユーザーを更新
*/
updateUser(userId: string, updates: {
email?: string;
name?: string;
password?: string;
user_metadata?: any;
app_metadata?: any;
email_verified?: boolean;
}): Promise<any>;
/**
* Management APIを使ってユーザーを削除
*/
deleteUser(userId: string): Promise<void>;
/**
* パスワードリセットメールを送信
*/
sendPasswordResetEmail(email: string, connection?: string): Promise<void>;
/**
* Email verification を送信
*/
sendEmailVerification(userId: string): Promise<void>;
/**
* ユーザーのプロファイルを取得
*/
getUserProfile(userId: string): Promise<any>;
/**
* ユーザーリストを取得
*/
getUsers(options?: {
page?: number;
per_page?: number;
search?: string;
sort?: string;
connection?: string;
}): Promise<any[]>;
/**
* PKCEチャレンジを生成
*/
generatePKCEChallenge(): {
codeVerifier: string;
codeChallenge: string;
};
/**
* ランダム文字列を生成
*/
private generateRandomString;
/**
* SHA256ハッシュを計算
*/
private sha256;
/**
* Base64URLエンコード
*/
private base64URLEncode;
/**
* 🏢 Organizations一覧を取得
*/
getOrganizations(options?: {
page?: number;
per_page?: number;
include_totals?: boolean;
from?: string;
take?: number;
}): Promise<{
organizations: Organization[];
total?: number;
}>;
/**
* 🏢 特定のOrganizationを取得
*/
getOrganization(organizationId: string): Promise<Organization>;
/**
* 🏢 Organizationを作成
*/
createOrganization(organization: {
name: string;
display_name?: string;
branding?: {
logo_url?: string;
colors?: {
primary?: string;
page_background?: string;
};
};
metadata?: Record<string, any>;
}): Promise<Organization>;
/**
* 🏢 Organizationを更新
*/
updateOrganization(organizationId: string, updates: {
name?: string;
display_name?: string;
branding?: {
logo_url?: string;
colors?: {
primary?: string;
page_background?: string;
};
};
metadata?: Record<string, any>;
}): Promise<Organization>;
/**
* 🏢 Organizationを削除
*/
deleteOrganization(organizationId: string): Promise<void>;
/**
* 🏢 Organization Membersを取得
*/
getOrganizationMembers(organizationId: string, options?: {
page?: number;
per_page?: number;
include_totals?: boolean;
from?: string;
take?: number;
}): Promise<{
members: OrganizationMember[];
total?: number;
}>;
/**
* 🏢 OrganizationにMemberを追加
*/
addOrganizationMembers(organizationId: string, userIds: string[]): Promise<void>;
/**
* 🏢 OrganizationからMemberを削除
*/
removeOrganizationMembers(organizationId: string, userIds: string[]): Promise<void>;
/**
* 🏢 Organization Invitationを作成(メンバー招待)
*/
createOrganizationInvitation(organizationId: string, invitation: {
inviter: {
name: string;
};
invitee: {
email: string;
};
client_id: string;
connection_id?: string;
app_metadata?: Record<string, any>;
user_metadata?: Record<string, any>;
roles?: string[];
send_invitation_email?: boolean;
ttl_sec?: number;
}): Promise<OrganizationInvitation>;
/**
* 🏢 Organization Invitationsを取得
*/
getOrganizationInvitations(organizationId: string, options?: {
page?: number;
per_page?: number;
include_totals?: boolean;
sort?: string;
from?: string;
take?: number;
}): Promise<{
invitations: OrganizationInvitation[];
total?: number;
}>;
/**
* 🏢 Organization Invitationを取得
*/
getOrganizationInvitation(organizationId: string, invitationId: string): Promise<OrganizationInvitation>;
/**
* 🏢 Organization Invitationを削除
*/
deleteOrganizationInvitation(organizationId: string, invitationId: string): Promise<void>;
/**
* 🏢 Organization-scoped Access Tokenを取得
*/
getOrganizationAccessToken(options: {
organizationId: string;
audience?: string;
scope?: string;
grant_type?: 'client_credentials';
}): Promise<{
access_token: string;
token_type: string;
expires_in: number;
scope?: string;
}>;
/**
* 🏢 Organization Rolesを取得
*/
getOrganizationRoles(organizationId: string): Promise<OrganizationRole[]>;
/**
* 🏢 Organization Member Rolesを取得
*/
getOrganizationMemberRoles(organizationId: string, userId: string): Promise<OrganizationRole[]>;
/**
* 🏢 Organization Memberにロールを追加
*/
addOrganizationMemberRoles(organizationId: string, userId: string, roleIds: string[]): Promise<void>;
/**
* 🏢 Organization Memberからロールを削除
*/
removeOrganizationMemberRoles(organizationId: string, userId: string, roleIds: string[]): Promise<void>;
}
/**
* Express.js ミドルウェア: Auth0認証
*/
export declare function auth0AuthMiddleware(options?: {
requireAuth?: boolean;
requiredPermissions?: string[];
requiredRoles?: string[];
}): (req: any, res: any, next: any) => Promise<any>;
/**
* Auth0統合のヘルパー関数
*/
export declare const auth0: {
/**
* 統合マネージャーのインスタンスを取得
*/
manager: () => Auth0Integration;
/**
* Auth0トークンで認証
*/
authenticate: (token: string, customConfig?: Partial<Auth0Config>) => Promise<{
success: boolean;
user?: UserPayload;
error?: string;
}>;
/**
* 権限チェック
*/
checkPermission: (user: UserPayload, permission: string) => boolean;
/**
* ロールチェック
*/
checkRole: (user: UserPayload, role: string) => boolean;
/**
* トークン検証
*/
verifyToken: (token: string) => Promise<Auth0Claims | null>;
/**
* ユーザー情報取得
*/
getUserInfo: (managementToken: string, userId: string) => Promise<any>;
};
export {};
//# sourceMappingURL=auth0-integration.d.ts.map