Skip to content

Commit 549a098

Browse files
feat(audience): add debug logger and WebSDKConfig
- DebugLogger: opt-in console logging for events, flushes, consent changes, and warnings - WebSDKConfig: publishable key, environment, consent, debug, cookie domain, flush interval/size - Config constants: library name/version, log prefix, consent source, session event names Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7b06c8f commit 549a098

6 files changed

Lines changed: 36 additions & 34 deletions

File tree

packages/audience/sdk/src/config.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,19 @@
22
// Backend endpoints and base URLs come from @imtbl/audience-core.
33

44
export const LIBRARY_NAME = '@imtbl/audience-sdk';
5-
// Replaced at build time by esbuild replace plugin
5+
/** Replaced at build time by esbuild replace plugin. */
66
export const LIBRARY_VERSION = '__SDK_VERSION__';
7+
8+
/** Log prefix for console messages from this package. */
9+
export const LOG_PREFIX = '[audience-sdk]';
10+
11+
/** Default consent source when consentSource is not provided in config. */
12+
export const DEFAULT_CONSENT_SOURCE = 'WebSDK';
13+
14+
// --- Auto-tracked event names ---
15+
// These are fired by the SDK lifecycle, not by studio code.
16+
17+
/** Fired on init (or consent upgrade from none) when no active session cookie exists. */
18+
export const SESSION_START = 'session_start';
19+
/** Fired on explicit shutdown(). Not fired on tab close or consent revocation. */
20+
export const SESSION_END = 'session_end';

packages/audience/sdk/src/context.test.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

packages/audience/sdk/src/context.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

packages/audience/sdk/src/debug.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { Message } from '@imtbl/audience-core';
22
import { DebugLogger } from './debug';
3+
import { LOG_PREFIX } from './config';
34

45
describe('DebugLogger', () => {
56
let logSpy: jest.SpyInstance;
@@ -22,7 +23,7 @@ describe('DebugLogger', () => {
2223
anonymousId: 'anon-1',
2324
surface: 'web',
2425
context: { library: 'test', libraryVersion: '0.0.0' },
25-
event: 'click',
26+
eventName: 'click',
2627
properties: {},
2728
};
2829

@@ -42,7 +43,7 @@ describe('DebugLogger', () => {
4243
logger.logEvent('track', stubMessage);
4344

4445
expect(logSpy).toHaveBeenCalledWith(
45-
'[Immutable Audience] track',
46+
`${LOG_PREFIX} track`,
4647
stubMessage,
4748
);
4849
});
@@ -52,12 +53,12 @@ describe('DebugLogger', () => {
5253

5354
logger.logFlush(true, 5);
5455
expect(logSpy).toHaveBeenCalledWith(
55-
'[Immutable Audience] flush ok (5 messages)',
56+
`${LOG_PREFIX} flush ok (5 messages)`,
5657
);
5758

5859
logger.logFlush(false, 3);
5960
expect(logSpy).toHaveBeenCalledWith(
60-
'[Immutable Audience] flush failed (3 messages)',
61+
`${LOG_PREFIX} flush failed (3 messages)`,
6162
);
6263
});
6364

@@ -66,7 +67,7 @@ describe('DebugLogger', () => {
6667
logger.logConsent('none', 'full');
6768

6869
expect(logSpy).toHaveBeenCalledWith(
69-
'[Immutable Audience] consent none full',
70+
`${LOG_PREFIX} consent none \u2192 full`,
7071
);
7172
});
7273

@@ -75,7 +76,7 @@ describe('DebugLogger', () => {
7576
logger.logWarning('something went wrong');
7677

7778
expect(warnSpy).toHaveBeenCalledWith(
78-
'[Immutable Audience] something went wrong',
79+
`${LOG_PREFIX} something went wrong`,
7980
);
8081
});
8182
});

packages/audience/sdk/src/debug.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { ConsentLevel, Message } from '@imtbl/audience-core';
2-
3-
const PREFIX = '[Immutable Audience]';
2+
import { LOG_PREFIX } from './config';
43

54
export class DebugLogger {
65
private enabled: boolean;
@@ -12,24 +11,24 @@ export class DebugLogger {
1211
logEvent(method: string, message: Message): void {
1312
if (!this.enabled) return;
1413
// eslint-disable-next-line no-console
15-
console.log(`${PREFIX} ${method}`, message);
14+
console.log(`${LOG_PREFIX} ${method}`, message);
1615
}
1716

1817
logFlush(ok: boolean, count: number): void {
1918
if (!this.enabled) return;
2019
// eslint-disable-next-line no-console
21-
console.log(`${PREFIX} flush ${ok ? 'ok' : 'failed'} (${count} messages)`);
20+
console.log(`${LOG_PREFIX} flush ${ok ? 'ok' : 'failed'} (${count} messages)`);
2221
}
2322

2423
logConsent(from: ConsentLevel, to: ConsentLevel): void {
2524
if (!this.enabled) return;
2625
// eslint-disable-next-line no-console
27-
console.log(`${PREFIX} consent ${from}${to}`);
26+
console.log(`${LOG_PREFIX} consent ${from}${to}`);
2827
}
2928

3029
logWarning(msg: string): void {
3130
if (!this.enabled) return;
3231
// eslint-disable-next-line no-console
33-
console.warn(`${PREFIX} ${msg}`);
32+
console.warn(`${LOG_PREFIX} ${msg}`);
3433
}
3534
}

packages/audience/sdk/src/types.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import type { Environment, ConsentLevel } from '@imtbl/audience-core';
22

3-
/** Configuration for the Immutable Audience SDK. */
4-
export interface AudienceSDKConfig {
3+
/** Configuration for the Immutable Web SDK. */
4+
export interface WebSDKConfig {
5+
/** Publishable API key from Immutable Hub (pk_imtbl_...). */
56
publishableKey: string;
7+
/** Target environment — controls which backend receives events. */
68
environment: Environment;
7-
/** Defaults to 'none' no tracking until explicitly opted in. */
9+
/** Initial consent level. Defaults to 'none' (no tracking until opted in). */
810
consent?: ConsentLevel;
11+
/** Enable console logging of all events, flushes, and consent changes. */
912
debug?: boolean;
13+
/** Cookie domain for cross-subdomain sharing (e.g. '.studio.com'). */
1014
cookieDomain?: string;
15+
/** Queue flush interval in milliseconds. Defaults to 5000. */
1116
flushInterval?: number;
17+
/** Number of queued messages that triggers an automatic flush. Defaults to 20. */
1218
flushSize?: number;
1319
}

0 commit comments

Comments
 (0)