diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 7801c36..ecdbc3c 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,15 +1,10 @@
-# To get started with Dependabot version updates, you'll need to specify which
-# package ecosystems to update and where the package manifests are located.
-# Please see the documentation for all configuration options:
-# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
-
version: 2
updates:
- - package-ecosystem: "pip" # See documentation for possible values
- directory: "/user-auth/graphtutorial" # Location of package manifests
+ - package-ecosystem: "pip"
+ directory: "/user-auth/graphtutorial"
schedule:
interval: "weekly"
- - package-ecosystem: "pip" # See documentation for possible values
- directory: "/app-auth/graphapponlytutorial" # Location of package manifests
+ - package-ecosystem: "pip"
+ directory: "/app-auth/graphapponlytutorial"
schedule:
- interval: "weekly"
\ No newline at end of file
+ interval: "weekly"
diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml
index 06cb19a..5c77a82 100644
--- a/.github/workflows/pylint.yml
+++ b/.github/workflows/pylint.yml
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: ["3.8", "3.9", "3.10"]
+ python-version: ["3.11", "3.12"]
steps:
- uses: actions/checkout@v3
diff --git a/.vscode/launch.json b/.vscode/launch.json
index ef08a7e..c75d1b1 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -6,7 +6,7 @@
"configurations": [
{
"name": "Python: main",
- "type": "python",
+ "type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/user-auth/graphtutorial/main.py",
"cwd": "${workspaceFolder}/user-auth/graphtutorial",
@@ -15,7 +15,7 @@
},
{
"name": "Python: main (app-only)",
- "type": "python",
+ "type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/app-auth/graphapponlytutorial/main.py",
"cwd": "${workspaceFolder}/app-auth/graphapponlytutorial",
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..686e5e7
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,10 @@
+# Microsoft Open Source Code of Conduct
+
+This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
+
+Resources:
+
+- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
+- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
+- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
+- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)
diff --git a/app-auth/RegisterAppForAppOnlyAuth.ps1 b/app-auth/RegisterAppForAppOnlyAuth.ps1
index 09ce5e0..9192c5f 100644
--- a/app-auth/RegisterAppForAppOnlyAuth.ps1
+++ b/app-auth/RegisterAppForAppOnlyAuth.ps1
@@ -21,7 +21,7 @@ param(
$graphAppId = "00000003-0000-0000-c000-000000000000"
# Requires an admin
-Connect-MgGraph -Scopes "Application.ReadWrite.All User.Read" -UseDeviceAuthentication -ErrorAction Stop
+Connect-MgGraph -Scopes "Application.ReadWrite.All AppRoleAssignment.ReadWrite.All User.Read" -UseDeviceAuthentication -ErrorAction Stop
# Get context for access to tenant ID
$context = Get-MgContext -ErrorAction Stop
@@ -71,7 +71,6 @@ Write-Host -ForegroundColor Cyan "Added application permissions to app registrat
# Add admin consent
foreach ($appRole in $resourceAccess)
{
- $appServicePrincipal
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $appServicePrincipal.Id `
-PrincipalId $appServicePrincipal.Id -ResourceId $graphServicePrincipal.Id `
-AppRoleId $appRole.Id -ErrorAction SilentlyContinue -ErrorVariable SPError | Out-Null
@@ -101,7 +100,7 @@ Write-Host -ForegroundColor Yellow $clientSecret.EndDateTime
if ($StayConnected -eq $false)
{
- Disconnect-MgGraph
+ Disconnect-MgGraph | Out-Null
Write-Host "Disconnected from Microsoft Graph"
}
else
diff --git a/app-auth/graphapponlytutorial/graph.py b/app-auth/graphapponlytutorial/graph.py
index eb2ab8b..c3961ab 100644
--- a/app-auth/graphapponlytutorial/graph.py
+++ b/app-auth/graphapponlytutorial/graph.py
@@ -4,16 +4,12 @@
#
from configparser import SectionProxy
from azure.identity.aio import ClientSecretCredential
-from kiota_authentication_azure.azure_identity_authentication_provider import (
- AzureIdentityAuthenticationProvider
-)
-from msgraph import GraphRequestAdapter, GraphServiceClient
+from msgraph import GraphServiceClient
from msgraph.generated.users.users_request_builder import UsersRequestBuilder
class Graph:
settings: SectionProxy
client_credential: ClientSecretCredential
- adapter: GraphRequestAdapter
app_client: GraphServiceClient
def __init__(self, config: SectionProxy):
@@ -23,9 +19,7 @@ def __init__(self, config: SectionProxy):
client_secret = self.settings['clientSecret']
self.client_credential = ClientSecretCredential(tenant_id, client_id, client_secret)
- auth_provider = AzureIdentityAuthenticationProvider(self.client_credential) # type: ignore
- self.adapter = GraphRequestAdapter(auth_provider)
- self.app_client = GraphServiceClient(self.adapter)
+ self.app_client = GraphServiceClient(self.client_credential) # type: ignore
#
#
@@ -49,7 +43,7 @@ async def get_users(self):
query_parameters=query_params
)
- users = await self.app_client.users().get(request_configuration=request_config)
+ users = await self.app_client.users.get(request_configuration=request_config)
return users
#
diff --git a/app-auth/graphapponlytutorial/main.py b/app-auth/graphapponlytutorial/main.py
index 7e5b3d2..5066fcf 100644
--- a/app-auth/graphapponlytutorial/main.py
+++ b/app-auth/graphapponlytutorial/main.py
@@ -4,6 +4,7 @@
#
import asyncio
import configparser
+from msgraph.generated.models.o_data_errors.o_data_error import ODataError
from graph import Graph
async def main():
@@ -30,16 +31,21 @@ async def main():
except ValueError:
choice = -1
- if choice == 0:
- print('Goodbye...')
- elif choice == 1:
- await display_access_token(graph)
- elif choice == 2:
- await list_users(graph)
- elif choice == 3:
- await make_graph_call(graph)
- else:
- print('Invalid choice!\n')
+ try:
+ if choice == 0:
+ print('Goodbye...')
+ elif choice == 1:
+ await display_access_token(graph)
+ elif choice == 2:
+ await list_users(graph)
+ elif choice == 3:
+ await make_graph_call(graph)
+ else:
+ print('Invalid choice!\n')
+ except ODataError as odata_error:
+ print('Error:')
+ if odata_error.error:
+ print(odata_error.error.code, odata_error.error.message)
#
#
@@ -53,7 +59,7 @@ async def list_users(graph: Graph):
users_page = await graph.get_users()
# Output each users's details
- if users_page is not None and users_page.value is not None:
+ if users_page and users_page.value:
for user in users_page.value:
print('User:', user.display_name)
print(' ID:', user.id)
diff --git a/app-auth/graphapponlytutorial/pylintrc b/app-auth/graphapponlytutorial/pylintrc
index b54b9d8..9c25004 100644
--- a/app-auth/graphapponlytutorial/pylintrc
+++ b/app-auth/graphapponlytutorial/pylintrc
@@ -576,5 +576,5 @@ preferred-modules=
# Exceptions that will emit a warning when being caught. Defaults to
# "BaseException, Exception".
-overgeneral-exceptions=BaseException,
- Exception
+overgeneral-exceptions=builtins.BaseException,
+ builtins.Exception
diff --git a/app-auth/graphapponlytutorial/requirements.txt b/app-auth/graphapponlytutorial/requirements.txt
index bd54d7c..31255e9 100644
--- a/app-auth/graphapponlytutorial/requirements.txt
+++ b/app-auth/graphapponlytutorial/requirements.txt
@@ -1,128 +1,153 @@
#
-# This file is autogenerated by pip-compile with python 3.10
-# To update, run:
+# This file is autogenerated by pip-compile with Python 3.10
+# by the following command:
#
-# pip-compile --output-file=requirements.txt --resolver=backtracking
+# pip-compile --output-file=requirements.txt
#
-aiohttp==3.8.3
+aiohappyeyeballs==2.6.1
+ # via aiohttp
+aiohttp==3.13.4
# via microsoft-kiota-authentication-azure
-aiosignal==1.3.1
+aiosignal==1.4.0
# via aiohttp
-anyio==3.6.2
- # via httpcore
-async-timeout==4.0.2
+anyio==4.10.0
+ # via httpx
+async-timeout==5.0.1
# via aiohttp
-attrs==22.1.0
+attrs==25.3.0
# via aiohttp
-azure-core==1.26.1
+azure-core==1.38.0
# via
# azure-identity
# microsoft-kiota-authentication-azure
-azure-identity==1.12.0
+azure-identity==1.25.3
# via
# -r requirements.in
# msgraph-sdk
-certifi==2022.12.7
+certifi==2025.8.3
# via
# httpcore
# httpx
# requests
-cffi==1.15.1
+cffi==2.0.0
# via cryptography
-charset-normalizer==2.1.1
- # via
- # aiohttp
- # requests
-cryptography==38.0.4
+charset-normalizer==3.4.3
+ # via requests
+cryptography==46.0.7
# via
# azure-identity
# msal
# pyjwt
-frozenlist==1.3.3
+exceptiongroup==1.3.0
+ # via anyio
+frozenlist==1.7.0
# via
# aiohttp
# aiosignal
-h11==0.14.0
+h11==0.16.0
# via httpcore
-h2==4.1.0
+h2==4.3.0
# via httpx
-hpack==4.0.0
+hpack==4.1.0
# via h2
-httpcore==0.16.2
+httpcore==1.0.9
# via httpx
-httpx[http2]==0.23.1
+httpx[http2]==0.28.1
# via
# microsoft-kiota-http
# msgraph-core
-hyperframe==6.0.1
+hyperframe==6.1.0
# via h2
-idna==3.4
+idna==3.15
# via
# anyio
+ # httpx
# requests
- # rfc3986
# yarl
-microsoft-kiota-abstractions==0.2.0
+importlib-metadata==8.7.0
+ # via opentelemetry-api
+microsoft-kiota-abstractions==1.9.10
# via
# microsoft-kiota-authentication-azure
# microsoft-kiota-http
+ # microsoft-kiota-serialization-form
# microsoft-kiota-serialization-json
+ # microsoft-kiota-serialization-multipart
# microsoft-kiota-serialization-text
# msgraph-core
- # msgraph-sdk
-microsoft-kiota-authentication-azure==0.1.1
- # via msgraph-sdk
-microsoft-kiota-http==0.2.3
+microsoft-kiota-authentication-azure==1.9.6
+ # via msgraph-core
+microsoft-kiota-http==1.9.9
# via msgraph-core
-microsoft-kiota-serialization-json==0.2.0
+microsoft-kiota-serialization-form==1.9.6
+ # via msgraph-sdk
+microsoft-kiota-serialization-json==1.9.6
# via msgraph-sdk
-microsoft-kiota-serialization-text==0.2.0
+microsoft-kiota-serialization-multipart==1.9.6
# via msgraph-sdk
-msal==1.20.0
+microsoft-kiota-serialization-text==1.9.6
+ # via msgraph-sdk
+msal==1.35.1
# via
# azure-identity
# msal-extensions
-msal-extensions==1.0.0
+msal-extensions==1.3.1
# via azure-identity
-msgraph-core==1.0.0a0
+msgraph-core==1.3.5
# via msgraph-sdk
-msgraph-sdk==1.0.0a2
+msgraph-sdk==1.58.0
# via -r requirements.in
-multidict==6.0.2
+multidict==6.6.4
# via
# aiohttp
# yarl
-portalocker==2.6.0
- # via msal-extensions
-pycparser==2.21
+opentelemetry-api==1.36.0
+ # via
+ # microsoft-kiota-abstractions
+ # microsoft-kiota-authentication-azure
+ # microsoft-kiota-http
+ # opentelemetry-sdk
+ # opentelemetry-semantic-conventions
+opentelemetry-sdk==1.36.0
+ # via
+ # microsoft-kiota-abstractions
+ # microsoft-kiota-authentication-azure
+ # microsoft-kiota-http
+opentelemetry-semantic-conventions==0.57b0
+ # via opentelemetry-sdk
+propcache==0.3.2
+ # via
+ # aiohttp
+ # yarl
+pycparser==2.22
# via cffi
-pyjwt[crypto]==2.6.0
- # via msal
-python-dateutil==2.8.2
+pyjwt[crypto]==2.12.0
# via
- # microsoft-kiota-serialization-json
- # microsoft-kiota-serialization-text
-requests==2.28.1
+ # msal
+ # pyjwt
+requests==2.33.0
# via
# azure-core
# msal
-rfc3986[idna2008]==1.5.0
- # via httpx
-six==1.16.0
+sniffio==1.3.1
+ # via anyio
+std-uritemplate==2.0.5
+ # via microsoft-kiota-abstractions
+typing-extensions==4.15.0
# via
+ # aiosignal
+ # anyio
# azure-core
# azure-identity
- # python-dateutil
-sniffio==1.3.0
- # via
- # anyio
- # httpcore
- # httpx
-typing-extensions==4.4.0
- # via azure-core
-uritemplate==4.1.1
- # via microsoft-kiota-abstractions
-urllib3==1.26.13
+ # cryptography
+ # exceptiongroup
+ # multidict
+ # opentelemetry-api
+ # opentelemetry-sdk
+ # opentelemetry-semantic-conventions
+urllib3==2.7.0
# via requests
-yarl==1.8.1
+yarl==1.20.1
# via aiohttp
+zipp==3.23.0
+ # via importlib-metadata
diff --git a/user-auth/RegisterAppForUserAuth.ps1 b/user-auth/RegisterAppForUserAuth.ps1
index 0b8598a..8b2edf1 100644
--- a/user-auth/RegisterAppForUserAuth.ps1
+++ b/user-auth/RegisterAppForUserAuth.ps1
@@ -77,7 +77,7 @@ Write-Host -ForegroundColor Yellow $authTenant
if ($StayConnected -eq $false)
{
- Disconnect-MgGraph
+ Disconnect-MgGraph | Out-Null
Write-Host "Disconnected from Microsoft Graph"
}
else
diff --git a/user-auth/graphtutorial/async_auth.py b/user-auth/graphtutorial/async_auth.py
deleted file mode 100644
index 3de7de1..0000000
--- a/user-auth/graphtutorial/async_auth.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT License.
-
-# pylint: disable=invalid-overridden-method,useless-super-delegation
-
-#
-from azure.identity import DeviceCodeCredential
-
-# This class is an async wrapper around the DeviceCodeCredential
-# class from azure.identity. Once azure.identity provides an async version
-# of DeviceCodeCredential this will no longer be necessary
-class AsyncDeviceCodeCredential(DeviceCodeCredential):
- async def get_token(self, *scopes, **kwargs):
- return super().get_token(*scopes, **kwargs)
-
- async def __aenter__(self):
- return
-
- async def __aexit__(self, exc_type, exc_value, traceback):
- return
-
- async def close(self):
- return
-#
diff --git a/user-auth/graphtutorial/graph.py b/user-auth/graphtutorial/graph.py
index 4a84f44..6a9ab93 100644
--- a/user-auth/graphtutorial/graph.py
+++ b/user-auth/graphtutorial/graph.py
@@ -3,24 +3,22 @@
#
from configparser import SectionProxy
-from kiota_authentication_azure.azure_identity_authentication_provider import (
- AzureIdentityAuthenticationProvider)
-from msgraph import GraphRequestAdapter, GraphServiceClient
-from msgraph.generated.me.me_request_builder import MeRequestBuilder
-from msgraph.generated.me.mail_folders.item.messages.messages_request_builder import (
+from azure.identity import DeviceCodeCredential
+from msgraph import GraphServiceClient
+from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder
+from msgraph.generated.users.item.mail_folders.item.messages.messages_request_builder import (
MessagesRequestBuilder)
-from msgraph.generated.me.send_mail.send_mail_post_request_body import SendMailPostRequestBody
+from msgraph.generated.users.item.send_mail.send_mail_post_request_body import (
+ SendMailPostRequestBody)
from msgraph.generated.models.message import Message
from msgraph.generated.models.item_body import ItemBody
from msgraph.generated.models.body_type import BodyType
from msgraph.generated.models.recipient import Recipient
from msgraph.generated.models.email_address import EmailAddress
-from async_auth import AsyncDeviceCodeCredential
class Graph:
settings: SectionProxy
- device_code_credential: AsyncDeviceCodeCredential
- adapter: GraphRequestAdapter
+ device_code_credential: DeviceCodeCredential
user_client: GraphServiceClient
def __init__(self, config: SectionProxy):
@@ -29,32 +27,29 @@ def __init__(self, config: SectionProxy):
tenant_id = self.settings['tenantId']
graph_scopes = self.settings['graphUserScopes'].split(' ')
- self.device_code_credential = AsyncDeviceCodeCredential(client_id, tenant_id = tenant_id)
- auth_provider = AzureIdentityAuthenticationProvider(
- self.device_code_credential,
- scopes=graph_scopes)
- self.adapter = GraphRequestAdapter(auth_provider)
- self.user_client = GraphServiceClient(self.adapter)
+ self.device_code_credential = DeviceCodeCredential(client_id, tenant_id = tenant_id)
+ self.user_client = GraphServiceClient(self.device_code_credential, graph_scopes)
#
#
async def get_user_token(self):
graph_scopes = self.settings['graphUserScopes']
- access_token = await self.device_code_credential.get_token(graph_scopes)
+ access_token = self.device_code_credential.get_token(graph_scopes)
return access_token.token
#
#
async def get_user(self):
# Only request specific properties using $select
- query_params = MeRequestBuilder.MeRequestBuilderGetQueryParameters(
+ query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(
select=['displayName', 'mail', 'userPrincipalName']
)
- request_config = MeRequestBuilder.MeRequestBuilderGetRequestConfiguration(
+
+ request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(
query_parameters=query_params
)
- user = await self.user_client.me().get(request_configuration=request_config)
+ user = await self.user_client.me.get(request_configuration=request_config)
return user
#
@@ -72,7 +67,7 @@ async def get_inbox(self):
query_parameters= query_params
)
- messages = await self.user_client.me().mail_folders_by_id('inbox').messages().get(
+ messages = await self.user_client.me.mail_folders.by_mail_folder_id('inbox').messages.get(
request_configuration=request_config)
return messages
#
@@ -95,7 +90,7 @@ async def send_mail(self, subject: str, body: str, recipient: str):
request_body = SendMailPostRequestBody()
request_body.message = message
- await self.user_client.me().send_mail().post(body=request_body)
+ await self.user_client.me.send_mail.post(body=request_body)
#
#
diff --git a/user-auth/graphtutorial/main.py b/user-auth/graphtutorial/main.py
index c04be75..0b20d03 100644
--- a/user-auth/graphtutorial/main.py
+++ b/user-auth/graphtutorial/main.py
@@ -4,6 +4,7 @@
#
import asyncio
import configparser
+from msgraph.generated.models.o_data_errors.o_data_error import ODataError
from graph import Graph
async def main():
@@ -33,24 +34,29 @@ async def main():
except ValueError:
choice = -1
- if choice == 0:
- print('Goodbye...')
- elif choice == 1:
- await display_access_token(graph)
- elif choice == 2:
- await list_inbox(graph)
- elif choice == 3:
- await send_mail(graph)
- elif choice == 4:
- await make_graph_call(graph)
- else:
- print('Invalid choice!\n')
+ try:
+ if choice == 0:
+ print('Goodbye...')
+ elif choice == 1:
+ await display_access_token(graph)
+ elif choice == 2:
+ await list_inbox(graph)
+ elif choice == 3:
+ await send_mail(graph)
+ elif choice == 4:
+ await make_graph_call(graph)
+ else:
+ print('Invalid choice!\n')
+ except ODataError as odata_error:
+ print('Error:')
+ if odata_error.error:
+ print(odata_error.error.code, odata_error.error.message)
#
#
async def greet_user(graph: Graph):
user = await graph.get_user()
- if user is not None:
+ if user:
print('Hello,', user.display_name)
# For Work/school accounts, email is in mail property
# Personal accounts, email is in userPrincipalName
@@ -66,15 +72,15 @@ async def display_access_token(graph: Graph):
#
async def list_inbox(graph: Graph):
message_page = await graph.get_inbox()
- if message_page is not None and message_page.value is not None:
+ if message_page and message_page.value:
# Output each message's details
for message in message_page.value:
print('Message:', message.subject)
if (
- message.from_escaped is not None and
- message.from_escaped.email_address is not None
+ message.from_ and
+ message.from_.email_address
):
- print(' From:', message.from_escaped.email_address.name or 'NONE')
+ print(' From:', message.from_.email_address.name or 'NONE')
else:
print(' From: NONE')
print(' Status:', 'Read' if message.is_read else 'Unread')
@@ -90,7 +96,7 @@ async def send_mail(graph: Graph):
# Send mail to the signed-in user
# Get the user for their email address
user = await graph.get_user()
- if user is not None:
+ if user:
user_email = user.mail or user.user_principal_name
await graph.send_mail('Testing Microsoft Graph', 'Hello world!', user_email or '')
diff --git a/user-auth/graphtutorial/pylintrc b/user-auth/graphtutorial/pylintrc
index b54b9d8..9c25004 100644
--- a/user-auth/graphtutorial/pylintrc
+++ b/user-auth/graphtutorial/pylintrc
@@ -576,5 +576,5 @@ preferred-modules=
# Exceptions that will emit a warning when being caught. Defaults to
# "BaseException, Exception".
-overgeneral-exceptions=BaseException,
- Exception
+overgeneral-exceptions=builtins.BaseException,
+ builtins.Exception
diff --git a/user-auth/graphtutorial/requirements.txt b/user-auth/graphtutorial/requirements.txt
index bd54d7c..31255e9 100644
--- a/user-auth/graphtutorial/requirements.txt
+++ b/user-auth/graphtutorial/requirements.txt
@@ -1,128 +1,153 @@
#
-# This file is autogenerated by pip-compile with python 3.10
-# To update, run:
+# This file is autogenerated by pip-compile with Python 3.10
+# by the following command:
#
-# pip-compile --output-file=requirements.txt --resolver=backtracking
+# pip-compile --output-file=requirements.txt
#
-aiohttp==3.8.3
+aiohappyeyeballs==2.6.1
+ # via aiohttp
+aiohttp==3.13.4
# via microsoft-kiota-authentication-azure
-aiosignal==1.3.1
+aiosignal==1.4.0
# via aiohttp
-anyio==3.6.2
- # via httpcore
-async-timeout==4.0.2
+anyio==4.10.0
+ # via httpx
+async-timeout==5.0.1
# via aiohttp
-attrs==22.1.0
+attrs==25.3.0
# via aiohttp
-azure-core==1.26.1
+azure-core==1.38.0
# via
# azure-identity
# microsoft-kiota-authentication-azure
-azure-identity==1.12.0
+azure-identity==1.25.3
# via
# -r requirements.in
# msgraph-sdk
-certifi==2022.12.7
+certifi==2025.8.3
# via
# httpcore
# httpx
# requests
-cffi==1.15.1
+cffi==2.0.0
# via cryptography
-charset-normalizer==2.1.1
- # via
- # aiohttp
- # requests
-cryptography==38.0.4
+charset-normalizer==3.4.3
+ # via requests
+cryptography==46.0.7
# via
# azure-identity
# msal
# pyjwt
-frozenlist==1.3.3
+exceptiongroup==1.3.0
+ # via anyio
+frozenlist==1.7.0
# via
# aiohttp
# aiosignal
-h11==0.14.0
+h11==0.16.0
# via httpcore
-h2==4.1.0
+h2==4.3.0
# via httpx
-hpack==4.0.0
+hpack==4.1.0
# via h2
-httpcore==0.16.2
+httpcore==1.0.9
# via httpx
-httpx[http2]==0.23.1
+httpx[http2]==0.28.1
# via
# microsoft-kiota-http
# msgraph-core
-hyperframe==6.0.1
+hyperframe==6.1.0
# via h2
-idna==3.4
+idna==3.15
# via
# anyio
+ # httpx
# requests
- # rfc3986
# yarl
-microsoft-kiota-abstractions==0.2.0
+importlib-metadata==8.7.0
+ # via opentelemetry-api
+microsoft-kiota-abstractions==1.9.10
# via
# microsoft-kiota-authentication-azure
# microsoft-kiota-http
+ # microsoft-kiota-serialization-form
# microsoft-kiota-serialization-json
+ # microsoft-kiota-serialization-multipart
# microsoft-kiota-serialization-text
# msgraph-core
- # msgraph-sdk
-microsoft-kiota-authentication-azure==0.1.1
- # via msgraph-sdk
-microsoft-kiota-http==0.2.3
+microsoft-kiota-authentication-azure==1.9.6
+ # via msgraph-core
+microsoft-kiota-http==1.9.9
# via msgraph-core
-microsoft-kiota-serialization-json==0.2.0
+microsoft-kiota-serialization-form==1.9.6
+ # via msgraph-sdk
+microsoft-kiota-serialization-json==1.9.6
# via msgraph-sdk
-microsoft-kiota-serialization-text==0.2.0
+microsoft-kiota-serialization-multipart==1.9.6
# via msgraph-sdk
-msal==1.20.0
+microsoft-kiota-serialization-text==1.9.6
+ # via msgraph-sdk
+msal==1.35.1
# via
# azure-identity
# msal-extensions
-msal-extensions==1.0.0
+msal-extensions==1.3.1
# via azure-identity
-msgraph-core==1.0.0a0
+msgraph-core==1.3.5
# via msgraph-sdk
-msgraph-sdk==1.0.0a2
+msgraph-sdk==1.58.0
# via -r requirements.in
-multidict==6.0.2
+multidict==6.6.4
# via
# aiohttp
# yarl
-portalocker==2.6.0
- # via msal-extensions
-pycparser==2.21
+opentelemetry-api==1.36.0
+ # via
+ # microsoft-kiota-abstractions
+ # microsoft-kiota-authentication-azure
+ # microsoft-kiota-http
+ # opentelemetry-sdk
+ # opentelemetry-semantic-conventions
+opentelemetry-sdk==1.36.0
+ # via
+ # microsoft-kiota-abstractions
+ # microsoft-kiota-authentication-azure
+ # microsoft-kiota-http
+opentelemetry-semantic-conventions==0.57b0
+ # via opentelemetry-sdk
+propcache==0.3.2
+ # via
+ # aiohttp
+ # yarl
+pycparser==2.22
# via cffi
-pyjwt[crypto]==2.6.0
- # via msal
-python-dateutil==2.8.2
+pyjwt[crypto]==2.12.0
# via
- # microsoft-kiota-serialization-json
- # microsoft-kiota-serialization-text
-requests==2.28.1
+ # msal
+ # pyjwt
+requests==2.33.0
# via
# azure-core
# msal
-rfc3986[idna2008]==1.5.0
- # via httpx
-six==1.16.0
+sniffio==1.3.1
+ # via anyio
+std-uritemplate==2.0.5
+ # via microsoft-kiota-abstractions
+typing-extensions==4.15.0
# via
+ # aiosignal
+ # anyio
# azure-core
# azure-identity
- # python-dateutil
-sniffio==1.3.0
- # via
- # anyio
- # httpcore
- # httpx
-typing-extensions==4.4.0
- # via azure-core
-uritemplate==4.1.1
- # via microsoft-kiota-abstractions
-urllib3==1.26.13
+ # cryptography
+ # exceptiongroup
+ # multidict
+ # opentelemetry-api
+ # opentelemetry-sdk
+ # opentelemetry-semantic-conventions
+urllib3==2.7.0
# via requests
-yarl==1.8.1
+yarl==1.20.1
# via aiohttp
+zipp==3.23.0
+ # via importlib-metadata
diff --git a/user-auth/version b/user-auth/version
index 9459d4b..5625e59 100644
--- a/user-auth/version
+++ b/user-auth/version
@@ -1 +1 @@
-1.1
+1.2