Skip to content

Add application type attribute - #4321

Merged
ThaminduDilshan merged 1 commit into
thunder-id:mainfrom
Malith-19:feat/4295-application-type
Jul 27, 2026
Merged

Add application type attribute#4321
ThaminduDilshan merged 1 commit into
thunder-id:mainfrom
Malith-19:feat/4295-application-type

Conversation

@Malith-19

@Malith-19 Malith-19 commented Jul 24, 2026

Copy link
Copy Markdown
Member

Purpose

Introduce a canonical type attribute on applications (browser, fullstack, mobile, m2m, custom) so the backend, rather than the frontend template id, is the source of truth for platform/client class. This drives type-specific behavior such as flow-secret issuance and flow-initiation mode.


⚠️ Breaking Changes

🔧 Summary of Breaking Changes

The application type attribute is now required at creation. There is no implicit default; an application created without a type is rejected with APP-1042 (Application type is required).

💥 Impact

Any API client, declarative resource, or automation that creates an application without a type field will start failing with a 400. The attribute is immutable after creation. The ThunderID Console and the shipped declarative resources already set a type, so they are unaffected.

🔄 Migration Guide

Add a type to every application-creation request / declarative resource, using one of browser, fullstack, mobile, m2m, or custom. Use custom for applications that do not fit the other classes (it applies no type-specific restrictions).

resource_type: application
name: My App
type: fullstack   # <-- now required

Approach

  • Added an immutable type attribute to applications, required and validated on creation. custom is the unrestricted class for applications that do not fit the others.
  • Flow-initiation mode is resolved from the application type rather than inferred from the OAuth config shape:
    • browser and m2m cannot initiate flows directly.
    • mobile apps authenticate to the Flow Execution API with platform attestation; attestation must be configured, otherwise flow initiation is rejected. They are never issued a flow secret.
    • fullstack and custom apps derive the mode from their OAuth profile (embedded uses a flow secret, redirect is blocked).
  • Flow-secret issuance mirrors the above: only fullstack/custom embedded (confidential, non-redirect) apps are issued one; browser, mobile, and m2m never are.
  • Adopted the type in the Console: embedded sign-in is offered only for fullstack/mobile, mobile shows an attestation notice, and the canonical type (with an OAuth-shape fallback) drives m2m detection and flow-secret UI.
  • Annotated the shipped Console and sample application declarative resources with their type.

Related Issues

Related PRs

  • N/A

Checklist

  • Followed the contribution guidelines.
  • Manual test round performed and verified.
  • Documentation provided. (Add links if there are any)
  • Tests provided. (Add links if there are any)
    • Unit Tests
    • Integration Tests
  • Breaking changes. (Fill if applicable)
    • Breaking changes section filled.
    • breaking change label added.

Security checks

  • Followed secure coding standards in WSO2 Secure Coding Guidelines
  • Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets.

Summary by CodeRabbit

  • New Features
    • Application creation now requires a canonical type (browser, fullstack, mobile, m2m, custom), which is returned in API responses and is immutable (updates must keep it the same).
    • Flow Secret eligibility and direct flow initiation behavior now depend on application type plus OAuth/grant configuration.
    • Mobile flow initiation includes a clearer attestation-not-configured error.
  • Documentation
    • Updated guides for application types, declarative import requirements, direct initiation restrictions, and mobile attestation guidance.
  • Tests
    • Added/extended coverage for type persistence, update rules, Flow Secret eligibility, and direct-flow initiation modes.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The change introduces a canonical application type enum across API, backend, flow execution, console creation, declarative resources, tests, and documentation. Types are persisted, validated, immutable after creation, returned by APIs, and used to determine Flow Secret and direct-flow eligibility.

Changes

Application type contracts and models

