Changes
5 changed files (+98/-12)
-
-
@@ -0,0 +1,29 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only import { create, type MessageInitShape, type MessageShape } from "@bufbuild/protobuf"; import { WorkerSchema } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { type WorkerReadMaskSchema } from "@yamori/proto/yamori/worker/v1/worker_read_mask_pb.js"; import { maskMessage } from "../../../helpers"; import { type YamoriDB } from "../../../types"; export function fromDBEntry( entry: YamoriDB["workers"]["value"], ): MessageShape<typeof WorkerSchema> { return create(WorkerSchema, { id: { value: entry.id }, displayName: entry.displayName, }); } export function mask( mask: MessageShape<typeof WorkerReadMaskSchema> | undefined, worker: MessageInitShape<typeof WorkerSchema>, ): MessageShape<typeof WorkerSchema> { if (!mask) { return create(WorkerSchema, worker); } return maskMessage(WorkerSchema, mask, worker); }
-
-
-
@@ -8,6 +8,7 @@import { create, fromBinary, toBinary } from "@bufbuild/protobuf"; import { CreateRequestSchema } from "@yamori/proto/yamori/worker/v1/create_request_pb.js"; import { CreateResponseSchema } from "@yamori/proto/yamori/worker/v1/create_response_pb.js"; import { WorkerSchema } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { CreateRequestSchema as WorkspaceCreateRequestSchema } from "@yamori/proto/yamori/workspace/v1/create_request_pb.js"; import { CreateResponseSchema as WorkspaceCreateResponseSchema } from "@yamori/proto/yamori/workspace/v1/create_response_pb.js"; import { type Workspace } from "@yamori/proto/yamori/workspace/v1/workspace_pb.js";
-
@@ -233,3 +234,34 @@expect(resp.result.value.worker?.id?.value).not.toBeEmpty(); expect(resp.result.value.worker?.displayName).toBe("Alice"); }); test("Should mask fields", async () => { const { [CONTEXT]: ctx } = await idbBackend(); const workspace = await createTestWorkspace(ctx); const resp = fromBinary( CreateResponseSchema, await method( toBinary( CreateRequestSchema, create(CreateRequestSchema, { workspaceId: workspace.id!, workerAddKey: workspace.workerAddKey!, displayName: "Alice", readMask: { fields: [WorkerSchema.field.id.number], }, }), ), ctx, ), ); if (resp.result.case !== "ok") { expect.unreachable(`Expected "ok", found ${resp.result.case}`); } expect(resp.result.value.worker?.id?.value).not.toBeEmpty(); expect(resp.result.value.worker?.displayName).toBeEmpty(); });
-
-
-
@@ -15,6 +15,7 @@ import { CreateResponseSchema } from "@yamori/proto/yamori/worker/v1/create_response_pb.js";import { isSameBytes } from "../../../../helpers"; import { type Context } from "../../../../types"; import * as worker from "../worker"; export function respond( result: Exclude<
-
@@ -127,10 +128,7 @@return respond({ case: "ok", value: { worker: { id: { value: added.id }, displayName: added.displayName, }, worker: worker.mask(req.readMask, worker.fromDBEntry(added)), }, }); } catch (error) {
-
-
-
@@ -13,7 +13,7 @@ import { CreateRequestSchema } from "@yamori/proto/yamori/worker/v1/create_request_pb.js";import { CreateResponseSchema } from "@yamori/proto/yamori/worker/v1/create_response_pb.js"; import { ListRequestSchema } from "@yamori/proto/yamori/worker/v1/list_request_pb.js"; import { ListResponseSchema } from "@yamori/proto/yamori/worker/v1/list_response_pb.js"; import { type Worker } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { WorkerSchema, type Worker } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { openDB } from "idb"; import { idbBackend } from "../../../../lib";
-
@@ -272,3 +272,34 @@expect(resp.result.value.workspaceId).toEqual(foo.id!); expect(resp.result.value.workers).toEqual([alice]); }); test("Should mask fields", async () => { const { [CONTEXT]: ctx } = await idbBackend(); const workspace = await createTestWorkspace(ctx); const alice = await createTestWorker(workspace, { displayName: "Alice" }, ctx); const resp = fromBinary( ListResponseSchema, await list( toBinary( ListRequestSchema, create(ListRequestSchema, { workspaceId: workspace.id!, readMask: { fields: [WorkerSchema.field.id.number], }, }), ), ctx, ), ); if (resp.result.case !== "ok") { expect.unreachable(`Expected "ok", found ${JSON.stringify(resp.result.case)}`); } expect(resp.result.value.workers).toHaveLength(1); expect(resp.result.value.workers[0]!.id).toEqual(alice.id!); expect(resp.result.value.workers[0]!.displayName).toBeEmpty(); });
-
-
-
@@ -7,9 +7,10 @@ ListRequestSchema,type ListRequest, } from "@yamori/proto/yamori/worker/v1/list_request_pb.js"; import { ListResponseSchema } from "@yamori/proto/yamori/worker/v1/list_response_pb.js"; import { WorkerSchema, type Worker } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { type Worker } from "@yamori/proto/yamori/worker/v1/worker_pb.js"; import { type Context, type YamoriDB } from "../../../../types"; import * as worker from "../worker"; export function respond( result: Exclude<
-
@@ -76,12 +77,7 @@ const index = tx.store.index("workspaceId");const workers: Worker[] = (await index.getAll(IDBKeyRange.only(workspace.id))) .sort((a, b) => b.updatedAt - a.updatedAt) .map((worker) => create(WorkerSchema, { id: { value: worker.id }, displayName: worker.displayName, }), ); .map((w) => worker.mask(req.readMask, worker.fromDBEntry(w))); await tx.done;
-