Bỏ qua, tới nội dung chính

Hướng dẫn

Chia sẻ bản sao hồ sơ

Gửi bản sao đã mã hoá của một hồ sơ cho đúng một người — bản sao mang gì, người nhận chấp nhận thế nào, và thu hồi làm được gì, không làm được gì.

Xem dạng Markdown

Browlix có ba cách khác nhau để trao hồ sơ cho người khác, và không bao giờ lẫn với nhau:

  • Bản sao (bài này): người nhận có một hồ sơ mới, độc lập của riêng họ, làm từ một bản bạn đã lưu. Hồ sơ của bạn không đổi, và hai bên không bao giờ đồng bộ với nhau.
  • Quyền đội nhóm: mời người đó vào workspace của bạn và giới hạn theo nhóm (workspace và vai trò). Họ dùng chính hồ sơ của bạn; mọi thay đổi là của chung.
  • Quyền sở hữu workspace: giao cả workspace — mọi hồ sơ, máy chạy và khoá — cho một thành viên khác. Chỉ chủ sở hữu làm được, và người mới phải chấp nhận. Một hồ sơ riêng lẻ không bao giờ được "chuyển": nó chỉ tới tay người khác dưới dạng bản sao.

Bản sao mang gì

  • Luôn có: cấu hình — vân tay, ngôn ngữ, múi giờ, trang khởi động và tuỳ chọn trình duyệt.
  • Phần bạn đánh dấu, lấy từ revision đã commit mới nhất của hồ sơ: cookie, Local Storage, IndexedDB, Service Worker, tiện ích và dữ liệu tiện ích, dấu trang, lịch sử, tab đang mở, mật khẩu đã lưu. Chỉ đánh dấu được loại mà revision đó có.
  • Không bao giờ: proxy, tài khoản đã liên kết, khoá của workspace bạn. Người nhận tự gán proxy của họ; bản sao của một hồ sơ dùng proxy chỉ mở được khi họ gán xong (Browlix không bao giờ tự chuyển sang kết nối trực tiếp).

Dữ liệu một máy chưa đồng bộ thì không có trong bản sao. shares.preview nêu tên những máy đó, để bạn mở rồi đóng hồ sơ ở đó trước nếu muốn bản sao có phần dữ liệu ấy.

Quyền được cơ sở dữ liệu kiểm theo từng loại, trước khi đóng gói bất cứ thứ gì:

Bạn đánh dấuBạn cần
cấu hình, tiện ích, dấu trang, lịch sử, tab đang mởshare.manage
cookie, Local Storage, IndexedDB, Service Workershare.manage + share.session
mật khẩu đã lưushare.manage + profile.export_sensitive

Gửi bản sao

const preview = await bx.call("shares.preview", { path: { id: profileId } });
// preview.data: revision, các loại dữ liệu nó có, quyền của bạn cho phép gì, máy nào chuẩn bị được ngay

const { data } = await bx.call("shares.create", {
  body: {
    profile_id: profileId,
    recipient_email: "ana@example.com",
    categories: ["cookies", "local_storage", "bookmarks"],
    expires_in_days: 7,
    message: "Shop account for the weekend campaign",
  },
});
console.log(data.package.state); // "preparing", hoặc "available" nếu bản sao chỉ có cấu hình

Bản sao gửi tới một email. Chỉ người đăng nhập Browlix bằng đúng email đã xác minh đó mới thấy và chấp nhận được — không có đường link nào ai cầm cũng mở được.

Sau đó một máy chạy của bạn (worker 0.14.0 trở lên) chuẩn bị gói: tải revision đã ghim, chỉ giữ các loại bạn đánh dấu, mã hoá lại cookie và mật khẩu đã lưu bằng một khoá chỉ thuộc về bản sao này, rồi tải lên dưới dạng đã mã hoá. Khoá riêng của hồ sơ bạn không bao giờ rời máy của bạn. Khi chưa có máy nào trực tuyến, bản sao chờ (progress.waiting_for_machine), và shares.list hiện tiến độ.

Nhận bản sao

ts
const inbox = await bx.call("shares.inbox", {});
const offer = inbox.data.find((p) => p.state === "available");

if (offer) {
  const accepted = await bx.call("shares.accept", { path: { id: offer.id }, body: { name: "Shop (from Ana)" } });
  console.log(accepted.data.profile_id); // id hồ sơ mới trong workspace của bạn
}
  • Chưa chấp nhận thì không tải gì. Trước đó bạn thấy ai gửi, từ workspace nào, bản sao mang loại dữ liệu nào và hồ sơ gốc có dùng proxy không.
  • Chấp nhận sẽ tạo một hồ sơ mới trong workspace của bạn (id mới; có thể chọn group_id) và một máy chạy của bạn nhập dữ liệu thành revision 1 của nó. Hồ sơ mở được khi nhập xong — trước đó, mở sẽ nhận BUSY.
  • shares.decline từ chối; người gửi thấy "bị từ chối" và gói bị xoá.

Thu hồi, hết hạn và điều không đảo ngược được

  • Trước khi giao, shares.revoke dừng mọi thứ: máy đang chuẩn bị hoặc đang nhập bị từ chối ở bước kế tiếp và xoá tệp làm việc, bản nhập dở bị gỡ khỏi workspace người nhận.
  • Sau khi giao, bản sao là của người nhận. Thu hồi sẽ nhận CONFLICT: Browlix không thể gọi về hay xoá một hồ sơ giờ đã là của người khác, và không giả vờ làm được.
  • Bản sao không được chấp nhận trong expires_in_days (1–30 ngày) sẽ hết hạn và gói bị xoá.

Lỗi bạn sẽ gặp

MãKhi nào
FORBIDDENvai trò hoặc khoá thiếu một quyền mà loại dữ liệu đã đánh dấu cần
VALIDATION_FAILEDloại dữ liệu revision đã ghim không có, email hoặc hạn không hợp lệ
NOT_FOUNDbản sao không gửi tới email đã xác minh của bạn
CONFLICTbản sao không còn khả dụng (đã thu hồi, hết hạn, bị từ chối, đã được nhận) hoặc đã giao khi bạn thu hồi
BUSYmở một bản sao nhận được khi chưa nhập xong

Mọi bước đều có trong nhật ký kiểm toán của workspace gửi (share.create, share.prepared, share.accept, share.delivered, hoặc share.revoked / share.declined / share.expired / share.failed) và workspace nhận ghi share.receive rồi share.receive.delivered (hoặc kết cục khác) trên hồ sơ mới — kèm revision và loại dữ liệu, không bao giờ kèm chính dữ liệu.