@salesforce/platform-sdk 9.11.0 → 9.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics/analytics.d.ts +14 -1
- package/dist/analytics/analytics.d.ts.map +1 -1
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/pft.d.ts +40 -0
- package/dist/analytics/pft.d.ts.map +1 -0
- package/dist/analytics/types.d.ts +27 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +387 -368
- package/package.json +1 -1
|
@@ -5,16 +5,29 @@ import { Analytics, AnalyticsOptions } from './types';
|
|
|
5
5
|
* Handles all setup internally:
|
|
6
6
|
* - Creates a ChatSDK instance via getChatSDK() (unless one is provided)
|
|
7
7
|
* - Calls registerInstrumentedApp() with appPayloadProvider pre-wired
|
|
8
|
-
* to attach appId and
|
|
8
|
+
* to attach appId, surface, and (when set) pftId to every o11y log entry
|
|
9
9
|
* - Wraps the ChatSDK in a Proxy for auto-instrumentation
|
|
10
10
|
* - Sets up global error listeners (window.onerror, unhandledrejection)
|
|
11
11
|
* - Tracks session duration from init to dispose()
|
|
12
12
|
*
|
|
13
|
+
* The PFT Id is late-bound via a closure-captured ref read on every payload
|
|
14
|
+
* emission, so {@link Analytics.setPftId} updates are reflected in subsequent
|
|
15
|
+
* events without re-registering the app.
|
|
16
|
+
*
|
|
13
17
|
* @example
|
|
14
18
|
* ```typescript
|
|
15
19
|
* import { createAnalytics } from '../analytics';
|
|
16
20
|
*
|
|
21
|
+
* // Static widget — PFT known at init time
|
|
22
|
+
* const analytics = await createAnalytics({
|
|
23
|
+
* appId: 'my-app',
|
|
24
|
+
* pftId: 'aJCEE000000FgYP4A0',
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Multi-customer widget — refresh per tool-call as new tools advertise
|
|
28
|
+
* // their PFT Id via _meta["sfdc.pftId"] on CallToolResult
|
|
17
29
|
* const analytics = await createAnalytics({ appId: 'my-app' });
|
|
30
|
+
* analytics.setPftId('aJCEE000000FgYP4A0');
|
|
18
31
|
* ```
|
|
19
32
|
*/
|
|
20
33
|
export declare function createAnalytics(options: AnalyticsOptions): Promise<Analytics>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA0GnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAM3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Reserved key on `CallToolResult._meta` used by tool authors to advertise
|
|
8
|
+
* the PFT Id their tool should be attributed to. Namespaced to avoid collision
|
|
9
|
+
* with other `_meta` consumers.
|
|
10
|
+
*/
|
|
11
|
+
export declare const PFT_META_KEY = "sfdc.pftId";
|
|
12
|
+
/**
|
|
13
|
+
* Validates a PFT Id at the SDK boundary.
|
|
14
|
+
*
|
|
15
|
+
* - Returns `true` only for well-formed Salesforce PF Ids matching
|
|
16
|
+
* `^aJC[0-9A-Za-z]{12}(?:[0-9A-Za-z]{3})?$` (15- or 18-character).
|
|
17
|
+
* - Rejects `null`, `undefined`, non-strings, empty / whitespace-only strings,
|
|
18
|
+
* any KeyPrefix other than `aJC` (PFE Ids, account/contact/user/etc.), and
|
|
19
|
+
* anything else that isn't a clean PF Id. Whitespace-padded inputs
|
|
20
|
+
* (`" aJC... "`) are rejected — callers must pass clean values; the SDK
|
|
21
|
+
* does not silently rehabilitate inputs that would otherwise flow into the
|
|
22
|
+
* wire payload and break PDP-dashboard aggregation.
|
|
23
|
+
*
|
|
24
|
+
* Rejection is silent (no throw). The first time a given invalid string is
|
|
25
|
+
* seen in a session, a debug log is emitted via `console.debug`. Subsequent
|
|
26
|
+
* occurrences of the same value are dropped without further logging.
|
|
27
|
+
*
|
|
28
|
+
* @param id - The candidate PFT Id (any input shape, including non-strings).
|
|
29
|
+
* @returns `true` if the value is a valid PF Id and safe to store.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* validatePftId("aJCEE000000FgYP4A0"); // → true
|
|
33
|
+
* validatePftId("aJCEE000000FgYP4"); // → true (15-char form)
|
|
34
|
+
* validatePftId(" aJCEE000000FgYP4A0 "); // → false (whitespace-padded)
|
|
35
|
+
* validatePftId("aJDEE000000FgYP4A0"); // → false (non-aJC KeyPrefix)
|
|
36
|
+
* validatePftId(""); // → false (empty)
|
|
37
|
+
* validatePftId(null); // → false (nullish)
|
|
38
|
+
*/
|
|
39
|
+
export declare function validatePftId(id: unknown): id is string;
|
|
40
|
+
//# sourceMappingURL=pft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pft.d.ts","sourceRoot":"","sources":["../../src/analytics/pft.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH;;;;GAIG;AACH,eAAO,MAAM,YAAY,eAAe,CAAC;AAiBzC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAqBvD"}
|
|
@@ -67,6 +67,19 @@ export interface AnalyticsOptions {
|
|
|
67
67
|
clientSessionId?: string;
|
|
68
68
|
/** Optional telemetry transport. When provided, an o11y-uploader is auto-wired to route envelopes to transport.enqueue(). */
|
|
69
69
|
transport?: TelemetryTransport;
|
|
70
|
+
/**
|
|
71
|
+
* Optional Product Feature Taxonomy (PFT) Id to attribute all analytics
|
|
72
|
+
* events to at init time. Convenient for static widgets (e.g. AccountIQ)
|
|
73
|
+
* where the Id is known up front; multi-customer widgets (e.g. mosaic-widget)
|
|
74
|
+
* should leave this unset and use the runtime `setPftId()` API so the value
|
|
75
|
+
* can refresh per render or per tool-call.
|
|
76
|
+
*
|
|
77
|
+
* Validated at the boundary: only PF Ids (KeyPrefix `aJC`) are accepted;
|
|
78
|
+
* PFE Ids (`aJD`) and malformed values are silently dropped (the instance
|
|
79
|
+
* starts with no PFT attribution). PFT Id is advisory — used for usage-
|
|
80
|
+
* analytics dashboards only.
|
|
81
|
+
*/
|
|
82
|
+
pftId?: string;
|
|
70
83
|
}
|
|
71
84
|
/**
|
|
72
85
|
* Analytics instance returned by createAnalytics().
|
|
@@ -84,6 +97,20 @@ export interface Analytics {
|
|
|
84
97
|
trackError: (error: Error | string, properties?: Record<string, unknown>) => void;
|
|
85
98
|
/** Log a component load / page view */
|
|
86
99
|
trackPageView: (componentRef: string) => void;
|
|
100
|
+
/**
|
|
101
|
+
* Set the Product Feature Taxonomy (PFT) Id for attribution of subsequent
|
|
102
|
+
* analytics events. The value is late-bound — every emission reads the
|
|
103
|
+
* current value, so callers can refresh it per render or per tool-call
|
|
104
|
+
* (multi-customer widgets like mosaic-widget rely on this).
|
|
105
|
+
*
|
|
106
|
+
* Validation matches the constructor option: only PF Ids (`aJC` prefix) are
|
|
107
|
+
* accepted; PFE Ids and malformed values are **silently ignored**, and any
|
|
108
|
+
* prior value remains in place. This protects long-lived widgets from
|
|
109
|
+
* losing attribution due to a single transient bad input — e.g., a tool
|
|
110
|
+
* that occasionally emits a malformed `_meta["sfdc.pftId"]` will not blank
|
|
111
|
+
* the Id set by earlier well-formed responses.
|
|
112
|
+
*/
|
|
113
|
+
setPftId: (id: string) => void;
|
|
87
114
|
/** Cleanup — removes listeners, logs session duration, flushes events */
|
|
88
115
|
dispose: () => void;
|
|
89
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,SAAS,CAAC;CACvE;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACnE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtF,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,gBAAgB,CACf,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,IAAI,CAAC;CACR;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACvD,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnD,oBAAoB,IAAI,IAAI,CAAC;IAC7B,sBAAsB,IAAI,IAAI,CAAC;IAC/B,kBAAkB,IAAI,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAChC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6HAA6H;IAC7H,SAAS,CAAC,EAAE,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export { createViewSDK, type ViewSDKOptions, MCPAppsViewSDK, getViewSDK, getView
|
|
|
9
9
|
export { createDataSDK, type DataSDKOptions, type WebAppDataSDKOptions, type MosaicDataSDKOptions, type StatusCallback, type NodeOfConnection, gql, } from './data';
|
|
10
10
|
export { createLightningSDK, type LightningSDKOptions } from './lightning';
|
|
11
11
|
export { createTelemetryTransport, registerTelemetryUploader, TelemetryUploader, type TelemetryTransport, type TelemetryTransportOptions, type EnvelopeEntry, type EnvelopeMetadata, type TelemetryUploaderOptions, type OnEnvelopeCallback, type FlushReason, type TelemetryUploadContext, type TelemetryUploaderErrorContext, type InstrumentedAppLike, type DisposeOptions, } from './telemetry';
|
|
12
|
-
export { createAnalytics, type Analytics, type AnalyticsOptions } from './analytics';
|
|
12
|
+
export { createAnalytics, PFT_META_KEY, validatePftId, type Analytics, type AnalyticsOptions, } from './analytics';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,QAAQ,CAAC;AAGvB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,GACZ,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,GACZ,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,GAAG,GACH,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,QAAQ,CAAC;AAGvB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,GACZ,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,GACZ,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACN,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,GAAG,GACH,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACN,eAAe,EACf,YAAY,EACZ,aAAa,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,GACrB,MAAM,aAAa,CAAC"}
|