@notionhq/custom-blocks 0.0.58
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/HOST.md +171 -0
- package/README.md +57 -0
- package/bin/cli/attach.js +180 -0
- package/bin/cli/cli.js +248 -0
- package/bin/cli/create.js +106 -0
- package/bin/cli/datasources.js +255 -0
- package/bin/cli/deploy.js +109 -0
- package/bin/cli/ids.js +13 -0
- package/bin/cli/ntn.js +95 -0
- package/bin/cli/pullData.js +76 -0
- package/bin/cli/pullManifest.js +158 -0
- package/bin/cli/target.js +95 -0
- package/bin/src/bridge/dataSources/propertySchema.js +148 -0
- package/bin/src/bridge/manifest.js +40 -0
- package/dist/autoResize.d.ts +4 -0
- package/dist/autoResize.d.ts.map +1 -0
- package/dist/autoResize.js +71 -0
- package/dist/bridge/SandboxBridge.d.ts +92 -0
- package/dist/bridge/SandboxBridge.d.ts.map +1 -0
- package/dist/bridge/SandboxBridge.js +718 -0
- package/dist/bridge/dataSources/dataSource.d.ts +732 -0
- package/dist/bridge/dataSources/dataSource.d.ts.map +1 -0
- package/dist/bridge/dataSources/dataSource.js +37 -0
- package/dist/bridge/dataSources/dataSourcePage.d.ts +118 -0
- package/dist/bridge/dataSources/dataSourcePage.d.ts.map +1 -0
- package/dist/bridge/dataSources/dataSourcePage.js +14 -0
- package/dist/bridge/dataSources/dataSourceValue.d.ts +67 -0
- package/dist/bridge/dataSources/dataSourceValue.d.ts.map +1 -0
- package/dist/bridge/dataSources/dataSourceValue.js +14 -0
- package/dist/bridge/dataSources/dateValue.d.ts +158 -0
- package/dist/bridge/dataSources/dateValue.d.ts.map +1 -0
- package/dist/bridge/dataSources/dateValue.js +59 -0
- package/dist/bridge/dataSources/errors.d.ts +6 -0
- package/dist/bridge/dataSources/errors.d.ts.map +1 -0
- package/dist/bridge/dataSources/errors.js +4 -0
- package/dist/bridge/dataSources/propertySchema.d.ts +191 -0
- package/dist/bridge/dataSources/propertySchema.d.ts.map +1 -0
- package/dist/bridge/dataSources/propertySchema.js +148 -0
- package/dist/bridge/dataSources/recordPointer.d.ts +10 -0
- package/dist/bridge/dataSources/recordPointer.d.ts.map +1 -0
- package/dist/bridge/dataSources/recordPointer.js +8 -0
- package/dist/bridge/dataSources/resolve.d.ts +22 -0
- package/dist/bridge/dataSources/resolve.d.ts.map +1 -0
- package/dist/bridge/dataSources/resolve.js +65 -0
- package/dist/bridge/dataSources/resolveProperty.d.ts +41 -0
- package/dist/bridge/dataSources/resolveProperty.d.ts.map +1 -0
- package/dist/bridge/dataSources/resolveProperty.js +73 -0
- package/dist/bridge/errors.d.ts +12 -0
- package/dist/bridge/errors.d.ts.map +1 -0
- package/dist/bridge/errors.js +6 -0
- package/dist/bridge/hostState.d.ts +65 -0
- package/dist/bridge/hostState.d.ts.map +1 -0
- package/dist/bridge/hostState.js +65 -0
- package/dist/bridge/ids.d.ts +39 -0
- package/dist/bridge/ids.d.ts.map +1 -0
- package/dist/bridge/ids.js +5 -0
- package/dist/bridge/incomingType.d.ts +10 -0
- package/dist/bridge/incomingType.d.ts.map +1 -0
- package/dist/bridge/incomingType.js +17 -0
- package/dist/bridge/loadManifest.d.ts +25 -0
- package/dist/bridge/loadManifest.d.ts.map +1 -0
- package/dist/bridge/loadManifest.js +68 -0
- package/dist/bridge/manifest.d.ts +66 -0
- package/dist/bridge/manifest.d.ts.map +1 -0
- package/dist/bridge/manifest.js +40 -0
- package/dist/bridge/messages/createPage.d.ts +225 -0
- package/dist/bridge/messages/createPage.d.ts.map +1 -0
- package/dist/bridge/messages/createPage.js +46 -0
- package/dist/bridge/messages/createPageResult.d.ts +211 -0
- package/dist/bridge/messages/createPageResult.d.ts.map +1 -0
- package/dist/bridge/messages/createPageResult.js +28 -0
- package/dist/bridge/messages/currentUserChanged.d.ts +19 -0
- package/dist/bridge/messages/currentUserChanged.d.ts.map +1 -0
- package/dist/bridge/messages/currentUserChanged.js +9 -0
- package/dist/bridge/messages/dataSourcesChanged.d.ts +158 -0
- package/dist/bridge/messages/dataSourcesChanged.d.ts.map +1 -0
- package/dist/bridge/messages/dataSourcesChanged.js +13 -0
- package/dist/bridge/messages/getPage.d.ts +216 -0
- package/dist/bridge/messages/getPage.d.ts.map +1 -0
- package/dist/bridge/messages/getPage.js +33 -0
- package/dist/bridge/messages/getUser.d.ts +45 -0
- package/dist/bridge/messages/getUser.d.ts.map +1 -0
- package/dist/bridge/messages/getUser.js +32 -0
- package/dist/bridge/messages/hostToSandbox.d.ts +1089 -0
- package/dist/bridge/messages/hostToSandbox.d.ts.map +1 -0
- package/dist/bridge/messages/hostToSandbox.js +32 -0
- package/dist/bridge/messages/init.d.ts +209 -0
- package/dist/bridge/messages/init.d.ts.map +1 -0
- package/dist/bridge/messages/init.js +47 -0
- package/dist/bridge/messages/invalidHostMessage.d.ts +15 -0
- package/dist/bridge/messages/invalidHostMessage.d.ts.map +1 -0
- package/dist/bridge/messages/invalidHostMessage.js +13 -0
- package/dist/bridge/messages/invalidSandboxMessage.d.ts +15 -0
- package/dist/bridge/messages/invalidSandboxMessage.d.ts.map +1 -0
- package/dist/bridge/messages/invalidSandboxMessage.js +13 -0
- package/dist/bridge/messages/listUsers.d.ts +53 -0
- package/dist/bridge/messages/listUsers.d.ts.map +1 -0
- package/dist/bridge/messages/listUsers.js +33 -0
- package/dist/bridge/messages/pageChanged.d.ts +12 -0
- package/dist/bridge/messages/pageChanged.d.ts.map +1 -0
- package/dist/bridge/messages/pageChanged.js +9 -0
- package/dist/bridge/messages/parentChanged.d.ts +22 -0
- package/dist/bridge/messages/parentChanged.d.ts.map +1 -0
- package/dist/bridge/messages/parentChanged.js +9 -0
- package/dist/bridge/messages/queryDataSource.d.ts +20 -0
- package/dist/bridge/messages/queryDataSource.d.ts.map +1 -0
- package/dist/bridge/messages/queryDataSource.js +19 -0
- package/dist/bridge/messages/queryDataSourceResult.d.ts +90 -0
- package/dist/bridge/messages/queryDataSourceResult.d.ts.map +1 -0
- package/dist/bridge/messages/queryDataSourceResult.js +21 -0
- package/dist/bridge/messages/ready.d.ts +45 -0
- package/dist/bridge/messages/ready.d.ts.map +1 -0
- package/dist/bridge/messages/ready.js +37 -0
- package/dist/bridge/messages/resize.d.ts +12 -0
- package/dist/bridge/messages/resize.d.ts.map +1 -0
- package/dist/bridge/messages/resize.js +10 -0
- package/dist/bridge/messages/sandboxToHost.d.ts +410 -0
- package/dist/bridge/messages/sandboxToHost.d.ts.map +1 -0
- package/dist/bridge/messages/sandboxToHost.js +25 -0
- package/dist/bridge/messages/themeChanged.d.ts +11 -0
- package/dist/bridge/messages/themeChanged.d.ts.map +1 -0
- package/dist/bridge/messages/themeChanged.js +10 -0
- package/dist/bridge/messages/updatePage.d.ts +171 -0
- package/dist/bridge/messages/updatePage.d.ts.map +1 -0
- package/dist/bridge/messages/updatePage.js +15 -0
- package/dist/bridge/messages/updatePageResult.d.ts +210 -0
- package/dist/bridge/messages/updatePageResult.d.ts.map +1 -0
- package/dist/bridge/messages/updatePageResult.js +27 -0
- package/dist/bridge/pages/page.d.ts +600 -0
- package/dist/bridge/pages/page.d.ts.map +1 -0
- package/dist/bridge/pages/page.js +217 -0
- package/dist/bridge/parent.d.ts +25 -0
- package/dist/bridge/parent.d.ts.map +1 -0
- package/dist/bridge/parent.js +11 -0
- package/dist/bridge/pendingRequests.d.ts +14 -0
- package/dist/bridge/pendingRequests.d.ts.map +1 -0
- package/dist/bridge/pendingRequests.js +27 -0
- package/dist/bridge/sandboxClient.d.ts +63 -0
- package/dist/bridge/sandboxClient.d.ts.map +1 -0
- package/dist/bridge/sandboxClient.js +92 -0
- package/dist/bridge/theme.d.ts +4 -0
- package/dist/bridge/theme.d.ts.map +1 -0
- package/dist/bridge/theme.js +2 -0
- package/dist/bridge/users/user.d.ts +36 -0
- package/dist/bridge/users/user.d.ts.map +1 -0
- package/dist/bridge/users/user.js +19 -0
- package/dist/customBlock.d.ts +36 -0
- package/dist/customBlock.d.ts.map +1 -0
- package/dist/customBlock.js +65 -0
- package/dist/host/createCustomBlockHost.d.ts +34 -0
- package/dist/host/createCustomBlockHost.d.ts.map +1 -0
- package/dist/host/createCustomBlockHost.js +278 -0
- package/dist/host/lifecycle/initErrors.d.ts +10 -0
- package/dist/host/lifecycle/initErrors.d.ts.map +1 -0
- package/dist/host/lifecycle/initErrors.js +123 -0
- package/dist/host/lifecycle/ready.d.ts +8 -0
- package/dist/host/lifecycle/ready.d.ts.map +1 -0
- package/dist/host/lifecycle/ready.js +24 -0
- package/dist/host/lifecycle/types.d.ts +24 -0
- package/dist/host/lifecycle/types.d.ts.map +1 -0
- package/dist/host/lifecycle/types.js +1 -0
- package/dist/host/messages/invalidSandboxMessage.d.ts +7 -0
- package/dist/host/messages/invalidSandboxMessage.d.ts.map +1 -0
- package/dist/host/messages/invalidSandboxMessage.js +24 -0
- package/dist/host/messages/types.d.ts +60 -0
- package/dist/host/messages/types.d.ts.map +1 -0
- package/dist/host/messages/types.js +1 -0
- package/dist/host/queries/querySubscriptions.d.ts +20 -0
- package/dist/host/queries/querySubscriptions.d.ts.map +1 -0
- package/dist/host/queries/querySubscriptions.js +29 -0
- package/dist/host/queries/types.d.ts +9 -0
- package/dist/host/queries/types.d.ts.map +1 -0
- package/dist/host/queries/types.js +1 -0
- package/dist/host.d.ts +73 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +42 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/init.d.ts +53 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +87 -0
- package/dist/react/DebugMessageLog.d.ts +2 -0
- package/dist/react/DebugMessageLog.d.ts.map +1 -0
- package/dist/react/DebugMessageLog.js +22 -0
- package/dist/react/NotionCustomBlock.css +110 -0
- package/dist/react/NotionCustomBlock.d.ts +50 -0
- package/dist/react/NotionCustomBlock.d.ts.map +1 -0
- package/dist/react/NotionCustomBlock.js +81 -0
- package/dist/react/index.d.ts +14 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +13 -0
- package/dist/react/standalonePreview.d.ts +2 -0
- package/dist/react/standalonePreview.d.ts.map +1 -0
- package/dist/react/standalonePreview.js +26 -0
- package/dist/react/useCustomBlockAutoResize.d.ts +30 -0
- package/dist/react/useCustomBlockAutoResize.d.ts.map +1 -0
- package/dist/react/useCustomBlockAutoResize.js +35 -0
- package/dist/react/useCustomBlockInit.d.ts +43 -0
- package/dist/react/useCustomBlockInit.d.ts.map +1 -0
- package/dist/react/useCustomBlockInit.js +60 -0
- package/dist/react/useDataSource.d.ts +13 -0
- package/dist/react/useDataSource.d.ts.map +1 -0
- package/dist/react/useDataSource.js +37 -0
- package/dist/react/useHostState.d.ts +2 -0
- package/dist/react/useHostState.d.ts.map +1 -0
- package/dist/react/useHostState.js +5 -0
- package/dist/react/useRuntimeState.d.ts +66 -0
- package/dist/react/useRuntimeState.d.ts.map +1 -0
- package/dist/react/useRuntimeState.js +73 -0
- package/dist/types.d.ts +154 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +10 -0
- package/dist/version.d.ts +9 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/docs/block-location.md +83 -0
- package/docs/data-sources.md +186 -0
- package/docs/lifecycle.md +172 -0
- package/docs/manifest.md +42 -0
- package/docs/pages.md +143 -0
- package/docs/users.md +92 -0
- package/package.json +69 -0
- package/src/autoResize.ts +84 -0
- package/src/bridge/SandboxBridge.ts +921 -0
- package/src/bridge/dataSources/dataSource.ts +63 -0
- package/src/bridge/dataSources/dataSourcePage.ts +71 -0
- package/src/bridge/dataSources/dataSourceValue.ts +19 -0
- package/src/bridge/dataSources/dateValue.ts +96 -0
- package/src/bridge/dataSources/errors.ts +14 -0
- package/src/bridge/dataSources/propertySchema.ts +186 -0
- package/src/bridge/dataSources/recordPointer.ts +13 -0
- package/src/bridge/dataSources/resolve.ts +99 -0
- package/src/bridge/dataSources/resolveProperty.ts +130 -0
- package/src/bridge/errors.ts +13 -0
- package/src/bridge/hostState.ts +154 -0
- package/src/bridge/ids.ts +58 -0
- package/src/bridge/incomingType.ts +19 -0
- package/src/bridge/loadManifest.ts +89 -0
- package/src/bridge/manifest.ts +53 -0
- package/src/bridge/messages/createPage.ts +67 -0
- package/src/bridge/messages/createPageResult.ts +52 -0
- package/src/bridge/messages/currentUserChanged.ts +14 -0
- package/src/bridge/messages/dataSourcesChanged.ts +18 -0
- package/src/bridge/messages/getPage.ts +52 -0
- package/src/bridge/messages/getUser.ts +48 -0
- package/src/bridge/messages/hostToSandbox.ts +37 -0
- package/src/bridge/messages/init.ts +81 -0
- package/src/bridge/messages/invalidHostMessage.ts +16 -0
- package/src/bridge/messages/invalidSandboxMessage.ts +18 -0
- package/src/bridge/messages/listUsers.ts +49 -0
- package/src/bridge/messages/pageChanged.ts +12 -0
- package/src/bridge/messages/parentChanged.ts +14 -0
- package/src/bridge/messages/queryDataSource.ts +24 -0
- package/src/bridge/messages/queryDataSourceResult.ts +38 -0
- package/src/bridge/messages/ready.ts +41 -0
- package/src/bridge/messages/resize.ts +13 -0
- package/src/bridge/messages/sandboxToHost.ts +30 -0
- package/src/bridge/messages/themeChanged.ts +15 -0
- package/src/bridge/messages/updatePage.ts +22 -0
- package/src/bridge/messages/updatePageResult.ts +49 -0
- package/src/bridge/pages/page.ts +281 -0
- package/src/bridge/parent.ts +27 -0
- package/src/bridge/pendingRequests.ts +28 -0
- package/src/bridge/sandboxClient.ts +137 -0
- package/src/bridge/theme.ts +5 -0
- package/src/bridge/users/user.ts +31 -0
- package/src/css.d.ts +1 -0
- package/src/customBlock.ts +102 -0
- package/src/host/createCustomBlockHost.ts +392 -0
- package/src/host/lifecycle/initErrors.ts +132 -0
- package/src/host/lifecycle/ready.ts +36 -0
- package/src/host/lifecycle/types.ts +28 -0
- package/src/host/messages/invalidSandboxMessage.ts +38 -0
- package/src/host/messages/types.ts +67 -0
- package/src/host/queries/querySubscriptions.ts +52 -0
- package/src/host/queries/types.ts +16 -0
- package/src/host.ts +167 -0
- package/src/index.ts +115 -0
- package/src/init.ts +143 -0
- package/src/react/DebugMessageLog.tsx +30 -0
- package/src/react/NotionCustomBlock.css +110 -0
- package/src/react/NotionCustomBlock.tsx +151 -0
- package/src/react/index.ts +28 -0
- package/src/react/standalonePreview.ts +28 -0
- package/src/react/useCustomBlockAutoResize.ts +46 -0
- package/src/react/useCustomBlockInit.ts +91 -0
- package/src/react/useDataSource.ts +47 -0
- package/src/react/useHostState.ts +9 -0
- package/src/react/useRuntimeState.ts +85 -0
- package/src/types.ts +175 -0
- package/src/utils.ts +13 -0
- package/src/version.ts +8 -0
- package/vite-plugin/index.d.ts +46 -0
- package/vite-plugin/index.js +115 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notion page shapes exchanged over the custom block bridge.
|
|
3
|
+
*
|
|
4
|
+
* These mirror a narrow subset of Notion's public `POST /v1/pages` API, since that's the bridge
|
|
5
|
+
* shape the host delivers for messages like `createPageResult`.
|
|
6
|
+
*/
|
|
7
|
+
import * as v from "valibot";
|
|
8
|
+
import { notionDataSourceIdSchema, notionPageIdSchema } from "../ids.js";
|
|
9
|
+
import { notionParentSchema } from "../parent.js";
|
|
10
|
+
export const customBlockPageSchema = v.object({
|
|
11
|
+
id: notionPageIdSchema,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Parent reference accepted by `pages.create` / `pages.update` inputs.
|
|
15
|
+
*
|
|
16
|
+
* Mirrors the parent shape Notion's public `POST /v1/pages` API accepts: `page_id` for a
|
|
17
|
+
* page-parented child, `data_source_id` for a database row. `data_source_id` is the internal
|
|
18
|
+
* collection ID.
|
|
19
|
+
*/
|
|
20
|
+
export const notionPageParentInputSchema = v.variant("type", [
|
|
21
|
+
v.object({ type: v.literal("page_id"), page_id: notionPageIdSchema }),
|
|
22
|
+
v.object({
|
|
23
|
+
type: v.literal("data_source_id"),
|
|
24
|
+
data_source_id: notionDataSourceIdSchema,
|
|
25
|
+
}),
|
|
26
|
+
]);
|
|
27
|
+
export const notionEmojiIconSchema = v.object({
|
|
28
|
+
type: v.literal("emoji"),
|
|
29
|
+
emoji: v.string(),
|
|
30
|
+
});
|
|
31
|
+
export const notionCustomEmojiIconSchema = v.object({
|
|
32
|
+
type: v.literal("custom_emoji"),
|
|
33
|
+
custom_emoji: v.object({
|
|
34
|
+
id: v.string(),
|
|
35
|
+
name: v.optional(v.string()),
|
|
36
|
+
url: v.optional(v.string()),
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
export const notionExternalFileSchema = v.object({
|
|
40
|
+
type: v.literal("external"),
|
|
41
|
+
external: v.object({ url: v.string() }),
|
|
42
|
+
});
|
|
43
|
+
export const notionHostedFileSchema = v.object({
|
|
44
|
+
type: v.literal("file"),
|
|
45
|
+
file: v.object({
|
|
46
|
+
url: v.string(),
|
|
47
|
+
expiry_time: v.optional(v.string()),
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
// TODO(custom-blocks): Add file upload support.
|
|
51
|
+
export const notionPageIconSchema = v.variant("type", [
|
|
52
|
+
notionEmojiIconSchema,
|
|
53
|
+
notionCustomEmojiIconSchema,
|
|
54
|
+
notionExternalFileSchema,
|
|
55
|
+
notionHostedFileSchema,
|
|
56
|
+
]);
|
|
57
|
+
export const notionPageCoverSchema = v.variant("type", [
|
|
58
|
+
notionExternalFileSchema,
|
|
59
|
+
notionHostedFileSchema,
|
|
60
|
+
]);
|
|
61
|
+
const nullableStringSchema = v.nullable(v.string());
|
|
62
|
+
const notionRichTextItemSchema = v.record(v.string(), v.unknown());
|
|
63
|
+
const notionSelectOptionInputSchema = v.union([
|
|
64
|
+
v.object({
|
|
65
|
+
id: v.string(),
|
|
66
|
+
name: v.optional(v.string()),
|
|
67
|
+
color: v.optional(v.string()),
|
|
68
|
+
description: v.optional(nullableStringSchema),
|
|
69
|
+
}),
|
|
70
|
+
v.object({
|
|
71
|
+
name: v.string(),
|
|
72
|
+
id: v.optional(v.string()),
|
|
73
|
+
color: v.optional(v.string()),
|
|
74
|
+
description: v.optional(nullableStringSchema),
|
|
75
|
+
}),
|
|
76
|
+
]);
|
|
77
|
+
const notionDateInputSchema = v.object({
|
|
78
|
+
start: v.string(),
|
|
79
|
+
end: v.optional(nullableStringSchema),
|
|
80
|
+
time_zone: v.optional(nullableStringSchema),
|
|
81
|
+
});
|
|
82
|
+
const notionUserInputSchema = v.union([
|
|
83
|
+
v.object({
|
|
84
|
+
object: v.optional(v.literal("user")),
|
|
85
|
+
id: v.string(),
|
|
86
|
+
}),
|
|
87
|
+
v.object({
|
|
88
|
+
object: v.literal("group"),
|
|
89
|
+
id: v.string(),
|
|
90
|
+
name: v.optional(nullableStringSchema),
|
|
91
|
+
}),
|
|
92
|
+
]);
|
|
93
|
+
const notionRelationInputSchema = v.object({ id: v.string() });
|
|
94
|
+
const notionFileInputSchema = v.union([
|
|
95
|
+
v.object({
|
|
96
|
+
type: v.literal("external"),
|
|
97
|
+
name: v.string(),
|
|
98
|
+
external: v.object({ url: v.string() }),
|
|
99
|
+
}),
|
|
100
|
+
v.object({
|
|
101
|
+
type: v.literal("file"),
|
|
102
|
+
name: v.string(),
|
|
103
|
+
file: v.object({
|
|
104
|
+
url: v.string(),
|
|
105
|
+
expiry_time: v.optional(v.string()),
|
|
106
|
+
}),
|
|
107
|
+
}),
|
|
108
|
+
]);
|
|
109
|
+
const notionPlaceInputSchema = v.object({
|
|
110
|
+
lat: v.number(),
|
|
111
|
+
lon: v.number(),
|
|
112
|
+
name: v.optional(nullableStringSchema),
|
|
113
|
+
address: v.optional(nullableStringSchema),
|
|
114
|
+
aws_place_id: v.optional(nullableStringSchema),
|
|
115
|
+
google_place_id: v.optional(nullableStringSchema),
|
|
116
|
+
});
|
|
117
|
+
const pagePropertyBaseSchema = {
|
|
118
|
+
id: v.string(),
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* A page property value.
|
|
122
|
+
*/
|
|
123
|
+
export const notionPagePropertyValueSchema = v.variant("type", [
|
|
124
|
+
v.object({
|
|
125
|
+
...pagePropertyBaseSchema,
|
|
126
|
+
type: v.literal("title"),
|
|
127
|
+
title: v.array(notionRichTextItemSchema),
|
|
128
|
+
}),
|
|
129
|
+
v.object({
|
|
130
|
+
...pagePropertyBaseSchema,
|
|
131
|
+
type: v.literal("rich_text"),
|
|
132
|
+
rich_text: v.array(notionRichTextItemSchema),
|
|
133
|
+
}),
|
|
134
|
+
v.object({
|
|
135
|
+
...pagePropertyBaseSchema,
|
|
136
|
+
type: v.literal("number"),
|
|
137
|
+
number: v.nullable(v.number()),
|
|
138
|
+
}),
|
|
139
|
+
v.object({
|
|
140
|
+
...pagePropertyBaseSchema,
|
|
141
|
+
type: v.literal("url"),
|
|
142
|
+
url: nullableStringSchema,
|
|
143
|
+
}),
|
|
144
|
+
v.object({
|
|
145
|
+
...pagePropertyBaseSchema,
|
|
146
|
+
type: v.literal("email"),
|
|
147
|
+
email: nullableStringSchema,
|
|
148
|
+
}),
|
|
149
|
+
v.object({
|
|
150
|
+
...pagePropertyBaseSchema,
|
|
151
|
+
type: v.literal("phone_number"),
|
|
152
|
+
phone_number: nullableStringSchema,
|
|
153
|
+
}),
|
|
154
|
+
v.object({
|
|
155
|
+
...pagePropertyBaseSchema,
|
|
156
|
+
type: v.literal("checkbox"),
|
|
157
|
+
checkbox: v.boolean(),
|
|
158
|
+
}),
|
|
159
|
+
v.object({
|
|
160
|
+
...pagePropertyBaseSchema,
|
|
161
|
+
type: v.literal("select"),
|
|
162
|
+
select: v.nullable(notionSelectOptionInputSchema),
|
|
163
|
+
}),
|
|
164
|
+
v.object({
|
|
165
|
+
...pagePropertyBaseSchema,
|
|
166
|
+
type: v.literal("status"),
|
|
167
|
+
status: v.nullable(notionSelectOptionInputSchema),
|
|
168
|
+
}),
|
|
169
|
+
v.object({
|
|
170
|
+
...pagePropertyBaseSchema,
|
|
171
|
+
type: v.literal("multi_select"),
|
|
172
|
+
multi_select: v.array(notionSelectOptionInputSchema),
|
|
173
|
+
}),
|
|
174
|
+
v.object({
|
|
175
|
+
...pagePropertyBaseSchema,
|
|
176
|
+
type: v.literal("date"),
|
|
177
|
+
date: v.nullable(notionDateInputSchema),
|
|
178
|
+
}),
|
|
179
|
+
v.object({
|
|
180
|
+
...pagePropertyBaseSchema,
|
|
181
|
+
type: v.literal("people"),
|
|
182
|
+
people: v.array(notionUserInputSchema),
|
|
183
|
+
}),
|
|
184
|
+
v.object({
|
|
185
|
+
...pagePropertyBaseSchema,
|
|
186
|
+
type: v.literal("relation"),
|
|
187
|
+
has_more: v.optional(v.boolean()),
|
|
188
|
+
relation: v.array(notionRelationInputSchema),
|
|
189
|
+
}),
|
|
190
|
+
v.object({
|
|
191
|
+
...pagePropertyBaseSchema,
|
|
192
|
+
type: v.literal("files"),
|
|
193
|
+
files: v.array(notionFileInputSchema),
|
|
194
|
+
}),
|
|
195
|
+
v.object({
|
|
196
|
+
...pagePropertyBaseSchema,
|
|
197
|
+
type: v.literal("place"),
|
|
198
|
+
place: v.nullable(notionPlaceInputSchema),
|
|
199
|
+
}),
|
|
200
|
+
]);
|
|
201
|
+
export const notionPagePropertyWriteMapSchema = v.record(v.string(), notionPagePropertyValueSchema);
|
|
202
|
+
/**
|
|
203
|
+
* The `Page` object returned in `createPageResult` messages.
|
|
204
|
+
*/
|
|
205
|
+
export const notionPageSchema = v.object({
|
|
206
|
+
object: v.literal("page"),
|
|
207
|
+
id: notionPageIdSchema,
|
|
208
|
+
parent: notionParentSchema,
|
|
209
|
+
properties: notionPagePropertyWriteMapSchema,
|
|
210
|
+
created_time: v.optional(v.string()),
|
|
211
|
+
last_edited_time: v.optional(v.string()),
|
|
212
|
+
icon: v.optional(notionPageIconSchema),
|
|
213
|
+
cover: v.optional(notionPageCoverSchema),
|
|
214
|
+
url: v.optional(v.string()),
|
|
215
|
+
public_url: v.optional(v.string()),
|
|
216
|
+
in_trash: v.optional(v.boolean()),
|
|
217
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const notionParentSchema: v.VariantSchema<"type", [v.ObjectSchema<{
|
|
3
|
+
readonly type: v.LiteralSchema<"page_id", undefined>;
|
|
4
|
+
readonly page_id: v.CustomSchema<import("./ids.js").NotionPageId, v.ErrorMessage<v.CustomIssue> | undefined>;
|
|
5
|
+
}, undefined>, v.ObjectSchema<{
|
|
6
|
+
readonly type: v.LiteralSchema<"data_source_id", undefined>;
|
|
7
|
+
readonly data_source_id: v.CustomSchema<import("./ids.js").NotionDataSourceId, v.ErrorMessage<v.CustomIssue> | undefined>;
|
|
8
|
+
}, undefined>, v.ObjectSchema<{
|
|
9
|
+
readonly type: v.LiteralSchema<"workspace", undefined>;
|
|
10
|
+
readonly workspace: v.LiteralSchema<true, undefined>;
|
|
11
|
+
}, undefined>, v.ObjectSchema<{
|
|
12
|
+
readonly type: v.LiteralSchema<"block_id", undefined>;
|
|
13
|
+
readonly block_id: v.CustomSchema<import("./ids.js").NotionBlockId, v.ErrorMessage<v.CustomIssue> | undefined>;
|
|
14
|
+
}, undefined>], undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* A record's parent reference.
|
|
17
|
+
*
|
|
18
|
+
* Mirrors Notion's public API:
|
|
19
|
+
* - `page_id` — parented directly under a page.
|
|
20
|
+
* - `block_id` — parented under a non-page container block (toggle, column, callout, ...).
|
|
21
|
+
* - `data_source_id` — parented under a collection (data source).
|
|
22
|
+
* - `workspace` — top-level / team-rooted.
|
|
23
|
+
*/
|
|
24
|
+
export type NotionParent = v.InferOutput<typeof notionParentSchema>;
|
|
25
|
+
//# sourceMappingURL=parent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent.d.ts","sourceRoot":"","sources":["../../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/bridge/parent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAO5B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;0BAQ7B,CAAA;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { notionBlockIdSchema, notionDataSourceIdSchema, notionPageIdSchema, } from "./ids.js";
|
|
3
|
+
export const notionParentSchema = v.variant("type", [
|
|
4
|
+
v.object({ type: v.literal("page_id"), page_id: notionPageIdSchema }),
|
|
5
|
+
v.object({
|
|
6
|
+
type: v.literal("data_source_id"),
|
|
7
|
+
data_source_id: notionDataSourceIdSchema,
|
|
8
|
+
}),
|
|
9
|
+
v.object({ type: v.literal("workspace"), workspace: v.literal(true) }),
|
|
10
|
+
v.object({ type: v.literal("block_id"), block_id: notionBlockIdSchema }),
|
|
11
|
+
]);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks one-shot request/response pairs over the `postMessage` bridge. Each `allocate` reserves a
|
|
3
|
+
* unique `requestId` and stores its resolver. `resolve` finds the pending resolver by `requestId`
|
|
4
|
+
* and calls it, then removes the entry so the same `requestId` cannot be resolved twice.
|
|
5
|
+
*/
|
|
6
|
+
export declare class PendingRequests<T> {
|
|
7
|
+
private readonly prefix;
|
|
8
|
+
private nextId;
|
|
9
|
+
private readonly entries;
|
|
10
|
+
constructor(prefix: string);
|
|
11
|
+
allocate(resolver: (value: T) => void): string;
|
|
12
|
+
resolve(requestId: string, value: T): boolean;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=pendingRequests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendingRequests.d.ts","sourceRoot":"","sources":["../../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/bridge/pendingRequests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,eAAe,CAAC,CAAC;IAIjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;gBAEnC,MAAM,EAAE,MAAM;IAE3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM;IAO9C,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;CAS7C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks one-shot request/response pairs over the `postMessage` bridge. Each `allocate` reserves a
|
|
3
|
+
* unique `requestId` and stores its resolver. `resolve` finds the pending resolver by `requestId`
|
|
4
|
+
* and calls it, then removes the entry so the same `requestId` cannot be resolved twice.
|
|
5
|
+
*/
|
|
6
|
+
export class PendingRequests {
|
|
7
|
+
constructor(prefix) {
|
|
8
|
+
this.prefix = prefix;
|
|
9
|
+
this.nextId = 1;
|
|
10
|
+
this.entries = new Map();
|
|
11
|
+
}
|
|
12
|
+
allocate(resolver) {
|
|
13
|
+
const requestId = `${this.prefix}-${this.nextId}`;
|
|
14
|
+
this.nextId += 1;
|
|
15
|
+
this.entries.set(requestId, resolver);
|
|
16
|
+
return requestId;
|
|
17
|
+
}
|
|
18
|
+
resolve(requestId, value) {
|
|
19
|
+
const resolver = this.entries.get(requestId);
|
|
20
|
+
if (resolver === undefined) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
this.entries.delete(requestId);
|
|
24
|
+
resolver(value);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { CreatePageInput, CreatePageResult, GetPageResult, GetUserResult, ListUsersInput, ListUsersResult, NotionPageId, NotionUserId, UpdatePageInput, UpdatePageResult, UseDataSourceOptions } from "../types.js";
|
|
2
|
+
import { type CustomBlockHostState, type DataSourceQueryView } from "./hostState.js";
|
|
3
|
+
import type { ManifestLoadResult } from "./loadManifest.js";
|
|
4
|
+
import type { CustomBlockManifest } from "./manifest.js";
|
|
5
|
+
import type { InitMessage } from "./messages/init.js";
|
|
6
|
+
import { type MessageLogEntry } from "./SandboxBridge.js";
|
|
7
|
+
export type { MessageLogEntry };
|
|
8
|
+
export declare const customBlockHost: {
|
|
9
|
+
sendReady: (manifestResult: ManifestLoadResult) => void;
|
|
10
|
+
awaitInit: (signal?: AbortSignal) => Promise<InitMessage>;
|
|
11
|
+
subscribe: (listener: () => void) => () => boolean;
|
|
12
|
+
getState: () => CustomBlockHostState;
|
|
13
|
+
getManifest: () => CustomBlockManifest | null;
|
|
14
|
+
/**
|
|
15
|
+
* Apply an `init` payload directly, bypassing the postMessage handshake for
|
|
16
|
+
* standalone preview state.
|
|
17
|
+
*/
|
|
18
|
+
setMockState: (message: InitMessage) => void;
|
|
19
|
+
postResize: (height: number) => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const customBlockDataSources: {
|
|
22
|
+
query: (key: string, options?: UseDataSourceOptions) => void;
|
|
23
|
+
getView: (hostState: CustomBlockHostState, key: string) => DataSourceQueryView;
|
|
24
|
+
};
|
|
25
|
+
export declare const messageLog: {
|
|
26
|
+
getSnapshot: () => readonly MessageLogEntry[];
|
|
27
|
+
subscribe: (listener: () => void) => () => boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Page-related SDK APIs exposed under `sdk.pages.*`.
|
|
31
|
+
*/
|
|
32
|
+
export declare const pages: {
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new Notion page.
|
|
35
|
+
*/
|
|
36
|
+
create: (input: CreatePageInput) => Promise<CreatePageResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Fetches a page by id.
|
|
39
|
+
*/
|
|
40
|
+
get: (pageId: NotionPageId) => Promise<GetPageResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Updates an existing page.
|
|
43
|
+
*/
|
|
44
|
+
update: (input: UpdatePageInput) => Promise<UpdatePageResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Soft-delete a page by archiving it.
|
|
47
|
+
*/
|
|
48
|
+
delete: (pageId: NotionPageId) => Promise<UpdatePageResult>;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* User-related SDK APIs exposed under `sdk.users.*`.
|
|
52
|
+
*/
|
|
53
|
+
export declare const users: {
|
|
54
|
+
/**
|
|
55
|
+
* Lists users visible in the current custom block workspace.
|
|
56
|
+
*/
|
|
57
|
+
list: (input?: ListUsersInput) => Promise<ListUsersResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Fetches a user by id.
|
|
60
|
+
*/
|
|
61
|
+
get: (userId: NotionUserId) => Promise<GetUserResult>;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=sandboxClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxClient.d.ts","sourceRoot":"","sources":["../../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/bridge/sandboxClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,oBAAoB,CAAA;AAExE,YAAY,EAAE,eAAe,EAAE,CAAA;AAI/B,eAAO,MAAM,eAAe;gCACC,kBAAkB;yBAIzB,WAAW,KAAG,OAAO,CAAC,WAAW,CAAC;0BAIjC,MAAM,IAAI;oBAIlB,oBAAoB;uBAIjB,mBAAmB,GAAG,IAAI;IAI3C;;;OAGG;4BACqB,WAAW;yBAId,MAAM;CAG3B,CAAA;AAED,eAAO,MAAM,sBAAsB;iBACrB,MAAM,YAAY,oBAAoB;yBAKvC,oBAAoB,OAC1B,MAAM,KACT,mBAAmB;CAKtB,CAAA;AAED,eAAO,MAAM,UAAU;uBACL,SAAS,eAAe,EAAE;0BAIrB,MAAM,IAAI;CAGhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB;;OAEG;oBACa,eAAe,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D;;OAEG;kBACW,YAAY,KAAG,OAAO,CAAC,aAAa,CAAC;IAInD;;OAEG;oBACa,eAAe,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D;;OAEG;qBACc,YAAY,KAAG,OAAO,CAAC,gBAAgB,CAAC;CAGzD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB;;OAEG;mBACY,cAAc,KAAG,OAAO,CAAC,eAAe,CAAC;IAIxD;;OAEG;kBACW,YAAY,KAAG,OAAO,CAAC,aAAa,CAAC;CAGnD,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { getDataSourceQueryView as getDataSourceQueryViewWithBridge, } from "./hostState.js";
|
|
2
|
+
import { SandboxBridge } from "./SandboxBridge.js";
|
|
3
|
+
const bridge = new SandboxBridge();
|
|
4
|
+
export const customBlockHost = {
|
|
5
|
+
sendReady: (manifestResult) => {
|
|
6
|
+
bridge.sendReady(manifestResult);
|
|
7
|
+
},
|
|
8
|
+
awaitInit: (signal) => {
|
|
9
|
+
return bridge.awaitInit(signal);
|
|
10
|
+
},
|
|
11
|
+
subscribe: (listener) => {
|
|
12
|
+
return bridge.subscribe(listener);
|
|
13
|
+
},
|
|
14
|
+
getState: () => {
|
|
15
|
+
return bridge.getHostState();
|
|
16
|
+
},
|
|
17
|
+
getManifest: () => {
|
|
18
|
+
return bridge.getManifest();
|
|
19
|
+
},
|
|
20
|
+
/**
|
|
21
|
+
* Apply an `init` payload directly, bypassing the postMessage handshake for
|
|
22
|
+
* standalone preview state.
|
|
23
|
+
*/
|
|
24
|
+
setMockState: (message) => {
|
|
25
|
+
bridge.setMockState(message);
|
|
26
|
+
},
|
|
27
|
+
postResize: (height) => {
|
|
28
|
+
bridge.postResize(height);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export const customBlockDataSources = {
|
|
32
|
+
query: (key, options) => {
|
|
33
|
+
bridge.queryDataSource(key, options);
|
|
34
|
+
},
|
|
35
|
+
getView: (hostState, key) => {
|
|
36
|
+
return getDataSourceQueryViewWithBridge(hostState, key, args => bridge.updateDataSourcePage(args));
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export const messageLog = {
|
|
40
|
+
getSnapshot: () => {
|
|
41
|
+
return bridge.getMessageLog();
|
|
42
|
+
},
|
|
43
|
+
subscribe: (listener) => {
|
|
44
|
+
return bridge.subscribeToMessageLog(listener);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Page-related SDK APIs exposed under `sdk.pages.*`.
|
|
49
|
+
*/
|
|
50
|
+
export const pages = {
|
|
51
|
+
/**
|
|
52
|
+
* Creates a new Notion page.
|
|
53
|
+
*/
|
|
54
|
+
create: (input) => {
|
|
55
|
+
return bridge.createPage(input);
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* Fetches a page by id.
|
|
59
|
+
*/
|
|
60
|
+
get: (pageId) => {
|
|
61
|
+
return bridge.getPage(pageId);
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
* Updates an existing page.
|
|
65
|
+
*/
|
|
66
|
+
update: (input) => {
|
|
67
|
+
return bridge.updatePage(input);
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* Soft-delete a page by archiving it.
|
|
71
|
+
*/
|
|
72
|
+
delete: (pageId) => {
|
|
73
|
+
return bridge.updatePage({ pageId, archived: true });
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* User-related SDK APIs exposed under `sdk.users.*`.
|
|
78
|
+
*/
|
|
79
|
+
export const users = {
|
|
80
|
+
/**
|
|
81
|
+
* Lists users visible in the current custom block workspace.
|
|
82
|
+
*/
|
|
83
|
+
list: (input) => {
|
|
84
|
+
return bridge.listUsers(input);
|
|
85
|
+
},
|
|
86
|
+
/**
|
|
87
|
+
* Fetches a user by id.
|
|
88
|
+
*/
|
|
89
|
+
get: (userId) => {
|
|
90
|
+
return bridge.getUser(userId);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/bridge/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,eAAO,MAAM,iBAAiB,gDAAgC,CAAA;AAE9D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
declare const notionUserIdBrand: unique symbol;
|
|
3
|
+
export type NotionUserId = string & {
|
|
4
|
+
readonly [notionUserIdBrand]: "NotionUserId";
|
|
5
|
+
};
|
|
6
|
+
export declare const notionUserSchema: v.ObjectSchema<{
|
|
7
|
+
readonly object: v.LiteralSchema<"user", undefined>;
|
|
8
|
+
readonly id: v.StringSchema<undefined>;
|
|
9
|
+
readonly name: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
10
|
+
readonly avatar_url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
11
|
+
readonly type: v.LiteralSchema<"person", undefined>;
|
|
12
|
+
readonly person: v.ObjectSchema<{
|
|
13
|
+
readonly email: v.StringSchema<undefined>;
|
|
14
|
+
}, undefined>;
|
|
15
|
+
}, undefined>;
|
|
16
|
+
export type NotionUser = v.InferOutput<typeof notionUserSchema>;
|
|
17
|
+
export declare const notionUserListSchema: v.ObjectSchema<{
|
|
18
|
+
readonly object: v.LiteralSchema<"list", undefined>;
|
|
19
|
+
readonly results: v.ArraySchema<v.ObjectSchema<{
|
|
20
|
+
readonly object: v.LiteralSchema<"user", undefined>;
|
|
21
|
+
readonly id: v.StringSchema<undefined>;
|
|
22
|
+
readonly name: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
23
|
+
readonly avatar_url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
24
|
+
readonly type: v.LiteralSchema<"person", undefined>;
|
|
25
|
+
readonly person: v.ObjectSchema<{
|
|
26
|
+
readonly email: v.StringSchema<undefined>;
|
|
27
|
+
}, undefined>;
|
|
28
|
+
}, undefined>, undefined>;
|
|
29
|
+
readonly next_cursor: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
30
|
+
readonly has_more: v.BooleanSchema<undefined>;
|
|
31
|
+
readonly type: v.LiteralSchema<"user", undefined>;
|
|
32
|
+
readonly user: v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>;
|
|
33
|
+
}, undefined>;
|
|
34
|
+
export type NotionUserList = v.InferOutput<typeof notionUserListSchema>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/bridge/users/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAA;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IACnC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAA;CAC5C,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;aAS3B,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;aAO/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export const notionUserSchema = v.object({
|
|
3
|
+
object: v.literal("user"),
|
|
4
|
+
id: v.string(),
|
|
5
|
+
name: v.optional(v.string()),
|
|
6
|
+
avatar_url: v.nullable(v.string()),
|
|
7
|
+
type: v.literal("person"),
|
|
8
|
+
person: v.object({
|
|
9
|
+
email: v.string(),
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
12
|
+
export const notionUserListSchema = v.object({
|
|
13
|
+
object: v.literal("list"),
|
|
14
|
+
results: v.array(notionUserSchema),
|
|
15
|
+
next_cursor: v.nullable(v.string()),
|
|
16
|
+
has_more: v.boolean(),
|
|
17
|
+
type: v.literal("user"),
|
|
18
|
+
user: v.record(v.string(), v.unknown()),
|
|
19
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { autoResize } from "./autoResize.js";
|
|
2
|
+
import type { NotionDataSource } from "./bridge/dataSources/dataSource.js";
|
|
3
|
+
import type { NotionBlockId } from "./bridge/ids.js";
|
|
4
|
+
import type { CustomBlockManifest } from "./bridge/manifest.js";
|
|
5
|
+
import type { CustomBlockPage } from "./bridge/pages/page.js";
|
|
6
|
+
import type { NotionParent } from "./bridge/parent.js";
|
|
7
|
+
import type { NotionTheme } from "./bridge/theme.js";
|
|
8
|
+
import type { NotionUser } from "./bridge/users/user.js";
|
|
9
|
+
export type CustomBlockState = {
|
|
10
|
+
status: "uninitialized";
|
|
11
|
+
theme: NotionTheme;
|
|
12
|
+
} | {
|
|
13
|
+
status: "initialized";
|
|
14
|
+
theme: NotionTheme;
|
|
15
|
+
blockId: NotionBlockId;
|
|
16
|
+
parent: NotionParent;
|
|
17
|
+
page: CustomBlockPage;
|
|
18
|
+
currentUser: NotionUser;
|
|
19
|
+
dataSources: NotionDataSource[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Framework-neutral runtime state APIs for a custom block. Call `initCustomBlock`
|
|
23
|
+
* before reading initialized values, and use `subscribe` to react to host pushes.
|
|
24
|
+
*/
|
|
25
|
+
export declare const customBlock: {
|
|
26
|
+
subscribe(listener: () => void): () => void;
|
|
27
|
+
getState(): CustomBlockState;
|
|
28
|
+
getCurrentUser(): NotionUser;
|
|
29
|
+
getTheme(): NotionTheme;
|
|
30
|
+
getBlockId(): NotionBlockId;
|
|
31
|
+
getParent(): NotionParent;
|
|
32
|
+
getPage(): CustomBlockPage;
|
|
33
|
+
getManifest(): CustomBlockManifest | null;
|
|
34
|
+
autoResize: typeof autoResize;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=customBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customBlock.d.ts","sourceRoot":"","sources":["../../../../../../../Users/nsarkar/work/custom-blocks/sdk/src/customBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAK1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,MAAM,gBAAgB,GACzB;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC/C;IACA,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;IACrB,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAC9B,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,WAAW;wBACH,MAAM,IAAI,GAAG,MAAM,IAAI;gBAI/B,gBAAgB;sBAIV,UAAU;gBAIhB,WAAW;kBAIT,aAAa;iBAId,YAAY;eAId,eAAe;mBAIX,mBAAmB,GAAG,IAAI;;CAKzC,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { autoResize } from "./autoResize.js";
|
|
2
|
+
import { customBlockHost } from "./bridge/sandboxClient.js";
|
|
3
|
+
/**
|
|
4
|
+
* Framework-neutral runtime state APIs for a custom block. Call `initCustomBlock`
|
|
5
|
+
* before reading initialized values, and use `subscribe` to react to host pushes.
|
|
6
|
+
*/
|
|
7
|
+
export const customBlock = {
|
|
8
|
+
subscribe(listener) {
|
|
9
|
+
return customBlockHost.subscribe(listener);
|
|
10
|
+
},
|
|
11
|
+
getState() {
|
|
12
|
+
return toPublicState(customBlockHost.getState());
|
|
13
|
+
},
|
|
14
|
+
getCurrentUser() {
|
|
15
|
+
return getInitializedHostState("getCurrentUser").currentUser;
|
|
16
|
+
},
|
|
17
|
+
getTheme() {
|
|
18
|
+
return getInitializedHostState("getTheme").theme;
|
|
19
|
+
},
|
|
20
|
+
getBlockId() {
|
|
21
|
+
return getInitializedHostState("getBlockId").blockId;
|
|
22
|
+
},
|
|
23
|
+
getParent() {
|
|
24
|
+
return getInitializedHostState("getParent").parent;
|
|
25
|
+
},
|
|
26
|
+
getPage() {
|
|
27
|
+
return getInitializedHostState("getPage").page;
|
|
28
|
+
},
|
|
29
|
+
getManifest() {
|
|
30
|
+
return customBlockHost.getManifest();
|
|
31
|
+
},
|
|
32
|
+
autoResize,
|
|
33
|
+
};
|
|
34
|
+
let lastHostState;
|
|
35
|
+
let lastPublicState;
|
|
36
|
+
function toPublicState(hostState) {
|
|
37
|
+
if (hostState === lastHostState && lastPublicState !== undefined) {
|
|
38
|
+
return lastPublicState;
|
|
39
|
+
}
|
|
40
|
+
lastHostState = hostState;
|
|
41
|
+
if (hostState.status === "uninitialized") {
|
|
42
|
+
lastPublicState = {
|
|
43
|
+
status: "uninitialized",
|
|
44
|
+
theme: hostState.theme,
|
|
45
|
+
};
|
|
46
|
+
return lastPublicState;
|
|
47
|
+
}
|
|
48
|
+
lastPublicState = {
|
|
49
|
+
status: "initialized",
|
|
50
|
+
theme: hostState.theme,
|
|
51
|
+
blockId: hostState.blockId,
|
|
52
|
+
parent: hostState.parent,
|
|
53
|
+
page: hostState.page,
|
|
54
|
+
currentUser: hostState.currentUser,
|
|
55
|
+
dataSources: hostState.dataSources,
|
|
56
|
+
};
|
|
57
|
+
return lastPublicState;
|
|
58
|
+
}
|
|
59
|
+
function getInitializedHostState(methodName) {
|
|
60
|
+
const hostState = customBlockHost.getState();
|
|
61
|
+
if (hostState.status !== "initialized") {
|
|
62
|
+
throw new Error(`customBlock.${methodName} called before \`initCustomBlock\` resolved. Await it before reading runtime state.`);
|
|
63
|
+
}
|
|
64
|
+
return hostState;
|
|
65
|
+
}
|