From 8acd5640d320176fe4e71777c9176e9dc0472c53 Mon Sep 17 00:00:00 2001 From: Slawomir Koszewski Date: Sat, 31 Jan 2026 08:28:52 +0100 Subject: [PATCH] Add Microsoft Graph client integration and list applications script protype. --- bin/list-apps.mjs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 39 ++++++++++++++++++++++++++++++++++++++- package.json | 3 ++- 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100755 bin/list-apps.mjs diff --git a/bin/list-apps.mjs b/bin/list-apps.mjs new file mode 100755 index 0000000..ac10f19 --- /dev/null +++ b/bin/list-apps.mjs @@ -0,0 +1,47 @@ +#! /usr/bin/env node +import { loginInteractive } from "../src/azure.js"; +import { Client } from "@microsoft/microsoft-graph-client"; + +const scopes = [ + "https://graph.microsoft.com/.default" +]; +const { config } = await import("../public-config.js"); + +async function main(config) { + const token = await loginInteractive({ + tenantId: config.tenantId, + clientId: config.clientId, + scopes, + }); + console.log("Successfully logged in."); + + const accessToken = token.accessToken; + + const client = Client.init({ + authProvider: (done) => { + done(null, accessToken); + }, + }); + + const me = await client + .api("/me") + .get(); + + console.log("User Information:", me); + + const apps = await client + .api("/applications") + .select("displayName,appId,createdDateTime") + .top(50) + .get(); + + console.log("Applications:"); + apps.value.forEach((app) => { + console.log(`- ${app.displayName} (App ID: ${app.appId}, Created: ${app.createdDateTime})`); + }); +} + +main(config).catch((err) => { + console.error("Error in listing applications:", err); + process.exit(1); +}); diff --git a/package-lock.json b/package-lock.json index 4d19e0d..8a41c7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "dependencies": { "@azure/identity": "^4.13.0", - "@azure/msal-node": "^5.0.2" + "@azure/msal-node": "^5.0.2", + "@microsoft/microsoft-graph-client": "^3.0.7" }, "engines": { "node": ">=24.0.0" @@ -196,6 +197,42 @@ "node": ">=0.8.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@microsoft/microsoft-graph-client": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz", + "integrity": "sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependenciesMeta": { + "@azure/identity": { + "optional": true + }, + "@azure/msal-browser": { + "optional": true + }, + "buffer": { + "optional": true + }, + "stream-browserify": { + "optional": true + } + } + }, "node_modules/@typespec/ts-http-runtime": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", diff --git a/package.json b/package.json index 1a8249e..ecec45f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "type": "module", "dependencies": { "@azure/identity": "^4.13.0", - "@azure/msal-node": "^5.0.2" + "@azure/msal-node": "^5.0.2", + "@microsoft/microsoft-graph-client": "^3.0.7" } }