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