Type definitions and helpers for Nowly presences.
npm install @nowly/sdkZero dependencies.
Presence and Assets are globals injected by the extension at runtime - no import needed.
const settings = Presence.Settings({
"show-details": {
type: "boolean",
default: true,
label: { "en-US": "Show details" },
description: { "en-US": "Display page details on Discord" },
},
})
const presence = new Presence(settings)
presence.on("UpdateData", (ctx) => {
presence.setActivity({
details: "Browsing",
state: "Some page",
largeImageKey: Assets.Logo,
type: PresenceType.Watching,
})
})Language packs are optional. A presence that uses them can infer its string keys directly
from locales/en-US.json, without generating TypeScript files:
import type enUS from "./locales/en-US.json"
const presence = new Presence()
presence.on("UpdateData", async () => {
const locale = await presence.getStrings<typeof enUS>()
await presence.setActivity({
details: presence.formatString(locale.watchingVideo, { title: "My video" }),
})
})The type-only import is removed from the bundle. It gives editors autocomplete for every
key declared in en-US.json and makes unknown keys a TypeScript error. Presences without
language packs can continue using inline strings and do not need to call getStrings().
Use {name} placeholders in locale values and formatString(template, params) to inject
dynamic values. Unknown placeholders are left unchanged.
import { createMediaTimestamps, PresenceType } from "@nowly/sdk"
import type { PresenceData } from "@nowly/sdk"
createMediaTimestamps(videoElement)
// => { startTimestamp: number, endTimestamp: number } | {}| Export | Kind | Description |
|---|---|---|
PresenceData |
type | Activity data sent to Discord |
PresenceType |
const | { Playing: 0, Streaming: 1, Listening: 2, Watching: 3, Competing: 5 } |
PresenceTypeValue |
type | 0 | 1 | 2 | 3 | 5 |
PresenceButton |
type | { label: string, url: string } |
PresenceSetting |
type | Boolean, Input, Select, or Slider setting |
InferSettings |
type | Infers the settings object shape from definitions |
LocaleString |
type | Partial<Record<string, string>> |
UpdateDataContext |
type | Context received in UpdateData listener |
PresenceInstance |
type | Runtime presence instance interface |
PresenceConstructor |
type | Presence class interface |
PresenceAssets |
type | { Logo, Icon, Thumbnail } |
createMediaTimestamps() |
fn | Compute start/end timestamps from media elements |
createImageProxyUrl() |
fn | Build direct image proxy URL |
createImageProxyPath() |
fn | Build image proxy URL from parts |
createCachedImageProxyUrl() |
fn | Build cached image proxy URL (async) |
Metadata (including optional discordNative) is exported from @nowly/sdk/metadata, not the main entry.