@keyneom/sync-kit 0.1.1 → 0.2.0-rc.0

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.
Files changed (68) hide show
  1. package/README.md +99 -8
  2. package/dist/auth/google-web/identity.d.ts +49 -0
  3. package/dist/auth/google-web/identity.d.ts.map +1 -0
  4. package/dist/auth/google-web/identity.js +102 -0
  5. package/dist/auth/google-web/identity.js.map +1 -0
  6. package/dist/auth/google-web/index.d.ts +1 -0
  7. package/dist/auth/google-web/index.d.ts.map +1 -1
  8. package/dist/auth/google-web/index.js +1 -0
  9. package/dist/auth/google-web/index.js.map +1 -1
  10. package/dist/core/errors.d.ts +1 -1
  11. package/dist/core/errors.d.ts.map +1 -1
  12. package/dist/core/errors.js +22 -1
  13. package/dist/core/errors.js.map +1 -1
  14. package/dist/crypto/canonical.d.ts +5 -0
  15. package/dist/crypto/canonical.d.ts.map +1 -1
  16. package/dist/crypto/canonical.js +8 -1
  17. package/dist/crypto/canonical.js.map +1 -1
  18. package/dist/crypto/envelope.d.ts.map +1 -1
  19. package/dist/crypto/envelope.js +1 -0
  20. package/dist/crypto/envelope.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/keys/web-passkey/index.d.ts +8 -2
  26. package/dist/keys/web-passkey/index.d.ts.map +1 -1
  27. package/dist/keys/web-passkey/index.js +32 -10
  28. package/dist/keys/web-passkey/index.js.map +1 -1
  29. package/dist/sharing/account-binding.d.ts +57 -0
  30. package/dist/sharing/account-binding.d.ts.map +1 -0
  31. package/dist/sharing/account-binding.js +305 -0
  32. package/dist/sharing/account-binding.js.map +1 -0
  33. package/dist/sharing/controller.d.ts +139 -0
  34. package/dist/sharing/controller.d.ts.map +1 -0
  35. package/dist/sharing/controller.js +549 -0
  36. package/dist/sharing/controller.js.map +1 -0
  37. package/dist/sharing/index.d.ts +119 -0
  38. package/dist/sharing/index.d.ts.map +1 -0
  39. package/dist/sharing/index.js +360 -0
  40. package/dist/sharing/index.js.map +1 -0
  41. package/dist/sharing/transport.d.ts +65 -0
  42. package/dist/sharing/transport.d.ts.map +1 -0
  43. package/dist/sharing/transport.js +2 -0
  44. package/dist/sharing/transport.js.map +1 -0
  45. package/dist/sharing/web-crypto.d.ts +68 -0
  46. package/dist/sharing/web-crypto.d.ts.map +1 -0
  47. package/dist/sharing/web-crypto.js +645 -0
  48. package/dist/sharing/web-crypto.js.map +1 -0
  49. package/dist/sharing/web-passkey.d.ts +68 -0
  50. package/dist/sharing/web-passkey.d.ts.map +1 -0
  51. package/dist/sharing/web-passkey.js +303 -0
  52. package/dist/sharing/web-passkey.js.map +1 -0
  53. package/dist/snapshot/controller.d.ts.map +1 -1
  54. package/dist/snapshot/controller.js +4 -8
  55. package/dist/snapshot/controller.js.map +1 -1
  56. package/dist/stores/google-drive/index.d.ts +147 -1
  57. package/dist/stores/google-drive/index.d.ts.map +1 -1
  58. package/dist/stores/google-drive/index.js +397 -0
  59. package/dist/stores/google-drive/index.js.map +1 -1
  60. package/dist/stores/google-drive/picker.d.ts +89 -0
  61. package/dist/stores/google-drive/picker.d.ts.map +1 -0
  62. package/dist/stores/google-drive/picker.js +179 -0
  63. package/dist/stores/google-drive/picker.js.map +1 -0
  64. package/dist/stores/google-drive/sharing.d.ts +55 -0
  65. package/dist/stores/google-drive/sharing.d.ts.map +1 -0
  66. package/dist/stores/google-drive/sharing.js +295 -0
  67. package/dist/stores/google-drive/sharing.js.map +1 -0
  68. package/package.json +67 -10
