diff --git a/apps/web/package.json b/apps/web/package.json index 8e858248..3b1cef11 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -30,13 +30,13 @@ "@flags-sdk/vercel": "^1.4.6", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/core": "0.0.49", - "@openeditor/custom-block": "0.0.49", - "@openeditor/emoji": "0.0.49", - "@openeditor/exporters": "0.0.49", - "@openeditor/react": "0.0.49", - "@openeditor/ui": "0.0.49", - "@openeditor/workspace": "0.0.49", + "@openeditor/core": "0.0.50", + "@openeditor/custom-block": "0.0.50", + "@openeditor/emoji": "0.0.50", + "@openeditor/exporters": "0.0.50", + "@openeditor/react": "0.0.50", + "@openeditor/ui": "0.0.50", + "@openeditor/workspace": "0.0.50", "@vercel/analytics": "^2.0.1", "@vercel/sdk": "^1.28.8", "ai": "7.0.49", diff --git a/bun.lock b/bun.lock index 7b5150f4..6fc19158 100644 --- a/bun.lock +++ b/bun.lock @@ -34,13 +34,13 @@ "@flags-sdk/vercel": "^1.4.6", "@hugeicons/core-free-icons": "^4.2.3", "@hugeicons/react": "^1.1.9", - "@openeditor/core": "0.0.49", - "@openeditor/custom-block": "0.0.49", - "@openeditor/emoji": "0.0.49", - "@openeditor/exporters": "0.0.49", - "@openeditor/react": "0.0.49", - "@openeditor/ui": "0.0.49", - "@openeditor/workspace": "0.0.49", + "@openeditor/core": "0.0.50", + "@openeditor/custom-block": "0.0.50", + "@openeditor/emoji": "0.0.50", + "@openeditor/exporters": "0.0.50", + "@openeditor/react": "0.0.50", + "@openeditor/ui": "0.0.50", + "@openeditor/workspace": "0.0.50", "@vercel/analytics": "^2.0.1", "@vercel/sdk": "^1.28.8", "ai": "7.0.49", @@ -92,9 +92,9 @@ "@convex-dev/workpool": "^0.4.9", "@firecrawl/anydoc": "0.1.9", "@noble/hashes": "2.0.1", - "@openeditor/core": "0.0.48", - "@openeditor/custom-block": "0.0.48", - "@openeditor/workspace": "0.0.48", + "@openeditor/core": "0.0.50", + "@openeditor/custom-block": "0.0.50", + "@openeditor/workspace": "0.0.50", "@polar-sh/sdk": "0.49.0", "ai": "7.0.49", "better-auth": "^1.6.23", @@ -673,27 +673,27 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], + "@openeditor/core": ["@openeditor/core@0.0.50", "", {}, "sha512-w4YUQjpybZTtJZldnEIUpk2416VDtmhE37sBgbTzhrlaTtIUHnyarkPIU1NWqPebrl3gDJ8k4DkonUfdUVg4Lg=="], - "@openeditor/custom-block": ["@openeditor/custom-block@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@openeditor/extensions": "0.0.48" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-5TOybu1GHYWnv88ngFONAg8IXQx8NJz544fHvXZpKo2SPgXxY4QBv+JVUuVwZjpqpZXrHgCzS8IChEEloBqC2A=="], + "@openeditor/custom-block": ["@openeditor/custom-block@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50", "@openeditor/extensions": "0.0.50" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-EMRwLJksb3Hq7zxpe273QEwHhtjLdUw6VUBXUnE5wyj9msQTaQc2n9qVpKoiJbMDkS/mShzRDZWi8yxvIRx21Q=="], "@openeditor/embedded-runtime": ["@openeditor/embedded-runtime@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@openeditor/custom-block": "0.0.48", "@openeditor/extensions": "0.0.48", "@openeditor/tiptap": "0.0.48", "@tiptap/core": "3.29.2", "@tiptap/extension-image": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-text-align": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/extension-unique-id": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/starter-kit": "3.29.2" } }, "sha512-BeAhjn25JMUw/DfWh+sm02NE4oV0+tjhi0sxYJS0SC084p1P+HKPYqtPlQUXlLCIkODoKmthzmuokb5yHcfANw=="], - "@openeditor/emoji": ["@openeditor/emoji@0.0.49", "", { "dependencies": { "@base-ui/react": "^1.6.0", "emojibase-data": "16.0.2", "frimousse": "0.3.0" }, "peerDependencies": { "react": ">=19" } }, "sha512-hHbAnWUtA4rrqa9ZsfDY/qtgMobLwViuaINFtQ2hQ4ddTsgtY4z4YyN65gDyztEv1BxMt1Au07u+oUa8jBAxSw=="], + "@openeditor/emoji": ["@openeditor/emoji@0.0.50", "", { "dependencies": { "@base-ui/react": "^1.6.0", "emojibase-data": "16.0.2", "frimousse": "0.3.0" }, "peerDependencies": { "react": ">=19" } }, "sha512-/6pnKqPmhtmLYfy8e3hrc08rHP8FOJ19dJCu9/cC25AO+BGYWdqYj0qR4QkWIUKn9MXMGMHmtidSu1C+083oWg=="], - "@openeditor/exporters": ["@openeditor/exporters@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@openeditor/custom-block": "0.0.49", "docx": "^9.7.1", "jszip": "^3.10.1", "parse5": "^7.3.0" } }, "sha512-ZIA5jM892jsjXOQ3SIA6k+CzH2SPMWtvZOtFqrdr4EItF5ScT6rHY2FChVNmhIgMVtEBj+a8xkQ72wLoAjNZqw=="], + "@openeditor/exporters": ["@openeditor/exporters@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50", "@openeditor/custom-block": "0.0.50", "docx": "^9.7.1", "jszip": "^3.10.1", "parse5": "^7.3.0" } }, "sha512-KG0ocHFHWrXRcWwj7CXudIxFjWUjX0m3YELqdYqpvOQZ/dTp2FtgkPrPf5d7kIr0egtpuSJVImXmGZ6M6PxJdA=="], "@openeditor/extensions": ["@openeditor/extensions@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48" } }, "sha512-jCJoY5dd1h2qL5ZtAtqESV5kH6tl9GH/4zdt+p+bOXkn3HhI4GfxgzO14iQ2MWTneWSGTEnNX7q4F/wHcHeUkg=="], - "@openeditor/icons": ["@openeditor/icons@0.0.49", "", { "dependencies": { "@hugeicons/core-free-icons": "^4.2.3" } }, "sha512-oc2ElZU+qlU/RoNZlSTQ0s9rS4/Wf+yYbww2EYqe5PK1eJIiVnnE9Qsd4P8Mk1WfHDjAKd1McfxwTq4GN+CJ5Q=="], + "@openeditor/icons": ["@openeditor/icons@0.0.50", "", { "dependencies": { "@hugeicons/core-free-icons": "^4.2.3" } }, "sha512-9xCz58jQFf+WwBHX2M/p/wi+D2QGnHTlg1jiZ7+7KUnSlqy/mkS16WqpIPpJG11YfUtzNHO7uypP7ZARhcvetA=="], - "@openeditor/react": ["@openeditor/react@0.0.49", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@hugeicons/react": "^1.1.9", "@openeditor/core": "0.0.49", "@openeditor/custom-block": "0.0.49", "@openeditor/embedded-runtime": "0.0.49", "@openeditor/emoji": "0.0.49", "@openeditor/exporters": "0.0.49", "@openeditor/extensions": "0.0.49", "@openeditor/icons": "0.0.49", "@openeditor/tiptap": "0.0.49", "@tiptap/core": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-placeholder": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/react": "3.29.2", "@tiptap/starter-kit": "3.29.2", "@tiptap/suggestion": "3.29.2", "beautiful-mermaid": "1.1.3", "use-sync-external-store": "1.6.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-DsaUD3ZqjkSs+lcW2ZaFsUDZ7HfYSbUEgrzw4J2dYF6d67Fz4SXL15I0lvMa8B1dHLz1US1Q3oWklxLTU2eLGw=="], + "@openeditor/react": ["@openeditor/react@0.0.50", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@hugeicons/react": "^1.1.9", "@openeditor/core": "0.0.50", "@openeditor/custom-block": "0.0.50", "@openeditor/embedded-runtime": "0.0.50", "@openeditor/emoji": "0.0.50", "@openeditor/exporters": "0.0.50", "@openeditor/extensions": "0.0.50", "@openeditor/icons": "0.0.50", "@openeditor/tiptap": "0.0.50", "@tiptap/core": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-placeholder": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/react": "3.29.2", "@tiptap/starter-kit": "3.29.2", "@tiptap/suggestion": "3.29.2", "beautiful-mermaid": "1.1.3", "use-sync-external-store": "1.6.0" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-O6+cBQ1g1ohfalUgWNV2+vI4m5r1AzuemG970H6JWI7VPa5QjUoUr/wqxKkym3tilHBa7Myd+nTJtV24idRt9g=="], "@openeditor/tiptap": ["@openeditor/tiptap@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@tiptap/core": "3.29.2", "@tiptap/pm": "3.29.2" } }, "sha512-lkIb1JktHaq/1VXJbaFwY6A3K+v5dW3YTNMiF85LdnBM+ZhR26BKHmYKzDtcegBEOktBzUln1iGZkXNPAcE9xQ=="], - "@openeditor/ui": ["@openeditor/ui@0.0.49", "", { "dependencies": { "@base-ui/react": "^1.6.0", "@hugeicons/react": "^1.1.9", "@openeditor/emoji": "0.0.49", "@openeditor/icons": "0.0.49", "@openeditor/react": "0.0.49" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-JuFplLGauNU5B30TmhsvrmtGyXOmi4mOwqqJqA1JNj10TBEtOl6QNnITGuqMuXFitExHwfTt/XfW7lF0MPKrDA=="], + "@openeditor/ui": ["@openeditor/ui@0.0.50", "", { "dependencies": { "@base-ui/react": "^1.6.0", "@hugeicons/react": "^1.1.9", "@openeditor/emoji": "0.0.50", "@openeditor/icons": "0.0.50", "@openeditor/react": "0.0.50" }, "peerDependencies": { "react": ">=19", "react-dom": ">=19" } }, "sha512-iGdial4YHQBoCIE/pRhpPKb8CFlSDm3qeFhf/eUSXNQdOWlvT6gnsO/v5SFongLRill3/5LtvdIQ6b8Uazf4hg=="], - "@openeditor/workspace": ["@openeditor/workspace@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48" } }, "sha512-RIDX5RJrpI5ZugPnEUQjiT/9RjiJYIL4O9Q/pNDjTvcOU8eQpRSOG7Nzgx6gqabbS9icAvwBgNTtHvIpYevWCg=="], + "@openeditor/workspace": ["@openeditor/workspace@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50" } }, "sha512-NSZ8PtWolyEeh17Ddt/wcoLDXaEWf4YoffETz20YIozRR/TgEBgODq2U79t456xmHdbzyaQxPP8VLGpXd/byGA=="], "@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], @@ -2597,11 +2597,13 @@ "@ai-sdk/provider-utils/undici": ["undici@7.29.0", "", {}, "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw=="], - "@baseblocks/web/@openeditor/core": ["@openeditor/core@0.0.49", "", {}, "sha512-5IR0YWSD8CJFlTz4wQnjNI6Stg/nii8wwP8PxslFJpV0O0WrIsZnLW4pknpV26RlNiRKHXujT3HwqsYIZDyTpw=="], + "@baseblocks/custom-blocks/@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], + + "@baseblocks/custom-blocks/@openeditor/custom-block": ["@openeditor/custom-block@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@openeditor/extensions": "0.0.48" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-5TOybu1GHYWnv88ngFONAg8IXQx8NJz544fHvXZpKo2SPgXxY4QBv+JVUuVwZjpqpZXrHgCzS8IChEEloBqC2A=="], - "@baseblocks/web/@openeditor/custom-block": ["@openeditor/custom-block@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@openeditor/extensions": "0.0.49" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-RhwGDgnsXMVi2s7o1agEsftAigJsXWD4FIS19S26uFJ9GCAcvKtru/q9dwo8Q5BnG59wcnNNGxNUa2QoK67s/g=="], + "@baseblocks/openeditor-contracts/@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], - "@baseblocks/web/@openeditor/workspace": ["@openeditor/workspace@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49" } }, "sha512-CjhtZ1bmXSTBRPve5XNRkZP9/L1GfgDfXXSPDd1PjoWB63t2kTXEWIuWGbUVqzapIfaTdsfISejfWSP03KvCbA=="], + "@baseblocks/openeditor-contracts/@openeditor/custom-block": ["@openeditor/custom-block@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@openeditor/extensions": "0.0.48" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-5TOybu1GHYWnv88ngFONAg8IXQx8NJz544fHvXZpKo2SPgXxY4QBv+JVUuVwZjpqpZXrHgCzS8IChEEloBqC2A=="], "@better-auth/core/jose": ["jose@6.2.8", "", {}, "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ=="], @@ -2615,19 +2617,21 @@ "@modelcontextprotocol/sdk/jose": ["jose@6.2.8", "", {}, "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ=="], - "@openeditor/exporters/@openeditor/core": ["@openeditor/core@0.0.49", "", {}, "sha512-5IR0YWSD8CJFlTz4wQnjNI6Stg/nii8wwP8PxslFJpV0O0WrIsZnLW4pknpV26RlNiRKHXujT3HwqsYIZDyTpw=="], + "@openeditor/custom-block/@openeditor/extensions": ["@openeditor/extensions@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50" } }, "sha512-D8cntZt8q6pnltm7HSV0YvwBQk/L11cHY+TtIu+0PUWaDPHkB6/oFvIpbX3Gyt7RKJ9ibIctGWW01iZM9IPV9A=="], - "@openeditor/exporters/@openeditor/custom-block": ["@openeditor/custom-block@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@openeditor/extensions": "0.0.49" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-RhwGDgnsXMVi2s7o1agEsftAigJsXWD4FIS19S26uFJ9GCAcvKtru/q9dwo8Q5BnG59wcnNNGxNUa2QoK67s/g=="], + "@openeditor/embedded-runtime/@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], - "@openeditor/react/@openeditor/core": ["@openeditor/core@0.0.49", "", {}, "sha512-5IR0YWSD8CJFlTz4wQnjNI6Stg/nii8wwP8PxslFJpV0O0WrIsZnLW4pknpV26RlNiRKHXujT3HwqsYIZDyTpw=="], + "@openeditor/embedded-runtime/@openeditor/custom-block": ["@openeditor/custom-block@0.0.48", "", { "dependencies": { "@openeditor/core": "0.0.48", "@openeditor/extensions": "0.0.48" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-5TOybu1GHYWnv88ngFONAg8IXQx8NJz544fHvXZpKo2SPgXxY4QBv+JVUuVwZjpqpZXrHgCzS8IChEEloBqC2A=="], - "@openeditor/react/@openeditor/custom-block": ["@openeditor/custom-block@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@openeditor/extensions": "0.0.49" }, "peerDependencies": { "@tiptap/core": ">=3.29.2", "@tiptap/react": ">=3.29.2", "react": ">=19" }, "optionalPeers": ["@tiptap/core", "@tiptap/react"] }, "sha512-RhwGDgnsXMVi2s7o1agEsftAigJsXWD4FIS19S26uFJ9GCAcvKtru/q9dwo8Q5BnG59wcnNNGxNUa2QoK67s/g=="], + "@openeditor/extensions/@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], - "@openeditor/react/@openeditor/embedded-runtime": ["@openeditor/embedded-runtime@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@openeditor/custom-block": "0.0.49", "@openeditor/extensions": "0.0.49", "@openeditor/tiptap": "0.0.49", "@tiptap/core": "3.29.2", "@tiptap/extension-image": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-text-align": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/extension-unique-id": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/starter-kit": "3.29.2" } }, "sha512-9OZpil90ltEgwzDkZEAmOWbSE95sqWksuHlAkuWvU37bOMMXSztI7bWGp1/6UXlWDgWIfJXURvdOEcLtDQ9L5A=="], + "@openeditor/react/@openeditor/embedded-runtime": ["@openeditor/embedded-runtime@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50", "@openeditor/custom-block": "0.0.50", "@openeditor/extensions": "0.0.50", "@openeditor/tiptap": "0.0.50", "@tiptap/core": "3.29.2", "@tiptap/extension-image": "3.29.2", "@tiptap/extension-link": "3.29.2", "@tiptap/extension-table": "3.29.2", "@tiptap/extension-task-item": "3.29.2", "@tiptap/extension-task-list": "3.29.2", "@tiptap/extension-text-align": "3.29.2", "@tiptap/extension-underline": "3.29.2", "@tiptap/extension-unique-id": "3.29.2", "@tiptap/pm": "3.29.2", "@tiptap/starter-kit": "3.29.2" } }, "sha512-YrGRDYAA8cYKaV82pRg/163U6C5T9CI94UG3SvzNGfbx09tzGt68ebDBqB0q2Nyag+TIAQNNdUdE1LiC3Hl75g=="], - "@openeditor/react/@openeditor/extensions": ["@openeditor/extensions@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49" } }, "sha512-R4bgf7ZN42wmd5qz1eqTuwM6jsJvP4CxUME+GQeeZ5/j79F3kLGR+r1SvcohAlXhptQYHfHhbsy5v3xB/aH4yw=="], + "@openeditor/react/@openeditor/extensions": ["@openeditor/extensions@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50" } }, "sha512-D8cntZt8q6pnltm7HSV0YvwBQk/L11cHY+TtIu+0PUWaDPHkB6/oFvIpbX3Gyt7RKJ9ibIctGWW01iZM9IPV9A=="], - "@openeditor/react/@openeditor/tiptap": ["@openeditor/tiptap@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49", "@tiptap/core": "3.29.2", "@tiptap/pm": "3.29.2" } }, "sha512-yurqWuLIMhL4abmCqBaZiqRmdAHbUrVmtsGX7pSR6O77rti5v1mOIpBTxa77rSZaySC9a5XW1xjClWynTC770Q=="], + "@openeditor/react/@openeditor/tiptap": ["@openeditor/tiptap@0.0.50", "", { "dependencies": { "@openeditor/core": "0.0.50", "@tiptap/core": "3.29.2", "@tiptap/pm": "3.29.2" } }, "sha512-ot8WXbaraoa8E4a8kzozaR16jNVd4ehjvOgh9A32jr8O+rS4JtQyFtColA4LyuqAFufHOUioNpP8sfPZSNdFAQ=="], + + "@openeditor/tiptap/@openeditor/core": ["@openeditor/core@0.0.48", "", {}, "sha512-ptFsBbDdgFbzowBgu+mmK8Hw+Ua7Uu2iXspV0debpFBN0JzQsGJYaOiHiinP2EWjnorvRs0PmgXvttVg1QThHw=="], "@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], @@ -2805,10 +2809,6 @@ "zrender/tslib": ["tslib@2.3.0", "", {}, "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="], - "@baseblocks/web/@openeditor/custom-block/@openeditor/extensions": ["@openeditor/extensions@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49" } }, "sha512-R4bgf7ZN42wmd5qz1eqTuwM6jsJvP4CxUME+GQeeZ5/j79F3kLGR+r1SvcohAlXhptQYHfHhbsy5v3xB/aH4yw=="], - - "@openeditor/exporters/@openeditor/custom-block/@openeditor/extensions": ["@openeditor/extensions@0.0.49", "", { "dependencies": { "@openeditor/core": "0.0.49" } }, "sha512-R4bgf7ZN42wmd5qz1eqTuwM6jsJvP4CxUME+GQeeZ5/j79F3kLGR+r1SvcohAlXhptQYHfHhbsy5v3xB/aH4yw=="], - "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="], "@vercel/cli-exec/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], diff --git a/packages/backend/convex/aiWorkspaces.ts b/packages/backend/convex/aiWorkspaces.ts index f292878d..b2efc88a 100644 --- a/packages/backend/convex/aiWorkspaces.ts +++ b/packages/backend/convex/aiWorkspaces.ts @@ -1,8 +1,5 @@ import { v } from "convex/values"; -import { - fingerprintProjectPage, - type OpenEditorProjectSnapshot, -} from "@openeditor/workspace"; +import { fingerprintSnapshotPage, type Snapshot } from "@openeditor/workspace"; import type { JsonObject } from "@openeditor/core"; import { query } from "./_generated/server"; import { @@ -159,7 +156,7 @@ export const exportDraft = query({ document: document ?? emptyOpenEditorDocument(), }; }); - const project: OpenEditorProjectSnapshot = { + const project: Snapshot = { id: String(site._id), revision: String(site.draftRevision), title: site.name, @@ -184,7 +181,7 @@ export const exportDraft = query({ Promise.all( project.pages.map(async (page) => ({ pageId: page.id, - fingerprint: await fingerprintProjectPage(page), + fingerprint: await fingerprintSnapshotPage(page), })), ), ]); diff --git a/packages/backend/convex/billingDeletion.test.ts b/packages/backend/convex/billingDeletion.test.ts index 47101796..493e917e 100644 --- a/packages/backend/convex/billingDeletion.test.ts +++ b/packages/backend/convex/billingDeletion.test.ts @@ -20,11 +20,7 @@ describe("workspace billing deletion", () => { getUserIdentity: async () => ({ subject: "user-1" }), }, runQuery: async (_reference: unknown, args: unknown) => { - if ( - typeof args === "object" && - args !== null && - "model" in args - ) { + if (typeof args === "object" && args !== null && "model" in args) { return { _id: "member-1", organizationId: "organization-1", diff --git a/packages/backend/convex/model/aiWorkspaceFingerprint.test.ts b/packages/backend/convex/model/aiWorkspaceFingerprint.test.ts index 3f16c8fa..0d4c3165 100644 --- a/packages/backend/convex/model/aiWorkspaceFingerprint.test.ts +++ b/packages/backend/convex/model/aiWorkspaceFingerprint.test.ts @@ -1,14 +1,14 @@ import { describe, expect, test } from "bun:test"; import { - fingerprintProjectPage, - fingerprintProjectSnapshot, - fingerprintSiteManifest, - type OpenEditorProjectSnapshot, + fingerprintSnapshot, + fingerprintSnapshotManifest, + fingerprintSnapshotPage, + type Snapshot, } from "@openeditor/workspace"; import { assertAiWorkspaceFingerprints } from "./aiWorkspaceFingerprint"; const document = { type: "doc" as const, version: 1 as const, content: [] }; -const current: OpenEditorProjectSnapshot = { +const current: Snapshot = { id: "site-1", revision: "4", title: "Site", @@ -26,28 +26,6 @@ const current: OpenEditorProjectSnapshot = { ], }; -function manifest(project: OpenEditorProjectSnapshot) { - return { - format: "openeditor.site" as const, - version: 1 as const, - project: { - id: project.id, - revision: project.revision, - title: project.title, - metadata: project.metadata, - }, - pages: project.pages.map((page) => ({ - id: page.id, - file: `pages/${page.id}.json`, - title: page.title, - slug: page.slug, - parentId: page.parentId, - order: page.order, - metadata: page.metadata, - })), - }; -} - describe("OpenEditor atomic fingerprint checks", () => { test("accepts the complete unchanged-to-updated trust chain", async () => { const next = structuredClone(current); @@ -56,24 +34,22 @@ describe("OpenEditor atomic fingerprint checks", () => { assertAiWorkspaceFingerprints({ currentProject: current, nextProject: next, - expectedProjectFingerprint: await fingerprintProjectSnapshot(current), - expectedSiteFingerprint: await fingerprintSiteManifest( - manifest(current), - ), - nextSiteFingerprint: await fingerprintSiteManifest(manifest(next)), + expectedProjectFingerprint: await fingerprintSnapshot(current), + expectedSiteFingerprint: await fingerprintSnapshotManifest(current), + nextSiteFingerprint: await fingerprintSnapshotManifest(next), pageFingerprints: [ { pageId: "home", - expectedFingerprint: await fingerprintProjectPage( + expectedFingerprint: await fingerprintSnapshotPage( current.pages[0]!, ), - nextFingerprint: await fingerprintProjectPage(next.pages[0]!), + nextFingerprint: await fingerprintSnapshotPage(next.pages[0]!), }, ], }), ).resolves.toMatchObject({ - expectedProjectFingerprint: await fingerprintProjectSnapshot(current), - resultProjectFingerprint: await fingerprintProjectSnapshot(next), + expectedProjectFingerprint: await fingerprintSnapshot(current), + resultProjectFingerprint: await fingerprintSnapshot(next), }); }); @@ -83,10 +59,8 @@ describe("OpenEditor atomic fingerprint checks", () => { currentProject: current, nextProject: current, expectedProjectFingerprint: "stale", - expectedSiteFingerprint: await fingerprintSiteManifest( - manifest(current), - ), - nextSiteFingerprint: await fingerprintSiteManifest(manifest(current)), + expectedSiteFingerprint: await fingerprintSnapshotManifest(current), + nextSiteFingerprint: await fingerprintSnapshotManifest(current), pageFingerprints: [], }), ).rejects.toThrow("project fingerprint no longer matches"); diff --git a/packages/backend/convex/model/aiWorkspaceFingerprint.ts b/packages/backend/convex/model/aiWorkspaceFingerprint.ts index b9604ed5..32788951 100644 --- a/packages/backend/convex/model/aiWorkspaceFingerprint.ts +++ b/packages/backend/convex/model/aiWorkspaceFingerprint.ts @@ -1,9 +1,8 @@ import { - fingerprintProjectPage, - fingerprintProjectSnapshot, - fingerprintSiteManifest, - type OpenEditorProjectSnapshot, - type WorkspaceSiteManifest, + fingerprintSnapshot, + fingerprintSnapshotManifest, + fingerprintSnapshotPage, + type Snapshot, } from "@openeditor/workspace"; import { AiWorkspaceValidationError } from "./aiWorkspaceBounds"; @@ -13,35 +12,10 @@ export type AiPageFingerprintPrecondition = { nextFingerprint?: string; }; -const siteManifest = ( - project: OpenEditorProjectSnapshot, -): WorkspaceSiteManifest => ({ - format: "openeditor.site", - version: 1, - project: { - id: project.id, - revision: project.revision, - title: project.title, - ...(project.metadata !== undefined ? { metadata: project.metadata } : {}), - }, - pages: project.pages.map((page) => ({ - id: page.id, - file: `pages/${page.id}.json`, - title: page.title, - ...(page.slug !== undefined ? { slug: page.slug } : {}), - ...(page.route !== undefined ? { route: page.route } : {}), - ...(page.parentId !== undefined ? { parentId: page.parentId } : {}), - ...(page.order !== undefined ? { order: page.order } : {}), - ...(page.metadata !== undefined ? { metadata: page.metadata } : {}), - })), -}); - -export async function fingerprintAiProjectTrustRoot( - project: OpenEditorProjectSnapshot, -) { +export async function fingerprintAiProjectTrustRoot(project: Snapshot) { return { - projectFingerprint: await fingerprintProjectSnapshot(project), - siteFingerprint: await fingerprintSiteManifest(siteManifest(project)), + projectFingerprint: await fingerprintSnapshot(project), + siteFingerprint: await fingerprintSnapshotManifest(project), }; } @@ -51,8 +25,8 @@ function fail(message: string): never { /** Verify the complete OpenEditor trust root inside the write transaction. */ export async function assertAiWorkspaceFingerprints(input: { - currentProject: OpenEditorProjectSnapshot; - nextProject: OpenEditorProjectSnapshot; + currentProject: Snapshot; + nextProject: Snapshot; expectedProjectFingerprint: string; expectedSiteFingerprint: string; nextSiteFingerprint: string; @@ -90,7 +64,7 @@ export async function assertAiWorkspaceFingerprints(input: { if (current) fail(`Created page ${precondition.pageId} already exists`); } else if ( !current || - (await fingerprintProjectPage(current)) !== + (await fingerprintSnapshotPage(current)) !== precondition.expectedFingerprint ) { fail(`Page ${precondition.pageId} fingerprint no longer matches`); @@ -100,7 +74,7 @@ export async function assertAiWorkspaceFingerprints(input: { const next = nextPages.get(precondition.pageId); if ( !next || - (await fingerprintProjectPage(next)) !== precondition.nextFingerprint + (await fingerprintSnapshotPage(next)) !== precondition.nextFingerprint ) { fail(`Page ${precondition.pageId} next fingerprint is invalid`); } diff --git a/packages/backend/package.json b/packages/backend/package.json index a6119c71..dd3dc83a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -43,9 +43,9 @@ "@convex-dev/workpool": "^0.4.9", "@firecrawl/anydoc": "0.1.9", "@noble/hashes": "2.0.1", - "@openeditor/core": "0.0.48", - "@openeditor/custom-block": "0.0.48", - "@openeditor/workspace": "0.0.48", + "@openeditor/core": "0.0.50", + "@openeditor/custom-block": "0.0.50", + "@openeditor/workspace": "0.0.50", "@polar-sh/sdk": "0.49.0", "ai": "7.0.49", "better-auth": "^1.6.23",