@texonom/nclient 1.6.1 → 1.6.4

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 CHANGED
@@ -1,437 +1,476 @@
1
- var V = Object.defineProperty, ee = Object.defineProperties;
2
- var oe = Object.getOwnPropertyDescriptors;
3
- var Z = Object.getOwnPropertySymbols;
4
- var te = Object.prototype.hasOwnProperty, re = Object.prototype.propertyIsEnumerable;
5
- var G = (_, t, o) => t in _ ? V(_, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : _[t] = o, n = (_, t) => {
6
- for (var o in t || (t = {}))
7
- te.call(t, o) && G(_, o, t[o]);
8
- if (Z)
9
- for (var o of Z(t))
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
- var d = (i) => {
15
- try {
16
- c(o.next(i));
17
- } catch (y) {
18
- s(y);
19
- }
20
- }, l = (i) => {
21
- try {
22
- c(o.throw(i));
23
- } catch (y) {
24
- s(y);
25
- }
26
- }, c = (i) => i.done ? e(i.value) : Promise.resolve(i.value).then(d, l);
27
- c((o = o.apply(_, t)).next());
28
- });
29
- import { uuidToId as se, getPageContentUserIds as ne, getPageContentBlockIds as E, getBlockCollectionId as ce, findAncestors as ie, parsePageId as w } from "@texonom/nutils";
30
- import ae from "p-map";
31
- class pe {
32
- constructor({
33
- apiBaseUrl: t = "https://www.notion.so/api/v3",
34
- authToken: o,
35
- activeUser: e,
36
- userTimeZone: s = "America/New_York"
37
- } = {}) {
38
- this._apiBaseUrl = t, this._authToken = o, this._activeUser = e, this._userTimeZone = s;
39
- }
40
- getPage(y) {
41
- return k(this, arguments, function* (t, {
42
- concurrency: o = 3,
43
- fetchFullInfo: e = !0,
44
- fetchCollections: s = !0,
45
- signFileUrls: d = !0,
46
- chunkLimit: l = 100,
47
- chunkNumber: c = 0,
48
- fetchOption: i
49
- } = {}) {
50
- var u, p, B;
51
- const m = yield this.getPageRaw(t, {
52
- chunkLimit: l,
53
- chunkNumber: c,
54
- fetchOption: i
55
- }), r = m == null ? void 0 : m.recordMap;
56
- if (!(r != null && r.block)) throw new Error(`Notion page not found "${se(t)}"`);
57
- if (a(r.block), a(r.collection), a(r.collection_view), a(r.notion_user), r.collection = (u = r.collection) != null ? u : {}, r.collection_view = (p = r.collection_view) != null ? p : {}, r.notion_user = (B = r.notion_user) != null ? B : {}, r.collection_query = {}, r.signed_urls = {}, e) {
58
- const M = [], b = ne(r).filter((h) => !r.notion_user[h]);
59
- M.push(this.getUsers(b, i).then((h) => {
60
- var R;
61
- return (R = h == null ? void 0 : h.recordMapWithRoles) == null ? void 0 : R.notion_user;
62
- }));
63
- const I = E(r).filter((h) => !r.block[h]);
64
- M.push(this.getBlocks(I, i).then((h) => h.recordMap.block));
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
- var R;
68
- return (R = h.recordMapWithRoles) == null ? void 0 : R.space;
69
- }));
70
- const [f, T, $] = yield Promise.all(M);
71
- r.notion_user = n(n({}, r.notion_user), f), r.block = n(n({}, r.block), T), r.space = n(n({}, r.space), $), a(r.block), a(r.collection), a(r.notion_user);
72
- }
73
- const q = E(r);
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
- });
76
- }
77
- fetchCollections(c, i, y) {
78
- return k(this, arguments, function* (t, o, e, {
79
- concurrency: s,
80
- fetchOption: d,
81
- collectionConcurrency: l
82
- } = { concurrency: 36, fetchOption: { timeout: 2e4 }, collectionConcurrency: 300 }) {
83
- const m = t.flatMap((q) => {
84
- var B, M;
85
- const u = (B = o.block[q]) == null ? void 0 : B.value;
86
- if (!u) return [];
87
- const p = u && (u.type === "collection_view" || u.type === "collection_view_page") && ce(u, o);
88
- return p && (!e || ie(o, u).includes(e)) ? (M = u.view_ids) == null ? void 0 : M.flatMap((b) => {
89
- var I;
90
- return (I = o.collection_query[p]) != null && I[b] ? [] : {
91
- collectionId: p,
92
- collectionViewId: b,
93
- collectionViewBlockId: u.id
94
- };
95
- }) : [];
96
- }), r = {
97
- block: {},
98
- collection: {},
99
- collection_view: {},
100
- notion_user: {},
101
- collection_query: {},
102
- signed_urls: {}
103
- };
104
- return yield ae(
105
- m.slice(m.length - l, m.length),
106
- (q) => k(this, null, function* () {
107
- var b, I, C;
108
- const { collectionId: u, collectionViewId: p, collectionViewBlockId: B } = q, M = (b = o.collection_view[p]) == null ? void 0 : b.value;
109
- try {
110
- const g = yield this.getCollectionData(u, p, M, {
111
- fetchOption: d
112
- });
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
- })), !M) {
118
- const f = yield this.getPageRaw(B, { fetchOption: d });
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
- }
121
- } catch (g) {
122
- console.debug("NotionAPI collectionQuery error in page id ", e), console.error(g);
123
- }
124
- }),
125
- {
126
- concurrency: s
127
- }
128
- ), r;
129
- });
130
- }
131
- addSignedUrls(s) {
132
- return k(this, arguments, function* ({
133
- recordMap: t,
134
- contentBlockIds: o,
135
- fetchOption: e = {}
136
- }) {
137
- t.signed_urls = {}, o || (o = E(t));
138
- const d = o.flatMap((l) => {
139
- var i, y, m, r, q, u;
140
- const c = (i = t.block[l]) == null ? void 0 : i.value;
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
- 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
- if (p)
144
- return !p.includes("secure.notion-static.com") && !p.includes("prod-files-secure") ? [] : {
145
- permissionRecord: {
146
- table: "block",
147
- id: c.id
148
- },
149
- url: p
150
- };
151
- }
152
- return [];
153
- });
154
- if (d.length > 0)
155
- try {
156
- const { signedUrls: l } = yield this.getSignedFileUrls(d, e);
157
- if (l.length === d.length)
158
- for (let c = 0; c < d.length; ++c) {
159
- const i = d[c], y = l[c];
160
- t.signed_urls[i.permissionRecord.id] = y;
161
- }
162
- } catch (l) {
163
- console.warn("NotionAPI getSignedfileUrls error", l);
164
- }
165
- });
166
- }
167
- getPageRaw(d) {
168
- return k(this, arguments, function* (t, {
169
- fetchOption: o,
170
- chunkLimit: e = 100,
171
- chunkNumber: s = 0
172
- } = {}) {
173
- const l = w(t);
174
- if (!l) throw new Error(`invalid notion pageId "${t}"`);
175
- const c = {
176
- pageId: l,
177
- limit: e,
178
- chunkNumber: s,
179
- cursor: { stack: [] },
180
- verticalColumns: !1
181
- };
182
- return this.fetch({
183
- endpoint: "loadPageChunk",
184
- body: c,
185
- fetchOption: o
186
- });
187
- });
188
- }
189
- getCollectionData(y, m, r) {
190
- return k(this, arguments, function* (t, o, e, {
191
- limit: s = 9999,
192
- searchQuery: d = "",
193
- userTimeZone: l = this._userTimeZone,
194
- loadContentCover: c = !0,
195
- fetchOption: i
196
- } = {}) {
197
- var I, C, g, f, T, $, h, R, F, z, W, L;
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
- let B = [];
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
- var x, A;
202
- return {
203
- filter: (x = U == null ? void 0 : U.filter) == null ? void 0 : x.filter,
204
- property: (A = U == null ? void 0 : U.filter) == null ? void 0 : A.property
205
- };
206
- })), ($ = (T = e == null ? void 0 : e.query2) == null ? void 0 : T.filter) != null && $.filters && B.push(...e.query2.filter.filters);
207
- let M = P(n({
208
- type: "reducer",
209
- reducers: {
210
- collection_group_results: {
211
- type: "results",
212
- limit: s,
213
- loadContentCover: c
214
- }
215
- },
216
- sort: []
217
- }, e == null ? void 0 : e.query2), {
218
- filter: {
219
- filters: B,
220
- operator: "and"
221
- },
222
- searchQuery: d,
223
- userTimeZone: l
224
- });
225
- if (p) {
226
- const U = ((h = e == null ? void 0 : e.format) == null ? void 0 : h.board_columns) || ((R = e == null ? void 0 : e.format) == null ? void 0 : R.collection_groups) || [], x = [u ? "board" : "group_aggregation", "results"], A = {
227
- checkbox: "checkbox_is",
228
- url: "string_starts_with",
229
- text: "string_starts_with",
230
- select: "enum_is",
231
- multi_select: "enum_contains",
232
- created_time: "date_is_within",
233
- undefined: "is_empty"
234
- }, J = {};
235
- for (const S of U) {
236
- const {
237
- property: K,
238
- value: { value: v, type: Q }
239
- } = S;
240
- for (const N of x) {
241
- const X = N === "results" ? {
242
- type: N,
243
- limit: s
244
- } : {
245
- type: "aggregation",
246
- aggregation: {
247
- aggregator: "count"
248
- }
249
- }, D = typeof v == "undefined", Y = v == null ? void 0 : v.range, j = D ? "uncategorized" : Y ? ((F = v.range) == null ? void 0 : F.start_date) || ((z = v.range) == null ? void 0 : z.end_date) : (v == null ? void 0 : v.value) || v, O = !D && (Y || (v == null ? void 0 : v.value) || v);
250
- J[`${N}:${Q}:${j}`] = P(n({}, X), {
251
- filter: {
252
- operator: "and",
253
- filters: [
254
- {
255
- property: K,
256
- filter: n({
257
- operator: D ? "is_empty" : A[Q]
258
- }, !D && {
259
- value: {
260
- type: "exact",
261
- value: O
262
- }
263
- })
264
- }
265
- ]
266
- }
267
- });
268
- }
269
- }
270
- const H = u ? "board_columns" : `${q}_groups`;
271
- M = P(n({
272
- type: "reducer",
273
- reducers: n({
274
- [H]: P(n({
275
- type: "groups",
276
- groupBy: p
277
- }, ((W = e == null ? void 0 : e.query2) == null ? void 0 : W.filter) && {
278
- filter: (L = e == null ? void 0 : e.query2) == null ? void 0 : L.filter
279
- }), {
280
- groupSortPreference: U.map((S) => S == null ? void 0 : S.value),
281
- limit: s
282
- })
283
- }, J)
284
- }, e == null ? void 0 : e.query2), {
285
- searchQuery: d,
286
- userTimeZone: l,
287
- filter: { filters: B, operator: "and" }
288
- });
289
- }
290
- const b = yield this.fetch({
291
- endpoint: "queryCollection",
292
- body: {
293
- collection: { id: t },
294
- collectionView: { id: o },
295
- loader: M
296
- },
297
- fetchOption: i
298
- });
299
- return b.recordMap && (a(b.recordMap.block), a(b.recordMap.collection), a(b.recordMap.collection_view), a(b.recordMap.notion_user)), b;
300
- });
301
- }
302
- getUsers(t, o) {
303
- return k(this, null, function* () {
304
- return this.fetch({
305
- endpoint: "getRecordValues",
306
- body: { requests: t.map((e) => ({ id: e, table: "notion_user" })) },
307
- fetchOption: o
308
- });
309
- });
310
- }
311
- getSpaces(t, o) {
312
- return k(this, null, function* () {
313
- return this.fetch({
314
- endpoint: "getRecordValues",
315
- body: { requests: t.map((e) => ({ id: e, table: "space" })) },
316
- fetchOption: o
317
- });
318
- });
319
- }
320
- getBlocks(t, o) {
321
- return k(this, null, function* () {
322
- const e = yield this.fetch({
323
- endpoint: "syncRecordValues",
324
- body: { requests: t.map((s) => ({ table: "block", id: s, version: -1 })) },
325
- fetchOption: o
326
- });
327
- return e.recordMap && (a(e.recordMap.block), a(e.recordMap.collection), a(e.recordMap.collection_view), a(e.recordMap.notion_user)), e;
328
- });
329
- }
330
- syncRecords(t, o) {
331
- return k(this, null, function* () {
332
- const e = yield this.fetch({
333
- endpoint: "syncRecordValues",
334
- body: { requests: t.map(({ id: s, table: d }) => ({ table: d, id: s, version: -1 })) },
335
- fetchOption: o
336
- });
337
- return e.recordMap && (a(e.recordMap.block), a(e.recordMap.collection), a(e.recordMap.collection_view), a(e.recordMap.notion_user)), e;
338
- });
339
- }
340
- getSignedFileUrls(t, o) {
341
- return k(this, null, function* () {
342
- return this.fetch({
343
- endpoint: "getSignedFileUrls",
344
- body: { urls: t },
345
- fetchOption: o
346
- });
347
- });
348
- }
349
- search(t, o) {
350
- return k(this, null, function* () {
351
- var d, l, c, i, y;
352
- const e = {
353
- type: "BlocksInSpace",
354
- source: "quick_find_filters",
355
- spaceId: w(t.spaceId),
356
- sort: { field: "relevance" },
357
- limit: t.limit || 20,
358
- query: t.query,
359
- filters: P(n({
360
- isDeletedOnly: !1,
361
- navigableBlockContentOnly: !1,
362
- excludeTemplates: !0,
363
- requireEditPermissions: !1,
364
- includePublicPagesWithoutExplicitAccess: !0,
365
- createdBy: [],
366
- editedBy: [],
367
- lastEditedTime: {},
368
- createdTime: {}
369
- }, t.filters), {
370
- ancestors: (d = t.filters) != null && d.ancestors ? t.filters.ancestors.map((m) => w(m)) : []
371
- })
372
- }, s = yield this.fetch({
373
- endpoint: "search",
374
- body: e,
375
- fetchOption: o
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 = (y = s.recordMap.notion_user) != null ? y : {}), s;
378
- });
379
- }
380
- /**
381
- * Backlink function which requires an authToken for NotionAPI client.
382
- * @param params object to pass black and space id
383
- * @param fetchOption Fetch options
384
- * @returns backlink list with recordmap
385
- */
386
- getBacklinks(t, o) {
387
- return k(this, null, function* () {
388
- var d, l, c, i;
389
- const e = {
390
- block: {
391
- id: w(t.block.id),
392
- spaceId: w(t.block.spaceId)
393
- }
394
- }, s = yield this.fetch({
395
- endpoint: "getBacklinksForBlockInitial",
396
- body: e,
397
- fetchOption: o
398
- });
399
- return s.recordMap && (a(s.recordMap.block), a(s.recordMap.collection), a(s.recordMap.collection_view), a(s.recordMap.notion_user), s.recordMap.block = (d = s.recordMap.block) != null ? d : {}, s.recordMap.collection = (l = s.recordMap.collection) != null ? l : {}, s.recordMap.collection_view = (c = s.recordMap.collection_view) != null ? c : {}, s.recordMap.notion_user = (i = s.recordMap.notion_user) != null ? i : {}), s;
400
- });
401
- }
402
- fetch(d) {
403
- return k(this, arguments, function* ({
404
- endpoint: t,
405
- body: o,
406
- fetchOption: e,
407
- headers: s
408
- }) {
409
- const l = P(n(n({}, s), e == null ? void 0 : e.headers), {
410
- "Content-Type": "application/json"
411
- });
412
- this._authToken && (l.cookie = `token_v2=${this._authToken}`), this._activeUser && (l["x-notion-active-user-header"] = this._activeUser);
413
- const c = `${this._apiBaseUrl}/${t}`, i = n({
414
- method: "post",
415
- body: JSON.stringify(o),
416
- headers: l
417
- }, e);
418
- if ((e == null ? void 0 : e.timeout) !== void 0) {
419
- const y = new AbortController();
420
- setTimeout(() => y.abort(), e.timeout), i.signal = y.signal;
421
- }
422
- return fetch(c, i).then((y) => y.json());
423
- });
424
- }
1
+ import { findAncestors as e, getBlockCollectionId as t, getPageContentBlockIds as n, getPageContentUserIds as r, parsePageId as i, uuidToId as a } from "@texonom/nutils";
2
+ import o from "p-map";
3
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/typeof.js
4
+ function s(e) {
5
+ "@babel/helpers - typeof";
6
+ return s = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
7
+ return typeof e;
8
+ } : function(e) {
9
+ return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
10
+ }, s(e);
425
11
  }
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);
432
- }
12
+ //#endregion
13
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPrimitive.js
14
+ function c(e, t) {
15
+ if (s(e) != "object" || !e) return e;
16
+ var n = e[Symbol.toPrimitive];
17
+ if (n !== void 0) {
18
+ var r = n.call(e, t || "default");
19
+ if (s(r) != "object") return r;
20
+ throw TypeError("@@toPrimitive must return a primitive value.");
21
+ }
22
+ return (t === "string" ? String : Number)(e);
433
23
  }
