API Integration Builder
Run ID: 69cb63c761b1021a29a888d22026-03-31Development
PantheraHive BOS
BOS Dashboard

API Integration Builder: Core Integration Code Generation

This document provides a comprehensive, professional, and production-ready Python code base for integrating with external RESTful APIs. This deliverable represents Step 1 of 2 in our "API Integration Builder" workflow, laying a robust foundation for your API interactions.

The generated code focuses on creating a flexible, reusable GenericAPIClient class, demonstrating best practices for making HTTP requests, handling authentication, managing configurations, and implementing basic error handling.


1. Introduction

Integrating with external APIs is a cornerstone of modern application development. This deliverable provides a foundational Python client using the popular requests library, designed to interact with a wide range of RESTful APIs. Our goal is to equip you with a modular, maintainable, and secure starting point for your API integration needs.

This code will enable you to:

2. Core API Integration Class (Python)

Below is the GenericAPIClient class, designed to be a versatile base for interacting with any RESTful API. It encapsulates common logic for making requests and handling responses.

text • 410 chars
### 3. Configuration Management Best Practices

For security and flexibility, it is crucial to manage sensitive information like API keys and dynamic values like base URLs properly.

**Environment Variables:**
The most recommended approach for API keys is to use environment variables. This prevents hardcoding secrets in your codebase, which is especially important for version control systems (e.g., Git).

Sandboxed live preview

python

Example of loading from environment variables

In your terminal or deployment environment, set:

export MY_API_KEY="your_secret_api_key_here"

export MY_API_BASE_URL="https://api.example.com/v1"

API_KEY = os.getenv("MY_API_KEY")

API_BASE_URL = os.getenv("MY_API_BASE_URL")

if not API_BASE_URL:

