diff --git a/README.md b/README.md index 5163fc0..f7bfe92 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ and `@zennotes/shared-domain` packages. The exact archives are vendored under `vendor/zennotes/` with their source identity and checksums (`manifest.json`), and `package-lock.json` pins the complete install. No source checkout is used. The vendored set is the core release -[core-2.67.0-core.hb828dd60259bc376](https://github.com/ZenNotes/zennotes/releases/tag/core-2.67.0-core.hb828dd60259bc376) -(desktop commit `58ba24ac`, clean tree). Run `npm run +[core-2.68.0-core.h6e3db1e19bc2b662](https://github.com/ZenNotes/zennotes/releases/tag/core-2.68.0-core.h6e3db1e19bc2b662) +(desktop commit `881baa6a`, clean tree). Run `npm run boundaries:check` to verify archives, installed versions, singleton editor/React peers, and imports; it refuses an archive built from a dirty upstream tree unless `ZEN_ALLOW_DIRTY_CORE=1` is set for a local try-out. diff --git a/android/app/build.gradle b/android/app/build.gradle index c2794b4..8c8014a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "md.zennotes" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 40 - versionName "1.1.37" + versionCode 41 + versionName "1.1.38" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/package-lock.json b/package-lock.json index 19b30c7..33491da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zennotes-android", - "version": "1.1.37", + "version": "1.1.38", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zennotes-android", - "version": "1.1.37", + "version": "1.1.38", "dependencies": { "@aparajita/capacitor-secure-storage": "^8.0.1", "@capacitor/android": "^8.5.2", @@ -32,9 +32,9 @@ "@lezer/highlight": "^1.2.5", "@replit/codemirror-vim": "^6.3.0", "@xyflow/react": "^12.12.0", - "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz", - "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz", - "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz", + "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz", + "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz", "codemirror": "^6.0.1", "dompurify": "^3.4.16", "function-plot": "^1.25.3", @@ -659,6 +659,19 @@ "crelt": "^1.0.5" } }, + "node_modules/@codemirror/merge": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/@codemirror/merge/-/merge-6.12.2.tgz", + "integrity": "sha512-V8JvyAPjHbPupqP7BeMcsdsYCbyPij74jxIbaIJDORI+VZzW44zFmon8bF+oxGWvOKhcRmkiUMXd8MxHr3YA2w==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/highlight": "^1.0.0", + "style-mod": "^4.1.0" + } + }, "node_modules/@codemirror/search": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.7.2.tgz", @@ -3642,9 +3655,9 @@ } }, "node_modules/@zennotes/app-core": { - "version": "2.67.0-core.hb828dd60259bc376", - "resolved": "file:vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz", - "integrity": "sha512-k94Z88Sebd6NHAe8/1ba5K0K46NuJ7gwhMmxzAG97Y5VKu+6r+TKsXD/R8Axkh6UIJ4AtoBVBi0lca6nOO2JUQ==", + "version": "2.68.0-core.h6e3db1e19bc2b662", + "resolved": "file:vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz", + "integrity": "sha512-Qrt0Z2CmP0b9mtdGqJjj1xWxaEsWc9a1LbwE3WJWky0ThjS0FBTTYRHGjfLJD5RWu03XxuKr4GJJFbhHRATz4Q==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.18.3", @@ -3665,6 +3678,7 @@ "@codemirror/lang-yaml": "^6.1.3", "@codemirror/language-data": "^6.5.1", "@codemirror/lint": "^6.9.7", + "@codemirror/merge": "^6.12.2", "@codemirror/search": "^6.5.8", "@excalidraw/excalidraw": "^0.18.1", "@myriaddreamin/typst-ts-renderer": "^0.7.0", @@ -3672,8 +3686,8 @@ "@myriaddreamin/typst.ts": "^0.7.0", "@replit/codemirror-vim": "^6.3.0", "@xyflow/react": "^12.11.2", - "@zennotes/bridge-contract": "2.67.0-boundaries.h53f4d533587f4290", - "@zennotes/shared-domain": "2.67.0-boundaries.h53f4d533587f4290", + "@zennotes/bridge-contract": "2.68.0-boundaries.hd2ce4427b284c18e", + "@zennotes/shared-domain": "2.68.0-boundaries.hd2ce4427b284c18e", "dompurify": "^3.3.4", "function-plot": "^1.25.3", "gray-matter": "^4.0.3", @@ -3717,19 +3731,19 @@ } }, "node_modules/@zennotes/bridge-contract": { - "version": "2.67.0-boundaries.h53f4d533587f4290", - "resolved": "file:vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz", - "integrity": "sha512-3qnOkEVjq4pKqAOO/jw9oRy+NzK+h9G6yKGywzcfPQSFVS/ugN+6JKBKkRvObdDz64vPkIhR5m0cu8H3t7uFyw==", + "version": "2.68.0-boundaries.hd2ce4427b284c18e", + "resolved": "file:vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "integrity": "sha512-b+njMYCybpZzix7WYDrs73LjF8ff8abDeoQ/ocKJWRn9ZOGNLGiG62eLOlsEvqIO5tpuzjQeUQNjLCIqOrBn8w==", "license": "MIT" }, "node_modules/@zennotes/shared-domain": { - "version": "2.67.0-boundaries.h53f4d533587f4290", - "resolved": "file:vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz", - "integrity": "sha512-5oooEqUyGJJ32/ZKA7KzReaCNmXOF0AQHHumfGsUESxTAE1Tf6u2sY9ubbNgFZCErZuDDmF0aF2ZiPxtMyJBnQ==", + "version": "2.68.0-boundaries.hd2ce4427b284c18e", + "resolved": "file:vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "integrity": "sha512-oxluGn1xX+7YLHTt0v04vs4T/cFUOwIrB4aF16OpsoQ8Tm+cfFeRxAE6xYjybTWITT/qDSIbQyBNfiFK0puqQg==", "license": "MIT", "dependencies": { "@scure/bip39": "2.4.0", - "@zennotes/bridge-contract": "2.67.0-boundaries.h53f4d533587f4290", + "@zennotes/bridge-contract": "2.68.0-boundaries.hd2ce4427b284c18e", "hash-wasm": "4.12.0", "lz-string": "^1.5.0" } diff --git a/package.json b/package.json index fd8a7bd..4ace23c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "zennotes-android", "private": true, - "version": "1.1.37", + "version": "1.1.38", "type": "module", "description": "ZenNotes for Android — Capacitor shell over the ZenNotes app core", "homepage": "https://zennotes.org", @@ -43,9 +43,9 @@ "@lezer/highlight": "^1.2.5", "@replit/codemirror-vim": "^6.3.0", "@xyflow/react": "^12.12.0", - "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz", - "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz", - "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz", + "@zennotes/app-core": "file:vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz", + "@zennotes/bridge-contract": "file:vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "@zennotes/shared-domain": "file:vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz", "codemirror": "^6.0.1", "dompurify": "^3.4.16", "function-plot": "^1.25.3", diff --git a/src/bridge/demo-tour.test.ts b/src/bridge/demo-tour.test.ts new file mode 100644 index 0000000..e317779 --- /dev/null +++ b/src/bridge/demo-tour.test.ts @@ -0,0 +1,131 @@ +import assert from 'node:assert/strict' +import { test } from 'node:test' +import { loadMobileModule } from '../../tooling/load-mobile-module.ts' + +// Core 2.68.0 renamed the demo tour's notes: "00 Start Here.md" used to carry +// a long dash between number and title. Desktop's generateDemoTour and +// removeDemoTour (apps/desktop/src/main/vault.ts) take the notes still under +// the older names with them; this shell writes and removes the tour itself, +// so it has to as well. Both delete whatever the older-name match takes, so +// it must take nothing of the user's. + +// Built from its code point so this file never contains the character itself. +const LONG_DASH = String.fromCharCode(0x2014) + +Object.defineProperty(globalThis, 'localStorage', { configurable: true, value: { getItem: () => null } }) +const { MobileVault, DEMO_TOUR_NOTES, DEMO_TOUR_ASSETS, DEMO_TOUR_START_PATH } = await loadMobileModule([ + './src/bridge/vault-fs', '@zennotes/shared-domain/demo-tour', '@zennotes/shared-domain/demo-tour-data' +]) + +const olderStart = `inbox/demo/00 ${LONG_DASH} Start Here.md` +const olderMath = `inbox/demo/05b ${LONG_DASH} Math Diagrams.md` +/** The user's notes: in the tour's folder or named like the tour, and not + * the tour. Another separator, a long-dash name the tour never shipped, or + * the old name outside the tour's folder all stay. */ +const USER_NOTES = [ + 'inbox/demo/My own note.md', + 'inbox/demo/00 · Start Here.md', + 'inbox/demo/01 - Markdown Basics.md', + `inbox/demo/42 ${LONG_DASH} My Plans.md`, + `inbox/00 ${LONG_DASH} Start Here.md` +] +const body = (path: string): string => `kept: ${path}\n` + +/** The NativeFs surface the tour uses. Like NativeFs, a listing of a missing + * folder is empty and a delete of a missing file fails. */ +class MemoryFs { + files = new Map() + directories = new Set() + async mkdir(path: string): Promise { + const parts = path.split('/') + for (let i = 1; i <= parts.length; i++) this.directories.add(parts.slice(0, i).join('/')) + } + async writeText(path: string, text: string): Promise { this.files.set(path, text) } + async deleteFile(path: string): Promise { + if (!this.files.delete(path)) throw new Error(`File does not exist: ${path}`) + } + async readdir(path: string): Promise<{ name: string; type: 'file' | 'directory' }[]> { + const prefix = path ? `${path}/` : '' + const entries = new Map() + for (const key of this.files.keys()) { + if (!key.startsWith(prefix)) continue + const [name, ...nested] = key.slice(prefix.length).split('/') + entries.set(name!, nested.length ? 'directory' : 'file') + } + for (const key of this.directories) { + if (!key.startsWith(prefix)) continue + const [name] = key.slice(prefix.length).split('/') + if (name && !entries.has(name)) entries.set(name, 'directory') + } + return [...entries].map(([name, type]) => ({ name, type })) + } + async rmdir(path: string): Promise { + for (const key of [...this.files.keys()]) if (key.startsWith(`${path}/`)) this.files.delete(key) + for (const key of [...this.directories]) if (key === path || key.startsWith(`${path}/`)) this.directories.delete(key) + } + namesIn(path: string): string[] { + return [...this.files.keys()] + .filter((key) => key.startsWith(`${path}/`) && !key.slice(path.length + 1).includes('/')) + .map((key) => key.slice(path.length + 1)) + .sort() + } +} + +function vaultWith(paths: string[]) { + const fs = new MemoryFs() + for (const path of paths) { + void fs.mkdir(path.slice(0, path.lastIndexOf('/'))) + fs.files.set(path, body(path)) + } + const vault = new MobileVault('Fixture') + Object.assign(vault, { fs, ensureVaultLayout: async () => {}, invalidateMeta: () => {} }) + return { fs, vault } +} + +const tourPaths = (): string[] => DEMO_TOUR_NOTES.map((note: { path: string }) => note.path) +const userNamesInDemo = USER_NOTES.filter((path) => path.startsWith('inbox/demo/')) + .map((path) => path.slice('inbox/demo/'.length)) + +test('the older names in these fixtures belong to notes the tour ships today', () => { + assert.ok(tourPaths().includes(DEMO_TOUR_START_PATH)) + assert.ok(tourPaths().includes('inbox/demo/05b Math Diagrams.md')) + assert.ok(!tourPaths().includes('inbox/demo/42 My Plans.md')) +}) + +test('regenerating replaces a tour under its older names instead of writing a second one', async () => { + const { fs, vault } = vaultWith([olderStart, olderMath, ...USER_NOTES]) + const result = await vault.generateDemoTour() + + assert.equal(fs.files.has(olderStart), false) + assert.equal(fs.files.has(olderMath), false) + for (const note of DEMO_TOUR_NOTES) assert.equal(fs.files.get(note.path), note.body) + for (const asset of DEMO_TOUR_ASSETS) assert.equal(fs.files.get(asset.path), asset.body) + for (const path of USER_NOTES) assert.equal(fs.files.get(path), body(path), `${path} is the user's`) + // One tour: the folder holds the tour's current notes and the user's, nothing else. + const tourNames = tourPaths().map((path) => path.slice('inbox/demo/'.length)) + assert.deepEqual(fs.namesIn('inbox/demo'), [...tourNames, ...userNamesInDemo].sort()) + assert.deepEqual(result.notePaths, tourPaths()) +}) + +test('removing takes the older names too, reports them, and keeps the user notes', async () => { + const { fs, vault } = vaultWith([olderStart, olderMath, ...tourPaths(), ...USER_NOTES]) + const result = await vault.removeDemoTour() + + assert.deepEqual(fs.namesIn('inbox/demo'), [...userNamesInDemo].sort()) + for (const path of USER_NOTES) { + assert.equal(fs.files.get(path), body(path), `${path} is the user's`) + assert.ok(!result.notePaths.includes(path), `${path} is not reported as removed`) + } + assert.ok(result.notePaths.includes(olderStart)) + assert.ok(result.notePaths.includes(olderMath)) + assert.ok(result.notePaths.includes(DEMO_TOUR_START_PATH)) + assert.ok(fs.directories.has('inbox/demo'), 'the folder stays while the user has notes in it') +}) + +test('removing a tour that only exists under its older names leaves no folder behind', async () => { + const { fs, vault } = vaultWith([olderStart, olderMath]) + await vault.removeDemoTour() + + assert.deepEqual(fs.namesIn('inbox/demo'), []) + assert.equal(fs.directories.has('inbox/demo'), false) +}) diff --git a/src/bridge/mobile-bridge.ts b/src/bridge/mobile-bridge.ts index a21d88a..f69654e 100644 --- a/src/bridge/mobile-bridge.ts +++ b/src/bridge/mobile-bridge.ts @@ -154,7 +154,7 @@ import { import { folderForRelativePath, posixNormalize, sanitizeNoteTitle } from './vault-core' import { isPhoneViewport } from '../viewport' -let appVersion = '1.1.37' +let appVersion = '1.1.38' export async function loadNativeAppVersion(): Promise { try { diff --git a/src/bridge/vault-fs.ts b/src/bridge/vault-fs.ts index c93c912..3ac1c55 100644 --- a/src/bridge/vault-fs.ts +++ b/src/bridge/vault-fs.ts @@ -30,6 +30,7 @@ import { normalizeNoteComments } from '@zennotes/shared-domain/note-comments' import { isFormDirName, isDatabaseInternalPath } from '@zennotes/shared-domain/databases' import { emptyExcalidrawDocument } from '@zennotes/shared-domain/excalidraw' import { DEMO_TOUR_ASSETS, DEMO_TOUR_NOTES } from '@zennotes/shared-domain/demo-tour-data' +import { currentDemoTourPath, DEMO_TOUR_DIR } from '@zennotes/shared-domain/demo-tour' import { WELCOME_NOTE_PATH, WELCOME_NOTE_BODY } from './welcome-note' import { rewriteWikilinksForRename, @@ -1234,8 +1235,28 @@ export class MobileVault { emitVaultChange({ kind: 'add', path: WELCOME_NOTE_PATH, folder: 'inbox', scope: 'content' }) } + /** Tour notes still on disk under their older names: desktop's + * olderDemoTourNotePaths. Core 2.68.0 renamed the tour's notes, and + * Regenerate and Remove delete what this returns, so it takes only a file + * that shared-domain's exact older-name match maps onto one of the tour's + * own notes. Any other note in the folder is the user's and stays. */ + private async olderDemoTourNotePaths(): Promise { + const current = new Set(DEMO_TOUR_NOTES.map((note) => note.path)) + const entries = await this.fs.readdir(DEMO_TOUR_DIR) + return entries + .filter((entry) => entry.type === 'file') + .map((entry) => `${DEMO_TOUR_DIR}/${entry.name}`) + .filter((rel) => rel !== currentDemoTourPath(rel) && current.has(currentDemoTourPath(rel))) + } + async generateDemoTour(): Promise { await this.ensureVaultLayout() + // Regenerating replaces a tour seeded under the older names rather than + // writing a second copy beside it. + for (const rel of await this.olderDemoTourNotePaths()) { + await this.fs.deleteFile(rel).catch(() => {}) + this.invalidateMeta(rel) + } for (const note of DEMO_TOUR_NOTES) { const dir = dirName(note.path) if (dir) await this.fs.mkdir(dir) @@ -1255,9 +1276,14 @@ export class MobileVault { } async removeDemoTour(): Promise { - for (const note of DEMO_TOUR_NOTES) { - await this.fs.deleteFile(note.path).catch(() => {}) - this.invalidateMeta(note.path) + // The older names are reported too, so app-core drops them from the list. + const notePaths = [ + ...DEMO_TOUR_NOTES.map((n) => n.path), + ...(await this.olderDemoTourNotePaths()) + ] + for (const path of notePaths) { + await this.fs.deleteFile(path).catch(() => {}) + this.invalidateMeta(path) } for (const asset of DEMO_TOUR_ASSETS) { await this.fs.deleteFile(asset.path).catch(() => {}) @@ -1266,7 +1292,7 @@ export class MobileVault { if (remaining.length === 0) await this.fs.rmdir('inbox/demo').catch(() => {}) emitVaultChange({ kind: 'unlink', path: 'inbox/demo', folder: 'inbox', scope: 'content' }) return { - notePaths: DEMO_TOUR_NOTES.map((n) => n.path), + notePaths, assetPaths: DEMO_TOUR_ASSETS.map((a) => a.path) } } diff --git a/src/ui-mobile/MobileShell.tsx b/src/ui-mobile/MobileShell.tsx index b4d5ed1..3eb4f4c 100644 --- a/src/ui-mobile/MobileShell.tsx +++ b/src/ui-mobile/MobileShell.tsx @@ -1321,7 +1321,14 @@ const DESKTOP_ONLY_COMMAND_TITLES = [ 'Reset Zoom', 'Open in Floating Window', 'Export Note as PDF', - 'Show Onboarding Wizard' + 'Show Onboarding Wizard', + // 2.68.0 gates these desktop features itself: What's New on a desktop + // host, and the agent edit review rows on bridge methods this shell leaves + // out. Named here as well, so neither reaches the phone's palette if a later + // core relaxes its gate (this shell reports runtime 'web' and inherits + // whatever the web client is given). + 'What\u2019s New in ZenNotes', + 'Review Agent Changes' ] /** Additionally hidden on phones: splits/panes and the (replaced) sidebar diff --git a/vendor/zennotes/manifest.json b/vendor/zennotes/manifest.json index 151b847..3944e3e 100644 --- a/vendor/zennotes/manifest.json +++ b/vendor/zennotes/manifest.json @@ -1,12 +1,12 @@ { "name": "@zennotes/app-core", - "version": "2.67.0-core.hb828dd60259bc376", - "file": "zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz", - "sha256": "02a2982b92c6d48ddc3c0b0730ff9462a5227f1ce7d599e5c856aebd35e07bc7", - "integrity": "sha512-k94Z88Sebd6NHAe8/1ba5K0K46NuJ7gwhMmxzAG97Y5VKu+6r+TKsXD/R8Axkh6UIJ4AtoBVBi0lca6nOO2JUQ==", - "sourceCommit": "58ba24acaf78422b1622418cdbf80dfc2647abfa", + "version": "2.68.0-core.h6e3db1e19bc2b662", + "file": "zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz", + "sha256": "35e5ac383b3720a74eb3bd005223b607d87830c8cb102eb7243bf65b7eaa0abb", + "integrity": "sha512-Qrt0Z2CmP0b9mtdGqJjj1xWxaEsWc9a1LbwE3WJWky0ThjS0FBTTYRHGjfLJD5RWu03XxuKr4GJJFbhHRATz4Q==", + "sourceCommit": "881baa6a94a441dbf03e59ce6d8d1277624803cf", "workingTreeDirty": false, - "sourceLockSha256": "784aee794c2047a319d16b3e248c22ca2445fcf18cad03e2ce6a92f5c6456f92", + "sourceLockSha256": "d0887eb65d0bf060c112437c105abf43a4c3a927d682f844ae25976d19d7d992", "toolchain": { "node": "v22.23.3", "typescript": "5.9.3", @@ -15,20 +15,20 @@ "dependencies": [ { "name": "@zennotes/bridge-contract", - "version": "2.67.0-boundaries.h53f4d533587f4290", - "file": "zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz", - "sha256": "d489790a5659ec148746e1ea0baeba8d0795dab1729517b93861c0d65717fcaa", - "integrity": "sha512-3qnOkEVjq4pKqAOO/jw9oRy+NzK+h9G6yKGywzcfPQSFVS/ugN+6JKBKkRvObdDz64vPkIhR5m0cu8H3t7uFyw==", - "sourceCommit": "58ba24acaf78422b1622418cdbf80dfc2647abfa", + "version": "2.68.0-boundaries.hd2ce4427b284c18e", + "file": "zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "sha256": "9678d63a50f5c0d036f25eb5e5c5cd72af4a4fa182472892f1930eac75d3be54", + "integrity": "sha512-b+njMYCybpZzix7WYDrs73LjF8ff8abDeoQ/ocKJWRn9ZOGNLGiG62eLOlsEvqIO5tpuzjQeUQNjLCIqOrBn8w==", + "sourceCommit": "881baa6a94a441dbf03e59ce6d8d1277624803cf", "workingTreeDirty": false }, { "name": "@zennotes/shared-domain", - "version": "2.67.0-boundaries.h53f4d533587f4290", - "file": "zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz", - "sha256": "c6df54b576bb34202697c034f5f90a5a69aaa6d64b194301d38b4eaae52e2158", - "integrity": "sha512-5oooEqUyGJJ32/ZKA7KzReaCNmXOF0AQHHumfGsUESxTAE1Tf6u2sY9ubbNgFZCErZuDDmF0aF2ZiPxtMyJBnQ==", - "sourceCommit": "58ba24acaf78422b1622418cdbf80dfc2647abfa", + "version": "2.68.0-boundaries.hd2ce4427b284c18e", + "file": "zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz", + "sha256": "1cb6fd1228a48354cdb59aa24e03d572f15fc9aab7b92aab985bb9c4ff9a29f6", + "integrity": "sha512-oxluGn1xX+7YLHTt0v04vs4T/cFUOwIrB4aF16OpsoQ8Tm+cfFeRxAE6xYjybTWITT/qDSIbQyBNfiFK0puqQg==", + "sourceCommit": "881baa6a94a441dbf03e59ce6d8d1277624803cf", "workingTreeDirty": false } ] diff --git a/vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz b/vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz deleted file mode 100644 index 1ed8ce6..0000000 Binary files a/vendor/zennotes/zennotes-app-core-2.67.0-core.hb828dd60259bc376.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz b/vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz new file mode 100644 index 0000000..af7937f Binary files /dev/null and b/vendor/zennotes/zennotes-app-core-2.68.0-core.h6e3db1e19bc2b662.tgz differ diff --git a/vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz b/vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz deleted file mode 100644 index 84f91a0..0000000 Binary files a/vendor/zennotes/zennotes-bridge-contract-2.67.0-boundaries.h53f4d533587f4290.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz b/vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz new file mode 100644 index 0000000..dc41c3e Binary files /dev/null and b/vendor/zennotes/zennotes-bridge-contract-2.68.0-boundaries.hd2ce4427b284c18e.tgz differ diff --git a/vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz b/vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz deleted file mode 100644 index 45ea3c8..0000000 Binary files a/vendor/zennotes/zennotes-shared-domain-2.67.0-boundaries.h53f4d533587f4290.tgz and /dev/null differ diff --git a/vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz b/vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz new file mode 100644 index 0000000..c01cf00 Binary files /dev/null and b/vendor/zennotes/zennotes-shared-domain-2.68.0-boundaries.hd2ce4427b284c18e.tgz differ