CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-ionic-native

Native plugin wrappers for Cordova and Ionic with TypeScript, ES6+, Promise and Observable support

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

network-communication.mddocs/

Network & Communication

HTTP requests, network status monitoring, and in-app browser functionality for connected applications and web-based interactions.

Capabilities

HTTP Client

Advanced HTTP client for making secure requests with custom headers, authentication, and SSL configuration.

/**
 * HTTP response interface
 */
interface HTTPResponse {
  /** HTTP status code */
  status: number;
  /** Response data (parsed JSON if applicable) */
  data?: any;
  /** Response headers */
  headers: any;
  /** Request URL */
  url: string;
}

/**
 * HTTP class for making network requests
 */
class HTTP {
  /**
   * Set basic authentication credentials
   * @param username Basic auth username
   * @param password Basic auth password
   */
  static useBasicAuth(username: string, password: string): void;

  /**
   * Set global request header
   * @param header Header name
   * @param value Header value
   */
  static setHeader(header: string, value: string): void;

  /**
   * Enable or disable SSL pinning
   * @param enable Whether to enable SSL pinning
   */
  static enableSSLPinning(enable: boolean): void;

  /**
   * Accept all SSL certificates (disable validation)
   * @param allow Whether to accept all certificates
   */
  static acceptAllCerts(allow: boolean): void;

  /**
   * Validate domain name in SSL certificate
   * @param validate Whether to validate domain name
   */
  static validateDomainName(validate: boolean): void;

  /**
   * Make GET request
   * @param url Request URL
   * @param parameters URL parameters
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static get(url: string, parameters: any, headers: any): Promise<HTTPResponse>;

  /**
   * Make POST request
   * @param url Request URL
   * @param body Request body
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static post(url: string, body: any, headers: any): Promise<HTTPResponse>;

  /**
   * Make PUT request
   * @param url Request URL
   * @param body Request body
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static put(url: string, body: any, headers: any): Promise<HTTPResponse>;

  /**
   * Make PATCH request
   * @param url Request URL
   * @param body Request body
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static patch(url: string, body: any, headers: any): Promise<HTTPResponse>;

  /**
   * Make DELETE request
   * @param url Request URL
   * @param parameters URL parameters
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static delete(url: string, parameters: any, headers: any): Promise<HTTPResponse>;

  /**
   * Make HEAD request
   * @param url Request URL
   * @param parameters URL parameters
   * @param headers Request headers
   * @returns Promise resolving to HTTPResponse
   */
  static head(url: string, parameters: any, headers: any): Promise<HTTPResponse>;

  /**
   * Upload file via HTTP
   * @param url Upload URL
   * @param body Additional form data
   * @param headers Request headers
   * @param filePath Local file path to upload
   * @param name Form field name for file
   * @returns Promise resolving to upload response
   */
  static uploadFile(url: string, body: any, headers: any, filePath: string, name: string): Promise<any>;

  /**
   * Download file via HTTP
   * @param url Download URL
   * @param body Request body
   * @param headers Request headers
   * @param filePath Local file path to save to
   * @returns Promise resolving to download result
   */
  static downloadFile(url: string, body: any, headers: any, filePath: string): Promise<any>;
}

Usage Examples:

import { HTTP } from 'ionic-native';

// Configure HTTP client
function configureHTTP() {
  // Set global headers
  HTTP.setHeader('Content-Type', 'application/json');
  HTTP.setHeader('User-Agent', 'MyApp/1.0');
  
  // Configure SSL settings
  HTTP.enableSSLPinning(false);
  HTTP.acceptAllCerts(true);
  HTTP.validateDomainName(true);
}

// GET request with parameters
async function fetchUser(userId: string) {
  try {
    const response = await HTTP.get(
      'https://api.example.com/users',
      { id: userId },
      { 'Authorization': 'Bearer your-token' }
    );
    
    console.log('User data:', response.data);
    return response.data;
  } catch (error) {
    console.error('Failed to fetch user:', error);
    throw error;
  }
}

// POST request with JSON body
async function createUser(userData: any) {
  try {
    const response = await HTTP.post(
      'https://api.example.com/users',
      userData,
      {
        'Authorization': 'Bearer your-token',
        'Content-Type': 'application/json'
      }
    );
    
    if (response.status === 201) {
      console.log('User created:', response.data);
      return response.data;
    }
  } catch (error) {
    console.error('Failed to create user:', error);
    throw error;
  }
}

