@pitcher/js-api 1.30.0 → 1.31.0
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.js +80 -17
- package/js-api.esm.js.map +1 -1
- package/js-api.umd.min.js +15 -15
- package/js-api.umd.min.js.map +1 -1
- package/lib/apps/browser/components/ContextMenu/TranslateFileButton.test.d.ts +1 -0
- package/lib/apps/browser/stores/api.filesFoldersDeleter.test.d.ts +1 -0
- package/lib/apps/canvas-builder/components/container/PopupApps/PopupAppModal.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/components/container/PresentationTools/PresentationToolsButtons.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.integration.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/section-component-bindings.util.d.ts +32 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +4 -0
- package/lib/apps/canvas-builder/components/ui/Link/Link.util.d.ts +8 -1
- package/lib/apps/canvas-builder/components/ui/Link/Link.util.test.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/SectionList/SectionItemModal.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/composables/useCanvas.d.ts +83 -9
- package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +4 -2
- package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +2 -2
- package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +2 -2
- package/lib/apps/canvas-builder/composables/useNavigatorDrawer.d.ts +25 -0
- package/lib/apps/canvas-builder/composables/useNavigatorDrawer.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +41 -4
- package/lib/apps/canvas-builder/composables/usePopupApps.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/composables/usePresentationTools.d.ts +112 -0
- package/lib/apps/canvas-builder/composables/usePresentationTools.spec.d.ts +1 -0
- package/lib/apps/canvas-builder/types/canvas.d.ts +13 -0
- package/lib/apps/canvas-builder/util/canvas.util.d.ts +12 -0
- package/lib/apps/canvas-builder/util/completionWizard.util.d.ts +251 -11
- package/lib/apps/canvas-builder/util/iframe.util.d.ts +24 -2
- package/lib/apps/canvas-builder/util/iframe.util.test.d.ts +1 -0
- package/lib/apps/canvas-selector/stores/app.d.ts +14 -0
- package/lib/apps/collection-player/components/AppHeader.spec.d.ts +1 -0
- package/lib/apps/collection-player/composables/speaker-notes.use.d.ts +14 -0
- package/lib/apps/collection-player/composables/speaker-notes.use.spec.d.ts +1 -0
- package/lib/apps/collection-player/stores/app.store.d.ts +5 -1
- package/lib/apps/collection-player/stores/showNotesToggle.spec.d.ts +1 -0
- package/lib/apps/content-selector/appTypes.d.ts +16 -0
- package/lib/apps/content-selector/components/Content/AllContent/List/expandFileGuard.spec.d.ts +1 -0
- package/lib/apps/notes/NotesApp.accountNotes.spec.d.ts +1 -0
- package/lib/apps/notes/NotesApp.speakerNotes.spec.d.ts +1 -0
- package/lib/apps/notes/composables/useAccountNotes.d.ts +14 -0
- package/lib/apps/notes/composables/useAccountNotes.spec.d.ts +1 -0
- package/lib/apps/notes/composables/useAccountOnlyNotesGate.d.ts +21 -0
- package/lib/apps/notes/composables/useAccountOnlyNotesGate.spec.d.ts +1 -0
- package/lib/apps/notes/composables/useActiveSlideNotes.d.ts +42 -0
- package/lib/apps/notes/composables/useActiveSlideNotes.spec.d.ts +1 -0
- package/lib/components/CFileAccessManagement/collaborationApi.d.ts +2 -0
- package/lib/components/CFilePanel/Details.spec.d.ts +1 -0
- package/lib/components/CFilePanel/KeyMessages.spec.d.ts +1 -0
- package/lib/components/CFilePanel/Summary.spec.d.ts +1 -0
- package/lib/components/CFileViewer/pdf/CFileViewer.pdf.util.d.ts +52 -0
- package/lib/components/CGlobalLoader/CGlobalLoaderMark.spec.d.ts +1 -0
- package/lib/components/CGlobalLoader/globalLoader.paths.d.ts +2 -0
- package/lib/components/CGlobalSearch/globalSearchTarget.util.d.ts +31 -0
- package/lib/components/CGlobalSearch/globalSearchTarget.util.test.d.ts +1 -0
- package/lib/components/CRichTextEditor/extensions/paragraphExtended.d.ts +7 -1
- package/lib/components/CRichTextEditor/extensions/paragraphExtended.test.d.ts +1 -0
- package/lib/components/canvases/CanvasesManagementBulk.use.d.ts +12 -2
- package/lib/components/masterCanvases/CMasterCanvasesManagement.use.d.ts +86 -0
- package/lib/components/masterCanvases/CMasterCanvasesManagement.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/CMasterCanvasesPendingShareCell.spec.d.ts +1 -0
- package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.d.ts +39 -0
- package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/createFromMaster.use.d.ts +255 -0
- package/lib/components/masterCanvases/createFromMaster.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/masterCanvasDocuments.use.d.ts +56 -0
- package/lib/components/masterCanvases/masterCanvasDocuments.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/masterCanvasShares.use.d.ts +103 -0
- package/lib/components/masterCanvases/masterCanvasShares.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/masterFromCanvas.use.d.ts +122 -0
- package/lib/components/masterCanvases/masterFromCanvas.use.spec.d.ts +1 -0
- package/lib/components/masterCanvases/masterFromTemplate.use.d.ts +50 -0
- package/lib/components/masterCanvases/masterFromTemplate.use.spec.d.ts +1 -0
- package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +203 -0
- package/lib/components/savedCanvases/savedCanvasDocuments.use.d.ts +111 -0
- package/lib/components/savedCanvases/savedCanvasDocuments.use.spec.d.ts +1 -0
- package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +4 -0
- package/lib/constants/cdp.const.d.ts +1 -0
- package/lib/constants/translationLanguages.const.d.ts +86 -8
- package/lib/constants/translationLanguages.const.spec.d.ts +1 -0
- package/lib/main.lib.d.ts +5 -0
- package/lib/sdk/api/HighLevelApi.d.ts +2 -0
- package/lib/sdk/api/modules/appsDb.d.ts +4 -4
- package/lib/sdk/api/modules/canvas.d.ts +12 -0
- package/lib/sdk/api/modules/ui/types.ui.d.ts +18 -0
- package/lib/sdk/interfaces.d.ts +31 -1
- package/lib/sdk/main.d.ts +38 -0
- package/lib/sdk/payload.types.d.ts +45 -0
- package/lib/sdk/platform.d.ts +27 -0
- package/lib/sdk/platform.spec.d.ts +1 -0
- package/lib/sdk/singleton-scope.spec.d.ts +1 -0
- package/lib/sdk/utils/httpFetch.spec.d.ts +1 -0
- package/lib/theme/canvasUiUnoPreset.test.d.ts +1 -0
- package/lib/types/app.d.ts +55 -1
- package/lib/types/canvases.d.ts +15 -0
- package/lib/types/launchDarkly.types.d.ts +8 -1
- package/lib/types/organizationSettings.types.d.ts +29 -0
- package/lib/util/aiSummary.d.ts +30 -0
- package/lib/util/aiSummary.spec.d.ts +1 -0
- package/lib/util/network.d.ts +35 -0
- package/package.json +1 -1
- package/types/openapi/models/Canvas.d.ts +1 -0
- package/types/openapi/models/CanvasCreate.d.ts +1 -0
- package/types/openapi/models/CanvasCreateRequest.d.ts +1 -0
- package/types/openapi/models/CanvasRecommendedFile.d.ts +1 -1
- package/types/openapi/models/CanvasRetrieve.d.ts +1 -0
- package/types/openapi/models/CanvasUpdate.d.ts +1 -0
- package/types/openapi/models/CanvasUpdateRequest.d.ts +1 -0
- package/types/openapi/models/DeletedCanvas.d.ts +1 -0
- package/types/openapi/models/File.d.ts +1 -1
- package/types/openapi/models/PatchedCanvasUpdateRequest.d.ts +1 -0
- package/types/openapi/models/SharedLink.d.ts +6 -0
- package/types/openapi/models/SharedLinkCreateRequest.d.ts +5 -0
package/js-api.esm.js
CHANGED
|
@@ -2724,6 +2724,17 @@ function aiComplete(payload) {
|
|
|
2724
2724
|
}
|
|
2725
2725
|
return highLevelApi.API.request("ai.complete", payload);
|
|
2726
2726
|
}
|
|
2727
|
+
function asCitations(value) {
|
|
2728
|
+
if (!Array.isArray(value)) return void 0;
|
|
2729
|
+
const citations = value.flatMap((entry) => {
|
|
2730
|
+
if (!entry || typeof entry !== "object") return [];
|
|
2731
|
+
const { file_id: fileId, page_indices: pageIndices } = entry;
|
|
2732
|
+
if (typeof fileId !== "string" || fileId === "" || !Array.isArray(pageIndices)) return [];
|
|
2733
|
+
const pages = pageIndices.filter((page) => Number.isInteger(page) && page >= 0);
|
|
2734
|
+
return pages.length > 0 ? [{ file_id: fileId, page_indices: pages }] : [];
|
|
2735
|
+
});
|
|
2736
|
+
return citations.length > 0 ? citations : void 0;
|
|
2737
|
+
}
|
|
2727
2738
|
async function piaSearchAnswer(payload) {
|
|
2728
2739
|
if (!payload || typeof payload.query !== "string" || payload.query.trim() === "") {
|
|
2729
2740
|
return Promise.reject(new Error("query is required and must be a non-empty string"));
|
|
@@ -2769,9 +2780,11 @@ async function piaSearchAnswer(payload) {
|
|
|
2769
2780
|
"pia_search"
|
|
2770
2781
|
);
|
|
2771
2782
|
const output = data?.pia_search ?? {};
|
|
2783
|
+
const citations = asCitations(output.citations);
|
|
2772
2784
|
return {
|
|
2773
2785
|
answer: typeof output.answer === "string" ? output.answer : "",
|
|
2774
2786
|
cited_file_ids: Array.isArray(output.cited_file_ids) ? output.cited_file_ids : [],
|
|
2787
|
+
...citations && { citations },
|
|
2775
2788
|
...output.confidence && { confidence: output.confidence },
|
|
2776
2789
|
source: "online"
|
|
2777
2790
|
};
|
|
@@ -2877,6 +2890,30 @@ async function weeklyFocusRank(payload) {
|
|
|
2877
2890
|
};
|
|
2878
2891
|
}
|
|
2879
2892
|
|
|
2893
|
+
const PLATFORM_TYPE = {
|
|
2894
|
+
web: "web",
|
|
2895
|
+
ios: "ios",
|
|
2896
|
+
android: "android",
|
|
2897
|
+
windows: "windows",
|
|
2898
|
+
macos: "macos"
|
|
2899
|
+
};
|
|
2900
|
+
|
|
2901
|
+
const WEB_MODE = "WEB";
|
|
2902
|
+
function isNativeHost(mode) {
|
|
2903
|
+
return typeof mode === "string" && mode !== "" && mode !== WEB_MODE;
|
|
2904
|
+
}
|
|
2905
|
+
const PLATFORM_TYPE_BY_MODE = {
|
|
2906
|
+
WEB: PLATFORM_TYPE.web,
|
|
2907
|
+
IOS: PLATFORM_TYPE.ios,
|
|
2908
|
+
MACOS: PLATFORM_TYPE.macos,
|
|
2909
|
+
WINDOWS: PLATFORM_TYPE.windows,
|
|
2910
|
+
ANDROID: PLATFORM_TYPE.android
|
|
2911
|
+
};
|
|
2912
|
+
function platformTypeForMode(mode) {
|
|
2913
|
+
if (!mode) return void 0;
|
|
2914
|
+
return Object.prototype.hasOwnProperty.call(PLATFORM_TYPE_BY_MODE, mode) ? PLATFORM_TYPE_BY_MODE[mode] : void 0;
|
|
2915
|
+
}
|
|
2916
|
+
|
|
2880
2917
|
const APPS_DB_BASE_PATH = "/core/api/protected/appsdb";
|
|
2881
2918
|
async function fetchAppsDbContext() {
|
|
2882
2919
|
const env = await highLevelApi.API.request("get_env");
|
|
@@ -2885,7 +2922,7 @@ async function fetchAppsDbContext() {
|
|
|
2885
2922
|
let origin = claimsDomain || metadataDomain || "";
|
|
2886
2923
|
if (origin && !origin.startsWith("http")) origin = `https://${origin}`;
|
|
2887
2924
|
return {
|
|
2888
|
-
|
|
2925
|
+
isNative: isNativeHost(env?.mode ?? env?.pitcher?.mode),
|
|
2889
2926
|
origin,
|
|
2890
2927
|
accessToken: env?.pitcher?.access_token ?? "",
|
|
2891
2928
|
instanceId: env?.pitcher?.instance?.id
|
|
@@ -3024,7 +3061,7 @@ async function appsDbGetEntries(payload) {
|
|
|
3024
3061
|
return Promise.reject(new Error("type is required and must be a non-empty string"));
|
|
3025
3062
|
}
|
|
3026
3063
|
const ctx = await getAppsDbContext();
|
|
3027
|
-
if (ctx.
|
|
3064
|
+
if (ctx.isNative) {
|
|
3028
3065
|
try {
|
|
3029
3066
|
return await highLevelApi.API.request("appsdb_get_entries", payload);
|
|
3030
3067
|
} catch (error) {
|
|
@@ -3041,7 +3078,7 @@ async function appsDbUpsertEntry(payload) {
|
|
|
3041
3078
|
return Promise.reject(new Error("type is required when creating an entry (no id provided)"));
|
|
3042
3079
|
}
|
|
3043
3080
|
const ctx = await getAppsDbContext();
|
|
3044
|
-
if (ctx.
|
|
3081
|
+
if (ctx.isNative) {
|
|
3045
3082
|
try {
|
|
3046
3083
|
return await highLevelApi.API.request("appsdb_upsert_entry", payload);
|
|
3047
3084
|
} catch (error) {
|
|
@@ -3058,7 +3095,7 @@ async function appsDbDeleteEntry(payload) {
|
|
|
3058
3095
|
return Promise.reject(new Error("id is required and must be a non-empty string"));
|
|
3059
3096
|
}
|
|
3060
3097
|
const ctx = await getAppsDbContext();
|
|
3061
|
-
if (ctx.
|
|
3098
|
+
if (ctx.isNative) {
|
|
3062
3099
|
try {
|
|
3063
3100
|
return await highLevelApi.API.request("appsdb_delete_entry", payload);
|
|
3064
3101
|
} catch (error) {
|
|
@@ -3101,7 +3138,7 @@ async function appsDbPsql(payload) {
|
|
|
3101
3138
|
return Promise.reject(new Error("query is required and must be a non-empty string"));
|
|
3102
3139
|
}
|
|
3103
3140
|
const ctx = await getAppsDbContext();
|
|
3104
|
-
if (ctx.
|
|
3141
|
+
if (ctx.isNative) {
|
|
3105
3142
|
const parsed = parseSimplePsql(payload.query);
|
|
3106
3143
|
let mirrorUnavailable = false;
|
|
3107
3144
|
if (parsed && await isDeviceOffline()) {
|
|
@@ -4545,24 +4582,32 @@ function paramsSerializer(params) {
|
|
|
4545
4582
|
}
|
|
4546
4583
|
return searchParams.toString();
|
|
4547
4584
|
}
|
|
4585
|
+
function isNonRetryableStatus(status) {
|
|
4586
|
+
if (typeof status !== "number") return false;
|
|
4587
|
+
if (status >= 200 && status < 300) return true;
|
|
4588
|
+
return status >= 400 && status < 500;
|
|
4589
|
+
}
|
|
4548
4590
|
async function fetchWithRetry(url, options, remainingRetries = MAX_RETRIES) {
|
|
4549
4591
|
try {
|
|
4550
4592
|
const response = await fetch(url, options);
|
|
4551
4593
|
if (!response.ok) {
|
|
4552
|
-
if (response.status === 401) {
|
|
4594
|
+
if (response.status === 401 && remainingRetries > 0) {
|
|
4553
4595
|
const newToken = await refreshToken();
|
|
4554
4596
|
options.headers = options.headers || {};
|
|
4555
4597
|
options.headers.Authorization = `Bearer ${newToken}`;
|
|
4556
|
-
return fetchWithRetry(url, options, remainingRetries);
|
|
4598
|
+
return fetchWithRetry(url, options, remainingRetries - 1);
|
|
4557
4599
|
} else if (response.status >= 500 && response.status < 600 && remainingRetries > 0) {
|
|
4558
4600
|
const delay = BASE_DELAY * Math.pow(2, MAX_RETRIES - remainingRetries);
|
|
4559
4601
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
4560
4602
|
return fetchWithRetry(url, options, remainingRetries - 1);
|
|
4561
4603
|
} else {
|
|
4562
|
-
const
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4604
|
+
const raw = await response.text().catch(() => "");
|
|
4605
|
+
let message = response.statusText;
|
|
4606
|
+
try {
|
|
4607
|
+
message = JSON.parse(raw)?.message || response.statusText;
|
|
4608
|
+
} catch {
|
|
4609
|
+
}
|
|
4610
|
+
const error = new Error(`HTTP error! status: ${response.status}, message: ${message}`);
|
|
4566
4611
|
error.status = response.status;
|
|
4567
4612
|
throw error;
|
|
4568
4613
|
}
|
|
@@ -4570,9 +4615,23 @@ async function fetchWithRetry(url, options, remainingRetries = MAX_RETRIES) {
|
|
|
4570
4615
|
if (response.status === 204 || response.status === 205) {
|
|
4571
4616
|
return;
|
|
4572
4617
|
}
|
|
4573
|
-
|
|
4618
|
+
const body = await response.text();
|
|
4619
|
+
if (!body) {
|
|
4620
|
+
const error = new Error(
|
|
4621
|
+
`Empty response body for status ${response.status} (expected JSON)`
|
|
4622
|
+
);
|
|
4623
|
+
error.status = response.status;
|
|
4624
|
+
throw error;
|
|
4625
|
+
}
|
|
4626
|
+
try {
|
|
4627
|
+
return JSON.parse(body);
|
|
4628
|
+
} catch (parseError) {
|
|
4629
|
+
;
|
|
4630
|
+
parseError.status = response.status;
|
|
4631
|
+
throw parseError;
|
|
4632
|
+
}
|
|
4574
4633
|
} catch (error) {
|
|
4575
|
-
if (remainingRetries > 0 && !(error instanceof TypeError) && error.status
|
|
4634
|
+
if (remainingRetries > 0 && !(error instanceof TypeError) && !isNonRetryableStatus(error.status)) {
|
|
4576
4635
|
const delay = BASE_DELAY * Math.pow(2, MAX_RETRIES - remainingRetries);
|
|
4577
4636
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
4578
4637
|
return fetchWithRetry(url, options, remainingRetries - 1);
|
|
@@ -4774,7 +4833,8 @@ const onlineRestApiHandlers = {
|
|
|
4774
4833
|
} catch (e) {
|
|
4775
4834
|
if (e?.status === 404) {
|
|
4776
4835
|
link = await http.post("/shared-links", {
|
|
4777
|
-
canvas_id: params.id
|
|
4836
|
+
canvas_id: params.id,
|
|
4837
|
+
...params.brand_id ? { brand_id: params.brand_id } : {}
|
|
4778
4838
|
});
|
|
4779
4839
|
} else {
|
|
4780
4840
|
throw e;
|
|
@@ -5869,12 +5929,15 @@ async function sendPeerConnectivityEvent(payload, options) {
|
|
|
5869
5929
|
let highLevelApi;
|
|
5870
5930
|
let prevOptions;
|
|
5871
5931
|
function usePitcherApi(options) {
|
|
5872
|
-
if (!highLevelApi || !isEqual(options, prevOptions)) {
|
|
5932
|
+
if (!highLevelApi || options !== void 0 && !isEqual(options, prevOptions)) {
|
|
5873
5933
|
highLevelApi = createHighLevelApi(options);
|
|
5874
|
-
prevOptions = options;
|
|
5934
|
+
prevOptions = options === void 0 ? void 0 : { ...options };
|
|
5875
5935
|
}
|
|
5876
5936
|
return highLevelApi;
|
|
5877
5937
|
}
|
|
5938
|
+
function createScopedPitcherApi(options) {
|
|
5939
|
+
return createHighLevelApi({ ...prevOptions, ...options });
|
|
5940
|
+
}
|
|
5878
5941
|
function enhanceWithSnakeCase(api) {
|
|
5879
5942
|
Object.entries(api).forEach(([key, value]) => {
|
|
5880
5943
|
const newKey = snakeCase(key);
|
|
@@ -5922,5 +5985,5 @@ function useApi(options) {
|
|
|
5922
5985
|
|
|
5923
5986
|
window.postRobot = pr;
|
|
5924
5987
|
|
|
5925
|
-
export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, DEFAULT_PEER_CONNECTIVITY_VERSION, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, getAvailableApis, highLevelApi, registerPeerConnectivityHandler, sendPeerConnectivityEvent, useAdmin, useApi, useDsr, usePitcherApi, useUi };
|
|
5988
|
+
export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, DEFAULT_PEER_CONNECTIVITY_VERSION, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, WEB_MODE, createScopedPitcherApi, getAvailableApis, highLevelApi, isNativeHost, platformTypeForMode, registerPeerConnectivityHandler, sendPeerConnectivityEvent, useAdmin, useApi, useDsr, usePitcherApi, useUi };
|
|
5926
5989
|
//# sourceMappingURL=js-api.esm.js.map
|