AddonPortfor FACEIT

Add a FACEIT install button.

Use one script tag or a framework wrapper. AddonPort opens FACEIT, reports the result, and needs no backend, custom package, or catalog listing from the extension owner.

01

Choose an integration

Replace the example with the extension's 32-character Chrome Web Store ID.

HTML
<script
  src="https://addonport.dev/sdk/v0.1.0-beta.3/addonport-button.js"
  integrity="sha384-S44QavU5ux+H2a0FXQRmS7dCTSLCGQf0OnAPrBshmuUV8VHZBkUDEjmGHX5nJIiW"
  crossorigin="anonymous"
  defer
></script>

<addonport-install-button
  target="abcdefghijklmnopabcdefghijklmnop"
  label="Install for FACEIT"
></addonport-install-button>

Hosted sessions are the default. The button creates one short-lived request, opens FACEIT, and reports confirmation or rejection to the page. The public service stores no account or long-lived device identity.

If Connect is unavailable or no compatible client claims the session, the button emits addonport-error and opens a direct install handoff. Set mode="direct" to always skip Connect.

02

Button API

Attributes configure behavior; CSS properties and parts control appearance.

Attributes

target
Required. Chrome Web Store extension ID or AddonPort catalog slug.
label
Optional idle label. Defaults to "Install with AddonPort".
disabled
Optional boolean attribute that disables interaction.
mode
Optional. Defaults to "session"; use "direct" to skip Connect.
api-base-url
Advanced. Browser-side override for an adapter deployment pinned to the same origin.

Styling

--addonport-accent
Accent, focus, and status color.
--addonport-bg
Button background color.
--addonport-fg
Text and icon color.
::part(button | icon | label)
Shadow parts for site-specific styling beyond the color properties.
03

Events and data

Every event bubbles through Shadow DOM and exposes its payload in event.detail.

Web component events

addonport-open
Direct and session modes. Returns mode, validated intent, and deepLink.
addonport-status
Session mode. Returns the latest SessionSnapshot while polling.
addonport-complete
Session mode. Returns the completed SessionSnapshot.
addonport-error
Returns a session or handoff error; a direct fallback may follow.

Framework callbacks

React
onOpen, onStatus, onComplete, and onError receive the payload directly.
Vue
@open, @status, @complete, and @error receive the emitted payload directly.
TypeScript payloads
type AddonPortOpenDetail = {
  mode: "direct" | "session";
  intent: { action: "install"; target: string };
  deepLink: string;
};

type SessionSnapshot = {
  protocolVersion: 2;
  sessionId: string;
  state: "created" | "client_opened" | "awaiting_confirmation" |
    "completed" | "rejected" | "failed" | "expired";
  intent: AddonPortOpenDetail["intent"];
  createdAt: string;
  updatedAt: string;
  expiresAt: string;
  client?: { adapter?: string; version?: string; platform?: string };
  result?: { installedVersion?: string; message?: string };
  error?: { code: string; message: string };
};

type AddonPortButtonEventMap = {
  "addonport-open": AddonPortOpenDetail;
  "addonport-status": SessionSnapshot;
  "addonport-complete": SessionSnapshot;
  "addonport-error": unknown;
};

addonport-open is a handoff signal, not installation proof. Only addonport-complete reports completion. Session results are UX signals rather than authentication or device attestation.

04

Direct protocol

Use links directly when the page does not need installation status.

HTML link
<a href="addonport://install/abcdefghijklmnopabcdefghijklmnop">
  Install for FACEIT with AddonPort
</a>
<p>Didn't open? <a href="https://addonport.dev/">Get AddonPort</a></p>
addonport://install/<id>
Review and install a catalog slug or Chrome extension ID.
addonport://launch/<id>
Open the action for an installed extension.
addonport://open
Open the in-client manager.
Complete protocol contract
05

Session lifecycle

The hosted service connects the page to one native confirmation flow.

The SDK prepares a five-minute request, opens its signed handoff, and polls through created, client opened, confirmation, and terminal states. Claim and polling tokens are separate and never belong in page URLs or analytics.

The public endpoint accepts HTTPS extension sites. Session creation is rate limited and no cookies, account, or persistent socket are required. A custom api-base-url works only when the native adapter is independently pinned to that same private origin. The public FACEIT adapter does not accept arbitrary service origins from websites.

Session client
import { AddonPortClient } from "@addonport/sdk";

const client = new AddonPortClient({
  client: { name: "extension-site", version: "1.0.0" },
});

const result = await client.run({
  action: "install",
  target: "abcdefghijklmnopabcdefghijklmnop",
});
SDK repository
06

Native Windows apps

Read the current-user registry key without launching FACEIT.

Windows Registry
HKCU\Software\AddonPort\FACEIT
  DisplayVersion    REG_SZ  <adapter version>
  InstallLocation   REG_SZ  <payload directory>
  Protocol          REG_SZ  addonport
  ProtocolVersion   REG_SZ  2

Compare ProtocolVersion before relying on newer link actions. Browser pages cannot read this key and should keep the direct-link fallback.

There is no public self-service catalog submission yet. Catalog metadata is optional for direct installation.