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