├── docs ├── static │ ├── .nojekyll │ ├── api │ └── img │ │ ├── overview.png │ │ ├── app-api-key.png │ │ ├── logo-color.png │ │ ├── logo-white.png │ │ ├── policies_01.png │ │ ├── policies_02.png │ │ ├── policies_03.png │ │ ├── policies_04.png │ │ ├── policies_05.png │ │ ├── policies_06.png │ │ ├── policies_07.png │ │ ├── policies_08.png │ │ ├── policies_09.png │ │ ├── policies_10.png │ │ ├── policies_11.png │ │ ├── policies_12.png │ │ ├── duo-admin-view.png │ │ ├── tenant-api-key.png │ │ ├── Settings_ORG_01.png │ │ ├── Settings_ORG_02.png │ │ ├── Settings_ORG_03.png │ │ ├── Settings_ORG_04.png │ │ ├── Settings_ORG_05.png │ │ ├── okta_admin_role.png │ │ ├── okta_admin_scopes.png │ │ ├── register-issuer.png │ │ ├── verify-identity.png │ │ ├── Settings_APIKey_00.png │ │ ├── Settings_APIKey_01.png │ │ ├── Settings_APIKey_02.png │ │ ├── Settings_DEVICE_01.png │ │ ├── Settings_DEVICE_02.png │ │ ├── Settings_DEVICE_03.png │ │ ├── Settings_DEVICE_04.png │ │ ├── Settings_DEVICE_05.png │ │ ├── Settings_DEVICE_06.png │ │ ├── Settings_DEVICE_07.png │ │ ├── Settings_DEVICE_08.png │ │ ├── Settings_DEVICE_09.png │ │ ├── Settings_DEVICE_10.png │ │ ├── Settings_DEVICE_11.png │ │ ├── Settings_DEVICE_12.png │ │ ├── Settings_DEVICE_13.png │ │ ├── agentic-service-all.png │ │ ├── agentic-service-mcp.png │ │ ├── issue-badge-offline.png │ │ ├── issue-badge-online.png │ │ ├── register-issuer-duo.png │ │ ├── register-issuer-ory.png │ │ ├── 4_1_Add_default_scope.png │ │ ├── 4_2_Add_default_scope.png │ │ ├── agentic-service-mcp-2.png │ │ ├── okta_private_key_auth.png │ │ ├── okta_private_key_pem.png │ │ ├── ory-api-key-creation.png │ │ ├── register-issuer-okta.png │ │ ├── verify-identity-done.png │ │ ├── register-issuer-duo-done.png │ │ ├── register-issuer-ory-done.png │ │ ├── agentic-service-mcp-badge.png │ │ ├── ory-project-settings-view.png │ │ ├── register-issuer-okta-done.png │ │ ├── agentic-service-mcp-no-badge.png │ │ ├── agentic-service-mcp-badge-policies-usedby.png │ │ ├── agentic-service-mcp-badge-policies-assigned.png │ │ └── favicon.svg ├── contribute │ ├── wip │ │ ├── 6_Policy_Engine_Integration │ │ │ └── statement.md │ │ ├── 7_Brokered_identity_Gateways │ │ │ └── statement.md │ │ ├── 3_XAA │ │ │ └── statement.md │ │ ├── 4_MFA │ │ │ └── statement.md │ │ ├── 8_Cross_Organization_Initiatives │ │ │ └── statement.md │ │ ├── 1_DCR │ │ │ ├── statement.md │ │ │ └── meeting_notes │ │ │ │ └── 2025-10-08.md │ │ ├── 5_Audit_Logs_Standardization │ │ │ └── statement.md │ │ └── 2_User_Context │ │ │ ├── meeting_notes │ │ │ ├── 2025-12-08.md │ │ │ └── 2025-11-24.md │ │ │ └── statement.md │ ├── README.md │ └── backend │ │ └── README.md ├── src │ ├── plugins │ │ ├── index.ts │ │ └── panzoom │ │ │ ├── index.ts │ │ │ └── PanzoomPluginOptions.ts │ └── pages │ │ └── index.module.css ├── tsconfig.json ├── .gitignore ├── sidebars.ts └── README.md ├── frontend ├── .nvmrc ├── public │ ├── robots.txt │ ├── favicon.ico │ ├── pwa-64x64.png │ ├── pwa-192x192.png │ ├── pwa-512x512.png │ ├── maskable-icon-512x512.png │ └── apple-touch-icon-180x180.png ├── .prettierignore ├── img │ ├── policy.png │ ├── welcome.png │ ├── dashboard.png │ ├── settings.png │ └── agentic-service.png ├── src │ ├── assets │ │ ├── keycloak.png │ │ ├── oasf.svg │ │ ├── types-agentic-services │ │ │ ├── agntcy.svg │ │ │ └── a2a.svg │ │ ├── logo-a.svg │ │ ├── icon-agntcy.svg │ │ ├── ory.svg │ │ ├── duo.svg │ │ └── mcp.svg │ ├── fonts │ │ ├── Inter-Bold.woff │ │ ├── Inter-Bold.woff2 │ │ ├── Inter-Italic.woff │ │ ├── Inter-Italic.woff2 │ │ ├── Inter-Regular.woff │ │ ├── Inter-Regular.woff2 │ │ ├── Inter-SemiBold.woff │ │ ├── Inter-SemiBold.woff2 │ │ ├── SharpSans-Bold.woff │ │ ├── SharpSans-Bold.woff2 │ │ ├── Inter-BoldItalic.woff │ │ ├── Inter-BoldItalic.woff2 │ │ ├── Inter-SemiBoldItalic.woff │ │ ├── SharpSans-BoldItalic.woff │ │ ├── Inter-SemiBoldItalic.woff2 │ │ └── SharpSans-BoldItalic.woff2 │ ├── utils │ │ ├── is-env-set.ts │ │ ├── docs.ts │ │ ├── date.ts │ │ └── utils.ts │ ├── hooks │ │ ├── index.ts │ │ ├── use-window-size.ts │ │ └── use-auth.tsx │ ├── constants │ │ ├── pagination.ts │ │ ├── http-errors.ts │ │ ├── iam.ts │ │ ├── labels.ts │ │ └── oicd.ts │ ├── store │ │ ├── index.ts │ │ └── use-theme-store.ts │ ├── types │ │ ├── geral.ts │ │ ├── api │ │ │ ├── auth.ts │ │ │ ├── device.ts │ │ │ ├── app.ts │ │ │ ├── policy.ts │ │ │ └── settings.ts │ │ ├── router.ts │ │ ├── auth │ │ │ ├── common.ts │ │ │ ├── common-secure-route.ts │ │ │ └── oidc.ts │ │ └── sw │ │ │ └── notification.ts │ ├── queries │ │ ├── index.ts │ │ └── settings.ts │ ├── api │ │ └── services │ │ │ └── index.ts │ ├── mutations │ │ ├── index.ts │ │ └── auth.ts │ ├── schemas │ │ ├── organization-schema.ts │ │ ├── invite-user-schema.ts │ │ ├── policy-schema.ts │ │ ├── entitlements-schema.ts │ │ ├── agentic-service-schema.ts │ │ ├── policy-logic-schema.ts │ │ └── verify-identity-schema.ts │ ├── components │ │ ├── ui │ │ │ ├── skeleton.tsx │ │ │ ├── loading-text.tsx │ │ │ ├── label.tsx │ │ │ └── separator.tsx │ │ ├── policies │ │ │ └── add-edit │ │ │ │ └── add-edit-stepper.tsx │ │ ├── router │ │ │ ├── redirect-with-params.tsx │ │ │ ├── 404.tsx │ │ │ └── secure-route │ │ │ │ └── secure-route.tsx │ │ ├── organizations │ │ │ └── info │ │ │ │ └── users-columns.tsx │ │ ├── devices │ │ │ └── devices-columns.tsx │ │ ├── verify-identity │ │ │ └── stepper.tsx │ │ └── agentic-services │ │ │ └── add │ │ │ └── stepper.tsx │ ├── styles │ │ └── dashboard.css │ ├── providers │ │ ├── auth-provider │ │ │ ├── iam │ │ │ │ ├── auth-context-iam.tsx │ │ │ │ └── use-auth-iam.tsx │ │ │ ├── oicd │ │ │ │ ├── helper │ │ │ │ │ └── auth-context-oidc-helper.tsx │ │ │ │ └── use-auth-oidc.tsx │ │ │ └── auth-provider.tsx │ │ ├── theme-provider │ │ │ └── theme-provider.tsx │ │ └── query-provider │ │ │ └── query-provider.tsx │ ├── main.tsx │ ├── vite-env.d.ts │ ├── router │ │ └── router.tsx │ ├── pages │ │ ├── agentic-services │ │ │ └── info │ │ │ │ ├── about-agentic-service.tsx │ │ │ │ ├── policies-used-by-agentic-service.tsx │ │ │ │ └── policies-assigned-to-agentic-service.tsx │ │ ├── dashboard │ │ │ └── dashboard.tsx │ │ └── settings │ │ │ └── api-key │ │ │ └── api-key.tsx │ └── config │ │ └── global.ts ├── tsconfig.eslint.json ├── .prettierrc ├── tsconfig.json ├── .yarnrc.yml ├── utils │ └── package.json ├── components.json ├── .gitignore ├── tsconfig.node.json ├── index.html └── tsconfig.app.json ├── backend ├── .golangci.yaml ├── api │ ├── spec │ │ ├── .gitignore │ │ ├── buf.work.yaml │ │ ├── plugins │ │ │ └── protoc-gen-go-srvreg │ │ │ │ ├── Makefile │ │ │ │ ├── go.mod │ │ │ │ ├── register_data.go │ │ │ │ └── go.sum │ │ ├── buf.gen.openapiv2.yaml │ │ ├── buf.gen.doc.yaml │ │ ├── buf.gen.openapi.yaml │ │ ├── buf.gen.python.yaml │ │ ├── buf.gen.yaml │ │ └── proto │ │ │ ├── agntcy │ │ │ └── identity │ │ │ │ └── service │ │ │ │ └── v1alpha1 │ │ │ │ └── pagination.proto │ │ │ └── buf.lock │ └── client │ │ └── auth │ │ └── auth.go ├── internal │ ├── pkg │ │ ├── sorting │ │ │ └── sorting_column.go │ │ ├── pagination │ │ │ ├── page.go │ │ │ ├── pagination_filter.go │ │ │ └── pagination.go │ │ ├── strutil │ │ │ ├── secret.go │ │ │ ├── uuid.go │ │ │ ├── random.go │ │ │ └── trim.go │ │ ├── grpcutil │ │ │ └── matcher.go │ │ ├── httputil │ │ │ ├── hostname.go │ │ │ └── hostname_test.go │ │ ├── convertutil │ │ │ └── slice.go │ │ ├── ptrutil │ │ │ └── ptr.go │ │ ├── context │ │ │ └── keys.go │ │ ├── pgutil │ │ │ └── time.go │ │ ├── jwtutil │ │ │ └── verify.go │ │ ├── secrets │ │ │ └── pg.go │ │ ├── errutil │ │ │ └── error_test.go │ │ └── cache │ │ │ └── cache_test.go │ ├── core │ │ ├── settings │ │ │ ├── repository.go │ │ │ └── types │ │ │ │ └── idptype_string.go │ │ ├── idp │ │ │ ├── idp_test.go │ │ │ ├── credential.go │ │ │ └── self_idp_test.go │ │ ├── badge │ │ │ ├── repository.go │ │ │ └── types │ │ │ │ ├── badgetype_string.go │ │ │ │ └── credentialstatuspurpose_string.go │ │ ├── iam │ │ │ └── repository.go │ │ ├── policy │ │ │ └── types │ │ │ │ └── ruleaction_string.go │ │ ├── app │ │ │ └── types │ │ │ │ ├── apptype_string.go │ │ │ │ └── appstatus_string.go │ │ └── device │ │ │ └── types │ │ │ └── notificationtype_string.go │ └── bff │ │ └── grpc │ │ └── testing │ │ └── assert.go ├── pkg │ ├── cmd │ │ └── config.go │ └── shutdown.go └── .gitignore ├── deployments ├── docker-compose │ ├── .gitignore │ ├── docs │ │ ├── docker-compose.yml │ │ └── docker-compose.dev.yml │ ├── backend │ │ ├── docker-compose.db.yml │ │ ├── docker-compose.vault.yml │ │ ├── docker-compose.identity.yml │ │ ├── docker-compose.bff.yml │ │ └── docker-compose.bff.dev.yml │ └── frontend │ │ ├── docker-compose.yml │ │ └── docker-compose.dev.yml ├── .gitignore ├── docker │ ├── python │ │ └── Dockerfile.test │ ├── backend │ │ ├── Dockerfile.test │ │ └── Dockerfile.bff │ ├── frontend │ │ ├── Dockerfile.test │ │ └── nginx │ │ │ └── entrypoint.sh │ └── docs │ │ └── Dockerfile ├── scripts │ ├── docs │ │ ├── stop.sh │ │ └── launch.sh │ ├── stop.sh │ ├── launch.sh │ ├── frontend │ │ ├── stop.sh │ │ └── launch.sh │ └── backend │ │ ├── stop.sh │ │ └── launch.sh └── test │ └── unit-test.sh ├── scripts ├── proto │ ├── proto-enum-generator │ │ ├── cmd │ │ │ ├── go-enum-patch │ │ │ │ ├── testdata │ │ │ │ │ ├── go.mod │ │ │ │ │ └── data │ │ │ │ │ │ ├── data2 │ │ │ │ │ │ ├── enum.go │ │ │ │ │ │ └── generated.proto │ │ │ │ │ │ ├── another.go │ │ │ │ │ │ ├── generated.proto │ │ │ │ │ │ └── enum.go │ │ │ │ └── parser.go │ │ │ └── go-enum-to-proto │ │ │ │ ├── testdata │ │ │ │ ├── go.mod │ │ │ │ └── data │ │ │ │ │ ├── data2 │ │ │ │ │ └── enum.go │ │ │ │ │ └── enum.go │ │ │ │ └── main.go │ │ ├── go.mod │ │ └── pkg │ │ │ └── types │ │ │ └── types.go │ ├── docker │ │ └── buf-compose.yaml │ └── generate.sh ├── unit-test.sh ├── mockery.sh └── gosdk │ ├── docker │ └── buf-compose.yaml │ └── generate.sh ├── samples ├── mcp │ └── currency_exchange │ │ ├── .env.sample │ │ ├── __init__.py │ │ ├── Dockerfile │ │ └── pyproject.toml ├── agent │ ├── a2a │ │ └── currency_exchange │ │ │ ├── __init__.py │ │ │ ├── .env.sample │ │ │ ├── Dockerfile │ │ │ └── pyproject.toml │ └── oasf │ │ └── financial_assistant │ │ ├── __init__.py │ │ ├── .env.sample │ │ ├── Dockerfile │ │ └── pyproject.toml └── charts │ ├── identity-sample-currency-exchange-a2a │ ├── templates │ │ ├── configmap.yaml │ │ ├── serviceaccount.yaml │ │ ├── service.yaml │ │ └── tests │ │ │ └── test-connection.yaml │ ├── .helmignore │ └── Chart.yaml │ ├── identity-sample-currency-exchange-mcp │ ├── templates │ │ ├── configmap.yaml │ │ ├── serviceaccount.yaml │ │ ├── service.yaml │ │ └── tests │ │ │ └── test-connection.yaml │ ├── .helmignore │ └── Chart.yaml │ └── identity-sample-financial-assist-oasf │ ├── templates │ ├── configmap.yaml │ ├── serviceaccount.yaml │ ├── tests │ │ └── test-connection.yaml │ └── service.yaml │ ├── .helmignore │ └── Chart.yaml ├── img ├── logo-color.png └── logo-white.png ├── .legitignore ├── sdk └── python │ ├── identityservice │ ├── __init__.py │ ├── auth │ │ └── __init__.py │ ├── cli.py │ ├── constant.py │ ├── exceptions.py │ └── badge │ │ └── oasf.py │ ├── google │ └── api │ │ ├── http_pb2_grpc.py │ │ ├── client_pb2_grpc.py │ │ ├── annotations_pb2_grpc.py │ │ ├── field_behavior_pb2_grpc.py │ │ ├── launch_stage_pb2_grpc.py │ │ ├── annotations_pb2.pyi │ │ └── launch_stage_pb2.pyi │ ├── openapiv3 │ ├── OpenAPIv3_pb2_grpc.py │ ├── annotations_pb2_grpc.py │ └── annotations_pb2.pyi │ ├── agntcy │ └── identity │ │ └── service │ │ └── v1alpha1 │ │ ├── app_pb2_grpc.py │ │ ├── badge_pb2_grpc.py │ │ ├── device_pb2_grpc.py │ │ ├── iam_pb2_grpc.py │ │ ├── openapi_pb2_grpc.py │ │ ├── policy_pb2_grpc.py │ │ ├── openapi_v2_pb2_grpc.py │ │ ├── pagination_pb2_grpc.py │ │ ├── settings_pb2_grpc.py │ │ ├── openapi_pb2.pyi │ │ ├── openapi_v2_pb2.pyi │ │ └── pagination_pb2.pyi │ └── setup.py ├── .github ├── CODEOWNERS ├── linters │ ├── .yamllint.yml │ ├── .protolintrc.yml │ └── .trivy.yml ├── dependabot.yml └── workflows │ ├── test.yml │ ├── reusable-test.yml │ └── pre-commit.yml ├── MAINTAINERS.md ├── charts ├── identity-service-ui │ ├── templates │ │ ├── configmap.yaml │ │ ├── serviceaccount.yaml │ │ ├── tests │ │ │ └── test-connection.yaml │ │ └── service.yaml │ ├── .helmignore │ └── Chart.yaml ├── identity-service-backend │ ├── Chart.lock │ ├── templates │ │ ├── configmap.yaml │ │ ├── serviceaccount.yaml │ │ ├── tests │ │ │ └── test-connection.yaml │ │ └── service.yaml │ ├── .helmignore │ └── Chart.yaml └── identity-service-docs │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests │ │ └── test-connection.yaml │ └── values.yaml └── .gitignore /docs/static/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/.nvmrc: -------------------------------------------------------------------------------- 1 | lts/iron 2 | -------------------------------------------------------------------------------- /docs/static/api: -------------------------------------------------------------------------------- 1 | ../../backend/api/spec/static/api -------------------------------------------------------------------------------- /backend/.golangci.yaml: -------------------------------------------------------------------------------- 1 | ../.github/linters/.golangci.yaml -------------------------------------------------------------------------------- /backend/api/spec/.gitignore: -------------------------------------------------------------------------------- 1 | *.swm* 2 | 3 | .vscode/ 4 | -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /deployments/docker-compose/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | postgres-data 3 | dev -------------------------------------------------------------------------------- /deployments/.gitignore: -------------------------------------------------------------------------------- 1 | docker/docker-compose-ben.yml 2 | docker/**/certs 3 | dev -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/go.mod: -------------------------------------------------------------------------------- 1 | module go-enums-test -------------------------------------------------------------------------------- /samples/mcp/currency_exchange/.env.sample: -------------------------------------------------------------------------------- 1 | IDENTITY_SERVICE_API_KEY= 2 | LOG_LEVEL=INFO 3 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-to-proto/testdata/go.mod: -------------------------------------------------------------------------------- 1 | module go-enums-test -------------------------------------------------------------------------------- /img/logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/img/logo-color.png -------------------------------------------------------------------------------- /img/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/img/logo-white.png -------------------------------------------------------------------------------- /frontend/.prettierignore: -------------------------------------------------------------------------------- 1 | package.json 2 | package-lock.json 3 | coverage 4 | dist 5 | build 6 | utils 7 | -------------------------------------------------------------------------------- /frontend/img/policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/img/policy.png -------------------------------------------------------------------------------- /frontend/img/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/img/welcome.png -------------------------------------------------------------------------------- /frontend/img/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/img/dashboard.png -------------------------------------------------------------------------------- /frontend/img/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/img/settings.png -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /docs/static/img/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/overview.png -------------------------------------------------------------------------------- /frontend/public/pwa-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/pwa-64x64.png -------------------------------------------------------------------------------- /docs/static/img/app-api-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/app-api-key.png -------------------------------------------------------------------------------- /docs/static/img/logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/logo-color.png -------------------------------------------------------------------------------- /docs/static/img/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/logo-white.png -------------------------------------------------------------------------------- /docs/static/img/policies_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_01.png -------------------------------------------------------------------------------- /docs/static/img/policies_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_02.png -------------------------------------------------------------------------------- /docs/static/img/policies_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_03.png -------------------------------------------------------------------------------- /docs/static/img/policies_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_04.png -------------------------------------------------------------------------------- /docs/static/img/policies_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_05.png -------------------------------------------------------------------------------- /docs/static/img/policies_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_06.png -------------------------------------------------------------------------------- /docs/static/img/policies_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_07.png -------------------------------------------------------------------------------- /docs/static/img/policies_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_08.png -------------------------------------------------------------------------------- /docs/static/img/policies_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_09.png -------------------------------------------------------------------------------- /docs/static/img/policies_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_10.png -------------------------------------------------------------------------------- /docs/static/img/policies_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_11.png -------------------------------------------------------------------------------- /docs/static/img/policies_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/policies_12.png -------------------------------------------------------------------------------- /frontend/img/agentic-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/img/agentic-service.png -------------------------------------------------------------------------------- /frontend/public/pwa-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/pwa-192x192.png -------------------------------------------------------------------------------- /frontend/public/pwa-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/pwa-512x512.png -------------------------------------------------------------------------------- /frontend/src/assets/keycloak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/assets/keycloak.png -------------------------------------------------------------------------------- /docs/static/img/duo-admin-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/duo-admin-view.png -------------------------------------------------------------------------------- /docs/static/img/tenant-api-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/tenant-api-key.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Bold.woff -------------------------------------------------------------------------------- /frontend/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.app.json", 3 | "include": ["src/**/*", "**/*.d.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /.legitignore: -------------------------------------------------------------------------------- 1 | value_BA8174804C6E9B46322A0CC63582C9D2 # TS password enum 2 | instance_F8C772E6CC8BCB8D4B044EDE34D6061A # not a secret -------------------------------------------------------------------------------- /docs/static/img/Settings_ORG_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_ORG_01.png -------------------------------------------------------------------------------- /docs/static/img/Settings_ORG_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_ORG_02.png -------------------------------------------------------------------------------- /docs/static/img/Settings_ORG_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_ORG_03.png -------------------------------------------------------------------------------- /docs/static/img/Settings_ORG_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_ORG_04.png -------------------------------------------------------------------------------- /docs/static/img/Settings_ORG_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_ORG_05.png -------------------------------------------------------------------------------- /docs/static/img/okta_admin_role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/okta_admin_role.png -------------------------------------------------------------------------------- /docs/static/img/okta_admin_scopes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/okta_admin_scopes.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer.png -------------------------------------------------------------------------------- /docs/static/img/verify-identity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/verify-identity.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Bold.woff2 -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Italic.woff -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Italic.woff2 -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Regular.woff -------------------------------------------------------------------------------- /docs/static/img/Settings_APIKey_00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_APIKey_00.png -------------------------------------------------------------------------------- /docs/static/img/Settings_APIKey_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_APIKey_01.png -------------------------------------------------------------------------------- /docs/static/img/Settings_APIKey_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_APIKey_02.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_01.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_02.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_03.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_04.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_05.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_06.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_07.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_08.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_09.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_10.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_11.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_12.png -------------------------------------------------------------------------------- /docs/static/img/Settings_DEVICE_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/Settings_DEVICE_13.png -------------------------------------------------------------------------------- /docs/static/img/agentic-service-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-all.png -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp.png -------------------------------------------------------------------------------- /docs/static/img/issue-badge-offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/issue-badge-offline.png -------------------------------------------------------------------------------- /docs/static/img/issue-badge-online.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/issue-badge-online.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer-duo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-duo.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer-ory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-ory.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-Regular.woff2 -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-SemiBold.woff -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-SemiBold.woff2 -------------------------------------------------------------------------------- /frontend/src/fonts/SharpSans-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/SharpSans-Bold.woff -------------------------------------------------------------------------------- /frontend/src/fonts/SharpSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/SharpSans-Bold.woff2 -------------------------------------------------------------------------------- /docs/static/img/4_1_Add_default_scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/4_1_Add_default_scope.png -------------------------------------------------------------------------------- /docs/static/img/4_2_Add_default_scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/4_2_Add_default_scope.png -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp-2.png -------------------------------------------------------------------------------- /docs/static/img/okta_private_key_auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/okta_private_key_auth.png -------------------------------------------------------------------------------- /docs/static/img/okta_private_key_pem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/okta_private_key_pem.png -------------------------------------------------------------------------------- /docs/static/img/ory-api-key-creation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/ory-api-key-creation.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer-okta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-okta.png -------------------------------------------------------------------------------- /docs/static/img/verify-identity-done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/verify-identity-done.png -------------------------------------------------------------------------------- /frontend/public/maskable-icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/maskable-icon-512x512.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-BoldItalic.woff -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-BoldItalic.woff2 -------------------------------------------------------------------------------- /docs/static/img/register-issuer-duo-done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-duo-done.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer-ory-done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-ory-done.png -------------------------------------------------------------------------------- /frontend/public/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/public/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-SemiBoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-SemiBoldItalic.woff -------------------------------------------------------------------------------- /frontend/src/fonts/SharpSans-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/SharpSans-BoldItalic.woff -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp-badge.png -------------------------------------------------------------------------------- /docs/static/img/ory-project-settings-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/ory-project-settings-view.png -------------------------------------------------------------------------------- /docs/static/img/register-issuer-okta-done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/register-issuer-okta-done.png -------------------------------------------------------------------------------- /frontend/src/fonts/Inter-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/Inter-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /frontend/src/fonts/SharpSans-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/frontend/src/fonts/SharpSans-BoldItalic.woff2 -------------------------------------------------------------------------------- /samples/mcp/currency_exchange/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | -------------------------------------------------------------------------------- /sdk/python/identityservice/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp-no-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp-no-badge.png -------------------------------------------------------------------------------- /samples/agent/a2a/currency_exchange/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | -------------------------------------------------------------------------------- /sdk/python/identityservice/auth/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | -------------------------------------------------------------------------------- /samples/agent/oasf/financial_assistant/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | -------------------------------------------------------------------------------- /deployments/docker/python/Dockerfile.test: -------------------------------------------------------------------------------- 1 | FROM python:3.13-alpine 2 | 3 | WORKDIR /src 4 | COPY ./sdk/python ./sdk 5 | WORKDIR /src/sdk 6 | RUN pip install .[test] 7 | -------------------------------------------------------------------------------- /samples/agent/a2a/currency_exchange/.env.sample: -------------------------------------------------------------------------------- 1 | CURRENCY_EXCHANGE_MCP_SERVER_URL= 2 | IDENTITY_SERVICE_API_KEY= 3 | AZURE_OPENAI_ENDPOINT= 4 | AZURE_OPENAI_API_KEY= 5 | -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp-badge-policies-usedby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp-badge-policies-usedby.png -------------------------------------------------------------------------------- /docs/contribute/wip/6_Policy_Engine_Integration/statement.md: -------------------------------------------------------------------------------- 1 | # Policy Engine Integration 2 | 3 | Exploring tools like Cedarling, OPA, etc. or transparent decision-making. 4 | AuthZen 5 | -------------------------------------------------------------------------------- /docs/static/img/agentic-service-mcp-badge-policies-assigned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agntcy/identity-service/HEAD/docs/static/img/agentic-service-mcp-badge-policies-assigned.png -------------------------------------------------------------------------------- /scripts/unit-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | ./deployments/test/unit-test.sh 6 | -------------------------------------------------------------------------------- /backend/api/spec/buf.work.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | version: v1 5 | directories: 6 | - proto 7 | -------------------------------------------------------------------------------- /backend/api/spec/plugins/protoc-gen-go-srvreg/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: proto 2 | proto: 3 | mkdir -p build 4 | go build -o build/protoc-gen-go-srvreg . 5 | export PATH=$(CURDIR)/build/:$$PATH 6 | -------------------------------------------------------------------------------- /docs/src/plugins/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from "./panzoom"; 7 | -------------------------------------------------------------------------------- /frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 125, 3 | "bracketSpacing": false, 4 | "singleQuote": true, 5 | "trailingComma": "none", 6 | "semi": true, 7 | "arrowParens": "always" 8 | } -------------------------------------------------------------------------------- /deployments/docker/backend/Dockerfile.test: -------------------------------------------------------------------------------- 1 | FROM golang:1.24-alpine AS builder 2 | 3 | WORKDIR /src 4 | COPY ./backend ./identity 5 | WORKDIR /src/identity 6 | RUN cd ./cmd/bff && go mod download 7 | -------------------------------------------------------------------------------- /samples/agent/oasf/financial_assistant/.env.sample: -------------------------------------------------------------------------------- 1 | CURRENCY_EXCHANGE_AGENT_URL= 2 | CURRENCY_EXCHANGE_MCP_SERVER_URL= 3 | IDENTITY_SERVICE_API_KEY= 4 | AZURE_OPENAI_ENDPOINT= 5 | AZURE_OPENAI_API_KEY= 6 | -------------------------------------------------------------------------------- /sdk/python/google/api/http_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /docs/contribute/wip/7_Brokered_identity_Gateways/statement.md: -------------------------------------------------------------------------------- 1 | # Brokered identity and gateways 2 | 3 | Enabling secure, seamless authentication across platforms through brokered identity and gateway integrations. 4 | -------------------------------------------------------------------------------- /sdk/python/google/api/client_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/openapiv3/OpenAPIv3_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/google/api/annotations_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/google/api/field_behavior_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/google/api/launch_stage_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/openapiv3/annotations_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /scripts/mockery.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | docker run --rm -v "$PWD/../backend:/identity" -w /identity vektra/mockery:3 6 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/app_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/badge_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/device_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/iam_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/openapi_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/policy_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/openapi_v2_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/pagination_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/settings_pb2_grpc.py: -------------------------------------------------------------------------------- 1 | # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! 2 | """Client and server classes corresponding to protobuf-defined services.""" 3 | import grpc 4 | 5 | -------------------------------------------------------------------------------- /deployments/scripts/docs/stop.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | docker compose -f ./deployments/docker-compose/docs/docker-compose.yml down 6 | -------------------------------------------------------------------------------- /frontend/src/utils/is-env-set.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export default (env?: any): boolean => { 7 | return !!(env && env !== 'undefined'); 8 | }; 9 | -------------------------------------------------------------------------------- /docs/contribute/wip/3_XAA/statement.md: -------------------------------------------------------------------------------- 1 | # Agent Identity & Cross-Agent Authentication/Authorization (XAA) 2 | 3 | Establishing robust models for agent identity by using Identity Badge for agents and MCP servers, including cross-agent authentication and authorization. 4 | -------------------------------------------------------------------------------- /docs/contribute/wip/4_MFA/statement.md: -------------------------------------------------------------------------------- 1 | # Multi-Factor Authorization for Autonomous Agents 2 | 3 | Designing multi-factor authorization / verification approaches tailored for autonomous agents, ensuring stronger safeguards without undermining autonomy or usability. 4 | -------------------------------------------------------------------------------- /frontend/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from './use-auth'; 7 | export * from './use-analytics'; 8 | export * from './use-window-size'; 9 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{"path": "./tsconfig.app.json"}, {"path": "./tsconfig.node.json"}], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/openapi_pb2.pyi: -------------------------------------------------------------------------------- 1 | from openapiv3 import annotations_pb2 as _annotations_pb2 2 | from google.protobuf import descriptor as _descriptor 3 | from typing import ClassVar as _ClassVar 4 | 5 | DESCRIPTOR: _descriptor.FileDescriptor 6 | -------------------------------------------------------------------------------- /backend/internal/pkg/sorting/sorting_column.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package sorting 5 | 6 | type Sorting struct { 7 | SortColumn *string 8 | SortDesc *bool 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/constants/pagination.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export const ROWS_PER_PAGE_OPTION = [1, 5, 10, 15, 20]; 7 | export const DEFAULT_ROWS_PER_PAGE = 10; 8 | -------------------------------------------------------------------------------- /frontend/src/store/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from './use-theme-store'; 7 | export * from './use-local-store'; 8 | export * from './use-settings-store'; 9 | -------------------------------------------------------------------------------- /backend/api/spec/buf.gen.openapiv2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | version: v1 5 | managed: 6 | enabled: true 7 | plugins: 8 | - name: openapiv2 9 | out: ./generated/openapi/ 10 | -------------------------------------------------------------------------------- /backend/api/spec/plugins/protoc-gen-go-srvreg/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/identity/protoc-gen-go-srvreg 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/golang/glog v1.2.4 7 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 8 | google.golang.org/protobuf v1.36.5 9 | ) 10 | -------------------------------------------------------------------------------- /frontend/src/types/geral.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export type SideBarOption = { 7 | id?: string; 8 | label?: string; 9 | icon?: React.ReactNode; 10 | }; 11 | -------------------------------------------------------------------------------- /deployments/scripts/stop.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | ./deployments/scripts/backend/stop.sh 6 | ./deployments/scripts/frontend/stop.sh 7 | ./deployments/scripts/docs/stop.sh 8 | -------------------------------------------------------------------------------- /frontend/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | compressionLevel: mixed 5 | 6 | enableGlobalCache: false 7 | 8 | nodeLinker: node-modules 9 | 10 | yarnPath: .yarn/releases/yarn-4.9.2.cjs 11 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/openapi_v2_pb2.pyi: -------------------------------------------------------------------------------- 1 | from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2 2 | from google.protobuf import descriptor as _descriptor 3 | from typing import ClassVar as _ClassVar 4 | 5 | DESCRIPTOR: _descriptor.FileDescriptor 6 | -------------------------------------------------------------------------------- /sdk/python/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | """Setup script for the package.""" 5 | 6 | import setuptools 7 | 8 | if __name__ == "__main__": 9 | setuptools.setup() 10 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | #################################################### 2 | # 3 | # List of approvers for Identity project 4 | # 5 | ##################################################### 6 | * @jadiaconu @beryder @mkedjour @rafaelsilva29 @copasseron @hmuyal @mayannuz @agntcy/identity-maintainers 7 | -------------------------------------------------------------------------------- /deployments/scripts/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | ./deployments/scripts/backend/launch.sh 6 | ./deployments/scripts/frontend/launch.sh 7 | ./deployments/scripts/docs/launch.sh 8 | -------------------------------------------------------------------------------- /backend/internal/pkg/pagination/page.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package pagination 5 | 6 | type Pageable[T any] struct { 7 | Items []*T 8 | Total int64 9 | Page int32 10 | Size int32 11 | } 12 | -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // This file is not used in compilation. It is here just for a nice editor experience. 3 | "extends": "@docusaurus/tsconfig", 4 | "compilerOptions": { 5 | "jsx": "react", 6 | "baseUrl": "." 7 | }, 8 | 9 | "exclude": [".docusaurus", "build"] 10 | } 11 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/data/data2/enum.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package data2 5 | 6 | type Enum2 int 7 | 8 | const ( 9 | EV1 Enum2 = iota 10 | EV2 11 | ) 12 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/data/another.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package data 5 | 6 | type Enum4 int 7 | 8 | const ( 9 | Enum4_V1 Enum4 = iota 10 | Enum4_V2 11 | ) 12 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-to-proto/testdata/data/data2/enum.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package data2 5 | 6 | type Enum2 int 7 | 8 | const ( 9 | EV1 Enum2 = iota 10 | EV2 11 | ) 12 | -------------------------------------------------------------------------------- /backend/api/spec/buf.gen.doc.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | version: v1 5 | managed: 6 | enabled: true 7 | plugins: 8 | - name: doc 9 | out: . 10 | opt: json,proto_workspace.json:openapi* 11 | strategy: all 12 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/data/data2/generated.proto: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | syntax = "proto3"; 5 | 6 | package data.data2; 7 | 8 | message Ignored {} 9 | 10 | message Enum2 {} 11 | 12 | -------------------------------------------------------------------------------- /frontend/src/queries/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from './iam'; 7 | export * from './settings'; 8 | export * from './agentic-services'; 9 | export * from './policies'; 10 | export * from './devices'; 11 | -------------------------------------------------------------------------------- /frontend/src/types/api/auth.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {V1Alpha1ApproveTokenRequest} from '@/api/generated/identity/auth_service.swagger.api'; 7 | 8 | export type {V1Alpha1ApproveTokenRequest as ApproveTokenRequest}; 9 | -------------------------------------------------------------------------------- /backend/api/spec/buf.gen.openapi.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | version: v1 5 | managed: 6 | enabled: true 7 | plugins: 8 | - name: openapi 9 | out: . 10 | opt: 11 | - default_response=true 12 | - enum_type=string 13 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/data/generated.proto: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | syntax = "proto3"; 5 | 6 | package data; 7 | 8 | message Enum3 {} 9 | 10 | message Enum4 {} 11 | 12 | message Enum { 13 | } 14 | -------------------------------------------------------------------------------- /deployments/scripts/docs/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | docker compose -f ./deployments/docker-compose/docs/docker-compose.yml build --no-cache 6 | docker compose -f ./deployments/docker-compose/docs/docker-compose.yml up -d 7 | -------------------------------------------------------------------------------- /docs/src/plugins/panzoom/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export { 7 | PanZoomPlugin as default, 8 | validatedThemeConfig, 9 | } from "./PanZoomPlugin"; 10 | export type { PanZoomPluginOptions } from "./PanzoomPluginOptions"; 11 | -------------------------------------------------------------------------------- /frontend/src/types/router.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {RouteObject} from 'react-router-dom'; 7 | 8 | export interface CustomRoute { 9 | disabled?: boolean; 10 | } 11 | 12 | export type Route = RouteObject & CustomRoute; 13 | -------------------------------------------------------------------------------- /.github/linters/.yamllint.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | extends: default 6 | 7 | rules: 8 | line-length: 9 | max: 500 10 | level: warning 11 | comments: disable 12 | indentation: disable 13 | truthy: 14 | check-keys: false 15 | -------------------------------------------------------------------------------- /docs/contribute/wip/8_Cross_Organization_Initiatives/statement.md: -------------------------------------------------------------------------------- 1 | # Cross-Organization Initiatives 2 | 3 | Establish liaisons and collaborative interplays with other ongoing initiatives within the Linux Foundation (LF) to ensure alignment and shared progress.Strengthen relationships, avoid duplication, and foster joint innovation across LF projects. 4 | -------------------------------------------------------------------------------- /scripts/proto/docker/buf-compose.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | services: 6 | buf-go: 7 | build: 8 | context: ../../.. 9 | dockerfile: scripts/proto/docker/Dockerfile.buf 10 | volumes: 11 | - ../../../:/identity/code 12 | -------------------------------------------------------------------------------- /MAINTAINERS.md: -------------------------------------------------------------------------------- 1 | # Maintainers 2 | 3 | - [beryder](https://github.com/beryder) 4 | - [copasseron](https://github.com/copasseron) 5 | - [hmuyal](https://github.com/hmuyal) 6 | - [jadiaconu](https://github.com/jadiaconu) 7 | - [mayannuz](https://github.com/mayannuz) 8 | - [mkedjour](https://github.com/mkedjour) 9 | - [rafaelsilva29](https://github.com/rafaelsilva29) 10 | -------------------------------------------------------------------------------- /scripts/gosdk/docker/buf-compose.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | version: '3' 6 | 7 | services: 8 | buf-go: 9 | build: 10 | context: ../../../ 11 | dockerfile: scripts/gosdk/docker/Dockerfile 12 | volumes: 13 | - ../../../backend:/identity/out 14 | -------------------------------------------------------------------------------- /sdk/python/google/api/annotations_pb2.pyi: -------------------------------------------------------------------------------- 1 | from google.api import http_pb2 as _http_pb2 2 | from google.protobuf import descriptor_pb2 as _descriptor_pb2 3 | from google.protobuf import descriptor as _descriptor 4 | from typing import ClassVar as _ClassVar 5 | 6 | DESCRIPTOR: _descriptor.FileDescriptor 7 | HTTP_FIELD_NUMBER: _ClassVar[int] 8 | http: _descriptor.FieldDescriptor 9 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | .swp 18 | .bkp 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | 24 | .env 25 | -------------------------------------------------------------------------------- /charts/identity-service-ui/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: ConfigMap 6 | metadata: 7 | name: {{ $.Release.Name }}-configmap-ui 8 | data: 9 | {{- range $key, $value := $.Values.configmap }} 10 | {{ $key }}: {{ $value | quote }} 11 | {{- end }} -------------------------------------------------------------------------------- /frontend/src/api/services/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from './iam-api'; 7 | export * from './settings-api'; 8 | export * from './agentic-services-api'; 9 | export * from './policy-api'; 10 | export * from './devices-api'; 11 | export * from './auth-api'; 12 | -------------------------------------------------------------------------------- /charts/identity-service-backend/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: postgresql 3 | repository: https://charts.bitnami.com/bitnami 4 | version: 18.0.15 5 | - name: vault 6 | repository: https://helm.releases.hashicorp.com 7 | version: 0.31.0 8 | digest: sha256:674f8bf7c3836d7e53ae10652362a49d6fdf2941c18da6cf30477477e104a455 9 | generated: "2025-10-15T12:11:36.211542+02:00" 10 | -------------------------------------------------------------------------------- /frontend/src/mutations/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export * from './settings'; 7 | export * from './agentic-services'; 8 | export * from './iam'; 9 | export * from './badge'; 10 | export * from './policies'; 11 | export * from './devices'; 12 | export * from './auth'; 13 | -------------------------------------------------------------------------------- /charts/identity-service-backend/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: ConfigMap 6 | metadata: 7 | name: {{ $.Release.Name }}-configmap-backend 8 | data: 9 | {{- range $key, $value := $.Values.configmap }} 10 | {{ $key }}: {{ $value | quote }} 11 | {{- end }} -------------------------------------------------------------------------------- /docs/src/plugins/panzoom/PanzoomPluginOptions.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import type { PanzoomOptions } from "@panzoom/panzoom"; 7 | 8 | export type PanZoomPluginOptions = PanzoomOptions & { 9 | selectors?: string[]; 10 | wrap?: boolean; 11 | timeout?: number; 12 | }; 13 | -------------------------------------------------------------------------------- /frontend/src/schemas/organization-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | 8 | export const OrganizationSchema = z.object({ 9 | name: z.string().min(1, 'Name is required') 10 | }); 11 | 12 | export type OrganizationFormValues = z.infer; 13 | -------------------------------------------------------------------------------- /samples/mcp/currency_exchange/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | FROM python:3.12-slim 5 | 6 | RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* 7 | 8 | WORKDIR /code 9 | COPY ./mcp/currency_exchange/* . 10 | RUN pip install --no-cache-dir . 11 | 12 | CMD ["python", "main.py"] 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | version: 2 6 | updates: 7 | - package-ecosystem: "github-actions" 8 | directory: "/" 9 | groups: 10 | github: 11 | patterns: 12 | - "actions/*" 13 | - "github/*" 14 | schedule: 15 | interval: "weekly" 16 | -------------------------------------------------------------------------------- /deployments/scripts/frontend/stop.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # If .env exists in the node directory, use it 6 | # If not, create an env with defaults 7 | ./deployments/scripts/frontend/env_setup.sh 8 | 9 | docker compose -f ./deployments/docker-compose/frontend/docker-compose.yml down 10 | -------------------------------------------------------------------------------- /scripts/gosdk/generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | 6 | # Generate the BFF client code 7 | cd ./scripts/gosdk/docker && 8 | docker compose -f buf-compose.yaml build --no-cache && 9 | docker compose -f buf-compose.yaml run --rm buf-go 10 | 11 | docker rmi docker-buf-go 12 | 13 | echo "Done" 14 | -------------------------------------------------------------------------------- /deployments/docker-compose/docs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-docs 6 | services: 7 | identity-docs: 8 | container_name: identity-docs 9 | image: ghcr.io/agntcy/identity-service/docs:latest 10 | pull_policy: always 11 | restart: always 12 | ports: 13 | - 3010:80 14 | -------------------------------------------------------------------------------- /samples/agent/a2a/currency_exchange/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | FROM python:3.12-slim 5 | 6 | RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* 7 | 8 | WORKDIR /code 9 | COPY ./samples/agent/a2a/currency_exchange/* . 10 | RUN pip install --no-cache-dir . 11 | 12 | CMD ["python", "main.py"] 13 | -------------------------------------------------------------------------------- /frontend/src/schemas/invite-user-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | 8 | export const InviteUserSchema = z.object({ 9 | email: z.string().email('Invalid email address').min(1, 'Email is required') 10 | }); 11 | 12 | export type InviteUserFormValues = z.infer; 13 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: ConfigMap 6 | metadata: 7 | name: {{ $.Release.Name }}-configmap-currency-exchange-a2a 8 | data: 9 | {{- range $key, $value := $.Values.configmap }} 10 | {{ $key }}: {{ $value | quote }} 11 | {{- end }} -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: ConfigMap 6 | metadata: 7 | name: {{ $.Release.Name }}-configmap-currency-exchange-mcp 8 | data: 9 | {{- range $key, $value := $.Values.configmap }} 10 | {{ $key }}: {{ $value | quote }} 11 | {{- end }} -------------------------------------------------------------------------------- /frontend/utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utils", 3 | "version": "1.0.0", 4 | "private": true, 5 | "packageManager": "yarn@4.5.0", 6 | "dependencies": { 7 | "@bufbuild/buf": "^1.57.2", 8 | "chalk": "^5.3.0", 9 | "globby": "^13.2.2", 10 | "shelljs": "^0.8.5", 11 | "swagger-typescript-api": "^13.2.10" 12 | }, 13 | "scripts": { 14 | "generate-bff": "node generate-bff.js" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: ConfigMap 6 | metadata: 7 | name: {{ $.Release.Name }}-configmap-financial-assistant-oasf 8 | data: 9 | {{- range $key, $value := $.Values.configmap }} 10 | {{ $key }}: {{ $value | quote }} 11 | {{- end }} -------------------------------------------------------------------------------- /backend/internal/pkg/strutil/secret.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package strutil 5 | 6 | const maskLength = 5 7 | 8 | func Mask(secret string) string { 9 | if secret == "" { 10 | return "" 11 | } 12 | 13 | if len(secret) <= maskLength { 14 | return "*****" 15 | } 16 | 17 | return "*****" + secret[len(secret)-maskLength:] 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {cn} from '@/lib/utils'; 7 | 8 | function Skeleton({className, ...props}: React.ComponentProps<'div'>) { 9 | return
; 10 | } 11 | 12 | export {Skeleton}; 13 | -------------------------------------------------------------------------------- /docs/contribute/wip/1_DCR/statement.md: -------------------------------------------------------------------------------- 1 | # DCR (Dynamic Client Registration) 2 | 3 | Exploring mechanisms for agents, MCP servers, and tools to dynamically register themselves, such as: 4 | 5 | - Dynamic Client Registration (DCR) as defined in OAuth 2.0 and OpenID Connect specifications, 6 | - Client ID Metadata (OAuth Client ID Metadata Document). 7 | 8 | This would reduce manual configuration and improve interoperability in distributed environments. 9 | -------------------------------------------------------------------------------- /sdk/python/identityservice/cli.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | """Cli binary for the Identity Service Python SDK.""" 4 | 5 | import typer 6 | 7 | from identityservice.commands import badge 8 | 9 | app = typer.Typer() 10 | app.add_typer( 11 | badge.app, name="badge", help="Handle badges for Agentic Services" 12 | ) 13 | 14 | if __name__ == "__main__": 15 | app() 16 | -------------------------------------------------------------------------------- /backend/api/spec/plugins/protoc-gen-go-srvreg/register_data.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package main 5 | 6 | type ServiceData struct { 7 | ServerName string 8 | ServerType string 9 | RegisterGrpcServerFunc string 10 | RegisterHttpHandlerFunc string 11 | } 12 | 13 | type RegisterTemplateData struct { 14 | Services []*ServiceData 15 | } 16 | -------------------------------------------------------------------------------- /backend/internal/pkg/grpcutil/matcher.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package grpcutil 5 | 6 | import ( 7 | "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" 8 | ) 9 | 10 | func CustomMatcher(key string) (string, bool) { 11 | switch key { 12 | case "X-Id-Api-Key": 13 | return key, true 14 | default: 15 | return runtime.DefaultHeaderMatcher(key) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /deployments/docker/frontend/Dockerfile.test: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | FROM node:22-alpine AS build 5 | 6 | # Install packages 7 | RUN apk add --update \ 8 | libpng-dev \ 9 | build-base \ 10 | nodejs \ 11 | npm \ 12 | yarn 13 | 14 | # Set workdir 15 | WORKDIR /home/web 16 | 17 | # Copy src 18 | COPY ./frontend . 19 | 20 | # Install libs 21 | RUN yarn install 22 | -------------------------------------------------------------------------------- /deployments/docker-compose/docs/docker-compose.dev.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-docs 6 | services: 7 | identity-docs: 8 | container_name: identity-docs 9 | pull_policy: always 10 | build: 11 | context: ../../../ 12 | dockerfile: deployments/docker/docs/Dockerfile 13 | restart: always 14 | ports: 15 | - 3010:80 16 | -------------------------------------------------------------------------------- /backend/internal/pkg/httputil/hostname.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package httputil 5 | 6 | import ( 7 | "net/url" 8 | ) 9 | 10 | func Hostname(stringUrl string) string { 11 | // Parse the URL 12 | parsedUrl, err := url.Parse(stringUrl) 13 | if err != nil { 14 | return "" 15 | } 16 | 17 | // Extract the hostname from the parsed URL 18 | return parsedUrl.Hostname() 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/styles/dashboard.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | .dashboard-card { 7 | background: #0D274D0D; 8 | backdrop-filter: blur(4px); 9 | height: 100%; 10 | gap: 10px; 11 | border-radius: 12px; 12 | padding: 12px; 13 | } 14 | 15 | .dashboard-card-content { 16 | background: #F5F8FD; 17 | border: 1px solid #D5DFF7; 18 | border-radius: 8px; 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/utils/docs.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import config from '@/config'; 7 | 8 | export const docs = (section?: string) => { 9 | const baseUrl = config.DOCS_URL + '/docs'; 10 | if (!section) { 11 | return baseUrl + "/intro"; 12 | } 13 | 14 | if (section) { 15 | return `${baseUrl}/${section}`; 16 | } 17 | 18 | return baseUrl; 19 | }; 20 | -------------------------------------------------------------------------------- /sdk/python/identityservice/constant.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | """Constants for the Identity Service Python SDK.""" 4 | 5 | DEFAULT_GRPC_URL = "api.grpc.agent-identity.outshift.com" 6 | GRPC_MAX_MESSAGE_LENGTH = 1024 * 1024 * 1024 7 | GRPC_KEEP_ALIVE_TIME_MS = 100000 8 | GRPC_HTTP2_MAX_PINGS_WITHOUT_DATA = 1000 9 | GRPC_KEEP_ALIVE_PERMIT_WITHOUT_CALLS = 1 10 | API_KEY_KEY = "x-id-api-key" 11 | -------------------------------------------------------------------------------- /deployments/docker-compose/backend/docker-compose.db.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-postgres 6 | services: 7 | identity-postgres: 8 | image: postgres:latest 9 | container_name: identity-postgres 10 | restart: always 11 | volumes: 12 | - ./postgres-data:/var/lib/postgresql 13 | ports: 14 | - "5432" 15 | env_file: 16 | - .env 17 | -------------------------------------------------------------------------------- /docs/contribute/wip/5_Audit_Logs_Standardization/statement.md: -------------------------------------------------------------------------------- 1 | # Audit Logs & Standardization 2 | 3 | Defining standards for audit logging to capture critical data points such as intent, tasks, delegation chains, and related metadata. This would improve transparency, accountability, and support compliance or forensic analysis. 4 | Include privacy implications on what can be captured and should not be captured. (Potential alignment with MELT-style observability and telemetry frameworks. 5 | -------------------------------------------------------------------------------- /frontend/src/providers/auth-provider/iam/auth-context-iam.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AuthContextIAM as ContextIAM} from '@/types/auth/iam'; 7 | import * as React from 'react'; 8 | 9 | export const AuthContextIAM = React.createContext(undefined); 10 | AuthContextIAM.displayName = 'AuthContextIAM'; 11 | 12 | export default AuthContextIAM; 13 | -------------------------------------------------------------------------------- /frontend/src/schemas/policy-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | 8 | export const PolicySchema = z.object({ 9 | name: z.string().min(1, 'Name is required'), 10 | assignedTo: z.string().min(1, 'Assigned To is required'), 11 | description: z.string().optional() 12 | }); 13 | 14 | export type PolicyFormValues = z.infer; 15 | -------------------------------------------------------------------------------- /backend/api/spec/buf.gen.python.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | version: v1 5 | managed: 6 | enabled: true 7 | plugins: 8 | - plugin: buf.build/grpc/python:v1.75.1 9 | out: ../../../sdk/python 10 | # dependencies 11 | - plugin: buf.build/protocolbuffers/python:v32.1 12 | out: ../../../sdk/python 13 | - plugin: buf.build/protocolbuffers/pyi:v32.1 14 | out: ../../../sdk/python 15 | -------------------------------------------------------------------------------- /backend/internal/pkg/convertutil/slice.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package convertutil 5 | 6 | func ConvertSlice[T any, S any](list []T, convert func(T) *S) []*S { 7 | if convert == nil { 8 | return nil 9 | } 10 | 11 | var responseList = make([]*S, 0) 12 | for _, obj := range list { 13 | responseList = append(responseList, convert(obj)) 14 | } 15 | 16 | return responseList 17 | } 18 | -------------------------------------------------------------------------------- /charts/identity-service-ui/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /frontend/src/main.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {createRoot} from 'react-dom/client'; 7 | import App from './app'; 8 | 9 | import 'vanilla-cookieconsent/dist/cookieconsent.css'; 10 | import '@open-ui-kit/core/typography.css'; 11 | import './styles/typography.css'; 12 | import './styles/index.css'; 13 | 14 | createRoot(document.getElementById('root')!).render(); 15 | -------------------------------------------------------------------------------- /backend/internal/pkg/ptrutil/ptr.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package ptrutil 5 | 6 | // Ptr returns a pointer to the given value. 7 | func Ptr[T any](v T) *T { 8 | return &v 9 | } 10 | 11 | func DerefStr(src *string) string { 12 | return Derefrence(src, "") 13 | } 14 | 15 | func Derefrence[T any](src *T, def T) T { 16 | if src != nil { 17 | return *src 18 | } 19 | 20 | return def 21 | } 22 | -------------------------------------------------------------------------------- /charts/identity-service-backend/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/identity-service-docs/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /docs/contribute/wip/2_User_Context/meeting_notes/2025-12-08.md: -------------------------------------------------------------------------------- 1 | # Date 2 | 3 | December 8th, 2025 4 | 5 | ## Attendees 6 | 7 | - Jean Diaconu (Cisco) 8 | - Ankit Agarwal (Skyfire) 9 | - Sri Aradhyula (Cisco) 10 | - Marcelo Yannuzzi (Cisco) 11 | 12 | ## Notes 13 | 14 | ### Discussed: 15 | 16 | - The CAIPE use case in detail 17 | - Sri presented a detailed sequence diagram 18 | - Discussed the muti-domain Auth problem 19 | - Starting 2026 we will define a spec roadmap and work on it 20 | -------------------------------------------------------------------------------- /backend/internal/pkg/context/keys.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package identitycontext 5 | 6 | // Keep this as string 7 | // The context value matching is based on value + type 8 | const ( 9 | TenantID string = "tenant-id" 10 | UserID string = "user-id" 11 | OrganizationID string = "organization-id" 12 | AppID string = "app-id" 13 | RequestID string = "request-id" 14 | ) 15 | -------------------------------------------------------------------------------- /deployments/docker-compose/frontend/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-frontend 6 | services: 7 | identity-ui: 8 | container_name: identity-ui 9 | image: ghcr.io/agntcy/identity-service/ui:latest 10 | pull_policy: always 11 | restart: always 12 | ports: 13 | - ${VITE_APP_CLIENT_PORT}:${VITE_APP_CLIENT_PORT} 14 | env_file: 15 | - .env 16 | -------------------------------------------------------------------------------- /deployments/scripts/backend/stop.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # If .env exists in the node directory, use it 6 | # If not, create an env with defaults 7 | ./deployments/scripts/backend/env_setup.sh 8 | 9 | docker compose -f ./deployments/docker-compose/backend/docker-compose.bff.yml down 10 | docker compose -f ./deployments/docker-compose/backend/docker-compose.bff.dev.yml down 11 | -------------------------------------------------------------------------------- /frontend/src/schemas/entitlements-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | 8 | export const EntitlementsSchema = z.enum(['TBAC']); 9 | export type Entitlements = z.infer; 10 | 11 | export const FeatureFlagsSchemas = z.object({ 12 | isTbacEnabled: z.boolean() 13 | }); 14 | export type FeatureFlags = z.infer; 15 | -------------------------------------------------------------------------------- /frontend/src/types/api/device.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import { 7 | V1Alpha1Device, 8 | V1Alpha1ListDevicesResponse, 9 | V1Alpha1PagedResponse 10 | } from '@/api/generated/identity/device_service.swagger.api'; 11 | 12 | export type { 13 | V1Alpha1Device as Device, 14 | V1Alpha1ListDevicesResponse as ListDevicesResponse, 15 | V1Alpha1PagedResponse as PagedResponse 16 | }; 17 | -------------------------------------------------------------------------------- /charts/identity-service-ui/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-service-ui 6 | description: A Helm chart for Kubernetes 7 | type: application 8 | version: 0.1.6 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/agntcy/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/agntcy/identity-service 16 | -------------------------------------------------------------------------------- /frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | /// 7 | /// 8 | /// 9 | /// 10 | /// 11 | /// 12 | /// 13 | -------------------------------------------------------------------------------- /frontend/src/queries/settings.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {SettingsAPI} from '@/api/services'; 7 | import {useQuery} from '@tanstack/react-query'; 8 | 9 | export const useGetSettings = () => { 10 | return useQuery({ 11 | queryKey: ['get-settings'], 12 | queryFn: async () => { 13 | const {data} = await SettingsAPI.getSettings(); 14 | return data; 15 | } 16 | }); 17 | }; 18 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /frontend/src/providers/auth-provider/oicd/helper/auth-context-oidc-helper.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AuthContextOIDC} from '@/types/auth/oidc'; 7 | import * as React from 'react'; 8 | 9 | export const AuthContextOIDCHelper = React.createContext(undefined); 10 | AuthContextOIDCHelper.displayName = 'AuthContextOIDCHelper'; 11 | 12 | export default AuthContextOIDCHelper; 13 | -------------------------------------------------------------------------------- /charts/identity-service-docs/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-service-docs 6 | description: A Helm chart for identity documentation service 7 | type: application 8 | version: 0.0.7 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/agntcy/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/agntcy/identity-service 16 | -------------------------------------------------------------------------------- /deployments/docker-compose/backend/docker-compose.vault.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-vault 6 | services: 7 | identity-vault: 8 | image: hashicorp/vault:latest 9 | container_name: identity-vault 10 | restart: always 11 | ports: 12 | - "8200" 13 | volumes: 14 | - ./vault-data/file:/vault/file/:rw 15 | environment: 16 | - VAULT_DEV_ROOT_TOKEN_ID=${VAULT_DEV_ROOT_TOKEN} 17 | -------------------------------------------------------------------------------- /deployments/docker/docs/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | FROM node:alpine AS builder-docs 5 | 6 | WORKDIR /build 7 | 8 | # Generate docs 9 | COPY docs . 10 | COPY backend/api/spec/static/api ./static/api 11 | RUN yarn install && npx docusaurus generate-proto-docs && yarn build 12 | 13 | # Build final image for running the APIs and docs 14 | FROM httpd:2.4 15 | 16 | COPY --from=builder-docs /build/build /usr/local/apache2/htdocs 17 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/testdata/data/enum.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package data 5 | 6 | // enum comment 7 | type Enum int 8 | 9 | const ( 10 | // Const comment 11 | // 12 | // it ends here 13 | Enum_VALUE_1 Enum = iota 14 | 15 | // Const comment for value 2 16 | Enum_VALUE_2 17 | ) 18 | 19 | type Enum3 int 20 | 21 | const ( 22 | Enum3_V1 Enum3 = iota 23 | Enum3_V2 24 | Enum3_V3 25 | ) 26 | -------------------------------------------------------------------------------- /frontend/src/schemas/agentic-service-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AppType} from '@/types/api/app'; 7 | import {z} from 'zod'; 8 | 9 | export const AgenticServiceSchema = z.object({ 10 | name: z.string().min(1, 'Name is required'), 11 | description: z.string().optional(), 12 | type: z.nativeEnum(AppType) 13 | }); 14 | 15 | export type AgenticServiceFormValues = z.infer; 16 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/go.mod: -------------------------------------------------------------------------------- 1 | module proto-enum-generator 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/spf13/pflag v1.0.6 7 | github.com/stretchr/testify v1.10.0 8 | github.com/yoheimuta/go-protoparser/v4 v4.14.0 9 | golang.org/x/tools v0.30.0 10 | ) 11 | 12 | require ( 13 | github.com/davecgh/go-spew v1.1.1 // indirect 14 | github.com/pmezard/go-difflib v1.0.0 // indirect 15 | golang.org/x/mod v0.23.0 // indirect 16 | golang.org/x/sync v0.11.0 // indirect 17 | gopkg.in/yaml.v3 v3.0.1 // indirect 18 | ) 19 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: Run all tests for main 6 | 7 | on: 8 | push: 9 | # Run superlinter on pushes to default branch 10 | branches: 11 | - main 12 | # Run superlinter on pull request events 13 | pull_request: 14 | 15 | # Declare default permissions as read-only 16 | permissions: read-all 17 | 18 | jobs: 19 | pre-release-test: 20 | uses: ./.github/workflows/reusable-test.yml 21 | -------------------------------------------------------------------------------- /deployments/docker-compose/frontend/docker-compose.dev.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-frontend 6 | services: 7 | identity-ui: 8 | container_name: identity-ui 9 | image: identity-ui 10 | build: 11 | context: ../../../ 12 | dockerfile: deployments/docker/frontend/Dockerfile 13 | restart: always 14 | ports: 15 | - ${VITE_APP_CLIENT_PORT}:${VITE_APP_CLIENT_PORT} 16 | env_file: 17 | - .env 18 | -------------------------------------------------------------------------------- /frontend/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "src/styles/index.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } 22 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-to-proto/testdata/data/enum.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package data 5 | 6 | import ( 7 | "go-enums-test/data/data2" 8 | ) 9 | 10 | // enum comment 11 | type Enum int 12 | 13 | const ( 14 | // Const comment 15 | // 16 | // it ends here 17 | Enum_VALUE_1 Enum = iota 18 | Enum_VALUE_2 19 | ) 20 | 21 | type Something struct { 22 | En Enum 23 | En2 []Enum 24 | En3 map[string]data2.Enum2 25 | } 26 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-sample-currency-exchange-a2a 6 | description: A Helm chart for Kubernetes 7 | type: application 8 | version: 0.1.5 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/cisco-eti/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/cisco-eti/identity-service 16 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-sample-currency-exchange-mcp 6 | description: A Helm chart for Kubernetes 7 | type: application 8 | version: 0.1.6 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/cisco-eti/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/cisco-eti/identity-service 16 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-sample-financial-assist-oasf 6 | description: A Helm chart for Kubernetes 7 | type: application 8 | version: 0.1.6 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/cisco-eti/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/cisco-eti/identity-service 16 | -------------------------------------------------------------------------------- /backend/api/client/auth/auth.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package auth 5 | 6 | import ( 7 | "github.com/go-openapi/runtime" 8 | httptransport "github.com/go-openapi/runtime/client" 9 | ) 10 | 11 | func APIKeyAuth(apiKey string) runtime.ClientAuthInfoWriter { 12 | return httptransport.APIKeyAuth("x-id-api-key", "header", apiKey) 13 | } 14 | 15 | func BearerToken(token string) runtime.ClientAuthInfoWriter { 16 | return httptransport.BearerToken(token) 17 | } 18 | -------------------------------------------------------------------------------- /backend/internal/pkg/pgutil/time.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package pgutil 5 | 6 | import ( 7 | "database/sql" 8 | "time" 9 | ) 10 | 11 | func SqlNullTimeToTime(t sql.NullTime) *time.Time { 12 | if t.Valid { 13 | return &t.Time 14 | } 15 | 16 | return nil 17 | } 18 | 19 | func TimeToSqlNullTime(t *time.Time) sql.NullTime { 20 | if t != nil { 21 | return sql.NullTime{Time: *t, Valid: true} 22 | } 23 | 24 | return sql.NullTime{Valid: false} 25 | } 26 | -------------------------------------------------------------------------------- /backend/internal/core/settings/repository.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package settings 5 | 6 | import ( 7 | "context" 8 | 9 | "github.com/agntcy/identity-service/internal/core/settings/types" 10 | ) 11 | 12 | type Repository interface { 13 | UpdateIssuerSettings( 14 | ctx context.Context, 15 | issuerSettings *types.IssuerSettings, 16 | ) (*types.IssuerSettings, error) 17 | GetIssuerSettings( 18 | ctx context.Context, 19 | ) (*types.IssuerSettings, error) 20 | } 21 | -------------------------------------------------------------------------------- /deployments/docker-compose/backend/docker-compose.identity.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-node 6 | include: 7 | - docker-compose.db.yml 8 | services: 9 | identity-node: 10 | container_name: identity-node 11 | image: ghcr.io/agntcy/identity/node:latest 12 | pull_policy: always 13 | restart: always 14 | depends_on: 15 | - identity-postgres 16 | ports: 17 | - "4000" 18 | - "4001" 19 | env_file: 20 | - .env 21 | -------------------------------------------------------------------------------- /docs/contribute/wip/2_User_Context/statement.md: -------------------------------------------------------------------------------- 1 | # Subject Context Transfer 2 | 3 | This Subgroup (SG) addresses subject context transfers and bindings enabling policy decisions across a delegated chain that may involve users, agents, and tools. 4 | Issues like how such contexts should be embedded into tokens and leveraged to inform policy decision points, enable fine-grained authorization, traceability, and compliance are within the scope of this SG. 5 | This SG will also identify relevant standards, other ongoing initiatives, and push for new specs for the gaps identified. 6 | -------------------------------------------------------------------------------- /.github/workflows/reusable-test.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: Run all tests 6 | 7 | on: 8 | workflow_call: 9 | pull_request: 10 | branches: [main] 11 | push: 12 | branches: [main] 13 | 14 | jobs: 15 | test: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: checkout 19 | uses: actions/checkout@v5.0.0 20 | - name: test 21 | run: | 22 | echo "Running all tests..." 23 | ./deployments/test/unit-test.sh 24 | -------------------------------------------------------------------------------- /backend/internal/core/idp/idp_test.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | //nolint:testpackage // this file is testing a private function 5 | package idp 6 | 7 | import ( 8 | "testing" 9 | 10 | "github.com/google/uuid" 11 | "github.com/stretchr/testify/assert" 12 | ) 13 | 14 | func TestIdp_GetName(t *testing.T) { 15 | t.Parallel() 16 | 17 | name := getName() 18 | 19 | assert.Contains(t, name, integrationPrefix) 20 | assert.Len(t, name, len(uuid.NewString())+len(integrationPrefix)) 21 | } 22 | -------------------------------------------------------------------------------- /backend/internal/pkg/strutil/uuid.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package strutil 5 | 6 | import ( 7 | "github.com/agntcy/identity-service/internal/pkg/ptrutil" 8 | "github.com/google/uuid" 9 | ) 10 | 11 | func SafeUuidString(u *uuid.UUID) *string { 12 | if u == nil { 13 | return nil 14 | } 15 | 16 | return ptrutil.Ptr(u.String()) 17 | } 18 | 19 | func SafeUuid(u *string) *uuid.UUID { 20 | if u == nil { 21 | return nil 22 | } 23 | 24 | return ptrutil.Ptr(uuid.MustParse(*u)) 25 | } 26 | -------------------------------------------------------------------------------- /samples/agent/oasf/financial_assistant/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | FROM python:3.12-slim 5 | 6 | RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* 7 | 8 | WORKDIR /code 9 | COPY ./samples/agent/oasf/financial_assistant/* . 10 | RUN pip install --no-cache-dir . 11 | 12 | # Copy UI files to ui directory 13 | COPY ./samples/agent/oasf/financial_assistant/ui/ ./ui/ 14 | 15 | # Expose only one port for uvicorn 16 | EXPOSE 9093 17 | 18 | CMD ["python", "main.py"] 19 | -------------------------------------------------------------------------------- /frontend/src/constants/http-errors.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {HttpStatusCode} from 'axios'; 7 | 8 | export const httpErrors = { 9 | UNAUTHORIZED: HttpStatusCode.Unauthorized, 10 | FORBIDDEN: HttpStatusCode.Forbidden, 11 | BAD_REQUEST: HttpStatusCode.BadRequest, 12 | NOT_FOUND: HttpStatusCode.NotFound 13 | }; 14 | 15 | export const USER_NOT_AUTH = 'user is not authorized'; 16 | 17 | export const httpErrorsAuth = [HttpStatusCode.Unauthorized, HttpStatusCode.Forbidden]; 18 | -------------------------------------------------------------------------------- /frontend/src/schemas/policy-logic-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | import {RuleSchema} from './rule-schema'; 8 | 9 | export const PolicyLogicySchema = z.object({ 10 | rules: z 11 | .array(RuleSchema) 12 | .nonempty('At least one rule is required') 13 | .refine((rules) => rules.length > 0, { 14 | message: 'At least one rule is required' 15 | }) 16 | }); 17 | 18 | export type PolicyLogicyFormValues = z.infer; 19 | -------------------------------------------------------------------------------- /docs/src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | /** 7 | * CSS files with the .module.css suffix will be treated as CSS modules 8 | * and scoped locally. 9 | */ 10 | 11 | .heroBanner { 12 | margin-top: 60px; 13 | padding: 4rem 0; 14 | text-align: center; 15 | position: relative; 16 | overflow: hidden; 17 | } 18 | 19 | @media screen and (max-width: 996px) { 20 | .heroBanner { 21 | padding: 2rem; 22 | } 23 | } 24 | 25 | .buttons { 26 | margin-top: 50px; 27 | } 28 | -------------------------------------------------------------------------------- /backend/api/spec/buf.gen.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | version: v1 6 | plugins: 7 | - plugin: go 8 | out: ../server 9 | opt: paths=source_relative 10 | - plugin: go-grpc 11 | out: ../server 12 | opt: paths=source_relative,require_unimplemented_servers=false 13 | - plugin: grpc-gateway 14 | out: ../server 15 | opt: paths=source_relative,allow_delete_body=true 16 | - plugin: go-srvreg 17 | out: ../server 18 | opt: logtostderr=true,paths=source_relative 19 | strategy: all 20 | -------------------------------------------------------------------------------- /.github/workflows/pre-commit.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: pre-commit 6 | 7 | on: 8 | pull_request: 9 | push: 10 | branches: [main] 11 | 12 | jobs: 13 | pre-commit: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v5.0.0 17 | - uses: actions/setup-python@v6 18 | - uses: actions/setup-go@v6 19 | - run: go install golang.org/x/lint/golint@latest 20 | - run: echo "PATH=$PATH:/home/runner/go/bin" >> "$GITHUB_ENV" 21 | - uses: pre-commit/action@v3.0.1 22 | -------------------------------------------------------------------------------- /backend/internal/pkg/strutil/random.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package strutil 5 | 6 | import ( 7 | "crypto/rand" // math/rand is not considered cryptographically secure 8 | "fmt" 9 | ) 10 | 11 | const extraLength = 2 // for hex encoding 12 | 13 | func Random(length int) string { 14 | if length < 0 { 15 | return "" 16 | } 17 | 18 | b := make([]byte, length+extraLength) 19 | _, _ = rand.Read(b) // Default reader uses OS APIs that never return an error 20 | 21 | return fmt.Sprintf("%x", b)[2 : length+extraLength] 22 | } 23 | -------------------------------------------------------------------------------- /charts/identity-service-ui/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-service-ui.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-service-ui.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /docs/contribute/README.md: -------------------------------------------------------------------------------- 1 | # Contribute to the Agency Identity Service 2 | 3 | Thanks for your interest in contributing to `AGNTCY Identity Service`! Here you will find development resources to help you get started and contribute as a developer to our open-source project. 4 | 5 | ## Development Guides and existing Architecture 6 | 7 | - [Backend Development Guide](backend/README.md) 8 | - [Frontend Development & Deployment Guide](../../frontend/README.md) 9 | 10 | ## Work in Progress 11 | 12 | The [Work in Progress](wip) contains the latest updates on features and improvements currently being worked on within the Working Group. 13 | -------------------------------------------------------------------------------- /backend/internal/bff/grpc/testing/assert.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Appentifier: Apache-2.0 3 | 4 | package grpctesting 5 | 6 | import ( 7 | "testing" 8 | 9 | "github.com/stretchr/testify/assert" 10 | "google.golang.org/grpc/codes" 11 | "google.golang.org/grpc/status" 12 | ) 13 | 14 | func AssertGrpcError(t *testing.T, err error, code codes.Code, msg string) { 15 | t.Helper() 16 | 17 | assert.Error(t, err) 18 | 19 | s, ok := status.FromError(err) 20 | assert.True(t, ok) 21 | 22 | assert.Equal(t, code, s.Code()) 23 | assert.Equal(t, msg, s.Message()) 24 | } 25 | -------------------------------------------------------------------------------- /backend/internal/pkg/strutil/trim.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package strutil 5 | 6 | import ( 7 | "slices" 8 | "strings" 9 | ) 10 | 11 | func TrimSpaceAndNewline(s string) string { 12 | if s == "" { 13 | return s 14 | } 15 | 16 | s = strings.TrimSpace(s) 17 | s = strings.ReplaceAll(s, "\n", "") 18 | s = strings.ReplaceAll(s, "\r", "") 19 | s = strings.ReplaceAll(s, "\t", "") 20 | 21 | return s 22 | } 23 | 24 | func TrimSlice(s []string) []string { 25 | return slices.DeleteFunc(s, func(s string) bool { return s == "" }) 26 | } 27 | -------------------------------------------------------------------------------- /charts/identity-service-docs/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-service-docs.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-service-docs.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /docs/contribute/wip/2_User_Context/meeting_notes/2025-11-24.md: -------------------------------------------------------------------------------- 1 | # Date 2 | 3 | November 24th, 2025 4 | 5 | ## Attendees 6 | 7 | - Tomer Elias (Human) 8 | - Jean Diaconu (Cisco) 9 | - Ankit Agarwal (Skyfire) 10 | - Sri Aradhyula (Cisco) 11 | - Marcelo Yannuzzi (Cisco) 12 | 13 | ## Notes 14 | 15 | ### Discussed: 16 | 17 | - Round table on use cases we are seeing and needs 18 | - The role of KYA 19 | - Delegation vs impersonation discussion 20 | 21 | ## Next Steps 22 | 23 | - CAPIE use case in detail 24 | - Sri to provide a detailed sequence diagram during the next call, as a concrete example to identify and discuss the gaps 25 | -------------------------------------------------------------------------------- /frontend/src/components/ui/loading-text.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {Typography} from '@open-ui-kit/core'; 7 | 8 | export const LoadingText = ({text}: {text: string}) => { 9 | return ( 10 |
11 | 12 | ({color: theme.palette.vars.baseTextStrong})}> 13 | {text || 'Loading...'} 14 | 15 | 16 |
17 | ); 18 | }; 19 | -------------------------------------------------------------------------------- /frontend/src/store/use-theme-store.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {create} from 'zustand'; 7 | 8 | type ThemeStore = { 9 | isDarkMode: boolean; 10 | toggleDarkMode: () => void; 11 | setDarkMode: (value: boolean) => void; 12 | }; 13 | 14 | export const useThemeStore = create( 15 | (set): ThemeStore => ({ 16 | isDarkMode: false, 17 | toggleDarkMode: () => set((state) => ({isDarkMode: !state.isDarkMode})), 18 | setDarkMode: (value: boolean) => set(() => ({isDarkMode: value})) 19 | }) 20 | ); 21 | -------------------------------------------------------------------------------- /charts/identity-service-docs/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-service-docs.fullname" . }} 8 | labels: 9 | {{- include "identity-service-docs.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | selector: 17 | {{- include "identity-service-docs.selectorLabels" . | nindent 4 }} 18 | -------------------------------------------------------------------------------- /charts/identity-service-backend/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-service-backend.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-service-backend.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /frontend/src/router/router.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | /* c8 ignore start */ 7 | 8 | import {useMemo} from 'react'; 9 | import {createBrowserRouter, RouterProvider} from 'react-router-dom'; 10 | import {useRoutes} from './routes'; 11 | import config from '@/config'; 12 | 13 | export const Router = () => { 14 | const routes = useRoutes(); 15 | const router = useMemo(() => createBrowserRouter(routes, {basename: config.APP_BASE_NAME}), [routes]); 16 | return ; 17 | }; 18 | 19 | /* c8 ignore stop */ 20 | -------------------------------------------------------------------------------- /sdk/python/openapiv3/annotations_pb2.pyi: -------------------------------------------------------------------------------- 1 | from openapiv3 import OpenAPIv3_pb2 as _OpenAPIv3_pb2 2 | from google.protobuf import descriptor_pb2 as _descriptor_pb2 3 | from google.protobuf import descriptor as _descriptor 4 | from typing import ClassVar as _ClassVar 5 | 6 | DESCRIPTOR: _descriptor.FileDescriptor 7 | DOCUMENT_FIELD_NUMBER: _ClassVar[int] 8 | document: _descriptor.FieldDescriptor 9 | OPERATION_FIELD_NUMBER: _ClassVar[int] 10 | operation: _descriptor.FieldDescriptor 11 | SCHEMA_FIELD_NUMBER: _ClassVar[int] 12 | schema: _descriptor.FieldDescriptor 13 | PROPERTY_FIELD_NUMBER: _ClassVar[int] 14 | property: _descriptor.FieldDescriptor 15 | -------------------------------------------------------------------------------- /charts/identity-service-ui/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-service-ui.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-service-ui.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-service-ui.fullname" . }}:{{ .Values.service.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /frontend/src/assets/oasf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # If you prefer the allow list template instead of the deny list, see community template: 2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore 3 | # 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | 11 | # Test binary, built with `go test -c` 12 | !*.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # Dependency directories (remove the comment below to include it) 18 | # vendor/ 19 | 20 | # Go workspace file 21 | go.work 22 | 23 | .vscode/ 24 | vault-data/ 25 | 26 | *.tgz 27 | 28 | .env.* 29 | .DS_Store 30 | -------------------------------------------------------------------------------- /.github/linters/.protolintrc.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | # Lint directives. 6 | lint: 7 | # Linter files to walk. 8 | files: 9 | # The specific files to exclude. 10 | exclude: 11 | # NOTE: UNIX paths will be properly accepted by both UNIX and Windows. 12 | - api/spec/proto/agntcy/identity/service/v1alpha1/badge.proto 13 | 14 | rules: 15 | remove: 16 | - REPEATED_FIELD_NAMES_PLURALIZED 17 | 18 | # Linter rules option. 19 | rules_option: 20 | # MAX_LINE_LENGTH rule option. 21 | max_line_length: 22 | max_chars: 150 23 | -------------------------------------------------------------------------------- /backend/internal/pkg/jwtutil/verify.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package jwtutil 5 | 6 | import ( 7 | "errors" 8 | "fmt" 9 | 10 | "github.com/lestrrat-go/jwx/v3/jwt" 11 | ) 12 | 13 | func Verify( 14 | jwtString string, 15 | ) error { 16 | if jwtString == "" { 17 | return errors.New("JWT string cannot be nil or empty") 18 | } 19 | 20 | _, err := jwt.Parse( 21 | []byte(jwtString), 22 | jwt.WithVerify(false), 23 | jwt.WithValidate(true), 24 | ) 25 | if err != nil { 26 | return fmt.Errorf("failed to parse JWT: %w", err) 27 | } 28 | 29 | return nil 30 | } 31 | -------------------------------------------------------------------------------- /charts/identity-service-docs/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-service-docs.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-service-docs.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-service-docs.fullname" . }}:{{ .Values.service.http.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /charts/identity-service-ui/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-service-ui.fullname" . }} 8 | labels: 9 | {{- include "identity-service-ui.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | selector: 17 | app.kubernetes.io/name: {{ .Chart.Name }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | -------------------------------------------------------------------------------- /charts/identity-service-backend/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-service-backend.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-service-backend.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-service-backend.fullname" . }}:{{ .Values.service.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | # ENV 27 | .env 28 | 29 | # yarn 30 | .yarn/cache 31 | .yarn/unplugged 32 | .yarn/build-state.yml 33 | .yarn/install-state.gz 34 | .pnp.* 35 | .yarn/* 36 | !.yarn/patches 37 | !.yarn/releases 38 | !.yarn/plugins 39 | !.yarn/sdks 40 | !.yarn/versions 41 | 42 | dev-dist 43 | 44 | coverage 45 | -------------------------------------------------------------------------------- /frontend/src/assets/types-agentic-services/agntcy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/providers/theme-provider/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {useThemeStore} from '@/store'; 7 | import {ThemeProvider as SparkThemeProvider} from '@open-ui-kit/core'; 8 | import {useShallow} from 'zustand/react/shallow'; 9 | 10 | export const ThemeProvider = ({children}: {children: React.ReactNode}) => { 11 | const {isDarkMode} = useThemeStore( 12 | useShallow((store) => ({ 13 | isDarkMode: store.isDarkMode 14 | })) 15 | ); 16 | return {children}; 17 | }; 18 | -------------------------------------------------------------------------------- /backend/internal/core/idp/credential.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package idp 5 | 6 | import ( 7 | "context" 8 | "errors" 9 | ) 10 | 11 | const ( 12 | mountPath = "credentials" 13 | ) 14 | 15 | var ErrCredentialNotFound = errors.New("credential not found") 16 | 17 | type CredentialStore interface { 18 | Get( 19 | ctx context.Context, 20 | subject string, 21 | ) (*ClientCredentials, error) 22 | Put( 23 | ctx context.Context, 24 | cred *ClientCredentials, 25 | subject string, 26 | ) error 27 | Delete( 28 | ctx context.Context, 29 | subject string, 30 | ) error 31 | } 32 | -------------------------------------------------------------------------------- /frontend/src/constants/iam.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AuthConfigOptionsIAM} from '@/types/auth/iam'; 7 | 8 | export const defaultAuthConfigOptionsIAM: AuthConfigOptionsIAM = { 9 | scopes: ['openid', 'offline_access'], 10 | renew: 'auto', 11 | redirectUri: `${window.location.protocol}//${window.location.host}`, 12 | devMode: false, 13 | renewOnTabActivation: true, 14 | tabInactivityDuration: 1800, // 30 minutes 15 | syncStorage: true 16 | }; 17 | 18 | export const ACCESS_TOKEN_NAME = 'accessToken'; 19 | export const ACCESS_TOKEN_EXPIRED_EVENT = 'expired'; 20 | -------------------------------------------------------------------------------- /frontend/src/utils/date.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export const safeGetDate = (date?: string | number | Date | null): null | Date => { 7 | if (!date) { 8 | return null; 9 | } 10 | 11 | try { 12 | const result = new Date(date); 13 | // https://stackoverflow.com/a/1353711/14552714 14 | // eslint-disable-next-line @typescript-eslint/no-unsafe-argument 15 | const isValid = result instanceof Date && !isNaN(result as any); 16 | if (!isValid) { 17 | return null; 18 | } 19 | return result; 20 | } catch { 21 | return null; 22 | } 23 | }; -------------------------------------------------------------------------------- /frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2022", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "composite": true, 8 | "skipLibCheck": true, 9 | "moduleResolution": "bundler", 10 | "allowImportingTsExtensions": true, 11 | "isolatedModules": true, 12 | "moduleDetection": "force", 13 | "noEmit": true, 14 | "strict": true, 15 | "noUnusedLocals": false, 16 | "noUnusedParameters": false, 17 | "noFallthroughCasesInSwitch": true, 18 | "allowSyntheticDefaultImports": true 19 | }, 20 | "include": ["vite.config.ts"] 21 | } 22 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-patch/parser.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package main 5 | 6 | import ( 7 | "encoding/json" 8 | "fmt" 9 | "os" 10 | "proto-enum-generator/pkg/types" 11 | ) 12 | 13 | func ParsePatchFile(path string) ([]*types.ProtoOutput, error) { 14 | data, err := os.ReadFile(path) 15 | if err != nil { 16 | return nil, fmt.Errorf("unable to read patch file: %w", err) 17 | } 18 | 19 | var enums []*types.ProtoOutput 20 | 21 | err = json.Unmarshal(data, &enums) 22 | if err != nil { 23 | return nil, err 24 | } 25 | 26 | return enums, nil 27 | } 28 | -------------------------------------------------------------------------------- /deployments/docker/backend/Dockerfile.bff: -------------------------------------------------------------------------------- 1 | FROM golang:1.24.5-alpine AS builder 2 | 3 | # Build the package 4 | WORKDIR /build 5 | COPY ./backend . 6 | RUN cd ./cmd/bff && go build -o ../../identity-bff 7 | 8 | RUN apk update \ 9 | && apk add ca-certificates wget \ 10 | && update-ca-certificates 11 | 12 | FROM golang:1.24.5-alpine 13 | 14 | # Create a group and user 15 | RUN addgroup -S web && adduser -u 1999 -S -G web web 16 | 17 | # Set workdir 18 | WORKDIR /home/web 19 | 20 | COPY --from=builder /build/identity-bff . 21 | 22 | # Give permissions 23 | RUN chmod +x identity-bff && \ 24 | chown -R web:web . 25 | 26 | USER web 27 | 28 | ENTRYPOINT ["./identity-bff"] 29 | -------------------------------------------------------------------------------- /deployments/scripts/frontend/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # If .env exists in the frontend directory, use it 6 | # If not, create an env with defaults 7 | ./deployments/scripts/frontend/env_setup.sh 8 | 9 | # Check if dev option is set 10 | compose_file="./deployments/docker-compose/frontend/docker-compose.yml" 11 | if [ "$1" == "true" ]; then 12 | echo "Running in dev mode" 13 | compose_file="./deployments/docker-compose/frontend/docker-compose.dev.yml" 14 | fi 15 | 16 | docker compose -f "$compose_file" build --no-cache 17 | docker compose -f "$compose_file" up -d 18 | -------------------------------------------------------------------------------- /docs/static/img/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-sample-currency-exchange-a2a.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-sample-currency-exchange-a2a.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-sample-currency-exchange-mcp.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-sample-currency-exchange-mcp.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | {{ if .Values.serviceAccount.create }} 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: {{ include "identity-sample-financial-assist-oasf.serviceAccountName" . }} 9 | labels: 10 | {{- include "identity-sample-financial-assist-oasf.labels" . | nindent 4 }} 11 | {{- with .Values.serviceAccount.annotations }} 12 | annotations: 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /deployments/docker-compose/backend/docker-compose.bff.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-bff 6 | include: 7 | - docker-compose.db.yml 8 | - docker-compose.vault.yml 9 | - docker-compose.identity.yml 10 | services: 11 | identity-bff: 12 | container_name: identity-bff 13 | image: ghcr.io/agntcy/identity-service/bff:latest 14 | pull_policy: always 15 | restart: always 16 | depends_on: 17 | - identity-node 18 | - identity-postgres 19 | - identity-vault 20 | ports: 21 | - "4000:4000" 22 | - "4001:4001" 23 | env_file: 24 | - .env 25 | -------------------------------------------------------------------------------- /deployments/scripts/backend/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | # If .env exists in the webapi directory, use it 6 | # If not, create an env with defaults 7 | ./deployments/scripts/backend/env_setup.sh 8 | 9 | # Check if dev option is set 10 | compose_file="./deployments/docker-compose/backend/docker-compose.bff.yml" 11 | if [ "$1" == "true" ]; then 12 | echo "Running in dev mode" 13 | compose_file="./deployments/docker-compose/backend/docker-compose.bff.dev.yml" 14 | fi 15 | 16 | docker compose -f "$compose_file" build --no-cache 17 | docker compose -f "$compose_file" up -d 18 | -------------------------------------------------------------------------------- /frontend/src/assets/logo-a.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /frontend/src/components/policies/add-edit/add-edit-stepper.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {Policy} from '@/types/api/policy'; 7 | import {StepperProvider} from './stepper'; 8 | import {AddPolicyForm} from './add-policy-form'; 9 | import {EditPolicyForm} from './edit-policy-form'; 10 | 11 | export const AddEditPolicyStepper = ({mode = 'add', policy}: {mode: 'add' | 'edit'; policy?: Policy}) => { 12 | return ( 13 | 14 | {mode === 'add' ? : } 15 | 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /backend/internal/core/badge/repository.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package badge 5 | 6 | import ( 7 | "context" 8 | "errors" 9 | 10 | "github.com/agntcy/identity-service/internal/core/badge/types" 11 | ) 12 | 13 | type Repository interface { 14 | Create(ctx context.Context, badge *types.Badge) error 15 | Update(ctx context.Context, badge *types.Badge) error 16 | GetLatestByAppIdOrResolverMetadataID(ctx context.Context, id string) (*types.Badge, error) 17 | GetAllActiveBadges(ctx context.Context, appID string) ([]*types.Badge, error) 18 | } 19 | 20 | var ErrBadgeNotFound = errors.New("badge not found") 21 | -------------------------------------------------------------------------------- /backend/pkg/cmd/config.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package cmd 5 | 6 | import ( 7 | "github.com/agntcy/identity-service/pkg/log" 8 | "github.com/joho/godotenv" 9 | "github.com/kelseyhightower/envconfig" 10 | ) 11 | 12 | // GetConfiguration : Populate configuration information from .env and return Configuration model 13 | func GetConfiguration[T any]() (*T, error) { 14 | _ = godotenv.Load("./.env") 15 | 16 | var conf T 17 | if err := envconfig.Process("", &conf); err != nil { 18 | log.WithError(err).Error("failed to load configuration") 19 | return nil, err 20 | } 21 | 22 | return &conf, nil 23 | } 24 | -------------------------------------------------------------------------------- /frontend/src/assets/icon-agntcy.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /deployments/docker/frontend/nginx/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | 6 | envsubst '$VITE_APP_CLIENT_PORT $VITE_API_URL $VITE_APP_LOG_LEVEL $VITE_SEGMENT_ID $VITE_NODE_ENV $VITE_IAM_PRODUCT_ID $VITE_IAM_UI $VITE_IAM_API $VITE_IAM_OIDC_CLIENT_ID $VITE_IAM_OIDC_ISSUER $VITE_AUTH_TYPE $VITE_OIDC_UI $VITE_OIDC_CLIENT_ID $VITE_OIDC_ISSUER $VITE_IAM_MULTI_TENANT $VITE_DOCS_URL $VITE_MAZE_ID $VITE_APP_BASE_NAME' < /home/web/nginx/nginx.env.conf > /home/web/nginx/nginx.conf 7 | envsubst '$VITE_OIDC_UI $VITE_OIDC_ISSUER $VITE_API_URL' < /home/web/nginx/csp-header.env.conf > /home/web/nginx/csp-header.conf 8 | exec "$@" 9 | -------------------------------------------------------------------------------- /docs/contribute/backend/README.md: -------------------------------------------------------------------------------- 1 | # Agent Identity Service Backend 2 | 3 | The contribution guidelines for the `Agent Identity Service` backend provide essential information for developers who want to work on the backend side of our open-source project. 4 | 5 | By reading this documentation, you will become familiar with the codebase and be ready to alter existing components or add new ones. 6 | 7 | The documentation covers: 8 | 9 | - [Software architecture](architecture.md) 10 | - Working with [domains and services](services.md) 11 | - [Error handling](errors.md) 12 | - [Logging](logging.md) 13 | - [Identity context](context.md) 14 | - [Database](database.md) 15 | - Writing and running [tests](testing.md) 16 | -------------------------------------------------------------------------------- /backend/api/spec/proto/agntcy/identity/service/v1alpha1/pagination.proto: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | syntax = "proto3"; 5 | 6 | package agntcy.identity.service.v1alpha1; 7 | 8 | option go_package = "github.com/agntcy/identity-service/api/server/agntcy/identity/service/v1alpha1;identity_service_sdk_go"; 9 | 10 | // Pagination response 11 | message PagedResponse { 12 | // Next page 13 | optional int32 next_page = 1; 14 | 15 | // Has next page 16 | optional bool has_next_page = 2; 17 | 18 | // The total size of items 19 | int64 total = 3; 20 | 21 | // The size of the current page 22 | int32 size = 4; 23 | } 24 | -------------------------------------------------------------------------------- /samples/mcp/currency_exchange/pyproject.toml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | [project] 5 | name = "identity-currency-exchange-mcp-sample-server" 6 | version = "0.0.0" 7 | description = "Sample Currency Exchange MCP Server" 8 | requires-python = ">=3.12" 9 | dependencies = [ 10 | "uvicorn", 11 | "fastapi[standard]", 12 | "httpx", 13 | "mcp", 14 | "agntcy-identity-service-sdk>=0.0.7", 15 | ] 16 | 17 | [tool.hatch.build.targets.wheel] 18 | packages = ["."] 19 | 20 | [tool.uv.sources] 21 | a2a-samples = { workspace = true } 22 | 23 | [build-system] 24 | requires = ["hatchling"] 25 | build-backend = "hatchling.build" 26 | -------------------------------------------------------------------------------- /deployments/docker-compose/backend/docker-compose.bff.dev.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | name: identity-bff 6 | include: 7 | - docker-compose.db.yml 8 | - docker-compose.vault.yml 9 | - docker-compose.identity.yml 10 | services: 11 | identity-bff: 12 | container_name: identity-bff 13 | build: 14 | context: ../../../ 15 | dockerfile: deployments/docker/backend/Dockerfile.bff 16 | restart: always 17 | depends_on: 18 | - identity-postgres 19 | - identity-vault 20 | - identity-node 21 | ports: 22 | - "4000:4000" 23 | - "4001:4001" 24 | env_file: 25 | - .env 26 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-sample-currency-exchange-a2a.fullname" . }} 8 | labels: 9 | {{- include "identity-sample-currency-exchange-a2a.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | selector: 17 | app.kubernetes.io/name: {{ .Chart.Name }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-a2a/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-sample-currency-exchange-a2a.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-sample-currency-exchange-a2a.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-sample-currency-exchange-a2a.fullname" . }}:{{ .Values.service.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-sample-currency-exchange-mcp.fullname" . }} 8 | labels: 9 | {{- include "identity-sample-currency-exchange-mcp.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | selector: 17 | app.kubernetes.io/name: {{ .Chart.Name }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-currency-exchange-mcp/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-sample-currency-exchange-mcp.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-sample-currency-exchange-mcp.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-sample-currency-exchange-mcp.fullname" . }}:{{ .Values.service.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Pod 6 | metadata: 7 | name: "{{ include "identity-sample-financial-assist-oasf.fullname" . }}-test-connection" 8 | labels: 9 | {{- include "identity-sample-financial-assist-oasf.labels" . | nindent 4 }} 10 | annotations: 11 | "helm.sh/hook": test 12 | spec: 13 | containers: 14 | - name: wget 15 | image: busybox 16 | command: ['wget'] 17 | args: ['{{ include "identity-sample-financial-assist-oasf.fullname" . }}:{{ .Values.service.port }}'] 18 | restartPolicy: Never 19 | -------------------------------------------------------------------------------- /frontend/src/components/router/redirect-with-params.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | /* c8 ignore start */ 7 | 8 | import React from 'react'; 9 | import {Navigate, NavigateProps, generatePath, useParams} from 'react-router-dom'; 10 | 11 | interface RedirectWithParamsProps extends Omit { 12 | to: string; 13 | } 14 | 15 | export const RedirectWithParams: React.FC = ({to, ...props}) => { 16 | const params = useParams(); 17 | const redirectWithParams = generatePath(to, params); 18 | return ; 19 | }; 20 | 21 | /* c8 ignore end */ 22 | -------------------------------------------------------------------------------- /frontend/src/types/auth/common.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AccessToken, IDToken, RefreshToken} from '@okta/okta-auth-js'; 7 | import {Tenant, UserAuthInfo} from './iam'; 8 | 9 | export interface User { 10 | username?: string; 11 | name?: string; 12 | tenant?: Tenant; 13 | productRole?: string; 14 | allProductRoles?: string[]; 15 | region?: string; 16 | isCustomerSupport?: boolean; 17 | } 18 | 19 | export interface AuthInfo { 20 | accessToken?: AccessToken; 21 | idToken?: IDToken; 22 | refreshToken?: RefreshToken; 23 | isAuthenticated?: boolean; 24 | userAuthInfo?: UserAuthInfo; 25 | user?: User; 26 | } 27 | -------------------------------------------------------------------------------- /frontend/src/pages/agentic-services/info/about-agentic-service.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {ContentAboutAgenticService} from '@/components/agentic-services/info/about'; 7 | import {App} from '@/types/api/app'; 8 | import {useOutletContext} from 'react-router-dom'; 9 | 10 | const AboutAgenticService: React.FC = () => { 11 | const context = useOutletContext<{app?: App}>(); 12 | 13 | if (!context) { 14 | return null; 15 | } 16 | 17 | const {app} = context; 18 | 19 | if (!app) { 20 | return null; 21 | } 22 | 23 | return ; 24 | }; 25 | 26 | export default AboutAgenticService; 27 | -------------------------------------------------------------------------------- /samples/charts/identity-sample-financial-assist-oasf/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-sample-financial-assist-oasf.fullname" . }} 8 | labels: 9 | {{- include "identity-sample-financial-assist-oasf.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | protocol: TCP 17 | selector: 18 | app.kubernetes.io/name: {{ .Chart.Name }} 19 | app.kubernetes.io/instance: {{ .Release.Name }} 20 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/cmd/go-enum-to-proto/main.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package main 5 | 6 | import ( 7 | goflag "flag" 8 | "log" 9 | 10 | "github.com/spf13/pflag" 11 | ) 12 | 13 | var scanner = NewEnumScanner() 14 | 15 | func init() { 16 | scanner.BindFlags(pflag.CommandLine) 17 | _ = goflag.Set("logtostderr", "true") 18 | 19 | pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) 20 | } 21 | 22 | func main() { 23 | pflag.Parse() 24 | 25 | err := scanner.Scan() 26 | if err != nil { 27 | log.Fatalf("%v", err) 28 | } 29 | 30 | _, err = scanner.GenerateProtos(true) 31 | if err != nil { 32 | log.Fatalf("%v", err) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /deployments/test/unit-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | run_unit_tests_container() { 6 | # $1 -> docker file 7 | # $2 -> test command 8 | 9 | # shellcheck disable=SC2086 10 | docker run --rm "$(docker build --no-cache -f "$1" -q .)" $2 11 | } 12 | 13 | echo RUNNING FRONTEND TESTS 14 | run_unit_tests_container "./deployments/docker/frontend/Dockerfile.test" "yarn run test:coverage" 15 | 16 | echo RUNNING BACKEND TESTS 17 | run_unit_tests_container "./deployments/docker/backend/Dockerfile.test" "go test -cover -v ./..." 18 | 19 | echo RUNNING PYTHON SDK TESTS 20 | run_unit_tests_container "./deployments/docker/python/Dockerfile.test" "pytest -v -s" 21 | -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /backend/api/spec/plugins/protoc-gen-go-srvreg/go.sum: -------------------------------------------------------------------------------- 1 | github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= 2 | github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= 3 | github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= 4 | github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 5 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= 6 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= 7 | google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= 8 | google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 9 | -------------------------------------------------------------------------------- /frontend/src/types/api/app.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import { 7 | V1Alpha1App, 8 | V1Alpha1AppType, 9 | V1Alpha1AppTypeCountEntry, 10 | V1Alpha1GetAppsCountResponse, 11 | V1Alpha1ListAppsResponse, 12 | V1Alpha1PagedResponse, 13 | V1Alpha1AppStatus 14 | } from '@/api/generated/identity/app_service.swagger.api'; 15 | 16 | export type { 17 | V1Alpha1App as App, 18 | V1Alpha1AppTypeCountEntry as AppTypeCountEntry, 19 | V1Alpha1GetAppsCountResponse as GetAppsCountResponse, 20 | V1Alpha1ListAppsResponse as ListAppsResponse, 21 | V1Alpha1PagedResponse as PagedResponse 22 | }; 23 | 24 | export {V1Alpha1AppType as AppType, V1Alpha1AppStatus as AppStatus}; 25 | -------------------------------------------------------------------------------- /frontend/src/pages/dashboard/dashboard.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {useSettingsStore} from '@/store'; 7 | import {useShallow} from 'zustand/react/shallow'; 8 | import {EmptyDashboard} from '@/components/dashboard/empty-dashboard'; 9 | import {StatsDashboard} from '@/components/dashboard/stats-dashboard'; 10 | import '@/styles/dashboard.css'; 11 | 12 | const Dashboard: React.FC = () => { 13 | const {isEmptyIdp} = useSettingsStore( 14 | useShallow((state) => ({ 15 | isEmptyIdp: state.isEmptyIdp 16 | })) 17 | ); 18 | if (isEmptyIdp) { 19 | return ; 20 | } 21 | return ; 22 | }; 23 | 24 | export default Dashboard; 25 | -------------------------------------------------------------------------------- /frontend/src/types/auth/common-secure-route.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import * as React from 'react'; 7 | import {SecureRoutePropsIAM} from './iam'; 8 | import {SecureRoutePropsOIDC} from './oidc'; 9 | 10 | // Generic secure route props that works with both IAM and OIDC 11 | export interface SecureRouteProps { 12 | isAllowed?: boolean; 13 | shouldRedirect?: boolean; 14 | redirectPath?: string; 15 | errorComponent?: React.FC<{error: Error}>; 16 | onAuthRequired?: (auth?: any) => Promise | void; // Generic auth handler 17 | } 18 | 19 | // Union type for specific implementations 20 | export type SecureRoutePropsUnion = SecureRoutePropsIAM | SecureRoutePropsOIDC; 21 | -------------------------------------------------------------------------------- /backend/internal/pkg/secrets/pg.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package secrets 5 | 6 | import "github.com/agntcy/identity-service/internal/pkg/ptrutil" 7 | 8 | type EncryptedString string 9 | 10 | func NewEncryptedString(raw *string, crypter Crypter) *EncryptedString { 11 | if raw == nil { 12 | return nil 13 | } 14 | 15 | return ptrutil.Ptr(EncryptedString(crypter.Encrypt(*raw))) 16 | } 17 | 18 | func (es *EncryptedString) ToString(crypter Crypter) string { 19 | return crypter.Decrypt(string(*es)) 20 | } 21 | 22 | func EncryptedStringToRaw(es *EncryptedString, crypter Crypter) *string { 23 | if es == nil { 24 | return nil 25 | } 26 | 27 | return ptrutil.Ptr(es.ToString(crypter)) 28 | } 29 | -------------------------------------------------------------------------------- /frontend/src/components/organizations/info/users-columns.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {UserResponse} from '@/types/api/iam'; 7 | import {GeneralSize, Tag} from '@open-ui-kit/core'; 8 | import {MRT_ColumnDef} from 'material-react-table'; 9 | 10 | export const UsersColumns = (): MRT_ColumnDef[] => { 11 | const columns: MRT_ColumnDef[] = [ 12 | { 13 | accessorKey: 'name', 14 | header: 'Name' 15 | }, 16 | { 17 | accessorKey: 'role', 18 | header: 'Role', 19 | Cell: ({row}) => { 20 | return {row.original.role}; 21 | } 22 | } 23 | ]; 24 | return columns; 25 | }; 26 | -------------------------------------------------------------------------------- /charts/identity-service-backend/templates/service.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "identity-service-backend.fullname" . }} 8 | labels: 9 | {{- include "identity-service-backend.labels" . | nindent 4 }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - name: http 14 | port: {{ .Values.service.http.port }} 15 | targetPort: {{ .Values.service.http.targetPort }} 16 | - name: grpc 17 | port: {{ .Values.service.grpc.port }} 18 | targetPort: {{ .Values.service.grpc.targetPort }} 19 | selector: 20 | app.kubernetes.io/name: {{ .Chart.Name }} 21 | app.kubernetes.io/instance: {{ .Release.Name }} 22 | -------------------------------------------------------------------------------- /charts/identity-service-backend/Chart.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | apiVersion: v2 5 | name: identity-service-backend 6 | description: A Helm chart for identity-service backend 7 | type: application 8 | version: 0.1.10 9 | appVersion: "0.0.1" 10 | 11 | maintainers: 12 | - name: identity 13 | url: https://github.com/agntcy/identity-service/blob/main/MAINTAINERS.md 14 | sources: 15 | - https://github.com/agntcy/identity-service 16 | 17 | dependencies: 18 | - name: postgresql 19 | version: 18.0.15 20 | repository: https://charts.bitnami.com/bitnami 21 | condition: postgresql.enabled 22 | - name: vault 23 | version: 0.31.0 24 | repository: https://helm.releases.hashicorp.com 25 | condition: vault.enabled 26 | -------------------------------------------------------------------------------- /frontend/src/pages/agentic-services/info/policies-used-by-agentic-service.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {ListPoliciesAgenticService} from '@/components/agentic-services/info/list-policies-agentic-service'; 7 | import {App} from '@/types/api/app'; 8 | import {useOutletContext} from 'react-router-dom'; 9 | 10 | const PoliciesUsedByAgenticService: React.FC = () => { 11 | const context = useOutletContext<{app?: App}>(); 12 | 13 | if (!context) { 14 | return null; 15 | } 16 | 17 | const {app} = context; 18 | 19 | if (!app) { 20 | return null; 21 | } 22 | 23 | return ; 24 | }; 25 | 26 | export default PoliciesUsedByAgenticService; 27 | -------------------------------------------------------------------------------- /backend/pkg/shutdown.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package pkg 5 | 6 | import ( 7 | "context" 8 | "errors" 9 | ) 10 | 11 | func ShutdownWithContext( 12 | ctx context.Context, 13 | gracefulShutdownFunc func(ctx context.Context) error, 14 | forceShutdownFunc func() error, 15 | ) error { 16 | errCh := make(chan error, 1) 17 | 18 | go func() { 19 | errCh <- gracefulShutdownFunc(ctx) 20 | }() 21 | 22 | // Wait for the context to be done (timeout, cancel, ...) or shutdownFunc to complete 23 | select { 24 | case <-ctx.Done(): 25 | err := ctx.Err() 26 | 27 | if forceShutdownFunc != nil { 28 | err = errors.Join(err, forceShutdownFunc()) 29 | } 30 | 31 | return err 32 | case err := <-errCh: 33 | return err 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /frontend/src/pages/agentic-services/info/policies-assigned-to-agentic-service.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {ListPoliciesAgenticService} from '@/components/agentic-services/info/list-policies-agentic-service'; 7 | import {App} from '@/types/api/app'; 8 | import {useOutletContext} from 'react-router-dom'; 9 | 10 | const PoliciesAssignedToAgenticService: React.FC = () => { 11 | const context = useOutletContext<{app?: App}>(); 12 | 13 | if (!context) { 14 | return null; 15 | } 16 | 17 | const {app} = context; 18 | 19 | if (!app) { 20 | return null; 21 | } 22 | 23 | return ; 24 | }; 25 | 26 | export default PoliciesAssignedToAgenticService; 27 | -------------------------------------------------------------------------------- /frontend/src/types/sw/notification.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export interface ApprovalRequestInfo { 7 | callee_app?: string; 8 | caller_app?: string; 9 | tool_name?: string; 10 | otp?: string; 11 | device_id?: string; 12 | session_id?: string; 13 | timeout_in_seconds?: number; 14 | timstamp?: number; 15 | } 16 | 17 | export enum NotificationType { 18 | UNSPECIFIED = 'NOTIFICATION_TYPE_UNSPECIFIED', 19 | INFO = 'NOTIFICATION_TYPE_INFO', 20 | APPROVAL_REQUEST = 'NOTIFICATION_TYPE_APPROVAL_REQUEST' 21 | } 22 | 23 | export interface INotification { 24 | body?: string; 25 | type?: NotificationType; 26 | id?: string; 27 | timestamp?: number; 28 | approval_request_info?: ApprovalRequestInfo; 29 | } 30 | -------------------------------------------------------------------------------- /sdk/python/agntcy/identity/service/v1alpha1/pagination_pb2.pyi: -------------------------------------------------------------------------------- 1 | from google.protobuf import descriptor as _descriptor 2 | from google.protobuf import message as _message 3 | from typing import ClassVar as _ClassVar, Optional as _Optional 4 | 5 | DESCRIPTOR: _descriptor.FileDescriptor 6 | 7 | class PagedResponse(_message.Message): 8 | __slots__ = ("next_page", "has_next_page", "total", "size") 9 | NEXT_PAGE_FIELD_NUMBER: _ClassVar[int] 10 | HAS_NEXT_PAGE_FIELD_NUMBER: _ClassVar[int] 11 | TOTAL_FIELD_NUMBER: _ClassVar[int] 12 | SIZE_FIELD_NUMBER: _ClassVar[int] 13 | next_page: int 14 | has_next_page: bool 15 | total: int 16 | size: int 17 | def __init__(self, next_page: _Optional[int] = ..., has_next_page: _Optional[bool] = ..., total: _Optional[int] = ..., size: _Optional[int] = ...) -> None: ... 18 | -------------------------------------------------------------------------------- /sdk/python/identityservice/exceptions.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | """Contains the custom exceptions raised by the SDK.""" 4 | 5 | from typing import Any, Dict, Optional 6 | 7 | 8 | class SdkError(Exception): 9 | """ 10 | A custom SDK exception raised when a domain 11 | logic fails or as a wrapper for other exceptions. 12 | """ 13 | 14 | def __init__( 15 | self, 16 | message: str, 17 | metadata: Optional[Dict[str, Any]] = None, 18 | inner_exception: Optional[Exception] = None, 19 | ): 20 | """Initialize the SdkError object.""" 21 | self.message = message 22 | self.metadata = metadata 23 | self.inner_exception = inner_exception 24 | super().__init__(self.message) 25 | -------------------------------------------------------------------------------- /sdk/python/identityservice/badge/oasf.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | """OASF agent discovery utilities for badge claims generation.""" 4 | 5 | import os 6 | 7 | from identityservice.exceptions import SdkError 8 | 9 | 10 | def discover(url: str) -> str: 11 | """Load an OASF schema from a local JSON file. 12 | 13 | For OASF, we assume ``url`` is a path to the OASF JSON file that 14 | should be used when issuing a badge. 15 | """ 16 | 17 | if not os.path.isfile(url): 18 | raise SdkError(f"OASF schema file not found at path: {url}") 19 | 20 | if os.path.getsize(url) == 0: 21 | raise SdkError(f"OASF schema file is empty at path: {url}") 22 | 23 | with open(url, "r", encoding="utf-8") as file: 24 | return file.read() 25 | -------------------------------------------------------------------------------- /frontend/src/assets/ory.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /frontend/src/types/auth/oidc.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import * as React from 'react'; 7 | import {AuthInfo} from './common'; 8 | 9 | export interface AuthConfigOIDC { 10 | oidcUi: string; 11 | oidcIssuer: string; 12 | oidcClient: string; 13 | } 14 | 15 | export interface AuthContextOIDC { 16 | authConfig?: AuthConfigOIDC; 17 | authInfo?: AuthInfo | null; 18 | loading?: boolean; 19 | login?: () => void; 20 | logout?: () => void; 21 | tokenExpiredHttpHandler?: () => Promise; 22 | register?: () => void; 23 | } 24 | 25 | export interface SecureRoutePropsOIDC { 26 | isAllowed?: boolean; 27 | shouldRedirect?: boolean; 28 | redirectPath?: string; 29 | errorComponent?: React.FC<{error: Error}>; 30 | } 31 | -------------------------------------------------------------------------------- /frontend/src/providers/auth-provider/iam/use-auth-iam.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AuthContextIAM as ContextIAM} from '@/types/auth/iam'; 7 | import * as React from 'react'; 8 | import {AuthContextIAM} from '@/providers/auth-provider/iam/auth-context-iam'; 9 | 10 | export const useAuthIAM = (): ContextIAM => { 11 | const context = React.useContext(AuthContextIAM); 12 | 13 | if (process.env.NODE_ENV !== 'production') { 14 | // eslint-disable-next-line react-hooks/rules-of-hooks 15 | React.useDebugValue(context); 16 | } 17 | 18 | if (context === undefined) { 19 | throw new Error('AuthContextIAM value is undefined. Make sure you use the before using the context.'); 20 | } 21 | 22 | return context; 23 | }; 24 | -------------------------------------------------------------------------------- /scripts/proto/proto-enum-generator/pkg/types/types.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package types 5 | 6 | import "go/token" 7 | 8 | type CommentGroup struct { 9 | List []string 10 | Position token.Position 11 | } 12 | 13 | type EnumValue struct { 14 | Name string 15 | Value int 16 | Position token.Position 17 | Comment *CommentGroup 18 | } 19 | 20 | type Name struct { 21 | Package string 22 | Name string 23 | } 24 | 25 | type Enum struct { 26 | Name Name 27 | Values []*EnumValue 28 | Path string 29 | Position token.Position 30 | Comment *CommentGroup 31 | } 32 | 33 | func (e *Enum) AddValue(value *EnumValue) { 34 | e.Values = append(e.Values, value) 35 | } 36 | 37 | type ProtoOutput struct { 38 | Enum *Enum 39 | Proto string 40 | } 41 | -------------------------------------------------------------------------------- /docs/sidebars.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; 7 | 8 | // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) 9 | 10 | /** 11 | * Creating a sidebar enables you to: 12 | - create an ordered group of docs 13 | - render a sidebar for each doc of that group 14 | - provide next/previous navigation 15 | 16 | The sidebars can be generated from the filesystem, or explicitly defined here. 17 | 18 | Create as many sidebars as you want. 19 | */ 20 | const sidebars: SidebarsConfig = { 21 | // By default, Docusaurus generates a sidebar from the docs folder structure 22 | tutorialSidebar: [{ type: "autogenerated", dirName: "." }], 23 | }; 24 | 25 | export default sidebars; 26 | -------------------------------------------------------------------------------- /backend/internal/core/iam/repository.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package iam 5 | 6 | import ( 7 | "context" 8 | "errors" 9 | 10 | "github.com/agntcy/identity-service/internal/core/iam/types" 11 | ) 12 | 13 | type Repository interface { 14 | AddAPIKey( 15 | ctx context.Context, 16 | APIKey *types.APIKey, 17 | ) (*types.APIKey, error) 18 | GetAPIKeyByTenant( 19 | ctx context.Context, 20 | ) (*types.APIKey, error) 21 | GetAPIKeyByApp( 22 | ctx context.Context, 23 | appID string, 24 | ) (*types.APIKey, error) 25 | GetAPIKeyBySecret( 26 | ctx context.Context, 27 | appSecret string, 28 | ) (*types.APIKey, error) 29 | DeleteAPIKey(ctx context.Context, APIKey *types.APIKey) error 30 | } 31 | 32 | var ( 33 | ErrApiKeyNotFound = errors.New("API Key not found") 34 | ) 35 | -------------------------------------------------------------------------------- /backend/internal/pkg/pagination/pagination_filter.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package pagination 5 | 6 | const ( 7 | defaultPage int32 = 1 8 | ) 9 | 10 | type PaginationFilter struct { 11 | Page *int32 12 | Size *int32 13 | DefaultSize int32 14 | } 15 | 16 | func (f PaginationFilter) GetPage() int32 { 17 | if f.Page != nil && *f.Page > 0 { 18 | return *f.Page 19 | } 20 | 21 | return defaultPage 22 | } 23 | 24 | func (f PaginationFilter) GetLimit() int32 { 25 | if f.Size != nil && *f.Size > 0 { 26 | return *f.Size 27 | } 28 | 29 | return f.DefaultSize 30 | } 31 | 32 | func (f PaginationFilter) GetSkip() int32 { 33 | if f.Page != nil && *f.Page > 0 { 34 | return (*f.Page - 1) * f.GetLimit() 35 | } 36 | 37 | return (defaultPage - 1) * f.DefaultSize 38 | } 39 | -------------------------------------------------------------------------------- /frontend/src/assets/duo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/components/devices/devices-columns.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import DateHover from '@/components/ui/date-hover'; 7 | import {Device} from '@/types/api/device'; 8 | import {MRT_ColumnDef} from 'material-react-table'; 9 | 10 | export const DevicesColumns = (): MRT_ColumnDef[] => { 11 | const columns: MRT_ColumnDef[] = [ 12 | { 13 | accessorKey: 'name', 14 | header: 'Name' 15 | }, 16 | { 17 | accessorKey: 'userId', 18 | header: 'User ID' 19 | }, 20 | { 21 | accessorKey: 'createdAt', 22 | header: 'Created At', 23 | Cell: ({row}) => { 24 | return ; 25 | } 26 | } 27 | ]; 28 | return columns; 29 | }; 30 | -------------------------------------------------------------------------------- /frontend/src/providers/query-provider/query-provider.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | /* c8 ignore start */ 7 | 8 | import React from 'react'; 9 | import {QueryClient, QueryClientProvider} from '@tanstack/react-query'; 10 | import {ReactQueryDevtools} from '@tanstack/react-query-devtools'; 11 | 12 | const queryClient = new QueryClient({ 13 | defaultOptions: { 14 | queries: { 15 | refetchOnWindowFocus: false 16 | } 17 | } 18 | }); 19 | 20 | export const QueryProvider = ({children}: React.PropsWithChildren) => { 21 | return ( 22 | 23 | 24 | {children} 25 | 26 | ); 27 | }; 28 | 29 | /* c8 ignore stop */ 30 | -------------------------------------------------------------------------------- /.github/linters/.trivy.yml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | --- 5 | # Same as '--format' 6 | # Default is 'table' 7 | format: table 8 | 9 | # Same as '--report' (available with 'trivy k8s') 10 | # Default is all 11 | report: all 12 | 13 | # Same as '--template' 14 | # Default is empty 15 | template: 16 | 17 | # Same as '--dependency-tree' 18 | # Default is false 19 | dependency-tree: false 20 | 21 | # Same as '--list-all-pkgs' 22 | # Default is false 23 | list-all-pkgs: false 24 | 25 | # Same as '--ignore-policy' 26 | # Default is empty 27 | ignore-policy: 28 | 29 | # Same as '--exit-code' 30 | # Default is 0 31 | exit-code: 0 32 | 33 | # Same as '--output' 34 | # Default is empty (stdout) 35 | output: 36 | 37 | # Same as '--severity' 38 | # Default is all severities 39 | severity: 40 | - CRITICAL 41 | -------------------------------------------------------------------------------- /frontend/src/schemas/verify-identity-schema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {z} from 'zod'; 7 | 8 | export const VerifyIdentitySchema = z.object({ 9 | badge: z.string().optional(), 10 | proofValue: z.string().optional(), 11 | badgeFile: z 12 | .union([ 13 | z.instanceof(File, {message: 'File is required'}).refine((file) => !file || file.size !== 0 || file.size <= 3000000, { 14 | message: 'Max size exceeded' 15 | }), 16 | z.string().optional() 17 | ]) 18 | .refine((value) => value instanceof File || typeof value === 'string', { 19 | message: 'File is required' 20 | }) 21 | .optional(), 22 | badgeContent: z.string().optional() 23 | }); 24 | 25 | export type VerifyIdentityFormValues = z.infer; 26 | -------------------------------------------------------------------------------- /charts/identity-service-docs/values.yaml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Example Organization Contributors (https://github.com/example-org) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | replicaCount: 1 5 | 6 | image: 7 | repository: "" 8 | pullPolicy: IfNotPresent 9 | tag: "" 10 | 11 | namespace: identity-service-dev 12 | 13 | imagePullSecrets: 14 | - name: ecr-credentials 15 | 16 | service: 17 | type: ClusterIP 18 | http: 19 | port: 80 20 | targetPort: 80 21 | 22 | ingress: 23 | enabled: true 24 | className: nginx-internal 25 | annotations: 26 | http: 27 | kubernetes.io/ingress.class: nginx-internal 28 | nginx.ingress.kubernetes.io/rewrite-target: / 29 | cert-manager.io/cluster-issuer: letsencrypt 30 | 31 | domainPrefixHttp: identity-service-docs 32 | apiDomainName: example.domain.com 33 | 34 | serviceAccount: 35 | create: true 36 | name: "" 37 | -------------------------------------------------------------------------------- /docs/contribute/wip/1_DCR/meeting_notes/2025-10-08.md: -------------------------------------------------------------------------------- 1 | # DCR subgroup meeting 2 | 3 | ## Date 4 | 5 | Oct 8, 2025 6 | 7 | ## Attendees 8 | 9 | * Umesh (Sailpoint) 10 | * Ankit (Skyfire) 11 | 12 | ## Notes 13 | 14 | * We discussed DCR + Human Identity and the custom token exchange that we have implemented between KYA tokens and Access Tokens between Skyfire and Ory. 15 | * We also explored whether DCR + Human Identity applies directly to AGNTCY or whether it stays with the IdP (we went with the former) 16 | * Neither of us are experts on AGNTCY but it seems like the process should be 17 | * IdP handles the DCR + Human Identity (KYA) -> Access Token exchange 18 | * AGNTCY generates the applicable badges based on the ID from the IdP 19 | * If the IdP setup supports DCR + KYA, then the badge can include richer information about the agent, agent platform, and human / business principal 20 | -------------------------------------------------------------------------------- /frontend/src/providers/auth-provider/oicd/use-auth-oidc.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AuthContextOIDC as ContextOIDC} from '@/types/auth/oidc'; 7 | import * as React from 'react'; 8 | import {AuthContextOIDCHelper} from './helper/auth-context-oidc-helper'; 9 | 10 | export const useAuthOIDC = (): ContextOIDC => { 11 | const context = React.useContext(AuthContextOIDCHelper); 12 | 13 | if (process.env.NODE_ENV !== 'production') { 14 | // eslint-disable-next-line react-hooks/rules-of-hooks 15 | React.useDebugValue(context); 16 | } 17 | 18 | if (context === undefined) { 19 | throw new Error( 20 | 'AuthContextOIDC value is undefined. Make sure you use the before using the context.' 21 | ); 22 | } 23 | 24 | return context; 25 | }; 26 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | 3 | ### IntelliJ IDEA ### 4 | .idea 5 | *.iws 6 | *.iml 7 | *.ipr 8 | out/ 9 | 10 | ### VS Code ### 11 | .vscode/ 12 | 13 | ### OSX ### 14 | .DS_Store 15 | 16 | ### VIM ### 17 | *.swp 18 | jdt.ls-java-project 19 | .metadata 20 | 21 | # Binaries for programs and plugins 22 | *.exe 23 | *.exe~ 24 | *.dll 25 | *.so 26 | *.dylib 27 | 28 | # Test binary, built with `go test -c` 29 | *.test 30 | 31 | # Output of the go coverage tool, specifically when used with LiteIDE 32 | *.out 33 | 34 | # Dependency directories (remove the comment below to include it) 35 | vendor/ 36 | 37 | # Go workspace file 38 | go.work 39 | 40 | # Environments 41 | .env 42 | .venv 43 | env/ 44 | venv/ 45 | ENV/ 46 | env.bak/ 47 | venv.bak/ 48 | 49 | # Pyre type checker 50 | .pyre/ 51 | 52 | # Misc 53 | .DS_Store 54 | .venv 55 | .vscode 56 | 57 | .scratchpad 58 | 59 | # Worflows 60 | *.swm 61 | -------------------------------------------------------------------------------- /scripts/proto/generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | # SPDX-License-Identifier: Apache-2.0 4 | 5 | 6 | reset_generated_pb_go() { 7 | ( 8 | cd ../.. 9 | pb_files=$(git status --porcelain | grep api/server | sed s/^...// | tr '\n' ' ') 10 | 11 | for f in $pb_files; do 12 | echo "Resetting $f" 13 | git checkout -- "$f" 14 | done 15 | ) 16 | } 17 | 18 | reset_generated_pb_go 19 | 20 | cd docker && 21 | docker compose -f buf-compose.yaml build && 22 | docker compose -f buf-compose.yaml run --rm -w /identity/code/backend/api/spec buf-go run.sh 23 | docker rmi docker-buf-go 24 | 25 | cd .. 26 | 27 | if [ -d "../../backend/api/server" ]; then 28 | cd ../../backend/api/server && 29 | grep -rl gnostic . | xargs sed -i '' 's|github.com/google/gnostic/openapiv3|github.com/google/gnostic-models/openapiv3|g' 30 | fi 31 | -------------------------------------------------------------------------------- /backend/internal/core/idp/self_idp_test.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package idp_test 5 | 6 | import ( 7 | "context" 8 | "testing" 9 | 10 | "github.com/agntcy/identity-service/internal/core/idp" 11 | identitycontext "github.com/agntcy/identity-service/internal/pkg/context" 12 | "github.com/google/uuid" 13 | "github.com/stretchr/testify/assert" 14 | ) 15 | 16 | func TestSelfIdp_CreateClientCredentialsPair(t *testing.T) { 17 | t.Parallel() 18 | 19 | userID := uuid.NewString() 20 | ctx := identitycontext.InsertUserID(context.Background(), userID) 21 | sut := idp.NewSelfIdp() 22 | 23 | clientCred, err := sut.CreateClientCredentialsPair(ctx) 24 | 25 | assert.NoError(t, err) 26 | assert.NotNil(t, clientCred) 27 | assert.Equal(t, userID, clientCred.Issuer) 28 | assert.NotEmpty(t, clientCred.ClientID) 29 | } 30 | -------------------------------------------------------------------------------- /backend/internal/core/policy/types/ruleaction_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=RuleAction"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[RULE_ACTION_UNSPECIFIED-0] 12 | _ = x[RULE_ACTION_ALLOW-1] 13 | _ = x[RULE_ACTION_DENY-2] 14 | } 15 | 16 | const _RuleAction_name = "RULE_ACTION_UNSPECIFIEDRULE_ACTION_ALLOWRULE_ACTION_DENY" 17 | 18 | var _RuleAction_index = [...]uint8{0, 23, 40, 56} 19 | 20 | func (i RuleAction) String() string { 21 | idx := int(i) - 0 22 | if i < 0 || idx >= len(_RuleAction_index)-1 { 23 | return "RuleAction(" + strconv.FormatInt(int64(i), 10) + ")" 24 | } 25 | return _RuleAction_name[_RuleAction_index[idx]:_RuleAction_index[idx+1]] 26 | } 27 | -------------------------------------------------------------------------------- /backend/internal/core/badge/types/badgetype_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=BadgeType"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[BADGE_TYPE_UNSPECIFIED-0] 12 | _ = x[BADGE_TYPE_AGENT_BADGE-1] 13 | _ = x[BADGE_TYPE_MCP_BADGE-2] 14 | } 15 | 16 | const _BadgeType_name = "BADGE_TYPE_UNSPECIFIEDBADGE_TYPE_AGENT_BADGEBADGE_TYPE_MCP_BADGE" 17 | 18 | var _BadgeType_index = [...]uint8{0, 22, 44, 64} 19 | 20 | func (i BadgeType) String() string { 21 | idx := int(i) - 0 22 | if i < 0 || idx >= len(_BadgeType_index)-1 { 23 | return "BadgeType(" + strconv.FormatInt(int64(i), 10) + ")" 24 | } 25 | return _BadgeType_name[_BadgeType_index[idx]:_BadgeType_index[idx+1]] 26 | } 27 | -------------------------------------------------------------------------------- /frontend/src/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | 'use client'; 7 | 8 | import * as React from 'react'; 9 | import * as LabelPrimitive from '@radix-ui/react-label'; 10 | 11 | import {cn} from '@/lib/utils'; 12 | 13 | function Label({className, ...props}: React.ComponentProps) { 14 | return ( 15 | 24 | ); 25 | } 26 | 27 | export {Label}; 28 | -------------------------------------------------------------------------------- /samples/agent/oasf/financial_assistant/pyproject.toml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | [project] 5 | name = "identity-financial-assistant-oasf-sample-agent" 6 | version = "0.0.1" 7 | description = "Sample LangGraph Financial Assistant" 8 | requires-python = ">=3.12" 9 | dependencies = [ 10 | "a2a-sdk==0.2.16", 11 | "uvicorn", 12 | "click>=8.1.8", 13 | "httpx>=0.28.1", 14 | "langchain>=0.3.23", 15 | "langchain-core>=0.3.51", 16 | "langchain-mcp-adapters>=0.0.7", 17 | "langchain-openai>=0.3.1", 18 | "langgraph>=0.3.29", 19 | "agntcy-identity-service-sdk>=0.0.7", 20 | ] 21 | 22 | [tool.hatch.build.targets.wheel] 23 | packages = ["."] 24 | 25 | [tool.uv.sources] 26 | a2a-samples = { workspace = true } 27 | 28 | [build-system] 29 | requires = ["hatchling"] 30 | build-backend = "hatchling.build" 31 | -------------------------------------------------------------------------------- /samples/agent/a2a/currency_exchange/pyproject.toml: -------------------------------------------------------------------------------- 1 | # Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | # SPDX-License-Identifier: Apache-2.0 3 | 4 | [project] 5 | name = "identity-currency-exchange-a2a-sample-agent" 6 | version = "0.0.1" 7 | description = "Sample LangGraph Currency Agent with A2A Protocol" 8 | requires-python = ">=3.12" 9 | dependencies = [ 10 | "a2a-sdk==0.2.16", 11 | "uvicorn", 12 | "click>=8.1.8", 13 | "httpx>=0.28.1", 14 | "langchain>=0.3.23", 15 | "langchain-core>=0.3.51", 16 | "langchain-mcp-adapters>=0.0.7", 17 | "langchain-openai>=0.2.0", 18 | "langgraph>=0.3.29", 19 | "agntcy-identity-service-sdk>=0.0.7", 20 | ] 21 | 22 | [tool.hatch.build.targets.wheel] 23 | packages = ["."] 24 | 25 | [tool.uv.sources] 26 | a2a-samples = { workspace = true } 27 | 28 | [build-system] 29 | requires = ["hatchling"] 30 | build-backend = "hatchling.build" 31 | -------------------------------------------------------------------------------- /backend/internal/core/app/types/apptype_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=AppType"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[APP_TYPE_UNSPECIFIED-0] 12 | _ = x[APP_TYPE_AGENT_A2A-1] 13 | _ = x[APP_TYPE_AGENT_OASF-2] 14 | _ = x[APP_TYPE_MCP_SERVER-3] 15 | } 16 | 17 | const _AppType_name = "APP_TYPE_UNSPECIFIEDAPP_TYPE_AGENT_A2AAPP_TYPE_AGENT_OASFAPP_TYPE_MCP_SERVER" 18 | 19 | var _AppType_index = [...]uint8{0, 20, 38, 57, 76} 20 | 21 | func (i AppType) String() string { 22 | idx := int(i) - 0 23 | if i < 0 || idx >= len(_AppType_index)-1 { 24 | return "AppType(" + strconv.FormatInt(int64(i), 10) + ")" 25 | } 26 | return _AppType_name[_AppType_index[idx]:_AppType_index[idx+1]] 27 | } 28 | -------------------------------------------------------------------------------- /sdk/python/google/api/launch_stage_pb2.pyi: -------------------------------------------------------------------------------- 1 | from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper 2 | from google.protobuf import descriptor as _descriptor 3 | from typing import ClassVar as _ClassVar 4 | 5 | DESCRIPTOR: _descriptor.FileDescriptor 6 | 7 | class LaunchStage(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): 8 | __slots__ = () 9 | LAUNCH_STAGE_UNSPECIFIED: _ClassVar[LaunchStage] 10 | UNIMPLEMENTED: _ClassVar[LaunchStage] 11 | PRELAUNCH: _ClassVar[LaunchStage] 12 | EARLY_ACCESS: _ClassVar[LaunchStage] 13 | ALPHA: _ClassVar[LaunchStage] 14 | BETA: _ClassVar[LaunchStage] 15 | GA: _ClassVar[LaunchStage] 16 | DEPRECATED: _ClassVar[LaunchStage] 17 | LAUNCH_STAGE_UNSPECIFIED: LaunchStage 18 | UNIMPLEMENTED: LaunchStage 19 | PRELAUNCH: LaunchStage 20 | EARLY_ACCESS: LaunchStage 21 | ALPHA: LaunchStage 22 | BETA: LaunchStage 23 | GA: LaunchStage 24 | DEPRECATED: LaunchStage 25 | -------------------------------------------------------------------------------- /frontend/src/types/api/policy.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import { 7 | V1Alpha1ListPoliciesResponse, 8 | V1Alpha1ListRulesResponse, 9 | V1Alpha1PagedResponse, 10 | V1Alpha1Policy, 11 | V1Alpha1Rule, 12 | V1Alpha1Task, 13 | V1Alpha1CreatePolicyRequest, 14 | PolicyServiceCreateRuleBody, 15 | V1Alpha1RuleAction 16 | } from '@/api/generated/identity/policy_service.swagger.api'; 17 | 18 | export type { 19 | V1Alpha1ListPoliciesResponse as ListPoliciesResponse, 20 | V1Alpha1ListRulesResponse as ListRulesResponse, 21 | V1Alpha1PagedResponse as PagedResponse, 22 | V1Alpha1Policy as Policy, 23 | V1Alpha1Rule as Rule, 24 | V1Alpha1Task as Task, 25 | V1Alpha1CreatePolicyRequest as CreatePolicyRequest, 26 | PolicyServiceCreateRuleBody as CreateRuleBody 27 | }; 28 | 29 | export {V1Alpha1RuleAction as RuleAction}; 30 | -------------------------------------------------------------------------------- /frontend/src/components/verify-identity/stepper.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {defineStepper} from '@/components/ui/stepper'; 7 | import {VerifyIdentitySchema} from '@/schemas/verify-identity-schema'; 8 | import {z} from 'zod'; 9 | 10 | export const { 11 | StepperProvider, 12 | StepperControls, 13 | StepperNavigation, 14 | StepperStep, 15 | StepperTitle, 16 | StepperDescription, 17 | StepperPanel, 18 | useStepper 19 | } = defineStepper( 20 | { 21 | id: 'verifyIdentityForm', 22 | title: 'Upload Badge', 23 | description: 'Upload your badge to verify the identity', 24 | schema: VerifyIdentitySchema 25 | }, 26 | { 27 | id: 'verficationResults', 28 | title: 'Verification Results', 29 | description: 'View the results of your badge verification', 30 | schema: z.object({}) 31 | } 32 | ); 33 | -------------------------------------------------------------------------------- /backend/api/spec/proto/buf.lock: -------------------------------------------------------------------------------- 1 | # Generated by buf. DO NOT EDIT. 2 | version: v1 3 | deps: 4 | - remote: buf.build 5 | owner: googleapis 6 | repository: googleapis 7 | commit: 546238c53f7340c6a2a6099fb863bc1b 8 | digest: shake256:8d75c12f391e392b24c076d05117b47aeddb090add99c70247a8f4389b906a65f61a933c68e54ed8b73a050b967b6b712ba194348b67c3ab3ee26cc2cb25852c 9 | - remote: buf.build 10 | owner: grpc-ecosystem 11 | repository: grpc-gateway 12 | commit: 4c5ba75caaf84e928b7137ae5c18c26a 13 | digest: shake256:e174ad9408f3e608f6157907153ffec8d310783ee354f821f57178ffbeeb8faa6bb70b41b61099c1783c82fe16210ebd1279bc9c9ee6da5cffba9f0e675b8b99 14 | - remote: buf.build 15 | owner: sagikazarmark 16 | repository: gnostic-fork 17 | commit: aa1879d9d29c45738576046817d71680 18 | digest: shake256:19a98461b75c7e521a11e216e7f1a7b7f5be82d94e128b4981fd377ebf21ad69448da8b4fd1f7a4e795f3978257f42f369cd4cff7745d44a24833911e47f7f2e 19 | -------------------------------------------------------------------------------- /backend/internal/core/app/types/appstatus_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=AppStatus"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[APP_STATUS_UNSPECIFIED-0] 12 | _ = x[APP_STATUS_ACTIVE-1] 13 | _ = x[APP_STATUS_PENDING-2] 14 | _ = x[APP_STATUS_REVOKED-3] 15 | } 16 | 17 | const _AppStatus_name = "APP_STATUS_UNSPECIFIEDAPP_STATUS_ACTIVEAPP_STATUS_PENDINGAPP_STATUS_REVOKED" 18 | 19 | var _AppStatus_index = [...]uint8{0, 22, 39, 57, 75} 20 | 21 | func (i AppStatus) String() string { 22 | idx := int(i) - 0 23 | if i < 0 || idx >= len(_AppStatus_index)-1 { 24 | return "AppStatus(" + strconv.FormatInt(int64(i), 10) + ")" 25 | } 26 | return _AppStatus_name[_AppStatus_index[idx]:_AppStatus_index[idx+1]] 27 | } 28 | -------------------------------------------------------------------------------- /backend/internal/pkg/httputil/hostname_test.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package httputil_test 5 | 6 | import ( 7 | "fmt" 8 | "testing" 9 | 10 | "github.com/agntcy/identity-service/internal/pkg/httputil" 11 | "github.com/stretchr/testify/assert" 12 | ) 13 | 14 | func TestHostname(t *testing.T) { 15 | t.Parallel() 16 | 17 | testCases := []*struct { 18 | input string 19 | expected string 20 | }{ 21 | {input: "https://www.cisco.com", expected: "www.cisco.com"}, 22 | {input: "", expected: ""}, 23 | {input: "cisco.com", expected: ""}, 24 | {input: "whatever", expected: ""}, 25 | } 26 | 27 | for _, tc := range testCases { 28 | t.Run(fmt.Sprintf("should pass for %s", tc.input), func(t *testing.T) { 29 | t.Parallel() 30 | 31 | ret := httputil.Hostname(tc.input) 32 | 33 | assert.Equal(t, tc.expected, ret) 34 | }) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /backend/internal/pkg/pagination/pagination.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package pagination 5 | 6 | import identity_service_sdk_go "github.com/agntcy/identity-service/api/server/agntcy/identity/service/v1alpha1" 7 | 8 | // Creates a PagedResponse object 9 | func ConvertToPagedResponse[T any]( 10 | paginationFilter PaginationFilter, 11 | items *Pageable[T], 12 | ) *identity_service_sdk_go.PagedResponse { 13 | var nextPage *int32 14 | 15 | hasNextPage := int64( 16 | paginationFilter.GetPage(), 17 | )*int64( 18 | paginationFilter.GetLimit(), 19 | ) < items.Total 20 | if hasNextPage { 21 | n := paginationFilter.GetPage() + 1 22 | nextPage = &n 23 | } 24 | 25 | return &identity_service_sdk_go.PagedResponse{ 26 | HasNextPage: &hasNextPage, 27 | NextPage: nextPage, 28 | Total: items.Total, 29 | Size: items.Size, 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /frontend/src/types/api/settings.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import { 7 | V1Alpha1ApiKey, 8 | V1Alpha1DuoIdpSettings, 9 | V1Alpha1IdpType, 10 | V1Alpha1IssuerSettings, 11 | V1Alpha1OktaIdpSettings, 12 | V1Alpha1KeycloakIdpSettings, 13 | V1Alpha1OryIdpSettings, 14 | V1Alpha1SetIssuerRequest, 15 | V1Alpha1Settings 16 | } from '@/api/generated/identity/settings_service.swagger.api'; 17 | 18 | export type { 19 | V1Alpha1ApiKey as ApiKey, 20 | V1Alpha1DuoIdpSettings as DuoIdpSettings, 21 | V1Alpha1IssuerSettings as IssuerSettings, 22 | V1Alpha1OktaIdpSettings as OktaIdpSettings, 23 | V1Alpha1SetIssuerRequest as SetIssuerRequest, 24 | V1Alpha1Settings as Settings, 25 | V1Alpha1KeycloakIdpSettings as KeycloakIdpSettings, 26 | V1Alpha1OryIdpSettings as OryIdpSettings 27 | }; 28 | 29 | export {V1Alpha1IdpType as IdpType}; 30 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Website 2 | 3 | This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. 4 | 5 | ## Installation 6 | 7 | ```sh 8 | yarn 9 | ``` 10 | 11 | ## Local Development 12 | 13 | ```sh 14 | yarn start 15 | ``` 16 | 17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ## Build 20 | 21 | ```sh 22 | yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ## Deployment 28 | 29 | Using SSH: 30 | 31 | ```sh 32 | USE_SSH=true yarn deploy 33 | ``` 34 | 35 | Not using SSH: 36 | 37 | ```sh 38 | GIT_USER= yarn deploy 39 | ``` 40 | 41 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 42 | -------------------------------------------------------------------------------- /frontend/src/hooks/use-window-size.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {useLayoutEffect, useMemo, useState} from 'react'; 7 | 8 | export const useWindowSize = () => { 9 | const [windowSize, setWindowSize] = useState({width: 0, height: 0}); 10 | const isMobile = useMemo(() => windowSize.width < 768, [windowSize.width]); 11 | const isTablet = useMemo(() => windowSize.width >= 768 && windowSize.width < 1024, [windowSize.width]); 12 | 13 | const handleSize = () => { 14 | setWindowSize({ 15 | width: window.innerWidth, 16 | height: window.innerHeight 17 | }); 18 | }; 19 | 20 | useLayoutEffect(() => { 21 | handleSize(); 22 | window.addEventListener('resize', handleSize); 23 | return () => window.removeEventListener('resize', handleSize); 24 | }, []); 25 | 26 | return {windowSize, isMobile, isTablet}; 27 | }; 28 | -------------------------------------------------------------------------------- /frontend/src/constants/labels.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AppType} from '@/types/api/app'; 7 | import {RuleAction} from '@/types/api/policy'; 8 | import {IdpType} from '@/types/api/settings'; 9 | 10 | export const labels = { 11 | appTypes: { 12 | [AppType.APP_TYPE_AGENT_OASF]: 'OASF', 13 | [AppType.APP_TYPE_AGENT_A2A]: 'A2A Agent', 14 | [AppType.APP_TYPE_MCP_SERVER]: 'MCP Server' 15 | }, 16 | providerTypes: { 17 | [IdpType.IDP_TYPE_OKTA]: 'Okta', 18 | [IdpType.IDP_TYPE_DUO]: 'Duo', 19 | [IdpType.IDP_TYPE_SELF]: 'OASF (AGNTCY)', 20 | [IdpType.IDP_TYPE_ORY]: 'Ory', 21 | [IdpType.IDP_TYPE_KEYCLOAK]: 'Keycloak' 22 | }, 23 | rulesActions: { 24 | [RuleAction.RULE_ACTION_UNSPECIFIED]: 'Unspecified', 25 | [RuleAction.RULE_ACTION_ALLOW]: 'Allow', 26 | [RuleAction.RULE_ACTION_DENY]: 'Deny' 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /frontend/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 | "target": "ES2020", 5 | "useDefineForClassFields": true, 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "module": "ESNext", 8 | "skipLibCheck": true, 9 | "moduleResolution": "bundler", 10 | "allowImportingTsExtensions": true, 11 | "resolveJsonModule": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | "baseUrl": ".", 17 | "paths": { 18 | "@/*": ["./src/*"] 19 | }, 20 | "esModuleInterop": true, 21 | "strict": true, 22 | "noUnusedLocals": false, 23 | "noUnusedParameters": false, 24 | "noFallthroughCasesInSwitch": true 25 | }, 26 | "typeRoots": ["./node_modules/@types", "./src/types"], 27 | "include": ["src/**/*", "**/*.d.ts"], 28 | "exclude": ["./node_modules"] 29 | } 30 | -------------------------------------------------------------------------------- /frontend/src/config/global.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export const globalConfig = { 7 | pwa: { 8 | name: 'AGNTCY Identity Service', 9 | shortName: 'Identity Service', 10 | description: 'A secure and efficient identity management service for agents.', 11 | themeColor: '#eff3fc', 12 | backgroundColor: '#eff3fc' 13 | }, 14 | links: { 15 | termsAndConditions: 'https://example.com/terms', 16 | privacyPolicy: 'https://example.com/privacy', 17 | email: 'support@example.com' 18 | }, 19 | company: { 20 | name: 'Your Company Name', 21 | url: 'https://example.com/', 22 | gitHub: 'https://github.com/your-org/identity-service' 23 | }, 24 | title: 'AGNTCY Identity Service', 25 | description: 'A secure and efficient identity management service for agents.', 26 | demoBanner: false, 27 | poweredBy: false 28 | }; 29 | -------------------------------------------------------------------------------- /frontend/src/pages/settings/api-key/api-key.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {ContentApiKey} from '@/components/api-key/content-api-key'; 7 | import {BasePage} from '@/components/layout/base-page'; 8 | import {PATHS} from '@/router/paths'; 9 | import React from 'react'; 10 | import {useOutletContext} from 'react-router-dom'; 11 | 12 | const ApiKey: React.FC = () => { 13 | const {subNav} = useOutletContext<{subNav: {label: string; href: string}[]}>(); 14 | 15 | return ( 16 | 29 | 30 | 31 | ); 32 | }; 33 | 34 | export default ApiKey; 35 | -------------------------------------------------------------------------------- /frontend/src/components/ui/separator.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import * as React from 'react'; 7 | import * as SeparatorPrimitive from '@radix-ui/react-separator'; 8 | 9 | import {cn} from '@/lib/utils'; 10 | 11 | function Separator({ 12 | className, 13 | orientation = 'horizontal', 14 | decorative = true, 15 | ...props 16 | }: React.ComponentProps) { 17 | return ( 18 | 28 | ); 29 | } 30 | 31 | export {Separator}; 32 | -------------------------------------------------------------------------------- /frontend/src/assets/mcp.svg: -------------------------------------------------------------------------------- 1 | ModelContextProtocol -------------------------------------------------------------------------------- /frontend/src/constants/oicd.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {WebStorageStateStore} from 'oidc-client-ts'; 7 | import {AuthProviderProps} from 'react-oidc-context'; 8 | 9 | export const defaultAuthConfigOptionsOIDC: Partial = { 10 | scope: 'profile openid email offline_access', 11 | redirect_uri: `${window.location.protocol}//${window.location.host}`, 12 | post_logout_redirect_uri: `${window.location.protocol}//${window.location.host}`, 13 | automaticSilentRenew: true, 14 | response_type: 'code', 15 | loadUserInfo: true, 16 | userStore: new WebStorageStateStore({store: localStorage}), 17 | stateStore: new WebStorageStateStore({store: localStorage}), 18 | extraQueryParams: {audience: 'api://default'} 19 | }; 20 | 21 | export const onSigninCallback = () => { 22 | window.history.replaceState({}, document.title, window.location.pathname); 23 | }; 24 | -------------------------------------------------------------------------------- /backend/internal/core/settings/types/idptype_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=IdpType"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[IDP_TYPE_UNSPECIFIED-0] 12 | _ = x[IDP_TYPE_DUO-1] 13 | _ = x[IDP_TYPE_OKTA-2] 14 | _ = x[IDP_TYPE_ORY-3] 15 | _ = x[IDP_TYPE_SELF-4] 16 | _ = x[IDP_TYPE_KEYCLOAK-5] 17 | } 18 | 19 | const _IdpType_name = "IDP_TYPE_UNSPECIFIEDIDP_TYPE_DUOIDP_TYPE_OKTAIDP_TYPE_ORYIDP_TYPE_SELFIDP_TYPE_KEYCLOAK" 20 | 21 | var _IdpType_index = [...]uint8{0, 20, 32, 45, 57, 70, 87} 22 | 23 | func (i IdpType) String() string { 24 | idx := int(i) - 0 25 | if i < 0 || idx >= len(_IdpType_index)-1 { 26 | return "IdpType(" + strconv.FormatInt(int64(i), 10) + ")" 27 | } 28 | return _IdpType_name[_IdpType_index[idx]:_IdpType_index[idx+1]] 29 | } 30 | -------------------------------------------------------------------------------- /frontend/src/hooks/use-auth.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {useAuthIAM} from '@/providers/auth-provider/iam/use-auth-iam'; 7 | import {useAuthOIDC} from '@/providers/auth-provider/oicd/use-auth-oidc'; 8 | import {AuthContextIAM} from '@/types/auth/iam'; 9 | import config, {AuthType} from '@/config'; 10 | import {AuthContextOIDC} from '@/types/auth/oidc'; 11 | 12 | export const useAuth = (): AuthContextIAM | AuthContextOIDC => { 13 | let auth: typeof useAuthIAM | typeof useAuthOIDC = useAuthOIDC; 14 | 15 | if (!config.AUTH_TYPE) { 16 | console.warn('No AUTH_TYPE configured...'); 17 | } else if (config.AUTH_TYPE === AuthType.IAM) { 18 | auth = useAuthIAM; 19 | } else if (config.AUTH_TYPE === AuthType.OIDC) { 20 | auth = useAuthOIDC; 21 | } else { 22 | console.warn(`Unknown AUTH_TYPE configured: ${config.AUTH_TYPE}`); 23 | } 24 | 25 | return {...auth()}; 26 | }; 27 | -------------------------------------------------------------------------------- /frontend/src/providers/auth-provider/auth-provider.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import AuthProviderIAM from './iam/auth-provider-iam'; 7 | import AuthProviderOIDC from './oicd/auth-provider-oidc'; 8 | import config, {AuthType} from '@/config'; 9 | import {AuthError} from '@/components/router/auth-error'; 10 | 11 | const AuthProvider: React.FC = ({children}) => { 12 | if (!config.AUTH_TYPE) { 13 | return ; 14 | } else if (config.AUTH_TYPE === AuthType.IAM) { 15 | return {children}; 16 | } else if (config.AUTH_TYPE === AuthType.OIDC) { 17 | return {children}; 18 | } else { 19 | return ; 20 | } 21 | }; 22 | 23 | export default AuthProvider; 24 | -------------------------------------------------------------------------------- /frontend/src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | export const encodeBase64 = (input: string): string => { 7 | return btoa(input); 8 | }; 9 | 10 | export const generateRandomId = () => Math.random().toString(36).slice(2); 11 | 12 | export const fetchCurrentManifest = async () => { 13 | try { 14 | const manifestLink = document.querySelector('link[rel="manifest"]') as HTMLLinkElement; 15 | if (!manifestLink) { 16 | console.warn('No manifest link found'); 17 | return null; 18 | } 19 | 20 | const response = await fetch(manifestLink.href); 21 | if (!response.ok) { 22 | throw new Error(`Failed to fetch manifest: ${response.status} ${response.statusText}`); 23 | } 24 | 25 | const manifest = await response.json(); 26 | return manifest; 27 | } catch (error) { 28 | console.error('Error fetching manifest:', error); 29 | return null; 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /frontend/src/components/agentic-services/add/stepper.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {defineStepper} from '@/components/ui/stepper'; 7 | import {AgenticServiceSchema} from '@/schemas/agentic-service-schema'; 8 | import {z} from 'zod'; 9 | 10 | export const { 11 | StepperProvider, 12 | StepperControls, 13 | StepperNavigation, 14 | StepperStep, 15 | StepperTitle, 16 | StepperDescription, 17 | StepperPanel, 18 | useStepper 19 | } = defineStepper( 20 | { 21 | id: 'agenticServiceForm', 22 | title: 'Agentic Service Type & Details', 23 | description: 'Select the agentic service type you want to use and enter the service information', 24 | schema: AgenticServiceSchema 25 | }, 26 | { 27 | id: 'confirmAgenticService', 28 | title: 'Register Agentic Service', 29 | description: 'Confirm the registration of the agentic service', 30 | schema: z.object({}) 31 | } 32 | ); 33 | -------------------------------------------------------------------------------- /frontend/src/mutations/auth.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import {AxiosResponse} from 'axios'; 7 | import {useMutation} from '@tanstack/react-query'; 8 | import {AuthAPI} from '@/api/services'; 9 | import {ApproveTokenRequest} from '@/types/api/auth'; 10 | 11 | interface PropSettingsAuth { 12 | callbacks?: { 13 | onSuccess?: (props: AxiosResponse) => void; 14 | onError?: () => void; 15 | }; 16 | } 17 | 18 | export const useAproveToken = ({callbacks = {}}: PropSettingsAuth) => { 19 | return useMutation({ 20 | mutationKey: ['approve-token'], 21 | mutationFn: (data: ApproveTokenRequest) => AuthAPI.approveToken(data), 22 | onError: () => { 23 | if (callbacks?.onError) { 24 | callbacks.onError(); 25 | } 26 | }, 27 | onSuccess: (resp) => { 28 | if (callbacks?.onSuccess) { 29 | callbacks.onSuccess(resp); 30 | } 31 | } 32 | }); 33 | }; 34 | -------------------------------------------------------------------------------- /backend/internal/core/device/types/notificationtype_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=NotificationType"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[NOTIFICATION_TYPE_UNSPECIFIED-0] 12 | _ = x[NOTIFICATION_TYPE_INFO-1] 13 | _ = x[NOTIFICATION_TYPE_APPROVAL_REQUEST-2] 14 | } 15 | 16 | const _NotificationType_name = "NOTIFICATION_TYPE_UNSPECIFIEDNOTIFICATION_TYPE_INFONOTIFICATION_TYPE_APPROVAL_REQUEST" 17 | 18 | var _NotificationType_index = [...]uint8{0, 29, 51, 85} 19 | 20 | func (i NotificationType) String() string { 21 | idx := int(i) - 0 22 | if i < 0 || idx >= len(_NotificationType_index)-1 { 23 | return "NotificationType(" + strconv.FormatInt(int64(i), 10) + ")" 24 | } 25 | return _NotificationType_name[_NotificationType_index[idx]:_NotificationType_index[idx+1]] 26 | } 27 | -------------------------------------------------------------------------------- /backend/internal/pkg/errutil/error_test.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package errutil_test 5 | 6 | import ( 7 | "errors" 8 | "testing" 9 | 10 | "github.com/agntcy/identity-service/internal/pkg/errutil" 11 | "github.com/google/uuid" 12 | "github.com/stretchr/testify/assert" 13 | ) 14 | 15 | func TestIsDomainError(t *testing.T) { 16 | t.Parallel() 17 | 18 | testCases := map[string]*struct { 19 | err error 20 | expectedResult bool 21 | }{ 22 | "should return true": { 23 | err: errutil.InvalidRequest(uuid.NewString(), "something"), 24 | expectedResult: true, 25 | }, 26 | "should return false": { 27 | err: errors.New("random"), 28 | expectedResult: false, 29 | }, 30 | } 31 | 32 | for tn, tc := range testCases { 33 | t.Run(tn, func(t *testing.T) { 34 | t.Parallel() 35 | 36 | assert.Equal(t, tc.expectedResult, errutil.IsDomainError(tc.err)) 37 | }) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /frontend/src/assets/types-agentic-services/a2a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /backend/internal/pkg/cache/cache_test.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 2 | // SPDX-License-Identifier: Apache-2.0 3 | 4 | package identitycache_test 5 | 6 | import ( 7 | "testing" 8 | 9 | identitycache "github.com/agntcy/identity-service/internal/pkg/cache" 10 | "github.com/coocood/freecache" 11 | "github.com/eko/gocache/lib/v4/cache" 12 | freecache_store "github.com/eko/gocache/store/freecache/v4" 13 | "github.com/google/uuid" 14 | "github.com/stretchr/testify/assert" 15 | ) 16 | 17 | func TestInMemoryCache(t *testing.T) { 18 | t.Parallel() 19 | 20 | freecacheStore := freecache_store.NewFreecache(freecache.NewCache(1024)) 21 | c := cache.New[[]byte](freecacheStore) 22 | key := "my_key" 23 | value := uuid.NewString() 24 | 25 | err := identitycache.AddToCache(t.Context(), c, key, &value) 26 | assert.NoError(t, err) 27 | 28 | actual, ok := identitycache.GetFromCache[string](t.Context(), c, key) 29 | assert.True(t, ok) 30 | assert.NotNil(t, actual) 31 | assert.Equal(t, value, *actual) 32 | } 33 | -------------------------------------------------------------------------------- /frontend/src/components/router/404.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import React from 'react'; 7 | import {useNavigate} from 'react-router-dom'; 8 | import {EmptyState} from '@open-ui-kit/core'; 9 | import {Card} from '../ui/card'; 10 | 11 | const NotFound: React.FC = () => { 12 | const navigate = useNavigate(); 13 | 14 | const handleClick = () => { 15 | void navigate(-1); 16 | }; 17 | 18 | return ( 19 | 20 | handleClick()} 26 | containerProps={{paddingBottom: '40px'}} 27 | /> 28 | 29 | ); 30 | }; 31 | 32 | export default NotFound; 33 | -------------------------------------------------------------------------------- /frontend/src/components/router/secure-route/secure-route.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 AGNTCY Contributors (https://github.com/agntcy) 3 | * SPDX-License-Identifier: Apache-2.0 4 | */ 5 | 6 | import React from 'react'; 7 | import config, {AuthType} from '@/config'; 8 | import {AuthError} from '../auth-error'; 9 | import {SecureRouteProps} from '@/types/auth/common-secure-route'; 10 | import {SecureRouteIAM} from './iam/secure-route-iam'; 11 | import {SecureRouteOIDC} from './oidc/secure-route-oidc'; 12 | 13 | export const SecureRoute: React.FC> = (props) => { 14 | if (!config.AUTH_TYPE) { 15 | return ; 16 | } else if (config.AUTH_TYPE === AuthType.IAM) { 17 | return ; 18 | } else if (config.AUTH_TYPE === AuthType.OIDC) { 19 | return ; 20 | } else { 21 | return ; 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /backend/internal/core/badge/types/credentialstatuspurpose_string.go: -------------------------------------------------------------------------------- 1 | // Code generated by "stringer -type=CredentialStatusPurpose"; DO NOT EDIT. 2 | 3 | package types 4 | 5 | import "strconv" 6 | 7 | func _() { 8 | // An "invalid array index" compiler error signifies that the constant values have changed. 9 | // Re-run the stringer command to generate them again. 10 | var x [1]struct{} 11 | _ = x[CREDENTIAL_STATUS_PURPOSE_UNSPECIFIED-0] 12 | _ = x[CREDENTIAL_STATUS_PURPOSE_REVOCATION-1] 13 | } 14 | 15 | const _CredentialStatusPurpose_name = "CREDENTIAL_STATUS_PURPOSE_UNSPECIFIEDCREDENTIAL_STATUS_PURPOSE_REVOCATION" 16 | 17 | var _CredentialStatusPurpose_index = [...]uint8{0, 37, 73} 18 | 19 | func (i CredentialStatusPurpose) String() string { 20 | idx := int(i) - 0 21 | if i < 0 || idx >= len(_CredentialStatusPurpose_index)-1 { 22 | return "CredentialStatusPurpose(" + strconv.FormatInt(int64(i), 10) + ")" 23 | } 24 | return _CredentialStatusPurpose_name[_CredentialStatusPurpose_index[idx]:_CredentialStatusPurpose_index[idx+1]] 25 | } 26 | --------------------------------------------------------------------------------