@texonom/nclient 1.5.9 → 1.5.10
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/build/index.js +40 -39
- package/build/index.js.map +1 -1
- package/package.json +3 -3
package/build/index.js
CHANGED
|
@@ -2,29 +2,29 @@ var V = Object.defineProperty, ee = Object.defineProperties;
|
|
|
2
2
|
var oe = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var Z = Object.getOwnPropertySymbols;
|
|
4
4
|
var te = Object.prototype.hasOwnProperty, re = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var G = (
|
|
5
|
+
var G = (_, t, o) => t in _ ? V(_, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : _[t] = o, n = (_, t) => {
|
|
6
6
|
for (var o in t || (t = {}))
|
|
7
|
-
te.call(t, o) && G(
|
|
7
|
+
te.call(t, o) && G(_, o, t[o]);
|
|
8
8
|
if (Z)
|
|
9
9
|
for (var o of Z(t))
|
|
10
|
-
re.call(t, o) && G(
|
|
11
|
-
return
|
|
12
|
-
}, P = (
|
|
13
|
-
var k = (
|
|
10
|
+
re.call(t, o) && G(_, o, t[o]);
|
|
11
|
+
return _;
|
|
12
|
+
}, P = (_, t) => ee(_, oe(t));
|
|
13
|
+
var k = (_, t, o) => new Promise((e, s) => {
|
|
14
14
|
var d = (i) => {
|
|
15
15
|
try {
|
|
16
16
|
c(o.next(i));
|
|
17
|
-
} catch (
|
|
18
|
-
s(
|
|
17
|
+
} catch (y) {
|
|
18
|
+
s(y);
|
|
19
19
|
}
|
|
20
20
|
}, l = (i) => {
|
|
21
21
|
try {
|
|
22
22
|
c(o.throw(i));
|
|
23
|
-
} catch (
|
|
24
|
-
s(
|
|
23
|
+
} catch (y) {
|
|
24
|
+
s(y);
|
|
25
25
|
}
|
|
26
26
|
}, c = (i) => i.done ? e(i.value) : Promise.resolve(i.value).then(d, l);
|
|
27
|
-
c((o = o.apply(
|
|
27
|
+
c((o = o.apply(_, t)).next());
|
|
28
28
|
});
|
|
29
29
|
import { uuidToId as se, getPageContentUserIds as ne, getPageContentBlockIds as E, getBlockCollectionId as ce, findAncestors as ie, parsePageId as w } from "@texonom/nutils";
|
|
30
30
|
import ae from "p-map";
|
|
@@ -37,7 +37,7 @@ class pe {
|
|
|
37
37
|
} = {}) {
|
|
38
38
|
this._apiBaseUrl = t, this._authToken = o, this._activeUser = e, this._userTimeZone = s;
|
|
39
39
|
}
|
|
40
|
-
getPage(
|
|
40
|
+
getPage(y) {
|
|
41
41
|
return k(this, arguments, function* (t, {
|
|
42
42
|
concurrency: o = 3,
|
|
43
43
|
fetchFullInfo: e = !0,
|
|
@@ -62,8 +62,8 @@ class pe {
|
|
|
62
62
|
}));
|
|
63
63
|
const I = E(r).filter((h) => !r.block[h]);
|
|
64
64
|
M.push(this.getBlocks(I, i).then((h) => h.recordMap.block));
|
|
65
|
-
const C = Object.values(r.block)[0].value,
|
|
66
|
-
M.push(this.getSpaces(
|
|
65
|
+
const C = Object.values(r.block)[0].value, g = C.parent_table === "space" ? [C.parent_id] : [];
|
|
66
|
+
M.push(this.getSpaces(g, i).then((h) => {
|
|
67
67
|
var R;
|
|
68
68
|
return (R = h.recordMapWithRoles) == null ? void 0 : R.space;
|
|
69
69
|
}));
|
|
@@ -74,7 +74,7 @@ class pe {
|
|
|
74
74
|
return s && (yield this.fetchCollections(q, r, t, { concurrency: o, fetchOption: i })), d && (yield this.addSignedUrls({ recordMap: r, contentBlockIds: q, fetchOption: i })), r;
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
fetchCollections(c, i,
|
|
77
|
+
fetchCollections(c, i, y) {
|
|
78
78
|
return k(this, arguments, function* (t, o, e, {
|
|
79
79
|
concurrency: s,
|
|
80
80
|
fetchOption: d,
|
|
@@ -107,19 +107,19 @@ class pe {
|
|
|
107
107
|
var b, I, C;
|
|
108
108
|
const { collectionId: u, collectionViewId: p, collectionViewBlockId: B } = q, M = (b = o.collection_view[p]) == null ? void 0 : b.value;
|
|
109
109
|
try {
|
|
110
|
-
const
|
|
110
|
+
const g = yield this.getCollectionData(u, p, M, {
|
|
111
111
|
fetchOption: d
|
|
112
112
|
});
|
|
113
|
-
if (
|
|
114
|
-
[p]: (I =
|
|
115
|
-
}), r.block = n(n({}, r.block),
|
|
116
|
-
[p]: (C =
|
|
113
|
+
if (g.recordMap && (o.block = n(n({}, o.block), g.recordMap.block), o.collection = n(n({}, o.collection), g.recordMap.collection), o.collection_view = n(n({}, o.collection_view), g.recordMap.collection_view), o.notion_user = n(n({}, o.notion_user), g.recordMap.notion_user), o.collection_query[u] = P(n({}, o.collection_query[u]), {
|
|
114
|
+
[p]: (I = g.result) == null ? void 0 : I.reducerResults
|
|
115
|
+
}), r.block = n(n({}, r.block), g.recordMap.block), r.collection = n(n({}, r.collection), g.recordMap.collection), r.collection_view = n(n({}, r.collection_view), g.recordMap.collection_view), r.notion_user = n(n({}, r.notion_user), g.recordMap.notion_user), r.collection_query[u] = P(n({}, r.collection_query[u]), {
|
|
116
|
+
[p]: (C = g.result) == null ? void 0 : C.reducerResults
|
|
117
117
|
})), !M) {
|
|
118
118
|
const f = yield this.getPageRaw(B, { fetchOption: d });
|
|
119
119
|
f.recordMap && (a(f.recordMap.block), a(f.recordMap.collection), a(f.recordMap.collection_view), o.collection_view = n(n({}, o.collection_view), f.recordMap.collection_view), r.collection_view = n(n({}, r.collection_view), f.recordMap.collection_view), o.collection = n(n({}, o.collection), f.recordMap.collection), r.collection = n(n({}, r.collection), f.recordMap.collection), o.block = n(n({}, o.block), f.recordMap.block), r.block = n(n({}, r.block), f.recordMap.block));
|
|
120
120
|
}
|
|
121
|
-
} catch (
|
|
122
|
-
console.debug("NotionAPI collectionQuery error in page id ", e), console.error(
|
|
121
|
+
} catch (g) {
|
|
122
|
+
console.debug("NotionAPI collectionQuery error in page id ", e), console.error(g);
|
|
123
123
|
}
|
|
124
124
|
}),
|
|
125
125
|
{
|
|
@@ -136,9 +136,9 @@ class pe {
|
|
|
136
136
|
}) {
|
|
137
137
|
t.signed_urls = {}, o || (o = E(t));
|
|
138
138
|
const d = o.flatMap((l) => {
|
|
139
|
-
var i,
|
|
139
|
+
var i, y, m, r, q, u;
|
|
140
140
|
const c = (i = t.block[l]) == null ? void 0 : i.value;
|
|
141
|
-
if (c && (c.type === "pdf" || c.type === "audio" || c.type === "image" && ((
|
|
141
|
+
if (c && (c.type === "pdf" || c.type === "audio" || c.type === "image" && ((y = c.file_ids) != null && y.length) || c.type === "video" || c.type === "file" || c.type === "page")) {
|
|
142
142
|
const p = c.type === "page" ? (m = c.format) == null ? void 0 : m.page_cover : (u = (q = (r = c.properties) == null ? void 0 : r.source) == null ? void 0 : q[0]) == null ? void 0 : u[0];
|
|
143
143
|
if (p)
|
|
144
144
|
return !p.includes("secure.notion-static.com") && !p.includes("prod-files-secure") ? [] : {
|
|
@@ -156,8 +156,8 @@ class pe {
|
|
|
156
156
|
const { signedUrls: l } = yield this.getSignedFileUrls(d, e);
|
|
157
157
|
if (l.length === d.length)
|
|
158
158
|
for (let c = 0; c < d.length; ++c) {
|
|
159
|
-
const i = d[c],
|
|
160
|
-
t.signed_urls[i.permissionRecord.id] =
|
|
159
|
+
const i = d[c], y = l[c];
|
|
160
|
+
t.signed_urls[i.permissionRecord.id] = y;
|
|
161
161
|
}
|
|
162
162
|
} catch (l) {
|
|
163
163
|
console.warn("NotionAPI getSignedfileUrls error", l);
|
|
@@ -186,7 +186,7 @@ class pe {
|
|
|
186
186
|
});
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
|
-
getCollectionData(
|
|
189
|
+
getCollectionData(y, m, r) {
|
|
190
190
|
return k(this, arguments, function* (t, o, e, {
|
|
191
191
|
limit: s = 9999,
|
|
192
192
|
searchQuery: d = "",
|
|
@@ -194,10 +194,10 @@ class pe {
|
|
|
194
194
|
loadContentCover: c = !0,
|
|
195
195
|
fetchOption: i
|
|
196
196
|
} = {}) {
|
|
197
|
-
var I, C,
|
|
197
|
+
var I, C, g, f, T, $, h, R, F, z, W, L;
|
|
198
198
|
const q = e == null ? void 0 : e.type, u = q === "board", p = u ? (I = e == null ? void 0 : e.format) == null ? void 0 : I.board_columns_by : (C = e == null ? void 0 : e.format) == null ? void 0 : C.collection_group_by;
|
|
199
199
|
let B = [];
|
|
200
|
-
(
|
|
200
|
+
(g = e == null ? void 0 : e.format) != null && g.property_filters && (B = (f = e.format) == null ? void 0 : f.property_filters.map((U) => {
|
|
201
201
|
var x, A;
|
|
202
202
|
return {
|
|
203
203
|
filter: (x = U == null ? void 0 : U.filter) == null ? void 0 : x.filter,
|
|
@@ -348,7 +348,7 @@ class pe {
|
|
|
348
348
|
}
|
|
349
349
|
search(t, o) {
|
|
350
350
|
return k(this, null, function* () {
|
|
351
|
-
var d, l, c, i,
|
|
351
|
+
var d, l, c, i, y;
|
|
352
352
|
const e = {
|
|
353
353
|
type: "BlocksInSpace",
|
|
354
354
|
source: "quick_find_filters",
|
|
@@ -374,7 +374,7 @@ class pe {
|
|
|
374
374
|
body: e,
|
|
375
375
|
fetchOption: o
|
|
376
376
|
});
|
|
377
|
-
return s.recordMap && (a(s.recordMap.block), a(s.recordMap.collection), a(s.recordMap.collection_view), a(s.recordMap.notion_user), s.recordMap.block = (l = s.recordMap.block) != null ? l : {}, s.recordMap.collection = (c = s.recordMap.collection) != null ? c : {}, s.recordMap.collection_view = (i = s.recordMap.collection_view) != null ? i : {}, s.recordMap.notion_user = (
|
|
377
|
+
return s.recordMap && (a(s.recordMap.block), a(s.recordMap.collection), a(s.recordMap.collection_view), a(s.recordMap.notion_user), s.recordMap.block = (l = s.recordMap.block) != null ? l : {}, s.recordMap.collection = (c = s.recordMap.collection) != null ? c : {}, s.recordMap.collection_view = (i = s.recordMap.collection_view) != null ? i : {}, s.recordMap.notion_user = (y = s.recordMap.notion_user) != null ? y : {}), s;
|
|
378
378
|
});
|
|
379
379
|
}
|
|
380
380
|
/**
|
|
@@ -416,18 +416,19 @@ class pe {
|
|
|
416
416
|
headers: l
|
|
417
417
|
}, e);
|
|
418
418
|
if ((e == null ? void 0 : e.timeout) !== void 0) {
|
|
419
|
-
const
|
|
420
|
-
setTimeout(() =>
|
|
419
|
+
const y = new AbortController();
|
|
420
|
+
setTimeout(() => y.abort(), e.timeout), i.signal = y.signal;
|
|
421
421
|
}
|
|
422
|
-
return fetch(c, i).then((
|
|
422
|
+
return fetch(c, i).then((y) => y.json());
|
|
423
423
|
});
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
|
-
function a(
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
426
|
+
function a(_) {
|
|
427
|
+
var t;
|
|
428
|
+
if (_)
|
|
429
|
+
for (const o of Object.keys(_)) {
|
|
430
|
+
const e = _[o];
|
|
431
|
+
(e != null && e.spaceId && e.value || (t = e == null ? void 0 : e.value) != null && t.value && !e.role && !e.type) && (_[o] = e.value);
|
|
431
432
|
}
|
|
432
433
|
}
|
|
433
434
|
export {
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/notion-api.ts"],"sourcesContent":["import {\n getBlockCollectionId,\n getPageContentBlockIds,\n getPageContentUserIds,\n parsePageId,\n uuidToId,\n findAncestors\n} from '@texonom/nutils'\nimport pMap from 'p-map'\n\nimport type {\n ExtendedRecordMap,\n NotionMap,\n PageChunk,\n BaseCollectionView,\n CollectionViewType,\n ReducerResponse,\n CollectionQueryResult,\n RecordValues,\n User,\n Space,\n SearchParams,\n SearchResults,\n BacklinkParams,\n BacklinkResults\n} from '@texonom/ntypes'\n\nimport type { SignedUrlRequest, FetchOption, SignedUrlResponse } from './types'\n\n/**\n * Main Notion API client.\n */\nexport class NotionAPI {\n private readonly _apiBaseUrl: string\n private readonly _authToken?: string\n private readonly _activeUser?: string\n private readonly _userTimeZone: string\n\n constructor({\n apiBaseUrl = 'https://www.notion.so/api/v3',\n authToken,\n activeUser,\n userTimeZone = 'America/New_York'\n }: {\n apiBaseUrl?: string\n authToken?: string\n userLocale?: string\n userTimeZone?: string\n activeUser?: string\n } = {}) {\n this._apiBaseUrl = apiBaseUrl\n this._authToken = authToken\n this._activeUser = activeUser\n this._userTimeZone = userTimeZone\n }\n\n public async getPage(\n pageId: string,\n {\n concurrency = 3,\n fetchFullInfo = true,\n fetchCollections = true,\n signFileUrls = true,\n chunkLimit = 100,\n chunkNumber = 0,\n fetchOption\n }: {\n concurrency?: number\n fetchFullInfo?: boolean\n fetchCollections?: boolean\n signFileUrls?: boolean\n chunkLimit?: number\n chunkNumber?: number\n fetchOption?: FetchOption\n } = {}\n ): Promise<ExtendedRecordMap> {\n const page = await this.getPageRaw(pageId, {\n chunkLimit,\n chunkNumber,\n fetchOption\n })\n const recordMap = page?.recordMap as ExtendedRecordMap\n if (!recordMap?.block) throw new Error(`Notion page not found \"${uuidToId(pageId)}\"`)\n\n // Normalize nested API format from loadPageChunk\n normalizeMap(recordMap.block)\n normalizeMap(recordMap.collection)\n normalizeMap(recordMap.collection_view)\n normalizeMap(recordMap.notion_user)\n\n // ensure that all top-level maps exist\n recordMap.collection = recordMap.collection ?? {}\n recordMap.collection_view = recordMap.collection_view ?? {}\n recordMap.notion_user = recordMap.notion_user ?? {}\n\n // additional mappings added for convenience\n // note: these are not native notion objects\n recordMap.collection_query = {}\n recordMap.signed_urls = {}\n\n // Fetch Users\n if (fetchFullInfo) {\n const promises = []\n // Fetch any missing users\n const pendingUserIDs = getPageContentUserIds(recordMap).filter(id => !recordMap.notion_user[id])\n promises.push(this.getUsers(pendingUserIDs, fetchOption).then(res => res?.recordMapWithRoles?.notion_user))\n\n // Fetch any missing content blocks\n const pendingBlocks = getPageContentBlockIds(recordMap).filter(id => !recordMap.block[id])\n promises.push(this.getBlocks(pendingBlocks, fetchOption).then(res => res.recordMap.block))\n\n // Fetch any missing content blocks\n const rootBlock = Object.values(recordMap.block)[0].value\n const pendingSpaces = rootBlock.parent_table === 'space' ? [rootBlock.parent_id] : []\n promises.push(this.getSpaces(pendingSpaces, fetchOption).then(res => res.recordMapWithRoles?.space))\n\n // Append them\n const [newUsers, newBlocks, newSpaces] = await Promise.all(promises)\n recordMap.notion_user = { ...recordMap.notion_user, ...newUsers }\n recordMap.block = { ...recordMap.block, ...newBlocks }\n recordMap.space = { ...recordMap.space, ...newSpaces }\n\n // Normalize after merging syncRecordValues/getRecordValues data\n normalizeMap(recordMap.block)\n normalizeMap(recordMap.collection)\n normalizeMap(recordMap.notion_user)\n }\n\n // Optionally fetch all data for embedded collections and their associated views.\n // NOTE: We're eagerly fetching *all* data for each collection and all of its views.\n // This is really convenient in order to ensure that all data needed for a given\n // Notion page is readily available for use cases involving server-side rendering\n // and edge caching.\n\n const contentBlockIds = getPageContentBlockIds(recordMap)\n if (fetchCollections) await this.fetchCollections(contentBlockIds, recordMap, pageId, { concurrency, fetchOption })\n\n // Optionally fetch signed URLs for any embedded files.\n // NOTE: Similar to collection data, we default to eagerly fetching signed URL info\n // because it is preferable for many use cases as opposed to making these API calls\n // lazily from the client-side.\n if (signFileUrls) await this.addSignedUrls({ recordMap, contentBlockIds, fetchOption })\n\n return recordMap\n }\n\n public async fetchCollections(\n contentBlockIds: string[],\n recordMap: ExtendedRecordMap,\n pageId?: string,\n {\n concurrency,\n fetchOption,\n collectionConcurrency\n }: {\n concurrency: number\n collectionConcurrency?: number\n fetchOption?: FetchOption\n } = { concurrency: 36, fetchOption: { timeout: 20000 }, collectionConcurrency: 300 }\n ): Promise<ExtendedRecordMap> {\n const allCollectionInstances: Array<{\n collectionId: string\n collectionViewId: string\n collectionViewBlockId: string\n }> = contentBlockIds.flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n if (!block) return []\n const collectionId =\n block &&\n (block.type === 'collection_view' || block.type === 'collection_view_page') &&\n getBlockCollectionId(block, recordMap)\n\n if (collectionId)\n if (pageId ? findAncestors(recordMap, block).includes(pageId) : true)\n return block.view_ids?.flatMap(collectionViewId => {\n if (recordMap.collection_query[collectionId]?.[collectionViewId]) return []\n else\n return {\n collectionId,\n collectionViewId,\n collectionViewBlockId: block.id\n }\n })\n return []\n })\n\n // fetch data for all collection view instances\n const resultMap: ExtendedRecordMap = {\n block: {},\n collection: {},\n collection_view: {},\n notion_user: {},\n collection_query: {},\n signed_urls: {}\n }\n await pMap(\n allCollectionInstances.slice(allCollectionInstances.length - collectionConcurrency, allCollectionInstances.length),\n async collectionInstance => {\n const { collectionId, collectionViewId, collectionViewBlockId } = collectionInstance\n const collectionView = recordMap.collection_view[collectionViewId]?.value\n\n try {\n const collectionData = await this.getCollectionData(collectionId, collectionViewId, collectionView, {\n fetchOption\n })\n\n if (collectionData.recordMap) {\n recordMap.block = { ...recordMap.block, ...collectionData.recordMap.block }\n recordMap.collection = { ...recordMap.collection, ...collectionData.recordMap.collection }\n recordMap.collection_view = { ...recordMap.collection_view, ...collectionData.recordMap.collection_view }\n recordMap.notion_user = { ...recordMap.notion_user, ...collectionData.recordMap.notion_user }\n recordMap.collection_query![collectionId] = {\n ...recordMap.collection_query![collectionId],\n [collectionViewId]: collectionData.result?.reducerResults\n }\n resultMap.block = { ...resultMap.block, ...collectionData.recordMap.block }\n resultMap.collection = { ...resultMap.collection, ...collectionData.recordMap.collection }\n resultMap.collection_view = { ...resultMap.collection_view, ...collectionData.recordMap.collection_view }\n resultMap.notion_user = { ...resultMap.notion_user, ...collectionData.recordMap.notion_user }\n resultMap.collection_query![collectionId] = {\n ...resultMap.collection_query![collectionId],\n [collectionViewId]: collectionData.result?.reducerResults\n }\n }\n\n if (!collectionView) {\n const viewBlockData = await this.getPageRaw(collectionViewBlockId, { fetchOption })\n if (viewBlockData.recordMap) {\n normalizeMap(viewBlockData.recordMap.block)\n normalizeMap(viewBlockData.recordMap.collection)\n normalizeMap(viewBlockData.recordMap.collection_view)\n recordMap.collection_view = { ...recordMap.collection_view, ...viewBlockData.recordMap.collection_view }\n resultMap.collection_view = { ...resultMap.collection_view, ...viewBlockData.recordMap.collection_view }\n recordMap.collection = { ...recordMap.collection, ...viewBlockData.recordMap.collection }\n resultMap.collection = { ...resultMap.collection, ...viewBlockData.recordMap.collection }\n recordMap.block = { ...recordMap.block, ...viewBlockData.recordMap.block }\n resultMap.block = { ...resultMap.block, ...viewBlockData.recordMap.block }\n }\n }\n } catch (err) {\n // It's possible for public pages to link to private collections, in which case\n // Notion returns a 400 error\n console.debug('NotionAPI collectionQuery error in page id ', pageId)\n console.error(err)\n }\n },\n {\n concurrency\n }\n )\n return resultMap\n }\n\n public async addSignedUrls({\n recordMap,\n contentBlockIds,\n fetchOption = {}\n }: {\n recordMap: ExtendedRecordMap\n contentBlockIds?: string[]\n fetchOption?: FetchOption\n }) {\n recordMap.signed_urls = {}\n\n if (!contentBlockIds) contentBlockIds = getPageContentBlockIds(recordMap)\n\n const allFileInstances = contentBlockIds.flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n\n if (\n block &&\n (block.type === 'pdf' ||\n block.type === 'audio' ||\n (block.type === 'image' && block.file_ids?.length) ||\n block.type === 'video' ||\n block.type === 'file' ||\n block.type === 'page')\n ) {\n const source = block.type === 'page' ? block.format?.page_cover : block.properties?.source?.[0]?.[0]\n\n if (source) {\n if (!source.includes('secure.notion-static.com') && !source.includes('prod-files-secure')) return []\n\n return {\n permissionRecord: {\n table: 'block',\n id: block.id\n },\n url: source\n }\n }\n }\n\n return []\n })\n\n if (allFileInstances.length > 0)\n try {\n const { signedUrls } = await this.getSignedFileUrls(allFileInstances, fetchOption)\n\n if (signedUrls.length === allFileInstances.length)\n for (let i = 0; i < allFileInstances.length; ++i) {\n const file = allFileInstances[i]\n const signedUrl = signedUrls[i]\n\n recordMap.signed_urls[file.permissionRecord.id] = signedUrl\n }\n } catch (err) {\n console.warn('NotionAPI getSignedfileUrls error', err)\n }\n }\n\n public async getPageRaw(\n pageId: string,\n {\n fetchOption,\n chunkLimit = 100,\n chunkNumber = 0\n }: {\n chunkLimit?: number\n chunkNumber?: number\n fetchOption?: FetchOption\n } = {}\n ) {\n const parsedPageId = parsePageId(pageId)\n\n if (!parsedPageId) throw new Error(`invalid notion pageId \"${pageId}\"`)\n\n const body = {\n pageId: parsedPageId,\n limit: chunkLimit,\n chunkNumber: chunkNumber,\n cursor: { stack: [] },\n verticalColumns: false\n }\n\n return this.fetch<PageChunk>({\n endpoint: 'loadPageChunk',\n body,\n fetchOption\n })\n }\n\n public async getCollectionData(\n collectionId: string,\n collectionViewId: string,\n collectionView: BaseCollectionView,\n {\n limit = 9999,\n searchQuery = '',\n userTimeZone = this._userTimeZone,\n loadContentCover = true,\n fetchOption\n }: {\n type?: CollectionViewType\n limit?: number\n searchQuery?: string\n userTimeZone?: string\n userLocale?: string\n loadContentCover?: boolean\n fetchOption?: FetchOption\n } = {}\n ) {\n const type = collectionView?.type\n const isBoardType = type === 'board'\n const groupBy = isBoardType ? collectionView?.format?.board_columns_by : collectionView?.format?.collection_group_by\n\n let filters = []\n if (collectionView?.format?.property_filters)\n filters = collectionView.format?.property_filters.map(filterObj => {\n //get the inner filter\n return {\n filter: filterObj?.filter?.filter,\n property: filterObj?.filter?.property\n }\n })\n\n //Fixes formula filters from not working\n if (collectionView?.query2?.filter?.filters) filters.push(...collectionView.query2.filter.filters)\n\n let loader: unknown = {\n type: 'reducer',\n reducers: {\n collection_group_results: {\n type: 'results',\n limit,\n loadContentCover\n }\n },\n sort: [],\n ...collectionView?.query2,\n filter: {\n filters: filters,\n operator: 'and'\n },\n searchQuery,\n userTimeZone\n }\n\n if (groupBy) {\n const groups = collectionView?.format?.board_columns || collectionView?.format?.collection_groups || []\n const iterators = [isBoardType ? 'board' : 'group_aggregation', 'results']\n const operators = {\n checkbox: 'checkbox_is',\n url: 'string_starts_with',\n text: 'string_starts_with',\n select: 'enum_is',\n multi_select: 'enum_contains',\n created_time: 'date_is_within',\n ['undefined']: 'is_empty'\n }\n\n const reducersQuery = {}\n for (const group of groups) {\n const {\n property,\n value: { value, type }\n } = group\n\n for (const iterator of iterators) {\n const iteratorProps =\n iterator === 'results'\n ? {\n type: iterator,\n limit\n }\n : {\n type: 'aggregation',\n aggregation: {\n aggregator: 'count'\n }\n }\n\n const isUncategorizedValue = typeof value === 'undefined'\n const isDateValue = value?.range\n // TODO: review dates reducers\n const queryLabel = isUncategorizedValue\n ? 'uncategorized'\n : isDateValue\n ? value.range?.start_date || value.range?.end_date\n : value?.value || value\n\n const queryValue = !isUncategorizedValue && (isDateValue || value?.value || value)\n\n reducersQuery[`${iterator}:${type}:${queryLabel}`] = {\n ...iteratorProps,\n filter: {\n operator: 'and',\n filters: [\n {\n property,\n filter: {\n operator: !isUncategorizedValue ? operators[type] : 'is_empty',\n ...(!isUncategorizedValue && {\n value: {\n type: 'exact',\n value: queryValue\n }\n })\n }\n }\n ]\n }\n }\n }\n }\n\n const reducerLabel = isBoardType ? 'board_columns' : `${type}_groups`\n loader = {\n type: 'reducer',\n reducers: {\n [reducerLabel]: {\n type: 'groups',\n groupBy,\n ...(collectionView?.query2?.filter && {\n filter: collectionView?.query2?.filter\n }),\n groupSortPreference: groups.map(group => group?.value),\n limit\n },\n ...reducersQuery\n },\n ...collectionView?.query2,\n searchQuery,\n userTimeZone,\n filter: { filters, operator: 'and' }\n }\n }\n\n const response = await this.fetch<ReducerResponse<CollectionQueryResult>>({\n endpoint: 'queryCollection',\n body: {\n collection: { id: collectionId },\n collectionView: { id: collectionViewId },\n loader\n },\n fetchOption\n })\n\n // Normalize queryCollection recordMap — Notion API now wraps entries with\n // {spaceId, value: {value, role}} instead of {value, role}. Unwrap so\n // downstream code can use entry.value.* consistently with loadPageChunk.\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n\n return response\n }\n\n public async getUsers(userIds: string[], fetchOption?: FetchOption) {\n return this.fetch<RecordValues<User>>({\n endpoint: 'getRecordValues',\n body: { requests: userIds.map(id => ({ id, table: 'notion_user' })) },\n fetchOption\n })\n }\n\n public async getSpaces(spaceIds: string[], fetchOption?: FetchOption) {\n return this.fetch<RecordValues<Space>>({\n endpoint: 'getRecordValues',\n body: { requests: spaceIds.map(id => ({ id, table: 'space' })) },\n fetchOption\n })\n }\n\n public async getBlocks(blockIds: string[], fetchOption?: FetchOption) {\n const response = await this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: blockIds.map(blockId => ({ table: 'block', id: blockId, version: -1 })) },\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n return response\n }\n\n public async syncRecords(records: { id: string; table: string }[], fetchOption?: FetchOption) {\n const response = await this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: records.map(({ id, table }) => ({ table, id, version: -1 })) },\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n return response\n }\n\n public async getSignedFileUrls(urls: SignedUrlRequest[], fetchOption?: FetchOption) {\n return this.fetch<SignedUrlResponse>({\n endpoint: 'getSignedFileUrls',\n body: { urls },\n fetchOption\n })\n }\n\n public async search(params: SearchParams, fetchOption?: FetchOption) {\n const body: SearchParams = {\n type: 'BlocksInSpace',\n source: 'quick_find_filters',\n spaceId: parsePageId(params.spaceId),\n sort: { field: 'relevance' },\n limit: params.limit || 20,\n query: params.query,\n filters: {\n isDeletedOnly: false,\n navigableBlockContentOnly: false,\n excludeTemplates: true,\n requireEditPermissions: false,\n includePublicPagesWithoutExplicitAccess: true,\n createdBy: [],\n editedBy: [],\n lastEditedTime: {},\n createdTime: {},\n ...params.filters,\n ancestors: params.filters?.ancestors ? params.filters.ancestors.map(id => parsePageId(id)) : []\n }\n }\n const response = await this.fetch<SearchResults>({\n endpoint: 'search',\n body,\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n // Ensure consistent shape — Notion API may omit these keys\n response.recordMap.block = response.recordMap.block ?? {}\n response.recordMap.collection = response.recordMap.collection ?? {}\n response.recordMap.collection_view = response.recordMap.collection_view ?? {}\n response.recordMap.notion_user = response.recordMap.notion_user ?? {}\n }\n return response\n }\n\n /**\n * Backlink function which requires an authToken for NotionAPI client.\n * @param params object to pass black and space id\n * @param fetchOption Fetch options\n * @returns backlink list with recordmap\n */\n public async getBacklinks(params: BacklinkParams, fetchOption?: FetchOption) {\n const body: BacklinkParams = {\n block: {\n id: parsePageId(params.block.id),\n spaceId: parsePageId(params.block.spaceId)\n }\n }\n\n const response = await this.fetch<BacklinkResults>({\n endpoint: 'getBacklinksForBlockInitial',\n body,\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n response.recordMap.block = response.recordMap.block ?? {}\n response.recordMap.collection = response.recordMap.collection ?? {}\n response.recordMap.collection_view = response.recordMap.collection_view ?? {}\n response.recordMap.notion_user = response.recordMap.notion_user ?? {}\n }\n return response\n }\n\n public async fetch<T>({\n endpoint,\n body,\n fetchOption,\n headers: clientHeaders\n }: {\n endpoint: string\n body: object\n fetchOption?: FetchOption\n headers?: HeadersInit\n }): Promise<T> {\n const headers: HeadersInit = {\n ...clientHeaders,\n ...fetchOption?.headers,\n 'Content-Type': 'application/json'\n }\n\n if (this._authToken) headers['cookie'] = `token_v2=${this._authToken}`\n if (this._activeUser) headers['x-notion-active-user-header'] = this._activeUser\n\n const url = `${this._apiBaseUrl}/${endpoint}`\n const requestInit = {\n method: 'post',\n body: JSON.stringify(body),\n headers,\n ...fetchOption\n }\n if (fetchOption?.timeout !== undefined) {\n const ctrl = new AbortController()\n setTimeout(() => ctrl.abort(), fetchOption.timeout)\n requestInit.signal = ctrl.signal\n }\n\n return fetch(url, requestInit).then(res => res.json())\n }\n}\n\n// Notion's queryCollection API wraps entries as {spaceId, value: {value, role}}\n// instead of {value, role}. Unwrap in-place to match loadPageChunk format.\nfunction normalizeMap<T>(map: NotionMap<T> | undefined) {\n if (!map) return\n for (const id of Object.keys(map)) {\n const entry: any = map[id]\n // Notion API now wraps entries as {spaceId, value: {value?, role}} — unwrap\n if (entry?.spaceId && entry.value) map[id] = entry.value\n }\n}\n"],"names":["NotionAPI","apiBaseUrl","authToken","activeUser","userTimeZone","_0","__async","pageId","concurrency","fetchFullInfo","fetchCollections","signFileUrls","chunkLimit","chunkNumber","fetchOption","page","recordMap","uuidToId","normalizeMap","_a","_b","_c","promises","pendingUserIDs","getPageContentUserIds","id","res","pendingBlocks","getPageContentBlockIds","rootBlock","pendingSpaces","newUsers","newBlocks","newSpaces","__spreadValues","contentBlockIds","_1","_2","collectionConcurrency","allCollectionInstances","blockId","block","collectionId","getBlockCollectionId","findAncestors","collectionViewId","resultMap","pMap","collectionInstance","collectionViewBlockId","collectionView","collectionData","__spreadProps","viewBlockData","err","allFileInstances","source","_f","_e","_d","signedUrls","i","file","signedUrl","parsedPageId","parsePageId","body","limit","searchQuery","loadContentCover","type","isBoardType","groupBy","filters","filterObj","loader","groups","_g","_h","iterators","operators","reducersQuery","group","property","value","iterator","iteratorProps","isUncategorizedValue","isDateValue","queryLabel","_i","_j","queryValue","reducerLabel","_k","_l","response","userIds","spaceIds","blockIds","records","table","urls","params","endpoint","clientHeaders","headers","url","requestInit","ctrl","map","entry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/notion-api.ts"],"sourcesContent":["import {\n getBlockCollectionId,\n getPageContentBlockIds,\n getPageContentUserIds,\n parsePageId,\n uuidToId,\n findAncestors\n} from '@texonom/nutils'\nimport pMap from 'p-map'\n\nimport type {\n ExtendedRecordMap,\n NotionMap,\n PageChunk,\n BaseCollectionView,\n CollectionViewType,\n ReducerResponse,\n CollectionQueryResult,\n RecordValues,\n User,\n Space,\n SearchParams,\n SearchResults,\n BacklinkParams,\n BacklinkResults\n} from '@texonom/ntypes'\n\nimport type { SignedUrlRequest, FetchOption, SignedUrlResponse } from './types'\n\n/**\n * Main Notion API client.\n */\nexport class NotionAPI {\n private readonly _apiBaseUrl: string\n private readonly _authToken?: string\n private readonly _activeUser?: string\n private readonly _userTimeZone: string\n\n constructor({\n apiBaseUrl = 'https://www.notion.so/api/v3',\n authToken,\n activeUser,\n userTimeZone = 'America/New_York'\n }: {\n apiBaseUrl?: string\n authToken?: string\n userLocale?: string\n userTimeZone?: string\n activeUser?: string\n } = {}) {\n this._apiBaseUrl = apiBaseUrl\n this._authToken = authToken\n this._activeUser = activeUser\n this._userTimeZone = userTimeZone\n }\n\n public async getPage(\n pageId: string,\n {\n concurrency = 3,\n fetchFullInfo = true,\n fetchCollections = true,\n signFileUrls = true,\n chunkLimit = 100,\n chunkNumber = 0,\n fetchOption\n }: {\n concurrency?: number\n fetchFullInfo?: boolean\n fetchCollections?: boolean\n signFileUrls?: boolean\n chunkLimit?: number\n chunkNumber?: number\n fetchOption?: FetchOption\n } = {}\n ): Promise<ExtendedRecordMap> {\n const page = await this.getPageRaw(pageId, {\n chunkLimit,\n chunkNumber,\n fetchOption\n })\n const recordMap = page?.recordMap as ExtendedRecordMap\n if (!recordMap?.block) throw new Error(`Notion page not found \"${uuidToId(pageId)}\"`)\n\n // Normalize nested API format from loadPageChunk\n normalizeMap(recordMap.block)\n normalizeMap(recordMap.collection)\n normalizeMap(recordMap.collection_view)\n normalizeMap(recordMap.notion_user)\n\n // ensure that all top-level maps exist\n recordMap.collection = recordMap.collection ?? {}\n recordMap.collection_view = recordMap.collection_view ?? {}\n recordMap.notion_user = recordMap.notion_user ?? {}\n\n // additional mappings added for convenience\n // note: these are not native notion objects\n recordMap.collection_query = {}\n recordMap.signed_urls = {}\n\n // Fetch Users\n if (fetchFullInfo) {\n const promises = []\n // Fetch any missing users\n const pendingUserIDs = getPageContentUserIds(recordMap).filter(id => !recordMap.notion_user[id])\n promises.push(this.getUsers(pendingUserIDs, fetchOption).then(res => res?.recordMapWithRoles?.notion_user))\n\n // Fetch any missing content blocks\n const pendingBlocks = getPageContentBlockIds(recordMap).filter(id => !recordMap.block[id])\n promises.push(this.getBlocks(pendingBlocks, fetchOption).then(res => res.recordMap.block))\n\n // Fetch any missing content blocks\n const rootBlock = Object.values(recordMap.block)[0].value\n const pendingSpaces = rootBlock.parent_table === 'space' ? [rootBlock.parent_id] : []\n promises.push(this.getSpaces(pendingSpaces, fetchOption).then(res => res.recordMapWithRoles?.space))\n\n // Append them\n const [newUsers, newBlocks, newSpaces] = await Promise.all(promises)\n recordMap.notion_user = { ...recordMap.notion_user, ...newUsers }\n recordMap.block = { ...recordMap.block, ...newBlocks }\n recordMap.space = { ...recordMap.space, ...newSpaces }\n\n // Normalize after merging syncRecordValues/getRecordValues data\n normalizeMap(recordMap.block)\n normalizeMap(recordMap.collection)\n normalizeMap(recordMap.notion_user)\n }\n\n // Optionally fetch all data for embedded collections and their associated views.\n // NOTE: We're eagerly fetching *all* data for each collection and all of its views.\n // This is really convenient in order to ensure that all data needed for a given\n // Notion page is readily available for use cases involving server-side rendering\n // and edge caching.\n\n const contentBlockIds = getPageContentBlockIds(recordMap)\n if (fetchCollections) await this.fetchCollections(contentBlockIds, recordMap, pageId, { concurrency, fetchOption })\n\n // Optionally fetch signed URLs for any embedded files.\n // NOTE: Similar to collection data, we default to eagerly fetching signed URL info\n // because it is preferable for many use cases as opposed to making these API calls\n // lazily from the client-side.\n if (signFileUrls) await this.addSignedUrls({ recordMap, contentBlockIds, fetchOption })\n\n return recordMap\n }\n\n public async fetchCollections(\n contentBlockIds: string[],\n recordMap: ExtendedRecordMap,\n pageId?: string,\n {\n concurrency,\n fetchOption,\n collectionConcurrency\n }: {\n concurrency: number\n collectionConcurrency?: number\n fetchOption?: FetchOption\n } = { concurrency: 36, fetchOption: { timeout: 20000 }, collectionConcurrency: 300 }\n ): Promise<ExtendedRecordMap> {\n const allCollectionInstances: Array<{\n collectionId: string\n collectionViewId: string\n collectionViewBlockId: string\n }> = contentBlockIds.flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n if (!block) return []\n const collectionId =\n block &&\n (block.type === 'collection_view' || block.type === 'collection_view_page') &&\n getBlockCollectionId(block, recordMap)\n\n if (collectionId)\n if (pageId ? findAncestors(recordMap, block).includes(pageId) : true)\n return block.view_ids?.flatMap(collectionViewId => {\n if (recordMap.collection_query[collectionId]?.[collectionViewId]) return []\n else\n return {\n collectionId,\n collectionViewId,\n collectionViewBlockId: block.id\n }\n })\n return []\n })\n\n // fetch data for all collection view instances\n const resultMap: ExtendedRecordMap = {\n block: {},\n collection: {},\n collection_view: {},\n notion_user: {},\n collection_query: {},\n signed_urls: {}\n }\n await pMap(\n allCollectionInstances.slice(allCollectionInstances.length - collectionConcurrency, allCollectionInstances.length),\n async collectionInstance => {\n const { collectionId, collectionViewId, collectionViewBlockId } = collectionInstance\n const collectionView = recordMap.collection_view[collectionViewId]?.value\n\n try {\n const collectionData = await this.getCollectionData(collectionId, collectionViewId, collectionView, {\n fetchOption\n })\n\n if (collectionData.recordMap) {\n recordMap.block = { ...recordMap.block, ...collectionData.recordMap.block }\n recordMap.collection = { ...recordMap.collection, ...collectionData.recordMap.collection }\n recordMap.collection_view = { ...recordMap.collection_view, ...collectionData.recordMap.collection_view }\n recordMap.notion_user = { ...recordMap.notion_user, ...collectionData.recordMap.notion_user }\n recordMap.collection_query![collectionId] = {\n ...recordMap.collection_query![collectionId],\n [collectionViewId]: collectionData.result?.reducerResults\n }\n resultMap.block = { ...resultMap.block, ...collectionData.recordMap.block }\n resultMap.collection = { ...resultMap.collection, ...collectionData.recordMap.collection }\n resultMap.collection_view = { ...resultMap.collection_view, ...collectionData.recordMap.collection_view }\n resultMap.notion_user = { ...resultMap.notion_user, ...collectionData.recordMap.notion_user }\n resultMap.collection_query![collectionId] = {\n ...resultMap.collection_query![collectionId],\n [collectionViewId]: collectionData.result?.reducerResults\n }\n }\n\n if (!collectionView) {\n const viewBlockData = await this.getPageRaw(collectionViewBlockId, { fetchOption })\n if (viewBlockData.recordMap) {\n normalizeMap(viewBlockData.recordMap.block)\n normalizeMap(viewBlockData.recordMap.collection)\n normalizeMap(viewBlockData.recordMap.collection_view)\n recordMap.collection_view = { ...recordMap.collection_view, ...viewBlockData.recordMap.collection_view }\n resultMap.collection_view = { ...resultMap.collection_view, ...viewBlockData.recordMap.collection_view }\n recordMap.collection = { ...recordMap.collection, ...viewBlockData.recordMap.collection }\n resultMap.collection = { ...resultMap.collection, ...viewBlockData.recordMap.collection }\n recordMap.block = { ...recordMap.block, ...viewBlockData.recordMap.block }\n resultMap.block = { ...resultMap.block, ...viewBlockData.recordMap.block }\n }\n }\n } catch (err) {\n // It's possible for public pages to link to private collections, in which case\n // Notion returns a 400 error\n console.debug('NotionAPI collectionQuery error in page id ', pageId)\n console.error(err)\n }\n },\n {\n concurrency\n }\n )\n return resultMap\n }\n\n public async addSignedUrls({\n recordMap,\n contentBlockIds,\n fetchOption = {}\n }: {\n recordMap: ExtendedRecordMap\n contentBlockIds?: string[]\n fetchOption?: FetchOption\n }) {\n recordMap.signed_urls = {}\n\n if (!contentBlockIds) contentBlockIds = getPageContentBlockIds(recordMap)\n\n const allFileInstances = contentBlockIds.flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n\n if (\n block &&\n (block.type === 'pdf' ||\n block.type === 'audio' ||\n (block.type === 'image' && block.file_ids?.length) ||\n block.type === 'video' ||\n block.type === 'file' ||\n block.type === 'page')\n ) {\n const source = block.type === 'page' ? block.format?.page_cover : block.properties?.source?.[0]?.[0]\n\n if (source) {\n if (!source.includes('secure.notion-static.com') && !source.includes('prod-files-secure')) return []\n\n return {\n permissionRecord: {\n table: 'block',\n id: block.id\n },\n url: source\n }\n }\n }\n\n return []\n })\n\n if (allFileInstances.length > 0)\n try {\n const { signedUrls } = await this.getSignedFileUrls(allFileInstances, fetchOption)\n\n if (signedUrls.length === allFileInstances.length)\n for (let i = 0; i < allFileInstances.length; ++i) {\n const file = allFileInstances[i]\n const signedUrl = signedUrls[i]\n\n recordMap.signed_urls[file.permissionRecord.id] = signedUrl\n }\n } catch (err) {\n console.warn('NotionAPI getSignedfileUrls error', err)\n }\n }\n\n public async getPageRaw(\n pageId: string,\n {\n fetchOption,\n chunkLimit = 100,\n chunkNumber = 0\n }: {\n chunkLimit?: number\n chunkNumber?: number\n fetchOption?: FetchOption\n } = {}\n ) {\n const parsedPageId = parsePageId(pageId)\n\n if (!parsedPageId) throw new Error(`invalid notion pageId \"${pageId}\"`)\n\n const body = {\n pageId: parsedPageId,\n limit: chunkLimit,\n chunkNumber: chunkNumber,\n cursor: { stack: [] },\n verticalColumns: false\n }\n\n return this.fetch<PageChunk>({\n endpoint: 'loadPageChunk',\n body,\n fetchOption\n })\n }\n\n public async getCollectionData(\n collectionId: string,\n collectionViewId: string,\n collectionView: BaseCollectionView,\n {\n limit = 9999,\n searchQuery = '',\n userTimeZone = this._userTimeZone,\n loadContentCover = true,\n fetchOption\n }: {\n type?: CollectionViewType\n limit?: number\n searchQuery?: string\n userTimeZone?: string\n userLocale?: string\n loadContentCover?: boolean\n fetchOption?: FetchOption\n } = {}\n ) {\n const type = collectionView?.type\n const isBoardType = type === 'board'\n const groupBy = isBoardType ? collectionView?.format?.board_columns_by : collectionView?.format?.collection_group_by\n\n let filters = []\n if (collectionView?.format?.property_filters)\n filters = collectionView.format?.property_filters.map(filterObj => {\n //get the inner filter\n return {\n filter: filterObj?.filter?.filter,\n property: filterObj?.filter?.property\n }\n })\n\n //Fixes formula filters from not working\n if (collectionView?.query2?.filter?.filters) filters.push(...collectionView.query2.filter.filters)\n\n let loader: unknown = {\n type: 'reducer',\n reducers: {\n collection_group_results: {\n type: 'results',\n limit,\n loadContentCover\n }\n },\n sort: [],\n ...collectionView?.query2,\n filter: {\n filters: filters,\n operator: 'and'\n },\n searchQuery,\n userTimeZone\n }\n\n if (groupBy) {\n const groups = collectionView?.format?.board_columns || collectionView?.format?.collection_groups || []\n const iterators = [isBoardType ? 'board' : 'group_aggregation', 'results']\n const operators = {\n checkbox: 'checkbox_is',\n url: 'string_starts_with',\n text: 'string_starts_with',\n select: 'enum_is',\n multi_select: 'enum_contains',\n created_time: 'date_is_within',\n ['undefined']: 'is_empty'\n }\n\n const reducersQuery = {}\n for (const group of groups) {\n const {\n property,\n value: { value, type }\n } = group\n\n for (const iterator of iterators) {\n const iteratorProps =\n iterator === 'results'\n ? {\n type: iterator,\n limit\n }\n : {\n type: 'aggregation',\n aggregation: {\n aggregator: 'count'\n }\n }\n\n const isUncategorizedValue = typeof value === 'undefined'\n const isDateValue = value?.range\n // TODO: review dates reducers\n const queryLabel = isUncategorizedValue\n ? 'uncategorized'\n : isDateValue\n ? value.range?.start_date || value.range?.end_date\n : value?.value || value\n\n const queryValue = !isUncategorizedValue && (isDateValue || value?.value || value)\n\n reducersQuery[`${iterator}:${type}:${queryLabel}`] = {\n ...iteratorProps,\n filter: {\n operator: 'and',\n filters: [\n {\n property,\n filter: {\n operator: !isUncategorizedValue ? operators[type] : 'is_empty',\n ...(!isUncategorizedValue && {\n value: {\n type: 'exact',\n value: queryValue\n }\n })\n }\n }\n ]\n }\n }\n }\n }\n\n const reducerLabel = isBoardType ? 'board_columns' : `${type}_groups`\n loader = {\n type: 'reducer',\n reducers: {\n [reducerLabel]: {\n type: 'groups',\n groupBy,\n ...(collectionView?.query2?.filter && {\n filter: collectionView?.query2?.filter\n }),\n groupSortPreference: groups.map(group => group?.value),\n limit\n },\n ...reducersQuery\n },\n ...collectionView?.query2,\n searchQuery,\n userTimeZone,\n filter: { filters, operator: 'and' }\n }\n }\n\n const response = await this.fetch<ReducerResponse<CollectionQueryResult>>({\n endpoint: 'queryCollection',\n body: {\n collection: { id: collectionId },\n collectionView: { id: collectionViewId },\n loader\n },\n fetchOption\n })\n\n // Normalize queryCollection recordMap — Notion API now wraps entries with\n // {spaceId, value: {value, role}} instead of {value, role}. Unwrap so\n // downstream code can use entry.value.* consistently with loadPageChunk.\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n\n return response\n }\n\n public async getUsers(userIds: string[], fetchOption?: FetchOption) {\n return this.fetch<RecordValues<User>>({\n endpoint: 'getRecordValues',\n body: { requests: userIds.map(id => ({ id, table: 'notion_user' })) },\n fetchOption\n })\n }\n\n public async getSpaces(spaceIds: string[], fetchOption?: FetchOption) {\n return this.fetch<RecordValues<Space>>({\n endpoint: 'getRecordValues',\n body: { requests: spaceIds.map(id => ({ id, table: 'space' })) },\n fetchOption\n })\n }\n\n public async getBlocks(blockIds: string[], fetchOption?: FetchOption) {\n const response = await this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: blockIds.map(blockId => ({ table: 'block', id: blockId, version: -1 })) },\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n return response\n }\n\n public async syncRecords(records: { id: string; table: string }[], fetchOption?: FetchOption) {\n const response = await this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: records.map(({ id, table }) => ({ table, id, version: -1 })) },\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n }\n return response\n }\n\n public async getSignedFileUrls(urls: SignedUrlRequest[], fetchOption?: FetchOption) {\n return this.fetch<SignedUrlResponse>({\n endpoint: 'getSignedFileUrls',\n body: { urls },\n fetchOption\n })\n }\n\n public async search(params: SearchParams, fetchOption?: FetchOption) {\n const body: SearchParams = {\n type: 'BlocksInSpace',\n source: 'quick_find_filters',\n spaceId: parsePageId(params.spaceId),\n sort: { field: 'relevance' },\n limit: params.limit || 20,\n query: params.query,\n filters: {\n isDeletedOnly: false,\n navigableBlockContentOnly: false,\n excludeTemplates: true,\n requireEditPermissions: false,\n includePublicPagesWithoutExplicitAccess: true,\n createdBy: [],\n editedBy: [],\n lastEditedTime: {},\n createdTime: {},\n ...params.filters,\n ancestors: params.filters?.ancestors ? params.filters.ancestors.map(id => parsePageId(id)) : []\n }\n }\n const response = await this.fetch<SearchResults>({\n endpoint: 'search',\n body,\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n // Ensure consistent shape — Notion API may omit these keys\n response.recordMap.block = response.recordMap.block ?? {}\n response.recordMap.collection = response.recordMap.collection ?? {}\n response.recordMap.collection_view = response.recordMap.collection_view ?? {}\n response.recordMap.notion_user = response.recordMap.notion_user ?? {}\n }\n return response\n }\n\n /**\n * Backlink function which requires an authToken for NotionAPI client.\n * @param params object to pass black and space id\n * @param fetchOption Fetch options\n * @returns backlink list with recordmap\n */\n public async getBacklinks(params: BacklinkParams, fetchOption?: FetchOption) {\n const body: BacklinkParams = {\n block: {\n id: parsePageId(params.block.id),\n spaceId: parsePageId(params.block.spaceId)\n }\n }\n\n const response = await this.fetch<BacklinkResults>({\n endpoint: 'getBacklinksForBlockInitial',\n body,\n fetchOption\n })\n if (response.recordMap) {\n normalizeMap(response.recordMap.block)\n normalizeMap(response.recordMap.collection)\n normalizeMap(response.recordMap.collection_view)\n normalizeMap(response.recordMap.notion_user)\n response.recordMap.block = response.recordMap.block ?? {}\n response.recordMap.collection = response.recordMap.collection ?? {}\n response.recordMap.collection_view = response.recordMap.collection_view ?? {}\n response.recordMap.notion_user = response.recordMap.notion_user ?? {}\n }\n return response\n }\n\n public async fetch<T>({\n endpoint,\n body,\n fetchOption,\n headers: clientHeaders\n }: {\n endpoint: string\n body: object\n fetchOption?: FetchOption\n headers?: HeadersInit\n }): Promise<T> {\n const headers: HeadersInit = {\n ...clientHeaders,\n ...fetchOption?.headers,\n 'Content-Type': 'application/json'\n }\n\n if (this._authToken) headers['cookie'] = `token_v2=${this._authToken}`\n if (this._activeUser) headers['x-notion-active-user-header'] = this._activeUser\n\n const url = `${this._apiBaseUrl}/${endpoint}`\n const requestInit = {\n method: 'post',\n body: JSON.stringify(body),\n headers,\n ...fetchOption\n }\n if (fetchOption?.timeout !== undefined) {\n const ctrl = new AbortController()\n setTimeout(() => ctrl.abort(), fetchOption.timeout)\n requestInit.signal = ctrl.signal\n }\n\n return fetch(url, requestInit).then(res => res.json())\n }\n}\n\n// Notion's queryCollection API wraps entries as {spaceId, value: {value, role}}\n// instead of {value, role}. Unwrap in-place to match loadPageChunk format.\nfunction normalizeMap<T>(map: NotionMap<T> | undefined) {\n if (!map) return\n for (const id of Object.keys(map)) {\n const entry: any = map[id]\n // Notion API wraps entries in two formats:\n // 1. {spaceId, value: {value?, role}} — unwrap to {value?, role}\n // 2. {value: {value: {...}}} — no spaceId, no role — unwrap to {value: {...}}\n if (entry?.spaceId && entry.value) map[id] = entry.value\n else if (entry?.value?.value && !entry.role && !entry.type) map[id] = entry.value\n }\n}\n"],"names":["NotionAPI","apiBaseUrl","authToken","activeUser","userTimeZone","_0","__async","pageId","concurrency","fetchFullInfo","fetchCollections","signFileUrls","chunkLimit","chunkNumber","fetchOption","page","recordMap","uuidToId","normalizeMap","_a","_b","_c","promises","pendingUserIDs","getPageContentUserIds","id","res","pendingBlocks","getPageContentBlockIds","rootBlock","pendingSpaces","newUsers","newBlocks","newSpaces","__spreadValues","contentBlockIds","_1","_2","collectionConcurrency","allCollectionInstances","blockId","block","collectionId","getBlockCollectionId","findAncestors","collectionViewId","resultMap","pMap","collectionInstance","collectionViewBlockId","collectionView","collectionData","__spreadProps","viewBlockData","err","allFileInstances","source","_f","_e","_d","signedUrls","i","file","signedUrl","parsedPageId","parsePageId","body","limit","searchQuery","loadContentCover","type","isBoardType","groupBy","filters","filterObj","loader","groups","_g","_h","iterators","operators","reducersQuery","group","property","value","iterator","iteratorProps","isUncategorizedValue","isDateValue","queryLabel","_i","_j","queryValue","reducerLabel","_k","_l","response","userIds","spaceIds","blockIds","records","table","urls","params","endpoint","clientHeaders","headers","url","requestInit","ctrl","map","entry"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@texonom/nclient",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Robust TypeScript client for the unofficial Notion API.",
|
|
6
6
|
"repository": "texonom/notion-node",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"p-map": "^5.5.0",
|
|
21
|
-
"@texonom/
|
|
22
|
-
"@texonom/
|
|
21
|
+
"@texonom/nutils": "^1.5.10",
|
|
22
|
+
"@texonom/ntypes": "^1.5.10"
|
|
23
23
|
},
|
|
24
24
|
"standard-version": {
|
|
25
25
|
"skip": {
|