Policy Enforcer
Policy Enforcer überwacht die von Teams Manager verwalteten Microsoft-365-Gruppen und Teams, erkennt Änderungen, die gegen Ihre Governance-Richtlinien verstoßen, und behebt sie automatisch oder leitet sie in Microsoft Teams an eine prüfende Person weiter. Die Anwendung liest Änderungsereignisse aus dem Verzeichnis-Audit-Protokoll von Microsoft Entra über Microsoft Graph, gleicht sie mit den in Teams Manager definierten Richtlinien ab und stellt — nur dort, wo ein Administrator eine automatische Behebung konfiguriert hat — den letzten bekannten regelkonformen Wert im Tenant des Kunden wieder her. Die gesamte Verarbeitung läuft in von Solutions2Share betriebenen Azure-Diensten in der EU.
Datenverwaltungspraktiken
Alle Daten werden im Auftrag des Kunden-Tenants verarbeitet und pro Tenant isoliert (siehe Architektur- und Flussdiagramm). Policy Enforcer ist eine Erweiterung von Teams Manager: Richtliniendefinitionen und verwaltete Bereiche werden ausschließlich lesend aus Teams Manager übernommen; Policy Enforcer schreibt nie in Teams Manager. Alle Dienste und Datenspeicher von Policy Enforcer werden in Microsoft-Azure-Rechenzentren betrieben, die Solutions2Share in der Region Germany West Central (EU) nutzt. Die Anmeldung, Microsoft Graph und der Azure Bot Service, der Teams-Nachrichten zustellt, sind globale Microsoft-365-/Azure-Dienste.
Policy Enforcer liest keine Chat- oder Kanalnachrichten, keine E-Mails und keine Dokumentinhalte.
Die Anwendung greift auf folgende Datentypen zu, verarbeitet und speichert sie:
Governance-Konfiguration
Richtliniendefinitionen und verwaltete Bereiche (Microsoft-365-Gruppen-ID, Anzeigename, Vorlagenname und Teams-Manager-Metadatenwerte) aus der Teams-Manager-Instanz des Kunden sowie die Liste der Teams-Manager-Administratoren (Objekt-ID, UPN oder E-Mail-Adresse), anhand derer festgelegt wird, wer Policy Enforcer verwalten darf. Speicherung & Aufbewahrung: Azure SQL Database als Snapshot, der alle 30 Minuten aktualisiert wird; Aufbewahrung für die Laufzeit des Abonnements.
Gruppen-Änderungsereignisse und Verstöße
Gruppenverwaltungsereignisse aus dem Verzeichnis-Audit-Protokoll, ausschließlich für verwaltete Bereiche: die geänderte Eigenschaft (Team-Name, Sichtbarkeit, Vertraulichkeitsbezeichnung, Besitzer, Mitglieder), ihr alter und neuer Wert sowie die auslösende Person (UPN bzw. bei App-Änderungen der Anwendungsname). Ein erkannter Richtlinienverstoß wird zusammen mit seinem Bearbeitungsstatus, der prüfenden Person (Objekt-ID) und einem optionalen Kommentar gespeichert. Speicherung & Aufbewahrung: Azure SQL Database für die Laufzeit des Abonnements.
Regelkonforme Ausgangswerte
Der letzte regelkonforme Wert jeder überwachten Eigenschaft pro verwaltetem Bereich (z. B. der genehmigte Team-Name oder die Vertraulichkeitsbezeichnung), um ihn nach einem Verstoß wiederherstellen zu können. Speicherung & Aufbewahrung: Azure SQL Database für die Laufzeit des Abonnements.
Planner- und OneNote-Namen
Die Titel von Planner-Plänen und die Namen von OneNote-Notizbüchern verwalteter Gruppen. Aufgaben und Notizbuchseiten werden nicht gelesen. Speicherung & Aufbewahrung: Gespeichert werden nur geänderte Namen als Teil eines Verstoßes (siehe oben).
Verzeichnis-Profildaten (bei Bedarf gelesen)
Anzeigename, E-Mail-Adresse, UPN und Profilbild von Benutzern sowie Besitzer und Mitglieder verwalteter Gruppen — bei Bedarf gelesen, um Namen in der App und in Benachrichtigungen anzuzeigen und zu ermitteln, wer einen Verstoß prüfen muss. Speicherung & Aufbewahrung: keine Speicherung; Profilbilder werden höchstens eine Stunde im Arbeitsspeicher zwischengespeichert.
Daten für Microsoft-Teams-Benachrichtigungen
Für den Versand von Adaptive-Card-Benachrichtigungen speichert Policy Enforcer die Teams-Konversationsreferenz des Policy-Enforcer-Bots pro Empfänger sowie einen Zustellnachweis pro Karte (Objekt-ID des Empfängers, Teams-Nachrichten-ID, Zustellstatus). Speicherung & Aufbewahrung: Azure SQL Database für die Laufzeit des Abonnements.
Tenant- und Dienstkontodaten
Tenant-ID und -Name, Tenant-Einstellungen und — falls verbunden — die Objekt-ID des Dienstkontos für delegierte Vorgänge (siehe Microsoft Graph). Das Refresh-Token des Dienstkontos wird auf Anwendungsebene mit AES-256-GCM verschlüsselt und an die Tenant-ID gebunden; der Schlüssel liegt in Azure Key Vault. Speicherung & Aufbewahrung: Azure SQL Database für die Laufzeit des Abonnements.
Diagnosetelemetrie
Anfragen, Abhängigkeitsaufrufe und Fehler aus Web-UI, API und Hintergrundprozessen werden an Azure Application Insights / Log Analytics in derselben Region gesendet. In der Telemetrie von API und Web-UI werden E-Mail-Adressen, Objekt-IDs und Authorization-Header vor dem Versand entfernt. Erweitertes Diagnoseprotokoll von Microsoft-Graph-Anfrage- und -Antworttexten (maximal 16 KB, ohne Authorization-Header) ist standardmäßig deaktiviert und wird nur zur Fehleranalyse pro Tenant aktiviert. Speicherung & Aufbewahrung: 30 Tage.
Änderungserkennung ab Onboarding. Policy Enforcer bewertet Änderungen ab dem Zeitpunkt, an dem ein Tenant eingerichtet wird; historische Änderungen vor dem Onboarding werden weder durchsucht noch gemeldet.
Microsoft Graph
Policy Enforcer verwendet eine einzige mandantenfähige Microsoft-Entra-App-Registrierung. Ein Tenant-Administrator erteilt die Administratorzustimmung einmalig beim Onboarding. Erkennung und die meisten Behebungen laufen im Hintergrund mit Anwendungsberechtigungen. Einige wenige Vorgänge, die Microsoft Graph nicht mit Anwendungsberechtigungen unterstützt (Ändern der Vertraulichkeitsbezeichnung einer Gruppe, Umbenennen eines Planner-Plans, Lesen und Umbenennen von OneNote-Notizbüchern), laufen mit delegierten Berechtigungen eines dedizierten Dienstkontos, das ein Tenant-Administrator bei der Einrichtung verbindet. Abgesehen von der Installation der eigenen Teams-App für eine prüfende Person, die eine Benachrichtigung erhalten soll, schreibt Policy Enforcer nur in den Tenant, um eine verwaltete Gruppe nach einem Richtlinienverstoß auf ihren letzten regelkonformen Zustand zurückzusetzen — es löscht niemals Gruppen, Teams, Benutzer, Dateien oder Inhalte. Die Scope-Namen sind die Microsoft-Graph-Berechtigungsnamen, wie sie im Zustimmungsdialog angezeigt werden, und werden als Code dargestellt.
| Scope | Beschreibung | Begründung | Admin-Zustimmung erforderlich | Typ |
|---|---|---|---|---|
AuditLog.Read.All | Alle Audit-Protokolldaten lesen. | Gruppenverwaltungsereignisse aus dem Verzeichnis-Audit-Protokoll lesen, um Richtlinienverstöße zu erkennen. | Ja | Anwendung |
Group.ReadWrite.All | Alle Gruppen lesen und schreiben. | Verwaltete Gruppen lesen; nach einem Verstoß den Gruppennamen wiederherstellen oder die Sichtbarkeit auf privat zurücksetzen. | Ja | Anwendung |
GroupMember.ReadWrite.All | Alle Gruppenmitgliedschaften lesen und schreiben. | Besitzer und Mitglieder lesen; einen entfernten Pflicht-Besitzer bzw. ein Pflicht-Mitglied wieder hinzufügen. | Ja | Anwendung |
User.Read.All | Vollständige Profile aller Benutzer lesen. | Benutzernamen in der App und in Benachrichtigungen anzeigen; die für einen verwalteten Bereich zuständigen prüfenden Personen ermitteln. | Ja | Anwendung |
SensitivityLabels.Read.All | Vertraulichkeitsbezeichnungen lesen. | Namen statt IDs von Vertraulichkeitsbezeichnungen in Verstößen und Benachrichtigungen anzeigen. | Ja | Anwendung |
InformationProtectionPolicy.Read.All | Alle veröffentlichten Bezeichnungen und Bezeichnungsrichtlinien der Organisation lesen. | Die genehmigte Vertraulichkeitsbezeichnung vor der Wiederherstellung nachschlagen. | Ja | Anwendung |
Tasks.Read.All | Alle Aufgaben lesen. | Umbenannte Planner-Pläne in verwalteten Gruppen erkennen (nur Plantitel). | Ja | Anwendung |
AppCatalog.Read.All | Alle App-Kataloge lesen. | Die Policy-Enforcer-App im Teams-App-Katalog des Tenants finden. | Ja | Anwendung |
TeamsAppInstallation.ReadWriteSelfForUser.All | Der Teams-App erlauben, sich selbst für alle Benutzer zu verwalten. | Die Policy-Enforcer-App für eine prüfende Person installieren, damit der Bot eine Benachrichtigung zustellen kann. Beschränkt auf Policy Enforcer selbst. | Ja | Anwendung |
openid, profile, email, offline_access, User.Read | Anmelden und grundlegendes Benutzerprofil lesen; Zugriff aufrechterhalten. | Benutzer anmelden (Teams-Single-Sign-On) und das Dienstkonto verbunden halten. | Nein | Delegiert |
Group.ReadWrite.All | Alle Gruppen lesen und schreiben. | Die Vertraulichkeitsbezeichnung einer Gruppe wiederherstellen (Dienstkonto; mit Anwendungsberechtigungen nicht unterstützt). | Ja | Delegiert |
Tasks.ReadWrite | Aufgaben und Pläne des Benutzers erstellen, lesen, aktualisieren und löschen. | Den Titel eines umbenannten Planner-Plans wiederherstellen (Dienstkonto). | Nein | Delegiert |
Notes.Read.All | Alle OneNote-Notizbücher lesen, auf die der Benutzer zugreifen kann. | Umbenannte OneNote-Notizbücher in verwalteten Gruppen erkennen (nur Notizbuchnamen; Dienstkonto). | Nein | Delegiert |
Files.ReadWrite.All | Vollzugriff auf alle Dateien, auf die der Benutzer zugreifen kann. | Den Namen eines umbenannten OneNote-Notizbuchs wiederherstellen, das als Datei gespeichert ist (Dienstkonto; nur Umbenennen, kein Zugriff auf Inhalte). | Nein | Delegiert |
Vollständige Beschreibungen aller Berechtigungen sind in der Microsoft Graph-Berechtigungsreferenz veröffentlicht.
SharePoint-/weitere Workload-Berechtigungen
Nicht zutreffend. Policy Enforcer greift ausschließlich über Microsoft Graph auf Microsoft 365 zu. Die SharePoint-REST-API, Exchange Online, die Office 365 Management API oder andere Workload-APIs werden nicht verwendet, und es werden keine Berechtigungen dafür angefordert.
Microsoft Teams-Apps: Sicherheit und Compliance
Policy Enforcer wird als Microsoft Teams-App mit einer persönlichen Registerkarte (der Web-UI) und einem persönlichen Bot für Adaptive-Card-Benachrichtigungen bereitgestellt. Das App-Manifest fordert ausschließlich die Geräteberechtigungen identity und messageTeamMembers an, deklariert keine ressourcenspezifischen Zustimmungen (RSC), keine Messaging-Erweiterungen und keine Team- oder Gruppenchat-Bereiche und führt nur den Policy-Enforcer-Host als gültige Domain. Benutzer melden sich per Teams-Single-Sign-On an.
Der Bot sendet:
- Verstoßbenachrichtigungen — eine 1:1-Adaptive-Card an die Besitzer der betroffenen Gruppe und/oder die Policy-Enforcer-Administratoren mit einer Schaltfläche, die den Prüfdialog öffnet. Die Karte wird aktualisiert, sobald der Verstoß behoben oder verworfen wurde.
- Behebungshinweise — nach der Behebung bestimmter Verstöße einen Hinweis im Kanal „Allgemein“ des betroffenen Teams, den der Bot über den Teams-Kanal veröffentlicht, nicht über einen Schreibzugriff per Microsoft Graph.
- Antworten — eine Willkommensnachricht bei der Installation sowie kurze Hilfe-/Status-Antworten, wenn ein Benutzer dem Bot schreibt.
Der Bot liest den Text an ihn gesendeter Nachrichten nur, um diese Befehle zu erkennen; der Nachrichtentext wird nicht gespeichert.
Architektur- und Flussdiagramm

