@keyneom/sync-kit 0.2.0-rc.0 → 0.2.0-rc.6
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/README.md +15 -11
- package/dist/auth/google-web/cache.d.ts +46 -0
- package/dist/auth/google-web/cache.d.ts.map +1 -0
- package/dist/auth/google-web/cache.js +111 -0
- package/dist/auth/google-web/cache.js.map +1 -0
- package/dist/sharing/change-detector.d.ts +40 -0
- package/dist/sharing/change-detector.d.ts.map +1 -0
- package/dist/sharing/change-detector.js +96 -0
- package/dist/sharing/change-detector.js.map +1 -0
- package/dist/sharing/checkpoint.d.ts +32 -0
- package/dist/sharing/checkpoint.d.ts.map +1 -0
- package/dist/sharing/checkpoint.js +2 -0
- package/dist/sharing/checkpoint.js.map +1 -0
- package/dist/sharing/controller.d.ts +44 -1
- package/dist/sharing/controller.d.ts.map +1 -1
- package/dist/sharing/controller.js +188 -1
- package/dist/sharing/controller.js.map +1 -1
- package/dist/sharing/index.d.ts +4 -1
- package/dist/sharing/index.d.ts.map +1 -1
- package/dist/sharing/index.js +2 -0
- package/dist/sharing/index.js.map +1 -1
- package/dist/sharing/join.d.ts +56 -0
- package/dist/sharing/join.d.ts.map +1 -0
- package/dist/sharing/join.js +153 -0
- package/dist/sharing/join.js.map +1 -0
- package/dist/sharing/lifecycle.d.ts +20 -0
- package/dist/sharing/lifecycle.d.ts.map +1 -0
- package/dist/sharing/lifecycle.js +55 -0
- package/dist/sharing/lifecycle.js.map +1 -0
- package/dist/sharing/registry-indexeddb.d.ts +21 -0
- package/dist/sharing/registry-indexeddb.d.ts.map +1 -0
- package/dist/sharing/registry-indexeddb.js +60 -0
- package/dist/sharing/registry-indexeddb.js.map +1 -0
- package/dist/sharing/transport.d.ts +12 -0
- package/dist/sharing/transport.d.ts.map +1 -1
- package/dist/stores/google-drive/app-folders.d.ts +19 -0
- package/dist/stores/google-drive/app-folders.d.ts.map +1 -0
- package/dist/stores/google-drive/app-folders.js +38 -0
- package/dist/stores/google-drive/app-folders.js.map +1 -0
- package/dist/stores/google-drive/folder-name.d.ts +16 -0
- package/dist/stores/google-drive/folder-name.d.ts.map +1 -0
- package/dist/stores/google-drive/folder-name.js +37 -0
- package/dist/stores/google-drive/folder-name.js.map +1 -0
- package/dist/stores/google-drive/index.d.ts +22 -0
- package/dist/stores/google-drive/index.d.ts.map +1 -1
- package/dist/stores/google-drive/index.js +66 -0
- package/dist/stores/google-drive/index.js.map +1 -1
- package/dist/stores/google-drive/sharing.d.ts +5 -1
- package/dist/stores/google-drive/sharing.d.ts.map +1 -1
- package/dist/stores/google-drive/sharing.js +113 -6
- package/dist/stores/google-drive/sharing.js.map +1 -1
- package/package.json +15 -4
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { SyncKitError } from "../core/errors.js";
|
|
2
|
+
export const SHARING_JOIN_MARKER_PARAM = "sync-kit-join";
|
|
3
|
+
export const SHARING_JOIN_EXCHANGE_PARAM = "sync-kit-exchange";
|
|
4
|
+
export const SHARING_JOIN_FOLDER_PARAM = "sync-kit-folder";
|
|
5
|
+
/** Common consumer alias: `?sync=join&folder=…` with optional `exchange=…` */
|
|
6
|
+
export const SHARING_JOIN_SHORT_MARKER_PARAM = "sync";
|
|
7
|
+
export const SHARING_JOIN_SHORT_MARKER_VALUE = "join";
|
|
8
|
+
export const SHARING_JOIN_SHORT_EXCHANGE_PARAM = "exchange";
|
|
9
|
+
export const SHARING_JOIN_SHORT_FOLDER_PARAM = "folder";
|
|
10
|
+
/**
|
|
11
|
+
* Parses a join URL or query string. Returns null when the input is not a
|
|
12
|
+
* recognized sharing join link. The app folder ID is required; exchange ID is
|
|
13
|
+
* optional and only needed to disambiguate multiple pending invitations.
|
|
14
|
+
*/
|
|
15
|
+
export function parseSharingJoinParams(input) {
|
|
16
|
+
const params = toSearchParams(input);
|
|
17
|
+
const appFolderId = readJoinParam(params, [
|
|
18
|
+
SHARING_JOIN_FOLDER_PARAM,
|
|
19
|
+
SHARING_JOIN_SHORT_FOLDER_PARAM,
|
|
20
|
+
]);
|
|
21
|
+
if (!appFolderId || !isJoinMarkerPresent(params))
|
|
22
|
+
return null;
|
|
23
|
+
const exchangeId = readJoinParam(params, [
|
|
24
|
+
SHARING_JOIN_EXCHANGE_PARAM,
|
|
25
|
+
SHARING_JOIN_SHORT_EXCHANGE_PARAM,
|
|
26
|
+
]);
|
|
27
|
+
return {
|
|
28
|
+
appFolderId,
|
|
29
|
+
...(exchangeId ? { exchangeId } : {}),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Builds join query params for appending to a consumer landing URL.
|
|
34
|
+
*/
|
|
35
|
+
export function buildSharingJoinSearchParams(params, style = "sync-kit") {
|
|
36
|
+
if (!params.appFolderId.trim()) {
|
|
37
|
+
throw new TypeError("appFolderId must not be empty.");
|
|
38
|
+
}
|
|
39
|
+
const search = new URLSearchParams();
|
|
40
|
+
if (style === "short") {
|
|
41
|
+
search.set(SHARING_JOIN_SHORT_MARKER_PARAM, SHARING_JOIN_SHORT_MARKER_VALUE);
|
|
42
|
+
search.set(SHARING_JOIN_SHORT_FOLDER_PARAM, params.appFolderId);
|
|
43
|
+
if (params.exchangeId?.trim()) {
|
|
44
|
+
search.set(SHARING_JOIN_SHORT_EXCHANGE_PARAM, params.exchangeId);
|
|
45
|
+
}
|
|
46
|
+
return search;
|
|
47
|
+
}
|
|
48
|
+
search.set(SHARING_JOIN_MARKER_PARAM, "1");
|
|
49
|
+
search.set(SHARING_JOIN_FOLDER_PARAM, params.appFolderId);
|
|
50
|
+
if (params.exchangeId?.trim()) {
|
|
51
|
+
search.set(SHARING_JOIN_EXCHANGE_PARAM, params.exchangeId);
|
|
52
|
+
}
|
|
53
|
+
return search;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Appends join params to a consumer landing URL. The landing origin and path
|
|
57
|
+
* remain application-owned.
|
|
58
|
+
*/
|
|
59
|
+
export function appendSharingJoinParams(landingUrl, params, style = "sync-kit") {
|
|
60
|
+
const url = new URL(landingUrl);
|
|
61
|
+
const joinParams = buildSharingJoinSearchParams(params, style);
|
|
62
|
+
for (const [key, value] of joinParams.entries()) {
|
|
63
|
+
url.searchParams.set(key, value);
|
|
64
|
+
}
|
|
65
|
+
return url.toString();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Formats a Drive sharing notification body that points recipients to the app
|
|
69
|
+
* join flow instead of relying on Google's folder-only notification.
|
|
70
|
+
*/
|
|
71
|
+
export function formatSharingInviteEmailMessage(options) {
|
|
72
|
+
if (!options.joinUrl.trim()) {
|
|
73
|
+
throw new TypeError("joinUrl must not be empty.");
|
|
74
|
+
}
|
|
75
|
+
if (!options.appDisplayName.trim()) {
|
|
76
|
+
throw new TypeError("appDisplayName must not be empty.");
|
|
77
|
+
}
|
|
78
|
+
const intro = options.intro?.trim() ??
|
|
79
|
+
`You have been invited to share ${options.appDisplayName} data.`;
|
|
80
|
+
return `${intro}\n\nOpen this link to join in ${options.appDisplayName}:\n${options.joinUrl.trim()}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Finds a pending invitation file for a join exchange ID inside the transport's
|
|
84
|
+
* current app folder.
|
|
85
|
+
*/
|
|
86
|
+
export async function findSharingJoinInvitation(transport, exchangeId) {
|
|
87
|
+
if (!exchangeId.trim())
|
|
88
|
+
throw new TypeError("exchangeId must not be empty.");
|
|
89
|
+
const exchanges = await transport.listExchanges({
|
|
90
|
+
exchangeId,
|
|
91
|
+
kind: "invitation",
|
|
92
|
+
});
|
|
93
|
+
const invitationFile = exchanges[0];
|
|
94
|
+
if (!invitationFile)
|
|
95
|
+
return null;
|
|
96
|
+
const invitation = await transport.readInvitation(invitationFile.fileId);
|
|
97
|
+
return { invitationFileId: invitationFile.fileId, invitation };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolves join params against a transport whose app folder already matches
|
|
101
|
+
* `params.appFolderId` (typically via `selectedAppFolderId`). When exchange ID
|
|
102
|
+
* is omitted, the sole pending invitation in the folder is used.
|
|
103
|
+
*/
|
|
104
|
+
export async function resolveSharingJoinInvitation(transport, params) {
|
|
105
|
+
const storage = await transport.ensureStorage();
|
|
106
|
+
if (storage.appFolderId !== params.appFolderId) {
|
|
107
|
+
throw new SyncKitError("configuration", "The transport app folder does not match the join link.");
|
|
108
|
+
}
|
|
109
|
+
if (params.exchangeId) {
|
|
110
|
+
const match = await findSharingJoinInvitation(transport, params.exchangeId);
|
|
111
|
+
if (!match) {
|
|
112
|
+
throw new SyncKitError("not-found", "No invitation matches the join exchange ID.");
|
|
113
|
+
}
|
|
114
|
+
return match;
|
|
115
|
+
}
|
|
116
|
+
const invitations = await transport.listExchanges({ kind: "invitation" });
|
|
117
|
+
if (invitations.length === 0) {
|
|
118
|
+
throw new SyncKitError("not-found", "No pending invitation was found in the shared app folder.");
|
|
119
|
+
}
|
|
120
|
+
if (invitations.length > 1) {
|
|
121
|
+
throw new SyncKitError("state", "Multiple pending invitations were found; include exchangeId in the join link.");
|
|
122
|
+
}
|
|
123
|
+
const invitationFile = invitations[0];
|
|
124
|
+
if (!invitationFile) {
|
|
125
|
+
throw new SyncKitError("not-found", "No pending invitation was found in the shared app folder.");
|
|
126
|
+
}
|
|
127
|
+
const invitation = await transport.readInvitation(invitationFile.fileId);
|
|
128
|
+
return { invitationFileId: invitationFile.fileId, invitation };
|
|
129
|
+
}
|
|
130
|
+
function toSearchParams(input) {
|
|
131
|
+
if (input instanceof URLSearchParams)
|
|
132
|
+
return input;
|
|
133
|
+
if (input.startsWith("?"))
|
|
134
|
+
return new URLSearchParams(input.slice(1));
|
|
135
|
+
if (input.includes("://")) {
|
|
136
|
+
return new URL(input).searchParams;
|
|
137
|
+
}
|
|
138
|
+
return new URLSearchParams(input);
|
|
139
|
+
}
|
|
140
|
+
function isJoinMarkerPresent(params) {
|
|
141
|
+
if (params.get(SHARING_JOIN_MARKER_PARAM) === "1")
|
|
142
|
+
return true;
|
|
143
|
+
return params.get(SHARING_JOIN_SHORT_MARKER_PARAM) === SHARING_JOIN_SHORT_MARKER_VALUE;
|
|
144
|
+
}
|
|
145
|
+
function readJoinParam(params, keys) {
|
|
146
|
+
for (const key of keys) {
|
|
147
|
+
const value = params.get(key);
|
|
148
|
+
if (value?.trim())
|
|
149
|
+
return value.trim();
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=join.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/sharing/join.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SharingChangeDetectionResult, SharingSyncCheckpoint } from "./checkpoint.js";
|
|
2
|
+
import { SharingChangeDetector } from "./change-detector.js";
|
|
3
|
+
export type SharingPollBindingOptions = {
|
|
4
|
+
intervalMs?: number;
|
|
5
|
+
pollOnForeground?: boolean;
|
|
6
|
+
minimumBackgroundMs?: number;
|
|
7
|
+
window?: Window;
|
|
8
|
+
document?: Document;
|
|
9
|
+
now?: () => number;
|
|
10
|
+
};
|
|
11
|
+
export type SharingPollController = {
|
|
12
|
+
poll(): Promise<SharingChangeDetectionResult>;
|
|
13
|
+
stop(): void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Foreground polling hook for Tier A sharing change detection. Does not show
|
|
17
|
+
* notifications; applications map events to UI or service-worker messages.
|
|
18
|
+
*/
|
|
19
|
+
export declare function bindSharingPoll(detector: SharingChangeDetector, checkpoint: SharingSyncCheckpoint, onResult: (result: SharingChangeDetectionResult) => void | Promise<void>, options?: SharingPollBindingOptions): SharingPollController;
|
|
20
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/sharing/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,IAAI,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC9C,IAAI,IAAI,IAAI,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,qBAAqB,EACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACxE,OAAO,GAAE,yBAA8B,GACtC,qBAAqB,CA6DvB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Foreground polling hook for Tier A sharing change detection. Does not show
|
|
3
|
+
* notifications; applications map events to UI or service-worker messages.
|
|
4
|
+
*/
|
|
5
|
+
export function bindSharingPoll(detector, checkpoint, onResult, options = {}) {
|
|
6
|
+
const documentImplementation = options.document ?? document;
|
|
7
|
+
const now = options.now ?? Date.now;
|
|
8
|
+
let currentCheckpoint = structuredClone(checkpoint);
|
|
9
|
+
let hiddenAt = null;
|
|
10
|
+
let intervalId = null;
|
|
11
|
+
const poll = async () => {
|
|
12
|
+
const result = await detector.detect(currentCheckpoint);
|
|
13
|
+
currentCheckpoint = result.checkpoint;
|
|
14
|
+
await onResult(result);
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
const startInterval = () => {
|
|
18
|
+
if (intervalId !== null)
|
|
19
|
+
return;
|
|
20
|
+
const intervalMs = options.intervalMs ?? 60_000;
|
|
21
|
+
intervalId = setInterval(() => {
|
|
22
|
+
void poll();
|
|
23
|
+
}, intervalMs);
|
|
24
|
+
};
|
|
25
|
+
const stopInterval = () => {
|
|
26
|
+
if (intervalId === null)
|
|
27
|
+
return;
|
|
28
|
+
clearInterval(intervalId);
|
|
29
|
+
intervalId = null;
|
|
30
|
+
};
|
|
31
|
+
const visibilityChanged = () => {
|
|
32
|
+
if (documentImplementation.visibilityState === "hidden") {
|
|
33
|
+
hiddenAt = now();
|
|
34
|
+
stopInterval();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const timeAway = hiddenAt === null ? 0 : now() - hiddenAt;
|
|
38
|
+
hiddenAt = null;
|
|
39
|
+
if (options.pollOnForeground !== false &&
|
|
40
|
+
timeAway >= (options.minimumBackgroundMs ?? 30_000)) {
|
|
41
|
+
void poll();
|
|
42
|
+
}
|
|
43
|
+
startInterval();
|
|
44
|
+
};
|
|
45
|
+
documentImplementation.addEventListener("visibilitychange", visibilityChanged);
|
|
46
|
+
startInterval();
|
|
47
|
+
return {
|
|
48
|
+
poll,
|
|
49
|
+
stop: () => {
|
|
50
|
+
stopInterval();
|
|
51
|
+
documentImplementation.removeEventListener("visibilitychange", visibilityChanged);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/sharing/lifecycle.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAA+B,EAC/B,UAAiC,EACjC,QAAwE,EACxE,UAAqC,EAAE;IAEvC,MAAM,sBAAsB,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,IAAI,iBAAiB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,UAAU,GAA0C,IAAI,CAAC;IAE7D,MAAM,IAAI,GAAG,KAAK,IAA2C,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxD,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC;QACtC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;QAChD,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,EAAE,CAAC;QACd,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO;QAChC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,sBAAsB,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxD,QAAQ,GAAG,GAAG,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;QAC1D,QAAQ,GAAG,IAAI,CAAC;QAChB,IACE,OAAO,CAAC,gBAAgB,KAAK,KAAK;YAClC,QAAQ,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,MAAM,CAAC,EACnD,CAAC;YACD,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QACD,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,sBAAsB,CAAC,gBAAgB,CACrC,kBAAkB,EAClB,iBAAiB,CAClB,CAAC;IACF,aAAa,EAAE,CAAC;IAEhB,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,GAAG,EAAE;YACT,YAAY,EAAE,CAAC;YACf,sBAAsB,CAAC,mBAAmB,CACxC,kBAAkB,EAClB,iBAAiB,CAClB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SharedBackupRegistry, SharedDatasetRegistryRecord } from "./controller.js";
|
|
2
|
+
/**
|
|
3
|
+
* Optional browser persistence for the protocol dataset registry. Application
|
|
4
|
+
* profile metadata such as display names and switcher labels remain outside
|
|
5
|
+
* sync-kit.
|
|
6
|
+
*/
|
|
7
|
+
export declare class IndexedDbSharedBackupRegistry implements SharedBackupRegistry {
|
|
8
|
+
private readonly options;
|
|
9
|
+
constructor(options?: {
|
|
10
|
+
databaseName?: string;
|
|
11
|
+
storeName?: string;
|
|
12
|
+
indexedDB?: IDBFactory;
|
|
13
|
+
});
|
|
14
|
+
get(datasetId: string): Promise<SharedDatasetRegistryRecord | null>;
|
|
15
|
+
set(record: SharedDatasetRegistryRecord): Promise<void>;
|
|
16
|
+
delete(datasetId: string): Promise<void>;
|
|
17
|
+
private transaction;
|
|
18
|
+
private open;
|
|
19
|
+
private storeName;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=registry-indexeddb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-indexeddb.d.ts","sourceRoot":"","sources":["../../src/sharing/registry-indexeddb.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,qBAAa,6BAA8B,YAAW,oBAAoB;IAEtE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,UAAU,CAAC;KACnB;IAGF,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC;IAQnE,GAAG,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,WAAW;IAoBzB,OAAO,CAAC,IAAI;IAoCZ,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { SyncKitError } from "../core/errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Optional browser persistence for the protocol dataset registry. Application
|
|
4
|
+
* profile metadata such as display names and switcher labels remain outside
|
|
5
|
+
* sync-kit.
|
|
6
|
+
*/
|
|
7
|
+
export class IndexedDbSharedBackupRegistry {
|
|
8
|
+
options;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
async get(datasetId) {
|
|
13
|
+
const stored = await this.transaction("readonly", (store) => store.get(datasetId));
|
|
14
|
+
if (!stored || typeof stored !== "object")
|
|
15
|
+
return null;
|
|
16
|
+
return structuredClone(stored);
|
|
17
|
+
}
|
|
18
|
+
async set(record) {
|
|
19
|
+
await this.transaction("readwrite", (store) => store.put(structuredClone(record)));
|
|
20
|
+
}
|
|
21
|
+
async delete(datasetId) {
|
|
22
|
+
await this.transaction("readwrite", (store) => store.delete(datasetId));
|
|
23
|
+
}
|
|
24
|
+
async transaction(mode, operation) {
|
|
25
|
+
const database = await this.open();
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const transaction = database.transaction(this.storeName(), mode);
|
|
28
|
+
const request = operation(transaction.objectStore(this.storeName()));
|
|
29
|
+
request.onsuccess = () => resolve(request.result);
|
|
30
|
+
request.onerror = () => reject(new SyncKitError("state", "IndexedDB shared-backup registry failed.", {
|
|
31
|
+
cause: request.error,
|
|
32
|
+
}));
|
|
33
|
+
transaction.oncomplete = () => database.close();
|
|
34
|
+
transaction.onabort = () => database.close();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
open() {
|
|
38
|
+
const indexedDBImplementation = this.options.indexedDB ??
|
|
39
|
+
(typeof indexedDB === "undefined" ? undefined : indexedDB);
|
|
40
|
+
if (!indexedDBImplementation) {
|
|
41
|
+
return Promise.reject(new SyncKitError("configuration", "IndexedDB is required for shared-backup registry storage."));
|
|
42
|
+
}
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const request = indexedDBImplementation.open(this.options.databaseName ?? "sync-kit-shared-backups", 1);
|
|
45
|
+
request.onupgradeneeded = () => {
|
|
46
|
+
if (!request.result.objectStoreNames.contains(this.storeName())) {
|
|
47
|
+
request.result.createObjectStore(this.storeName(), {
|
|
48
|
+
keyPath: "datasetId",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
request.onsuccess = () => resolve(request.result);
|
|
53
|
+
request.onerror = () => reject(new SyncKitError("state", "IndexedDB shared-backup registry could not be opened.", { cause: request.error }));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
storeName() {
|
|
57
|
+
return this.options.storeName ?? "registry";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=registry-indexeddb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-indexeddb.js","sourceRoot":"","sources":["../../src/sharing/registry-indexeddb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { SharedBackupEnvelopeV1, SharingInvitationV1, SharingPublicKeyResponseV1, SharingRole } from "./index.js";
|
|
2
|
+
import type { SharedDatasetHead } from "./checkpoint.js";
|
|
3
|
+
export type { SharedDatasetHead } from "./checkpoint.js";
|
|
2
4
|
export type SharedBackupStorage = {
|
|
3
5
|
appFolderId: string;
|
|
4
6
|
exchangesFolderId: string;
|
|
@@ -29,6 +31,12 @@ export type SharedDatasetPermission = {
|
|
|
29
31
|
permissionId?: string;
|
|
30
32
|
role: "reader" | "writer";
|
|
31
33
|
};
|
|
34
|
+
export type SharedDatasetDrivePermission = {
|
|
35
|
+
permissionId: string;
|
|
36
|
+
role: "reader" | "writer";
|
|
37
|
+
emailAddress?: string;
|
|
38
|
+
inherited: boolean;
|
|
39
|
+
};
|
|
32
40
|
/**
|
|
33
41
|
* Client-side transport required by the sharing controller. Implementations
|
|
34
42
|
* may use Google Drive or another provider, but cannot depend on a trusted app
|
|
@@ -40,6 +48,8 @@ export interface SharedBackupTransport {
|
|
|
40
48
|
readDataset(fileId: string): Promise<VersionedSharedDataset>;
|
|
41
49
|
createDataset(datasetId: string, envelope: SharedBackupEnvelopeV1): Promise<VersionedSharedDataset>;
|
|
42
50
|
writeDataset(current: VersionedSharedDataset, envelope: SharedBackupEnvelopeV1): Promise<VersionedSharedDataset>;
|
|
51
|
+
/** Optional: delete a dataset file. Required for controller.deleteDataset. */
|
|
52
|
+
deleteDataset?(fileId: string): Promise<void>;
|
|
43
53
|
grantExchangeAccess(emailAddress: string, options?: {
|
|
44
54
|
sendNotificationEmail?: boolean;
|
|
45
55
|
emailMessage?: string;
|
|
@@ -61,5 +71,7 @@ export interface SharedBackupTransport {
|
|
|
61
71
|
hasInheritedReadAccess?: boolean;
|
|
62
72
|
}): Promise<SharedDatasetPermission>;
|
|
63
73
|
removeDatasetPermission(fileId: string, permissionId: string): Promise<void>;
|
|
74
|
+
listDatasetPermissions(fileId: string): Promise<SharedDatasetDrivePermission[]>;
|
|
75
|
+
listDatasetHeads(): Promise<SharedDatasetHead[]>;
|
|
64
76
|
}
|
|
65
77
|
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/sharing/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,EACZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/sharing/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Authorization } from "../../core/types.js";
|
|
2
|
+
import { GoogleDriveFileStore } from "./index.js";
|
|
3
|
+
export type SyncKitAppFolder = {
|
|
4
|
+
appFolderId: string;
|
|
5
|
+
name: string;
|
|
6
|
+
modifiedTime?: string;
|
|
7
|
+
};
|
|
8
|
+
export type ListAccessibleSyncKitAppFoldersOptions = {
|
|
9
|
+
appId: string;
|
|
10
|
+
authorization: Authorization;
|
|
11
|
+
drive?: GoogleDriveFileStore;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Lists sync-kit app-root folders the signed-in user can access for one
|
|
15
|
+
* application ID. Useful when a recipient has several shared folders with
|
|
16
|
+
* similar titles and needs to pick or disambiguate them in app UI.
|
|
17
|
+
*/
|
|
18
|
+
export declare function listAccessibleSyncKitAppFolders(options: ListAccessibleSyncKitAppFoldersOptions): Promise<SyncKitAppFolder[]>;
|
|
19
|
+
//# sourceMappingURL=app-folders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-folders.d.ts","sourceRoot":"","sources":["../../../src/stores/google-drive/app-folders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyB7B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { GoogleDriveFileStore, SYNC_KIT_APP_ID_PROPERTY, SYNC_KIT_KIND_PROPERTY, } from "./index.js";
|
|
2
|
+
const DRIVE_FOLDER_MIME_TYPE = "application/vnd.google-apps.folder";
|
|
3
|
+
/**
|
|
4
|
+
* Lists sync-kit app-root folders the signed-in user can access for one
|
|
5
|
+
* application ID. Useful when a recipient has several shared folders with
|
|
6
|
+
* similar titles and needs to pick or disambiguate them in app UI.
|
|
7
|
+
*/
|
|
8
|
+
export async function listAccessibleSyncKitAppFolders(options) {
|
|
9
|
+
if (!options.appId.trim())
|
|
10
|
+
throw new TypeError("appId must not be empty.");
|
|
11
|
+
const drive = options.drive ?? new GoogleDriveFileStore();
|
|
12
|
+
const folders = [];
|
|
13
|
+
let pageToken;
|
|
14
|
+
do {
|
|
15
|
+
const page = await drive.list(options.authorization, {
|
|
16
|
+
appProperties: {
|
|
17
|
+
[SYNC_KIT_APP_ID_PROPERTY]: options.appId,
|
|
18
|
+
[SYNC_KIT_KIND_PROPERTY]: "app-root",
|
|
19
|
+
},
|
|
20
|
+
...(pageToken ? { pageToken } : {}),
|
|
21
|
+
});
|
|
22
|
+
for (const file of page.files) {
|
|
23
|
+
if (isAppRootFolder(file)) {
|
|
24
|
+
folders.push({
|
|
25
|
+
appFolderId: file.fileId,
|
|
26
|
+
name: file.name,
|
|
27
|
+
...(file.modifiedTime ? { modifiedTime: file.modifiedTime } : {}),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
pageToken = page.nextPageToken;
|
|
32
|
+
} while (pageToken);
|
|
33
|
+
return folders.sort((left, right) => left.name.localeCompare(right.name));
|
|
34
|
+
}
|
|
35
|
+
function isAppRootFolder(file) {
|
|
36
|
+
return file.mimeType === DRIVE_FOLDER_MIME_TYPE;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=app-folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-folders.js","sourceRoot":"","sources":["../../../src/stores/google-drive/app-folders.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GAEvB,MAAM,YAAY,CAAC;AAEpB,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAcpE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAA+C;IAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,oBAAoB,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,IAAI,SAA6B,CAAC;IAClC,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YACnD,aAAa,EAAE;gBACb,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC,KAAK;gBACzC,CAAC,sBAAsB,CAAC,EAAE,UAAU;aACrC;YACD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACX,WAAW,EAAE,IAAI,CAAC,MAAM;oBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;IACjC,CAAC,QAAQ,SAAS,EAAE;IACpB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe,CAAC,IAAuB;IAC9C,OAAO,IAAI,CAAC,QAAQ,KAAK,sBAAsB,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type SyncKitFolderNameInput = {
|
|
2
|
+
appDisplayName: string;
|
|
3
|
+
profileLabel: string;
|
|
4
|
+
ownerLabel?: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Sanitizes a human-readable Google Drive folder title. Names are presentation
|
|
8
|
+
* metadata only; protocol identity uses folder IDs and app properties.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sanitizeDriveFolderName(name: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Builds a consumer-facing app-folder title from app branding, a user-chosen
|
|
13
|
+
* profile label, and optional owner disambiguation for shared views.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildSyncKitFolderName(input: SyncKitFolderNameInput): string;
|
|
16
|
+
//# sourceMappingURL=folder-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-name.d.ts","sourceRoot":"","sources":["../../../src/stores/google-drive/folder-name.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAY5E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const DRIVE_FOLDER_NAME_MAX_LENGTH = 200;
|
|
2
|
+
const INVALID_DRIVE_FOLDER_CHARS = /[\u0000-\u001f\\/]/g;
|
|
3
|
+
/**
|
|
4
|
+
* Sanitizes a human-readable Google Drive folder title. Names are presentation
|
|
5
|
+
* metadata only; protocol identity uses folder IDs and app properties.
|
|
6
|
+
*/
|
|
7
|
+
export function sanitizeDriveFolderName(name) {
|
|
8
|
+
const collapsed = name
|
|
9
|
+
.replace(INVALID_DRIVE_FOLDER_CHARS, " ")
|
|
10
|
+
.replace(/\s+/g, " ")
|
|
11
|
+
.trim();
|
|
12
|
+
if (collapsed.length === 0) {
|
|
13
|
+
throw new TypeError("The Drive folder name must not be empty.");
|
|
14
|
+
}
|
|
15
|
+
if (collapsed.length <= DRIVE_FOLDER_NAME_MAX_LENGTH) {
|
|
16
|
+
return collapsed;
|
|
17
|
+
}
|
|
18
|
+
return collapsed.slice(0, DRIVE_FOLDER_NAME_MAX_LENGTH).trimEnd();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builds a consumer-facing app-folder title from app branding, a user-chosen
|
|
22
|
+
* profile label, and optional owner disambiguation for shared views.
|
|
23
|
+
*/
|
|
24
|
+
export function buildSyncKitFolderName(input) {
|
|
25
|
+
if (!input.appDisplayName.trim()) {
|
|
26
|
+
throw new TypeError("appDisplayName must not be empty.");
|
|
27
|
+
}
|
|
28
|
+
if (!input.profileLabel.trim()) {
|
|
29
|
+
throw new TypeError("profileLabel must not be empty.");
|
|
30
|
+
}
|
|
31
|
+
const base = `${input.appDisplayName.trim()} — ${input.profileLabel.trim()}`;
|
|
32
|
+
const withOwner = input.ownerLabel?.trim()
|
|
33
|
+
? `${base} (${input.ownerLabel.trim()})`
|
|
34
|
+
: base;
|
|
35
|
+
return sanitizeDriveFolderName(withOwner);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=folder-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-name.js","sourceRoot":"","sources":["../../../src/stores/google-drive/folder-name.ts"],"names":[],"mappings":"AAAA,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;AAQzD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,SAAS,GAAG,IAAI;SACnB,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC;SACxC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IACV,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,IAAI,4BAA4B,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA6B;IAClE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;QACxC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG;QACxC,CAAC,CAAC,IAAI,CAAC;IACT,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Authorization, CloudStore, StoredEnvelope } from "../../core/types.js";
|
|
2
|
+
import { SyncKitError } from "../../core/errors.js";
|
|
2
3
|
export declare const SYNC_KIT_APP_ID_PROPERTY = "sync-kit-app-id";
|
|
3
4
|
export declare const SYNC_KIT_KIND_PROPERTY = "sync-kit-kind";
|
|
4
5
|
export declare const SYNC_KIT_DATASET_ID_PROPERTY = "sync-kit-dataset-id";
|
|
@@ -108,6 +109,20 @@ export type DriveFileWriteResult = {
|
|
|
108
109
|
fileId: string;
|
|
109
110
|
etag?: string;
|
|
110
111
|
};
|
|
112
|
+
export type DriveV2WriteHead = {
|
|
113
|
+
etag: string;
|
|
114
|
+
headRevisionId?: string;
|
|
115
|
+
};
|
|
116
|
+
export type DriveV2WriteResult = {
|
|
117
|
+
fileId: string;
|
|
118
|
+
etag: string;
|
|
119
|
+
headRevisionId?: string;
|
|
120
|
+
};
|
|
121
|
+
/** Thrown when Drive v2 endpoints are gone; callers may fall back to v3. */
|
|
122
|
+
export declare class DriveV2UnavailableError extends SyncKitError {
|
|
123
|
+
constructor(options?: ErrorOptions);
|
|
124
|
+
}
|
|
125
|
+
export declare function isDriveV2UnavailableError(value: unknown): value is DriveV2UnavailableError;
|
|
111
126
|
export type DrivePermission = {
|
|
112
127
|
permissionId: string;
|
|
113
128
|
type: "user" | "group" | "domain" | "anyone";
|
|
@@ -138,6 +153,11 @@ export declare class GoogleDriveFileStore {
|
|
|
138
153
|
create(name: string, content: DriveContent, authorization: Authorization, options?: GoogleDriveFileCreateOptions): Promise<string>;
|
|
139
154
|
createFolder(name: string, authorization: Authorization, options?: Omit<GoogleDriveFileCreateOptions, "contentType">): Promise<string>;
|
|
140
155
|
write(fileId: string, content: DriveContent, authorization: Authorization, options?: string | GoogleDriveFileWriteOptions): Promise<DriveFileWriteResult>;
|
|
156
|
+
getV2WriteHead(fileId: string, authorization: Authorization): Promise<DriveV2WriteHead>;
|
|
157
|
+
writeV2Media(fileId: string, content: DriveContent, authorization: Authorization, options: {
|
|
158
|
+
ifMatch: string;
|
|
159
|
+
contentType?: string;
|
|
160
|
+
}): Promise<DriveV2WriteResult>;
|
|
141
161
|
share(fileId: string, emailAddress: string, role: DriveFileRole, authorization: Authorization, options?: {
|
|
142
162
|
sendNotificationEmail?: boolean;
|
|
143
163
|
emailMessage?: string;
|
|
@@ -186,4 +206,6 @@ export declare class GoogleDriveFileSnapshotStore<E> implements CloudStore<E, Au
|
|
|
186
206
|
private fileProperties;
|
|
187
207
|
private assertAppId;
|
|
188
208
|
}
|
|
209
|
+
export { buildSyncKitFolderName, sanitizeDriveFolderName, type SyncKitFolderNameInput, } from "./folder-name.js";
|
|
210
|
+
export { listAccessibleSyncKitAppFolders, type ListAccessibleSyncKitAppFoldersOptions, type SyncKitAppFolder, } from "./app-folders.js";
|
|
189
211
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/google-drive/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACf,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/google-drive/index.ts"],"names":[],"mappings":"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"}
|