@notionhq/custom-blocks 0.1.6 → 0.1.8

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.
Files changed (298) hide show
  1. package/README.md +14 -1
  2. package/bin/notion-custom-blocks/cli.js +6 -0
  3. package/dist/bridge/SandboxBridge.d.ts +3 -9
  4. package/dist/bridge/SandboxBridge.d.ts.map +1 -1
  5. package/dist/bridge/SandboxBridge.js +5 -10
  6. package/dist/bridge/dataSources/resolve.d.ts +3 -3
  7. package/dist/bridge/dataSources/resolve.d.ts.map +1 -1
  8. package/dist/bridge/dataSources/resolve.js +1 -1
  9. package/dist/bridge/dataSources/resolveProperty.d.ts +6 -9
  10. package/dist/bridge/dataSources/resolveProperty.d.ts.map +1 -1
  11. package/dist/bridge/dataSources/resolveProperty.js +3 -6
  12. package/dist/bridge/hostState.d.ts +11 -11
  13. package/dist/bridge/hostState.d.ts.map +1 -1
  14. package/dist/bridge/loadManifest.d.ts +2 -2
  15. package/dist/bridge/loadManifest.d.ts.map +1 -1
  16. package/dist/bridge/loadManifest.js +1 -1
  17. package/dist/bridge/sandboxClient.d.ts +1 -1
  18. package/dist/bridge/sandboxClient.d.ts.map +1 -1
  19. package/dist/customBlock.d.ts +8 -8
  20. package/dist/customBlock.d.ts.map +1 -1
  21. package/dist/index.d.ts +24 -25
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -2
  24. package/dist/init.d.ts +8 -8
  25. package/dist/init.d.ts.map +1 -1
  26. package/dist/init.js +1 -1
  27. package/dist/protocol/contrast.d.ts.map +1 -0
  28. package/dist/protocol/dataSources/dataSource.d.ts.map +1 -0
  29. package/dist/protocol/dataSources/dataSourcePage.d.ts.map +1 -0
  30. package/dist/protocol/dataSources/dataSourceValue.d.ts.map +1 -0
  31. package/dist/protocol/dataSources/dateValue.d.ts.map +1 -0
  32. package/dist/{bridge → protocol}/dataSources/errors.d.ts +3 -0
  33. package/dist/protocol/dataSources/errors.d.ts.map +1 -0
  34. package/dist/{bridge → protocol}/dataSources/errors.js +3 -0
  35. package/dist/protocol/dataSources/propertySchema.d.ts.map +1 -0
  36. package/dist/protocol/dataSources/recordPointer.d.ts.map +1 -0
  37. package/dist/protocol/errors.d.ts.map +1 -0
  38. package/dist/protocol/ids.d.ts.map +1 -0
  39. package/dist/protocol/incomingType.d.ts.map +1 -0
  40. package/dist/protocol/index.d.ts +48 -0
  41. package/dist/protocol/index.d.ts.map +1 -0
  42. package/dist/protocol/index.js +47 -0
  43. package/dist/protocol/manifest.d.ts.map +1 -0
  44. package/dist/protocol/messages/connect.d.ts.map +1 -0
  45. package/dist/protocol/messages/contrastModeChanged.d.ts.map +1 -0
  46. package/dist/protocol/messages/createPage.d.ts.map +1 -0
  47. package/dist/protocol/messages/createPageResult.d.ts.map +1 -0
  48. package/dist/protocol/messages/currentUserChanged.d.ts.map +1 -0
  49. package/dist/{bridge → protocol}/messages/dataSourcesChanged.d.ts +1 -1
  50. package/dist/protocol/messages/dataSourcesChanged.d.ts.map +1 -0
  51. package/dist/{bridge → protocol}/messages/dataSourcesChanged.js +1 -1
  52. package/dist/protocol/messages/getPage.d.ts.map +1 -0
  53. package/dist/protocol/messages/getUser.d.ts.map +1 -0
  54. package/dist/{bridge → protocol}/messages/hostToSandbox.d.ts.map +1 -1
  55. package/dist/protocol/messages/init.d.ts.map +1 -0
  56. package/dist/protocol/messages/initResult.d.ts.map +1 -0
  57. package/dist/protocol/messages/invalidHostMessage.d.ts.map +1 -0
  58. package/dist/protocol/messages/invalidSandboxMessage.d.ts.map +1 -0
  59. package/dist/protocol/messages/listUsers.d.ts.map +1 -0
  60. package/dist/protocol/messages/pageChanged.d.ts.map +1 -0
  61. package/dist/protocol/messages/parentChanged.d.ts.map +1 -0
  62. package/dist/protocol/messages/queryDataSource.d.ts.map +1 -0
  63. package/dist/protocol/messages/queryDataSourceResult.d.ts.map +1 -0
  64. package/dist/protocol/messages/resize.d.ts.map +1 -0
  65. package/dist/{bridge → protocol}/messages/sandboxToHost.d.ts.map +1 -1
  66. package/dist/protocol/messages/themeChanged.d.ts.map +1 -0
  67. package/dist/protocol/messages/updatePage.d.ts.map +1 -0
  68. package/dist/protocol/messages/updatePageResult.d.ts.map +1 -0
  69. package/dist/{bridge → protocol}/pages/page.d.ts +1 -1
  70. package/dist/protocol/pages/page.d.ts.map +1 -0
  71. package/dist/protocol/parent.d.ts.map +1 -0
  72. package/dist/protocol/protocolVersion.d.ts +7 -0
  73. package/dist/protocol/protocolVersion.d.ts.map +1 -0
  74. package/dist/protocol/protocolVersion.js +6 -0
  75. package/dist/protocol/theme.d.ts.map +1 -0
  76. package/dist/protocol/users/user.d.ts.map +1 -0
  77. package/dist/react/index.d.ts +1 -1
  78. package/dist/react/index.js +1 -1
  79. package/dist/react/standalonePreview.d.ts.map +1 -1
  80. package/dist/react/standalonePreview.js +2 -2
  81. package/dist/react/useCustomBlockInit.d.ts +1 -1
  82. package/dist/react/useCustomBlockInit.d.ts.map +1 -1
  83. package/dist/react/useDataSource.d.ts +1 -1
  84. package/dist/react/useDataSource.js +1 -1
  85. package/dist/react/useRuntimeState.d.ts +9 -9
  86. package/dist/react/useRuntimeState.d.ts.map +1 -1
  87. package/dist/react/useRuntimeState.js +2 -2
  88. package/dist/types.d.ts +19 -18
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/version.js +1 -1
  91. package/docs/block-location.md +1 -1
  92. package/docs/data-sources.md +1 -1
  93. package/docs/deployment.md +1 -1
  94. package/docs/errors.md +0 -2
  95. package/docs/lifecycle.md +5 -5
  96. package/docs/pages.md +4 -4
  97. package/package.json +3 -7
  98. package/src/bridge/SandboxBridge.ts +36 -42
  99. package/src/bridge/dataSources/resolve.ts +3 -3
  100. package/src/bridge/dataSources/resolveProperty.ts +14 -20
  101. package/src/bridge/hostState.ts +15 -12
  102. package/src/bridge/loadManifest.ts +5 -2
  103. package/src/bridge/sandboxClient.ts +1 -1
  104. package/src/customBlock.ts +8 -8
  105. package/src/index.ts +26 -30
  106. package/src/init.ts +8 -8
  107. package/src/react/index.ts +1 -1
  108. package/src/react/standalonePreview.ts +5 -2
  109. package/src/react/useCustomBlockInit.ts +1 -1
  110. package/src/react/useDataSource.ts +1 -1
  111. package/src/react/useRuntimeState.ts +9 -9
  112. package/src/types.ts +27 -24
  113. package/HOST.md +0 -224
  114. package/dist/bridge/contrast.d.ts.map +0 -1
  115. package/dist/bridge/dataSources/dataSource.d.ts.map +0 -1
  116. package/dist/bridge/dataSources/dataSourcePage.d.ts.map +0 -1
  117. package/dist/bridge/dataSources/dataSourceValue.d.ts.map +0 -1
  118. package/dist/bridge/dataSources/dateValue.d.ts.map +0 -1
  119. package/dist/bridge/dataSources/errors.d.ts.map +0 -1
  120. package/dist/bridge/dataSources/propertySchema.d.ts.map +0 -1
  121. package/dist/bridge/dataSources/recordPointer.d.ts.map +0 -1
  122. package/dist/bridge/errors.d.ts.map +0 -1
  123. package/dist/bridge/ids.d.ts.map +0 -1
  124. package/dist/bridge/incomingType.d.ts.map +0 -1
  125. package/dist/bridge/manifest.d.ts.map +0 -1
  126. package/dist/bridge/messages/connect.d.ts.map +0 -1
  127. package/dist/bridge/messages/contrastModeChanged.d.ts.map +0 -1
  128. package/dist/bridge/messages/createPage.d.ts.map +0 -1
  129. package/dist/bridge/messages/createPageResult.d.ts.map +0 -1
  130. package/dist/bridge/messages/currentUserChanged.d.ts.map +0 -1
  131. package/dist/bridge/messages/dataSourcesChanged.d.ts.map +0 -1
  132. package/dist/bridge/messages/getPage.d.ts.map +0 -1
  133. package/dist/bridge/messages/getUser.d.ts.map +0 -1
  134. package/dist/bridge/messages/init.d.ts.map +0 -1
  135. package/dist/bridge/messages/initResult.d.ts.map +0 -1
  136. package/dist/bridge/messages/invalidHostMessage.d.ts.map +0 -1
  137. package/dist/bridge/messages/invalidSandboxMessage.d.ts.map +0 -1
  138. package/dist/bridge/messages/listUsers.d.ts.map +0 -1
  139. package/dist/bridge/messages/pageChanged.d.ts.map +0 -1
  140. package/dist/bridge/messages/parentChanged.d.ts.map +0 -1
  141. package/dist/bridge/messages/queryDataSource.d.ts.map +0 -1
  142. package/dist/bridge/messages/queryDataSourceResult.d.ts.map +0 -1
  143. package/dist/bridge/messages/resize.d.ts.map +0 -1
  144. package/dist/bridge/messages/themeChanged.d.ts.map +0 -1
  145. package/dist/bridge/messages/updatePage.d.ts.map +0 -1
  146. package/dist/bridge/messages/updatePageResult.d.ts.map +0 -1
  147. package/dist/bridge/pages/page.d.ts.map +0 -1
  148. package/dist/bridge/parent.d.ts.map +0 -1
  149. package/dist/bridge/theme.d.ts.map +0 -1
  150. package/dist/bridge/users/user.d.ts.map +0 -1
  151. package/dist/host/createCustomBlockHost.d.ts +0 -39
  152. package/dist/host/createCustomBlockHost.d.ts.map +0 -1
  153. package/dist/host/createCustomBlockHost.js +0 -495
  154. package/dist/host/lifecycle/initErrors.d.ts +0 -13
  155. package/dist/host/lifecycle/initErrors.d.ts.map +0 -1
  156. package/dist/host/lifecycle/initErrors.js +0 -152
  157. package/dist/host/lifecycle/protocolVersion.d.ts +0 -2
  158. package/dist/host/lifecycle/protocolVersion.d.ts.map +0 -1
  159. package/dist/host/lifecycle/protocolVersion.js +0 -3
  160. package/dist/host/lifecycle/types.d.ts +0 -28
  161. package/dist/host/lifecycle/types.d.ts.map +0 -1
  162. package/dist/host/lifecycle/types.js +0 -1
  163. package/dist/host/messages/invalidSandboxMessage.d.ts +0 -7
  164. package/dist/host/messages/invalidSandboxMessage.d.ts.map +0 -1
  165. package/dist/host/messages/invalidSandboxMessage.js +0 -21
  166. package/dist/host/messages/types.d.ts +0 -60
  167. package/dist/host/messages/types.d.ts.map +0 -1
  168. package/dist/host/messages/types.js +0 -1
  169. package/dist/host/queries/querySubscriptions.d.ts +0 -20
  170. package/dist/host/queries/querySubscriptions.d.ts.map +0 -1
  171. package/dist/host/queries/querySubscriptions.js +0 -45
  172. package/dist/host/queries/types.d.ts +0 -11
  173. package/dist/host/queries/types.d.ts.map +0 -1
  174. package/dist/host/queries/types.js +0 -1
  175. package/dist/host.d.ts +0 -79
  176. package/dist/host.d.ts.map +0 -1
  177. package/dist/host.js +0 -45
  178. package/src/bridge/contrast.ts +0 -6
  179. package/src/bridge/dataSources/dataSource.ts +0 -63
  180. package/src/bridge/dataSources/dataSourcePage.ts +0 -71
  181. package/src/bridge/dataSources/dataSourceValue.ts +0 -19
  182. package/src/bridge/dataSources/dateValue.ts +0 -96
  183. package/src/bridge/dataSources/errors.ts +0 -14
  184. package/src/bridge/dataSources/propertySchema.ts +0 -186
  185. package/src/bridge/dataSources/recordPointer.ts +0 -13
  186. package/src/bridge/errors.ts +0 -21
  187. package/src/bridge/ids.ts +0 -72
  188. package/src/bridge/incomingType.ts +0 -19
  189. package/src/bridge/manifest.ts +0 -47
  190. package/src/bridge/messages/connect.ts +0 -42
  191. package/src/bridge/messages/contrastModeChanged.ts +0 -12
  192. package/src/bridge/messages/createPage.ts +0 -62
  193. package/src/bridge/messages/createPageResult.ts +0 -52
  194. package/src/bridge/messages/currentUserChanged.ts +0 -14
  195. package/src/bridge/messages/dataSourcesChanged.ts +0 -18
  196. package/src/bridge/messages/getPage.ts +0 -51
  197. package/src/bridge/messages/getUser.ts +0 -49
  198. package/src/bridge/messages/hostToSandbox.ts +0 -39
  199. package/src/bridge/messages/init.ts +0 -99
  200. package/src/bridge/messages/initResult.ts +0 -37
  201. package/src/bridge/messages/invalidHostMessage.ts +0 -16
  202. package/src/bridge/messages/invalidSandboxMessage.ts +0 -18
  203. package/src/bridge/messages/listUsers.ts +0 -50
  204. package/src/bridge/messages/pageChanged.ts +0 -12
  205. package/src/bridge/messages/parentChanged.ts +0 -14
  206. package/src/bridge/messages/queryDataSource.ts +0 -20
  207. package/src/bridge/messages/queryDataSourceResult.ts +0 -45
  208. package/src/bridge/messages/resize.ts +0 -13
  209. package/src/bridge/messages/sandboxToHost.ts +0 -32
  210. package/src/bridge/messages/themeChanged.ts +0 -15
  211. package/src/bridge/messages/updatePage.ts +0 -22
  212. package/src/bridge/messages/updatePageResult.ts +0 -49
  213. package/src/bridge/pages/page.ts +0 -290
  214. package/src/bridge/parent.ts +0 -30
  215. package/src/bridge/theme.ts +0 -5
  216. package/src/bridge/users/user.ts +0 -31
  217. package/src/host/createCustomBlockHost.ts +0 -662
  218. package/src/host/lifecycle/initErrors.ts +0 -165
  219. package/src/host/lifecycle/protocolVersion.ts +0 -3
  220. package/src/host/lifecycle/types.ts +0 -40
  221. package/src/host/messages/invalidSandboxMessage.ts +0 -35
  222. package/src/host/messages/types.ts +0 -67
  223. package/src/host/queries/querySubscriptions.ts +0 -71
  224. package/src/host/queries/types.ts +0 -13
  225. package/src/host.ts +0 -182
  226. /package/dist/{bridge → protocol}/contrast.d.ts +0 -0
  227. /package/dist/{bridge → protocol}/contrast.js +0 -0
  228. /package/dist/{bridge → protocol}/dataSources/dataSource.d.ts +0 -0
  229. /package/dist/{bridge → protocol}/dataSources/dataSource.js +0 -0
  230. /package/dist/{bridge → protocol}/dataSources/dataSourcePage.d.ts +0 -0
  231. /package/dist/{bridge → protocol}/dataSources/dataSourcePage.js +0 -0
  232. /package/dist/{bridge → protocol}/dataSources/dataSourceValue.d.ts +0 -0
  233. /package/dist/{bridge → protocol}/dataSources/dataSourceValue.js +0 -0
  234. /package/dist/{bridge → protocol}/dataSources/dateValue.d.ts +0 -0
  235. /package/dist/{bridge → protocol}/dataSources/dateValue.js +0 -0
  236. /package/dist/{bridge → protocol}/dataSources/propertySchema.d.ts +0 -0
  237. /package/dist/{bridge → protocol}/dataSources/propertySchema.js +0 -0
  238. /package/dist/{bridge → protocol}/dataSources/recordPointer.d.ts +0 -0
  239. /package/dist/{bridge → protocol}/dataSources/recordPointer.js +0 -0
  240. /package/dist/{bridge → protocol}/errors.d.ts +0 -0
  241. /package/dist/{bridge → protocol}/errors.js +0 -0
  242. /package/dist/{bridge → protocol}/ids.d.ts +0 -0
  243. /package/dist/{bridge → protocol}/ids.js +0 -0
  244. /package/dist/{bridge → protocol}/incomingType.d.ts +0 -0
  245. /package/dist/{bridge → protocol}/incomingType.js +0 -0
  246. /package/dist/{bridge → protocol}/manifest.d.ts +0 -0
  247. /package/dist/{bridge → protocol}/manifest.js +0 -0
  248. /package/dist/{bridge → protocol}/messages/connect.d.ts +0 -0
  249. /package/dist/{bridge → protocol}/messages/connect.js +0 -0
  250. /package/dist/{bridge → protocol}/messages/contrastModeChanged.d.ts +0 -0
  251. /package/dist/{bridge → protocol}/messages/contrastModeChanged.js +0 -0
  252. /package/dist/{bridge → protocol}/messages/createPage.d.ts +0 -0
  253. /package/dist/{bridge → protocol}/messages/createPage.js +0 -0
  254. /package/dist/{bridge → protocol}/messages/createPageResult.d.ts +0 -0
  255. /package/dist/{bridge → protocol}/messages/createPageResult.js +0 -0
  256. /package/dist/{bridge → protocol}/messages/currentUserChanged.d.ts +0 -0
  257. /package/dist/{bridge → protocol}/messages/currentUserChanged.js +0 -0
  258. /package/dist/{bridge → protocol}/messages/getPage.d.ts +0 -0
  259. /package/dist/{bridge → protocol}/messages/getPage.js +0 -0
  260. /package/dist/{bridge → protocol}/messages/getUser.d.ts +0 -0
  261. /package/dist/{bridge → protocol}/messages/getUser.js +0 -0
  262. /package/dist/{bridge → protocol}/messages/hostToSandbox.d.ts +0 -0
  263. /package/dist/{bridge → protocol}/messages/hostToSandbox.js +0 -0
  264. /package/dist/{bridge → protocol}/messages/init.d.ts +0 -0
  265. /package/dist/{bridge → protocol}/messages/init.js +0 -0
  266. /package/dist/{bridge → protocol}/messages/initResult.d.ts +0 -0
  267. /package/dist/{bridge → protocol}/messages/initResult.js +0 -0
  268. /package/dist/{bridge → protocol}/messages/invalidHostMessage.d.ts +0 -0
  269. /package/dist/{bridge → protocol}/messages/invalidHostMessage.js +0 -0
  270. /package/dist/{bridge → protocol}/messages/invalidSandboxMessage.d.ts +0 -0
  271. /package/dist/{bridge → protocol}/messages/invalidSandboxMessage.js +0 -0
  272. /package/dist/{bridge → protocol}/messages/listUsers.d.ts +0 -0
  273. /package/dist/{bridge → protocol}/messages/listUsers.js +0 -0
  274. /package/dist/{bridge → protocol}/messages/pageChanged.d.ts +0 -0
  275. /package/dist/{bridge → protocol}/messages/pageChanged.js +0 -0
  276. /package/dist/{bridge → protocol}/messages/parentChanged.d.ts +0 -0
  277. /package/dist/{bridge → protocol}/messages/parentChanged.js +0 -0
  278. /package/dist/{bridge → protocol}/messages/queryDataSource.d.ts +0 -0
  279. /package/dist/{bridge → protocol}/messages/queryDataSource.js +0 -0
  280. /package/dist/{bridge → protocol}/messages/queryDataSourceResult.d.ts +0 -0
  281. /package/dist/{bridge → protocol}/messages/queryDataSourceResult.js +0 -0
  282. /package/dist/{bridge → protocol}/messages/resize.d.ts +0 -0
  283. /package/dist/{bridge → protocol}/messages/resize.js +0 -0
  284. /package/dist/{bridge → protocol}/messages/sandboxToHost.d.ts +0 -0
  285. /package/dist/{bridge → protocol}/messages/sandboxToHost.js +0 -0
  286. /package/dist/{bridge → protocol}/messages/themeChanged.d.ts +0 -0
  287. /package/dist/{bridge → protocol}/messages/themeChanged.js +0 -0
  288. /package/dist/{bridge → protocol}/messages/updatePage.d.ts +0 -0
  289. /package/dist/{bridge → protocol}/messages/updatePage.js +0 -0
  290. /package/dist/{bridge → protocol}/messages/updatePageResult.d.ts +0 -0
  291. /package/dist/{bridge → protocol}/messages/updatePageResult.js +0 -0
  292. /package/dist/{bridge → protocol}/pages/page.js +0 -0
  293. /package/dist/{bridge → protocol}/parent.d.ts +0 -0
  294. /package/dist/{bridge → protocol}/parent.js +0 -0
  295. /package/dist/{bridge → protocol}/theme.d.ts +0 -0
  296. /package/dist/{bridge → protocol}/theme.js +0 -0
  297. /package/dist/{bridge → protocol}/users/user.d.ts +0 -0
  298. /package/dist/{bridge → protocol}/users/user.js +0 -0