// File upload with progress monitoring
async function uploadProfileImage(filePath: string, userId: string) {
  try {
    const result = await HTTP.uploadFile(
      'https://api.example.com/users/avatar',
      { userId },
      { 'Authorization': 'Bearer your-token' },
      filePath,
      'avatar'
    );
    
    console.log('Image uploaded successfully:', result);
    return result;
  } catch (error) {
    console.error('Failed to upload image:', error);
    throw error;
  }
}

// File download
async function downloadDocument(documentId: string, localPath: string) {
  try {
    await HTTP.downloadFile(
      `https://api.example.com/documents/${documentId}/download`,
      {},
      { 'Authorization': 'Bearer your-token' },
      localPath
    );
    
    console.log('Document downloaded to:', localPath);
  } catch (error) {
    console.error('Failed to download document:', error);
    throw error;
  }
}

// Authentication with basic auth
async function authenticateUser(username: string, password: string) {
  HTTP.useBasicAuth(username, password);
  
  try {
    const response = await HTTP.post(
      'https://api.example.com/auth/login',
      {},
      {}
    );
    
    return response.data.token;
  } catch (error) {
    console.error('Authentication failed:', error);
    throw error;
  }
}

Network Information

Monitor network connection status and connection type for handling offline scenarios.

/**
 * Network class for monitoring connection status
 */
class Network {
  /** Current connection type (wifi, cellular, ethernet, none, etc.) */
  static type: string;
  
  /** Maximum downlink speed in Mbps */
  static downlinkMax: number;

  /**
   * Observable for network connection events
   * @returns Observable emitting connection events
   */
  static onConnect(): Observable<any>;

  /**
   * Observable for network disconnection events
   * @returns Observable emitting disconnection events
   */
  static onDisconnect(): Observable<any>;
}

/**
 * Connection type constants
 */
interface Connection {
  /** Unknown connection */
  UNKNOWN: 'unknown';
  /** Ethernet connection */
  ETHERNET: 'ethernet';
  /** WiFi connection */
  WIFI: 'wifi';
  /** 2G cellular connection */
  CELL_2G: '2g';
  /** 3G cellular connection */
  CELL_3G: '3g';
  /** 4G cellular connection */
  CELL_4G: '4g';
  /** Cellular connection */
  CELL: 'cellular';
  /** No network connection */
  NONE: 'none';
}

Usage Examples:

import { Network } from 'ionic-native';

// Check current network status
function checkNetworkStatus() {
  console.log('Connection type:', Network.type);
  console.log('Downlink max:', Network.downlinkMax);
  
  switch (Network.type) {
    case 'wifi':
      console.log('Connected to WiFi');
      break;
    case 'cellular':
      console.log('Connected to cellular network');
      break;
    case 'none':
      console.log('No network connection');
      break;
    default:
      console.log('Connection type:', Network.type);
  }
}

// Monitor network changes
function setupNetworkMonitoring() {
  // Listen for connection events
  Network.onConnect().subscribe(() => {
    console.log('Network connected');
    console.log('New connection type:', Network.type);
    
    // Sync offline data when reconnected
    syncOfflineData();
  });
  
  // Listen for disconnection events
  Network.onDisconnect().subscribe(() => {
    console.log('Network disconnected');
    
    // Switch to offline mode
    handleOfflineMode();
  });
}

// Handle offline functionality
function handleOfflineMode() {
  console.log('Switching to offline mode');
  
  // Show offline indicator
  showOfflineIndicator();
  
  // Queue operations for later sync
  enableOfflineQueue();
}

// Sync data when coming back online
async function syncOfflineData() {
  console.log('Syncing offline data');
  
  try {
    // Upload queued operations
    await uploadQueuedOperations();
    
    // Download latest data
    await downloadLatestData();
    
    console.log('Sync completed');
    hideOfflineIndicator();
  } catch (error) {
    console.error('Sync failed:', error);
  }
}

// Network-aware API calls
async function makeNetworkAwareRequest(url: string, data: any) {
  if (Network.type === 'none') {
    // Queue for later when network is available
    queueForLaterSync(url, data);
    return Promise.reject(new Error('No network connection'));
  }
  
  try {
    // Make request based on connection type
    if (Network.type === 'wifi') {
      // Full quality for WiFi
      return await makeRequest(url, data, { quality: 'high' });
    } else if (Network.type.includes('cellular')) {
      // Reduced quality for cellular
      return await makeRequest(url, data, { quality: 'medium' });
    }
  } catch (error) {
    // Queue for retry on network error
    queueForLaterSync(url, data);
    throw error;
  }
}