@@ -1,14 +1,21 @@
1
1
  import type { Authorization, CloudStore, StoredEnvelope } from "../../core/types.js";
2
+ export declare const SYNC_KIT_APP_ID_PROPERTY = "sync-kit-app-id";
3
+ export declare const SYNC_KIT_KIND_PROPERTY = "sync-kit-kind";
4
+ export declare const SYNC_KIT_DATASET_ID_PROPERTY = "sync-kit-dataset-id";
5
+ export declare const SYNC_KIT_PROTOCOL_PROPERTY = "sync-kit-protocol";
6
+ export declare function defaultSyncKitAppFolderName(appId: string): string;
2
7
  export type DriveObject = {
3
8
  fileId: string;
4
9
  name: string;
5
10
  modifiedTime?: string;
6
11
  };
7
- export type GoogleDriveAppDataOptions = {
12
+ export type GoogleDriveStoreOptions = {
8
13
  fetch?: typeof fetch;
9
14
  randomUUID?: () => string;
10
15
  onUnauthorized?: () => void;
16
+ resourceKeys?: Record<string, string>;
11
17
  };
18
+ export type GoogleDriveAppDataOptions = GoogleDriveStoreOptions;
12
19
  export type DriveContent = string | Blob | ArrayBuffer | Uint8Array<ArrayBuffer>;
13
20
  export declare class GoogleDriveAppDataStore {
14
21
  private readonly options;
@@ -40,4 +47,143 @@ export declare class GoogleDriveSnapshotStore<E> implements CloudStore<E, Author
40
47
  delete(appId: string, fileId: string, authorization: Authorization): Promise<void>;
41
48
  private assertAppId;
42
49
  }
50
+ export type DriveFileRole = "reader" | "writer";
51
+ export type DriveFileMetadata = DriveObject & {
52
+ mimeType?: string;
53
+ parents?: string[];
54
+ appProperties?: Record<string, string>;
55
+ createdTime?: string;
56
+ version?: string;
57
+ headRevisionId?: string;
58
+ etag?: string;
59
+ inheritedPermissionsDisabled?: boolean;
60
+ owners?: DriveUser[];
61
+ sharingUser?: DriveUser;
62
+ lastModifyingUser?: DriveUser;
63
+ capabilities?: {
64
+ canEdit?: boolean;
65
+ canShare?: boolean;
66
+ canDelete?: boolean;
67
+ canListChildren?: boolean;
68
+ canDisableInheritedPermissions?: boolean;
69
+ canEnableInheritedPermissions?: boolean;
70
+ };
71
+ };
72
+ export type DriveUser = {
73
+ displayName?: string;
74
+ permissionId?: string;
75
+ emailAddress?: string;
76
+ me?: boolean;
77
+ };
78
+ export type DriveFileProvenanceExpectation = {
79
+ permissionId?: string;
80
+ emailAddress?: string;
81
+ sharingUserPermissionId?: string;
82
+ };
83
+ /**
84
+ * Confirms that a My Drive exchange response is still owned and last modified
85
+ * by the expected Google account. The response content still needs its own
86
+ * cryptographic proof.
87
+ */
88
+ export declare function assertDriveFileProvenance(file: DriveFileMetadata, expected: DriveFileProvenanceExpectation): void;
89
+ export type DriveFileList = {
90
+ files: DriveFileMetadata[];
91
+ nextPageToken?: string;
92
+ };
93
+ export type GoogleDriveFileCreateOptions = {
94
+ parentId?: string;
95
+ contentType?: string;
96
+ appProperties?: Record<string, string>;
97
+ writersCanShare?: boolean;
98
+ };
99
+ export type DriveFileContent = {
100
+ content: string;
101
+ etag?: string;
102
+ };
103
+ export type GoogleDriveFileWriteOptions = {
104
+ contentType?: string;
105
+ ifMatch?: string;
106
+ };
107
+ export type DriveFileWriteResult = {
108
+ fileId: string;
109
+ etag?: string;
110
+ };
111
+ export type DrivePermission = {
112
+ permissionId: string;
113
+ type: "user" | "group" | "domain" | "anyone";
114
+ role: string;
115
+ emailAddress?: string;
116
+ displayName?: string;
117
+ inherited?: boolean;
118
+ };
119
+ /**
120
+ * A per-file Google Drive adapter for user-visible and shareable files.
121
+ *
122
+ * Use it with the non-sensitive `drive.file` scope and a Picker/Open-with flow.
123
+ * It intentionally does not search or request access to the user's whole Drive.
124
+ */
125
+ export declare class GoogleDriveFileStore {
126
+ private readonly options;
127
+ constructor(options?: GoogleDriveStoreOptions);
128
+ get(fileId: string, authorization: Authorization): Promise<DriveFileMetadata>;
129
+ list(authorization: Authorization, options?: {
130
+ parentId?: string;
131
+ appProperties?: Record<string, string>;
132
+ pageToken?: string;
133
+ pageSize?: number;
134
+ }): Promise<DriveFileList>;
135
+ readText(fileId: string, authorization: Authorization): Promise<string>;
136
+ readTextVersioned(fileId: string, authorization: Authorization): Promise<DriveFileContent>;
137
+ readBytes(fileId: string, authorization: Authorization): Promise<Uint8Array>;
138
+ create(name: string, content: DriveContent, authorization: Authorization, options?: GoogleDriveFileCreateOptions): Promise<string>;
139
+ createFolder(name: string, authorization: Authorization, options?: Omit<GoogleDriveFileCreateOptions, "contentType">): Promise<string>;
140
+ write(fileId: string, content: DriveContent, authorization: Authorization, options?: string | GoogleDriveFileWriteOptions): Promise<DriveFileWriteResult>;
141
+ share(fileId: string, emailAddress: string, role: DriveFileRole, authorization: Authorization, options?: {
142
+ sendNotificationEmail?: boolean;
143
+ emailMessage?: string;
144
+ }): Promise<string>;
145
+ removePermission(fileId: string, permissionId: string, authorization: Authorization): Promise<void>;
146
+ listPermissions(fileId: string, authorization: Authorization): Promise<DrivePermission[]>;
147
+ updatePermission(fileId: string, permissionId: string, role: DriveFileRole, authorization: Authorization): Promise<void>;
148
+ setFolderLimitedAccess(folderId: string, enabled: boolean, authorization: Authorization): Promise<void>;
149
+ delete(fileId: string, authorization: Authorization): Promise<void>;
150
+ private request;
151
+ private randomUUID;
152
+ }
153
+ export type GoogleDriveSyncKitFolderOptions = {
154
+ appId: string;
155
+ folderName?: string;
156
+ parentFolderId?: string;
157
+ drive?: GoogleDriveFileStore;
158
+ };
159
+ export type GoogleDriveSyncKitFolder = {
160
+ appFolderId: string;
161
+ };
162
+ /**
163
+ * Finds or creates a private, app-specific normal-Drive folder. A consumer can
164
+ * explicitly supply a selected parent, but no common cross-app root is needed.
165
+ */
166
+ export declare function ensureGoogleDriveSyncKitFolder(authorization: Authorization, options: GoogleDriveSyncKitFolderOptions): Promise<GoogleDriveSyncKitFolder>;
167
+ export type GoogleDriveFileSnapshotStoreOptions<E> = GoogleDriveSyncKitFolderOptions & {
168
+ filename: string;
169
+ parse(value: string): E;
170
+ serialize?(value: E): string;
171
+ };
172
+ /**
173
+ * Snapshot CloudStore backed by a user-visible normal Drive folder.
174
+ * This is the default storage model for new integrations; legacy consumers can
175
+ * continue using GoogleDriveSnapshotStore with appDataFolder.
176
+ */
177
+ export declare class GoogleDriveFileSnapshotStore<E> implements CloudStore<E, Authorization> {
178
+ private readonly options;
179
+ private readonly drive;
180
+ private folderPromise;
181
+ constructor(options: GoogleDriveFileSnapshotStoreOptions<E>);
182
+ find(appId: string, authorization: Authorization): Promise<StoredEnvelope<E> | null>;
183
+ write(appId: string, envelope: E, authorization: Authorization, existingId?: string): Promise<string>;
184
+ delete(appId: string, fileId: string, authorization: Authorization): Promise<void>;
185
+ private folders;
186
+ private fileProperties;
187
+ private assertAppId;
188
+ }
43
189
  //# 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;AAM7B,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,IAAI,GACJ,WAAW,GACX,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5B,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE,yBAA8B;IAE9D,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA0BxB,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,MAAM,CAAC;IAQZ,SAAS,CACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,UAAU,CAAC;IAQhB,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAC1D,OAAO,CAAC,MAAM,CAAC;IAyCZ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ3D,OAAO;IA8BrB,OAAO,CAAC,UAAU;CAcnB;AAED,MAAM,MAAM,+BAA+B,CAAC,CAAC,IAAI;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC,CAAC;AAEF,qBAAa,wBAAwB,CAAC,CAAC,CACrC,YAAW,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC;IAI3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEnB,OAAO,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAIlE,IAAI,CACR,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAYpC,KAAK,CACH,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,aAAa,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAaZ,MAAM,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC;IAKhB,OAAO,CAAC,WAAW;CAQpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/google-drive/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  import { SyncKitError } from "../../core/errors.js";
2
2
  const DRIVE_API = "https://www.googleapis.com/drive/v3/files";
3
3
  const DRIVE_UPLOAD_API = "https://www.googleapis.com/upload/drive/v3/files";
4
+ const DRIVE_FOLDER_MIME_TYPE = "application/vnd.google-apps.folder";
5
+ export const SYNC_KIT_APP_ID_PROPERTY = "sync-kit-app-id";
6
+ export const SYNC_KIT_KIND_PROPERTY = "sync-kit-kind";
7
+ export const SYNC_KIT_DATASET_ID_PROPERTY = "sync-kit-dataset-id";
8
+ export const SYNC_KIT_PROTOCOL_PROPERTY = "sync-kit-protocol";
9
+ export function defaultSyncKitAppFolderName(appId) {
10
+ return `Sync Kit - ${appId}`;
11
+ }
4
12
  export class GoogleDriveAppDataStore {
5
13
  options;
6
14
  constructor(options = {}) {
@@ -73,6 +81,10 @@ export class GoogleDriveAppDataStore {
73
81
  }
74
82
  const headers = new Headers(init.headers);
75
83
  headers.set("Authorization", `Bearer ${authorization.accessToken}`);
84
+ const resourceKeys = Object.entries(this.options.resourceKeys ?? {});
85
+ if (resourceKeys.length > 0) {
86
+ headers.set("X-Goog-Drive-Resource-Keys", resourceKeys.map(([fileId, key]) => `${fileId}/${key}`).join(","));
87
+ }
76
88
  const response = await fetchImplementation(url, {
77
89
  ...init,
78
90
  headers,
@@ -130,6 +142,391 @@ export class GoogleDriveSnapshotStore {
130
142
  }
131
143
  }
132
144
  }
145
+ /**
146
+ * Confirms that a My Drive exchange response is still owned and last modified
147
+ * by the expected Google account. The response content still needs its own
148
+ * cryptographic proof.
149
+ */
150
+ export function assertDriveFileProvenance(file, expected) {
151
+ if (!expected.permissionId && !expected.emailAddress) {
152
+ throw new TypeError("Expected permissionId or emailAddress is required.");
153
+ }
154
+ if (file.owners?.length !== 1) {
155
+ throw new SyncKitError("authorization", "The exchange response is not a singly owned My Drive file.");
156
+ }
157
+ const owner = file.owners[0];
158
+ if (!owner || !driveUserMatches(owner, expected)) {
159
+ throw new SyncKitError("authorization", "The exchange response is not owned by the expected Google account.");
160
+ }
161
+ if (!file.lastModifyingUser ||
162
+ !driveUserMatches(file.lastModifyingUser, expected)) {
163
+ throw new SyncKitError("authorization", "The exchange response was modified by another Google account.");
164
+ }
165
+ if (expected.sharingUserPermissionId &&
166
+ file.sharingUser?.permissionId !== expected.sharingUserPermissionId) {
167
+ throw new SyncKitError("authorization", "The exchange response has unexpected sharing provenance.");
168
+ }
169
+ }
170
+ /**
171
+ * A per-file Google Drive adapter for user-visible and shareable files.
172
+ *
173
+ * Use it with the non-sensitive `drive.file` scope and a Picker/Open-with flow.
174
+ * It intentionally does not search or request access to the user's whole Drive.
175
+ */
176
+ export class GoogleDriveFileStore {
177
+ options;
178
+ constructor(options = {}) {
179
+ this.options = options;
180
+ }
181
+ async get(fileId, authorization) {
182
+ const params = new URLSearchParams({
183
+ fields: "id,name,mimeType,createdTime,modifiedTime,version,headRevisionId,parents,appProperties,inheritedPermissionsDisabled,owners(displayName,permissionId,emailAddress,me),sharingUser(displayName,permissionId,emailAddress,me),lastModifyingUser(displayName,permissionId,emailAddress,me),capabilities(canEdit,canShare,canDelete,canListChildren,canDisableInheritedPermissions,canEnableInheritedPermissions)",
184
+ supportsAllDrives: "true",
185
+ });
186
+ const response = await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}?${params}`, authorization);
187
+ return driveFileMetadata((await response.json()), response.headers.get("ETag") ?? undefined);
188
+ }
189
+ async list(authorization, options = {}) {
190
+ const clauses = ["trashed = false"];
191
+ if (options.parentId) {
192
+ clauses.push(`'${escapeDriveQuery(options.parentId)}' in parents`);
193
+ }
194
+ for (const [key, value] of Object.entries(options.appProperties ?? {})) {
195
+ clauses.push(`appProperties has { key='${escapeDriveQuery(key)}' and value='${escapeDriveQuery(value)}' }`);
196
+ }
197
+ const params = new URLSearchParams({
198
+ spaces: "drive",
199
+ corpora: "user",
200
+ q: clauses.join(" and "),
201
+ fields: "nextPageToken,files(id,name,mimeType,modifiedTime,version,headRevisionId,parents,appProperties,capabilities(canEdit,canShare,canDelete))",
202
+ pageSize: String(options.pageSize ?? 100),
203
+ supportsAllDrives: "true",
204
+ includeItemsFromAllDrives: "true",
205
+ });
206
+ if (options.pageToken)
207
+ params.set("pageToken", options.pageToken);
208
+ const response = await this.request(`${DRIVE_API}?${params}`, authorization);
209
+ const body = (await response.json());
210
+ return {
211
+ files: (body.files ?? []).map((file) => driveFileMetadata(file)),
212
+ ...(body.nextPageToken ? { nextPageToken: body.nextPageToken } : {}),
213
+ };
214
+ }
215
+ async readText(fileId, authorization) {
216
+ return (await this.readTextVersioned(fileId, authorization)).content;
217
+ }
218
+ async readTextVersioned(fileId, authorization) {
219
+ const response = await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}?alt=media&supportsAllDrives=true`, authorization);
220
+ const content = await response.text();
221
+ const etag = response.headers.get("ETag");
222
+ return {
223
+ content,
224
+ ...(etag ? { etag } : {}),
225
+ };
226
+ }
227
+ async readBytes(fileId, authorization) {
228
+ const response = await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}?alt=media&supportsAllDrives=true`, authorization);
229
+ return new Uint8Array(await response.arrayBuffer());
230
+ }
231
+ async create(name, content, authorization, options = {}) {
232
+ const boundary = `sync-kit-${this.randomUUID()}`;
233
+ const contentType = options.contentType ?? "application/octet-stream";
234
+ const metadata = {
235
+ name,
236
+ ...(options.parentId ? { parents: [options.parentId] } : {}),
237
+ ...(options.appProperties
238
+ ? { appProperties: options.appProperties }
239
+ : {}),
240
+ writersCanShare: options.writersCanShare ?? false,
241
+ };
242
+ const body = new Blob([
243
+ `--${boundary}\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n`,
244
+ JSON.stringify(metadata),
245
+ `\r\n--${boundary}\r\nContent-Type: ${contentType}\r\n\r\n`,
246
+ content,
247
+ `\r\n--${boundary}--`,
248
+ ]);
249
+ const response = await this.request(`${DRIVE_UPLOAD_API}?uploadType=multipart&fields=id&supportsAllDrives=true`, authorization, {
250
+ method: "POST",
251
+ headers: { "Content-Type": `multipart/related; boundary=${boundary}` },
252
+ body,
253
+ });
254
+ return responseFileId(response);
255
+ }
256
+ async createFolder(name, authorization, options = {}) {
257
+ const response = await this.request(`${DRIVE_API}?fields=id&supportsAllDrives=true`, authorization, {
258
+ method: "POST",
259
+ headers: { "Content-Type": "application/json" },
260
+ body: JSON.stringify({
261
+ name,
262
+ mimeType: DRIVE_FOLDER_MIME_TYPE,
263
+ ...(options.parentId ? { parents: [options.parentId] } : {}),
264
+ ...(options.appProperties
265
+ ? { appProperties: options.appProperties }
266
+ : {}),
267
+ writersCanShare: options.writersCanShare ?? false,
268
+ }),
269
+ });
270
+ return responseFileId(response);
271
+ }
272
+ async write(fileId, content, authorization, options = {}) {
273
+ const normalized = typeof options === "string" ? { contentType: options } : options;
274
+ const headers = new Headers({
275
+ "Content-Type": normalized.contentType ?? "application/octet-stream",
276
+ });
277
+ if (normalized.ifMatch)
278
+ headers.set("If-Match", normalized.ifMatch);
279
+ const response = await this.request(`${DRIVE_UPLOAD_API}/${encodeURIComponent(fileId)}?uploadType=media&fields=id&supportsAllDrives=true`, authorization, {
280
+ method: "PATCH",
281
+ headers,
282
+ body: content,
283
+ });
284
+ const etag = response.headers.get("ETag");
285
+ return {
286
+ fileId,
287
+ ...(etag ? { etag } : {}),
288
+ };
289
+ }
290
+ async share(fileId, emailAddress, role, authorization, options = {}) {
291
+ const params = new URLSearchParams({
292
+ fields: "id",
293
+ supportsAllDrives: "true",
294
+ sendNotificationEmail: String(options.sendNotificationEmail ?? true),
295
+ });
296
+ if (options.emailMessage) {
297
+ params.set("emailMessage", options.emailMessage);
298
+ }
299
+ const response = await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}/permissions?${params}`, authorization, {
300
+ method: "POST",
301
+ headers: { "Content-Type": "application/json" },
302
+ body: JSON.stringify({ type: "user", role, emailAddress }),
303
+ });
304
+ return responseFileId(response, "permission");
305
+ }
306
+ async removePermission(fileId, permissionId, authorization) {
307
+ await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}/permissions/${encodeURIComponent(permissionId)}?supportsAllDrives=true`, authorization, { method: "DELETE" });
308
+ }
309
+ async listPermissions(fileId, authorization) {
310
+ const params = new URLSearchParams({
311
+ fields: "permissions(id,type,role,emailAddress,displayName,permissionDetails(inherited))",
312
+ supportsAllDrives: "true",
313
+ });
314
+ const response = await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}/permissions?${params}`, authorization);
315
+ const body = (await response.json());
316
+ return (body.permissions ?? []).map(drivePermission);
317
+ }
318
+ async updatePermission(fileId, permissionId, role, authorization) {
319
+ await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}/permissions/${encodeURIComponent(permissionId)}?supportsAllDrives=true`, authorization, {
320
+ method: "PATCH",
321
+ headers: { "Content-Type": "application/json" },
322
+ body: JSON.stringify({ role }),
323
+ });
324
+ }
325
+ async setFolderLimitedAccess(folderId, enabled, authorization) {
326
+ await this.request(`${DRIVE_API}/${encodeURIComponent(folderId)}?supportsAllDrives=true`, authorization, {
327
+ method: "PATCH",
328
+ headers: { "Content-Type": "application/json" },
329
+ body: JSON.stringify({ inheritedPermissionsDisabled: enabled }),
330
+ });
331
+ }
332
+ async delete(fileId, authorization) {
333
+ await this.request(`${DRIVE_API}/${encodeURIComponent(fileId)}?supportsAllDrives=true`, authorization, { method: "DELETE" });
334
+ }
335
+ async request(url, authorization, init = {}) {
336
+ const fetchImplementation = this.options.fetch ?? globalThis.fetch;
337
+ if (!fetchImplementation) {
338
+ throw new SyncKitError("configuration", "A Fetch API implementation is required.");
339
+ }
340
+ const headers = new Headers(init.headers);
341
+ headers.set("Authorization", `Bearer ${authorization.accessToken}`);
342
+ const resourceKeys = Object.entries(this.options.resourceKeys ?? {});
343
+ if (resourceKeys.length > 0) {
344
+ headers.set("X-Goog-Drive-Resource-Keys", resourceKeys.map(([fileId, key]) => `${fileId}/${key}`).join(","));
345
+ }
346
+ const response = await fetchImplementation(url, { ...init, headers });
347
+ if (!response.ok) {
348
+ if (response.status === 401)
349
+ this.options.onUnauthorized?.();
350
+ const detail = (await response.text()).slice(0, 400);
351
+ throw new SyncKitError(response.status === 409 || response.status === 412
352
+ ? "conflict"
353
+ : response.status === 404
354
+ ? "not-found"
355
+ : "provider", `Google Drive request failed (${response.status}). ${detail}`, { status: response.status });
356
+ }
357
+ return response;
358
+ }
359
+ randomUUID() {
360
+ const implementation = this.options.randomUUID ??
361
+ (typeof crypto === "undefined"
362
+ ? undefined
363
+ : crypto.randomUUID.bind(crypto));
364
+ if (!implementation) {
365
+ throw new SyncKitError("configuration", "Secure UUID generation is unavailable.");
366
+ }
367
+ return implementation();
368
+ }
369
+ }
370
+ /**
371
+ * Finds or creates a private, app-specific normal-Drive folder. A consumer can
372
+ * explicitly supply a selected parent, but no common cross-app root is needed.
373
+ */
374
+ export async function ensureGoogleDriveSyncKitFolder(authorization, options) {
375
+ if (!options.appId.trim())
376
+ throw new TypeError("appId must not be empty.");
377
+ const drive = options.drive ?? new GoogleDriveFileStore();
378
+ const folderName = options.folderName ?? defaultSyncKitAppFolderName(options.appId);
379
+ const appProperties = {
380
+ [SYNC_KIT_KIND_PROPERTY]: "app-root",
381
+ [SYNC_KIT_APP_ID_PROPERTY]: options.appId,
382
+ };
383
+ const appFolderId = (await findFolder(drive, authorization, folderName, options.parentFolderId, appProperties)) ??
384
+ (await drive.createFolder(folderName, authorization, {
385
+ ...(options.parentFolderId
386
+ ? { parentId: options.parentFolderId }
387
+ : {}),
388
+ appProperties,
389
+ }));
390
+ return { appFolderId };
391
+ }
392
+ /**
393
+ * Snapshot CloudStore backed by a user-visible normal Drive folder.
394
+ * This is the default storage model for new integrations; legacy consumers can
395
+ * continue using GoogleDriveSnapshotStore with appDataFolder.
396
+ */
397
+ export class GoogleDriveFileSnapshotStore {
398
+ options;
399
+ drive;
400
+ folderPromise = null;
401
+ constructor(options) {
402
+ this.options = options;
403
+ this.drive = options.drive ?? new GoogleDriveFileStore();
404
+ }
405
+ async find(appId, authorization) {
406
+ this.assertAppId(appId);
407
+ const folders = await this.folders(authorization);
408
+ const listed = await this.drive.list(authorization, {
409
+ parentId: folders.appFolderId,
410
+ appProperties: this.fileProperties(),
411
+ });
412
+ const file = listed.files.find((candidate) => candidate.name === this.options.filename);
413
+ if (!file)
414
+ return null;
415
+ return {
416
+ fileId: file.fileId,
417
+ envelope: this.options.parse(await this.drive.readText(file.fileId, authorization)),
418
+ };
419
+ }
420
+ async write(appId, envelope, authorization, existingId) {
421
+ this.assertAppId(appId);
422
+ const content = this.options.serialize?.(envelope) ?? JSON.stringify(envelope);
423
+ if (existingId) {
424
+ await this.drive.write(existingId, content, authorization, { contentType: "application/json" });
425
+ return existingId;
426
+ }
427
+ const folders = await this.folders(authorization);
428
+ return this.drive.create(this.options.filename, content, authorization, {
429
+ parentId: folders.appFolderId,
430
+ contentType: "application/json",
431
+ appProperties: this.fileProperties(),
432
+ });
433
+ }
434
+ async delete(appId, fileId, authorization) {
435
+ this.assertAppId(appId);
436
+ await this.drive.delete(fileId, authorization);
437
+ }
438
+ folders(authorization) {
439
+ this.folderPromise ??= ensureGoogleDriveSyncKitFolder(authorization, {
440
+ appId: this.options.appId,
441
+ ...(this.options.folderName
442
+ ? { folderName: this.options.folderName }
443
+ : {}),
444
+ ...(this.options.parentFolderId
445
+ ? { parentFolderId: this.options.parentFolderId }
446
+ : {}),
447
+ drive: this.drive,
448
+ }).catch((error) => {
449
+ this.folderPromise = null;
450
+ throw error;
451
+ });
452
+ return this.folderPromise;
453
+ }
454
+ fileProperties() {
455
+ return {
456
+ [SYNC_KIT_KIND_PROPERTY]: "snapshot",
457
+ [SYNC_KIT_APP_ID_PROPERTY]: this.options.appId,
458
+ };
459
+ }
460
+ assertAppId(appId) {
461
+ if (appId !== this.options.appId) {
462
+ throw new SyncKitError("compatibility", `The ${this.options.appId} file store rejected app ID ${appId}.`);
463
+ }
464
+ }
465
+ }
466
+ function driveFileMetadata(value, etag) {
467
+ if (!value.id || !value.name) {
468
+ throw new SyncKitError("provider", "Google Drive returned incomplete file metadata.");
469
+ }
470
+ return {
471
+ fileId: value.id,
472
+ name: value.name,
473
+ ...(value.mimeType ? { mimeType: value.mimeType } : {}),
474
+ ...(value.modifiedTime ? { modifiedTime: value.modifiedTime } : {}),
475
+ ...(value.createdTime ? { createdTime: value.createdTime } : {}),
476
+ ...(value.version ? { version: value.version } : {}),
477
+ ...(value.headRevisionId ? { headRevisionId: value.headRevisionId } : {}),
478
+ ...(etag ? { etag } : {}),
479
+ ...(value.inheritedPermissionsDisabled === undefined
480
+ ? {}
481
+ : {
482
+ inheritedPermissionsDisabled: value.inheritedPermissionsDisabled,
483
+ }),
484
+ ...(value.parents ? { parents: value.parents } : {}),
485
+ ...(value.appProperties ? { appProperties: value.appProperties } : {}),
486
+ ...(value.owners ? { owners: value.owners } : {}),
487
+ ...(value.sharingUser ? { sharingUser: value.sharingUser } : {}),
488
+ ...(value.lastModifyingUser
489
+ ? { lastModifyingUser: value.lastModifyingUser }
490
+ : {}),
491
+ ...(value.capabilities ? { capabilities: value.capabilities } : {}),
492
+ };
493
+ }
494
+ function drivePermission(value) {
495
+ if (!value.id || !value.type || !value.role) {
496
+ throw new SyncKitError("provider", "Google Drive returned incomplete permission metadata.");
497
+ }
498
+ return {
499
+ permissionId: value.id,
500
+ type: value.type,
501
+ role: value.role,
502
+ ...(value.emailAddress ? { emailAddress: value.emailAddress } : {}),
503
+ ...(value.displayName ? { displayName: value.displayName } : {}),
504
+ ...(value.permissionDetails?.some((detail) => detail.inherited)
505
+ ? { inherited: true }
506
+ : {}),
507
+ };
508
+ }
509
+ async function findFolder(drive, authorization, name, parentId, appProperties) {
510
+ const listed = await drive.list(authorization, {
511
+ ...(parentId ? { parentId } : {}),
512
+ appProperties,
513
+ });
514
+ return (listed.files.find((candidate) => candidate.name === name && candidate.mimeType === DRIVE_FOLDER_MIME_TYPE)?.fileId ?? null);
515
+ }
516
+ async function responseFileId(response, kind = "file") {
517
+ const body = (await response.json());
518
+ if (!body.id) {
519
+ throw new SyncKitError("provider", `Google Drive did not return a ${kind} ID.`);
520
+ }
521
+ return body.id;
522
+ }
523
+ function driveUserMatches(user, expected) {
524
+ if (expected.permissionId) {
525
+ return user.permissionId === expected.permissionId;
526
+ }
527
+ return (user.emailAddress?.toLocaleLowerCase() ===
528
+ expected.emailAddress?.toLocaleLowerCase());
529
+ }
133
530
  function escapeDriveQuery(value) {
134
531
  return value.replaceAll("\\", "\\\\").replaceAll("'", "\\'");
135
532
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/google-drive/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/google-drive/index.ts"],"names":[],"mappings":"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"}