efelant efelant

SDKs

Hosts embed Efelant through packages. Core stays in PostgreSQL.

There is no Storybook. The visual catalog for tokens and component chrome is Styles. How to attach a conversation to a domain object: Embedding.

Inventory

Packages

packageimportwhat it is
@efelant/tokensCSS / JS / DartStyle Dictionary output
@efelant/clientTypeScriptfunction API over a transport
@efelant/client-jsESM / CJS / Efelant globalbundled @efelant/client
@efelant/components<efelant-*>Stencil custom elements
efelant_flutterDartwidgets + EfelantClient
./scripts/packages.sh              # tokens → clients → Stencil → Flutter
./scripts/packages.sh clients      # TypeScript + JavaScript only
./scripts/packages.sh components   # tokens, then Stencil + Flutter

Clients

TypeScript

import { EfelantClient, createGatewayTransport } from "@efelant/client";

const client = new EfelantClient({
  transport: createGatewayTransport("/ws"),
});
await client.resume(token);

Browsers cannot speak the PostgreSQL wire protocol. Use createGatewayTransport. createMemoryTransport() is the same function names in memory. createMemoryHub() is one store, many connections. The landing-page demo is an in-memory Alice and Bob pair. The Flutter app sets the live host in settings.

methodSQL
login / resume / logoutauth.login / auth.resume_session / auth.logout
listTenants / selectTenantauth.list_tenants / auth.select_tenant
openContextefelant.open_context
syncEvents / syncContextefelant.sync_events / efelant.sync_context_events
getConversations / sendMessagechat.get_conversations / chat.send_message

JavaScript bundle

@efelant/client-js is the same client: dist/efelant.esm.js, dist/efelant.cjs.js, dist/efelant.global.js.

<script type="module" src="@efelant/client-js/dist/efelant.esm.js"></script>

UI

Web components

Custom elements. They work from HTML, Vue, Angular, and Svelte. No React package ships from this repo. Set data-efelant-theme on a parent.

tagpropsevents
<efelant-conversation>tenant-id, conversation-id, context-type, external-id
<efelant-conversation-list>tenant-id
<efelant-context-feed>tenant-id, context-type, external-id
<efelant-composer>placeholder, disabledefelantSend
<efelant-status-event>status, message
<efelant-unread-badge>count
<efelant-conversation tenant-id="…" context-type="access_request" external-id="AR-123">
  <efelant-composer slot="composer" placeholder="Message…"></efelant-composer>
</efelant-conversation>

Stencil UI is not pixel-shared with Flutter. Shared contracts are event names, models, and generated tokens.

Flutter

The messenger in app/ depends on efelant_flutter. Host apps import the same widgets.

EfelantConversation(
  tenantId: tenantId,
  context: EfelantContext(
    type: 'access_request',
    externalId: accessRequestId,
  ),
)

Widgets: EfelantConversation, EfelantConversationList, EfelantContextFeed, EfelantComposer, EfelantStatusEvent, EfelantUnreadBadge. Theme: buildEfelantTheme(theme: EfelantThemeId.primary).

Other runtimes

REST and gRPC

Runtimes that cannot speak PostgreSQL use the extensions. See REST / gRPC.