npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

aerosync-web-sdk

v2.2.0

Published

This WEB SDK provides an interface to load Aerosync-UI in javascript or typescript application. Securely link your bank account through your bank’s website. Log in with a fast, secure, and tokenized connection. Your information is never shared or sold.

Readme

Aerosync Web SDK

This Web SDK provides an interface to load Aerosync-UI in Javascript/typescript application. Securely link your bank account through your bank’s website. Log in with a fast, secure, and tokenized connection. Your information is never shared or sold.

Installation

npm i aerosync-web-sdk

Usage

1. Create the necessary HTML elements to trigger and host the AeroSync widget.

<!-- Button to launch the AeroSync widget -->
<!-- 'id' is optional but useful for CSS/JS targeting -->
<!-- Vue syntax, replace with onclick="openAerosyncWidget()" if using plain JS -->
<button
  id="openBank"
  class="button"
  role="button"
  @click="openAerosyncWidget()"
>
  Connect Bank
</button>

<!-- This div is where the AeroSync widget iframe will be embedded -->
<!-- Make sure the 'id' here matches the 'elementId' passed during initialization -->
<div id="widget"></div>
2. Import and Configure the AeroSync Widget

/**
 * Step-by-step integration of AeroSync AddBank widget
 */
import type {
  AerosyncWidget,
  WidgetSuccessPayload,
  WidgetEventType,
} from "aerosync-web-sdk";
import { initAeroSyncWidget } from "aerosync-web-sdk";

function openAerosyncWidget() {
  // Initialize the widget with configuration options
  let widgetControls = initAeroSyncWidget({
    elementId: "widget", //  ID of the target div in your HTML
    iframeTitle: "Connect", //  Used for accessibility
    environment: "production", //  Set to 'sandbox' for testing, 'production' for live
    token: "xxxx", //  Your secure AeroSync token
    aeroPassUserUuid: "xxxx", //  Your AeroPass User UUID
    theme: "light", //  Only 'light' or 'dark' are supported

    // Event listener for all widget events
    onEvent(event: WidgetEventType) {
      console.log("event", event);
    },

    // Fires when the widget is fully loaded
    onLoad() {
      console.log("onload");
    },

    // Called after the user successfully connects a bank and closes the widget
    onSuccess(event: WidgetSuccessPayload) {
      console.log("onSuccess", event);
      if ("accounts" in event) {
        // multi-account: event.accounts = [{ connectionId, accountType, accountNumberDisplay }]
      } else {
        // single account: event.connectionId
      }
      // Handle success (e.g., update UI, send data to backend, etc.)
    },

    // Fires when the widget is closed manually by the user
    onClose() {
      console.log("widget closed");
    },

    // Catch and handle widget errors
    onError(event: string) {
      console.log("onError", event);
    },
  });

  // Launch the widget
  widgetControls.launch();
}

Widget methods

initAeroSyncWidget(...) returns a controller with the following methods:

| Method | Description | | --- | --- | | launch() | Opens the widget. | | exit() | Closes the widget programmatically (removes the iframe / closes the popup) and fires onClose. | | toggleTheme(value) | Switches the theme at runtime. value must be 'light' or 'dark'. | | destroy() | Tears down the widget and removes its event listeners. Call this when your component unmounts (see Lifecycle & cleanup). |

widgetControls.launch();
widgetControls.toggleTheme("dark");
widgetControls.exit();
widgetControls.destroy();

Lifecycle & cleanup (React / Vue / SPA)

In single-page apps, always call destroy() when the host component unmounts. Otherwise the widget's message event listener (and any mounted iframe) leaks across navigations and re-mounts.

// React
useEffect(() => {
  const widget = initAeroSyncWidget({ /* ...config */ });
  widget.launch();
  return () => widget.destroy(); // cleanup on unmount
}, []);
// Vue
onUnmounted(() => {
  widgetControls?.destroy();
});

Configuration options

In addition to the required fields shown above (elementId, iframeTitle, environment, token, aeroPassUserUuid, and the on* callbacks), the following optional fields are supported:

| Option | Type | Description | | --- | --- | --- | | theme | 'light' \| 'dark' | Widget theme. Defaults to 'light'. | | style | { bgColor?, opacity?, width?, height? } | Visual overrides for the widget container, including custom width / height. | | embeddedBankView | { elementId, width?, height?, onEmbedded } | Renders the bank-selection list embedded in your page instead of in the modal. | | deeplink | string | Deep link into a specific step/flow of the widget. | | handleOAuthManually | boolean | Lets your app handle the OAuth redirect instead of the SDK. | | handleMFA | boolean | Enables manual handling of MFA flows. | | jobId | string | Resume / relink an existing job. | | connectionId | string | Resume / relink an existing connection. | | configurationId | string | Server-side configuration profile to apply. | | manualLinkOnly | boolean | Restricts the flow to manual (non-OAuth) linking only. | | targetDocument | ShadowRoot | Mounts the widget inside a Shadow DOM root instead of the main document. |

Event payloads

The on* callbacks receive typed payloads:

// onSuccess - fired after the user successfully links account(s).
// The payload is a union: single-account, or multi-account when the client
// has multi-account linking enabled. Narrow with `"accounts" in event`.
type WidgetSuccessPayload =
  | WidgetEventSuccessType
  | WidgetEventMultiAccountSuccessType;

// single account (AeroPass returning user + AeroPass link-new-bank)
interface WidgetEventSuccessType {
  connectionId: string;
  clientName: string;
  aeroPassUserUuid: string;
}

// multi-account (enable_multiple_account_linking)
interface WidgetEventMultiAccountSuccessType {
  accounts: {
    connectionId: string;
    accountType: string;
    accountNumberDisplay: string;
  }[];
  clientName: string;
  aeroPassUserUuid: string;
}

// onEvent - fired for general widget lifecycle events
interface WidgetEventType {
  type: string;
  payload: {
    pageTitle: string;
    onLoadApi: string;
  };
}

// onError receives an error message string
// onLoad and onClose receive no arguments

Readme.io document

For more information check the complete guide here: https://sync.dev.aero.inc/docs/npm-aeronetwork