forked from asgardeo/thunder
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinferApplicationTemplateTechnologyFromConfig.ts
More file actions
70 lines (65 loc) · 2.47 KB
/
inferApplicationTemplateTechnologyFromConfig.ts
File metadata and controls
70 lines (65 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/**
* Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {TechnologyApplicationTemplate} from '../models/application-templates';
import type {OAuth2Config} from '../models/oauth';
import {OAuth2GrantTypes} from '../models/oauth';
/**
* Infers the application template technology type from an OAuth2 configuration.
*
* This function analyzes OAuth2 configuration properties to determine the most
* appropriate application template technology. It uses patterns such as client
* type (public/confidential) and grant types to make the inference.
*
* @param config - The OAuth2 configuration to analyze, or null if no config exists.
* @returns The inferred technology-based application template type.
*
* @remarks
* The inference logic:
* - Public clients → REACT (typical for SPAs)
* - Confidential clients with authorization code → NEXTJS (typical for server-side apps)
* - No config or other patterns → OTHER (fallback)
*
* @example
* ```typescript
* // Public client (SPA)
* const spaConfig = { publicClient: true, grantTypes: ['authorization_code'] };
* inferApplicationTemplateTechnologyFromConfig(spaConfig);
* // Returns: 'REACT'
*
* // Confidential client (SSR)
* const ssrConfig = { publicClient: false, grantTypes: ['authorization_code'] };
* inferApplicationTemplateTechnologyFromConfig(ssrConfig);
* // Returns: 'NEXTJS'
*
* // No config
* inferApplicationTemplateTechnologyFromConfig(null);
* // Returns: 'OTHER'
* ```
*/
export default function inferApplicationTemplateTechnologyFromConfig(
config: OAuth2Config | null,
): TechnologyApplicationTemplate {
if (!config) return TechnologyApplicationTemplate.OTHER;
if (config.publicClient) {
return TechnologyApplicationTemplate.REACT;
}
if (config.grantTypes.includes(OAuth2GrantTypes.AUTHORIZATION_CODE)) {
return TechnologyApplicationTemplate.NEXTJS;
}
return TechnologyApplicationTemplate.OTHER;
}