Skip to content

Commit b3eaada

Browse files
committed
update
1 parent 109b218 commit b3eaada

28 files changed

Lines changed: 1317 additions & 142 deletions

.github/workflows/clean-workflows.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ jobs:
7878
// 3) Delete all successful "Cleanup Workflow Runs" runs (this workflow itself)
7979
console.log('Looking for successful cleanup workflow runs to delete…');
8080
for (const run of completed.data.workflow_runs) {
81-
if (run.name === 'Cleanup Workflow Runs' && run.conclusion === 'success') {
81+
if (run.name.includes('Cleanup') && run.conclusion === 'success') {
8282
console.log(`Deleting successful cleanup workflow run ${run.id}`);
8383
await github.rest.actions.deleteWorkflowRun({
8484
owner,

.github/workflows/comment-commit.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ jobs:
8383
model: process.env.OPENAI_MODEL,
8484
messages: [
8585
{ role: "system", content: "You are a concise code diff explainer." },
86-
{ role: "user", content: `Review this git diff and give me a short summary:\n\n${diff}` }
86+
{ role: "user", content: `Review this git diff and give me a short but technically accurate summary:\n\n${diff}` }
8787
]
8888
});
8989
const comment = res.choices.map(c => c.message.content).join("\n\n---\n\n");

.github/workflows/generate-changelog.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,27 @@ jobs:
128128
if [ -n "$OPENAI_API_KEY" ]; then
129129
echo "🤖 Creating high-level summary from AI comments..." >&2
130130
131+
# Set system prompt based on release type
132+
case "${{ inputs.release_type }}" in
133+
"alpha")
134+
system_prompt="You are a technical documentation specialist creating changelog entries for a development alpha release of a SMART on FHIR Proxy application. Your audience is developers and technical team members who need detailed technical information.\n\nGuidelines for ALPHA releases:\n- Focus on technical implementation details and code changes\n- Include specific component/file changes and technical improvements\n- Use technical terminology and be specific about APIs, endpoints, and architecture\n- Group by: 🔧 Code Changes, 🚀 New Features, ⚡ Performance, 🐛 Bug Fixes, 📚 Documentation\n- Mention specific technical debt addressed or refactoring done\n- Include details about new dependencies, API changes, or breaking changes\n- Keep developer workflow and testing implications in mind"
135+
;;
136+
"beta")
137+
system_prompt="You are a product documentation specialist creating changelog entries for a beta testing release of a SMART on FHIR Proxy application. Your audience includes beta testers, QA engineers, and technical product managers who need functional information.\n\nGuidelines for BETA releases:\n- Focus on user-facing features and functionality changes\n- Explain what users can now do differently or better\n- Balance technical accuracy with user-friendly language\n- Group by: 🚀 New Features, ⚡ Improvements, 🐛 Bug Fixes, � Security, ⚠️ Known Issues\n- Highlight testing scenarios and user experience changes\n- Include any configuration or setup changes needed\n- Mention compatibility and integration improvements\n- Call out any features that need specific testing attention"
138+
;;
139+
"production")
140+
system_prompt="You are an expert technical writer creating changelog entries for a production release of a SMART on FHIR Proxy application. Your audience includes business stakeholders, healthcare administrators, and end users who need meaningful business value information.\n\nGuidelines for PRODUCTION releases:\n- Focus on business value, user benefits, and real-world impact\n- Write in business-friendly language while maintaining technical accuracy\n- Emphasize healthcare workflow improvements and compliance benefits\n- Group by: 🚀 New Features, ⚡ Improvements, 🐛 Bug Fixes, 🔒 Security, 📋 Compliance\n- Highlight operational benefits, cost savings, or efficiency gains\n- Explain how changes improve patient care or administrative workflows\n- Use clear action verbs and quantify improvements where possible\n- Include any training or change management considerations\n- Highlight any breaking changes or important notices prominently"
141+
;;
142+
*)
143+
system_prompt="You are an expert technical writer creating changelog entries for a SMART on FHIR Proxy application. Focus on clear, professional communication of changes and their impact."
144+
;;
145+
esac
146+
131147
# Create JSON payload with proper escaping
132148
request_data=$(jq -n \
133149
--arg model "gpt-4o-mini" \
134-
--arg system_content "You are an expert technical writer creating changelog entries for a SMART on FHIR Proxy application. Your audience includes both technical developers and business stakeholders. Create a professional, well-organized changelog that clearly communicates value and impact.\n\nGuidelines:\n- Group changes by category: 🚀 New Features, ⚡ Improvements, 🐛 Bug Fixes, 🔧 Technical Updates, 🔒 Security\n- Write in business-friendly language while maintaining technical accuracy\n- Focus on user benefits and business value\n- Use active voice and clear action verbs\n- Keep each item concise but informative (1-2 lines max)\n- Avoid technical jargon when possible, explain complex concepts simply\n- Highlight any breaking changes or important notices" \
135-
--arg user_content "Create a professional changelog from these commit summaries for a SMART on FHIR Proxy application. Focus on the business value and user impact of each change:\n\n$all_comments" \
150+
--arg system_content "$system_prompt" \
151+
--arg user_content "Create a professional changelog from these commit summaries for a SMART on FHIR Proxy application (${{ inputs.release_type }} release). Focus on the appropriate level of detail for this release type:\n\n$all_comments" \
136152
'{
137153
"model": $model,
138154
"messages": [

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Maximilian Nussbaumer
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SMART on FHIR Platform
1+
# SMART on FHIR Proxy
22

33
A comprehensive healthcare application platform implementing the complete SMART App Launch Framework 2.2.0 specification with advanced administrative capabilities, AI-powered assistance, and enterprise-grade security.
44

@@ -10,7 +10,7 @@ A comprehensive healthcare application platform implementing the complete SMART
1010

1111
## 🏥 Overview
1212

13-
The SMART on FHIR Platform is a complete enterprise solution for managing healthcare applications, users, and FHIR servers in compliance with the SMART App Launch framework. It provides secure OAuth 2.0 flows, comprehensive user management, real-time monitoring, and an AI-powered administrative assistant.
13+
The SMART on FHIR Proxy is an Open Source solution for managing healthcare applications, users, and FHIR servers in compliance with the SMART App Launch framework. It provides secure OAuth 2.0 flows, comprehensive user management, real-time monitoring, and an AI-powered administrative assistant.
1414

1515
### Key Features
1616

@@ -256,7 +256,7 @@ Each branch automatically triggers appropriate CI/CD workflows with version mana
256256

257257
| Version | Milestone | Target Features |
258258
| ---------------- | ---------------------- | ----------------------------------------- |
259-
| **<0.1.0** | Early Development | Test deployment, incomplete documentation |
259+
| **<0.1.0** | Early Development | Test deployment, incomplete documentation |
260260
| **v0.1.0** | SMART 2.2.0 Compliance | Complete specification implementation |
261261
| **v0.9.0** | AI Enhancement | Advanced monitoring, predictive analytics |
262262
| **v1.0.0** | Production Ready | Enterprise deployment, full documentation |

backend/src/config.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,22 @@ export const config = {
2121
version: packageJson.version,
2222

2323
keycloak: {
24-
baseUrl: process.env.KEYCLOAK_BASE_URL || null,
25-
realm: process.env.KEYCLOAK_REALM || null,
26-
// Note: clientId and clientSecret no longer needed for admin API
27-
// We use the user's token directly
24+
// Dynamic getters that read from process.env for real-time updates
25+
get baseUrl() {
26+
return process.env.KEYCLOAK_BASE_URL || null
27+
},
28+
29+
get realm() {
30+
return process.env.KEYCLOAK_REALM || null
31+
},
32+
33+
get adminClientId() {
34+
return process.env.KEYCLOAK_ADMIN_CLIENT_ID || null
35+
},
36+
37+
get adminClientSecret() {
38+
return process.env.KEYCLOAK_ADMIN_CLIENT_SECRET || null
39+
},
2840

2941
// Check if Keycloak is configured
3042
get isConfigured() {

backend/src/init.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ export function isKeycloakAccessible(): boolean {
1515
/**
1616
* Check Keycloak connection health with retry logic
1717
*/
18-
export async function checkKeycloakConnection(): Promise<void> {
18+
export async function checkKeycloakConnection(retries?: number, interval?: number): Promise<void> {
1919
// Check if Keycloak is configured
2020
if (!config.keycloak.isConfigured || !config.keycloak.jwksUri) {
2121
throw new Error('Keycloak connection verification failed: Not configured')
2222
}
2323

24-
const maxRetries = 3;
25-
const retryInterval = 10000; // 10 seconds
24+
const maxRetries = retries ?? 3; // Default to 3 retries if not specified
25+
const retryInterval = interval ?? 5000; // Default to 5 seconds if not specified
2626

2727
for (let attempt = 1; attempt <= maxRetries; attempt++) {
2828
try {

backend/src/routes/admin/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { launchContextRoutes } from './launch-contexts'
66
import { identityProvidersRoutes } from './identity-providers'
77
import { smartConfigAdminRoutes } from './smart-config'
88
import { clientRegistrationSettingsRoutes } from './client-registration-settings'
9+
import { keycloakConfigRoutes } from './keycloak-config'
910

1011
/**
1112
* Admin routes aggregator - combines all admin functionality
@@ -23,3 +24,4 @@ export const adminRoutes = new Elysia({ prefix: '/admin' })
2324
.use(identityProvidersRoutes)
2425
.use(smartConfigAdminRoutes)
2526
.use(clientRegistrationSettingsRoutes)
27+
.use(keycloakConfigRoutes)

0 commit comments

Comments
 (0)