Datenfluss: (1) Ein Benutzer öffnet die Policy-Enforcer-App in Microsoft Teams, die die Web-UI aus App Service lädt und dessen API aufruft; (2) der Benutzer wird per Teams-Single-Sign-On angemeldet, und jede API-Anfrage trägt ein Microsoft-Entra-Token, das die API prüft (Signatur, Aussteller, Zielgruppe, Tenant); (3) alle 30 Minuten werden Richtliniendefinitionen und verwaltete Bereiche schreibgeschützt aus Teams Manager synchronisiert, über ein schreibgeschütztes Datenbankkonto, dessen Zugriff auf die Netzwerkadressen des Policy-Enforcer-Dienstes beschränkt ist; (4) alle 10 Minuten liest die Function App neue Gruppenverwaltungsereignisse aus dem Verzeichnis-Audit-Protokoll über Microsoft Graph, bewertet sie über Service-Bus-Warteschlangen anhand der Richtlinien, speichert erkannte Verstöße in Azure SQL und stellt — sofern der Administrator die automatische Behebung gewählt hat — den letzten regelkonformen Wert über Microsoft Graph wieder her, nachdem geprüft wurde, dass sich der Wert in der Zwischenzeit nicht erneut geändert hat; (5) Policy Enforcer sendet oder aktualisiert eine Adaptive Card über den Azure Bot Service, und die prüfende Person übernimmt im Prüfdialog eine Lösung oder verwirft den Verstoß. Alle Compute-Komponenten senden Telemetrie an Application Insights und Log Analytics.
Policy Enforcer verwendet drei bewusst getrennte Authentifizierungsabläufe auf einer einzigen mandantenfähigen Microsoft-Entra-App-Registrierung:
- Anmeldung (delegiert). Benutzer melden sich per Teams-Single-Sign-On mit ihrem Microsoft-Geschäftskonto an. Die API akzeptiert nur für die Policy-Enforcer-App ausgestellte Token und leitet den Tenant aus dem geprüften Token ab.
- Hintergrundverarbeitung (Anwendung). Nach der Administratorzustimmung beziehen Hintergrundprozesse Anwendungstoken für den Tenant des Kunden. Die Anmeldeinformationen der App liegen in Azure Key Vault und werden nie an den Browser übermittelt; der Browser erhält niemals ein Microsoft-Graph-Token.
- Dienstkonto (delegiert, optional). Für die wenigen unter Microsoft Graph aufgeführten Vorgänge verbindet ein Tenant-Administrator ein dediziertes Dienstkonto. Dessen Refresh-Token wird mit AES-256-GCM verschlüsselt und an den Tenant gebunden; Token werden pro Vorgang mit dem minimal nötigen Scope angefordert.
Die Tenant-Isolation wird durch die in jedem Token enthaltene Tenant-ID erzwungen: Jede Anfrage ist auf den Tenant ihres geprüften Tokens beschränkt, jeder tenantbezogene Datensatz trägt diese Tenant-ID, und Graph-Token werden pro Tenant ausgestellt. Innerhalb eines Tenants ist der Zugriff rollenbasiert: Nur Teams-Manager-Administratoren können Policy Enforcer konfigurieren, und Gruppenbesitzer können — sofern aktiviert — Verstöße in ihren eigenen Bereichen prüfen. Alle Geheimnisse liegen in Azure Key Vault und werden von den Diensten über ihre systemseitig zugewiesenen verwalteten Identitäten gelesen; alle Endpunkte sind ausschließlich per HTTPS erreichbar, und die Datenbankverbindung ist verschlüsselt.
Ressourcen-Endpunkte
Domains, die aus dem Netzwerk bzw. Browser des Kunden erreichbar sein müssen.
| Name | Kommentar |
|---|---|
app-pe-prod.azurewebsites.net | Die Web-UI von Policy Enforcer, ihre API und Echtzeit-Aktualisierungen (WebSocket), geladen innerhalb von Microsoft Teams. |
login.microsoftonline.com | Microsoft Entra ID — Anmeldung, Administratorzustimmung und OAuth-Token-Ausstellung (Browser und Backend). |
*.applicationinsights.azure.com | Azure Application Insights — Diagnosetelemetrie der Web-UI (Browser). |
Ausgehende Backend-Verbindungen (informativ)
Ausgehende Aufrufe des von Solutions2Share betriebenen Backends. Diese sind kundenseitig nicht konfigurierbar und werden aus Transparenzgründen aufgeführt.
| Name | Kommentar |
|---|---|
graph.microsoft.com | Microsoft Graph — Lesen des Audit-Protokolls, Lesen von Gruppen und Wiederherstellungen nach Verstößen. |
smba.trafficmanager.net | Azure Bot Service (Bot-Framework-Connector für Microsoft Teams) — Zustellung von Teams-Benachrichtigungen. |
s2slicensing.azurewebsites.net | Solutions2Share License Management Center — Validierung der Produktberechtigung (nur Tenant-ID und Produktname). |
*.database.windows.net | Azure SQL Database — Datenspeicher von Policy Enforcer und schreibgeschützte Teams-Manager-Verbindung. |
*.servicebus.windows.net | Azure Service Bus — Warteschlangen für die Hintergrundverarbeitung. |
*.vault.azure.net | Azure Key Vault — Geheimnisse und Schlüssel. |
*.blob.core.windows.net, *.queue.core.windows.net, *.table.core.windows.net | Azure Storage — Laufzeitspeicher der Hintergrundprozesse. |
Abhängigkeiten
Von Policy Enforcer verwendete Drittanbieter-Bibliotheken. Die Versionen entsprechen dem aktuellen Release.
Server
| Name | Version | Url | License |
|---|---|---|---|
| @azure/functions | 4.16.0 | npmjs.com/package/@azure/functions | MIT |
| @azure/identity | 4.13.1 | npmjs.com/package/@azure/identity | MIT |
| @azure/keyvault-secrets | 4.11.2 | npmjs.com/package/@azure/keyvault-secrets | MIT |
| @azure/monitor-opentelemetry | 1.18.0 | npmjs.com/package/@azure/monitor-opentelemetry | MIT |
| @azure/msal-node | 5.2.2 / 2.16.3 | npmjs.com/package/@azure/msal-node | MIT |
| @azure/service-bus | 7.9.5 | npmjs.com/package/@azure/service-bus | MIT |
| @azure/storage-blob | 12.31.0 | npmjs.com/package/@azure/storage-blob | MIT |
| @microsoft/microsoft-graph-client | 3.0.7 | npmjs.com/package/@microsoft/microsoft-graph-client | MIT |
| @nestjs/axios | 4.0.1 | npmjs.com/package/@nestjs/axios | MIT |
| @nestjs/cache-manager | 3.1.2 | npmjs.com/package/@nestjs/cache-manager | MIT |
| @nestjs/common | 11.1.24 | npmjs.com/package/@nestjs/common | MIT |
| @nestjs/config | 4.0.4 | npmjs.com/package/@nestjs/config | MIT |
| @nestjs/core | 11.1.24 | npmjs.com/package/@nestjs/core | MIT |
| @nestjs/platform-express | 11.1.24 | npmjs.com/package/@nestjs/platform-express | MIT |
| @nestjs/platform-socket.io | 11.1.24 | npmjs.com/package/@nestjs/platform-socket.io | MIT |
| @nestjs/serve-static | 5.0.5 | npmjs.com/package/@nestjs/serve-static | MIT |
| @nestjs/websockets | 11.1.24 | npmjs.com/package/@nestjs/websockets | MIT |
| @opentelemetry/api | 1.9.1 | npmjs.com/package/@opentelemetry/api | Apache-2.0 |
| @opentelemetry/api-logs | 0.208.0 | npmjs.com/package/@opentelemetry/api-logs | Apache-2.0 |
| @prisma/adapter-mssql | 7.8.0 | npmjs.com/package/@prisma/adapter-mssql | Apache-2.0 |
| @prisma/client | 7.8.0 | npmjs.com/package/@prisma/client | Apache-2.0 |
| @sendgrid/mail | 8.1.6 | npmjs.com/package/@sendgrid/mail | MIT |
| async-mutex | 0.5.0 | npmjs.com/package/async-mutex | MIT |
| axios | 1.16.1 | npmjs.com/package/axios | MIT |
| botbuilder | 4.23.3 | npmjs.com/package/botbuilder | MIT |
| botframework-connector | 4.23.3 | npmjs.com/package/botframework-connector | MIT |
| cache-manager | 7.2.8 | npmjs.com/package/cache-manager | MIT |
| class-transformer | 0.5.1 | npmjs.com/package/class-transformer | MIT |
| class-validator | 0.15.1 | npmjs.com/package/class-validator | MIT |
| dotenv | 17.4.2 | npmjs.com/package/dotenv | BSD-2-Clause |
| durable-functions | 3.3.1 | npmjs.com/package/durable-functions | MIT |
| http-proxy-middleware | 3.0.5 | npmjs.com/package/http-proxy-middleware | MIT |
| jose | 6.2.3 | npmjs.com/package/jose | MIT |
| mssql | 12.5.4 | npmjs.com/package/mssql | MIT |
| prisma | 7.8.0 | npmjs.com/package/prisma | Apache-2.0 |
| reflect-metadata | 0.2.2 | npmjs.com/package/reflect-metadata | Apache-2.0 |
| rxjs | 7.8.2 | npmjs.com/package/rxjs | Apache-2.0 |
| socket.io | 4.8.3 | npmjs.com/package/socket.io | MIT |
Client-Pakete
| Name | Version | Url | License |
|---|---|---|---|
| @azure/msal-browser | 5.11.0 | npmjs.com/package/@azure/msal-browser | MIT |
| @fluentui/react-components | 9.73.8 | npmjs.com/package/@fluentui/react-components | MIT |
| @fluentui/react-icons | 2.0.328 | npmjs.com/package/@fluentui/react-icons | MIT |
| @microsoft/applicationinsights-web | 3.4.1 | npmjs.com/package/@microsoft/applicationinsights-web | MIT |
| @microsoft/teams-js | 2.53.0 | npmjs.com/package/@microsoft/teams-js | MIT |
| @reduxjs/toolkit | 2.12.0 | npmjs.com/package/@reduxjs/toolkit | MIT |
| @tanstack/react-query | 5.100.14 | npmjs.com/package/@tanstack/react-query | MIT |
| axios | 1.16.1 | npmjs.com/package/axios | MIT |
| i18next | 26.2.0 | npmjs.com/package/i18next | MIT |
| i18next-browser-languagedetector | 8.2.1 | npmjs.com/package/i18next-browser-languagedetector | MIT |
| react | 19.2.5 | npmjs.com/package/react | MIT |
| react-dom | 19.2.5 | npmjs.com/package/react-dom | MIT |
| react-i18next | 17.0.8 | npmjs.com/package/react-i18next | MIT |
| react-image-crop | 11.0.10 | npmjs.com/package/react-image-crop | ISC |
| react-pdf | 10.4.1 | npmjs.com/package/react-pdf | MIT |
| react-redux | 9.3.0 | npmjs.com/package/react-redux | MIT |
| react-router-dom | 7.15.1 | npmjs.com/package/react-router-dom | MIT |
| socket.io-client | 4.8.3 | npmjs.com/package/socket.io-client | MIT |
Build- und Test-Tooling
Wird ausschließlich zum Bauen und Testen der App verwendet; wird weder an den Browser ausgeliefert noch auf dem Server bereitgestellt.
| Name | Version | Url | License |
|---|---|---|---|
| @rsbuild/core | 1.7.5 | npmjs.com/package/@rsbuild/core | MIT |
| @rsbuild/plugin-react | 1.4.6 | npmjs.com/package/@rsbuild/plugin-react | MIT |
| @nestjs/cli | 11.0.21 | npmjs.com/package/@nestjs/cli | MIT |
| @nestjs/testing | 11.1.24 | npmjs.com/package/@nestjs/testing | MIT |
| typescript | 5.9.3 | npmjs.com/package/typescript | Apache-2.0 |
| @typescript/native-preview | 7.0.0-dev | npmjs.com/package/@typescript/native-preview | Apache-2.0 |
| ts-node | 10.9.2 | npmjs.com/package/ts-node | MIT |
| tsx | 4.22.3 | npmjs.com/package/tsx | MIT |
| tailwindcss | 4.3.0 | npmjs.com/package/tailwindcss | MIT |
| @tailwindcss/postcss | 4.3.0 | npmjs.com/package/@tailwindcss/postcss | MIT |
| jest | 30.4.2 / 29.7.0 | npmjs.com/package/jest | MIT |
| ts-jest | 29.4.11 | npmjs.com/package/ts-jest | MIT |
| jest-environment-jsdom | 30.4.1 | npmjs.com/package/jest-environment-jsdom | MIT |
| jest-axe | 10.0.0 | npmjs.com/package/jest-axe | MIT |
| @testing-library/react | 16.3.2 | npmjs.com/package/@testing-library/react | MIT |
| @testing-library/jest-dom | 6.9.1 | npmjs.com/package/@testing-library/jest-dom | MIT |
| @testing-library/user-event | 14.6.1 | npmjs.com/package/@testing-library/user-event | MIT |
| msw | 2.14.6 | npmjs.com/package/msw | MIT |
| undici | 6.27.0 | npmjs.com/package/undici | MIT |
| supertest | 7.2.2 | npmjs.com/package/supertest | MIT |
| @playwright/test | 1.61.0 | npmjs.com/package/@playwright/test | Apache-2.0 |
| @axe-core/playwright | 4.12.1 | npmjs.com/package/@axe-core/playwright | MPL-2.0 |
| eslint | 9.39.4 | npmjs.com/package/eslint | MIT |
| typescript-eslint | 8.59.4 | npmjs.com/package/typescript-eslint | MIT |
| prettier | 3.8.3 | npmjs.com/package/prettier | MIT |
Policy Enforcer verwendet keine Analyse- oder Werbe-Tracker von Drittanbietern. Das Backend von Policy Enforcer übermittelt Kundendaten ausschließlich an Microsoft-/Azure-Dienste und das Solutions2Share License Management Center.
