Initial commit: WebDAV-Adapter für Internxt Drive

- Browser-Token-Auth (INXT_TOKEN, INXT_MNEMONIC)
- Phase 1: PROPFIND (Verzeichnis auflisten)
- Drive API + Pfad-Resolver
- Dokumentation: Auth, Architektur, WSL

Made-with: Cursor
This commit is contained in:
2026-02-28 10:54:29 +01:00
commit 7c1866e6fc
15 changed files with 2170 additions and 0 deletions

41
src/internxt-client.js Normal file
View File

@@ -0,0 +1,41 @@
/**
* Internxt API Client Drive API + User Refresh
* Nutzt Browser-Token (INXT_TOKEN) für drive-web Endpoints.
*/
import 'dotenv/config';
import { Storage, Users } from '@internxt/sdk/dist/drive/index.js';
const DRIVE_API_URL = process.env.DRIVE_API_URL || 'https://gateway.internxt.com/drive';
const appDetails = { clientName: 'drive-web', clientVersion: '1.0' };
/**
* Erstellt API-Clients mit aktuellem Token.
* @param {string} token - Bearer Token (xNewToken)
* @returns {{ users: Users, storage: Storage }}
*/
export function createClients(token) {
const apiSecurity = {
token,
unauthorizedCallback: () => {
throw new Error('Token abgelaufen oder ungültig');
},
};
return {
users: Users.client(DRIVE_API_URL, appDetails, apiSecurity),
storage: Storage.client(DRIVE_API_URL, appDetails, apiSecurity),
};
}
/**
* Holt User-Daten inkl. Bridge-Credentials via refreshUser.
* @param {string} token
* @returns {Promise<{ user: object, newToken?: string }>}
*/
export async function refreshUser(token) {
const { users } = createClients(token);
const response = await users.refreshUser();
const user = response?.user ?? response;
return { user, newToken: response?.newToken };
}