document-drive 4.1.0-dev.12 → 4.1.0-dev.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -19
- package/dist/index.js.map +1 -1
- package/dist/prisma/schema.prisma +2 -0
- package/dist/src/cache/index.d.ts +5 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +5 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/lru.d.ts +1 -13
- package/dist/src/cache/lru.d.ts.map +1 -1
- package/dist/src/cache/lru.js +1 -2
- package/dist/src/cache/lru.js.map +1 -1
- package/dist/src/cache/memory.d.ts +3 -14
- package/dist/src/cache/memory.d.ts.map +1 -1
- package/dist/src/cache/memory.js +1 -2
- package/dist/src/cache/memory.js.map +1 -1
- package/dist/src/cache/redis.d.ts +3 -5
- package/dist/src/cache/redis.d.ts.map +1 -1
- package/dist/src/cache/redis.js +2 -3
- package/dist/src/cache/redis.js.map +1 -1
- package/dist/src/cache/types.d.ts +23 -2
- package/dist/src/cache/types.d.ts.map +1 -1
- package/dist/src/cache/util.d.ts +1 -1
- package/dist/src/cache/util.d.ts.map +1 -1
- package/dist/src/cache/util.js +11 -9
- package/dist/src/cache/util.js.map +1 -1
- package/dist/src/drive-document-model/constants.d.ts +1 -1
- package/dist/src/drive-document-model/constants.d.ts.map +1 -1
- package/dist/src/drive-document-model/constants.js +1 -2
- package/dist/src/drive-document-model/constants.js.map +1 -1
- package/dist/src/drive-document-model/gen/document-model.d.ts +2 -2
- package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/document-model.js +1 -1
- package/dist/src/drive-document-model/gen/document-model.js.map +1 -1
- package/dist/src/drive-document-model/gen/document-schema.d.ts +288 -0
- package/dist/src/drive-document-model/gen/document-schema.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/document-schema.js +35 -0
- package/dist/src/drive-document-model/gen/document-schema.js.map +1 -0
- package/dist/src/drive-document-model/gen/document-type.d.ts +2 -0
- package/dist/src/drive-document-model/gen/document-type.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/document-type.js +2 -0
- package/dist/src/drive-document-model/gen/document-type.js.map +1 -0
- package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -2
- package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/drive/creators.d.ts +1 -2
- package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/drive/creators.js +10 -10
- package/dist/src/drive-document-model/gen/drive/creators.js.map +1 -1
- package/dist/src/drive-document-model/gen/drive/index.d.ts +2 -0
- package/dist/src/drive-document-model/gen/drive/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/index.js +2 -0
- package/dist/src/drive-document-model/gen/drive/index.js.map +1 -0
- package/dist/src/drive-document-model/gen/drive/types.d.ts +2 -0
- package/dist/src/drive-document-model/gen/drive/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/drive/types.js +2 -0
- package/dist/src/drive-document-model/gen/drive/types.js.map +1 -0
- package/dist/src/drive-document-model/gen/index.d.ts +8 -4
- package/dist/src/drive-document-model/gen/index.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/index.js +8 -4
- package/dist/src/drive-document-model/gen/index.js.map +1 -1
- package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -2
- package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/node/creators.d.ts +1 -2
- package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/node/creators.js +9 -9
- package/dist/src/drive-document-model/gen/node/creators.js.map +1 -1
- package/dist/src/drive-document-model/gen/node/index.d.ts +2 -0
- package/dist/src/drive-document-model/gen/node/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/index.js +2 -0
- package/dist/src/drive-document-model/gen/node/index.js.map +1 -0
- package/dist/src/drive-document-model/gen/node/types.d.ts +2 -0
- package/dist/src/drive-document-model/gen/node/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/node/types.js +2 -0
- package/dist/src/drive-document-model/gen/node/types.js.map +1 -0
- package/dist/src/drive-document-model/gen/ph-factories.d.ts +12 -0
- package/dist/src/drive-document-model/gen/ph-factories.d.ts.map +1 -0
- package/dist/src/drive-document-model/gen/ph-factories.js +46 -0
- package/dist/src/drive-document-model/gen/ph-factories.js.map +1 -0
- package/dist/src/drive-document-model/gen/reducer.d.ts +3 -3
- package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/reducer.js +36 -36
- package/dist/src/drive-document-model/gen/reducer.js.map +1 -1
- package/dist/src/drive-document-model/gen/schema/index.d.ts +1 -2
- package/dist/src/drive-document-model/gen/schema/index.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/schema/index.js +1 -2
- package/dist/src/drive-document-model/gen/schema/index.js.map +1 -1
- package/dist/src/drive-document-model/gen/schema/types.d.ts +8 -3
- package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/schema/zod.d.ts +28 -28
- package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/schema/zod.js.map +1 -1
- package/dist/src/drive-document-model/gen/types.d.ts +7 -8
- package/dist/src/drive-document-model/gen/types.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/types.js +3 -1
- package/dist/src/drive-document-model/gen/types.js.map +1 -1
- package/dist/src/drive-document-model/gen/utils.d.ts +11 -9
- package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -1
- package/dist/src/drive-document-model/gen/utils.js +36 -38
- package/dist/src/drive-document-model/gen/utils.js.map +1 -1
- package/dist/src/drive-document-model/index.d.ts +4 -1
- package/dist/src/drive-document-model/index.d.ts.map +1 -1
- package/dist/src/drive-document-model/index.js +4 -1
- package/dist/src/drive-document-model/index.js.map +1 -1
- package/dist/src/drive-document-model/module.d.ts +2 -27
- package/dist/src/drive-document-model/module.d.ts.map +1 -1
- package/dist/src/drive-document-model/module.js +21 -16
- package/dist/src/drive-document-model/module.js.map +1 -1
- package/dist/src/drive-document-model/src/index.d.ts +3 -0
- package/dist/src/drive-document-model/src/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/index.js +3 -0
- package/dist/src/drive-document-model/src/index.js.map +1 -0
- package/dist/src/drive-document-model/src/reducers/drive.d.ts +2 -2
- package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/reducers/drive.js +1 -1
- package/dist/src/drive-document-model/src/reducers/drive.js.map +1 -1
- package/dist/src/drive-document-model/src/reducers/index.d.ts +3 -0
- package/dist/src/drive-document-model/src/reducers/index.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/reducers/index.js +3 -0
- package/dist/src/drive-document-model/src/reducers/index.js.map +1 -0
- package/dist/src/drive-document-model/src/reducers/node.d.ts +2 -2
- package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/reducers/node.js +16 -4
- package/dist/src/drive-document-model/src/reducers/node.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/actions.test.js +20 -22
- package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/base.test.js +12 -52
- package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/document-model.test.js +3 -3
- package/dist/src/drive-document-model/src/tests/document-model.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/drive.test.js +12 -15
- package/dist/src/drive-document-model/src/tests/drive.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/generate-mock.d.ts +5 -0
- package/dist/src/drive-document-model/src/tests/generate-mock.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/tests/generate-mock.js +5 -0
- package/dist/src/drive-document-model/src/tests/generate-mock.js.map +1 -0
- package/dist/src/drive-document-model/src/tests/node.test.js +75 -112
- package/dist/src/drive-document-model/src/tests/node.test.js.map +1 -1
- package/dist/src/drive-document-model/src/tests/test-factories.d.ts +9 -0
- package/dist/src/drive-document-model/src/tests/test-factories.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/tests/test-factories.js +17 -0
- package/dist/src/drive-document-model/src/tests/test-factories.js.map +1 -0
- package/dist/src/drive-document-model/src/tests/utils.test.js +1 -1
- package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -1
- package/dist/src/drive-document-model/src/types.d.ts +8 -0
- package/dist/src/drive-document-model/src/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/src/types.js.map +1 -0
- package/dist/src/drive-document-model/src/utils.d.ts +2 -7
- package/dist/src/drive-document-model/src/utils.d.ts.map +1 -1
- package/dist/src/drive-document-model/src/utils.js +4 -0
- package/dist/src/drive-document-model/src/utils.js.map +1 -1
- package/dist/src/drive-document-model/types.d.ts +10 -0
- package/dist/src/drive-document-model/types.d.ts.map +1 -0
- package/dist/src/drive-document-model/types.js +3 -0
- package/dist/src/drive-document-model/types.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/processors/index.d.ts +4 -0
- package/dist/src/processors/index.d.ts.map +1 -0
- package/dist/src/processors/index.js +4 -0
- package/dist/src/processors/index.js.map +1 -0
- package/dist/src/processors/processor-manager.d.ts +1 -2
- package/dist/src/processors/processor-manager.d.ts.map +1 -1
- package/dist/src/processors/processor-manager.js +6 -5
- package/dist/src/processors/processor-manager.js.map +1 -1
- package/dist/src/processors/relational.d.ts +4 -17
- package/dist/src/processors/relational.d.ts.map +1 -1
- package/dist/src/processors/relational.js +3 -6
- package/dist/src/processors/relational.js.map +1 -1
- package/dist/src/processors/types.d.ts +19 -10
- package/dist/src/processors/types.d.ts.map +1 -1
- package/dist/src/processors/utils.d.ts +1 -2
- package/dist/src/processors/utils.d.ts.map +1 -1
- package/dist/src/processors/utils.js +0 -2
- package/dist/src/processors/utils.js.map +1 -1
- package/dist/src/queue/base.d.ts +1 -1
- package/dist/src/queue/base.d.ts.map +1 -1
- package/dist/src/queue/event.d.ts +4 -5
- package/dist/src/queue/event.d.ts.map +1 -1
- package/dist/src/queue/event.js +11 -7
- package/dist/src/queue/event.js.map +1 -1
- package/dist/src/queue/index.d.ts +5 -0
- package/dist/src/queue/index.d.ts.map +1 -0
- package/dist/src/queue/index.js +5 -0
- package/dist/src/queue/index.js.map +1 -0
- package/dist/src/queue/redis.js +1 -1
- package/dist/src/queue/redis.js.map +1 -1
- package/dist/src/queue/types.d.ts +4 -6
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +1 -9
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/queue/utils.d.ts +5 -0
- package/dist/src/queue/utils.d.ts.map +1 -0
- package/dist/src/queue/utils.js +10 -0
- package/dist/src/queue/utils.js.map +1 -0
- package/dist/src/read-mode/index.d.ts +4 -0
- package/dist/src/read-mode/index.d.ts.map +1 -0
- package/dist/src/read-mode/index.js +4 -0
- package/dist/src/read-mode/index.js.map +1 -0
- package/dist/src/read-mode/server.d.ts +1 -2
- package/dist/src/read-mode/server.d.ts.map +1 -1
- package/dist/src/read-mode/server.js +1 -2
- package/dist/src/read-mode/server.js.map +1 -1
- package/dist/src/read-mode/service.d.ts +4 -5
- package/dist/src/read-mode/service.d.ts.map +1 -1
- package/dist/src/read-mode/service.js +3 -4
- package/dist/src/read-mode/service.js.map +1 -1
- package/dist/src/read-mode/types.d.ts +4 -8
- package/dist/src/read-mode/types.d.ts.map +1 -1
- package/dist/src/server/base-server.d.ts +19 -28
- package/dist/src/server/base-server.d.ts.map +1 -1
- package/dist/src/server/base-server.js +381 -65
- package/dist/src/server/base-server.js.map +1 -1
- package/dist/src/server/builder.d.ts +2 -5
- package/dist/src/server/builder.d.ts.map +1 -1
- package/dist/src/server/builder.js +13 -7
- package/dist/src/server/builder.js.map +1 -1
- package/dist/src/server/error.d.ts +6 -2
- package/dist/src/server/error.d.ts.map +1 -1
- package/dist/src/server/error.js +7 -2
- package/dist/src/server/error.js.map +1 -1
- package/dist/src/server/event-emitter.d.ts +2 -2
- package/dist/src/server/event-emitter.d.ts.map +1 -1
- package/dist/src/server/event-emitter.js.map +1 -1
- package/dist/src/server/index.d.ts +10 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +10 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/listener/constants.d.ts +4 -0
- package/dist/src/server/listener/constants.d.ts.map +1 -0
- package/dist/src/server/listener/constants.js +4 -0
- package/dist/src/server/listener/constants.js.map +1 -0
- package/dist/src/server/listener/index.d.ts +2 -0
- package/dist/src/server/listener/index.d.ts.map +1 -1
- package/dist/src/server/listener/index.js +2 -0
- package/dist/src/server/listener/index.js.map +1 -1
- package/dist/src/server/listener/listener-manager.d.ts +4 -5
- package/dist/src/server/listener/listener-manager.d.ts.map +1 -1
- package/dist/src/server/listener/listener-manager.js +4 -4
- package/dist/src/server/listener/listener-manager.js.map +1 -1
- package/dist/src/server/sync-manager.d.ts +3 -6
- package/dist/src/server/sync-manager.d.ts.map +1 -1
- package/dist/src/server/sync-manager.js +14 -13
- package/dist/src/server/sync-manager.js.map +1 -1
- package/dist/src/server/sync-unit-map.d.ts +4 -25
- package/dist/src/server/sync-unit-map.d.ts.map +1 -1
- package/dist/src/server/sync-unit-map.js +0 -1
- package/dist/src/server/sync-unit-map.js.map +1 -1
- package/dist/src/server/transmitter/constants.d.ts.map +1 -0
- package/dist/src/server/transmitter/constants.js.map +1 -0
- package/dist/src/server/transmitter/factory.d.ts +7 -0
- package/dist/src/server/transmitter/factory.d.ts.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/factory.js +1 -1
- package/dist/src/server/transmitter/factory.js.map +1 -0
- package/dist/src/server/transmitter/index.d.ts +6 -0
- package/dist/src/server/transmitter/index.d.ts.map +1 -0
- package/dist/src/server/transmitter/index.js +5 -0
- package/dist/src/server/transmitter/index.js.map +1 -0
- package/dist/src/server/transmitter/internal.d.ts +12 -0
- package/dist/src/server/transmitter/internal.d.ts.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/internal.js +22 -16
- package/dist/src/server/transmitter/internal.js.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/pull-responder.d.ts +3 -22
- package/dist/src/server/transmitter/pull-responder.d.ts.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/pull-responder.js +11 -9
- package/dist/src/server/transmitter/pull-responder.js.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/switchboard-push.d.ts +1 -2
- package/dist/src/server/transmitter/switchboard-push.d.ts.map +1 -0
- package/dist/src/server/{listener/transmitter → transmitter}/switchboard-push.js +21 -5
- package/dist/src/server/transmitter/switchboard-push.js.map +1 -0
- package/dist/src/server/transmitter/types.d.ts +53 -0
- package/dist/src/server/transmitter/types.d.ts.map +1 -0
- package/dist/src/server/transmitter/types.js +2 -0
- package/dist/src/server/transmitter/types.js.map +1 -0
- package/dist/src/server/types.d.ts +50 -33
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/server/types.js +9 -12
- package/dist/src/server/types.js.map +1 -1
- package/dist/src/server/utils.d.ts +3 -1
- package/dist/src/server/utils.d.ts.map +1 -1
- package/dist/src/server/utils.js +24 -5
- package/dist/src/server/utils.js.map +1 -1
- package/dist/src/storage/browser.d.ts +2 -2
- package/dist/src/storage/browser.d.ts.map +1 -1
- package/dist/src/storage/browser.js +18 -12
- package/dist/src/storage/browser.js.map +1 -1
- package/dist/src/storage/filesystem.d.ts +3 -3
- package/dist/src/storage/filesystem.d.ts.map +1 -1
- package/dist/src/storage/filesystem.js +41 -13
- package/dist/src/storage/filesystem.js.map +1 -1
- package/dist/src/storage/index.d.ts +4 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +4 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/ipfs.d.ts +3 -4
- package/dist/src/storage/ipfs.d.ts.map +1 -1
- package/dist/src/storage/ipfs.js +4 -5
- package/dist/src/storage/ipfs.js.map +1 -1
- package/dist/src/storage/memory.d.ts +3 -3
- package/dist/src/storage/memory.d.ts.map +1 -1
- package/dist/src/storage/memory.js +43 -17
- package/dist/src/storage/memory.js.map +1 -1
- package/dist/src/storage/prisma/client/edge.js +15 -7
- package/dist/src/storage/prisma/client/index-browser.js +1 -0
- package/dist/src/storage/prisma/client/index.d.ts +45 -0
- package/dist/src/storage/prisma/client/index.js +23 -7
- package/dist/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
- package/dist/src/storage/prisma/client/libquery_engine-linux-musl.so.node +0 -0
- package/dist/src/storage/prisma/client/package.json +1 -1
- package/dist/src/storage/prisma/client/schema.prisma +4 -2
- package/dist/src/storage/prisma/client/wasm.js +1 -0
- package/dist/src/storage/prisma/factory.d.ts +3 -2
- package/dist/src/storage/prisma/factory.d.ts.map +1 -1
- package/dist/src/storage/prisma/factory.js +4 -1
- package/dist/src/storage/prisma/factory.js.map +1 -1
- package/dist/src/storage/prisma/index.d.ts +3 -0
- package/dist/src/storage/prisma/index.d.ts.map +1 -0
- package/dist/src/storage/prisma/index.js +3 -0
- package/dist/src/storage/prisma/index.js.map +1 -0
- package/dist/src/storage/prisma/prisma.d.ts +4 -7
- package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
- package/dist/src/storage/prisma/prisma.js +125 -49
- package/dist/src/storage/prisma/prisma.js.map +1 -1
- package/dist/src/storage/types.d.ts +1 -2
- package/dist/src/storage/types.d.ts.map +1 -1
- package/dist/src/storage/utils.d.ts +3 -1
- package/dist/src/storage/utils.d.ts.map +1 -1
- package/dist/src/storage/utils.js +18 -0
- package/dist/src/storage/utils.js.map +1 -1
- package/dist/src/utils/default-drives-manager.d.ts +1 -12
- package/dist/src/utils/default-drives-manager.d.ts.map +1 -1
- package/dist/src/utils/default-drives-manager.js +2 -2
- package/dist/src/utils/default-drives-manager.js.map +1 -1
- package/dist/src/utils/gql-transformations.d.ts +14 -5
- package/dist/src/utils/gql-transformations.d.ts.map +1 -1
- package/dist/src/utils/gql-transformations.js +19 -5
- package/dist/src/utils/gql-transformations.js.map +1 -1
- package/dist/src/utils/graphql.d.ts +6 -32
- package/dist/src/utils/graphql.d.ts.map +1 -1
- package/dist/src/utils/graphql.js +21 -31
- package/dist/src/utils/graphql.js.map +1 -1
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +9 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +2 -8
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/logger.js +6 -7
- package/dist/src/utils/logger.js.map +1 -1
- package/dist/src/utils/migrations.d.ts +1 -1
- package/dist/src/utils/migrations.d.ts.map +1 -1
- package/dist/src/utils/migrations.js +7 -2
- package/dist/src/utils/migrations.js.map +1 -1
- package/dist/src/utils/misc.d.ts +2 -6
- package/dist/src/utils/misc.d.ts.map +1 -1
- package/dist/src/utils/misc.js +10 -12
- package/dist/src/utils/misc.js.map +1 -1
- package/dist/src/utils/run-asap.d.ts +7 -11
- package/dist/src/utils/run-asap.d.ts.map +1 -1
- package/dist/src/utils/run-asap.js +110 -122
- package/dist/src/utils/run-asap.js.map +1 -1
- package/dist/src/utils/test.d.ts +62 -0
- package/dist/src/utils/test.d.ts.map +1 -0
- package/dist/src/utils/test.js +158 -0
- package/dist/src/utils/test.js.map +1 -0
- package/dist/src/utils/types.d.ts +50 -0
- package/dist/src/utils/types.d.ts.map +1 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/test/benchmarks/getDrive.json +10 -0
- package/dist/test/benchmarks/processOperations.bench.d.ts +2 -0
- package/dist/test/benchmarks/processOperations.bench.d.ts.map +1 -0
- package/dist/test/benchmarks/processOperations.bench.js +148 -0
- package/dist/test/benchmarks/processOperations.bench.js.map +1 -0
- package/dist/test/benchmarks/queue.bench.d.ts +2 -0
- package/dist/test/benchmarks/queue.bench.d.ts.map +1 -0
- package/dist/test/benchmarks/queue.bench.js +55 -0
- package/dist/test/benchmarks/queue.bench.js.map +1 -0
- package/dist/test/benchmarks/strands.small.json +37085 -0
- package/dist/test/cache.test.d.ts +2 -0
- package/dist/test/cache.test.d.ts.map +1 -0
- package/dist/test/cache.test.js +275 -0
- package/dist/test/cache.test.js.map +1 -0
- package/dist/test/default-remote-drives.test.d.ts +2 -0
- package/dist/test/default-remote-drives.test.d.ts.map +1 -0
- package/dist/test/default-remote-drives.test.js +445 -0
- package/dist/test/default-remote-drives.test.js.map +1 -0
- package/dist/test/drive-operations.test.d.ts +2 -0
- package/dist/test/drive-operations.test.d.ts.map +1 -0
- package/dist/test/drive-operations.test.js +134 -0
- package/dist/test/drive-operations.test.js.map +1 -0
- package/dist/test/dual-action-create.test.d.ts +2 -0
- package/dist/test/dual-action-create.test.d.ts.map +1 -0
- package/dist/test/dual-action-create.test.js +187 -0
- package/dist/test/dual-action-create.test.js.map +1 -0
- package/dist/test/dual-action-migration.test.d.ts +2 -0
- package/dist/test/dual-action-migration.test.d.ts.map +1 -0
- package/dist/test/dual-action-migration.test.js +344 -0
- package/dist/test/dual-action-migration.test.js.map +1 -0
- package/dist/test/graphql.test.d.ts +2 -0
- package/dist/test/graphql.test.d.ts.map +1 -0
- package/dist/test/graphql.test.js +9 -0
- package/dist/test/graphql.test.js.map +1 -0
- package/dist/test/internal-listener.test.d.ts +2 -0
- package/dist/test/internal-listener.test.d.ts.map +1 -0
- package/dist/test/internal-listener.test.js +262 -0
- package/dist/test/internal-listener.test.js.map +1 -0
- package/dist/test/queue.test.d.ts +2 -0
- package/dist/test/queue.test.d.ts.map +1 -0
- package/dist/test/queue.test.js +324 -0
- package/dist/test/queue.test.js.map +1 -0
- package/dist/test/reactor.test.d.ts +2 -0
- package/dist/test/reactor.test.d.ts.map +1 -0
- package/dist/test/reactor.test.js +32 -0
- package/dist/test/reactor.test.js.map +1 -0
- package/dist/test/read-mode.test.d.ts +2 -0
- package/dist/test/read-mode.test.d.ts.map +1 -0
- package/dist/test/read-mode.test.js +569 -0
- package/dist/test/read-mode.test.js.map +1 -0
- package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
- package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
- package/dist/test/server/driveOperationsConflictResolution.test.js +486 -0
- package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
- package/dist/test/server/mergeOperations.test.d.ts +2 -0
- package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
- package/dist/test/server/mergeOperations.test.js +115 -0
- package/dist/test/server/mergeOperations.test.js.map +1 -0
- package/dist/test/server/processOperations.test.d.ts +2 -0
- package/dist/test/server/processOperations.test.d.ts.map +1 -0
- package/dist/test/server/processOperations.test.js +392 -0
- package/dist/test/server/processOperations.test.js.map +1 -0
- package/dist/test/server.test.d.ts +2 -0
- package/dist/test/server.test.d.ts.map +1 -0
- package/dist/test/server.test.js +957 -0
- package/dist/test/server.test.js.map +1 -0
- package/dist/test/signature-migration.test.d.ts +2 -0
- package/dist/test/signature-migration.test.d.ts.map +1 -0
- package/dist/test/signature-migration.test.js +241 -0
- package/dist/test/signature-migration.test.js.map +1 -0
- package/dist/test/storage.test.d.ts +2 -0
- package/dist/test/storage.test.d.ts.map +1 -0
- package/dist/test/storage.test.js +522 -0
- package/dist/test/storage.test.js.map +1 -0
- package/dist/test/switchboard-push-listener.test.d.ts +2 -0
- package/dist/test/switchboard-push-listener.test.d.ts.map +1 -0
- package/dist/test/switchboard-push-listener.test.js +133 -0
- package/dist/test/switchboard-push-listener.test.js.map +1 -0
- package/dist/test/sync-manager.test.d.ts +2 -0
- package/dist/test/sync-manager.test.d.ts.map +1 -0
- package/dist/test/sync-manager.test.js +349 -0
- package/dist/test/sync-manager.test.js.map +1 -0
- package/dist/test/undo-redo-clipboard.test.d.ts +2 -0
- package/dist/test/undo-redo-clipboard.test.d.ts.map +1 -0
- package/dist/test/undo-redo-clipboard.test.js +108 -0
- package/dist/test/undo-redo-clipboard.test.js.map +1 -0
- package/dist/test/utils.test.d.ts +2 -0
- package/dist/test/utils.test.d.ts.map +1 -0
- package/dist/test/utils.test.js +86 -0
- package/dist/test/utils.test.js.map +1 -0
- package/dist/test/vitest-setup.d.ts +2 -0
- package/dist/test/vitest-setup.d.ts.map +1 -0
- package/dist/test/vitest-setup.js +5 -0
- package/dist/test/vitest-setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +28 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +47 -27
- package/prisma/schema.prisma +93 -0
- package/src/storage/prisma/client/default.d.ts +1 -0
- package/src/storage/prisma/client/default.js +1 -0
- package/src/storage/prisma/client/edge.d.ts +1 -0
- package/src/storage/prisma/client/edge.js +262 -0
- package/src/storage/prisma/client/index-browser.js +246 -0
- package/src/storage/prisma/client/index.d.ts +10318 -0
- package/src/storage/prisma/client/index.js +291 -0
- package/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
- package/src/storage/prisma/client/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
- package/src/storage/prisma/client/libquery_engine-linux-musl.so.node +0 -0
- package/src/storage/prisma/client/package.json +84 -0
- package/src/storage/prisma/client/runtime/edge-esm.js +31 -0
- package/src/storage/prisma/client/runtime/edge.js +31 -0
- package/src/storage/prisma/client/runtime/index-browser.d.ts +365 -0
- package/src/storage/prisma/client/runtime/index-browser.js +13 -0
- package/src/storage/prisma/client/runtime/library.d.ts +3273 -0
- package/src/storage/prisma/client/runtime/library.js +143 -0
- package/src/storage/prisma/client/runtime/react-native.js +80 -0
- package/src/storage/prisma/client/runtime/wasm.js +32 -0
- package/src/storage/prisma/client/schema.prisma +93 -0
- package/src/storage/prisma/client/wasm.d.ts +1 -0
- package/src/storage/prisma/client/wasm.js +246 -0
- package/dist/src/drive-document-model/gen/actions.d.ts +0 -6
- package/dist/src/drive-document-model/gen/actions.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/actions.js +0 -3
- package/dist/src/drive-document-model/gen/actions.js.map +0 -1
- package/dist/src/drive-document-model/gen/drive/object.d.ts +0 -14
- package/dist/src/drive-document-model/gen/drive/object.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/drive/object.js +0 -29
- package/dist/src/drive-document-model/gen/drive/object.js.map +0 -1
- package/dist/src/drive-document-model/gen/drive/operations.d.ts +0 -14
- package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/drive/operations.js +0 -2
- package/dist/src/drive-document-model/gen/drive/operations.js.map +0 -1
- package/dist/src/drive-document-model/gen/node/object.d.ts +0 -13
- package/dist/src/drive-document-model/gen/node/object.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/node/object.js +0 -26
- package/dist/src/drive-document-model/gen/node/object.js.map +0 -1
- package/dist/src/drive-document-model/gen/node/operations.d.ts +0 -13
- package/dist/src/drive-document-model/gen/node/operations.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/node/operations.js +0 -2
- package/dist/src/drive-document-model/gen/node/operations.js.map +0 -1
- package/dist/src/drive-document-model/gen/object.d.ts +0 -18
- package/dist/src/drive-document-model/gen/object.d.ts.map +0 -1
- package/dist/src/drive-document-model/gen/object.js +0 -28
- package/dist/src/drive-document-model/gen/object.js.map +0 -1
- package/dist/src/server/constants.d.ts.map +0 -1
- package/dist/src/server/constants.js.map +0 -1
- package/dist/src/server/listener/transmitter/factory.d.ts +0 -8
- package/dist/src/server/listener/transmitter/factory.d.ts.map +0 -1
- package/dist/src/server/listener/transmitter/factory.js.map +0 -1
- package/dist/src/server/listener/transmitter/internal.d.ts +0 -29
- package/dist/src/server/listener/transmitter/internal.d.ts.map +0 -1
- package/dist/src/server/listener/transmitter/internal.js.map +0 -1
- package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +0 -1
- package/dist/src/server/listener/transmitter/pull-responder.js.map +0 -1
- package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +0 -1
- package/dist/src/server/listener/transmitter/switchboard-push.js.map +0 -1
- package/dist/src/server/listener/transmitter/types.d.ts +0 -22
- package/dist/src/server/listener/transmitter/types.d.ts.map +0 -1
- package/dist/src/server/listener/transmitter/types.js.map +0 -1
- package/dist/tsconfig.lib.tsbuildinfo +0 -1
- /package/dist/src/{server/listener/transmitter → drive-document-model/src}/types.js +0 -0
- /package/dist/src/server/{constants.d.ts → transmitter/constants.d.ts} +0 -0
- /package/dist/src/server/{constants.js → transmitter/constants.js} +0 -0
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { DocumentAlreadyExistsError, childLogger, } from "document-drive";
|
|
10
|
-
import { attachBranch, createPresignedHeader, garbageCollect, garbageCollectDocumentOperations, groupOperationsByScope, merge, precedes, removeExistingOperations, replayDocument, reshuffleByTimestamp, skipHeaderOperations, sortOperations, validateHeader, } from "document-model";
|
|
1
|
+
import { isActionJob, isDocumentJob, isOperationJob, } from "document-drive/queue/utils";
|
|
2
|
+
import { ReadModeServer } from "document-drive/read-mode/server";
|
|
3
|
+
import { DefaultDrivesManager } from "document-drive/utils/default-drives-manager";
|
|
4
|
+
import { requestPublicDriveWithTokenFromReactor } from "document-drive/utils/graphql";
|
|
5
|
+
import { childLogger } from "document-drive/utils/logger";
|
|
6
|
+
import { isDocumentDrive } from "document-drive/utils/misc";
|
|
7
|
+
import { runAsap, runAsapAsync } from "document-drive/utils/run-asap";
|
|
8
|
+
import { attachBranch, createPresignedHeader, defaultBaseState, diffOperations, garbageCollect, garbageCollectDocumentOperations, groupOperationsByScope, hashDocumentStateForScope, merge, precedes, removeExistingOperations, replayDocument, reshuffleByTimestamp, skipHeaderOperations, sortOperations, validateHeader, } from "document-model/core";
|
|
11
9
|
import { ClientError } from "graphql-request";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
10
|
+
import { driveCreateDocument, driveCreateState, removeListener, removeTrigger, setSharingType, } from "../drive-document-model/index.js";
|
|
11
|
+
import { ConflictOperationError, DocumentAlreadyExistsError, OperationError, } from "./error.js";
|
|
12
|
+
import { DefaultListenerManagerOptions } from "./listener/constants.js";
|
|
13
|
+
import { PullResponderTransmitter } from "./transmitter/pull-responder.js";
|
|
14
|
+
import { SwitchboardPushTransmitter } from "./transmitter/switchboard-push.js";
|
|
16
15
|
import { filterOperationsByRevision, isAtRevision, resolveCreateDocumentInput, } from "./utils.js";
|
|
17
16
|
export class BaseDocumentDriveServer {
|
|
18
17
|
logger = childLogger(["BaseDocumentDriveServer"]);
|
|
@@ -47,18 +46,19 @@ export class BaseDocumentDriveServer {
|
|
|
47
46
|
? this.processDriveActions(documentId, actions, options)
|
|
48
47
|
: this.processActions(documentId, actions, options);
|
|
49
48
|
},
|
|
50
|
-
processDocumentJob: async ({ documentId, documentType, initialState, options, }) => {
|
|
49
|
+
processDocumentJob: async ({ documentId, documentType, header: inputHeader, initialState, options, }) => {
|
|
51
50
|
const documentModelModule = this.getDocumentModelModule(documentType);
|
|
52
|
-
const document = documentModelModule.utils.createDocument(
|
|
53
|
-
...initialState,
|
|
54
|
-
});
|
|
51
|
+
const document = documentModelModule.utils.createDocument(initialState);
|
|
55
52
|
// TODO: header must be included
|
|
56
53
|
const header = createPresignedHeader(documentId, documentType);
|
|
57
54
|
document.header.id = documentId;
|
|
58
55
|
document.header.sig = header.sig;
|
|
59
56
|
document.header.documentType = documentType;
|
|
57
|
+
if (inputHeader) {
|
|
58
|
+
document.header.meta = inputHeader.meta;
|
|
59
|
+
}
|
|
60
60
|
try {
|
|
61
|
-
const createdDocument = await this.createDocument({ document }, options?.source ?? { type: "local" },
|
|
61
|
+
const createdDocument = await this.createDocument({ document }, options?.source ?? { type: "local" }, document.header.meta);
|
|
62
62
|
return {
|
|
63
63
|
status: "SUCCESS",
|
|
64
64
|
operations: [],
|
|
@@ -95,6 +95,7 @@ export class BaseDocumentDriveServer {
|
|
|
95
95
|
// internal state
|
|
96
96
|
triggerMap = new Map();
|
|
97
97
|
initializePromise;
|
|
98
|
+
enableDualActionCreate;
|
|
98
99
|
constructor(documentModelModules, storage, documentStorage, cache, queueManager, eventEmitter, synchronizationManager, listenerManager, options) {
|
|
99
100
|
this.documentModelModules = documentModelModules;
|
|
100
101
|
this.legacyStorage = storage;
|
|
@@ -117,9 +118,17 @@ export class BaseDocumentDriveServer {
|
|
|
117
118
|
? () => Promise.resolve("")
|
|
118
119
|
: options.jwtHandler,
|
|
119
120
|
taskQueueMethod: options?.taskQueueMethod === undefined
|
|
120
|
-
?
|
|
121
|
+
? runAsap
|
|
121
122
|
: options.taskQueueMethod,
|
|
123
|
+
featureFlags: {
|
|
124
|
+
...options?.featureFlags,
|
|
125
|
+
},
|
|
122
126
|
};
|
|
127
|
+
this.enableDualActionCreate =
|
|
128
|
+
options?.featureFlags?.enableDualActionCreate ?? false;
|
|
129
|
+
if (this.enableDualActionCreate) {
|
|
130
|
+
this.logger.warn("Dual action create is enabled.");
|
|
131
|
+
}
|
|
123
132
|
// todo: move to external dependencies
|
|
124
133
|
this.defaultDrivesManager = new DefaultDrivesManager(this, this.defaultDrivesManagerDelegate, options);
|
|
125
134
|
this.initializePromise = this._initialize();
|
|
@@ -136,7 +145,7 @@ export class BaseDocumentDriveServer {
|
|
|
136
145
|
await this.listenerManager.initialize(this.handleListenerError.bind(this));
|
|
137
146
|
await this.queueManager.init(this.queueDelegate, (error) => {
|
|
138
147
|
this.logger.error(`Error initializing queue manager`, error);
|
|
139
|
-
errors.push(error);
|
|
148
|
+
// errors.push(error);
|
|
140
149
|
});
|
|
141
150
|
try {
|
|
142
151
|
await this.defaultDrivesManager.removeOldremoteDrives();
|
|
@@ -328,7 +337,7 @@ export class BaseDocumentDriveServer {
|
|
|
328
337
|
}
|
|
329
338
|
}
|
|
330
339
|
getDocumentModelModule(documentType) {
|
|
331
|
-
const documentModelModule = this.documentModelModules.find((module) => module.documentModel.id === documentType);
|
|
340
|
+
const documentModelModule = this.documentModelModules.find((module) => module.documentModel.global.id === documentType);
|
|
332
341
|
if (!documentModelModule) {
|
|
333
342
|
throw new Error(`Document type ${documentType} not supported`);
|
|
334
343
|
}
|
|
@@ -344,13 +353,19 @@ export class BaseDocumentDriveServer {
|
|
|
344
353
|
return this.createDocument(input, { type: "local" }, meta);
|
|
345
354
|
}
|
|
346
355
|
async addDrive(input, preferredEditor) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
356
|
+
// Create document with custom global and local state
|
|
357
|
+
const { global } = driveCreateState();
|
|
358
|
+
const document = driveCreateDocument({
|
|
359
|
+
global: {
|
|
360
|
+
...global,
|
|
361
|
+
name: input.global.name ?? global.name,
|
|
362
|
+
icon: input.global.icon ?? global.icon,
|
|
363
|
+
},
|
|
364
|
+
local: {
|
|
365
|
+
availableOffline: input.local?.availableOffline ?? false,
|
|
366
|
+
sharingType: input.local?.sharingType ?? "public",
|
|
367
|
+
listeners: input.local?.listeners ?? [],
|
|
368
|
+
triggers: input.local?.triggers ?? [],
|
|
354
369
|
},
|
|
355
370
|
});
|
|
356
371
|
if (input.id && input.id.length > 0) {
|
|
@@ -359,6 +374,9 @@ export class BaseDocumentDriveServer {
|
|
|
359
374
|
if (input.slug && input.slug.length > 0) {
|
|
360
375
|
document.header.slug = input.slug;
|
|
361
376
|
}
|
|
377
|
+
if (input.global.name) {
|
|
378
|
+
document.header.name = input.global.name;
|
|
379
|
+
}
|
|
362
380
|
const editorToUse = input.preferredEditor || preferredEditor;
|
|
363
381
|
if (editorToUse) {
|
|
364
382
|
document.header.meta = {
|
|
@@ -549,6 +567,14 @@ export class BaseDocumentDriveServer {
|
|
|
549
567
|
}
|
|
550
568
|
}
|
|
551
569
|
async createDocument(input, source, meta) {
|
|
570
|
+
if (this.enableDualActionCreate) {
|
|
571
|
+
return this.createDocumentDualAction(input, source, meta);
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
return this.createDocumentLegacy(input, source, meta);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
async createDocumentLegacy(input, source, meta) {
|
|
552
578
|
const { documentType, document: inputDocument } = resolveCreateDocumentInput(input);
|
|
553
579
|
// if a document was provided then checks if it's valid
|
|
554
580
|
let state = undefined;
|
|
@@ -562,9 +588,7 @@ export class BaseDocumentDriveServer {
|
|
|
562
588
|
}
|
|
563
589
|
// if no document was provided then create a new one
|
|
564
590
|
const document = inputDocument ??
|
|
565
|
-
this.getDocumentModelModule(documentType).utils.createDocument(
|
|
566
|
-
state,
|
|
567
|
-
});
|
|
591
|
+
this.getDocumentModelModule(documentType).utils.createDocument(state);
|
|
568
592
|
// get the header
|
|
569
593
|
let header;
|
|
570
594
|
// handle the legacy case where an id is provided
|
|
@@ -613,11 +637,9 @@ export class BaseDocumentDriveServer {
|
|
|
613
637
|
// stores document information
|
|
614
638
|
const documentStorage = {
|
|
615
639
|
header,
|
|
616
|
-
history: document.history,
|
|
617
640
|
operations: { global: [], local: [] },
|
|
618
641
|
initialState: document.initialState,
|
|
619
642
|
clipboard: [],
|
|
620
|
-
attachments: document.attachments,
|
|
621
643
|
state: state ?? document.state,
|
|
622
644
|
};
|
|
623
645
|
await this.documentStorage.create(documentStorage);
|
|
@@ -650,7 +672,185 @@ export class BaseDocumentDriveServer {
|
|
|
650
672
|
await this.legacyStorage.addDocumentOperations(header.id, operations, document);
|
|
651
673
|
}
|
|
652
674
|
}
|
|
653
|
-
|
|
675
|
+
const addedDocument = await this.getDocument(documentStorage.header.id);
|
|
676
|
+
this.eventEmitter.emit("documentAdded", addedDocument);
|
|
677
|
+
return addedDocument;
|
|
678
|
+
}
|
|
679
|
+
async createDocumentDualAction(input, source, meta) {
|
|
680
|
+
const { documentType, document: inputDocument } = resolveCreateDocumentInput(input);
|
|
681
|
+
// if a document was provided then checks if it's valid
|
|
682
|
+
let state = undefined;
|
|
683
|
+
if (inputDocument) {
|
|
684
|
+
if ("documentType" in input &&
|
|
685
|
+
documentType !== inputDocument.header.documentType) {
|
|
686
|
+
throw new Error(`Provided document is not ${documentType}`);
|
|
687
|
+
}
|
|
688
|
+
const doc = this._buildDocument(inputDocument);
|
|
689
|
+
state = doc.state;
|
|
690
|
+
}
|
|
691
|
+
// if no document was provided then create a new one
|
|
692
|
+
const document = inputDocument ??
|
|
693
|
+
this.getDocumentModelModule(documentType).utils.createDocument(state);
|
|
694
|
+
// get the header
|
|
695
|
+
let header;
|
|
696
|
+
// handle the legacy case where an id is provided
|
|
697
|
+
let isSigned = false;
|
|
698
|
+
if ("id" in input && input.id) {
|
|
699
|
+
if (inputDocument) {
|
|
700
|
+
header = document.header;
|
|
701
|
+
document.header.id = input.id;
|
|
702
|
+
this.logger.warn("Assigning an id to a document is deprecated. Use the header field instead.");
|
|
703
|
+
}
|
|
704
|
+
else {
|
|
705
|
+
this.logger.warn("Creating a document with an id is deprecated. Use the header field instead.");
|
|
706
|
+
header = createPresignedHeader(input.id, documentType);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
else if ("header" in input) {
|
|
710
|
+
// validate the header passed in
|
|
711
|
+
await validateHeader(input.header);
|
|
712
|
+
isSigned = true;
|
|
713
|
+
header = input.header;
|
|
714
|
+
}
|
|
715
|
+
else if (inputDocument?.header) {
|
|
716
|
+
if (!inputDocument.header.id) {
|
|
717
|
+
throw new Error("Document header id is required");
|
|
718
|
+
}
|
|
719
|
+
if (!inputDocument.header.documentType) {
|
|
720
|
+
throw new Error("Document header documentType is required");
|
|
721
|
+
}
|
|
722
|
+
if (!inputDocument.header.createdAtUtcIso) {
|
|
723
|
+
throw new Error("Document header createdAtUtcIso is required");
|
|
724
|
+
}
|
|
725
|
+
if (!inputDocument.header.sig.nonce) {
|
|
726
|
+
this.logger.warn("Creating a document with an unsigned id is deprecated. Use createSignedHeaderForSigner.");
|
|
727
|
+
// throw new Error("Document header sig nonce is required"); TODO: uncomment when ready to enforce signed documents
|
|
728
|
+
}
|
|
729
|
+
else {
|
|
730
|
+
await validateHeader(inputDocument.header);
|
|
731
|
+
isSigned = true;
|
|
732
|
+
}
|
|
733
|
+
header = inputDocument.header;
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
// otherwise, generate a header
|
|
737
|
+
header = createPresignedHeader(undefined, documentType);
|
|
738
|
+
isSigned = false;
|
|
739
|
+
}
|
|
740
|
+
if (meta) {
|
|
741
|
+
header.meta = { ...header.meta, ...meta };
|
|
742
|
+
}
|
|
743
|
+
const currentVersion = "0.1.0";
|
|
744
|
+
// Get initial state from input or model's defaultState
|
|
745
|
+
const initialState = state ?? document.state;
|
|
746
|
+
// Check if the input document already has operations
|
|
747
|
+
const existingOperations = Object.values(document.operations).flat();
|
|
748
|
+
const shouldCreateOperations = existingOperations.length === 0;
|
|
749
|
+
let operations = [];
|
|
750
|
+
if (shouldCreateOperations) {
|
|
751
|
+
const timestampUtcMs = new Date().toISOString();
|
|
752
|
+
// Determine if this is a signed document
|
|
753
|
+
const signing = isSigned
|
|
754
|
+
? {
|
|
755
|
+
signature: header.id, // The document ID is the signature
|
|
756
|
+
publicKey: header.sig.publicKey,
|
|
757
|
+
nonce: header.sig.nonce,
|
|
758
|
+
createdAtUtcIso: header.createdAtUtcIso,
|
|
759
|
+
documentType: header.documentType,
|
|
760
|
+
}
|
|
761
|
+
: undefined;
|
|
762
|
+
// Create actions for CREATE_DOCUMENT and UPGRADE_DOCUMENT
|
|
763
|
+
const createDocumentInput = {
|
|
764
|
+
model: documentType,
|
|
765
|
+
version: "0.0.0",
|
|
766
|
+
documentId: header.id,
|
|
767
|
+
signing,
|
|
768
|
+
};
|
|
769
|
+
const createDocumentAction = {
|
|
770
|
+
id: `${header.id}-create`,
|
|
771
|
+
type: "CREATE_DOCUMENT",
|
|
772
|
+
timestampUtcMs,
|
|
773
|
+
input: createDocumentInput,
|
|
774
|
+
scope: "document",
|
|
775
|
+
};
|
|
776
|
+
const upgradeDocumentInput = {
|
|
777
|
+
model: documentType,
|
|
778
|
+
fromVersion: "0.0.0",
|
|
779
|
+
toVersion: currentVersion,
|
|
780
|
+
documentId: header.id,
|
|
781
|
+
initialState,
|
|
782
|
+
};
|
|
783
|
+
const upgradeDocumentAction = {
|
|
784
|
+
id: `${header.id}-upgrade`,
|
|
785
|
+
type: "UPGRADE_DOCUMENT",
|
|
786
|
+
timestampUtcMs,
|
|
787
|
+
input: upgradeDocumentInput,
|
|
788
|
+
scope: "document",
|
|
789
|
+
};
|
|
790
|
+
// we need to create hashes for later verification
|
|
791
|
+
const baseState = defaultBaseState();
|
|
792
|
+
const createStateForHash = {
|
|
793
|
+
state: baseState,
|
|
794
|
+
};
|
|
795
|
+
const createHash = hashDocumentStateForScope(createStateForHash, "document");
|
|
796
|
+
const upgradeStateForHash = {
|
|
797
|
+
state: initialState,
|
|
798
|
+
};
|
|
799
|
+
const upgradeHash = hashDocumentStateForScope(upgradeStateForHash, "document");
|
|
800
|
+
// Create operations from actions with computed hashes
|
|
801
|
+
operations = [
|
|
802
|
+
{
|
|
803
|
+
index: 0,
|
|
804
|
+
skip: 0,
|
|
805
|
+
hash: createHash,
|
|
806
|
+
timestampUtcMs,
|
|
807
|
+
action: createDocumentAction,
|
|
808
|
+
},
|
|
809
|
+
{
|
|
810
|
+
index: 1,
|
|
811
|
+
skip: 0,
|
|
812
|
+
hash: upgradeHash,
|
|
813
|
+
timestampUtcMs,
|
|
814
|
+
action: upgradeDocumentAction,
|
|
815
|
+
},
|
|
816
|
+
];
|
|
817
|
+
}
|
|
818
|
+
else {
|
|
819
|
+
// Use existing operations from the input document
|
|
820
|
+
operations = existingOperations;
|
|
821
|
+
}
|
|
822
|
+
// Group operations by scope before storing
|
|
823
|
+
const groupedOps = groupOperationsByScope(operations);
|
|
824
|
+
// Ensure backward compatibility by initializing missing scopes
|
|
825
|
+
if (!groupedOps.header) {
|
|
826
|
+
groupedOps.header = [];
|
|
827
|
+
}
|
|
828
|
+
if (!groupedOps.document) {
|
|
829
|
+
groupedOps.document = [];
|
|
830
|
+
}
|
|
831
|
+
if (!groupedOps.global) {
|
|
832
|
+
groupedOps.global = [];
|
|
833
|
+
}
|
|
834
|
+
if (!groupedOps.local) {
|
|
835
|
+
groupedOps.local = [];
|
|
836
|
+
}
|
|
837
|
+
// After initialization, it's safe to treat as DocumentOperations
|
|
838
|
+
const operationsByScope = groupedOps;
|
|
839
|
+
// stores document information with operations
|
|
840
|
+
const documentToStore = {
|
|
841
|
+
header,
|
|
842
|
+
operations: operationsByScope,
|
|
843
|
+
initialState,
|
|
844
|
+
clipboard: [],
|
|
845
|
+
state: initialState,
|
|
846
|
+
};
|
|
847
|
+
await this.documentStorage.create(documentToStore);
|
|
848
|
+
// Force rebuild to ensure operations are properly merged
|
|
849
|
+
const addedDocument = await this.getDocument(documentToStore.header.id, {
|
|
850
|
+
checkHashes: true,
|
|
851
|
+
});
|
|
852
|
+
this.eventEmitter.emit("documentAdded", addedDocument);
|
|
853
|
+
return addedDocument;
|
|
654
854
|
}
|
|
655
855
|
async deleteDocument(documentId) {
|
|
656
856
|
try {
|
|
@@ -669,8 +869,11 @@ export class BaseDocumentDriveServer {
|
|
|
669
869
|
catch (error) {
|
|
670
870
|
this.logger.warn("Error deleting document", error);
|
|
671
871
|
}
|
|
672
|
-
await
|
|
673
|
-
|
|
872
|
+
await Promise.allSettled([
|
|
873
|
+
this.cache.deleteDocument(documentId).catch(this.logger.warn),
|
|
874
|
+
this.documentStorage.delete(documentId).catch(this.logger.warn),
|
|
875
|
+
]);
|
|
876
|
+
this.eventEmitter.emit("documentDeleted", documentId);
|
|
674
877
|
}
|
|
675
878
|
async _processOperations(documentId, documentStorage, operations) {
|
|
676
879
|
const operationsApplied = [];
|
|
@@ -680,7 +883,7 @@ export class BaseDocumentDriveServer {
|
|
|
680
883
|
let error; // TODO: replace with an array of errors/consistency issues
|
|
681
884
|
const operationsByScope = groupOperationsByScope(operations);
|
|
682
885
|
for (const scope of Object.keys(operationsByScope)) {
|
|
683
|
-
const storageDocumentOperations = documentStorage.operations[scope];
|
|
886
|
+
const storageDocumentOperations = documentStorage.operations[scope] || [];
|
|
684
887
|
// TODO two equal operations done by two clients will be considered the same, ie: { type: "INCREMENT" }
|
|
685
888
|
const branch = removeExistingOperations(operationsByScope[scope] || [], storageDocumentOperations);
|
|
686
889
|
// No operations to apply
|
|
@@ -740,13 +943,17 @@ export class BaseDocumentDriveServer {
|
|
|
740
943
|
: document.operations;
|
|
741
944
|
const documentOperations = garbageCollectDocumentOperations(operations);
|
|
742
945
|
for (const scope of Object.keys(documentOperations)) {
|
|
743
|
-
const
|
|
946
|
+
const scopeOps = documentOperations[scope];
|
|
947
|
+
if (!scopeOps) {
|
|
948
|
+
continue;
|
|
949
|
+
}
|
|
950
|
+
const lastRemainingOperation = scopeOps.at(-1);
|
|
744
951
|
// if the latest operation doesn't have a resulting state then tries
|
|
745
952
|
// to retrieve it from the db to avoid rerunning all the operations
|
|
746
953
|
if (lastRemainingOperation && !lastRemainingOperation.resultingState) {
|
|
747
954
|
lastRemainingOperation.resultingState = await (isDocumentDrive(document)
|
|
748
|
-
? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main")
|
|
749
|
-
: this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main"));
|
|
955
|
+
? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main")
|
|
956
|
+
: this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main"));
|
|
750
957
|
}
|
|
751
958
|
}
|
|
752
959
|
return {
|
|
@@ -765,31 +972,84 @@ export class BaseDocumentDriveServer {
|
|
|
765
972
|
? filterOperationsByRevision(documentStorage.operations, options.revisions)
|
|
766
973
|
: documentStorage.operations;
|
|
767
974
|
const operations = garbageCollectDocumentOperations(revisionOperations);
|
|
768
|
-
|
|
975
|
+
// Get all scopes from operations
|
|
976
|
+
const allScopes = Object.keys(operations);
|
|
977
|
+
// Initialize with all scopes found in operations, plus global and local for backward compatibility
|
|
978
|
+
const scopesToInitialize = new Set([...allScopes, "global", "local"]);
|
|
979
|
+
const headerOperations = {};
|
|
980
|
+
const operationsToReplay = {};
|
|
981
|
+
for (const scope of scopesToInitialize) {
|
|
982
|
+
headerOperations[scope] = [];
|
|
983
|
+
operationsToReplay[scope] = [];
|
|
984
|
+
}
|
|
985
|
+
// Filter out CREATE_DOCUMENT and UPGRADE_DOCUMENT operations
|
|
986
|
+
// (these don't currently have reducers and should not be replayed)
|
|
987
|
+
for (const [scope, scopeOps] of Object.entries(operations)) {
|
|
988
|
+
if (!scopeOps) {
|
|
989
|
+
continue;
|
|
990
|
+
}
|
|
991
|
+
for (const op of scopeOps) {
|
|
992
|
+
if (op.action.type === "CREATE_DOCUMENT" ||
|
|
993
|
+
op.action.type === "UPGRADE_DOCUMENT") {
|
|
994
|
+
const headerOps = headerOperations[scope];
|
|
995
|
+
if (headerOps) {
|
|
996
|
+
headerOps.push(op);
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
else {
|
|
1000
|
+
const replayOps = operationsToReplay[scope];
|
|
1001
|
+
if (replayOps) {
|
|
1002
|
+
replayOps.push(op);
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
const replayed = replayDocument(documentStorage.initialState, operationsToReplay, documentModelModule.reducer, undefined, documentStorage.header, undefined, {
|
|
769
1008
|
...options,
|
|
770
1009
|
checkHashes: options?.checkHashes ?? true,
|
|
771
1010
|
reuseOperationResultingState: options?.checkHashes ?? true,
|
|
772
1011
|
});
|
|
1012
|
+
// merge header operations back into the result
|
|
1013
|
+
// Include ALL scopes from input operations, header operations, and replayed operations
|
|
1014
|
+
const allScopesForMerge = new Set([
|
|
1015
|
+
...Object.keys(operations), // From input storage
|
|
1016
|
+
...Object.keys(headerOperations),
|
|
1017
|
+
...Object.keys(replayed.operations),
|
|
1018
|
+
]);
|
|
1019
|
+
const finalOperations = {};
|
|
1020
|
+
for (const scope of allScopesForMerge) {
|
|
1021
|
+
finalOperations[scope] = [
|
|
1022
|
+
...(headerOperations[scope] || []),
|
|
1023
|
+
...(replayed.operations[scope] || []),
|
|
1024
|
+
];
|
|
1025
|
+
}
|
|
1026
|
+
return {
|
|
1027
|
+
...replayed,
|
|
1028
|
+
operations: finalOperations,
|
|
1029
|
+
};
|
|
773
1030
|
}
|
|
774
1031
|
async _performOperation(documentId, document, operation, skipHashValidation = false) {
|
|
775
1032
|
const documentModelModule = this.getDocumentModelModule(document.header.documentType);
|
|
776
1033
|
const signalResults = [];
|
|
777
1034
|
let newDocument = document;
|
|
778
|
-
const scope = operation.scope;
|
|
1035
|
+
const scope = operation.action.scope;
|
|
1036
|
+
const currentScopeOperations = document.operations[scope] || [];
|
|
779
1037
|
const documentOperations = garbageCollectDocumentOperations({
|
|
780
1038
|
...document.operations,
|
|
781
|
-
[scope]: skipHeaderOperations(
|
|
1039
|
+
[scope]: skipHeaderOperations(currentScopeOperations, operation),
|
|
782
1040
|
});
|
|
783
|
-
const
|
|
1041
|
+
const remainingScopeOps = documentOperations[scope];
|
|
1042
|
+
const lastRemainingOperation = remainingScopeOps?.at(-1);
|
|
784
1043
|
// if the latest operation doesn't have a resulting state then tries
|
|
785
1044
|
// to retrieve it from the db to avoid rerunning all the operations
|
|
786
1045
|
if (lastRemainingOperation && !lastRemainingOperation.resultingState) {
|
|
787
1046
|
lastRemainingOperation.resultingState = await (isDocumentDrive(document)
|
|
788
|
-
? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main")
|
|
789
|
-
: this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main"));
|
|
1047
|
+
? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main")
|
|
1048
|
+
: this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main"));
|
|
790
1049
|
}
|
|
1050
|
+
const operationsBeforeReducer = newDocument.operations[scope] || [];
|
|
791
1051
|
const operationSignals = [];
|
|
792
|
-
newDocument = documentModelModule.reducer(newDocument, operation, (signal) => {
|
|
1052
|
+
newDocument = documentModelModule.reducer(newDocument, operation.action, (signal) => {
|
|
793
1053
|
let handler = undefined;
|
|
794
1054
|
switch (signal.type) {
|
|
795
1055
|
case "CREATE_CHILD_DOCUMENT":
|
|
@@ -805,8 +1065,35 @@ export class BaseDocumentDriveServer {
|
|
|
805
1065
|
if (handler) {
|
|
806
1066
|
operationSignals.push(() => handler().then((result) => ({ signal, result })));
|
|
807
1067
|
}
|
|
808
|
-
}, {
|
|
809
|
-
|
|
1068
|
+
}, {
|
|
1069
|
+
skip: operation.skip,
|
|
1070
|
+
reuseOperationResultingState: true,
|
|
1071
|
+
replayOptions: { operation },
|
|
1072
|
+
});
|
|
1073
|
+
// when we have NOOP operations with skip > 0 we need to populate the
|
|
1074
|
+
// clipboard with the operations that were skipped to allow redo
|
|
1075
|
+
if (operation.action.type === "NOOP" &&
|
|
1076
|
+
operation.skip > 0 &&
|
|
1077
|
+
newDocument.clipboard.length === 0) {
|
|
1078
|
+
const scopeOperationsAfter = newDocument.operations[scope] || [];
|
|
1079
|
+
// Get operations AFTER garbageCollect (with NOOP)
|
|
1080
|
+
const afterOperations = garbageCollect(sortOperations(scopeOperationsAfter));
|
|
1081
|
+
// Get operations BEFORE the reducer ran (before NOOP was applied)
|
|
1082
|
+
const beforeOperations = garbageCollect(sortOperations(operationsBeforeReducer));
|
|
1083
|
+
// Calculate what was removed by comparing before vs after
|
|
1084
|
+
// The diff shows operations that were in "before" but not in "after"
|
|
1085
|
+
const diff = diffOperations(beforeOperations, afterOperations);
|
|
1086
|
+
// Populate clipboard with skipped operations (excluding NOOPs)
|
|
1087
|
+
newDocument = {
|
|
1088
|
+
...newDocument,
|
|
1089
|
+
clipboard: sortOperations(diff.filter((op) => op.action.type !== "NOOP")).reverse(),
|
|
1090
|
+
};
|
|
1091
|
+
}
|
|
1092
|
+
const newDocScopeOperations = newDocument.operations[operation.action.scope];
|
|
1093
|
+
if (!newDocScopeOperations) {
|
|
1094
|
+
throw new OperationError("ERROR", operation, `No operations found for scope: ${operation.action.scope}`);
|
|
1095
|
+
}
|
|
1096
|
+
const appliedOperations = newDocScopeOperations.filter((op) => op.index == operation.index && op.skip == operation.skip);
|
|
810
1097
|
const appliedOperation = appliedOperations.at(0);
|
|
811
1098
|
if (!appliedOperation) {
|
|
812
1099
|
throw new OperationError("ERROR", operation, `Operation with index ${operation.index}:${operation.skip} was not applied.`);
|
|
@@ -893,7 +1180,8 @@ export class BaseDocumentDriveServer {
|
|
|
893
1180
|
jobId = await this.queueManager.addJob({
|
|
894
1181
|
documentId: id,
|
|
895
1182
|
documentType,
|
|
896
|
-
initialState: document,
|
|
1183
|
+
initialState: document?.state,
|
|
1184
|
+
header: document?.header,
|
|
897
1185
|
options,
|
|
898
1186
|
});
|
|
899
1187
|
}
|
|
@@ -924,11 +1212,19 @@ export class BaseDocumentDriveServer {
|
|
|
924
1212
|
async resultIfExistingOperations(id, operations) {
|
|
925
1213
|
try {
|
|
926
1214
|
const document = await this.getDocument(id);
|
|
927
|
-
const newOperation = operations.find((op) =>
|
|
928
|
-
!
|
|
1215
|
+
const newOperation = operations.find((op) => {
|
|
1216
|
+
if (!op.id) {
|
|
1217
|
+
return true;
|
|
1218
|
+
}
|
|
1219
|
+
const scopeOps = document.operations[op.action.scope];
|
|
1220
|
+
if (!scopeOps) {
|
|
1221
|
+
return true;
|
|
1222
|
+
}
|
|
1223
|
+
return !scopeOps.find((existingOp) => existingOp.id === op.id &&
|
|
929
1224
|
existingOp.index === op.index &&
|
|
930
|
-
existingOp.type === op.type &&
|
|
931
|
-
existingOp.hash === op.hash)
|
|
1225
|
+
existingOp.action.type === op.action.type &&
|
|
1226
|
+
existingOp.hash === op.hash);
|
|
1227
|
+
});
|
|
932
1228
|
if (!newOperation) {
|
|
933
1229
|
return {
|
|
934
1230
|
status: "SUCCESS",
|
|
@@ -1159,10 +1455,10 @@ export class BaseDocumentDriveServer {
|
|
|
1159
1455
|
const syncUnit = {
|
|
1160
1456
|
documentId,
|
|
1161
1457
|
documentType: document.header.documentType,
|
|
1162
|
-
scope: operation.scope,
|
|
1458
|
+
scope: operation.action.scope,
|
|
1163
1459
|
branch: "main", // TODO: handle branches
|
|
1164
1460
|
revision: operation.index + 1,
|
|
1165
|
-
lastUpdated: operation.
|
|
1461
|
+
lastUpdated: operation.timestampUtcMs,
|
|
1166
1462
|
};
|
|
1167
1463
|
// checks if this sync unit was already added
|
|
1168
1464
|
const exists = syncUnits.some((unit) => unit.documentId === syncUnit.documentId &&
|
|
@@ -1280,11 +1576,19 @@ export class BaseDocumentDriveServer {
|
|
|
1280
1576
|
async resultIfExistingDriveOperations(driveId, operations) {
|
|
1281
1577
|
try {
|
|
1282
1578
|
const drive = await this.getDrive(driveId);
|
|
1283
|
-
const newOperation = operations.find((op) =>
|
|
1284
|
-
!
|
|
1579
|
+
const newOperation = operations.find((op) => {
|
|
1580
|
+
if (!op.id) {
|
|
1581
|
+
return true;
|
|
1582
|
+
}
|
|
1583
|
+
const scopeOps = drive.operations[op.action.scope];
|
|
1584
|
+
if (!scopeOps) {
|
|
1585
|
+
return true;
|
|
1586
|
+
}
|
|
1587
|
+
return !scopeOps.find((existingOp) => existingOp.id === op.id &&
|
|
1285
1588
|
existingOp.index === op.index &&
|
|
1286
|
-
existingOp.type === op.type &&
|
|
1287
|
-
existingOp.hash === op.hash)
|
|
1589
|
+
existingOp.action.type === op.action.type &&
|
|
1590
|
+
existingOp.hash === op.hash);
|
|
1591
|
+
});
|
|
1288
1592
|
if (!newOperation) {
|
|
1289
1593
|
return {
|
|
1290
1594
|
status: "SUCCESS",
|
|
@@ -1374,7 +1678,7 @@ export class BaseDocumentDriveServer {
|
|
|
1374
1678
|
this.cache.setDrive(driveId, document).catch(this.logger.error);
|
|
1375
1679
|
// update listener cache
|
|
1376
1680
|
const lastOperation = operationsApplied
|
|
1377
|
-
.filter((op) => op.scope === "global")
|
|
1681
|
+
.filter((op) => op.action.scope === "global")
|
|
1378
1682
|
.slice()
|
|
1379
1683
|
.pop();
|
|
1380
1684
|
if (lastOperation) {
|
|
@@ -1397,7 +1701,7 @@ export class BaseDocumentDriveServer {
|
|
|
1397
1701
|
documentType: document.header.documentType,
|
|
1398
1702
|
scope: "global",
|
|
1399
1703
|
branch: "main",
|
|
1400
|
-
lastUpdated: lastOperation.
|
|
1704
|
+
lastUpdated: lastOperation.timestampUtcMs,
|
|
1401
1705
|
revision: lastOperation.index,
|
|
1402
1706
|
},
|
|
1403
1707
|
], source, () => {
|
|
@@ -1457,7 +1761,11 @@ export class BaseDocumentDriveServer {
|
|
|
1457
1761
|
const { reducer } = this.getDocumentModelModule(documentId.header.documentType);
|
|
1458
1762
|
for (const action of actions) {
|
|
1459
1763
|
documentId = reducer(documentId, action);
|
|
1460
|
-
const
|
|
1764
|
+
const scopeOps = documentId.operations[action.scope];
|
|
1765
|
+
if (!scopeOps) {
|
|
1766
|
+
throw new Error(`No operations found for scope: ${action.scope}`);
|
|
1767
|
+
}
|
|
1768
|
+
const operation = scopeOps.slice().pop();
|
|
1461
1769
|
if (!operation) {
|
|
1462
1770
|
throw new Error("Error creating operations");
|
|
1463
1771
|
}
|
|
@@ -1520,7 +1828,7 @@ export class BaseDocumentDriveServer {
|
|
|
1520
1828
|
}
|
|
1521
1829
|
async _legacyAddFileAction(driveId, action, options) {
|
|
1522
1830
|
// create document before adding it to the drive
|
|
1523
|
-
const document = this.getDocumentModelModule(action.input.documentType).utils.createDocument(
|
|
1831
|
+
const document = this.getDocumentModelModule(action.input.documentType).utils.createDocument(action.input.document?.state || undefined);
|
|
1524
1832
|
document.header.id = action.input.id;
|
|
1525
1833
|
document.header.name = action.input.name;
|
|
1526
1834
|
document.header.documentType = action.input.documentType;
|
|
@@ -1591,6 +1899,14 @@ export class BaseDocumentDriveServer {
|
|
|
1591
1899
|
}
|
|
1592
1900
|
const operations = strand.operations.map((op) => ({
|
|
1593
1901
|
...op,
|
|
1902
|
+
action: {
|
|
1903
|
+
id: op.actionId,
|
|
1904
|
+
timestampUtcMs: op.timestampUtcMs,
|
|
1905
|
+
type: op.type,
|
|
1906
|
+
input: op.input,
|
|
1907
|
+
context: op.context,
|
|
1908
|
+
scope: strand.scope,
|
|
1909
|
+
},
|
|
1594
1910
|
scope: strand.scope,
|
|
1595
1911
|
branch: strand.branch,
|
|
1596
1912
|
}));
|