@notionhq/custom-blocks 0.1.39 → 0.1.41
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/dist/bridge/SandboxBridge.js +40 -39
- package/dist/bridge/dataSources/query.js +9 -9
- package/dist/bridge/hostState.d.ts.map +1 -1
- package/dist/bridge/hostState.js +2 -0
- package/dist/bridge/pendingRequests.js +3 -2
- package/dist/init.js +1 -1
- package/dist/protocol/dataSources/dataSourcePage.d.ts +4 -0
- package/dist/protocol/dataSources/dataSourcePage.js +5 -0
- package/dist/protocol/messages/createPageResult.d.ts +1 -0
- package/dist/protocol/messages/getPage.d.ts +1 -0
- package/dist/protocol/messages/hostToSandbox.d.ts +5 -0
- package/dist/protocol/messages/init.js +2 -0
- package/dist/protocol/messages/queryDataSourceResult.d.ts +2 -0
- package/dist/protocol/messages/updatePageResult.d.ts +1 -0
- package/dist/protocol/pages/page.d.ts +3 -0
- package/dist/protocol/pages/page.js +4 -0
- package/dist/react/useCustomBlockInit.d.ts.map +1 -1
- package/dist/react/useCustomBlockInit.js +1 -3
- package/dist/react/useDataSource.d.ts.map +1 -1
- package/dist/react/useDataSource.js +3 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/docs/pages.md +14 -2
- package/package.json +1 -1
- package/src/bridge/SandboxBridge.ts +1 -1
- package/src/bridge/dataSources/query.ts +9 -22
- package/src/bridge/hostState.ts +2 -0
- package/src/react/useCustomBlockInit.ts +1 -3
- package/src/react/useDataSource.ts +3 -0
- package/src/types.ts +5 -0
|
@@ -23,44 +23,34 @@ const RESPONSE_TYPE_BY_REQUEST = new Map([
|
|
|
23
23
|
]);
|
|
24
24
|
const INIT_RESULT_TIMER_FALLBACK_MS = 100;
|
|
25
25
|
export class SandboxBridge {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
listener();
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
this.handleMessage = (event) => {
|
|
58
|
-
if (event.source !== window.parent) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
this.receiveMessage(event.data);
|
|
62
|
-
};
|
|
63
|
-
}
|
|
26
|
+
hostState = {
|
|
27
|
+
status: "uninitialized",
|
|
28
|
+
theme: "light",
|
|
29
|
+
contrastMode: DEFAULT_CONTRAST_MODE,
|
|
30
|
+
};
|
|
31
|
+
listeners = new Set();
|
|
32
|
+
messageLog = [];
|
|
33
|
+
messageLogListeners = new Set();
|
|
34
|
+
nextRequestId = 1;
|
|
35
|
+
pendingCreatePage = new PendingRequests("custom-block-create-page");
|
|
36
|
+
pendingGetPage = new PendingRequests("custom-block-get-page");
|
|
37
|
+
pendingGetUser = new PendingRequests("custom-block-get-user");
|
|
38
|
+
pendingListUsers = new PendingRequests("custom-block-list-users");
|
|
39
|
+
pendingUpdatePage = new PendingRequests("custom-block-update-page");
|
|
40
|
+
hasSentConnect = false;
|
|
41
|
+
hasReceivedInit = false;
|
|
42
|
+
initializationId;
|
|
43
|
+
hasSentInitResult = false;
|
|
44
|
+
pendingOutboundMessages = [];
|
|
45
|
+
latestDataSourceBindings = {};
|
|
46
|
+
isMockState = false;
|
|
47
|
+
isListening = false;
|
|
48
|
+
resolveInit;
|
|
49
|
+
rejectInit;
|
|
50
|
+
initMessage = new Promise((resolve, reject) => {
|
|
51
|
+
this.resolveInit = resolve;
|
|
52
|
+
this.rejectInit = reject;
|
|
53
|
+
});
|
|
64
54
|
startListening() {
|
|
65
55
|
if (this.isListening || typeof window === "undefined") {
|
|
66
56
|
return;
|
|
@@ -68,6 +58,7 @@ export class SandboxBridge {
|
|
|
68
58
|
this.isListening = true;
|
|
69
59
|
window.addEventListener("message", this.handleMessage);
|
|
70
60
|
}
|
|
61
|
+
static MAX_LOG_ENTRIES = 100;
|
|
71
62
|
logMessage(direction, data) {
|
|
72
63
|
if (this.messageLog.length >= SandboxBridge.MAX_LOG_ENTRIES) {
|
|
73
64
|
this.messageLog.shift();
|
|
@@ -188,6 +179,17 @@ export class SandboxBridge {
|
|
|
188
179
|
? message.type
|
|
189
180
|
: undefined;
|
|
190
181
|
}
|
|
182
|
+
notify = () => {
|
|
183
|
+
for (const listener of this.listeners) {
|
|
184
|
+
listener();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
handleMessage = (event) => {
|
|
188
|
+
if (event.source !== window.parent) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.receiveMessage(event.data);
|
|
192
|
+
};
|
|
191
193
|
receiveMessage(data) {
|
|
192
194
|
this.logMessage("received", data);
|
|
193
195
|
const parsed = v.safeParse(hostToSandboxMessageSchema, data);
|
|
@@ -846,7 +848,6 @@ export class SandboxBridge {
|
|
|
846
848
|
}
|
|
847
849
|
}
|
|
848
850
|
}
|
|
849
|
-
SandboxBridge.MAX_LOG_ENTRIES = 100;
|
|
850
851
|
function getInitialContentHeight() {
|
|
851
852
|
if (typeof document === "undefined") {
|
|
852
853
|
return 0;
|
|
@@ -85,13 +85,13 @@ function resolveDataSourceQueryOptions(options) {
|
|
|
85
85
|
return {
|
|
86
86
|
status: "ok",
|
|
87
87
|
options: {
|
|
88
|
-
limit: Object.
|
|
88
|
+
limit: Object.hasOwn(optionsObject, "limit")
|
|
89
89
|
? optionsObject.limit
|
|
90
90
|
: undefined,
|
|
91
|
-
filter: Object.
|
|
91
|
+
filter: Object.hasOwn(optionsObject, "filter")
|
|
92
92
|
? optionsObject.filter
|
|
93
93
|
: undefined,
|
|
94
|
-
sorts: Object.
|
|
94
|
+
sorts: Object.hasOwn(optionsObject, "sorts")
|
|
95
95
|
? optionsObject.sorts
|
|
96
96
|
: undefined,
|
|
97
97
|
},
|
|
@@ -138,7 +138,7 @@ function resolveFilter(filter, dataSource) {
|
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
140
|
const filterObject = filter;
|
|
141
|
-
if (Object.
|
|
141
|
+
if (Object.hasOwn(filterObject, "and")) {
|
|
142
142
|
if (Object.keys(filterObject).length !== 1 ||
|
|
143
143
|
!Array.isArray(filterObject.and)) {
|
|
144
144
|
return {
|
|
@@ -226,7 +226,7 @@ function resolveSort(sort, dataSource) {
|
|
|
226
226
|
};
|
|
227
227
|
}
|
|
228
228
|
const direction = sortObject.direction;
|
|
229
|
-
if (!Object.
|
|
229
|
+
if (!Object.hasOwn(sortObject, "direction") ||
|
|
230
230
|
(direction !== "ascending" && direction !== "descending")) {
|
|
231
231
|
return {
|
|
232
232
|
status: "error",
|
|
@@ -401,8 +401,8 @@ function resolveDatePropertyFilter(propertyId, value) {
|
|
|
401
401
|
};
|
|
402
402
|
}
|
|
403
403
|
function resolvePropertyAddress(value, dataSource) {
|
|
404
|
-
const hasKey = Object.
|
|
405
|
-
const hasPropertyId = Object.
|
|
404
|
+
const hasKey = Object.hasOwn(value, "key");
|
|
405
|
+
const hasPropertyId = Object.hasOwn(value, "propertyId");
|
|
406
406
|
if (hasKey === hasPropertyId) {
|
|
407
407
|
return {
|
|
408
408
|
status: "error",
|
|
@@ -417,7 +417,7 @@ function resolvePropertyAddress(value, dataSource) {
|
|
|
417
417
|
error: "Data source query property key must be a string.",
|
|
418
418
|
};
|
|
419
419
|
}
|
|
420
|
-
if (!Object.
|
|
420
|
+
if (!Object.hasOwn(dataSource.propertyIdsByKey, value.key)) {
|
|
421
421
|
return {
|
|
422
422
|
status: "error",
|
|
423
423
|
error: `Unknown property key "${value.key}" for data source "${dataSource.key}".`,
|
|
@@ -441,7 +441,7 @@ function resolvePropertyAddress(value, dataSource) {
|
|
|
441
441
|
}
|
|
442
442
|
propertyId = value.propertyId;
|
|
443
443
|
}
|
|
444
|
-
if (!Object.
|
|
444
|
+
if (!Object.hasOwn(dataSource.propertySchemasById, propertyId)) {
|
|
445
445
|
return {
|
|
446
446
|
status: "error",
|
|
447
447
|
error: `Unknown property ID "${propertyId}" for data source "${dataSource.key}".`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostState.d.ts","sourceRoot":"","sources":["../../src/bridge/hostState.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hostState.d.ts","sourceRoot":"","sources":["../../src/bridge/hostState.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/hostState.js
CHANGED
|
@@ -45,6 +45,8 @@ export function getDataSourceQueryView(hostState, key, subscriptionId, updateDat
|
|
|
45
45
|
}
|
|
46
46
|
return {
|
|
47
47
|
id: entry.id,
|
|
48
|
+
is_archived: entry.is_archived,
|
|
49
|
+
in_trash: entry.in_trash,
|
|
48
50
|
propertiesById: entry.propertiesById,
|
|
49
51
|
propertiesByKey,
|
|
50
52
|
update: args => updateDataSourcePage({
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* and calls it, then removes the entry so the same `requestId` cannot be resolved twice.
|
|
5
5
|
*/
|
|
6
6
|
export class PendingRequests {
|
|
7
|
+
prefix;
|
|
8
|
+
nextId = 1;
|
|
9
|
+
entries = new Map();
|
|
7
10
|
constructor(prefix) {
|
|
8
11
|
this.prefix = prefix;
|
|
9
|
-
this.nextId = 1;
|
|
10
|
-
this.entries = new Map();
|
|
11
12
|
}
|
|
12
13
|
allocate(resolver) {
|
|
13
14
|
const requestId = `${this.prefix}-${this.nextId}`;
|
package/dist/init.js
CHANGED
|
@@ -18,7 +18,7 @@ export class NotInIframeError extends CustomBlockInitializationError {
|
|
|
18
18
|
this.name = "NotInIframeError";
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
const DEFAULT_INIT_TIMEOUT_MS =
|
|
21
|
+
const DEFAULT_INIT_TIMEOUT_MS = 15_000;
|
|
22
22
|
const NOT_IN_IFRAME_MESSAGE = "<NotionCustomBlock> only works inside an iframe — use the dev shell or deploy to Notion.";
|
|
23
23
|
let initPromise;
|
|
24
24
|
/**
|
|
@@ -6,6 +6,10 @@ import * as v from "valibot";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const notionDataSourcePageBridgeSchema: v.ObjectSchema<{
|
|
8
8
|
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.BrandAction<string, "NotionPageId">]>;
|
|
9
|
+
/** Whether the page or an ancestor is archived. */
|
|
10
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
11
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
12
|
+
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
9
13
|
readonly propertiesById: v.RecordSchema<v.StringSchema<undefined>, v.OptionalSchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.VariantSchema<"type", [v.ObjectSchema<{
|
|
10
14
|
readonly type: v.LiteralSchema<"date", undefined>;
|
|
11
15
|
readonly start_date: v.StringSchema<undefined>;
|
|
@@ -8,5 +8,10 @@ import { notionDataSourceValueSchema } from "./dataSourceValue.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export const notionDataSourcePageBridgeSchema = v.object({
|
|
10
10
|
id: notionPageIdSchema,
|
|
11
|
+
// TODO(custom-blocks): Require is_archived and in_trash in bridge protocol v4.
|
|
12
|
+
/** Whether the page or an ancestor is archived. */
|
|
13
|
+
is_archived: v.optional(v.boolean()),
|
|
14
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
15
|
+
in_trash: v.optional(v.boolean()),
|
|
11
16
|
propertiesById: v.record(v.string(), v.optional(notionDataSourceValueSchema)),
|
|
12
17
|
});
|
|
@@ -200,6 +200,7 @@ export declare const createPageResultMessageSchema: v.VariantSchema<"status", [v
|
|
|
200
200
|
}, undefined>], undefined>, undefined>;
|
|
201
201
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
202
202
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
203
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
203
204
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
204
205
|
}, undefined>;
|
|
205
206
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -205,6 +205,7 @@ export declare const getPageResultMessageSchema: v.VariantSchema<"status", [v.Ob
|
|
|
205
205
|
}, undefined>], undefined>, undefined>;
|
|
206
206
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
207
207
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
208
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
208
209
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
209
210
|
}, undefined>;
|
|
210
211
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -449,6 +449,8 @@ export declare const hostToSandboxMessageSchema: v.VariantSchema<"type", [v.Vari
|
|
|
449
449
|
readonly status: v.LiteralSchema<"success", undefined>;
|
|
450
450
|
readonly items: v.ArraySchema<v.ObjectSchema<{
|
|
451
451
|
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.BrandAction<string, "NotionPageId">]>;
|
|
452
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
453
|
+
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
452
454
|
readonly propertiesById: v.RecordSchema<v.StringSchema<undefined>, v.OptionalSchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.VariantSchema<"type", [v.ObjectSchema<{
|
|
453
455
|
readonly type: v.LiteralSchema<"date", undefined>;
|
|
454
456
|
readonly start_date: v.StringSchema<undefined>;
|
|
@@ -709,6 +711,7 @@ export declare const hostToSandboxMessageSchema: v.VariantSchema<"type", [v.Vari
|
|
|
709
711
|
}, undefined>], undefined>, undefined>;
|
|
710
712
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
711
713
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
714
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
712
715
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
713
716
|
}, undefined>;
|
|
714
717
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -908,6 +911,7 @@ export declare const hostToSandboxMessageSchema: v.VariantSchema<"type", [v.Vari
|
|
|
908
911
|
}, undefined>], undefined>, undefined>;
|
|
909
912
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
910
913
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
914
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
911
915
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
912
916
|
}, undefined>;
|
|
913
917
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -1160,6 +1164,7 @@ export declare const hostToSandboxMessageSchema: v.VariantSchema<"type", [v.Vari
|
|
|
1160
1164
|
}, undefined>], undefined>, undefined>;
|
|
1161
1165
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1162
1166
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
1167
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1163
1168
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
1164
1169
|
}, undefined>;
|
|
1165
1170
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -22,6 +22,8 @@ export class CustomBlockInitializationError extends Error {
|
|
|
22
22
|
this.code = error.code;
|
|
23
23
|
this.isRetryable = error.isRetryable;
|
|
24
24
|
}
|
|
25
|
+
code;
|
|
26
|
+
isRetryable;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Initialization message sent by the host to the sandbox exactly once, in response to the
|
|
@@ -17,6 +17,8 @@ export declare const queryDataSourceResultMessageSchema: v.VariantSchema<"status
|
|
|
17
17
|
readonly status: v.LiteralSchema<"success", undefined>;
|
|
18
18
|
readonly items: v.ArraySchema<v.ObjectSchema<{
|
|
19
19
|
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.BrandAction<string, "NotionPageId">]>;
|
|
20
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
21
|
+
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
20
22
|
readonly propertiesById: v.RecordSchema<v.StringSchema<undefined>, v.OptionalSchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.VariantSchema<"type", [v.ObjectSchema<{
|
|
21
23
|
readonly type: v.LiteralSchema<"date", undefined>;
|
|
22
24
|
readonly start_date: v.StringSchema<undefined>;
|
|
@@ -199,6 +199,7 @@ export declare const updatePageResultMessageSchema: v.VariantSchema<"status", [v
|
|
|
199
199
|
}, undefined>], undefined>, undefined>;
|
|
200
200
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
201
201
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
202
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
202
203
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
203
204
|
}, undefined>;
|
|
204
205
|
}, undefined>, v.ObjectSchema<{
|
|
@@ -595,6 +595,9 @@ export declare const notionPageSchema: v.ObjectSchema<{
|
|
|
595
595
|
}, undefined>], undefined>, undefined>;
|
|
596
596
|
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
597
597
|
readonly public_url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
598
|
+
/** Whether the page or an ancestor is archived. */
|
|
599
|
+
readonly is_archived: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
600
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
598
601
|
readonly in_trash: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
599
602
|
}, undefined>;
|
|
600
603
|
export type NotionPage = v.InferOutput<typeof notionPageSchema>;
|
|
@@ -207,5 +207,9 @@ export const notionPageSchema = v.object({
|
|
|
207
207
|
cover: v.optional(notionPageCoverSchema),
|
|
208
208
|
url: v.optional(v.string()),
|
|
209
209
|
public_url: v.optional(v.string()),
|
|
210
|
+
// TODO(custom-blocks): Require is_archived and in_trash in bridge protocol v4.
|
|
211
|
+
/** Whether the page or an ancestor is archived. */
|
|
212
|
+
is_archived: v.optional(v.boolean()),
|
|
213
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
210
214
|
in_trash: v.optional(v.boolean()),
|
|
211
215
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomBlockInit.d.ts","sourceRoot":"","sources":["../../src/react/useCustomBlockInit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAA;AAEvG,OAAO,EACN,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAE3B,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;GASG;AACH,MAAM,MAAM,wBAAwB,GACjC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,8BAA8B,CAAA;CAAE,GAC1D;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAA;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,CAAC,EAAE,sBAAsB,GAC3B,wBAAwB,
|
|
1
|
+
{"version":3,"file":"useCustomBlockInit.d.ts","sourceRoot":"","sources":["../../src/react/useCustomBlockInit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAA;AAEvG,OAAO,EACN,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAE3B,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;GASG;AACH,MAAM,MAAM,wBAAwB,GACjC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,8BAA8B,CAAA;CAAE,GAC1D;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAA;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,CAAC,EAAE,sBAAsB,GAC3B,wBAAwB,CAyB1B"}
|
|
@@ -22,6 +22,7 @@ export function useCustomBlockInit(opts) {
|
|
|
22
22
|
isLoaded: false,
|
|
23
23
|
error: undefined,
|
|
24
24
|
});
|
|
25
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(opts): Initialization caches its first options and promise. Later options are ignored, so changes should not resubscribe to the same promise.
|
|
25
26
|
useEffect(() => {
|
|
26
27
|
let cancelled = false;
|
|
27
28
|
initCustomBlock(opts).then(initial => {
|
|
@@ -36,9 +37,6 @@ export function useCustomBlockInit(opts) {
|
|
|
36
37
|
return () => {
|
|
37
38
|
cancelled = true;
|
|
38
39
|
};
|
|
39
|
-
// `initCustomBlock` caches its result, so options after the first call
|
|
40
|
-
// are ignored — re-running on opts changes would be misleading.
|
|
41
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
40
|
}, []);
|
|
43
41
|
return state;
|
|
44
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataSource.d.ts","sourceRoot":"","sources":["../../src/react/useDataSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAG5E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC5B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useDataSource.d.ts","sourceRoot":"","sources":["../../src/react/useDataSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAG5E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC5B,mBAAmB,CA0CrB"}
|
|
@@ -20,6 +20,9 @@ export function useDataSource(key, options) {
|
|
|
20
20
|
? host.dataSources.find(dataSource => dataSource.key === key)
|
|
21
21
|
: undefined;
|
|
22
22
|
const isInitialized = host.status === "initialized";
|
|
23
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(options): Compare options by value through optionsIdentity. Object identity alone must not trigger queries.
|
|
24
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(optionsIdentity): Changes to the serialized options must trigger a query even though the callback reads options.
|
|
25
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(matchingDataSource): Requery when the matching data source changes, even when the key and options are unchanged.
|
|
23
26
|
useEffect(() => {
|
|
24
27
|
if (!isInitialized) {
|
|
25
28
|
return;
|
package/dist/types.d.ts
CHANGED
|
@@ -36,6 +36,10 @@ export type NotionPagePropertyInputMap = {
|
|
|
36
36
|
*/
|
|
37
37
|
export type NotionDataSourcePage = {
|
|
38
38
|
id: NotionPageId;
|
|
39
|
+
/** Whether the page or an ancestor is archived. */
|
|
40
|
+
is_archived?: boolean;
|
|
41
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
42
|
+
in_trash?: boolean;
|
|
39
43
|
/**
|
|
40
44
|
* Keyed mapping of raw property IDs to their value. Includes all properties on the data source,
|
|
41
45
|
* including the four built-ins (`created_time`, `last_edited_time`, `created_by`,
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4DAA4D,CAAA;AACxG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAA;AAC5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAA;AAC1G,OAAO,KAAK,EACX,kBAAkB,EAClB,YAAY,EACZ,MAAM,yCAAyC,CAAA;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAA;AAC9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAA;AACvG,OAAO,KAAK,EACX,uBAAuB,EACvB,8BAA8B,EAC9B,MAAM,+DAA+D,CAAA;AACtE,OAAO,KAAK,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,sDAAsD,CAAA;AAC7D,OAAO,KAAK,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,sDAAsD,CAAA;AAC7D,OAAO,KAAK,EACX,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,MAAM,wDAAwD,CAAA;AAC/D,OAAO,KAAK,EACX,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,MAAM,8DAA8D,CAAA;AACrE,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,oEAAoE,CAAA;AAC7H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAA;AAChG,OAAO,KAAK,EACX,8BAA8B,EAC9B,uBAAuB,EACvB,MAAM,+DAA+D,CAAA;AACtE,OAAO,KAAK,EACX,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,MAAM,gDAAgD,CAAA;AAEvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AACtF,YAAY,EACX,kBAAkB,EAClB,aAAa,GACb,MAAM,yCAAyC,CAAA;AAChD,YAAY,EACX,UAAU,EACV,YAAY,EACZ,cAAc,GACd,MAAM,gDAAgD,CAAA;AACvD,YAAY,EACX,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,GAC9B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GACvC,uBAAuB,SAAS,MAAM,aAAa,GAChD,aAAa,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACnC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,KAAK,GACN,KAAK,CAAA;AAET,MAAM,MAAM,0BAA0B,GAAG;IACxC,CAAC,eAAe,EAAE,MAAM,GAAG,4BAA4B,CAAA;CACvD,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,EAAE,EAAE,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.js
CHANGED
package/docs/pages.md
CHANGED
|
@@ -83,6 +83,18 @@ console.log(page.properties);
|
|
|
83
83
|
|
|
84
84
|
`page` mirrors Notion's public API shape, with `id`, `parent`, `properties`, optional `icon` / `cover`, etc. — see `NotionPage` in the types list below.
|
|
85
85
|
|
|
86
|
+
### Archive
|
|
87
|
+
|
|
88
|
+
Archiving keeps content you no longer actively use without deleting it. [Learn about Archive](https://www.notion.com/help/archive-pages).
|
|
89
|
+
|
|
90
|
+
Read `is_archived` on a page or data source row. It is `true` when the page or an ancestor is archived.
|
|
91
|
+
|
|
92
|
+
### Trash
|
|
93
|
+
|
|
94
|
+
Pages in Trash are scheduled for permanent deletion. By default, Notion permanently deletes them 30 days after they enter Trash, unless you restore them first. Enterprise workspaces can configure a different retention period. [Learn about Trash retention](https://www.notion.com/help/custom-data-retention-settings).
|
|
95
|
+
|
|
96
|
+
Read `in_trash` on a page or data source row. It is `true` when the page or an ancestor is in Trash.
|
|
97
|
+
|
|
86
98
|
## Updating pages
|
|
87
99
|
|
|
88
100
|
`pages.update` writes back to a page. The optional fields (`properties`, `icon`, `cover`, `archived`) are independent — supply only what you want to change:
|
|
@@ -107,13 +119,13 @@ If you call `pages.update` with no fields to change, it short-circuits and resol
|
|
|
107
119
|
|
|
108
120
|
## Deleting (archiving) pages
|
|
109
121
|
|
|
110
|
-
`pages.delete(pageId)`
|
|
122
|
+
`pages.delete(pageId)` archives the page. It does not move the page to Trash.
|
|
111
123
|
|
|
112
124
|
```ts
|
|
113
125
|
await pages.delete(pageId);
|
|
114
126
|
```
|
|
115
127
|
|
|
116
|
-
To
|
|
128
|
+
To unarchive a page, call `pages.update({ pageId, archived: false })`.
|
|
117
129
|
|
|
118
130
|
## Icons, covers, and file uploads
|
|
119
131
|
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@ import type { CustomBlockCreatePageErrorInfo } from "@notionhq/custom-blocks-pro
|
|
|
16
16
|
import type { GetUserMessage } from "@notionhq/custom-blocks-protocol/messages/getUser.js"
|
|
17
17
|
import {
|
|
18
18
|
hostToSandboxMessageSchema,
|
|
19
|
-
PrimeableHostToSandboxMessage,
|
|
19
|
+
type PrimeableHostToSandboxMessage,
|
|
20
20
|
} from "@notionhq/custom-blocks-protocol/messages/hostToSandbox.js"
|
|
21
21
|
import {
|
|
22
22
|
CustomBlockInitializationError,
|
|
@@ -147,13 +147,13 @@ function resolveDataSourceQueryOptions(
|
|
|
147
147
|
return {
|
|
148
148
|
status: "ok",
|
|
149
149
|
options: {
|
|
150
|
-
limit: Object.
|
|
150
|
+
limit: Object.hasOwn(optionsObject, "limit")
|
|
151
151
|
? optionsObject.limit
|
|
152
152
|
: undefined,
|
|
153
|
-
filter: Object.
|
|
153
|
+
filter: Object.hasOwn(optionsObject, "filter")
|
|
154
154
|
? optionsObject.filter
|
|
155
155
|
: undefined,
|
|
156
|
-
sorts: Object.
|
|
156
|
+
sorts: Object.hasOwn(optionsObject, "sorts")
|
|
157
157
|
? optionsObject.sorts
|
|
158
158
|
: undefined,
|
|
159
159
|
},
|
|
@@ -217,7 +217,7 @@ function resolveFilter(
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
const filterObject = filter as Record<string, unknown>
|
|
220
|
-
if (Object.
|
|
220
|
+
if (Object.hasOwn(filterObject, "and")) {
|
|
221
221
|
if (
|
|
222
222
|
Object.keys(filterObject).length !== 1 ||
|
|
223
223
|
!Array.isArray(filterObject.and)
|
|
@@ -325,7 +325,7 @@ function resolveSort(
|
|
|
325
325
|
}
|
|
326
326
|
const direction = sortObject.direction
|
|
327
327
|
if (
|
|
328
|
-
!Object.
|
|
328
|
+
!Object.hasOwn(sortObject, "direction") ||
|
|
329
329
|
(direction !== "ascending" && direction !== "descending")
|
|
330
330
|
) {
|
|
331
331
|
return {
|
|
@@ -557,11 +557,8 @@ function resolvePropertyAddress(
|
|
|
557
557
|
):
|
|
558
558
|
| { status: "ok"; propertyId: string; propertyType: string }
|
|
559
559
|
| { status: "error"; error: string } {
|
|
560
|
-
const hasKey = Object.
|
|
561
|
-
const hasPropertyId = Object.
|
|
562
|
-
value,
|
|
563
|
-
"propertyId",
|
|
564
|
-
)
|
|
560
|
+
const hasKey = Object.hasOwn(value, "key")
|
|
561
|
+
const hasPropertyId = Object.hasOwn(value, "propertyId")
|
|
565
562
|
if (hasKey === hasPropertyId) {
|
|
566
563
|
return {
|
|
567
564
|
status: "error",
|
|
@@ -577,12 +574,7 @@ function resolvePropertyAddress(
|
|
|
577
574
|
error: "Data source query property key must be a string.",
|
|
578
575
|
}
|
|
579
576
|
}
|
|
580
|
-
if (
|
|
581
|
-
!Object.prototype.hasOwnProperty.call(
|
|
582
|
-
dataSource.propertyIdsByKey,
|
|
583
|
-
value.key,
|
|
584
|
-
)
|
|
585
|
-
) {
|
|
577
|
+
if (!Object.hasOwn(dataSource.propertyIdsByKey, value.key)) {
|
|
586
578
|
return {
|
|
587
579
|
status: "error",
|
|
588
580
|
error: `Unknown property key "${value.key}" for data source "${dataSource.key}".`,
|
|
@@ -605,12 +597,7 @@ function resolvePropertyAddress(
|
|
|
605
597
|
}
|
|
606
598
|
propertyId = value.propertyId
|
|
607
599
|
}
|
|
608
|
-
if (
|
|
609
|
-
!Object.prototype.hasOwnProperty.call(
|
|
610
|
-
dataSource.propertySchemasById,
|
|
611
|
-
propertyId,
|
|
612
|
-
)
|
|
613
|
-
) {
|
|
600
|
+
if (!Object.hasOwn(dataSource.propertySchemasById, propertyId)) {
|
|
614
601
|
return {
|
|
615
602
|
status: "error",
|
|
616
603
|
error: `Unknown property ID "${propertyId}" for data source "${dataSource.key}".`,
|
package/src/bridge/hostState.ts
CHANGED
|
@@ -45,6 +45,7 @@ export function useCustomBlockInit(
|
|
|
45
45
|
isLoaded: false,
|
|
46
46
|
error: undefined,
|
|
47
47
|
})
|
|
48
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(opts): Initialization caches its first options and promise. Later options are ignored, so changes should not resubscribe to the same promise.
|
|
48
49
|
useEffect(() => {
|
|
49
50
|
let cancelled = false
|
|
50
51
|
initCustomBlock(opts).then(
|
|
@@ -62,9 +63,6 @@ export function useCustomBlockInit(
|
|
|
62
63
|
return () => {
|
|
63
64
|
cancelled = true
|
|
64
65
|
}
|
|
65
|
-
// `initCustomBlock` caches its result, so options after the first call
|
|
66
|
-
// are ignored — re-running on opts changes would be misleading.
|
|
67
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
68
66
|
}, [])
|
|
69
67
|
return state
|
|
70
68
|
}
|
|
@@ -29,6 +29,9 @@ export function useDataSource(
|
|
|
29
29
|
: undefined
|
|
30
30
|
|
|
31
31
|
const isInitialized = host.status === "initialized"
|
|
32
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(options): Compare options by value through optionsIdentity. Object identity alone must not trigger queries.
|
|
33
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(optionsIdentity): Changes to the serialized options must trigger a query even though the callback reads options.
|
|
34
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies(matchingDataSource): Requery when the matching data source changes, even when the key and options are unchanged.
|
|
32
35
|
useEffect(() => {
|
|
33
36
|
if (!isInitialized) {
|
|
34
37
|
return
|
package/src/types.ts
CHANGED
|
@@ -85,6 +85,11 @@ export type NotionPagePropertyInputMap = {
|
|
|
85
85
|
*/
|
|
86
86
|
export type NotionDataSourcePage = {
|
|
87
87
|
id: NotionPageId
|
|
88
|
+
// TODO(custom-blocks): Require is_archived and in_trash in bridge protocol v4.
|
|
89
|
+
/** Whether the page or an ancestor is archived. */
|
|
90
|
+
is_archived?: boolean
|
|
91
|
+
/** Whether the page or an ancestor is in Trash. */
|
|
92
|
+
in_trash?: boolean
|
|
88
93
|
/**
|
|
89
94
|
* Keyed mapping of raw property IDs to their value. Includes all properties on the data source,
|
|
90
95
|
* including the four built-ins (`created_time`, `last_edited_time`, `created_by`,
|