@@ -1,495 +0,0 @@
1
- import * as v from "valibot";
2
- import { DEFAULT_CONTRAST_MODE, } from "../bridge/contrast.js";
3
- import { sandboxToHostMessageSchema } from "../bridge/messages/sandboxToHost.js";
4
- import { CUSTOM_BLOCK_BRIDGE_PROTOCOL_VERSION } from "../bridge/SandboxBridge.js";
5
- import { unreachable } from "../utils.js";
6
- import { initErrorForFailureReason } from "./lifecycle/initErrors.js";
7
- import { isValidBridgeProtocolVersion } from "./lifecycle/protocolVersion.js";
8
- import { getInvalidSandboxMessageResponse } from "./messages/invalidSandboxMessage.js";
9
- import { QuerySubscriptions } from "./queries/querySubscriptions.js";
10
- const DEFAULT_NO_CONNECT_TIMEOUT_MS = 5000;
11
- const DEFAULT_NO_INIT_RESULT_TIMEOUT_MS = 5000;
12
- const initializationIdentitySchema = v.object({
13
- initializationId: v.string(),
14
- });
15
- export function createCustomBlockHost(options) {
16
- const { iframe, initialState, handlers, onConnect, onInitResult, onLog, targetOrigin = "*", minBridgeProtocolVersion: configuredMinBridgeProtocolVersion, noConnectTimeoutMs = DEFAULT_NO_CONNECT_TIMEOUT_MS, noInitResultTimeoutMs = DEFAULT_NO_INIT_RESULT_TIMEOUT_MS, } = options;
17
- const minBridgeProtocolVersion = Math.max(configuredMinBridgeProtocolVersion ?? CUSTOM_BLOCK_BRIDGE_PROTOCOL_VERSION, CUSTOM_BLOCK_BRIDGE_PROTOCOL_VERSION);
18
- let theme = initialState.theme;
19
- let contrastMode = initialState.contrastMode ?? DEFAULT_CONTRAST_MODE;
20
- let parent = initialState.parent;
21
- let page = initialState.page;
22
- let dataSources = initialState.dataSources;
23
- let manifest = initialState.manifest;
24
- let currentUser = initialState.currentUser;
25
- let initStatus = "waitingForConnect";
26
- let noConnectTimeoutId;
27
- let noInitResultTimeoutId;
28
- let activeInitializationId;
29
- let connectedSandbox;
30
- let pendingThemeChange = false;
31
- let pendingContrastModeChange = false;
32
- let pendingParentChange = false;
33
- let pendingPageChange = false;
34
- let pendingDataSourcesChange;
35
- let pendingCurrentUserChange = false;
36
- const querySubscriptions = new QuerySubscriptions();
37
- function emit(direction, payload) {
38
- onLog?.(direction, payload);
39
- }
40
- function post(message) {
41
- emit("out", message);
42
- iframe.contentWindow?.postMessage(message, targetOrigin);
43
- }
44
- function postQueryDataSourceResult(args) {
45
- const message = args.response.status === "error"
46
- ? {
47
- type: "queryDataSourceResult",
48
- subscriptionId: args.subscriptionId,
49
- status: "error",
50
- error: args.response.error,
51
- }
52
- : {
53
- type: "queryDataSourceResult",
54
- subscriptionId: args.subscriptionId,
55
- status: "success",
56
- items: args.response.items,
57
- hasMore: args.response.hasMore,
58
- };
59
- post(message);
60
- }
61
- function clearNoConnectTimeout() {
62
- if (noConnectTimeoutId !== undefined) {
63
- window.clearTimeout(noConnectTimeoutId);
64
- noConnectTimeoutId = undefined;
65
- }
66
- }
67
- function clearNoInitResultTimeout() {
68
- if (noInitResultTimeoutId !== undefined) {
69
- window.clearTimeout(noInitResultTimeoutId);
70
- noInitResultTimeoutId = undefined;
71
- }
72
- }
73
- function resolveDataSourcesPayload(connect) {
74
- return typeof dataSources === "function"
75
- ? dataSources(connect)
76
- : dataSources;
77
- }
78
- function sendInit(connect) {
79
- if (initStatus !== "waitingForConnect") {
80
- return false;
81
- }
82
- onConnect?.(connect);
83
- manifest = connect.manifest ?? initialState.manifest;
84
- const resolvedDataSources = resolveDataSourcesPayload(connect);
85
- const bindingErrorCode = getBindingErrorCode(manifest, resolvedDataSources);
86
- if (bindingErrorCode !== undefined) {
87
- sendInitError(connect.initializationId, initErrorForFailureReason(bindingErrorCode));
88
- return false;
89
- }
90
- initStatus = "waitingForInitResult";
91
- activeInitializationId = connect.initializationId;
92
- clearNoConnectTimeout();
93
- const message = {
94
- type: "init",
95
- initializationId: connect.initializationId,
96
- status: "success",
97
- theme,
98
- contrastMode,
99
- blockId: initialState.blockId,
100
- parent,
101
- page,
102
- manifest,
103
- dataSources: resolvedDataSources,
104
- currentUser,
105
- };
106
- post(message);
107
- noInitResultTimeoutId = window.setTimeout(() => {
108
- if (initStatus !== "waitingForInitResult") {
109
- return;
110
- }
111
- initStatus = "error";
112
- emit("warn", {
113
- message: "Sandbox did not send initResult",
114
- initializationId: connect.initializationId,
115
- });
116
- }, noInitResultTimeoutMs);
117
- return true;
118
- }
119
- function sendInitError(initializationId, error) {
120
- if (initStatus !== "waitingForConnect") {
121
- return;
122
- }
123
- initStatus = "error";
124
- activeInitializationId = initializationId;
125
- clearNoConnectTimeout();
126
- post({
127
- type: "init",
128
- initializationId,
129
- status: "error",
130
- error,
131
- });
132
- }
133
- function onIframeLoad() {
134
- clearNoConnectTimeout();
135
- if (initStatus !== "waitingForConnect") {
136
- // Only set the timeout if the iframe loaded before the `connect` message was sent.
137
- return;
138
- }
139
- noConnectTimeoutId = window.setTimeout(() => {
140
- if (initStatus !== "waitingForConnect") {
141
- // Only do anything if the iframe loaded before the `connect` message was sent.
142
- return;
143
- }
144
- initStatus = "error";
145
- emit("warn", initErrorForFailureReason("no_connect"));
146
- }, noConnectTimeoutMs);
147
- }
148
- async function handleQuery(message) {
149
- const token = querySubscriptions.track(message);
150
- const response = await handlers.queryDataSource(message);
151
- if (!querySubscriptions.isCurrent(message.subscriptionId, token)) {
152
- return;
153
- }
154
- postQueryDataSourceResult({
155
- subscriptionId: message.subscriptionId,
156
- response,
157
- });
158
- }
159
- async function handleCreatePage(message) {
160
- if (handlers.createPage === undefined) {
161
- return;
162
- }
163
- const response = await handlers.createPage(message);
164
- const result = {
165
- type: "createPageResult",
166
- requestId: message.requestId,
167
- ...response,
168
- };
169
- post(result);
170
- }
171
- async function handleGetPage(message) {
172
- if (handlers.getPage === undefined) {
173
- return;
174
- }
175
- const response = await handlers.getPage(message);
176
- const result = {
177
- type: "getPageResult",
178
- requestId: message.requestId,
179
- ...response,
180
- };
181
- post(result);
182
- }
183
- async function handleGetUser(message) {
184
- if (handlers.getUser === undefined) {
185
- return;
186
- }
187
- const response = await handlers.getUser(message);
188
- const result = {
189
- type: "getUserResult",
190
- requestId: message.requestId,
191
- ...response,
192
- };
193
- post(result);
194
- }
195
- async function handleListUsers(message) {
196
- if (handlers.listUsers === undefined) {
197
- return;
198
- }
199
- const response = await handlers.listUsers(message);
200
- const result = {
201
- type: "listUsersResult",
202
- requestId: message.requestId,
203
- ...response,
204
- };
205
- post(result);
206
- }
207
- async function handleUpdatePage(message) {
208
- if (handlers.updatePage === undefined) {
209
- return;
210
- }
211
- const response = await handlers.updatePage(message);
212
- const result = {
213
- type: "updatePageResult",
214
- requestId: message.requestId,
215
- ...response,
216
- };
217
- post(result);
218
- }
219
- function handleConnect(message) {
220
- // Verify the bridge protocol version is valid.
221
- if (!isValidBridgeProtocolVersion(message.bridgeProtocolVersion)) {
222
- const initError = initErrorForFailureReason("invalid_protocol_version", {
223
- currentBridgeProtocolVersion: message.bridgeProtocolVersion,
224
- });
225
- sendInitError(message.initializationId, initError);
226
- return;
227
- }
228
- if (message.bridgeProtocolVersion < minBridgeProtocolVersion) {
229
- const initError = initErrorForFailureReason("unsupported_protocol_version", {
230
- currentBridgeProtocolVersion: message.bridgeProtocolVersion,
231
- minBridgeProtocolVersion,
232
- });
233
- sendInitError(message.initializationId, initError);
234
- return;
235
- }
236
- // If the sandbox reported an error during `connect`, return it as an `init` error.
237
- if (message.status === "error") {
238
- sendInitError(message.initializationId, message.error);
239
- return;
240
- }
241
- if (!sendInit(message)) {
242
- return;
243
- }
244
- connectedSandbox = message;
245
- }
246
- /**
247
- * Sends any pending host state changes to the sandbox. It is possible for these to change
248
- * between when the host sends `init` and when the sandbox responds with `initResult`. The host
249
- * does send any pending state changes until hearing back from the sandbox.
250
- */
251
- function flushPendingHostStateChanges() {
252
- if (pendingThemeChange) {
253
- pendingThemeChange = false;
254
- post({ type: "themeChanged", theme });
255
- }
256
- if (pendingContrastModeChange) {
257
- pendingContrastModeChange = false;
258
- post({ type: "contrastModeChanged", contrastMode });
259
- }
260
- if (pendingParentChange) {
261
- pendingParentChange = false;
262
- post({ type: "parentChanged", parent });
263
- }
264
- if (pendingPageChange) {
265
- pendingPageChange = false;
266
- post({ type: "pageChanged", page });
267
- }
268
- if (pendingDataSourcesChange !== undefined) {
269
- const nextDataSources = pendingDataSourcesChange;
270
- pendingDataSourcesChange = undefined;
271
- post({ type: "dataSourcesChanged", dataSources: nextDataSources });
272
- }
273
- if (pendingCurrentUserChange) {
274
- pendingCurrentUserChange = false;
275
- post({ type: "currentUserChanged", currentUser });
276
- }
277
- }
278
- function handleInitResult(message) {
279
- if (initStatus !== "waitingForInitResult" ||
280
- message.initializationId !== activeInitializationId) {
281
- emit("warn", {
282
- message: "Ignored stale or unexpected initResult",
283
- payload: message,
284
- });
285
- return;
286
- }
287
- clearNoInitResultTimeout();
288
- initStatus = message.status === "success" ? "success" : "error";
289
- if (initStatus === "success") {
290
- flushPendingHostStateChanges();
291
- }
292
- onInitResult?.(message);
293
- }
294
- function onInvalidSandboxMessage(data, issues) {
295
- emit("warn", {
296
- message: "Ignored unsupported sandbox message",
297
- payload: data,
298
- issues,
299
- });
300
- const response = getInvalidSandboxMessageResponse(data);
301
- const parsedIdentity = v.safeParse(initializationIdentitySchema, data);
302
- const initializationId = parsedIdentity.success
303
- ? parsedIdentity.output.initializationId
304
- : undefined;
305
- if (initStatus === "waitingForConnect" &&
306
- response.incomingType === "connect" &&
307
- initializationId !== undefined) {
308
- sendInitError(initializationId, initErrorForFailureReason("invalid_connect"));
309
- }
310
- else if (response.nack !== undefined) {
311
- post(response.nack);
312
- }
313
- }
314
- function onMessage(event) {
315
- if (event.source !== iframe.contentWindow) {
316
- return;
317
- }
318
- const parsed = v.safeParse(sandboxToHostMessageSchema, event.data);
319
- if (!parsed.success) {
320
- onInvalidSandboxMessage(event.data, parsed.issues);
321
- return;
322
- }
323
- const message = parsed.output;
324
- emit("in", message);
325
- if (message.type !== "connect" &&
326
- message.type !== "initResult" &&
327
- initStatus !== "success") {
328
- emit("warn", {
329
- message: `Ignored ${message.type} before initialization completed`,
330
- payload: message,
331
- });
332
- return;
333
- }
334
- switch (message.type) {
335
- case "connect":
336
- handleConnect(message);
337
- return;
338
- case "initResult":
339
- handleInitResult(message);
340
- return;
341
- case "queryDataSource":
342
- void handleQuery(message);
343
- return;
344
- case "createPage":
345
- void handleCreatePage(message);
346
- return;
347
- case "getPage":
348
- void handleGetPage(message);
349
- return;
350
- case "getUser":
351
- void handleGetUser(message);
352
- return;
353
- case "listUsers":
354
- void handleListUsers(message);
355
- return;
356
- case "updatePage":
357
- void handleUpdatePage(message);
358
- return;
359
- case "resize":
360
- handlers.resize?.(message);
361
- return;
362
- case "invalidHostMessage":
363
- return;
364
- default:
365
- unreachable(message);
366
- }
367
- }
368
- window.addEventListener("message", onMessage);
369
- iframe.addEventListener("load", onIframeLoad);
370
- return {
371
- stop() {
372
- window.removeEventListener("message", onMessage);
373
- iframe.removeEventListener("load", onIframeLoad);
374
- clearNoConnectTimeout();
375
- clearNoInitResultTimeout();
376
- querySubscriptions.clear();
377
- },
378
- post,
379
- setTheme(nextTheme) {
380
- theme = nextTheme;
381
- if (initStatus !== "success") {
382
- if (initStatus === "waitingForInitResult") {
383
- pendingThemeChange = true;
384
- }
385
- return;
386
- }
387
- const message = { type: "themeChanged", theme };
388
- post(message);
389
- },
390
- setContrastMode(nextContrastMode) {
391
- contrastMode = nextContrastMode;
392
- if (initStatus !== "success") {
393
- if (initStatus === "waitingForInitResult") {
394
- pendingContrastModeChange = true;
395
- }
396
- return;
397
- }
398
- const message = {
399
- type: "contrastModeChanged",
400
- contrastMode,
401
- };
402
- post(message);
403
- },
404
- setParent(nextParent) {
405
- parent = nextParent;
406
- if (initStatus !== "success") {
407
- if (initStatus === "waitingForInitResult") {
408
- pendingParentChange = true;
409
- }
410
- return;
411
- }
412
- const message = { type: "parentChanged", parent };
413
- post(message);
414
- },
415
- setPage(nextPage) {
416
- page = nextPage;
417
- if (initStatus !== "success") {
418
- if (initStatus === "waitingForInitResult") {
419
- pendingPageChange = true;
420
- }
421
- return;
422
- }
423
- const message = { type: "pageChanged", page };
424
- post(message);
425
- },
426
- setDataSources(nextDataSources) {
427
- if (connectedSandbox !== undefined &&
428
- getBindingErrorCode(manifest, nextDataSources) !== undefined) {
429
- emit("warn", {
430
- message: "Ignored invalid data source bindings update",
431
- payload: nextDataSources,
432
- });
433
- return;
434
- }
435
- dataSources = nextDataSources;
436
- if (initStatus !== "success") {
437
- if (initStatus === "waitingForInitResult") {
438
- pendingDataSourcesChange = nextDataSources;
439
- }
440
- return;
441
- }
442
- const message = {
443
- type: "dataSourcesChanged",
444
- dataSources: nextDataSources,
445
- };
446
- post(message);
447
- },
448
- setCurrentUser(nextCurrentUser) {
449
- currentUser = nextCurrentUser;
450
- if (initStatus !== "success") {
451
- if (initStatus === "waitingForInitResult") {
452
- pendingCurrentUserChange = true;
453
- }
454
- return;
455
- }
456
- post({ type: "currentUserChanged", currentUser });
457
- },
458
- refreshQuery({ dataSourceId, response }) {
459
- if (initStatus !== "success") {
460
- return;
461
- }
462
- const refreshes = querySubscriptions.resolveRefreshes({
463
- dataSourceId,
464
- response,
465
- });
466
- if (refreshes.length === 0) {
467
- emit("warn", `No active query exists for data source "${dataSourceId}"`);
468
- return;
469
- }
470
- for (const refresh of refreshes) {
471
- postQueryDataSourceResult(refresh);
472
- }
473
- },
474
- };
475
- }
476
- function getBindingErrorCode(manifest, dataSources) {
477
- for (const [dataSourceKey, manifestDataSource] of Object.entries(manifest.dataSources)) {
478
- const binding = dataSources.bindings[dataSourceKey];
479
- if (binding?.collectionPointer === undefined ||
480
- binding.collectionSchema === undefined) {
481
- return "missing_data_source_binding";
482
- }
483
- for (const [propertyKey, manifestProperty] of Object.entries(manifestDataSource.properties ?? {})) {
484
- const propertyId = binding.propertyIdsByKey?.[propertyKey];
485
- if (propertyId === undefined) {
486
- return "missing_property_binding";
487
- }
488
- if (binding.collectionSchema.propertiesById[propertyId]?.type !==
489
- manifestProperty.type) {
490
- return "invalid_property_binding";
491
- }
492
- }
493
- }
494
- return undefined;
495
- }
@@ -1,13 +0,0 @@
1
- import type { CustomBlockInitErrorCode, CustomBlockInitErrorInfo } from "../../bridge/messages/init.js";
2
- /**
3
- * Returns the error info for a given `init` failure code.
4
- *
5
- * `init` handshakes are one-shot: after an `init` error, this host instance will not answer another
6
- * `connect` message. `isRetryable` means a fresh iframe / `init` attempt could plausibly succeed
7
- * without changing block code or host configuration.
8
- */
9
- export declare function initErrorForFailureReason(reason: CustomBlockInitErrorCode, data?: {
10
- minBridgeProtocolVersion?: number;
11
- currentBridgeProtocolVersion?: number;
12
- }): CustomBlockInitErrorInfo;
13
- //# sourceMappingURL=initErrors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initErrors.d.ts","sourceRoot":"","sources":["../../../../../home/runner/work/custom-blocks/custom-blocks/sdk/src/host/lifecycle/initErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,wBAAwB,EACxB,wBAAwB,EACxB,MAAM,+BAA+B,CAAA;AAKtC;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,wBAAwB,EAChC,IAAI,GAAE;IACL,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAA;CAChC,GACJ,wBAAwB,CA+I1B"}
@@ -1,152 +0,0 @@
1
- const UNKNOWN_ERROR_MESSAGE = "Unexpected error while initializing custom block.";
2
- /**
3
- * Returns the error info for a given `init` failure code.
4
- *
5
- * `init` handshakes are one-shot: after an `init` error, this host instance will not answer another
6
- * `connect` message. `isRetryable` means a fresh iframe / `init` attempt could plausibly succeed
7
- * without changing block code or host configuration.
8
- */
9
- export function initErrorForFailureReason(reason, data = {}) {
10
- switch (reason) {
11
- case "no_connect":
12
- return {
13
- code: reason,
14
- message: "Sandbox did not send a connect message.",
15
- isRetryable: true,
16
- };
17
- case "invalid_connect":
18
- return {
19
- code: reason,
20
- message: "Sandbox sent an invalid connect message.",
21
- // The sandbox must be updated to send a valid connect message.
22
- isRetryable: false,
23
- };
24
- case "manifest_unavailable":
25
- return {
26
- code: reason,
27
- message: "The custom block manifest is unavailable.",
28
- isRetryable: true,
29
- };
30
- case "manifest_invalid":
31
- return {
32
- code: reason,
33
- message: "Sandbox sent an invalid manifest.",
34
- // The sandbox must be updated to a valid manifest.
35
- isRetryable: false,
36
- };
37
- case "invalid_protocol_version": {
38
- const versionText = data.currentBridgeProtocolVersion
39
- ? `: ${data.currentBridgeProtocolVersion}`
40
- : ".";
41
- return {
42
- code: reason,
43
- message: `Sandbox reported an invalid bridge protocol version ${versionText}`,
44
- // The sandbox must be updated to a supported protocol version.
45
- isRetryable: false,
46
- };
47
- }
48
- case "unsupported_protocol_version": {
49
- const currentVersionText = data.currentBridgeProtocolVersion
50
- ? `${data.currentBridgeProtocolVersion} `
51
- : "";
52
- const minVersionText = data.minBridgeProtocolVersion
53
- ? ` Minimum supported version is ${data.minBridgeProtocolVersion}.`
54
- : "";
55
- return {
56
- code: reason,
57
- message: `Sandbox bridge protocol version ${currentVersionText}is not supported.${minVersionText}`,
58
- // The sandbox must be updated to a supported protocol version.
59
- isRetryable: false,
60
- };
61
- }
62
- case "context_unavailable":
63
- return {
64
- code: reason,
65
- message: "Host page context is unavailable.",
66
- isRetryable: true,
67
- };
68
- case "current_user_unavailable":
69
- return {
70
- code: reason,
71
- message: "Current user is unavailable.",
72
- isRetryable: true,
73
- };
74
- case "missing_data_source_binding":
75
- return {
76
- code: reason,
77
- message: "A required data source is not mapped.",
78
- // Host configuration must be changed before this block can initialize.
79
- isRetryable: false,
80
- };
81
- case "data_source_unavailable":
82
- return {
83
- code: reason,
84
- message: "A mapped data source is unavailable.",
85
- // This error combines some retryable errors (e.g. data source failed to load) with
86
- // some non-retryable errors (e.g. data source does not exist or user does not have
87
- // access). Fallback to assuming the error is retryable.
88
- isRetryable: true,
89
- };
90
- case "missing_property_binding":
91
- return {
92
- code: reason,
93
- message: "A required data source property is not mapped.",
94
- // Host configuration must be changed before this block can initialize.
95
- isRetryable: false,
96
- };
97
- case "invalid_property_binding":
98
- return {
99
- code: reason,
100
- message: "A mapped data source property is missing or incompatible.",
101
- // The bound property's schema must be updated or the binding must be updated to
102
- // a property with a compatible schema.
103
- isRetryable: false,
104
- };
105
- case "no_init_result":
106
- return {
107
- code: reason,
108
- message: "Sandbox did not acknowledge initialization.",
109
- isRetryable: true,
110
- };
111
- case "invalid_init_result":
112
- return {
113
- code: reason,
114
- message: "Sandbox sent an invalid initialization result.",
115
- isRetryable: false,
116
- };
117
- case "invalid_init_bindings":
118
- return {
119
- code: reason,
120
- message: "Sandbox rejected the host-provided data source bindings.",
121
- isRetryable: false,
122
- };
123
- case "not_in_iframe":
124
- return {
125
- code: reason,
126
- message: "<NotionCustomBlock> only works inside an iframe.",
127
- // The block must be embedded in an iframe.
128
- isRetryable: false,
129
- };
130
- case "init_timeout":
131
- return {
132
- code: reason,
133
- message: "Host did not respond to init before the timeout.",
134
- isRetryable: true,
135
- };
136
- case "unknown_error":
137
- return {
138
- code: reason,
139
- message: UNKNOWN_ERROR_MESSAGE,
140
- // Treat unknown errors as non-retryable.
141
- isRetryable: false,
142
- };
143
- default:
144
- console.warn(`Unexpected custom block init error: ${reason}`);
145
- return {
146
- code: reason,
147
- message: UNKNOWN_ERROR_MESSAGE,
148
- // Treat unknown error codes as non-retryable.
149
- isRetryable: false,
150
- };
151
- }
152
- }
@@ -1,2 +0,0 @@
1
- export declare function isValidBridgeProtocolVersion(version: number): boolean;
2
- //# sourceMappingURL=protocolVersion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocolVersion.d.ts","sourceRoot":"","sources":["../../../../../home/runner/work/custom-blocks/custom-blocks/sdk/src/host/lifecycle/protocolVersion.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErE"}
@@ -1,3 +0,0 @@
1
- export function isValidBridgeProtocolVersion(version) {
2
- return Number.isFinite(version) && Number.isInteger(version) && version >= 1;
3
- }