In-App Browser

Open web content within the app with full browser functionality and communication between app and web content.

/**
 * In-App Browser event
 */
interface InAppBrowserEvent {
  /** Event type (loadstart, loadstop, loaderror, exit) */
  type: string;
  /** Event URL */
  url: string;
  /** Error code (for loaderror events) */
  code?: number;
  /** Error message (for loaderror events) */
  message?: string;
}

/**
 * In-App Browser configuration options
 */
interface InAppBrowserOptions {
  /** Location bar visibility (yes/no) */
  location?: 'yes' | 'no';
  /** Hidden browser (yes/no) */
  hidden?: 'yes' | 'no';
  /** Clear browser cache (yes/no) */
  clearcache?: 'yes' | 'no';
  /** Clear session cache (yes/no) */
  clearsessioncache?: 'yes' | 'no';
  /** Zoom controls (yes/no) */
  zoom?: 'yes' | 'no';
  /** Hardware back button (yes/no) */
  hardwareback?: 'yes' | 'no';
  /** Media playback requires user action (yes/no) */
  mediaPlaybackRequiresUserAction?: 'yes' | 'no';
  /** Should pause on suspend (yes/no) */
  shouldPauseOnSuspend?: 'yes' | 'no';
  /** User agent string */
  useragent?: string;
  /** Close button caption */
  closebuttoncaption?: string;
  /** Close button color */
  closebuttoncolor?: string;
  /** Left-to-right layout (yes/no) */
  lefttoright?: 'yes' | 'no';
  /** Toolbar visibility (yes/no) */
  toolbar?: 'yes' | 'no';
  /** Navigation buttons visibility (yes/no) */
  navigationbuttoncolor?: string;
  /** Toolbar color */
  toolbarcolor?: string;
  /** Toolbar translucency (yes/no) */
  toolbartranslucent?: 'yes' | 'no';
  /** Toolbar position (top/bottom) */
  toolbarposition?: 'top' | 'bottom';
  /** Footer visibility (yes/no) */
  footer?: 'yes' | 'no';
  /** Footer color */
  footercolor?: string;
  /** Presentation style (pagesheet/formsheet/fullscreen) */
  presentationstyle?: 'pagesheet' | 'formsheet' | 'fullscreen';
  /** Transition style (fliphorizontal/crossdissolve/coververtical) */
  transitionstyle?: 'fliphorizontal' | 'crossdissolve' | 'coververtical';
}

/**
 * In-App Browser object for controlling browser instance
 */
interface InAppBrowserObject {
  /**
   * Show the browser (if hidden)
   */
  show(): void;

  /**
   * Close the browser
   */
  close(): void;

  /**
   * Hide the browser
   */
  hide(): void;

  /**
   * Execute JavaScript in the browser context
   * @param script Script object with code or file
   * @returns Promise resolving to script result
   */
  executeScript(script: { code?: string; file?: string; }): Promise<any>;

  /**
   * Insert CSS into the browser
   * @param css CSS object with code or file
   * @returns Promise indicating insertion completion
   */
  insertCSS(css: { code?: string; file?: string; }): Promise<any>;

  /**
   * Subscribe to browser events
   * @param event Event name (loadstart, loadstop, loaderror, exit)
   * @returns Observable emitting InAppBrowserEvent objects
   */
  on(event: string): Observable<InAppBrowserEvent>;
}

/**
 * InAppBrowser class for opening web content
 */
class InAppBrowser {
  /**
   * Open URL in in-app browser
   * @param url URL to open
   * @param target Target (_blank, _self, _system)
   * @param options Browser configuration options
   * @returns InAppBrowserObject instance
   */
  static create(url: string, target?: string, options?: string | InAppBrowserOptions): InAppBrowserObject;
}

Usage Examples:

import { InAppBrowser, InAppBrowserObject, InAppBrowserOptions } from 'ionic-native';

