@pitcher/js-api 1.26.1 → 1.27.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/js-api.esm.d.ts +0 -1
- package/js-api.esm.js +141 -0
- package/js-api.esm.js.map +1 -1
- package/js-api.umd.min.js +17 -10
- package/js-api.umd.min.js.map +1 -1
- package/lib/apps/browser/appTypes.d.ts +2 -1
- package/lib/apps/browser/stores/api.d.ts +22 -2
- package/lib/apps/browser/stores/app.d.ts +6 -1
- package/lib/apps/browser/util/sortOrder.d.ts +36 -0
- package/lib/apps/browser/util/sortOrder.test.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/DataCharts/types.d.ts +7 -1
- package/lib/apps/canvas-builder/components/ui/DataCharts/types.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +11 -1
- package/lib/apps/canvas-builder/composables/lazySections.d.ts +53 -0
- package/lib/apps/canvas-builder/composables/lazySections.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/composables/useCanvas.d.ts +108 -14
- package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +4 -0
- package/lib/apps/canvas-builder/composables/useHtmlUserPropertyFields.d.ts +4 -0
- package/lib/apps/canvas-builder/courseMode.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/types/canvas.d.ts +77 -2
- package/lib/apps/canvas-selector/stores/app.d.ts +14 -0
- package/lib/apps/collection-player/stores/app.store.d.ts +1 -0
- package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +2 -0
- package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +8 -0
- package/lib/composables/useCanvasRendererExcludedTags.d.ts +15 -0
- package/lib/composables/useCanvasRendererExcludedTags.spec.d.ts +1 -0
- package/lib/composables/useThemeVars.d.ts +2 -0
- package/lib/constants/cdp.const.d.ts +1 -0
- package/lib/main.lib.d.ts +5 -1
- package/lib/sdk/api/HighLevelApi.d.ts +17 -0
- package/lib/sdk/api/modules/ai.d.ts +52 -0
- package/lib/sdk/api/modules/canvas.d.ts +42 -1
- package/lib/sdk/api/modules/index.d.ts +1 -0
- package/lib/sdk/interfaces.d.ts +13 -1
- package/lib/sdk/main.d.ts +39 -0
- package/lib/sdk/payload.types.d.ts +121 -0
- package/lib/theme/light.d.ts +2 -0
- package/lib/theme/theme.types.d.ts +1 -0
- package/lib/types/ai-tasks.const.d.ts +80 -0
- package/lib/types/instanceSettings.types.d.ts +2 -0
- package/lib/types/launchDarkly.types.d.ts +16 -7
- package/lib/types/organizationSettings.types.d.ts +18 -0
- package/lib/util/fullscreen.util.d.ts +12 -1
- package/lib/util/handlebars.d.ts +19 -0
- package/lib/util/network.d.ts +21 -0
- package/lib/util/network.test.d.ts +1 -0
- package/lib/util/string.d.ts +13 -0
- package/package.json +1 -1
- package/types/openapi/index.d.ts +1 -0
- package/types/openapi/models/Canvas.d.ts +2 -2
- package/types/openapi/models/CanvasCreate.d.ts +2 -2
- package/types/openapi/models/CanvasRetrieve.d.ts +10 -2
- package/types/openapi/models/CanvasUpdate.d.ts +2 -2
- package/types/openapi/models/DeletedCanvas.d.ts +2 -2
- package/types/openapi/models/FolderFolder.d.ts +4 -0
- package/types/openapi/models/FolderRetrieve.d.ts +1 -0
- package/types/openapi/models/MetadataTemplateFieldTypeEnum.d.ts +3 -1
- package/types/openapi/models/MiniCanvasWithTags.d.ts +5 -0
package/js-api.esm.d.ts
CHANGED
package/js-api.esm.js
CHANGED
|
@@ -2380,6 +2380,124 @@ const index = /*#__PURE__*/_mergeNamespaces({
|
|
|
2380
2380
|
default: pr
|
|
2381
2381
|
}, [postRobotExports]);
|
|
2382
2382
|
|
|
2383
|
+
function resolvePiaSearchMode(config) {
|
|
2384
|
+
if (config?.mode === "off" || config?.mode === "on_device" || config?.mode === "online") return config.mode;
|
|
2385
|
+
return "off";
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
const PIA_SEARCH_ROUTE = "/core/api/protected/pia-prepare/pia-search";
|
|
2389
|
+
const CAPABILITIES_TIMEOUT_MS = 3e3;
|
|
2390
|
+
const ON_DEVICE_MAX_TOKENS = 512;
|
|
2391
|
+
const WEB_CAPABILITIES = {
|
|
2392
|
+
available: true,
|
|
2393
|
+
offline: false,
|
|
2394
|
+
runtime: "bedrock-online"
|
|
2395
|
+
};
|
|
2396
|
+
function withTimeout(promise, ms, label) {
|
|
2397
|
+
return new Promise((resolve, reject) => {
|
|
2398
|
+
const timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
|
|
2399
|
+
promise.then(
|
|
2400
|
+
(value) => {
|
|
2401
|
+
clearTimeout(timer);
|
|
2402
|
+
resolve(value);
|
|
2403
|
+
},
|
|
2404
|
+
(error) => {
|
|
2405
|
+
clearTimeout(timer);
|
|
2406
|
+
reject(error);
|
|
2407
|
+
}
|
|
2408
|
+
);
|
|
2409
|
+
});
|
|
2410
|
+
}
|
|
2411
|
+
function normalizeOrigin(domain) {
|
|
2412
|
+
return domain.startsWith("http") ? domain : `https://${domain}`;
|
|
2413
|
+
}
|
|
2414
|
+
function apiOriginFromEnv(env) {
|
|
2415
|
+
const claimDomain = env?.pitcher?.token_claims?.["https://pitcher.com/claims/urls"]?.custom_domain;
|
|
2416
|
+
if (typeof claimDomain === "string" && claimDomain.length > 0) return normalizeOrigin(claimDomain);
|
|
2417
|
+
const orgDomain = env?.pitcher?.organization?.metadata?.custom_domain;
|
|
2418
|
+
if (typeof orgDomain === "string" && orgDomain.length > 0) return normalizeOrigin(orgDomain);
|
|
2419
|
+
throw new Error("piaSearchAnswer: no customer domain found in env (token_claims / organization metadata)");
|
|
2420
|
+
}
|
|
2421
|
+
function buildOnDevicePrompt(query, contextText) {
|
|
2422
|
+
const context = typeof contextText === "string" && contextText.trim().length > 0 ? contextText.trim() : "No content context was provided.";
|
|
2423
|
+
return `You are PIA, a sales content assistant. Answer the rep's question using ONLY the CONTEXT below — do not invent content that is not in it.
|
|
2424
|
+
|
|
2425
|
+
CONTEXT:
|
|
2426
|
+
${context}
|
|
2427
|
+
|
|
2428
|
+
QUESTION: ${query}
|
|
2429
|
+
|
|
2430
|
+
Answer concisely in plain text. If the context does not contain the answer, say you could not find it in the available content.`;
|
|
2431
|
+
}
|
|
2432
|
+
async function aiGetCapabilities() {
|
|
2433
|
+
const env = await highLevelApi.API.request("get_env");
|
|
2434
|
+
if (env?.mode === "IOS") {
|
|
2435
|
+
return highLevelApi.API.request("ai.get_capabilities");
|
|
2436
|
+
}
|
|
2437
|
+
return { ...WEB_CAPABILITIES };
|
|
2438
|
+
}
|
|
2439
|
+
function aiComplete(payload) {
|
|
2440
|
+
if (!payload || typeof payload.prompt !== "string" || payload.prompt.trim() === "") {
|
|
2441
|
+
return Promise.reject(new Error("prompt is required and must be a non-empty string"));
|
|
2442
|
+
}
|
|
2443
|
+
return highLevelApi.API.request("ai.complete", payload);
|
|
2444
|
+
}
|
|
2445
|
+
async function piaSearchAnswer(payload) {
|
|
2446
|
+
if (!payload || typeof payload.query !== "string" || payload.query.trim() === "") {
|
|
2447
|
+
return Promise.reject(new Error("query is required and must be a non-empty string"));
|
|
2448
|
+
}
|
|
2449
|
+
const env = await highLevelApi.API.request("get_env");
|
|
2450
|
+
const mode = resolvePiaSearchMode(env?.launch_darkly?.pia_search_config);
|
|
2451
|
+
if (mode === "off") {
|
|
2452
|
+
throw new Error('pia_search_disabled: pia_search_config resolves to mode "off"');
|
|
2453
|
+
}
|
|
2454
|
+
if (mode === "on_device" && env?.mode === "IOS") {
|
|
2455
|
+
try {
|
|
2456
|
+
const capabilities = await withTimeout(
|
|
2457
|
+
highLevelApi.API.request("ai.get_capabilities"),
|
|
2458
|
+
CAPABILITIES_TIMEOUT_MS,
|
|
2459
|
+
"ai.get_capabilities"
|
|
2460
|
+
);
|
|
2461
|
+
if (capabilities?.available) {
|
|
2462
|
+
const completion = await aiComplete({
|
|
2463
|
+
prompt: buildOnDevicePrompt(payload.query, payload.context_text),
|
|
2464
|
+
max_tokens: payload.max_tokens ?? ON_DEVICE_MAX_TOKENS
|
|
2465
|
+
});
|
|
2466
|
+
return { answer: completion.text, source: "on_device" };
|
|
2467
|
+
}
|
|
2468
|
+
} catch (error) {
|
|
2469
|
+
console.warn("[piaSearchAnswer] on-device path unavailable, falling back to online:", error);
|
|
2470
|
+
}
|
|
2471
|
+
}
|
|
2472
|
+
const instanceId = payload.instance_id || env?.pitcher?.instance?.id;
|
|
2473
|
+
if (!instanceId) {
|
|
2474
|
+
throw new Error("piaSearchAnswer: instance_id could not be resolved from the payload or env");
|
|
2475
|
+
}
|
|
2476
|
+
const response = await fetch(`${apiOriginFromEnv(env)}${PIA_SEARCH_ROUTE}`, {
|
|
2477
|
+
method: "POST",
|
|
2478
|
+
headers: {
|
|
2479
|
+
"Content-Type": "application/json",
|
|
2480
|
+
Authorization: `Bearer ${env.pitcher.access_token}`
|
|
2481
|
+
},
|
|
2482
|
+
body: JSON.stringify({
|
|
2483
|
+
query: payload.query,
|
|
2484
|
+
instance_id: instanceId,
|
|
2485
|
+
...Array.isArray(payload.file_ids) && payload.file_ids.length > 0 && { file_ids: payload.file_ids }
|
|
2486
|
+
})
|
|
2487
|
+
});
|
|
2488
|
+
if (!response.ok) {
|
|
2489
|
+
throw new Error(`pia_search ${response.status}`);
|
|
2490
|
+
}
|
|
2491
|
+
const data = await response.json();
|
|
2492
|
+
const output = data?.pia_search ?? {};
|
|
2493
|
+
return {
|
|
2494
|
+
answer: typeof output.answer === "string" ? output.answer : "",
|
|
2495
|
+
cited_file_ids: Array.isArray(output.cited_file_ids) ? output.cited_file_ids : [],
|
|
2496
|
+
...output.confidence && { confidence: output.confidence },
|
|
2497
|
+
source: "online"
|
|
2498
|
+
};
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2383
2501
|
function open$2(payload = {}) {
|
|
2384
2502
|
return this.API.request("open", payload);
|
|
2385
2503
|
}
|
|
@@ -2428,6 +2546,9 @@ function updateCanvasIndicators(payload) {
|
|
|
2428
2546
|
function getCanvas$1(payload) {
|
|
2429
2547
|
return this.API.request("get_canvas", payload);
|
|
2430
2548
|
}
|
|
2549
|
+
function getSectionsByIds(payload) {
|
|
2550
|
+
return this.API.request("get_canvas_sections_by_ids", payload);
|
|
2551
|
+
}
|
|
2431
2552
|
function shareCanvas(payload) {
|
|
2432
2553
|
return this.API.request("share_canvas", payload);
|
|
2433
2554
|
}
|
|
@@ -3383,6 +3504,8 @@ function assignCanvasTheme(payload) {
|
|
|
3383
3504
|
|
|
3384
3505
|
const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
3385
3506
|
__proto__: null,
|
|
3507
|
+
aiComplete,
|
|
3508
|
+
aiGetCapabilities,
|
|
3386
3509
|
assignCanvasTheme,
|
|
3387
3510
|
close: close$2,
|
|
3388
3511
|
createCanvas: createCanvas$1,
|
|
@@ -3421,6 +3544,7 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
3421
3544
|
getFolders,
|
|
3422
3545
|
getInstanceMetadataTemplates: getInstanceMetadataTemplates$1,
|
|
3423
3546
|
getLanguages,
|
|
3547
|
+
getSectionsByIds,
|
|
3424
3548
|
getThemes,
|
|
3425
3549
|
getUsers: getUsers$1,
|
|
3426
3550
|
isOffline,
|
|
@@ -3430,6 +3554,7 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
3430
3554
|
openExternalUrl,
|
|
3431
3555
|
openWebViewAlwaysOnTop,
|
|
3432
3556
|
patchCoreFolder,
|
|
3557
|
+
piaSearchAnswer,
|
|
3433
3558
|
query,
|
|
3434
3559
|
refreshAccessToken,
|
|
3435
3560
|
refreshServiceToken,
|
|
@@ -3577,6 +3702,7 @@ var PitcherExternalEventName = /* @__PURE__ */ ((PitcherExternalEventName2) => {
|
|
|
3577
3702
|
PitcherExternalEventName2["CREATE_AND_OPEN_CANVAS"] = "create_and_open_canvas";
|
|
3578
3703
|
PitcherExternalEventName2["OPEN_CANVAS"] = "open_canvas";
|
|
3579
3704
|
PitcherExternalEventName2["START_CALL"] = "start_call";
|
|
3705
|
+
PitcherExternalEventName2["SELECT_ACCOUNT"] = "select_account";
|
|
3580
3706
|
return PitcherExternalEventName2;
|
|
3581
3707
|
})(PitcherExternalEventName || {});
|
|
3582
3708
|
|
|
@@ -3907,6 +4033,20 @@ const onlineRestApiHandlers = {
|
|
|
3907
4033
|
const res = await http.get(`/canvases/${params.id}`, { params: restParams });
|
|
3908
4034
|
return res;
|
|
3909
4035
|
},
|
|
4036
|
+
// Lazy section loading companion: batch-hydrate section bodies for a canvas
|
|
4037
|
+
// that was fetched as a shell (`?lazy_sections=true`). Hits the same Django
|
|
4038
|
+
// /api/v1 base as get_canvas. Returns { sections: CanvasSection[] }.
|
|
4039
|
+
get_canvas_sections_by_ids: async (params) => {
|
|
4040
|
+
check();
|
|
4041
|
+
const res = await http.post("/canvases/sections/by-ids", {
|
|
4042
|
+
canvas_id: params.canvas_id,
|
|
4043
|
+
section_ids: params.section_ids,
|
|
4044
|
+
...params.exclude_drafts !== void 0 && { exclude_drafts: params.exclude_drafts },
|
|
4045
|
+
...params.include_expired_files !== void 0 && { include_expired_files: params.include_expired_files },
|
|
4046
|
+
...params.include_pending_files !== void 0 && { include_pending_files: params.include_pending_files }
|
|
4047
|
+
});
|
|
4048
|
+
return res;
|
|
4049
|
+
},
|
|
3910
4050
|
create_canvas: async (params) => {
|
|
3911
4051
|
check();
|
|
3912
4052
|
const res = await http.post("/canvases", { ...params, instance_id: env.pitcher.instance.id });
|
|
@@ -4063,6 +4203,7 @@ class LowLevelApi extends EventEmitter {
|
|
|
4063
4203
|
} else if (res.response.status === "error") {
|
|
4064
4204
|
if (this.options.errorLogger) {
|
|
4065
4205
|
this.options.errorLogger({
|
|
4206
|
+
type: res.request.type,
|
|
4066
4207
|
message: `Pitcher JS API call failure: ${res.request.type}`,
|
|
4067
4208
|
js_api_response: JSON.stringify(truncateObject(res, 3, TRUNCATE_LENGTH_TRIGGER))
|
|
4068
4209
|
});
|