@texonom/nclient 1.5.5 → 1.5.6

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,32 +1,32 @@
1
1
  var V = Object.defineProperty, ee = Object.defineProperties;
2
2
  var te = Object.getOwnPropertyDescriptors;
3
- var H = Object.getOwnPropertySymbols;
4
- var se = Object.prototype.hasOwnProperty, oe = Object.prototype.propertyIsEnumerable;
5
- var K = (k, s, t) => s in k ? V(k, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : k[s] = t, r = (k, s) => {
3
+ var G = Object.getOwnPropertySymbols;
4
+ var se = Object.prototype.hasOwnProperty, re = Object.prototype.propertyIsEnumerable;
5
+ var H = (p, s, t) => s in p ? V(p, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : p[s] = t, o = (p, s) => {
6
6
  for (var t in s || (s = {}))
7
- se.call(s, t) && K(k, t, s[t]);
8
- if (H)
9
- for (var t of H(s))
10
- oe.call(s, t) && K(k, t, s[t]);
11
- return k;
12
- }, P = (k, s) => ee(k, te(s));
13
- var _ = (k, s, t) => new Promise((e, l) => {
14
- var p = (c) => {
7
+ se.call(s, t) && H(p, t, s[t]);
8
+ if (G)
9
+ for (var t of G(s))
10
+ re.call(s, t) && H(p, t, s[t]);
11
+ return p;
12
+ }, P = (p, s) => ee(p, te(s));
13
+ var y = (p, s, t) => new Promise((e, l) => {
14
+ var _ = (c) => {
15
15
  try {
16
16
  n(t.next(c));
17
- } catch (f) {
18
- l(f);
17
+ } catch (k) {
18
+ l(k);
19
19
  }
20
20
  }, a = (c) => {
21
21
  try {
22
22
  n(t.throw(c));
23
- } catch (f) {
24
- l(f);
23
+ } catch (k) {
24
+ l(k);
25
25
  }
26
- }, n = (c) => c.done ? e(c.value) : Promise.resolve(c.value).then(p, a);
27
- n((t = t.apply(k, s)).next());
26
+ }, n = (c) => c.done ? e(c.value) : Promise.resolve(c.value).then(_, a);
27
+ n((t = t.apply(p, s)).next());
28
28
  });
29
- import { uuidToId as re, getPageContentUserIds as ne, getPageContentBlockIds as W, getBlockCollectionId as ce, findAncestors as ie, parsePageId as A } from "@texonom/nutils";
29
+ import { uuidToId as oe, getPageContentUserIds as ne, getPageContentBlockIds as F, getBlockCollectionId as ce, findAncestors as ie, parsePageId as T } from "@texonom/nutils";
30
30
  import ae from "p-map";
31
31
  class pe {
32
32
  constructor({
@@ -37,63 +37,63 @@ class pe {
37
37
  } = {}) {
38
38
  this._apiBaseUrl = s, this._authToken = t, this._activeUser = e, this._userTimeZone = l;
39
39
  }
40
- getPage(f) {
41
- return _(this, arguments, function* (s, {
40
+ getPage(k) {
41
+ return y(this, arguments, function* (s, {
42
42
  concurrency: t = 3,
43
43
  fetchFullInfo: e = !0,
44
44
  fetchCollections: l = !0,
45
- signFileUrls: p = !0,
45
+ signFileUrls: _ = !0,
46
46
  chunkLimit: a = 100,
47
47
  chunkNumber: n = 0,
48
48
  fetchOption: c
49
49
  } = {}) {
50
- var i, u, v;
51
- const I = yield this.getPageRaw(s, {
50
+ var i, u, m;
51
+ const B = yield this.getPageRaw(s, {
52
52
  chunkLimit: a,
53
53
  chunkNumber: n,
54
54
  fetchOption: c
55
- }), o = I == null ? void 0 : I.recordMap;
56
- if (!(o != null && o.block)) throw new Error(`Notion page not found "${re(s)}"`);
57
- if (o.collection = (i = o.collection) != null ? i : {}, o.collection_view = (u = o.collection_view) != null ? u : {}, o.notion_user = (v = o.notion_user) != null ? v : {}, o.collection_query = {}, o.signed_urls = {}, e) {
58
- const h = [], q = ne(o).filter((y) => !o.notion_user[y]);
59
- h.push(this.getUsers(q, c).then((y) => {
55
+ }), r = B == null ? void 0 : B.recordMap;
56
+ if (!(r != null && r.block)) throw new Error(`Notion page not found "${oe(s)}"`);
57
+ if (r.collection = (i = r.collection) != null ? i : {}, r.collection_view = (u = r.collection_view) != null ? u : {}, r.notion_user = (m = r.notion_user) != null ? m : {}, r.collection_query = {}, r.signed_urls = {}, e) {
58
+ const b = [], g = ne(r).filter((f) => !r.notion_user[f]);
59
+ b.push(this.getUsers(g, c).then((f) => {
60
60
  var R;
61
- return (R = y == null ? void 0 : y.recordMapWithRoles) == null ? void 0 : R.notion_user;
61
+ return (R = f == null ? void 0 : f.recordMapWithRoles) == null ? void 0 : R.notion_user;
62
62
  }));
63
- const U = W(o).filter((y) => !o.block[y]);
64
- h.push(this.getBlocks(U, c).then((y) => y.recordMap.block));
65
- const C = Object.values(o.block)[0].value, d = C.parent_table === "space" ? [C.parent_id] : [];
66
- h.push(this.getSpaces(d, c).then((y) => {
63
+ const I = F(r).filter((f) => !r.block[f]);
64
+ b.push(this.getBlocks(I, c).then((f) => f.recordMap.block));
65
+ const C = Object.values(r.block)[0].value, d = C.parent_table === "space" ? [C.parent_id] : [];
66
+ b.push(this.getSpaces(d, c).then((f) => {
67
67
  var R;
68
- return (R = y.recordMapWithRoles) == null ? void 0 : R.space;
68
+ return (R = f.recordMapWithRoles) == null ? void 0 : R.space;
69
69
  }));
70
- const [m, D, N] = yield Promise.all(h);
71
- o.notion_user = r(r({}, o.notion_user), m), o.block = r(r({}, o.block), D), o.space = r(r({}, o.space), N);
70
+ const [q, $, x] = yield Promise.all(b);
71
+ r.notion_user = o(o({}, r.notion_user), q), r.block = o(o({}, r.block), $), r.space = o(o({}, r.space), x);
72
72
  }
73
- const b = W(o);
74
- return l && (yield this.fetchCollections(b, o, s, { concurrency: t, fetchOption: c })), p && (yield this.addSignedUrls({ recordMap: o, contentBlockIds: b, fetchOption: c })), o;
73
+ const v = F(r);
74
+ return l && (yield this.fetchCollections(v, r, s, { concurrency: t, fetchOption: c })), _ && (yield this.addSignedUrls({ recordMap: r, contentBlockIds: v, fetchOption: c })), r;
75
75
  });
76
76
  }
77
- fetchCollections(n, c, f) {
78
- return _(this, arguments, function* (s, t, e, {
77
+ fetchCollections(n, c, k) {
78
+ return y(this, arguments, function* (s, t, e, {
79
79
  concurrency: l,
80
- fetchOption: p,
80
+ fetchOption: _,
81
81
  collectionConcurrency: a
82
82
  } = { concurrency: 36, fetchOption: { timeout: 2e4 }, collectionConcurrency: 300 }) {
83
- const I = s.flatMap((b) => {
84
- var v, h;
85
- const i = (v = t.block[b]) == null ? void 0 : v.value;
83
+ const B = s.flatMap((v) => {
84
+ var m, b;
85
+ const i = (m = t.block[v]) == null ? void 0 : m.value;
86
86
  if (!i) return [];
87
87
  const u = i && (i.type === "collection_view" || i.type === "collection_view_page") && ce(i, t);
88
- return u && (!e || ie(t, i).includes(e)) ? (h = i.view_ids) == null ? void 0 : h.flatMap((q) => {
89
- var U;
90
- return (U = t.collection_query[u]) != null && U[q] ? [] : {
88
+ return u && (!e || ie(t, i).includes(e)) ? (b = i.view_ids) == null ? void 0 : b.flatMap((g) => {
89
+ var I;
90
+ return (I = t.collection_query[u]) != null && I[g] ? [] : {
91
91
  collectionId: u,
92
- collectionViewId: q,
92
+ collectionViewId: g,
93
93
  collectionViewBlockId: i.id
94
94
  };
95
95
  }) : [];
96
- }), o = {
96
+ }), r = {
97
97
  block: {},
98
98
  collection: {},
99
99
  collection_view: {},
@@ -102,21 +102,21 @@ class pe {
102
102
  signed_urls: {}
103
103
  };
104
104
  return yield ae(
105
- I.slice(I.length - a, I.length),
106
- (b) => _(this, null, function* () {
107
- var q, U, C;
108
- const { collectionId: i, collectionViewId: u, collectionViewBlockId: v } = b, h = (q = t.collection_view[u]) == null ? void 0 : q.value;
105
+ B.slice(B.length - a, B.length),
106
+ (v) => y(this, null, function* () {
107
+ var g, I, C;
108
+ const { collectionId: i, collectionViewId: u, collectionViewBlockId: m } = v, b = (g = t.collection_view[u]) == null ? void 0 : g.value;
109
109
  try {
110
- const d = yield this.getCollectionData(i, u, h, {
111
- fetchOption: p
110
+ const d = yield this.getCollectionData(i, u, b, {
111
+ fetchOption: _
112
112
  });
113
- if (d.recordMap && (t.block = r(r({}, t.block), d.recordMap.block), t.collection = r(r({}, t.collection), d.recordMap.collection), t.collection_view = r(r({}, t.collection_view), d.recordMap.collection_view), t.notion_user = r(r({}, t.notion_user), d.recordMap.notion_user), t.collection_query[i] = P(r({}, t.collection_query[i]), {
114
- [u]: (U = d.result) == null ? void 0 : U.reducerResults
115
- }), o.block = r(r({}, o.block), d.recordMap.block), o.collection = r(r({}, o.collection), d.recordMap.collection), o.collection_view = r(r({}, o.collection_view), d.recordMap.collection_view), o.notion_user = r(r({}, o.notion_user), d.recordMap.notion_user), o.collection_query[i] = P(r({}, o.collection_query[i]), {
113
+ if (d.recordMap && (t.block = o(o({}, t.block), d.recordMap.block), t.collection = o(o({}, t.collection), d.recordMap.collection), t.collection_view = o(o({}, t.collection_view), d.recordMap.collection_view), t.notion_user = o(o({}, t.notion_user), d.recordMap.notion_user), t.collection_query[i] = P(o({}, t.collection_query[i]), {
114
+ [u]: (I = d.result) == null ? void 0 : I.reducerResults
115
+ }), r.block = o(o({}, r.block), d.recordMap.block), r.collection = o(o({}, r.collection), d.recordMap.collection), r.collection_view = o(o({}, r.collection_view), d.recordMap.collection_view), r.notion_user = o(o({}, r.notion_user), d.recordMap.notion_user), r.collection_query[i] = P(o({}, r.collection_query[i]), {
116
116
  [u]: (C = d.result) == null ? void 0 : C.reducerResults
117
- })), !h) {
118
- const m = yield this.getPageRaw(v, { fetchOption: p });
119
- m.recordMap && (t.collection_view = r(r({}, t.collection_view), m.recordMap.collection_view), o.collection_view = r(r({}, o.collection_view), m.recordMap.collection_view), t.collection = r(r({}, t.collection), m.recordMap.collection), o.collection = r(r({}, o.collection), m.recordMap.collection), t.block = r(r({}, t.block), m.recordMap.block), o.block = r(r({}, o.block), m.recordMap.block));
117
+ })), !b) {
118
+ const q = yield this.getPageRaw(m, { fetchOption: _ });
119
+ q.recordMap && (t.collection_view = o(o({}, t.collection_view), q.recordMap.collection_view), r.collection_view = o(o({}, r.collection_view), q.recordMap.collection_view), t.collection = o(o({}, t.collection), q.recordMap.collection), r.collection = o(o({}, r.collection), q.recordMap.collection), t.block = o(o({}, t.block), q.recordMap.block), r.block = o(o({}, r.block), q.recordMap.block));
120
120
  }
121
121
  } catch (d) {
122
122
  console.debug("NotionAPI collectionQuery error in page id ", e), console.error(d);
@@ -125,21 +125,21 @@ class pe {
125
125
  {
126
126
  concurrency: l
127
127
  }
128
- ), o;
128
+ ), r;
129
129
  });
130
130
  }
131
131
  addSignedUrls(l) {
132
- return _(this, arguments, function* ({
132
+ return y(this, arguments, function* ({
133
133
  recordMap: s,
134
134
  contentBlockIds: t,
135
135
  fetchOption: e = {}
136
136
  }) {
137
- s.signed_urls = {}, t || (t = W(s));
138
- const p = t.flatMap((a) => {
139
- var c, f, I, o, b, i;
137
+ s.signed_urls = {}, t || (t = F(s));
138
+ const _ = t.flatMap((a) => {
139
+ var c, k, B, r, v, i;
140
140
  const n = (c = s.block[a]) == null ? void 0 : c.value;
141
- if (n && (n.type === "pdf" || n.type === "audio" || n.type === "image" && ((f = n.file_ids) != null && f.length) || n.type === "video" || n.type === "file" || n.type === "page")) {
142
- const u = n.type === "page" ? (I = n.format) == null ? void 0 : I.page_cover : (i = (b = (o = n.properties) == null ? void 0 : o.source) == null ? void 0 : b[0]) == null ? void 0 : i[0];
141
+ if (n && (n.type === "pdf" || n.type === "audio" || n.type === "image" && ((k = n.file_ids) != null && k.length) || n.type === "video" || n.type === "file" || n.type === "page")) {
142
+ const u = n.type === "page" ? (B = n.format) == null ? void 0 : B.page_cover : (i = (v = (r = n.properties) == null ? void 0 : r.source) == null ? void 0 : v[0]) == null ? void 0 : i[0];
143
143
  if (u)
144
144
  return !u.includes("secure.notion-static.com") && !u.includes("prod-files-secure") ? [] : {
145
145
  permissionRecord: {
@@ -151,26 +151,26 @@ class pe {
151
151
  }
152
152
  return [];
153
153
  });
154
- if (p.length > 0)
154
+ if (_.length > 0)
155
155
  try {
156
- const { signedUrls: a } = yield this.getSignedFileUrls(p, e);
157
- if (a.length === p.length)
158
- for (let n = 0; n < p.length; ++n) {
159
- const c = p[n], f = a[n];
160
- s.signed_urls[c.permissionRecord.id] = f;
156
+ const { signedUrls: a } = yield this.getSignedFileUrls(_, e);
157
+ if (a.length === _.length)
158
+ for (let n = 0; n < _.length; ++n) {
159
+ const c = _[n], k = a[n];
160
+ s.signed_urls[c.permissionRecord.id] = k;
161
161
  }
162
162
  } catch (a) {
163
163
  console.warn("NotionAPI getSignedfileUrls error", a);
164
164
  }
165
165
  });
166
166
  }
167
- getPageRaw(p) {
168
- return _(this, arguments, function* (s, {
167
+ getPageRaw(_) {
168
+ return y(this, arguments, function* (s, {
169
169
  fetchOption: t,
170
170
  chunkLimit: e = 100,
171
171
  chunkNumber: l = 0
172
172
  } = {}) {
173
- const a = A(s);
173
+ const a = T(s);
174
174
  if (!a) throw new Error(`invalid notion pageId "${s}"`);
175
175
  const n = {
176
176
  pageId: a,
@@ -186,25 +186,25 @@ class pe {
186
186
  });
187
187
  });
188
188
  }
189
- getCollectionData(f, I, o) {
190
- return _(this, arguments, function* (s, t, e, {
189
+ getCollectionData(k, B, r) {
190
+ return y(this, arguments, function* (s, t, e, {
191
191
  limit: l = 9999,
192
- searchQuery: p = "",
192
+ searchQuery: _ = "",
193
193
  userTimeZone: a = this._userTimeZone,
194
194
  loadContentCover: n = !0,
195
195
  fetchOption: c
196
196
  } = {}) {
197
- var U, C, d, m, D, N, y, R, z, L, J, Q, Y;
198
- const b = e == null ? void 0 : e.type, i = b === "board", u = i ? (U = e == null ? void 0 : e.format) == null ? void 0 : U.board_columns_by : (C = e == null ? void 0 : e.format) == null ? void 0 : C.collection_group_by;
199
- let v = [];
200
- (d = e == null ? void 0 : e.format) != null && d.property_filters && (v = (m = e.format) == null ? void 0 : m.property_filters.map((B) => {
201
- var S, T;
197
+ var I, C, d, q, $, x, f, R, z, W, L, J;
198
+ const v = e == null ? void 0 : e.type, i = v === "board", u = i ? (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 m = [];
200
+ (d = e == null ? void 0 : e.format) != null && d.property_filters && (m = (q = e.format) == null ? void 0 : q.property_filters.map((U) => {
201
+ var A, D;
202
202
  return {
203
- filter: (S = B == null ? void 0 : B.filter) == null ? void 0 : S.filter,
204
- property: (T = B == null ? void 0 : B.filter) == null ? void 0 : T.property
203
+ filter: (A = U == null ? void 0 : U.filter) == null ? void 0 : A.filter,
204
+ property: (D = U == null ? void 0 : U.filter) == null ? void 0 : D.property
205
205
  };
206
- })), (N = (D = e == null ? void 0 : e.query2) == null ? void 0 : D.filter) != null && N.filters && v.push(...e.query2.filter.filters);
207
- let h = P(r({
206
+ })), (x = ($ = e == null ? void 0 : e.query2) == null ? void 0 : $.filter) != null && x.filters && m.push(...e.query2.filter.filters);
207
+ let b = P(o({
208
208
  type: "reducer",
209
209
  reducers: {
210
210
  collection_group_results: {
@@ -216,14 +216,14 @@ class pe {
216
216
  sort: []
217
217
  }, e == null ? void 0 : e.query2), {
218
218
  filter: {
219
- filters: v,
219
+ filters: m,
220
220
  operator: "and"
221
221
  },
222
- searchQuery: p,
222
+ searchQuery: _,
223
223
  userTimeZone: a
224
224
  });
225
225
  if (u) {
226
- const B = ((y = e == null ? void 0 : e.format) == null ? void 0 : y.board_columns) || ((R = e == null ? void 0 : e.format) == null ? void 0 : R.collection_groups) || [], S = [i ? "board" : "group_aggregation", "results"], T = {
226
+ const U = ((f = e == null ? void 0 : e.format) == null ? void 0 : f.board_columns) || ((R = e == null ? void 0 : e.format) == null ? void 0 : R.collection_groups) || [], A = [i ? "board" : "group_aggregation", "results"], D = {
227
227
  checkbox: "checkbox_is",
228
228
  url: "string_starts_with",
229
229
  text: "string_starts_with",
@@ -231,31 +231,31 @@ class pe {
231
231
  multi_select: "enum_contains",
232
232
  created_time: "date_is_within",
233
233
  undefined: "is_empty"
234
- }, E = {};
235
- for (const x of B) {
234
+ }, Q = {};
235
+ for (const S of U) {
236
236
  const {
237
237
  property: X,
238
- value: { value: g, type: Z }
239
- } = x;
240
- for (const M of S) {
241
- const w = M === "results" ? {
242
- type: M,
238
+ value: { value: h, type: Y }
239
+ } = S;
240
+ for (const E of A) {
241
+ const w = E === "results" ? {
242
+ type: E,
243
243
  limit: l
244
244
  } : {
245
245
  type: "aggregation",
246
246
  aggregation: {
247
247
  aggregator: "count"
248
248
  }
249
- }, F = typeof g == "undefined", G = g == null ? void 0 : g.range, j = F ? "uncategorized" : G ? ((z = g.range) == null ? void 0 : z.start_date) || ((L = g.range) == null ? void 0 : L.end_date) : (g == null ? void 0 : g.value) || g, O = !F && (G || (g == null ? void 0 : g.value) || g);
250
- E[`${M}:${Z}:${j}`] = P(r({}, w), {
249
+ }, M = typeof h == "undefined", Z = h == null ? void 0 : h.range, j = M ? "uncategorized" : Z ? ((z = h.range) == null ? void 0 : z.start_date) || ((W = h.range) == null ? void 0 : W.end_date) : (h == null ? void 0 : h.value) || h, O = !M && (Z || (h == null ? void 0 : h.value) || h);
250
+ Q[`${E}:${Y}:${j}`] = P(o({}, w), {
251
251
  filter: {
252
252
  operator: "and",
253
253
  filters: [
254
254
  {
255
255
  property: X,
256
- filter: r({
257
- operator: F ? "is_empty" : T[Z]
258
- }, !F && {
256
+ filter: o({
257
+ operator: M ? "is_empty" : D[Y]
258
+ }, !M && {
259
259
  value: {
260
260
  type: "exact",
261
261
  value: O
@@ -267,49 +267,40 @@ class pe {
267
267
  });
268
268
  }
269
269
  }
270
- const $ = i ? "board_columns" : `${b}_groups`;
271
- h = P(r({
270
+ const K = i ? "board_columns" : `${v}_groups`;
271
+ b = P(o({
272
272
  type: "reducer",
273
- reducers: r({
274
- [$]: P(r({
273
+ reducers: o({
274
+ [K]: P(o({
275
275
  type: "groups",
276
276
  groupBy: u
277
- }, ((J = e == null ? void 0 : e.query2) == null ? void 0 : J.filter) && {
278
- filter: (Q = e == null ? void 0 : e.query2) == null ? void 0 : Q.filter
277
+ }, ((L = e == null ? void 0 : e.query2) == null ? void 0 : L.filter) && {
278
+ filter: (J = e == null ? void 0 : e.query2) == null ? void 0 : J.filter
279
279
  }), {
280
- groupSortPreference: B.map((x) => x == null ? void 0 : x.value),
280
+ groupSortPreference: U.map((S) => S == null ? void 0 : S.value),
281
281
  limit: l
282
282
  })
283
- }, E)
283
+ }, Q)
284
284
  }, e == null ? void 0 : e.query2), {
285
- searchQuery: p,
285
+ searchQuery: _,
286
286
  userTimeZone: a,
287
- filter: { filters: v, operator: "and" }
287
+ filter: { filters: m, operator: "and" }
288
288
  });
289
289
  }
290
- const q = yield this.fetch({
290
+ const g = yield this.fetch({
291
291
  endpoint: "queryCollection",
292
292
  body: {
293
293
  collection: { id: s },
294
294
  collectionView: { id: t },
295
- loader: h
295
+ loader: b
296
296
  },
297
297
  fetchOption: c
298
298
  });
299
- if (q.recordMap)
300
- for (const B of ["block", "collection", "collection_view", "notion_user"]) {
301
- const S = q.recordMap[B];
302
- if (S)
303
- for (const [T, E] of Object.entries(S)) {
304
- const $ = E;
305
- $.spaceId && ((Y = $.value) != null && Y.value) && (S[T] = $.value);
306
- }
307
- }
308
- return q;
299
+ return g.recordMap && (N(g.recordMap.block), N(g.recordMap.collection), N(g.recordMap.collection_view), N(g.recordMap.notion_user)), g;
309
300
  });
310
301
  }
311
302
  getUsers(s, t) {
312
- return _(this, null, function* () {
303
+ return y(this, null, function* () {
313
304
  return this.fetch({
314
305
  endpoint: "getRecordValues",
315
306
  body: { requests: s.map((e) => ({ id: e, table: "notion_user" })) },
@@ -318,7 +309,7 @@ class pe {
318
309
  });
319
310
  }
320
311
  getSpaces(s, t) {
321
- return _(this, null, function* () {
312
+ return y(this, null, function* () {
322
313
  return this.fetch({
323
314
  endpoint: "getRecordValues",
324
315
  body: { requests: s.map((e) => ({ id: e, table: "space" })) },
@@ -327,7 +318,7 @@ class pe {
327
318
  });
328
319
  }
329
320
  getBlocks(s, t) {
330
- return _(this, null, function* () {
321
+ return y(this, null, function* () {
331
322
  return this.fetch({
332
323
  endpoint: "syncRecordValues",
333
324
  body: { requests: s.map((e) => ({ table: "block", id: e, version: -1 })) },
@@ -336,7 +327,7 @@ class pe {
336
327
  });
337
328
  }
338
329
  syncRecords(s, t) {
339
- return _(this, null, function* () {
330
+ return y(this, null, function* () {
340
331
  return this.fetch({
341
332
  endpoint: "syncRecordValues",
342
333
  body: { requests: s.map(({ id: e, table: l }) => ({ table: l, id: e, version: -1 })) },
@@ -345,7 +336,7 @@ class pe {
345
336
  });
346
337
  }
347
338
  getSignedFileUrls(s, t) {
348
- return _(this, null, function* () {
339
+ return y(this, null, function* () {
349
340
  return this.fetch({
350
341
  endpoint: "getSignedFileUrls",
351
342
  body: { urls: s },
@@ -354,16 +345,16 @@ class pe {
354
345
  });
355
346
  }
356
347
  search(s, t) {
357
- return _(this, null, function* () {
348
+ return y(this, null, function* () {
358
349
  var l;
359
350
  const e = {
360
351
  type: "BlocksInSpace",
361
352
  source: "quick_find_filters",
362
- spaceId: A(s.spaceId),
353
+ spaceId: T(s.spaceId),
363
354
  sort: { field: "relevance" },
364
355
  limit: s.limit || 20,
365
356
  query: s.query,
366
- filters: P(r({
357
+ filters: P(o({
367
358
  isDeletedOnly: !1,
368
359
  navigableBlockContentOnly: !1,
369
360
  excludeTemplates: !0,
@@ -374,7 +365,7 @@ class pe {
374
365
  lastEditedTime: {},
375
366
  createdTime: {}
376
367
  }, s.filters), {
377
- ancestors: (l = s.filters) != null && l.ancestors ? s.filters.ancestors.map((p) => A(p)) : []
368
+ ancestors: (l = s.filters) != null && l.ancestors ? s.filters.ancestors.map((_) => T(_)) : []
378
369
  })
379
370
  };
380
371
  return this.fetch({
@@ -391,11 +382,11 @@ class pe {
391
382
  * @returns backlink list with recordmap
392
383
  */
393
384
  getBacklinks(s, t) {
394
- return _(this, null, function* () {
385
+ return y(this, null, function* () {
395
386
  const e = {
396
387
  block: {
397
- id: A(s.block.id),
398
- spaceId: A(s.block.spaceId)
388
+ id: T(s.block.id),
389
+ spaceId: T(s.block.spaceId)
399
390
  }
400
391
  };
401
392
  return this.fetch({
@@ -405,30 +396,38 @@ class pe {
405
396
  });
406
397
  });
407
398
  }
408
- fetch(p) {
409
- return _(this, arguments, function* ({
399
+ fetch(_) {
400
+ return y(this, arguments, function* ({
410
401
  endpoint: s,
411
402
  body: t,
412
403
  fetchOption: e,
413
404
  headers: l
414
405
  }) {
415
- const a = P(r(r({}, l), e == null ? void 0 : e.headers), {
406
+ const a = P(o(o({}, l), e == null ? void 0 : e.headers), {
416
407
  "Content-Type": "application/json"
417
408
  });
418
409
  this._authToken && (a.cookie = `token_v2=${this._authToken}`), this._activeUser && (a["x-notion-active-user-header"] = this._activeUser);
419
- const n = `${this._apiBaseUrl}/${s}`, c = r({
410
+ const n = `${this._apiBaseUrl}/${s}`, c = o({
420
411
  method: "post",
421
412
  body: JSON.stringify(t),
422
413
  headers: a
423
414
  }, e);
424
415
  if ((e == null ? void 0 : e.timeout) !== void 0) {
425
- const f = new AbortController();
426
- setTimeout(() => f.abort(), e.timeout), c.signal = f.signal;
416
+ const k = new AbortController();
417
+ setTimeout(() => k.abort(), e.timeout), c.signal = k.signal;
427
418
  }
428
- return fetch(n, c).then((f) => f.json());
419
+ return fetch(n, c).then((k) => k.json());
429
420
  });
430
421
  }
431
422
  }
423
+ function N(p) {
424
+ var s;
425
+ if (p)
426
+ for (const t of Object.keys(p)) {
427
+ const e = p[t];
428
+ e != null && e.spaceId && ((s = e.value) != null && s.value) && (p[t] = e.value);
429
+ }
430
+ }
432
431
  export {
433
432
  pe as NotionAPI
434
433
  };
@@ -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 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 // 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\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 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 for (const table of ['block', 'collection', 'collection_view', 'notion_user']) {\n const map = (response.recordMap as unknown as Record<string, Record<string, unknown>>)[table] as\n | Record<string, unknown>\n | undefined\n if (!map) continue\n for (const [id, entry] of Object.entries(map)) {\n const e = entry as { spaceId?: string; value?: { value?: unknown; role?: string } }\n if (e.spaceId && e.value?.value) map[id] = e.value\n }\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 return this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: blockIds.map(blockId => ({ table: 'block', id: blockId, version: -1 })) },\n fetchOption\n })\n }\n\n public async syncRecords(records: { id: string; table: string }[], fetchOption?: FetchOption) {\n return this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: records.map(({ id, table }) => ({ table, id, version: -1 })) },\n fetchOption\n })\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 return this.fetch<SearchResults>({\n endpoint: 'search',\n body,\n fetchOption\n })\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 return this.fetch<BacklinkResults>({\n endpoint: 'getBacklinksForBlockInitial',\n body,\n fetchOption\n })\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"],"names":["NotionAPI","apiBaseUrl","authToken","activeUser","userTimeZone","_0","__async","pageId","concurrency","fetchFullInfo","fetchCollections","signFileUrls","chunkLimit","chunkNumber","fetchOption","page","recordMap","uuidToId","_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","table","map","entry","e","_m","userIds","spaceIds","blockIds","records","urls","params","endpoint","clientHeaders","headers","url","requestInit","ctrl"],"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 // 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\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 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 return this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: blockIds.map(blockId => ({ table: 'block', id: blockId, version: -1 })) },\n fetchOption\n })\n }\n\n public async syncRecords(records: { id: string; table: string }[], fetchOption?: FetchOption) {\n return this.fetch<PageChunk>({\n endpoint: 'syncRecordValues',\n body: { requests: records.map(({ id, table }) => ({ table, id, version: -1 })) },\n fetchOption\n })\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 return this.fetch<SearchResults>({\n endpoint: 'search',\n body,\n fetchOption\n })\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 return this.fetch<BacklinkResults>({\n endpoint: 'getBacklinksForBlockInitial',\n body,\n fetchOption\n })\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 if (entry?.spaceId && entry.value?.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","_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","normalizeMap","userIds","spaceIds","blockIds","records","table","urls","params","endpoint","clientHeaders","headers","url","requestInit","ctrl","map","entry"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"notion-api.d.ts","sourceRoot":"","sources":["../src/notion-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notion-api.d.ts","sourceRoot":"","sources":["../src/notion-api.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@texonom/nclient",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
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/ntypes": "^1.5.5",
22
- "@texonom/nutils": "^1.5.5"
21
+ "@texonom/ntypes": "^1.5.6",
22
+ "@texonom/nutils": "^1.5.6"
23
23
  },
24
24
  "standard-version": {
25
25
  "skip": {