// Open web page with custom options
function openWebPage(url: string) {
  const options: InAppBrowserOptions = {
    location: 'yes',
    hidden: 'no',
    clearcache: 'yes',
    clearsessioncache: 'yes',
    zoom: 'yes',
    hardwareback: 'yes',
    mediaPlaybackRequiresUserAction: 'no',
    shouldPauseOnSuspend: 'no',
    closebuttoncaption: 'Close',
    closebuttoncolor: '#0000ff',
    toolbar: 'yes',
    toolbarcolor: '#f0f0f0',
    toolbarposition: 'top'
  };

  const browser = InAppBrowser.create(url, '_blank', options);
  
  // Handle browser events
  browser.on('loadstart').subscribe(event => {
    console.log('Loading started:', event.url);
  });
  
  browser.on('loadstop').subscribe(event => {
    console.log('Loading finished:', event.url);
    
    // Inject custom CSS
    browser.insertCSS({
      code: `
        body { 
          background-color: #f5f5f5; 
          font-family: Arial, sans-serif; 
        }
      `
    });
    
    // Execute custom JavaScript
    browser.executeScript({
      code: `
        document.addEventListener('DOMContentLoaded', function() {
          console.log('Page loaded in InAppBrowser');
        });
      `
    });
  });
  
  browser.on('loaderror').subscribe(event => {
    console.error('Loading error:', event.message);
  });
  
  browser.on('exit').subscribe(event => {
    console.log('Browser closed');
  });

  return browser;
}

// Open payment gateway
function openPaymentGateway(paymentUrl: string, amount: number) {
  const options: InAppBrowserOptions = {
    location: 'no',
    toolbar: 'no',
    zoom: 'no',
    hardwareback: 'no',
    clearcache: 'yes',
    clearsessioncache: 'yes'
  };

  const browser = InAppBrowser.create(paymentUrl, '_blank', options);
  
  return new Promise((resolve, reject) => {
    browser.on('loadstop').subscribe(event => {
      // Check if payment is completed
      browser.executeScript({
        code: 'window.location.href'
      }).then(result => {
        const currentUrl = result[0];
        
        if (currentUrl.includes('payment-success')) {
          browser.close();
          resolve({ success: true, amount });
        } else if (currentUrl.includes('payment-failed')) {
          browser.close();
          reject(new Error('Payment failed'));
        }
      });
    });
    
    browser.on('exit').subscribe(() => {
      reject(new Error('Payment cancelled'));
    });
  });
}

// Social login with OAuth
function socialLogin(provider: string) {
  const authUrl = `https://auth.example.com/oauth/${provider}`;
  const redirectUrl = 'https://myapp.com/auth/callback';
  
  const options: InAppBrowserOptions = {
    location: 'yes',
    clearcache: 'yes',
    toolbar: 'yes',
    closebuttoncaption: 'Cancel'
  };

  const browser = InAppBrowser.create(authUrl, '_blank', options);
  
  return new Promise((resolve, reject) => {
    browser.on('loadstart').subscribe(event => {
      if (event.url.startsWith(redirectUrl)) {
        // Parse OAuth callback URL
        const url = new URL(event.url);
        const code = url.searchParams.get('code');
        const error = url.searchParams.get('error');
        
        browser.close();
        
        if (code) {
          resolve({ code, provider });
        } else if (error) {
          reject(new Error(`OAuth error: ${error}`));
        }
      }
    });
    
    browser.on('exit').subscribe(() => {
      reject(new Error('Login cancelled'));
    });
  });
}

// Help and documentation viewer
function openHelpDocs(section?: string) {
  const baseUrl = 'https://docs.myapp.com';
  const url = section ? `${baseUrl}/${section}` : baseUrl;
  
  const options: InAppBrowserOptions = {
    location: 'no',
    toolbar: 'yes',
    toolbarcolor: '#2196F3',
    toolbarposition: 'top',
    closebuttoncaption: 'Done',
    zoom: 'yes',
    hardwareback: 'yes'
  };

  const browser = InAppBrowser.create(url, '_blank', options);
  
  // Add custom navigation
  browser.on('loadstop').subscribe(() => {
    browser.executeScript({
      code: `
        // Add back to app button
        const backButton = document.createElement('button');
        backButton.innerText = 'Back to App';
        backButton.style.position = 'fixed';
        backButton.style.top = '10px';
        backButton.style.right = '10px';
        backButton.style.zIndex = '9999';
        backButton.onclick = function() {
          window.location.href = 'close://';
        };
        document.body.appendChild(backButton);
      `
    });
  });
  
  browser.on('loadstart').subscribe(event => {
    if (event.url === 'close://') {
      browser.close();
    }
  });
  
  return browser;
}

docs

analytics-monetization.md

camera-media.md

device-sensors.md

device-system.md

index.md

input-hardware.md

location-maps.md

network-communication.md

notifications-ui.md

security-auth.md

social-sharing.md

storage-files.md

tile.json