434
- export {
435
- pe as NotionAPI
24
+ //#endregion
25
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPropertyKey.js
26
+ function l(e) {
27
+ var t = c(e, "string");
28
+ return s(t) == "symbol" ? t : t + "";
29
+ }
30
+ //#endregion
31
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/defineProperty.js
32
+ function u(e, t, n) {
33
+ return (t = l(t)) in e ? Object.defineProperty(e, t, {
34
+ value: n,
35
+ enumerable: !0,
36
+ configurable: !0,
37
+ writable: !0
38
+ }) : e[t] = n, e;
39
+ }
40
+ //#endregion
41
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/objectSpread2.js
42
+ function d(e, t) {
43
+ var n = Object.keys(e);
44
+ if (Object.getOwnPropertySymbols) {
45
+ var r = Object.getOwnPropertySymbols(e);
46
+ t && (r = r.filter(function(t) {
47
+ return Object.getOwnPropertyDescriptor(e, t).enumerable;
48
+ })), n.push.apply(n, r);
49
+ }
50
+ return n;
51
+ }
52
+ function f(e) {
53
+ for (var t = 1; t < arguments.length; t++) {
54
+ var n = arguments[t] == null ? {} : arguments[t];
55
+ t % 2 ? d(Object(n), !0).forEach(function(t) {
56
+ u(e, t, n[t]);
57
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(t) {
58
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
59
+ });
60
+ }
61
+ return e;
62
+ }
63
+ //#endregion
64
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/asyncToGenerator.js
65
+ function p(e, t, n, r, i, a, o) {
66
+ try {
67
+ var s = e[a](o), c = s.value;
68
+ } catch (e) {
69
+ n(e);
70
+ return;
71
+ }
72
+ s.done ? t(c) : Promise.resolve(c).then(r, i);
73
+ }
74
+ function m(e) {
75
+ return function() {
76
+ var t = this, n = arguments;
77
+ return new Promise(function(r, i) {
78
+ var a = e.apply(t, n);
79
+ function o(e) {
80
+ p(a, r, i, o, s, "next", e);
81
+ }
82
+ function s(e) {
83
+ p(a, r, i, o, s, "throw", e);
84
+ }
85
+ o(void 0);
86
+ });
87
+ };
88
+ }
89
+ //#endregion
90
+ //#region src/notion-api.ts
91
+ var h = class {
92
+ constructor({ apiBaseUrl: e = "https://www.notion.so/api/v3", authToken: t, activeUser: n, userTimeZone: r = "America/New_York" } = {}) {
93
+ this._apiBaseUrl = e, this._authToken = t, this._activeUser = n, this._userTimeZone = r;
94
+ }
95
+ getPage(e) {
96
+ var t = this;
97
+ return m(function* (e, { concurrency: i = 3, fetchFullInfo: o = !0, fetchCollections: s = !0, signFileUrls: c = !0, chunkLimit: l = 100, chunkNumber: u = 0, fetchOption: d } = {}) {
98
+ var p, m, h;
99
+ let _ = yield t.getPageRaw(e, {
100
+ chunkLimit: l,
101
+ chunkNumber: u,
102
+ fetchOption: d
103
+ }), v = _ == null ? void 0 : _.recordMap;
104
+ if (!(v != null && v.block)) throw Error(`Notion page not found "${a(e)}"`);
105
+ if (g(v.block), g(v.collection), g(v.collection_view), g(v.notion_user), v.collection = (p = v.collection) == null ? {} : p, v.collection_view = (m = v.collection_view) == null ? {} : m, v.notion_user = (h = v.notion_user) == null ? {} : h, v.collection_query = {}, v.signed_urls = {}, o) {
106
+ let e = [], i = r(v).filter((e) => !v.notion_user[e]);
107
+ e.push(t.getUsers(i, d).then((e) => {
108
+ var t;
109
+ return e == null || (t = e.recordMapWithRoles) == null ? void 0 : t.notion_user;
110
+ }));
111
+ let a = n(v).filter((e) => !v.block[e]);
112
+ e.push(t.getBlocks(a, d).then((e) => e.recordMap.block));
113
+ let o = Object.values(v.block)[0].value, s = o.parent_table === "space" ? [o.parent_id] : [];
114
+ e.push(t.getSpaces(s, d).then((e) => {
115
+ var t;
116
+ return (t = e.recordMapWithRoles) == null ? void 0 : t.space;
117
+ }));
118
+ let [c, l, u] = yield Promise.all(e);
119
+ v.notion_user = f(f({}, v.notion_user), c), v.block = f(f({}, v.block), l), v.space = f(f({}, v.space), u), g(v.block), g(v.collection), g(v.notion_user);
120
+ }
121
+ let y = n(v);
122
+ return s && (yield t.fetchCollections(y, v, e, {
123
+ concurrency: i,
124
+ fetchOption: d
125
+ })), c && (yield t.addSignedUrls({
126
+ recordMap: v,
127
+ contentBlockIds: y,
128
+ fetchOption: d
129
+ })), v;
130
+ }).apply(this, arguments);
131
+ }
132
+ fetchCollections(n, r, i) {
133
+ var a = this;
134
+ return m(function* (n, r, i, { concurrency: s, fetchOption: c, collectionConcurrency: l } = {
135
+ concurrency: 36,
136
+ fetchOption: { timeout: 2e4 },
137
+ collectionConcurrency: 300
138
+ }) {
139
+ let u = n.flatMap((n) => {
140
+ var a;
141
+ let o = (a = r.block[n]) == null ? void 0 : a.value;
142
+ if (!o) return [];
143
+ let s = o && (o.type === "collection_view" || o.type === "collection_view_page") && t(o, r);
144
+ if (s) {
145
+ var c;
146
+ if (!i || e(r, o).includes(i)) return (c = o.view_ids) == null ? void 0 : c.flatMap((e) => {
147
+ var t;
148
+ return (t = r.collection_query[s]) != null && t[e] ? [] : {
149
+ collectionId: s,
150
+ collectionViewId: e,
151
+ collectionViewBlockId: o.id
152
+ };
153
+ });
154
+ }
155
+ return [];
156
+ }), d = {
157
+ block: {},
158
+ collection: {},
159
+ collection_view: {},
160
+ notion_user: {},
161
+ collection_query: {},
162
+ signed_urls: {}
163
+ };
164
+ return yield o(u.slice(u.length - l, u.length), function() {
165
+ var e = m(function* (e) {
166
+ var t;
167
+ let { collectionId: n, collectionViewId: o, collectionViewBlockId: s } = e, l = (t = r.collection_view[o]) == null ? void 0 : t.value;
168
+ try {
169
+ let e = yield a.getCollectionData(n, o, l, { fetchOption: c });
170
+ if (e.recordMap) {
171
+ var u, p;
172
+ r.block = f(f({}, r.block), e.recordMap.block), r.collection = f(f({}, r.collection), e.recordMap.collection), r.collection_view = f(f({}, r.collection_view), e.recordMap.collection_view), r.notion_user = f(f({}, r.notion_user), e.recordMap.notion_user), r.collection_query[n] = f(f({}, r.collection_query[n]), {}, { [o]: (u = e.result) == null ? void 0 : u.reducerResults }), d.block = f(f({}, d.block), e.recordMap.block), d.collection = f(f({}, d.collection), e.recordMap.collection), d.collection_view = f(f({}, d.collection_view), e.recordMap.collection_view), d.notion_user = f(f({}, d.notion_user), e.recordMap.notion_user), d.collection_query[n] = f(f({}, d.collection_query[n]), {}, { [o]: (p = e.result) == null ? void 0 : p.reducerResults });
173
+ }
174
+ if (!l) {
175
+ let e = yield a.getPageRaw(s, { fetchOption: c });
176
+ e.recordMap && (g(e.recordMap.block), g(e.recordMap.collection), g(e.recordMap.collection_view), r.collection_view = f(f({}, r.collection_view), e.recordMap.collection_view), d.collection_view = f(f({}, d.collection_view), e.recordMap.collection_view), r.collection = f(f({}, r.collection), e.recordMap.collection), d.collection = f(f({}, d.collection), e.recordMap.collection), r.block = f(f({}, r.block), e.recordMap.block), d.block = f(f({}, d.block), e.recordMap.block));
177
+ }
178
+ } catch (e) {
179
+ console.debug("NotionAPI collectionQuery error in page id ", i), console.error(e);
180
+ }
181
+ });
182
+ return function(t) {
183
+ return e.apply(this, arguments);
184
+ };
185
+ }(), { concurrency: s }), d;
186
+ }).apply(this, arguments);
187
+ }
188
+ addSignedUrls({ recordMap: e, contentBlockIds: t, fetchOption: r = {} }) {
189
+ var i = this;
190
+ return m(function* () {
191
+ e.signed_urls = {}, t || (t = n(e));
192
+ let a = t.flatMap((t) => {
193
+ var n, r;
194
+ let i = (n = e.block[t]) == null ? void 0 : n.value;
195
+ if (i && (i.type === "pdf" || i.type === "audio" || i.type === "image" && (r = i.file_ids) != null && r.length || i.type === "video" || i.type === "file" || i.type === "page")) {
196
+ var a, o;
197
+ let e = i.type === "page" ? (a = i.format) == null ? void 0 : a.page_cover : (o = i.properties) == null || (o = o.source) == null || (o = o[0]) == null ? void 0 : o[0];
198
+ if (e) return !e.includes("secure.notion-static.com") && !e.includes("prod-files-secure") ? [] : {
199
+ permissionRecord: {
200
+ table: "block",
201
+ id: i.id
202
+ },
203
+ url: e
204
+ };
205
+ }
206
+ return [];
207
+ });
208
+ if (a.length > 0) try {
209
+ let { signedUrls: t } = yield i.getSignedFileUrls(a, r);
210
+ if (t.length === a.length) for (let n = 0; n < a.length; ++n) {
211
+ let r = a[n], i = t[n];
212
+ e.signed_urls[r.permissionRecord.id] = i;
213
+ }
214
+ } catch (e) {
215
+ console.warn("NotionAPI getSignedfileUrls error", e);
216
+ }
217
+ })();
218
+ }
219
+ getPageRaw(e) {
220
+ var t = this;
221
+ return m(function* (e, { fetchOption: n, chunkLimit: r = 100, chunkNumber: a = 0 } = {}) {
222
+ let o = i(e);
223
+ if (!o) throw Error(`invalid notion pageId "${e}"`);
224
+ let s = {
225
+ pageId: o,
226
+ limit: r,
227
+ chunkNumber: a,
228
+ cursor: { stack: [] },
229
+ verticalColumns: !1
230
+ };
231
+ return t.fetch({
232
+ endpoint: "loadPageChunk",
233
+ body: s,
234
+ fetchOption: n
235
+ });
236
+ }).apply(this, arguments);
237
+ }
238
+ getCollectionData(e, t, n) {
239
+ var r = this;
240
+ return m(function* (e, t, n, { limit: i = 9999, searchQuery: a = "", userTimeZone: o = this._userTimeZone, loadContentCover: s = !0, fetchOption: c } = {}) {
241
+ var l, u, d, p, m;
242
+ let h = n == null ? void 0 : n.type, _ = h === "board", v = _ ? n == null || (l = n.format) == null ? void 0 : l.board_columns_by : n == null || (u = n.format) == null ? void 0 : u.collection_group_by, y = [];
243
+ n != null && (d = n.format) != null && d.property_filters && (y = (p = n.format) == null ? void 0 : p.property_filters.map((e) => {
244
+ var t, n;
245
+ return {
246
+ filter: e == null || (t = e.filter) == null ? void 0 : t.filter,
247
+ property: e == null || (n = e.filter) == null ? void 0 : n.property
248
+ };
249
+ })), n != null && (m = n.query2) != null && (m = m.filter) != null && m.filters && y.push(...n.query2.filter.filters);
250
+ let b = f(f({
251
+ type: "reducer",
252
+ reducers: { collection_group_results: {
253
+ type: "results",
254
+ limit: i,
255
+ loadContentCover: s
256
+ } },
257
+ sort: []
258
+ }, n == null ? void 0 : n.query2), {}, {
259
+ filter: {
260
+ filters: y,
261
+ operator: "and"
262
+ },
263
+ searchQuery: a,
264
+ userTimeZone: o
265
+ });
266
+ if (v) {
267
+ var x, S, C, w;
268
+ let e = (n == null || (x = n.format) == null ? void 0 : x.board_columns) || (n == null || (S = n.format) == null ? void 0 : S.collection_groups) || [], t = [_ ? "board" : "group_aggregation", "results"], r = {
269
+ checkbox: "checkbox_is",
270
+ url: "string_starts_with",
271
+ text: "string_starts_with",
272
+ select: "enum_is",
273
+ multi_select: "enum_contains",
274
+ created_time: "date_is_within",
275
+ undefined: "is_empty"
276
+ }, s = {};
277
+ for (let n of e) {
278
+ let { property: e, value: { value: a, type: o } } = n;
279
+ for (let n of t) {
280
+ var T, E;
281
+ let t = n === "results" ? {
282
+ type: n,
283
+ limit: i
284
+ } : {
285
+ type: "aggregation",
286
+ aggregation: { aggregator: "count" }
287
+ }, c = a === void 0, l = a == null ? void 0 : a.range, u = c ? "uncategorized" : l ? ((T = a.range) == null ? void 0 : T.start_date) || ((E = a.range) == null ? void 0 : E.end_date) : (a == null ? void 0 : a.value) || a, d = !c && (l || (a == null ? void 0 : a.value) || a);
288
+ s[`${n}:${o}:${u}`] = f(f({}, t), {}, { filter: {
289
+ operator: "and",
290
+ filters: [{
291
+ property: e,
292
+ filter: f({ operator: c ? "is_empty" : r[o] }, !c && { value: {
293
+ type: "exact",
294
+ value: d
295
+ } })
296
+ }]
297
+ } });
298
+ }
299
+ }
300
+ b = f(f({
301
+ type: "reducer",
302
+ reducers: f({ [_ ? "board_columns" : `${h}_groups`]: f(f({
303
+ type: "groups",
304
+ groupBy: v
305
+ }, (n == null || (C = n.query2) == null ? void 0 : C.filter) && { filter: n == null || (w = n.query2) == null ? void 0 : w.filter }), {}, {
306
+ groupSortPreference: e.map((e) => e == null ? void 0 : e.value),
307
+ limit: i
308
+ }) }, s)
309
+ }, n == null ? void 0 : n.query2), {}, {
310
+ searchQuery: a,
311
+ userTimeZone: o,
312
+ filter: {
313
+ filters: y,
314
+ operator: "and"
315
+ }
316
+ });
317
+ }
318
+ let D = yield r.fetch({
319
+ endpoint: "queryCollection",
320
+ body: {
321
+ collection: { id: e },
322
+ collectionView: { id: t },
323
+ loader: b
324
+ },
325
+ fetchOption: c
326
+ });
327
+ return D.recordMap && (g(D.recordMap.block), g(D.recordMap.collection), g(D.recordMap.collection_view), g(D.recordMap.notion_user)), D;
328
+ }).apply(this, arguments);
329
+ }
330
+ getUsers(e, t) {
331
+ var n = this;
332
+ return m(function* () {
333
+ return n.fetch({
334
+ endpoint: "getRecordValues",
335
+ body: { requests: e.map((e) => ({
336
+ id: e,
337
+ table: "notion_user"
338
+ })) },
339
+ fetchOption: t
340
+ });
341
+ })();
342
+ }
343
+ getSpaces(e, t) {
344
+ var n = this;
345
+ return m(function* () {
346
+ return n.fetch({
347
+ endpoint: "getRecordValues",
348
+ body: { requests: e.map((e) => ({
349
+ id: e,
350
+ table: "space"
351
+ })) },
352
+ fetchOption: t
353
+ });
354
+ })();
355
+ }
356
+ getBlocks(e, t) {
357
+ var n = this;
358
+ return m(function* () {
359
+ let r = yield n.fetch({
360
+ endpoint: "syncRecordValues",
361
+ body: { requests: e.map((e) => ({
362
+ table: "block",
363
+ id: e,
364
+ version: -1
365
+ })) },
366
+ fetchOption: t
367
+ });
368
+ return r.recordMap && (g(r.recordMap.block), g(r.recordMap.collection), g(r.recordMap.collection_view), g(r.recordMap.notion_user)), r;
369
+ })();
370
+ }
371
+ syncRecords(e, t) {
372
+ var n = this;
373
+ return m(function* () {
374
+ let r = yield n.fetch({
375
+ endpoint: "syncRecordValues",
376
+ body: { requests: e.map(({ id: e, table: t }) => ({
377
+ table: t,
378
+ id: e,
379
+ version: -1
380
+ })) },
381
+ fetchOption: t
382
+ });
383
+ return r.recordMap && (g(r.recordMap.block), g(r.recordMap.collection), g(r.recordMap.collection_view), g(r.recordMap.notion_user)), r;
384
+ })();
385
+ }
386
+ getSignedFileUrls(e, t) {
387
+ var n = this;
388
+ return m(function* () {
389
+ return n.fetch({
390
+ endpoint: "getSignedFileUrls",
391
+ body: { urls: e },
392
+ fetchOption: t
393
+ });
394
+ })();
395
+ }
396
+ search(e, t) {
397
+ var n = this;
398
+ return m(function* () {
399
+ var r;
400
+ let a = {
401
+ type: "BlocksInSpace",
402
+ source: "quick_find_filters",
403
+ spaceId: i(e.spaceId),
404
+ sort: { field: "relevance" },
405
+ limit: e.limit || 20,
406
+ query: e.query,
407
+ filters: f(f({
408
+ isDeletedOnly: !1,
409
+ navigableBlockContentOnly: !1,
410
+ excludeTemplates: !0,
411
+ requireEditPermissions: !1,
412
+ includePublicPagesWithoutExplicitAccess: !0,
413
+ createdBy: [],
414
+ editedBy: [],
415
+ lastEditedTime: {},
416
+ createdTime: {}
417
+ }, e.filters), {}, { ancestors: (r = e.filters) != null && r.ancestors ? e.filters.ancestors.map((e) => i(e)) : [] })
418
+ }, o = yield n.fetch({
419
+ endpoint: "search",
420
+ body: a,
421
+ fetchOption: t
422
+ });
423
+ if (o.recordMap) {
424
+ var s, c, l, u;
425
+ g(o.recordMap.block), g(o.recordMap.collection), g(o.recordMap.collection_view), g(o.recordMap.notion_user), o.recordMap.block = (s = o.recordMap.block) == null ? {} : s, o.recordMap.collection = (c = o.recordMap.collection) == null ? {} : c, o.recordMap.collection_view = (l = o.recordMap.collection_view) == null ? {} : l, o.recordMap.notion_user = (u = o.recordMap.notion_user) == null ? {} : u;
426
+ }
427
+ return o;
428
+ })();
429
+ }
430
+ getBacklinks(e, t) {
431
+ var n = this;
432
+ return m(function* () {
433
+ let r = { block: {
434
+ id: i(e.block.id),
435
+ spaceId: i(e.block.spaceId)
436
+ } }, a = yield n.fetch({
437
+ endpoint: "getBacklinksForBlockInitial",
438
+ body: r,
439
+ fetchOption: t
440
+ });
441
+ if (a.recordMap) {
442
+ var o, s, c, l;
443
+ g(a.recordMap.block), g(a.recordMap.collection), g(a.recordMap.collection_view), g(a.recordMap.notion_user), a.recordMap.block = (o = a.recordMap.block) == null ? {} : o, a.recordMap.collection = (s = a.recordMap.collection) == null ? {} : s, a.recordMap.collection_view = (c = a.recordMap.collection_view) == null ? {} : c, a.recordMap.notion_user = (l = a.recordMap.notion_user) == null ? {} : l;
444
+ }
445
+ return a;
446
+ })();
447
+ }
448
+ fetch({ endpoint: e, body: t, fetchOption: n, headers: r }) {
449
+ var i = this;
450
+ return m(function* () {
451
+ let a = f(f(f({}, r), n == null ? void 0 : n.headers), {}, { "Content-Type": "application/json" });
452
+ i._authToken && (a.cookie = `token_v2=${i._authToken}`), i._activeUser && (a["x-notion-active-user-header"] = i._activeUser);
453
+ let o = `${i._apiBaseUrl}/${e}`, s = f({
454
+ method: "post",
455
+ body: JSON.stringify(t),
456
+ headers: a
457
+ }, n);
458
+ if ((n == null ? void 0 : n.timeout) !== void 0) {
459
+ let e = new AbortController();
460
+ setTimeout(() => e.abort(), n.timeout), s.signal = e.signal;
461
+ }
462
+ return fetch(o, s).then((e) => e.json());
463
+ })();
464
+ }
436
465
  };
437
- //# sourceMappingURL=index.js.map
466
+ function g(e) {
467
+ if (e) for (let n of Object.keys(e)) {
468
+ var t;
469
+ let r = e[n];
470
+ (r != null && r.spaceId && r.value || r != null && (t = r.value) != null && t.value && !r.role && !r.type) && (e[n] = r.value);
471
+ }
472
+ }
473
+ //#endregion
474
+ export { h as NotionAPI };
475
+
476
+ //# sourceMappingURL=index.js.map
@@ -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 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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"}
1
+ {"version":3,"file":"index.js","names":["this","pMap","_typeof","o","toPrimitive","t","e","i","r","toPropertyKey","_defineProperty","ownKeys","_objectSpread2","asyncGeneratorStep","n","c","u","_asyncToGenerator","_next","_throw","NotionAPI","apiBaseUrl","authToken","activeUser","userTimeZone","_this","_recordMap$collection","_recordMap$collection2","_recordMap$notion_use","page","pageId","recordMap","uuidToId","normalizeMap","fetchFullInfo","promises","pendingUserIDs","getPageContentUserIds","id","fetchOption","_res$recordMapWithRol","res","pendingBlocks","getPageContentBlockIds","rootBlock","pendingSpaces","_res$recordMapWithRol2","newUsers","newBlocks","newSpaces","contentBlockIds","fetchCollections","signFileUrls","_this2","allCollectionInstances","_recordMap$block$bloc","block","blockId","collectionId","getBlockCollectionId","_block$view_ids","findAncestors","_recordMap$collection3","collectionViewId","resultMap","collectionConcurrency","_ref","_recordMap$collection4","collectionInstance","collectionView","collectionData","_collectionData$resul","_collectionData$resul2","viewBlockData","collectionViewBlockId","err","_this3","allFileInstances","_recordMap$block$bloc2","_block$file_ids","_block$format","_block$properties","source","signedUrls","file","signedUrl","_this4","parsedPageId","parsePageId","body","chunkLimit","_this5","_collectionView$forma","_collectionView$forma2","_collectionView$forma3","_collectionView$forma4","_collectionView$query","type","isBoardType","groupBy","filters","_filterObj$filter","_filterObj$filter2","filterObj","loader","_collectionView$forma5","_collectionView$forma6","_collectionView$query2","_collectionView$query3","groups","iterators","operators","\"undefined\"","reducersQuery","group","iterator","_value$range","_value$range2","iteratorProps","isUncategorizedValue","value","isDateValue","queryLabel","queryValue","response","_this6","userIds","_this7","spaceIds","_this8","blockIds","_this9","records","_this10","_this11","_params$filters","params","_response$recordMap$b","_response$recordMap$c","_response$recordMap$c2","_response$recordMap$n","_this12","_response$recordMap$b2","_response$recordMap$c3","_response$recordMap$c4","_response$recordMap$n2","clientHeaders","_this13","headers","\"cookie\"","url","endpoint","requestInit","ctrl","map","_entry$value","entry"],"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"],"mappings":"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"}
package/license ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Seonglae Cho
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@texonom/nclient",
3
- "version": "1.6.1",
3
+ "version": "1.6.4",
4
4
  "type": "module",
5
5
  "description": "Robust TypeScript client for the unofficial Notion API.",
6
- "repository": "texonom/notion-node",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "texonom/notion-node"
9
+ },
7
10
  "author": "Seonglae Cho <sungle3737@gmail.com>",
8
11
  "license": "MIT",
9
12
  "main": "./build/index.js",
@@ -14,12 +17,12 @@
14
17
  "build"
15
18
  ],
16
19
  "engines": {
17
- "node": ">=22.22.2"
20
+ "node": ">=22.23.3"
18
21
  },
19
22
  "dependencies": {
20
- "p-map": "^5.5.0",
21
- "@texonom/ntypes": "^1.6.1",
22
- "@texonom/nutils": "^1.6.1"
23
+ "@texonom/ntypes": "^1.6.4",
24
+ "@texonom/nutils": "^1.6.4",
25
+ "p-map": "^5.5.0"
23
26
  },
24
27
  "standard-version": {
25
28
  "skip": {