[TSM.ID].[11031972] PXE : Platform X Ecosystem I [118 Module -LIVE-]
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
/**
|
||||
* QUANTUM CAPABILITY ORCHESTRATOR v2.0 (STRENGTHENED)
|
||||
*
|
||||
* Logic Tier tertinggi untuk orkestrasi JUMPA.ID Multiverse.
|
||||
* Menangani resolusi konflik, grace period, dan pemetaan 101 modul secara granular.
|
||||
*/
|
||||
|
||||
export type LicenseState = 'GRANTED' | 'UPSELL' | 'HIDDEN';
|
||||
|
||||
export interface QuantumCapabilities {
|
||||
status: 'ACTIVE' | 'SUSPENDED' | 'GRACE_PERIOD';
|
||||
|
||||
// VIDEO ENGINE (XCU)
|
||||
video: {
|
||||
codec: 'AV1' | 'HEVC' | 'VP9' | 'VP8';
|
||||
transport: 'MOQ' | 'WEBTRANSPORT' | 'WEBRTC';
|
||||
maxResolution: '4K' | '2K' | '1080p' | '720p';
|
||||
fps: 30 | 60 | 120;
|
||||
features: {
|
||||
svc: boolean;
|
||||
onPremGateway: boolean;
|
||||
ebpfBypass: boolean;
|
||||
autopilot: boolean;
|
||||
multicam: boolean;
|
||||
recording: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
// CHAT ENGINE (XTM)
|
||||
chat: {
|
||||
encryption: 'E2EE_QUANTUM' | 'E2EE_STANDARD' | 'NONE';
|
||||
vaultStorageGB: number;
|
||||
retentionDays: number;
|
||||
features: {
|
||||
omniBrainAI: boolean;
|
||||
selfDestruct: boolean;
|
||||
biometric: boolean;
|
||||
fileLarge: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
// IDENTITY & ACCESS (IAM)
|
||||
iam: {
|
||||
branding: {
|
||||
enabled: boolean;
|
||||
customDomain: boolean;
|
||||
};
|
||||
security: {
|
||||
sso: boolean;
|
||||
ipWhitelist: boolean;
|
||||
auditLog: boolean;
|
||||
killswitch: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
// UI SOVEREIGNTY MATRIX (JVC/JC)
|
||||
// Dynamic Record: Mendukung tak terbatas injeksi DNA UI dari database tanpa hardcoding
|
||||
ui: Record<string, boolean>;
|
||||
}
|
||||
|
||||
export class QuantumOrchestrator {
|
||||
/**
|
||||
* Memperkuat Logika Resolusi Lisensi.
|
||||
* Menggabungkan Tenant-Level Policy dengan User-Level Overrides.
|
||||
*/
|
||||
static resolve(
|
||||
tenantLicenses: Record<string, string>,
|
||||
userLicenses: Record<string, string> = {},
|
||||
tenantIsActive: boolean = true
|
||||
): QuantumCapabilities {
|
||||
|
||||
// 1. Hard Override: Jika Tenant Suspended, semua fitur mati kecuali Killswitch
|
||||
if (!tenantIsActive) {
|
||||
return this.generateSuspendedState(tenantLicenses);
|
||||
}
|
||||
|
||||
// 2. Merge Logic: User license overrides tenant license unless tenant blocks it
|
||||
const merged = { ...tenantLicenses };
|
||||
for (const key in userLicenses) {
|
||||
if (tenantLicenses[key] !== 'HIDDEN') {
|
||||
merged[key] = userLicenses[key];
|
||||
}
|
||||
}
|
||||
|
||||
const isGranted = (key: string) => merged[key] === 'GRANTED';
|
||||
|
||||
return {
|
||||
status: 'ACTIVE',
|
||||
|
||||
video: {
|
||||
codec: isGranted('xcu.codec.av1') ? 'AV1' :
|
||||
isGranted('xcu.codec.hevc') ? 'HEVC' :
|
||||
isGranted('xcu.codec.vp9') ? 'VP9' : 'VP8',
|
||||
|
||||
transport: isGranted('xcu.transport.moq') ? 'MOQ' :
|
||||
isGranted('xcu.transport.quic') ? 'WEBTRANSPORT' : 'WEBRTC',
|
||||
|
||||
maxResolution: isGranted('xcu.codec.av1') ? '4K' :
|
||||
isGranted('xcu.codec.hevc') ? '2K' : '1080p',
|
||||
|
||||
fps: isGranted('xcu.feature.screenshare_high') ? 60 : 30,
|
||||
|
||||
features: {
|
||||
svc: isGranted('xcu.feature.svc'),
|
||||
onPremGateway: isGranted('xcu.feature.onprem'),
|
||||
ebpfBypass: isGranted('xcu.feature.ebpf'),
|
||||
autopilot: isGranted('xcu.feature.autopilot'),
|
||||
multicam: isGranted('xcu.feature.multicam'),
|
||||
recording: isGranted('xcu.feature.recording'),
|
||||
}
|
||||
},
|
||||
|
||||
chat: {
|
||||
encryption: isGranted('xtm.security.quantum') ? 'E2EE_QUANTUM' :
|
||||
isGranted('xtm.security.e2ee') ? 'E2EE_STANDARD' : 'NONE',
|
||||
|
||||
vaultStorageGB: isGranted('xtm.storage.vault') ? 100 : 5,
|
||||
retentionDays: isGranted('xtm.feature.persistence') ? 365 : 30,
|
||||
|
||||
features: {
|
||||
omniBrainAI: isGranted('xtm.ai.interceptor'),
|
||||
selfDestruct: isGranted('xtm.feature.burn'),
|
||||
biometric: isGranted('xtm.security.biometric'),
|
||||
fileLarge: isGranted('xtm.feature.file_large'),
|
||||
}
|
||||
},
|
||||
|
||||
iam: {
|
||||
branding: {
|
||||
enabled: isGranted('iam.feature.branding'),
|
||||
customDomain: isGranted('iam.feature.custom_domain'),
|
||||
},
|
||||
security: {
|
||||
sso: isGranted('iam.auth.sso'),
|
||||
ipWhitelist: isGranted('iam.security.ip_whitelist'),
|
||||
auditLog: isGranted('iam.security.audit_log'),
|
||||
killswitch: isGranted('iam.security.killswitch'),
|
||||
}
|
||||
},
|
||||
|
||||
ui: Object.keys(merged).filter(k => k.startsWith('jvc.ui.') || k.startsWith('ui.')).reduce((acc, key) => {
|
||||
// Expose dynamic UI features by removing the 'jvc.ui.' prefix for simpler frontend access if desired,
|
||||
// or just keep the full key. Using full key to avoid conflicts.
|
||||
acc[key] = isGranted(key);
|
||||
return acc;
|
||||
}, {} as Record<string, boolean>)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* State Khusus untuk Tenant yang disuspensi (Kill-Switch Active)
|
||||
*/
|
||||
private static generateSuspendedState(licenses: Record<string, string>): QuantumCapabilities {
|
||||
return {
|
||||
status: 'SUSPENDED',
|
||||
video: { codec: 'VP8', transport: 'WEBRTC', maxResolution: '720p', fps: 30,
|
||||
features: { svc: false, onPremGateway: false, ebpfBypass: false, autopilot: false, multicam: false, recording: false }
|
||||
},
|
||||
chat: { encryption: 'NONE', vaultStorageGB: 0, retentionDays: 0,
|
||||
features: { omniBrainAI: false, selfDestruct: false, biometric: false, fileLarge: false }
|
||||
},
|
||||
iam: {
|
||||
branding: { enabled: false, customDomain: false },
|
||||
security: { sso: false, ipWhitelist: false, auditLog: false, killswitch: licenses['iam.security.killswitch'] === 'GRANTED' }
|
||||
},
|
||||
ui: Object.keys(licenses).filter(k => k.startsWith('jvc.ui.') || k.startsWith('ui.')).reduce((acc, key) => {
|
||||
acc[key] = false; // Always false in suspended mode
|
||||
return acc;
|
||||
}, {} as Record<string, boolean>)
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user