gdrivekit 1.0.3 → 1.0.4
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 +29 -1
- package/dist/index.js +157 -223
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,7 +58,8 @@ After that, you **don’t need to call it again** unless you delete your tokens
|
|
|
58
58
|
Once tokens are generated, you can initialize the Google Drive service and perform file operations:
|
|
59
59
|
|
|
60
60
|
```ts
|
|
61
|
-
import { operations
|
|
61
|
+
import { operations } from "gdrivekit";
|
|
62
|
+
import { initDriveService } from "./drivers/services";
|
|
62
63
|
|
|
63
64
|
async function main() {
|
|
64
65
|
initDriveService();
|
|
@@ -147,6 +148,14 @@ main();
|
|
|
147
148
|
|
|
148
149
|
---
|
|
149
150
|
|
|
151
|
+
## Json Operation
|
|
152
|
+
| Method | Description |
|
|
153
|
+
| ----------------------- | ----------------------------------------- |
|
|
154
|
+
| `readJsonFileData()` | Read JSON file content |
|
|
155
|
+
| `addJsonKeyValue()` | Add a new key-value pair to a JSON file |
|
|
156
|
+
| `updateJsonFieldAndValues()` | Update an existing field in a JSON file |
|
|
157
|
+
| `deleteJsonFieldAndKeys()` | Delete a field from a JSON file |
|
|
158
|
+
|
|
150
159
|
### ⚡ Example: Upload a File
|
|
151
160
|
|
|
152
161
|
```ts
|
|
@@ -170,6 +179,25 @@ if (files?.data?.files?.length) {
|
|
|
170
179
|
|
|
171
180
|
---
|
|
172
181
|
|
|
182
|
+
### ⚡ Example: Add a Key-Value Pair to a JSON File
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
const fileId = "1234567890abcdef1234567890abcdef";
|
|
186
|
+
const addResult = await operations.addJsonKeyValue(
|
|
187
|
+
fileId,
|
|
188
|
+
"alive",
|
|
189
|
+
true
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
if (addResult.success) {
|
|
193
|
+
console.log("✅ Added new key-value pair successfully");
|
|
194
|
+
} else {
|
|
195
|
+
console.error("❌ Failed:", addResult.error);
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
173
201
|
### 🧑💻 Author
|
|
174
202
|
|
|
175
203
|
**Vikash Khati**
|
package/dist/index.js
CHANGED
|
@@ -778704,6 +778704,7 @@ var exports_operations = {};
|
|
|
778704
778704
|
__export(exports_operations, {
|
|
778705
778705
|
uploadMultipleFiles: () => uploadMultipleFiles,
|
|
778706
778706
|
uploadFile: () => uploadFile,
|
|
778707
|
+
updateJsonFieldAndValues: () => updateJsonFieldAndValues,
|
|
778707
778708
|
updateFile: () => updateFile,
|
|
778708
778709
|
searchStarredFiles: () => searchStarredFiles,
|
|
778709
778710
|
searchSharedFiles: () => searchSharedFiles,
|
|
@@ -778713,6 +778714,8 @@ __export(exports_operations, {
|
|
|
778713
778714
|
searchByExactName: () => searchByExactName,
|
|
778714
778715
|
searchByContent: () => searchByContent,
|
|
778715
778716
|
renameFile: () => renameFile,
|
|
778717
|
+
readJsonFileData: () => readJsonFileData,
|
|
778718
|
+
readFileData: () => readFileData,
|
|
778716
778719
|
moveFileByName: () => moveFileByName,
|
|
778717
778720
|
moveFile: () => moveFile,
|
|
778718
778721
|
listRecentFiles: () => listRecentFiles,
|
|
@@ -778729,224 +778732,16 @@ __export(exports_operations, {
|
|
|
778729
778732
|
downloadMultipleFiles: () => downloadMultipleFiles,
|
|
778730
778733
|
downloadFile: () => downloadFile,
|
|
778731
778734
|
deleteMultipleFiles: () => deleteMultipleFiles,
|
|
778735
|
+
deleteJsonFieldAndKeys: () => deleteJsonFieldAndKeys,
|
|
778732
778736
|
deleteFolder: () => deleteFolder,
|
|
778733
778737
|
deleteFile: () => deleteFile,
|
|
778734
778738
|
createFolder: () => createFolder,
|
|
778735
|
-
copyFile: () => copyFile
|
|
778739
|
+
copyFile: () => copyFile,
|
|
778740
|
+
addJsonKeyValue: () => addJsonKeyValue
|
|
778736
778741
|
});
|
|
778737
778742
|
|
|
778738
|
-
// drivers/services.ts
|
|
778739
|
-
import fs3 from "fs";
|
|
778740
|
-
|
|
778741
|
-
// drivers/GoogleDriveService.ts
|
|
778742
|
-
var import_googleapis = __toESM(require_src8(), 1);
|
|
778743
|
-
import * as fs2 from "fs";
|
|
778744
|
-
import * as path from "path";
|
|
778745
|
-
|
|
778746
|
-
class GoogleDriveService {
|
|
778747
|
-
oauth2Client;
|
|
778748
|
-
drive;
|
|
778749
|
-
constructor(credentials) {
|
|
778750
|
-
const creds = credentials.web || credentials.installed || credentials;
|
|
778751
|
-
const { client_id, client_secret } = creds;
|
|
778752
|
-
const redirect_uri = "redirect_uris" in creds ? creds.redirect_uris[0] : credentials.redirect_uri;
|
|
778753
|
-
this.oauth2Client = new import_googleapis.google.auth.OAuth2(client_id, client_secret, redirect_uri);
|
|
778754
|
-
this.drive = import_googleapis.google.drive({ version: "v3", auth: this.oauth2Client });
|
|
778755
|
-
}
|
|
778756
|
-
setCredentials(tokens) {
|
|
778757
|
-
this.oauth2Client.setCredentials(tokens);
|
|
778758
|
-
this.oauth2Client.on("tokens", (newTokens) => {
|
|
778759
|
-
if (newTokens.refresh_token) {
|
|
778760
|
-
tokens.refresh_token = newTokens.refresh_token;
|
|
778761
|
-
}
|
|
778762
|
-
tokens.access_token = newTokens.access_token;
|
|
778763
|
-
tokens.expiry_date = newTokens.expiry_date;
|
|
778764
|
-
fs2.writeFileSync("./tokens.json", JSON.stringify(tokens, null, 2));
|
|
778765
|
-
console.log("\uD83D\uDD04 Tokens refreshed and saved");
|
|
778766
|
-
});
|
|
778767
|
-
}
|
|
778768
|
-
async listFiles(params = {}) {
|
|
778769
|
-
try {
|
|
778770
|
-
const response = await this.drive.files.list({
|
|
778771
|
-
pageSize: params.pageSize || 10,
|
|
778772
|
-
fields: "nextPageToken, files(id, name, mimeType, size, createdTime, modifiedTime)",
|
|
778773
|
-
q: params.query || undefined,
|
|
778774
|
-
orderBy: params.orderBy || "modifiedTime desc",
|
|
778775
|
-
pageToken: params.pageToken || undefined
|
|
778776
|
-
});
|
|
778777
|
-
return {
|
|
778778
|
-
success: true,
|
|
778779
|
-
data: {
|
|
778780
|
-
files: response.data.files,
|
|
778781
|
-
nextPageToken: response.data.nextPageToken || undefined
|
|
778782
|
-
}
|
|
778783
|
-
};
|
|
778784
|
-
} catch (error) {
|
|
778785
|
-
return {
|
|
778786
|
-
success: false,
|
|
778787
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778788
|
-
};
|
|
778789
|
-
}
|
|
778790
|
-
}
|
|
778791
|
-
async getFileMetadata(fileId) {
|
|
778792
|
-
try {
|
|
778793
|
-
const response = await this.drive.files.get({
|
|
778794
|
-
fileId,
|
|
778795
|
-
fields: "id, name, mimeType, size, createdTime, modifiedTime, parents, webViewLink"
|
|
778796
|
-
});
|
|
778797
|
-
return {
|
|
778798
|
-
success: true,
|
|
778799
|
-
data: response.data
|
|
778800
|
-
};
|
|
778801
|
-
} catch (error) {
|
|
778802
|
-
return {
|
|
778803
|
-
success: false,
|
|
778804
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778805
|
-
};
|
|
778806
|
-
}
|
|
778807
|
-
}
|
|
778808
|
-
async downloadFile(fileId, destPath) {
|
|
778809
|
-
try {
|
|
778810
|
-
const dest = fs2.createWriteStream(destPath);
|
|
778811
|
-
const response = await this.drive.files.get({ fileId, alt: "media" }, { responseType: "stream" });
|
|
778812
|
-
return new Promise((resolve, reject) => {
|
|
778813
|
-
response.data.on("end", () => {
|
|
778814
|
-
resolve({ success: true, data: { path: destPath } });
|
|
778815
|
-
}).on("error", (err) => {
|
|
778816
|
-
reject({ success: false, error: err.message });
|
|
778817
|
-
}).pipe(dest);
|
|
778818
|
-
});
|
|
778819
|
-
} catch (error) {
|
|
778820
|
-
return {
|
|
778821
|
-
success: false,
|
|
778822
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778823
|
-
};
|
|
778824
|
-
}
|
|
778825
|
-
}
|
|
778826
|
-
async uploadFile(filePath, metadata = {}) {
|
|
778827
|
-
try {
|
|
778828
|
-
const fileMetadata = {
|
|
778829
|
-
name: metadata.name || path.basename(filePath),
|
|
778830
|
-
parents: metadata.parents || []
|
|
778831
|
-
};
|
|
778832
|
-
const media = {
|
|
778833
|
-
mimeType: metadata.mimeType,
|
|
778834
|
-
body: fs2.createReadStream(filePath)
|
|
778835
|
-
};
|
|
778836
|
-
const response = await this.drive.files.create({
|
|
778837
|
-
requestBody: fileMetadata,
|
|
778838
|
-
media,
|
|
778839
|
-
fields: "id, name, mimeType, size, webViewLink"
|
|
778840
|
-
});
|
|
778841
|
-
return {
|
|
778842
|
-
success: true,
|
|
778843
|
-
data: response.data
|
|
778844
|
-
};
|
|
778845
|
-
} catch (error) {
|
|
778846
|
-
return {
|
|
778847
|
-
success: false,
|
|
778848
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778849
|
-
};
|
|
778850
|
-
}
|
|
778851
|
-
}
|
|
778852
|
-
async updateFileContent(fileId, filePath) {
|
|
778853
|
-
try {
|
|
778854
|
-
const media = {
|
|
778855
|
-
body: fs2.createReadStream(filePath)
|
|
778856
|
-
};
|
|
778857
|
-
const response = await this.drive.files.update({
|
|
778858
|
-
fileId,
|
|
778859
|
-
media,
|
|
778860
|
-
fields: "id, name, mimeType, modifiedTime"
|
|
778861
|
-
});
|
|
778862
|
-
return {
|
|
778863
|
-
success: true,
|
|
778864
|
-
data: response.data
|
|
778865
|
-
};
|
|
778866
|
-
} catch (error) {
|
|
778867
|
-
return {
|
|
778868
|
-
success: false,
|
|
778869
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778870
|
-
};
|
|
778871
|
-
}
|
|
778872
|
-
}
|
|
778873
|
-
async updateFileMetadata(fileId, metadata) {
|
|
778874
|
-
try {
|
|
778875
|
-
const response = await this.drive.files.update({
|
|
778876
|
-
fileId,
|
|
778877
|
-
requestBody: metadata,
|
|
778878
|
-
fields: "id, name, mimeType, modifiedTime"
|
|
778879
|
-
});
|
|
778880
|
-
return {
|
|
778881
|
-
success: true,
|
|
778882
|
-
data: response.data
|
|
778883
|
-
};
|
|
778884
|
-
} catch (error) {
|
|
778885
|
-
return {
|
|
778886
|
-
success: false,
|
|
778887
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778888
|
-
};
|
|
778889
|
-
}
|
|
778890
|
-
}
|
|
778891
|
-
async deleteFile(fileId) {
|
|
778892
|
-
try {
|
|
778893
|
-
await this.drive.files.delete({
|
|
778894
|
-
fileId
|
|
778895
|
-
});
|
|
778896
|
-
return {
|
|
778897
|
-
success: true,
|
|
778898
|
-
data: { message: "File deleted successfully" }
|
|
778899
|
-
};
|
|
778900
|
-
} catch (error) {
|
|
778901
|
-
return {
|
|
778902
|
-
success: false,
|
|
778903
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778904
|
-
};
|
|
778905
|
-
}
|
|
778906
|
-
}
|
|
778907
|
-
async createFolder(folderName, parentFolderId) {
|
|
778908
|
-
try {
|
|
778909
|
-
const fileMetadata = {
|
|
778910
|
-
name: folderName,
|
|
778911
|
-
mimeType: "application/vnd.google-apps.folder"
|
|
778912
|
-
};
|
|
778913
|
-
if (parentFolderId) {
|
|
778914
|
-
fileMetadata.parents = [parentFolderId];
|
|
778915
|
-
}
|
|
778916
|
-
const response = await this.drive.files.create({
|
|
778917
|
-
requestBody: fileMetadata,
|
|
778918
|
-
fields: "id, name, mimeType"
|
|
778919
|
-
});
|
|
778920
|
-
return {
|
|
778921
|
-
success: true,
|
|
778922
|
-
data: response.data
|
|
778923
|
-
};
|
|
778924
|
-
} catch (error) {
|
|
778925
|
-
return {
|
|
778926
|
-
success: false,
|
|
778927
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
778928
|
-
};
|
|
778929
|
-
}
|
|
778930
|
-
}
|
|
778931
|
-
async searchFiles(searchQuery, pageSize = 10) {
|
|
778932
|
-
return this.listFiles({
|
|
778933
|
-
query: searchQuery,
|
|
778934
|
-
pageSize
|
|
778935
|
-
});
|
|
778936
|
-
}
|
|
778937
|
-
}
|
|
778938
|
-
|
|
778939
778743
|
// drivers/services.ts
|
|
778940
778744
|
var driveService;
|
|
778941
|
-
async function initDriveService(creds, tokens) {
|
|
778942
|
-
if (!driveService) {
|
|
778943
|
-
const credentials = creds ?? JSON.parse(fs3.readFileSync("./credentials.json", "utf-8"));
|
|
778944
|
-
driveService = new GoogleDriveService(credentials);
|
|
778945
|
-
const tokenData = tokens ?? JSON.parse(fs3.readFileSync("./tokens.json", "utf-8"));
|
|
778946
|
-
driveService.setCredentials(tokenData);
|
|
778947
|
-
}
|
|
778948
|
-
return driveService;
|
|
778949
|
-
}
|
|
778950
778745
|
|
|
778951
778746
|
// types/index.ts
|
|
778952
778747
|
var MIME_TYPES = {
|
|
@@ -778962,6 +778757,7 @@ var MIME_TYPES = {
|
|
|
778962
778757
|
POWERPOINT: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
778963
778758
|
TEXT: "text/plain",
|
|
778964
778759
|
CSV: "text/csv",
|
|
778760
|
+
JSON: "application/json",
|
|
778965
778761
|
JPEG: "image/jpeg",
|
|
778966
778762
|
PNG: "image/png",
|
|
778967
778763
|
GIF: "image/gif",
|
|
@@ -778975,11 +778771,19 @@ var MIME_TYPES = {
|
|
|
778975
778771
|
};
|
|
778976
778772
|
|
|
778977
778773
|
// operations.ts
|
|
778774
|
+
async function readFileData(fileId) {
|
|
778775
|
+
const response = await driveService.readFileData(fileId);
|
|
778776
|
+
if (response.success && response.data) {
|
|
778777
|
+
return typeof response.data === "string" ? response.data : response.data.toString();
|
|
778778
|
+
}
|
|
778779
|
+
throw new Error(response.error || "Failed to read file data");
|
|
778780
|
+
}
|
|
778978
778781
|
async function uploadFile(filePath, options) {
|
|
778979
778782
|
return await driveService.uploadFile(filePath, {
|
|
778980
778783
|
name: options?.fileName,
|
|
778981
778784
|
parents: options?.folderId ? [options.folderId] : undefined,
|
|
778982
|
-
description: options?.description
|
|
778785
|
+
description: options?.description,
|
|
778786
|
+
mimeType: options?.mimeType
|
|
778983
778787
|
});
|
|
778984
778788
|
}
|
|
778985
778789
|
async function downloadFile(fileId, savePath) {
|
|
@@ -779002,7 +778806,9 @@ async function moveFile(fileId, newFolderId) {
|
|
|
779002
778806
|
if (!file.success || !file.data) {
|
|
779003
778807
|
return { success: false, error: "File not found" };
|
|
779004
778808
|
}
|
|
779005
|
-
return await driveService.updateFileMetadata(fileId, {
|
|
778809
|
+
return await driveService.updateFileMetadata(fileId, {
|
|
778810
|
+
parents: [newFolderId]
|
|
778811
|
+
});
|
|
779006
778812
|
}
|
|
779007
778813
|
async function moveFileByName(fileName, folderName) {
|
|
779008
778814
|
const fileResult = await getFileIdByName(fileName);
|
|
@@ -779018,6 +778824,130 @@ async function moveFileByName(fileName, folderName) {
|
|
|
779018
778824
|
async function copyFile(fileId, newName) {
|
|
779019
778825
|
return await driveService.copyFile(fileId, newName ? { name: newName } : undefined);
|
|
779020
778826
|
}
|
|
778827
|
+
async function readJsonFileData(fileId) {
|
|
778828
|
+
const content = await readFileData(fileId);
|
|
778829
|
+
try {
|
|
778830
|
+
return { success: true, data: JSON.parse(content) };
|
|
778831
|
+
} catch (error) {
|
|
778832
|
+
return { success: false, error: "Failed to parse JSON file content" };
|
|
778833
|
+
}
|
|
778834
|
+
}
|
|
778835
|
+
async function addJsonKeyValue(fileId, key, value) {
|
|
778836
|
+
try {
|
|
778837
|
+
const readResponse = await driveService.readFileData(fileId, true);
|
|
778838
|
+
if (!readResponse.success || !readResponse.data) {
|
|
778839
|
+
throw new Error(readResponse.error || "Failed to read JSON file data");
|
|
778840
|
+
}
|
|
778841
|
+
let jsonData;
|
|
778842
|
+
try {
|
|
778843
|
+
jsonData = JSON.parse(readResponse.data);
|
|
778844
|
+
} catch {
|
|
778845
|
+
throw new Error("Invalid JSON format in file");
|
|
778846
|
+
}
|
|
778847
|
+
const parts = key.split(".");
|
|
778848
|
+
let current = jsonData;
|
|
778849
|
+
for (let i2 = 0;i2 < parts.length - 1; i2++) {
|
|
778850
|
+
const part = parts[i2];
|
|
778851
|
+
if (!current[part] || typeof current[part] !== "object") {
|
|
778852
|
+
current[part] = {};
|
|
778853
|
+
}
|
|
778854
|
+
current = current[part];
|
|
778855
|
+
}
|
|
778856
|
+
current[parts.at(-1)] = value;
|
|
778857
|
+
const updateResponse = await driveService.updateJsonContent(fileId, jsonData);
|
|
778858
|
+
if (!updateResponse.success) {
|
|
778859
|
+
throw new Error(updateResponse.error || "Failed to update file");
|
|
778860
|
+
}
|
|
778861
|
+
return { success: true, data: updateResponse.data };
|
|
778862
|
+
} catch (error) {
|
|
778863
|
+
console.error("❌ Error adding key-value pair:", error.message);
|
|
778864
|
+
return { success: false, error: error.message };
|
|
778865
|
+
}
|
|
778866
|
+
}
|
|
778867
|
+
async function deleteJsonFieldAndKeys(fileId, key) {
|
|
778868
|
+
try {
|
|
778869
|
+
const readResponse = await driveService.readFileData(fileId, true);
|
|
778870
|
+
if (!readResponse.success || !readResponse.data) {
|
|
778871
|
+
throw new Error(readResponse.error || "Failed to read JSON file data");
|
|
778872
|
+
}
|
|
778873
|
+
let jsonData;
|
|
778874
|
+
try {
|
|
778875
|
+
jsonData = JSON.parse(readResponse.data);
|
|
778876
|
+
} catch {
|
|
778877
|
+
throw new Error("Invalid JSON format in file");
|
|
778878
|
+
}
|
|
778879
|
+
const parts = key.split(".");
|
|
778880
|
+
let current = jsonData;
|
|
778881
|
+
for (let i2 = 0;i2 < parts.length - 1; i2++) {
|
|
778882
|
+
const part = parts[i2];
|
|
778883
|
+
if (!current[part] || typeof current[part] !== "object") {
|
|
778884
|
+
throw new Error(`Key path '${key}' does not exist in JSON`);
|
|
778885
|
+
}
|
|
778886
|
+
current = current[part];
|
|
778887
|
+
}
|
|
778888
|
+
const lastKey = parts.at(-1);
|
|
778889
|
+
if (!(lastKey in current)) {
|
|
778890
|
+
throw new Error(`Key '${lastKey}' does not exist`);
|
|
778891
|
+
}
|
|
778892
|
+
delete current[lastKey];
|
|
778893
|
+
const updateResponse = await driveService.updateJsonContent(fileId, jsonData);
|
|
778894
|
+
if (!updateResponse.success) {
|
|
778895
|
+
throw new Error(updateResponse.error || "Failed to update file");
|
|
778896
|
+
}
|
|
778897
|
+
return { success: true, data: updateResponse.data };
|
|
778898
|
+
} catch (error) {
|
|
778899
|
+
console.error("❌ Error deleting key-value pair:", error.message);
|
|
778900
|
+
return { success: false, error: error.message };
|
|
778901
|
+
}
|
|
778902
|
+
}
|
|
778903
|
+
async function updateJsonFieldAndValues(fileId, keyPath, newKey, newValue) {
|
|
778904
|
+
try {
|
|
778905
|
+
const readResponse = await driveService.readFileData(fileId, true);
|
|
778906
|
+
if (!readResponse.success || !readResponse.data) {
|
|
778907
|
+
throw new Error(readResponse.error || "Failed to read JSON file data");
|
|
778908
|
+
}
|
|
778909
|
+
let jsonData;
|
|
778910
|
+
try {
|
|
778911
|
+
jsonData = JSON.parse(readResponse.data);
|
|
778912
|
+
} catch {
|
|
778913
|
+
throw new Error("Invalid JSON format in file");
|
|
778914
|
+
}
|
|
778915
|
+
const parts = keyPath.split(".");
|
|
778916
|
+
let current = jsonData;
|
|
778917
|
+
for (let i2 = 0;i2 < parts.length - 1; i2++) {
|
|
778918
|
+
const part = parts[i2];
|
|
778919
|
+
if (!current[part] || typeof current[part] !== "object") {
|
|
778920
|
+
throw new Error(`Key path '${keyPath}' does not exist in JSON`);
|
|
778921
|
+
}
|
|
778922
|
+
current = current[part];
|
|
778923
|
+
}
|
|
778924
|
+
const oldKey = parts.at(-1);
|
|
778925
|
+
if (!(oldKey in current)) {
|
|
778926
|
+
throw new Error(`Key '${oldKey}' does not exist`);
|
|
778927
|
+
}
|
|
778928
|
+
const existingValue = current[oldKey];
|
|
778929
|
+
const finalValue = newValue !== undefined ? newValue : existingValue;
|
|
778930
|
+
const finalKey = newKey && newKey !== oldKey ? newKey : oldKey;
|
|
778931
|
+
const rebuilt = {};
|
|
778932
|
+
for (const k of Object.keys(current)) {
|
|
778933
|
+
if (k === oldKey) {
|
|
778934
|
+
rebuilt[finalKey] = finalValue;
|
|
778935
|
+
} else {
|
|
778936
|
+
rebuilt[k] = current[k];
|
|
778937
|
+
}
|
|
778938
|
+
}
|
|
778939
|
+
Object.keys(current).forEach((k) => delete current[k]);
|
|
778940
|
+
Object.assign(current, rebuilt);
|
|
778941
|
+
const updateResponse = await driveService.updateJsonContent(fileId, jsonData);
|
|
778942
|
+
if (!updateResponse.success) {
|
|
778943
|
+
throw new Error(updateResponse.error || "Failed to update file");
|
|
778944
|
+
}
|
|
778945
|
+
return { success: true, data: updateResponse.data };
|
|
778946
|
+
} catch (error) {
|
|
778947
|
+
console.error("❌ Error updating JSON key-value:", error.message);
|
|
778948
|
+
return { success: false, error: error.message };
|
|
778949
|
+
}
|
|
778950
|
+
}
|
|
779021
778951
|
async function createFolder(folderName, parentFolderId) {
|
|
779022
778952
|
return await driveService.createFolder(folderName, parentFolderId);
|
|
779023
778953
|
}
|
|
@@ -779159,6 +779089,7 @@ async function getFileIdByName(fileName) {
|
|
|
779159
779089
|
return { success: false, error: "File not found" };
|
|
779160
779090
|
}
|
|
779161
779091
|
var driveOperations = {
|
|
779092
|
+
readFileData,
|
|
779162
779093
|
uploadFile,
|
|
779163
779094
|
downloadFile,
|
|
779164
779095
|
deleteFile,
|
|
@@ -779168,6 +779099,10 @@ var driveOperations = {
|
|
|
779168
779099
|
moveFile,
|
|
779169
779100
|
moveFileByName,
|
|
779170
779101
|
copyFile,
|
|
779102
|
+
readJsonFileData,
|
|
779103
|
+
addJsonKeyValue,
|
|
779104
|
+
updateJsonFieldAndValues,
|
|
779105
|
+
deleteJsonFieldAndKeys,
|
|
779171
779106
|
createFolder,
|
|
779172
779107
|
deleteFolder,
|
|
779173
779108
|
listAllFolders,
|
|
@@ -779192,8 +779127,8 @@ var driveOperations = {
|
|
|
779192
779127
|
};
|
|
779193
779128
|
|
|
779194
779129
|
// auth.ts
|
|
779195
|
-
var
|
|
779196
|
-
import * as
|
|
779130
|
+
var import_googleapis = __toESM(require_src8(), 1);
|
|
779131
|
+
import * as fs2 from "fs";
|
|
779197
779132
|
import * as http3 from "http";
|
|
779198
779133
|
import * as url from "url";
|
|
779199
779134
|
var CREDENTIALS_PATH = "./credentials.json";
|
|
@@ -779205,7 +779140,7 @@ async function generateCredentialsAndTokens({
|
|
|
779205
779140
|
redirecturis,
|
|
779206
779141
|
javascript_origin
|
|
779207
779142
|
}) {
|
|
779208
|
-
if (!
|
|
779143
|
+
if (!fs2.existsSync(CREDENTIALS_PATH)) {
|
|
779209
779144
|
const baseCredentials = {
|
|
779210
779145
|
web: {
|
|
779211
779146
|
client_id: clientid,
|
|
@@ -779218,17 +779153,17 @@ async function generateCredentialsAndTokens({
|
|
|
779218
779153
|
javascript_origins: javascript_origin || ["http://localhost:3000"]
|
|
779219
779154
|
}
|
|
779220
779155
|
};
|
|
779221
|
-
|
|
779156
|
+
fs2.writeFileSync(CREDENTIALS_PATH, JSON.stringify(baseCredentials, null, 2));
|
|
779222
779157
|
console.log("✅ Created credentials.json");
|
|
779223
779158
|
}
|
|
779224
|
-
const credentials = JSON.parse(
|
|
779159
|
+
const credentials = JSON.parse(fs2.readFileSync(CREDENTIALS_PATH, "utf-8"));
|
|
779225
779160
|
const creds = credentials.web || credentials.installed || credentials;
|
|
779226
779161
|
const client_id = creds.client_id;
|
|
779227
779162
|
const client_secret = creds.client_secret;
|
|
779228
779163
|
const redirect_uri = Array.isArray(creds.redirect_uris) ? creds.redirect_uris[0] : creds.redirect_uri;
|
|
779229
|
-
const oauth2Client = new
|
|
779230
|
-
if (
|
|
779231
|
-
const tokens = JSON.parse(
|
|
779164
|
+
const oauth2Client = new import_googleapis.google.auth.OAuth2(client_id, client_secret, redirect_uri);
|
|
779165
|
+
if (fs2.existsSync(TOKENS_PATH)) {
|
|
779166
|
+
const tokens = JSON.parse(fs2.readFileSync(TOKENS_PATH, "utf-8"));
|
|
779232
779167
|
oauth2Client.setCredentials(tokens);
|
|
779233
779168
|
console.log("✅ Using existing tokens from tokens.json");
|
|
779234
779169
|
return oauth2Client;
|
|
@@ -779257,7 +779192,7 @@ async function generateCredentialsAndTokens({
|
|
|
779257
779192
|
throw new Error("No authorization code received");
|
|
779258
779193
|
const { tokens } = await oauth2Client.getToken(code);
|
|
779259
779194
|
oauth2Client.setCredentials(tokens);
|
|
779260
|
-
|
|
779195
|
+
fs2.writeFileSync(TOKENS_PATH, JSON.stringify(tokens, null, 2));
|
|
779261
779196
|
console.log("✅ Tokens saved to tokens.json");
|
|
779262
779197
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
779263
779198
|
res.end(`
|
|
@@ -779299,6 +779234,5 @@ async function generateCredentialsAndTokens({
|
|
|
779299
779234
|
}
|
|
779300
779235
|
export {
|
|
779301
779236
|
exports_operations as operations,
|
|
779302
|
-
initDriveService,
|
|
779303
779237
|
generateCredentialsAndTokens
|
|
779304
779238
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gdrivekit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A lightweight Google Drive toolkit for File Management. Handle Google Drive operations easily — upload, download, and other file operations in a few lines of code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|