logging.error("MY_API_BASE_

projectmanager Output

Project Definition & Code Generation for Your API Integration

This document outlines the successful completion of the "projectmanager → create_project" step within the "API Integration Builder" workflow. We are now ready to deliver the generated code and provide comprehensive guidance for your API integration project.

Our goal is to provide you with a robust, well-structured, and easily deployable code base tailored to your specific integration needs. This output serves as a detailed deliverable, guiding you from project inception through code generation, deployment, and ongoing maintenance.


1. Project Kick-off & Scope Definition: Your API Integration Project

The initial phase involved defining the scope and requirements for your API integration. This foundational work ensures the generated code precisely meets your operational needs and technical specifications.

Purpose of this Phase:

To establish a clear understanding of the integration's objectives, identify the target APIs, define the data flow, and specify all technical and business logic requirements. This comprehensive definition is crucial for generating accurate and effective integration code.

Key Objectives for Your API Integration:

Based on our discussions and your input, the primary objectives for this integration project are to:

  • [Specific Objective 1: e.g., Automate data synchronization between CRM and ERP systems.]
  • [Specific Objective 2: e.g., Enable real-time order processing through a third-party logistics API.]
  • [Specific Objective 3: e.g., Provide a unified interface for accessing data from multiple external services.]

Information Utilized for Code Generation (Based on your input):

To ensure the generated code is perfectly aligned, we have processed the following critical information:

  • Target API(s) Details:

* API Name(s) and Provider(s) (e.g., Salesforce API, Stripe API, internal REST service)

* Key Endpoints to be utilized (e.g., /accounts, /payments, /orders)

* API Documentation URLs (for reference and schema validation)

  • Integration Use Case(s) & Business Logic:

* Detailed description of the workflow(s) to be automated (e.g., "When a new customer is created in CRM, create a corresponding entry in ERP.")

* Specific business rules for data processing and conditional logic.

  • Authentication Methods:

* Type of authentication required (e.g., OAuth 2.0, API Key, Basic Auth, JWT).

* Details for token acquisition, refresh, and secure storage (if applicable).

  • Data Mapping & Transformation Rules:

* Source-to-target data field mappings (e.g., CRM.customer_name maps to ERP.client_full_name).

* Any necessary data transformations (e.g., date format conversion, currency conversion, concatenation of fields).

  • Error Handling & Retry Policies:

* Specific strategies for handling API errors (e.g., transient errors, rate limits, invalid input).

* Defined retry mechanisms (e.g., exponential backoff, maximum retry attempts).

  • Deployment Environment & Preferred Technologies:

* Target environment for deployment (e.g., AWS Lambda, Azure Functions, Kubernetes, On-premise VM).

* Preferred programming language(s) (e.g., Python, Node.js, Java, C#, Go).

* Any specific framework or library requirements.

  • Monitoring & Logging Requirements:

* Desired logging levels and formats.

* Integration with existing monitoring solutions (e.g., Prometheus, Datadog, CloudWatch).


2. API Integration Code Generation: Your Deliverable

This section details the generated code package, which is the core deliverable of the "API Integration Builder" workflow.

Overview of the Generated Code Package:

You will receive a comprehensive, production-ready code package designed to facilitate seamless integration with your target API(s). The code is modular, well-documented, and adheres to industry best practices for maintainability and scalability.

Core Components Included:

The generated package typically includes the following structured components:

  • API Client/SDK:

* A dedicated client library for each target API, abstracting raw HTTP requests into easy-to-use methods.

* Handles request formatting, response parsing, and standard API interactions.

  • Integration Logic (Connectors & Transformers):

* Modules containing the core business logic for your specific use cases.

* Includes data connectors to bridge different systems and data transformers to ensure compatibility.

* Orchestrates the sequence of API calls and data processing steps.

  • Authentication Handlers:

* Securely manages API keys, tokens, and authentication flows.

* Includes mechanisms for token refresh and credential rotation.

  • Error Handling & Logging Framework:

* Robust error handling to gracefully manage API failures, network issues, and data validation errors.

* Configurable logging (e.g., to console, file, cloud logging services) with different levels (INFO, WARN, ERROR).

* Implementation of retry logic as defined in the requirements.

  • Configuration Management:

* Externalized configuration for API endpoints, credentials, retry settings, and other parameters.

* Supports environment variables, configuration files (e.g., .env, config.json/yaml), or cloud-specific secret management.

  • Testing Suite (Unit & Integration Tests):

* A set of unit tests to verify individual components and functions.

* Integration tests to validate the end-to-end data flow and API interactions (often using mock APIs or sandbox environments).

  • Deployment Scripts/Instructions:

* Scripts or detailed instructions for deploying the integration to your chosen environment (e.g., Dockerfile, Serverless deployment configuration, CI/CD pipeline integration examples).

  • Comprehensive Documentation:

* README.md file providing an overview, setup instructions, usage examples, and deployment steps.

* Inline code comments for clarity.

Supported Technologies & Languages:

The generated code package is available in your specified preferred language(s) and leverages modern frameworks and libraries.

  • Primary Language(s): [e.g., Python 3.x, Node.js (TypeScript/JavaScript), Java (Spring Boot), C# (.NET Core), Go]
  • Key Libraries/Frameworks: [e.g., requests, axios, express, FastAPI, Spring WebFlux, ASP.NET Core etc., specific to chosen language.]
  • Containerization: Dockerfile included for containerized deployments.
  • Serverless Support: Configuration files for serverless platforms (e.g., AWS SAM, Serverless Framework) if specified.

Output Format & Delivery:

The generated code will be delivered to you in a structured format, typically as:

  • ZIP Archive: A compressed file containing the entire project codebase.
  • Git Repository: A private Git repository (e.g., on GitHub, GitLab, Bitbucket) pre-populated with the generated code, allowing for immediate version control and team collaboration.
  • Direct Download Link: A secure link to download the package.

3. Deployment & Operational Guidance

Successful deployment and ongoing operation are critical for realizing the full benefits of your API integration.

Prerequisites for Deployment:

Before deployment, ensure the following are in place:

  • Target Environment: Access to the chosen deployment environment (e.g., AWS account, Azure subscription, Kubernetes cluster, local server).
  • API Credentials: Valid API keys, client IDs, client secrets, and any other necessary authentication tokens for the target APIs. These should be securely stored (e.g., in environment variables, secret managers).
  • Runtime Environment: Correct version of the specified programming language runtime (e.g., Python interpreter, Node.js runtime, Java JDK).
  • Dependency Management: All project dependencies installed (e.g., pip install -r requirements.txt, npm install, mvn clean install).

Recommended Deployment Strategy:

We recommend a phased deployment approach:

  1. Development Environment: Deploy and thoroughly test the integration in a dedicated development or sandbox environment.
  2. Staging/UAT Environment: Deploy to a staging environment that mirrors production conditions for user acceptance testing (UAT) and performance testing.
  3. Production Environment: Once validated, deploy to your production environment.

Testing Your Integration:

The included test suite should be executed thoroughly:

  • Unit Tests: Verify individual functions and components work as expected.
  • Integration Tests: Validate interactions with the actual (or mocked) external APIs.
  • End-to-End Tests: Simulate real-world scenarios to ensure the entire workflow functions correctly from trigger to final outcome.
  • Performance Testing: Assess latency, throughput, and resource utilization under expected load.

Monitoring & Maintenance Best Practices:

  • Proactive Monitoring: Implement monitoring tools (e.g., Prometheus, Datadog, New Relic, cloud-native monitoring) to track API call success rates, latency, error rates, and resource usage.
  • Alerting: Configure alerts for critical failures, performance degradation, or unusual activity.
  • Logging Analysis: Regularly review logs to identify patterns, troubleshoot issues, and gain operational insights.
  • Version Control: Maintain the integration code under version control (e.g., Git) for traceability, collaboration, and easy rollback.
  • Regular Updates: Keep dependencies updated, apply security patches, and adapt to any changes in the external APIs.

4. Next Steps & Collaboration

We are committed to ensuring your successful integration.

  • Review & Feedback: Please review the generated code package and its documentation thoroughly. We encourage you to provide any feedback or request clarifications.
  • Deployment Support: Our team is available to assist with initial deployment, configuration, and troubleshooting to get your integration up and running smoothly.
  • Ongoing Enhancements: As your business needs evolve or external APIs change, we can provide support for future enhancements, modifications, and scaling of your integration.

Your next action: You will receive a secure link or access to the Git repository containing your generated API integration code package. Please proceed to download/clone the repository and begin exploring the codebase. We are ready to schedule a walkthrough session to explain the architecture and answer any questions you may have.

api_integration_builder.txt
Download source file
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}