Layer / File(s) Summary
Canonical type contracts
api/application.yaml, backend/pkg/thunderidengine/providers/model.go, backend/internal/application/model/*, frontend/apps/console/src/features/applications/models/*
Defines browser, fullstack, mobile, m2m, and custom across API schemas and application models.
Backend application lifecycle
backend/internal/application/*, backend/internal/system/importer/*
Requires and validates type on creation, preserves it on updates, persists it in inbound-client properties, and includes it in responses and declarative imports.
Flow initiation rules
backend/internal/flow/flowexec/*, tests/integration/flow/authentication/*
Uses application type to restrict browser/M2M initiation, require mobile attestation, and determine Flow Secret initiation for full-stack/custom applications.
Console creation and editing
frontend/apps/console/src/features/applications/pages/*, frontend/apps/console/src/features/applications/components/*, frontend/apps/console/src/features/applications/utils/*
Adds template type metadata, resolves legacy types from OAuth configuration, sends type during creation, and updates Flow Secret-related UI classification.
Resources, tests, and documentation
backend/cmd/server/bootstrap/*, frontend/apps/console/src/features/applications/data/application-templates/*, tests/integration/*, docs/content/*
Updates templates, fixtures, integration payloads, examples, error messages, translations, and application-type guidance.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: thiva-k, donomalvindula, brionmario, rajithacharith

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Most core requirements are met, but legacy applications do not resolve to a defined default type as required by #4295. Add a defined fallback for legacy apps without type (e.g. custom) across read paths and cover it with tests.
Out of Scope Changes check ⚠️ Warning The PR includes explicit flow-secret/attestation behavior and frontend template-to-type mapping, both called out as out of scope in #4295. Split Layer 2/3 flow rules and frontend mapping into follow-up work, keeping this PR to validated type persistence and responses.
Docstring Coverage ⚠️ Warning Docstring coverage is 72.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed Clear, concise title that matches the main change: adding a canonical application type attribute.
Description check ✅ Passed The description includes purpose, breaking changes, approach, related issue, checklist, and security sections.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx (1)

130-143: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use the canonical application type for all MCP client classification.

isM2m still uses the grant shape, while isM2MClient uses isM2MApplication. For an explicitly typed m2m application whose grants differ from the legacy client-credentials-only shape, the badge and McpAccessSection visibility disagree with Flow Secret visibility. Reuse one type-based boolean for both decisions.

Based on the PR objectives, application type is the canonical discriminator.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx`
around lines 130 - 143, Use the canonical application-type classification
consistently in the MCP client flow: replace the grant-based isM2m calculation
with the existing isM2MApplication result, then reuse that single boolean for
both client type/badge decisions and isFlowNativeClient or McpAccessSection
visibility. Keep grantTypes for authorization-code checks, but do not
independently infer M2M status from grant shape.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@api/application.yaml`:
- Around line 799-803: Update docs/content/guides/application-types.mdx to
document application type values, immutability, legacy custom defaulting,
declarative YAML usage, direct-flow restrictions and attestation requirements,
and full-stack/custom OAuth-profile behavior. In api/application.yaml at lines
799-803, revise the flowSecret descriptions to avoid implying confidential M2M
applications automatically receive a secret. The service_test.go range 2371-2460
requires no direct change; use its covered behavior to keep the documentation
accurate.

In `@backend/internal/application/service.go`:
- Around line 240-244: Update the relevant documentation under docs/content to
cover the application REST type contract in apis.mdx, including the custom
default, enum values, validation, immutability, and create/update/GET/list
behavior; document the declarative YAML type field and accepted values in the
guides; and document browser/M2M direct-flow restrictions plus mobile
platform-attestation requirements for flow initiation.

In `@backend/internal/flow/flowexec/service.go`:
- Around line 302-324: Update the consolidated documentation review at
docs/content/apis.mdx to cover the application type API and declarative YAML
field, including supported values, the custom legacy default, immutability, and
REST/declarative usage; add a relevant guide under docs/content/guides/
describing browser and M2M denial, mobile attestation requirements, and
fullstack/custom profile-derived flow initiation; and document gate_client.port
deployment configuration and default-resolution behavior in the appropriate
server configuration guide. These documentation changes apply to
backend/internal/flow/flowexec/service.go lines 302-324 and
backend/cmd/server/deployment.yaml lines 82-83; neither code site requires a
direct change.

In
`@frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx`:
- Around line 117-125: Update the flow-client classification in
EditGeneralSettings around isFlowNativeClient to resolve the application type
once and exclude explicitly typed browser applications alongside mobile and M2M
clients. Use the resolved type as the canonical discriminator, while preserving
the existing OAuth-shape fallback for other application types.

In
`@frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx`:
- Around line 225-229: Resolve the canonical application type once near
allowEmbeddedApproach, falling back to the OAuth profile for custom or legacy
templates without a type. Reuse this resolved type for embedded-sign-in
eligibility, mobile attestation messaging, and request construction at the
referenced flows, instead of reading selectedTemplateConfig?.type directly.
- Line 325: Add regression coverage for the creation payload assembled by
ApplicationCreatePage, asserting request bodies include the canonical type for
browser, mobile, and fullstack application creation, plus the MCP M2M override.
Update the relevant page tests with request-level assertions and ensure the new
scenarios meet the project’s 80% coverage expectation.

---

Outside diff comments:
In
`@frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx`:
- Around line 130-143: Use the canonical application-type classification
consistently in the MCP client flow: replace the grant-based isM2m calculation
with the existing isM2MApplication result, then reuse that single boolean for
both client type/badge decisions and isFlowNativeClient or McpAccessSection
visibility. Keep grantTypes for authorization-code checks, but do not
independently infer M2M status from grant shape.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: eeffac1e-7f53-496c-bb81-b7192211795f

📥 Commits

Reviewing files that changed from the base of the PR and between 189e635 and 53267a2.

📒 Files selected for processing (59)
  • api/application.yaml
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • backend/cmd/server/deployment.yaml
  • backend/internal/application/application_type_test.go
  • backend/internal/application/constants.go
  • backend/internal/application/declarative_resource.go
  • backend/internal/application/error_constants.go
  • backend/internal/application/handler.go
  • backend/internal/application/model/application.go
  • backend/internal/application/model/constants.go
  • backend/internal/application/model/constants_test.go
  • backend/internal/application/service.go
  • backend/internal/application/service_test.go
  • backend/internal/application/tools.go
  • backend/internal/flow/flowexec/error_constants.go
  • backend/internal/flow/flowexec/service.go
  • backend/internal/flow/flowexec/service_test.go
  • backend/internal/system/i18n/core/defaults.go
  • backend/internal/system/importer/service.go
  • backend/internal/system/importer/service_test.go
  • backend/pkg/thunderidengine/providers/model.go
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • frontend/apps/console/src/features/applications/components/create-application/__tests__/ConfigureExperience.test.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vanilla-js.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • frontend/apps/console/src/features/applications/models/application.ts
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • frontend/apps/console/src/features/applications/pages/__tests__/ApplicationCreatePage.test.tsx
  • frontend/apps/console/src/features/applications/utils/__tests__/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • frontend/packages/i18n/src/locales/en-US.ts
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • tests/integration/flow/authentication/attestation_flow_test.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • tests/integration/testutils/api_utils.go
  • tests/integration/testutils/models.go

Comment thread api/application.yaml
Comment thread backend/internal/application/service.go Outdated
Comment thread backend/internal/flow/flowexec/service.go
Comment thread frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx Outdated
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 53267a2 to 16e4e24 Compare July 24, 2026 06:59

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx (1)

117-125: ⚠️ Potential issue | 🟠 Major

Duplicate: exclude typed browser apps from flow-native classification.

isFlowNativeClient excludes only mobile and M2M. For application.type === 'browser' with no OAuth profile (or a non-public profile), Line 125 remains true, so Line 175 exposes Flow Secret controls even though browser apps cannot initiate flows. Exclude browser alongside mobile and M2M.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx`
around lines 117 - 125, The isFlowNativeClient classification in
EditGeneralSettings currently excludes mobile and M2M clients but not browser
applications. Update the condition to also exclude applications whose resolved
type is browser, while preserving the existing OAuth and grant-type checks for
other application types.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@backend/internal/application/model/application.go`:
- Around line 74-79: Update docs/content/apis.mdx and the relevant
application/flow guides under docs/content/guides/ to document the Application
type field, supported values, immutability, and custom default; document the
declarative YAML type field and valid values; and describe type-specific
flow-initiation restrictions for browser/M2M applications plus mobile
attestation requirements. The sibling model site at
backend/internal/application/model/application.go lines 94-104 requires no
direct change because this is a consolidated documentation-only update.

In `@backend/internal/flow/flowexec/service.go`:
- Around line 312-324: Update the application-type switch in the flow initiation
resolver to route providers.ApplicationTypeCustom through
resolveFlowInitiationModeFromProfile, matching the existing FullStack behavior.
Keep missing application types’ existing custom resolution and preserve Mobile
attestation validation plus the default denial for other types.

---

Duplicate comments:
In
`@frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx`:
- Around line 117-125: The isFlowNativeClient classification in
EditGeneralSettings currently excludes mobile and M2M clients but not browser
applications. Update the condition to also exclude applications whose resolved
type is browser, while preserving the existing OAuth and grant-type checks for
other application types.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e5fe1ad2-dbc0-4084-9f68-fe50573dd344

📥 Commits

Reviewing files that changed from the base of the PR and between 53267a2 and 16e4e24.

📒 Files selected for processing (61)
  • api/application.yaml
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • backend/cmd/server/deployment.yaml
  • backend/internal/application/application_type_test.go
  • backend/internal/application/constants.go
  • backend/internal/application/declarative_resource.go
  • backend/internal/application/error_constants.go
  • backend/internal/application/handler.go
  • backend/internal/application/model/application.go
  • backend/internal/application/model/constants.go
  • backend/internal/application/model/constants_test.go
  • backend/internal/application/service.go
  • backend/internal/application/service_test.go
  • backend/internal/application/tools.go
  • backend/internal/flow/flowexec/error_constants.go
  • backend/internal/flow/flowexec/service.go
  • backend/internal/flow/flowexec/service_test.go
  • backend/internal/system/i18n/core/defaults.go
  • backend/internal/system/importer/service.go
  • backend/internal/system/importer/service_test.go
  • backend/pkg/thunderidengine/providers/model.go
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • frontend/apps/console/src/features/applications/components/create-application/__tests__/ConfigureExperience.test.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vanilla-js.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • frontend/apps/console/src/features/applications/models/application.ts
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • frontend/apps/console/src/features/applications/pages/__tests__/ApplicationCreatePage.test.tsx
  • frontend/apps/console/src/features/applications/utils/__tests__/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • frontend/packages/i18n/src/locales/en-US.ts
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • tests/integration/flow/authentication/acr_options_flow_test.go
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • tests/integration/flow/authentication/attestation_flow_test.go
  • tests/integration/flow/authentication/flow_secret_flow_test.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • tests/integration/testutils/api_utils.go
  • tests/integration/testutils/models.go
🚧 Files skipped from review as they are similar to previous changes (46)
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • frontend/apps/console/src/features/applications/pages/tests/ApplicationCreatePage.test.tsx
  • backend/internal/application/model/constants.go
  • backend/internal/flow/flowexec/error_constants.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • frontend/packages/i18n/src/locales/en-US.ts
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • backend/internal/application/constants.go
  • backend/internal/application/error_constants.go
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • backend/internal/application/tools.go
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • backend/internal/application/declarative_resource.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • backend/pkg/thunderidengine/providers/model.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • tests/integration/flow/authentication/attestation_flow_test.go
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • backend/internal/system/importer/service.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • backend/internal/application/handler.go
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • api/application.yaml
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • backend/internal/application/model/constants_test.go
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • backend/cmd/server/deployment.yaml
  • backend/internal/application/service_test.go
  • frontend/apps/console/src/features/applications/utils/tests/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/components/create-application/tests/ConfigureExperience.test.tsx
  • backend/internal/system/i18n/core/defaults.go
  • frontend/apps/console/src/features/applications/models/application.ts
  • tests/integration/testutils/models.go
  • backend/internal/flow/flowexec/service_test.go
  • backend/internal/application/service.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json

Comment thread backend/internal/application/model/application.go
Comment thread backend/internal/flow/flowexec/service.go Outdated
Comment thread backend/cmd/server/deployment.yaml Outdated
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 16e4e24 to 605ecb6 Compare July 24, 2026 07:10
Comment thread backend/internal/application/model/constants.go Outdated
Comment thread backend/pkg/thunderidengine/providers/model.go Outdated
Comment thread backend/pkg/thunderidengine/providers/model.go Outdated
Comment thread backend/internal/application/model/constants.go Outdated
@Malith-19 Malith-19 added the breaking change The feature/ improvement will alter the existing behaviour label Jul 24, 2026
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 605ecb6 to 2c8239c Compare July 24, 2026 09:24

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
backend/internal/application/constants.go (1)

37-37: 🚀 Performance & Scalability | 🔵 Trivial

Same "type" properties key duplicated across two packages.

propType here and applicationTypePropertyKey in backend/pkg/thunderidengine/providers/model.go both hardcode the literal "type" for what is effectively the same persisted-properties key, read by two independent InboundClient representations. No shared constant ties them together, so a future rename in one place won't be caught by the compiler.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/internal/application/constants.go` at line 37, Unify the
persisted-properties key used by propType in the constants package and
applicationTypePropertyKey in the InboundClient model by defining one shared
exported constant and referencing it from both locations. Remove the duplicate
hardcoded "type" literals while preserving the existing key value and behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@backend/internal/application/service.go`:
- Around line 926-928: Update both toProcessedDTO and
buildBasicApplicationResponse to resolve the application type through the
existing providers.InboundClient.ApplicationType() normalization/fallback
instead of reading Properties[propType] directly, so absent or legacy values
produce model.ApplicationTypeCustom. Ensure the resulting Type is populated
consistently in REST responses and remains compatible with
validateApplicationForUpdate’s first-time assignment behavior; update the
affected tests to expect the custom default.

---

Nitpick comments:
In `@backend/internal/application/constants.go`:
- Line 37: Unify the persisted-properties key used by propType in the constants
package and applicationTypePropertyKey in the InboundClient model by defining
one shared exported constant and referencing it from both locations. Remove the
duplicate hardcoded "type" literals while preserving the existing key value and
behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7bf43b4b-ba03-46a8-9a77-ea535d7877b9

📥 Commits

Reviewing files that changed from the base of the PR and between 16e4e24 and 2c8239c.

📒 Files selected for processing (58)
  • api/application.yaml
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • backend/internal/application/application_type_test.go
  • backend/internal/application/constants.go
  • backend/internal/application/declarative_resource.go
  • backend/internal/application/error_constants.go
  • backend/internal/application/handler.go
  • backend/internal/application/model/application.go
  • backend/internal/application/model/constants.go
  • backend/internal/application/model/constants_test.go
  • backend/internal/application/service.go
  • backend/internal/application/service_test.go
  • backend/internal/application/tools.go
  • backend/internal/flow/flowexec/error_constants.go
  • backend/internal/flow/flowexec/service.go
  • backend/internal/flow/flowexec/service_test.go
  • backend/internal/system/i18n/core/defaults.go
  • backend/internal/system/importer/service.go
  • backend/internal/system/importer/service_test.go
  • backend/pkg/thunderidengine/providers/model.go
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • frontend/apps/console/src/features/applications/components/create-application/__tests__/ConfigureExperience.test.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vanilla-js.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • frontend/apps/console/src/features/applications/models/application.ts
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • frontend/apps/console/src/features/applications/pages/__tests__/ApplicationCreatePage.test.tsx
  • frontend/apps/console/src/features/applications/utils/__tests__/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • frontend/packages/i18n/src/locales/en-US.ts
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • tests/integration/flow/authentication/attestation_flow_test.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • tests/integration/testutils/api_utils.go
  • tests/integration/testutils/models.go
🚧 Files skipped from review as they are similar to previous changes (43)
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • backend/internal/flow/flowexec/error_constants.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • backend/internal/system/importer/service_test.go
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/components/create-application/tests/ConfigureExperience.test.tsx
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • backend/internal/system/importer/service.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • backend/internal/application/declarative_resource.go
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vanilla-js.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • frontend/packages/i18n/src/locales/en-US.ts
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • tests/integration/testutils/models.go
  • backend/internal/system/i18n/core/defaults.go
  • frontend/apps/console/src/features/applications/models/application.ts
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • tests/integration/flow/authentication/attestation_flow_test.go
  • backend/internal/application/tools.go
  • api/application.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • backend/internal/flow/flowexec/service.go
  • backend/internal/flow/flowexec/service_test.go
  • frontend/apps/console/src/features/applications/utils/tests/resolveApplicationType.test.ts

Comment thread backend/internal/application/service.go
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 2c8239c to 709719e Compare July 24, 2026 10:10

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (1)
docs/content/guides/applications/manage-applications.mdx (1)

29-32: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove decorative emojis from the application-type table.

As per coding guidelines, ThunderID documentation does not use emojis in prose or table cells. Remove the ⚛️, 🌐, 📱, and 🤖 markers.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/content/guides/applications/manage-applications.mdx` around lines 29 -
32, Remove the decorative emojis from the Browser App, Full-stack App, Mobile
App, and Backend Service labels in the application-type table, preserving the
existing text and table structure.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@api/application.yaml`:
- Around line 929-935: Update the required lists for
ApplicationCompleteResponse, ApplicationGetResponse, and
BasicApplicationResponse to include type. Keep the existing type property
definitions unchanged while ensuring generated clients treat the canonical
application type as always present in each response.
- Around line 869-873: Update the Flow Secret descriptions in both referenced
application configuration sections to document that eligible fullstack and
custom embedded applications may receive a secret when no OAuth configuration is
present, in addition to confidential non-redirect clients. Preserve the existing
exclusions for browser, mobile, and machine-to-machine applications.

In `@docs/content/guides/applications/manage-applications.mdx`:
- Around line 33-35: Update
docs/content/guides/applications/manage-applications.mdx lines 33-35 to replace
the claim that Custom applications have no type-specific restrictions with the
actual OAuth-profile-dependent behavior. Update
docs/content/guides/applications/application-settings.mdx line 117 to either
list the complete API grant enum or clearly scope the list to Console-supported
values, and document the required confidential, non-redirect, or
embedded/no-OAuth conditions for direct initiation.

In `@docs/content/key-concepts/authentication/integration-models.mdx`:
- Around line 89-91: Update the attestation documentation to state that a Mobile
application must configure at least one supported platform, rather than exactly
one, matching the resolver behavior that accepts Android, Apple, or both
configurations. Keep the surrounding explanation of optional application-level
attestation unchanged.

In
`@frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx`:
- Around line 140-141: Update the isFlowNativeClient calculation in
McpConnectTab to reuse the canonical application-type predicate from
EditGeneralSettings, so only resolved fullstack or custom applications can
receive Flow Secret controls. Ensure M2M applications remain excluded even when
oauth2Config is absent, while preserving the existing OAuth and grant-type
checks for eligible applications.

---

Nitpick comments:
In `@docs/content/guides/applications/manage-applications.mdx`:
- Around line 29-32: Remove the decorative emojis from the Browser App,
Full-stack App, Mobile App, and Backend Service labels in the application-type
table, preserving the existing text and table structure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 66c02700-5662-4a6f-83b9-053a7b1c9feb

📥 Commits

Reviewing files that changed from the base of the PR and between 2c8239c and 709719e.

📒 Files selected for processing (61)
  • api/application.yaml
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • backend/internal/application/application_type_test.go
  • backend/internal/application/constants.go
  • backend/internal/application/declarative_resource.go
  • backend/internal/application/error_constants.go
  • backend/internal/application/handler.go
  • backend/internal/application/model/application.go
  • backend/internal/application/model/constants.go
  • backend/internal/application/service.go
  • backend/internal/application/service_test.go
  • backend/internal/application/tools.go
  • backend/internal/flow/flowexec/error_constants.go
  • backend/internal/flow/flowexec/service.go
  • backend/internal/flow/flowexec/service_test.go
  • backend/internal/system/i18n/core/defaults.go
  • backend/internal/system/importer/service.go
  • backend/internal/system/importer/service_test.go
  • backend/pkg/thunderidengine/providers/model.go
  • docs/content/guides/applications/application-settings.mdx
  • docs/content/guides/applications/manage-applications.mdx
  • docs/content/guides/declarative-configurations/import-resources.mdx
  • docs/content/key-concepts/authentication/integration-models.mdx
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • frontend/apps/console/src/features/applications/components/create-application/__tests__/ConfigureExperience.test.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/general-settings/EditGeneralSettings.tsx
  • frontend/apps/console/src/features/applications/components/edit-application/mcp/McpConnectTab.tsx
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vanilla-js.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • frontend/apps/console/src/features/applications/models/application.ts
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • frontend/apps/console/src/features/applications/pages/__tests__/ApplicationCreatePage.test.tsx
  • frontend/apps/console/src/features/applications/utils/__tests__/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • frontend/packages/i18n/src/locales/en-US.ts
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • tests/integration/flow/authentication/apple_attestation_flow_test.go
  • tests/integration/flow/authentication/attestation_flow_test.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • tests/integration/testutils/api_utils.go
  • tests/integration/testutils/models.go
🚧 Files skipped from review as they are similar to previous changes (50)
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/backend.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/full-stack.json
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/browser.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/express.json
  • frontend/apps/console/src/features/applications/utils/resolveApplicationType.ts
  • backend/internal/application/constants.go
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/wallet.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/vue.json
  • backend/internal/flow/flowexec/error_constants.go
  • install/openchoreo/thunderid-oc-resourcetype/samples/resource.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/mcp-client.json
  • samples/apps/react-vanilla-sample/thunderid-config/basic/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nuxt.json
  • samples/apps/react-vanilla-sample/thunderid-config/multi-auth/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/utils/tests/resolveApplicationType.test.ts
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/react.json
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/other.json
  • samples/apps/wayfinder-sample/thunderid-config/redirect/thunderid-config.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/node.json
  • frontend/packages/i18n/src/locales/en-US.ts
  • tests/integration/resources/declarative_resources/applications/app-declarative-1.yaml
  • backend/pkg/thunderidengine/providers/model.go
  • samples/apps/wayfinder-sample/thunderid-config/app-native/thunderid-config.yaml
  • samples/apps/react-sdk-sample/thunderid-config/thunderid-config.yaml
  • backend/internal/system/importer/service.go
  • frontend/apps/console/src/features/applications/models/application-templates.ts
  • backend/cmd/server/bootstrap/01-default-resources.yaml
  • frontend/apps/console/src/features/applications/models/application.ts
  • backend/internal/application/tools.go
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/custom.json
  • backend/internal/system/importer/service_test.go
  • tests/integration/resources/declarative_resources/applications/app-declarative-confidential.yaml
  • frontend/apps/console/src/features/applications/data/application-templates/platform-based/mobile.json
  • tests/integration/flow/authentication/attestation_flow_test.go
  • frontend/apps/console/src/features/applications/data/application-templates/technology-based/nextjs.json
  • frontend/apps/console/src/features/applications/pages/ApplicationCreatePage.tsx
  • backend/internal/application/handler.go
  • backend/internal/application/declarative_resource.go
  • frontend/apps/console/src/features/applications/components/create-application/tests/ConfigureExperience.test.tsx
  • backend/internal/system/i18n/core/defaults.go
  • frontend/apps/console/src/features/applications/components/create-application/ConfigureExperience.tsx
  • tests/integration/testutils/models.go
  • tests/integration/testutils/api_utils.go
  • backend/internal/application/error_constants.go
  • frontend/apps/console/src/features/applications/pages/tests/ApplicationCreatePage.test.tsx
  • backend/internal/application/application_type_test.go
  • backend/internal/application/model/application.go
  • backend/internal/application/service_test.go
  • backend/internal/application/service.go
  • backend/internal/flow/flowexec/service_test.go

Comment thread api/application.yaml Outdated
Comment thread api/application.yaml
Comment thread docs/content/guides/applications/manage-applications.mdx Outdated
Comment thread docs/content/key-concepts/authentication/integration-models.mdx
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 709719e to b30e7d9 Compare July 24, 2026 10:19
Comment thread backend/internal/application/model/constants.go
Comment thread backend/internal/flow/flowexec/error_constants.go
@@ -1,5 +1,6 @@
{
"id": "wallet",
"type": "mobile",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we say wallet is a mobile always? Yes I agree that mobile template behavior is appropriate for this. But having it as mobile doesn't feel right...
Maybe another option is to have generic type that can be used for both mobile and wallets.

@brionmario wdyt?

@ThaminduDilshan ThaminduDilshan Jul 27, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's take this to a followup PR. @coderabbitai create a issue and assign @Malith-19

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@thiva-k WDYT about wallets? Generally most of the wallets are mobile apps. But if we consider a integration like Ethereum wallet, this is a browser integration right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For openid4vci wallets mobile type is fine. May need to think on Ethereum wallets when we bring support

@@ -1,5 +1,6 @@
{
"id": "mcp-client",
"type": "browser",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is mcp client is a browser app always?

cc: @thiva-k

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No,they can be confidential clients too. VSCode, Claude code, etc. support configuring client secrets

@ThaminduDilshan ThaminduDilshan Jul 27, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's take this to a followup PR. @coderabbitai create a issue and assign @Malith-19

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@thiva-k So shall we categorise it as full stack type or do you prefer to have a dedicated type for the mcp? If the app type does not have the flows integrations (with flow secret) then this falls under the m2m category in our current implementation.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having a mcp type should be fine right? This will align with frontend and if we need some additional validations for mcp apps in future, it would be straight-foward.

@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch 2 times, most recently from faecf82 to 8b26813 Compare July 24, 2026 12:19
@rajithacharith rajithacharith added the trigger-pr-builder Add when the PR is ready for CI; starts the PR Builder for this and all later pushes label Jul 24, 2026
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch 3 times, most recently from ad05c34 to 4fd81c1 Compare July 26, 2026 06:40
@codecov

codecov Bot commented Jul 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.21429% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
backend/internal/application/service.go 93.75% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

Comment thread backend/internal/application/model/constants.go Outdated
@Malith-19
Malith-19 force-pushed the feat/4295-application-type branch from 4fd81c1 to d04165a Compare July 27, 2026 02:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking change The feature/ improvement will alter the existing behaviour trigger-pr-builder Add when the PR is ready for CI; starts the PR Builder for this and all later pushes Type/Improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Introduce application type attribute to the backend

4 participants