@digitalpresence/cliclaw-auth 0.1.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.
- package/dist/agent-store.d.ts +53 -0
- package/dist/agent-store.d.ts.map +1 -0
- package/dist/agent-store.js +207 -0
- package/dist/agent-store.js.map +1 -0
- package/dist/calendar-auth.d.ts +6 -0
- package/dist/calendar-auth.d.ts.map +1 -0
- package/dist/calendar-auth.js +17 -0
- package/dist/calendar-auth.js.map +1 -0
- package/dist/claude-md-generator.d.ts +4 -0
- package/dist/claude-md-generator.d.ts.map +1 -0
- package/dist/claude-md-generator.js +82 -0
- package/dist/claude-md-generator.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/forms-auth.d.ts +6 -0
- package/dist/forms-auth.d.ts.map +1 -0
- package/dist/forms-auth.js +19 -0
- package/dist/forms-auth.js.map +1 -0
- package/dist/gdrive-auth.d.ts +6 -0
- package/dist/gdrive-auth.d.ts.map +1 -0
- package/dist/gdrive-auth.js +17 -0
- package/dist/gdrive-auth.js.map +1 -0
- package/dist/gmail-auth.d.ts +6 -0
- package/dist/gmail-auth.d.ts.map +1 -0
- package/dist/gmail-auth.js +17 -0
- package/dist/gmail-auth.js.map +1 -0
- package/dist/gsheets-auth.d.ts +6 -0
- package/dist/gsheets-auth.d.ts.map +1 -0
- package/dist/gsheets-auth.js +18 -0
- package/dist/gsheets-auth.js.map +1 -0
- package/dist/gslides-auth.d.ts +6 -0
- package/dist/gslides-auth.d.ts.map +1 -0
- package/dist/gslides-auth.js +18 -0
- package/dist/gslides-auth.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-registry.d.ts +7 -0
- package/dist/integration-registry.d.ts.map +1 -0
- package/dist/integration-registry.js +43 -0
- package/dist/integration-registry.js.map +1 -0
- package/dist/memory-store.d.ts +33 -0
- package/dist/memory-store.d.ts.map +1 -0
- package/dist/memory-store.js +102 -0
- package/dist/memory-store.js.map +1 -0
- package/dist/oauth-client-manager.d.ts +17 -0
- package/dist/oauth-client-manager.d.ts.map +1 -0
- package/dist/oauth-client-manager.js +49 -0
- package/dist/oauth-client-manager.js.map +1 -0
- package/dist/oauth-server.d.ts +7 -0
- package/dist/oauth-server.d.ts.map +1 -0
- package/dist/oauth-server.js +69 -0
- package/dist/oauth-server.js.map +1 -0
- package/dist/scoped-client-manager.d.ts +21 -0
- package/dist/scoped-client-manager.d.ts.map +1 -0
- package/dist/scoped-client-manager.js +51 -0
- package/dist/scoped-client-manager.js.map +1 -0
- package/dist/token-store.d.ts +13 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +50 -0
- package/dist/token-store.js.map +1 -0
- package/package.json +25 -0
- package/src/agent-store.ts +263 -0
- package/src/calendar-auth.ts +20 -0
- package/src/claude-md-generator.ts +94 -0
- package/src/config.ts +49 -0
- package/src/forms-auth.ts +22 -0
- package/src/gdrive-auth.ts +20 -0
- package/src/gmail-auth.ts +20 -0
- package/src/gsheets-auth.ts +21 -0
- package/src/gslides-auth.ts +21 -0
- package/src/index.ts +19 -0
- package/src/integration-registry.ts +48 -0
- package/src/memory-store.ts +127 -0
- package/src/oauth-client-manager.ts +63 -0
- package/src/oauth-server.ts +86 -0
- package/src/scoped-client-manager.ts +65 -0
- package/src/token-store.ts +57 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { MemoryStore } from "./memory-store.js";
|
|
2
|
+
export interface AgentPermission {
|
|
3
|
+
integration: string;
|
|
4
|
+
account: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CronJobConfig {
|
|
7
|
+
id: string;
|
|
8
|
+
schedule: string;
|
|
9
|
+
task: string;
|
|
10
|
+
maxIterations: number;
|
|
11
|
+
completionPromise: string;
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AgentConfig {
|
|
16
|
+
name: string;
|
|
17
|
+
displayName: string;
|
|
18
|
+
role: string;
|
|
19
|
+
permissions: AgentPermission[];
|
|
20
|
+
memory: string[];
|
|
21
|
+
cronJobs: CronJobConfig[];
|
|
22
|
+
createdAt: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class AgentStore {
|
|
26
|
+
private agentsDir;
|
|
27
|
+
private memoryStores;
|
|
28
|
+
constructor(agentsDir: string);
|
|
29
|
+
private ensureDir;
|
|
30
|
+
/** Migrate old flat {name}.json files to {name}/config.json + scaffold */
|
|
31
|
+
private migrateIfNeeded;
|
|
32
|
+
private filePath;
|
|
33
|
+
workspacePath(name: string): string;
|
|
34
|
+
/** Get or create a per-client workspace, symlinking shared agent files */
|
|
35
|
+
clientWorkspacePath(agentName: string, userId: string): string;
|
|
36
|
+
get(name: string): AgentConfig | null;
|
|
37
|
+
save(config: AgentConfig): void;
|
|
38
|
+
delete(name: string): boolean;
|
|
39
|
+
list(): AgentConfig[];
|
|
40
|
+
listNames(): string[];
|
|
41
|
+
/** Create workspace directory with config.json, CLAUDE.md, SOUL.md, ROLE.md */
|
|
42
|
+
scaffoldWorkspace(config: AgentConfig): void;
|
|
43
|
+
/** Get or create a MemoryStore for an agent, auto-migrating legacy memory */
|
|
44
|
+
getMemoryStore(name: string): MemoryStore;
|
|
45
|
+
/** Regenerate CLAUDE.md from current config */
|
|
46
|
+
regenerateClaudeMd(name: string): void;
|
|
47
|
+
addCronJob(agentName: string, job: CronJobConfig): void;
|
|
48
|
+
removeCronJob(agentName: string, jobId: string): void;
|
|
49
|
+
listCronJobs(agentName: string): CronJobConfig[];
|
|
50
|
+
toggleCronJob(agentName: string, jobId: string, enabled: boolean): void;
|
|
51
|
+
private writeWorkspaceFiles;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=agent-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../src/agent-store.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;IAGT,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,YAAY,CAAkC;gBAElC,SAAS,EAAE,MAAM;IAErC,OAAO,CAAC,SAAS;IAOjB,0EAA0E;IAC1E,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,QAAQ;IAIhB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAInC,0EAA0E;IAC1E,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAmB9D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAYrC,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAS/B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAO7B,IAAI,IAAI,WAAW,EAAE;IAmBrB,SAAS,IAAI,MAAM,EAAE;IASrB,+EAA+E;IAC/E,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAU5C,6EAA6E;IAC7E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAoBzC,+CAA+C;IAC/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAStC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI;IASvD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWrD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAMhD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAUvE,OAAO,CAAC,mBAAmB;CAuB5B"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, readdirSync, renameSync, statSync, symlinkSync, } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { generateClaudeMd } from "./claude-md-generator.js";
|
|
4
|
+
import { MemoryStore } from "./memory-store.js";
|
|
5
|
+
export class AgentStore {
|
|
6
|
+
agentsDir;
|
|
7
|
+
memoryStores = new Map();
|
|
8
|
+
constructor(agentsDir) {
|
|
9
|
+
this.agentsDir = agentsDir;
|
|
10
|
+
}
|
|
11
|
+
ensureDir() {
|
|
12
|
+
if (!existsSync(this.agentsDir)) {
|
|
13
|
+
mkdirSync(this.agentsDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
this.migrateIfNeeded();
|
|
16
|
+
}
|
|
17
|
+
/** Migrate old flat {name}.json files to {name}/config.json + scaffold */
|
|
18
|
+
migrateIfNeeded() {
|
|
19
|
+
const entries = readdirSync(this.agentsDir);
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
if (!entry.endsWith(".json"))
|
|
22
|
+
continue;
|
|
23
|
+
const fullPath = join(this.agentsDir, entry);
|
|
24
|
+
if (!statSync(fullPath).isFile())
|
|
25
|
+
continue;
|
|
26
|
+
try {
|
|
27
|
+
const config = JSON.parse(readFileSync(fullPath, "utf-8"));
|
|
28
|
+
const dir = join(this.agentsDir, config.name);
|
|
29
|
+
if (!existsSync(dir)) {
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
renameSync(fullPath, join(dir, "config.json"));
|
|
33
|
+
this.writeWorkspaceFiles(config, dir);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Skip files that can't be parsed
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
filePath(name) {
|
|
41
|
+
return join(this.agentsDir, name, "config.json");
|
|
42
|
+
}
|
|
43
|
+
workspacePath(name) {
|
|
44
|
+
return join(this.agentsDir, name);
|
|
45
|
+
}
|
|
46
|
+
/** Get or create a per-client workspace, symlinking shared agent files */
|
|
47
|
+
clientWorkspacePath(agentName, userId) {
|
|
48
|
+
const clientDir = join(this.agentsDir, agentName, "clients", userId);
|
|
49
|
+
if (!existsSync(clientDir)) {
|
|
50
|
+
mkdirSync(clientDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
// Symlink shared agent files into the client workspace
|
|
53
|
+
const agentDir = this.workspacePath(agentName);
|
|
54
|
+
for (const file of ["CLAUDE.md", "SOUL.md", "ROLE.md"]) {
|
|
55
|
+
const target = join(agentDir, file);
|
|
56
|
+
const link = join(clientDir, file);
|
|
57
|
+
if (existsSync(target) && !existsSync(link)) {
|
|
58
|
+
symlinkSync(target, link);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return clientDir;
|
|
62
|
+
}
|
|
63
|
+
get(name) {
|
|
64
|
+
const path = this.filePath(name);
|
|
65
|
+
if (!existsSync(path))
|
|
66
|
+
return null;
|
|
67
|
+
try {
|
|
68
|
+
const config = JSON.parse(readFileSync(path, "utf-8"));
|
|
69
|
+
if (!config.cronJobs)
|
|
70
|
+
config.cronJobs = [];
|
|
71
|
+
return config;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
save(config) {
|
|
78
|
+
this.ensureDir();
|
|
79
|
+
const dir = this.workspacePath(config.name);
|
|
80
|
+
if (!existsSync(dir)) {
|
|
81
|
+
mkdirSync(dir, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
writeFileSync(this.filePath(config.name), JSON.stringify(config, null, 2), "utf-8");
|
|
84
|
+
}
|
|
85
|
+
delete(name) {
|
|
86
|
+
const dir = this.workspacePath(name);
|
|
87
|
+
if (!existsSync(dir))
|
|
88
|
+
return false;
|
|
89
|
+
rmSync(dir, { recursive: true });
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
list() {
|
|
93
|
+
this.ensureDir();
|
|
94
|
+
return readdirSync(this.agentsDir)
|
|
95
|
+
.filter((entry) => {
|
|
96
|
+
const entryPath = join(this.agentsDir, entry);
|
|
97
|
+
return statSync(entryPath).isDirectory() && existsSync(join(entryPath, "config.json"));
|
|
98
|
+
})
|
|
99
|
+
.map((entry) => {
|
|
100
|
+
try {
|
|
101
|
+
return JSON.parse(readFileSync(join(this.agentsDir, entry, "config.json"), "utf-8"));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
.filter((c) => c !== null);
|
|
108
|
+
}
|
|
109
|
+
listNames() {
|
|
110
|
+
this.ensureDir();
|
|
111
|
+
return readdirSync(this.agentsDir)
|
|
112
|
+
.filter((entry) => {
|
|
113
|
+
const entryPath = join(this.agentsDir, entry);
|
|
114
|
+
return statSync(entryPath).isDirectory() && existsSync(join(entryPath, "config.json"));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/** Create workspace directory with config.json, CLAUDE.md, SOUL.md, ROLE.md */
|
|
118
|
+
scaffoldWorkspace(config) {
|
|
119
|
+
this.ensureDir();
|
|
120
|
+
const dir = this.workspacePath(config.name);
|
|
121
|
+
if (!existsSync(dir)) {
|
|
122
|
+
mkdirSync(dir, { recursive: true });
|
|
123
|
+
}
|
|
124
|
+
writeFileSync(this.filePath(config.name), JSON.stringify(config, null, 2), "utf-8");
|
|
125
|
+
this.writeWorkspaceFiles(config, dir);
|
|
126
|
+
}
|
|
127
|
+
/** Get or create a MemoryStore for an agent, auto-migrating legacy memory */
|
|
128
|
+
getMemoryStore(name) {
|
|
129
|
+
let store = this.memoryStores.get(name);
|
|
130
|
+
if (store)
|
|
131
|
+
return store;
|
|
132
|
+
const memoryDir = join(this.workspacePath(name), "memory");
|
|
133
|
+
store = new MemoryStore(memoryDir);
|
|
134
|
+
// Lazy migration: move config.memory[] → JSONL
|
|
135
|
+
const config = this.get(name);
|
|
136
|
+
if (config && config.memory.length > 0) {
|
|
137
|
+
store.migrate(config.memory);
|
|
138
|
+
config.memory = [];
|
|
139
|
+
config.updatedAt = new Date().toISOString();
|
|
140
|
+
this.save(config);
|
|
141
|
+
}
|
|
142
|
+
this.memoryStores.set(name, store);
|
|
143
|
+
return store;
|
|
144
|
+
}
|
|
145
|
+
/** Regenerate CLAUDE.md from current config */
|
|
146
|
+
regenerateClaudeMd(name) {
|
|
147
|
+
const config = this.get(name);
|
|
148
|
+
if (!config)
|
|
149
|
+
return;
|
|
150
|
+
const dir = this.workspacePath(name);
|
|
151
|
+
const memoryStore = this.getMemoryStore(name);
|
|
152
|
+
const memories = memoryStore.list();
|
|
153
|
+
writeFileSync(join(dir, "CLAUDE.md"), generateClaudeMd(config, memories), "utf-8");
|
|
154
|
+
}
|
|
155
|
+
addCronJob(agentName, job) {
|
|
156
|
+
const config = this.get(agentName);
|
|
157
|
+
if (!config)
|
|
158
|
+
throw new Error(`Agent "${agentName}" not found`);
|
|
159
|
+
config.cronJobs.push(job);
|
|
160
|
+
config.updatedAt = new Date().toISOString();
|
|
161
|
+
this.save(config);
|
|
162
|
+
this.regenerateClaudeMd(agentName);
|
|
163
|
+
}
|
|
164
|
+
removeCronJob(agentName, jobId) {
|
|
165
|
+
const config = this.get(agentName);
|
|
166
|
+
if (!config)
|
|
167
|
+
throw new Error(`Agent "${agentName}" not found`);
|
|
168
|
+
const idx = config.cronJobs.findIndex((j) => j.id === jobId);
|
|
169
|
+
if (idx === -1)
|
|
170
|
+
throw new Error(`Cron job "${jobId}" not found`);
|
|
171
|
+
config.cronJobs.splice(idx, 1);
|
|
172
|
+
config.updatedAt = new Date().toISOString();
|
|
173
|
+
this.save(config);
|
|
174
|
+
this.regenerateClaudeMd(agentName);
|
|
175
|
+
}
|
|
176
|
+
listCronJobs(agentName) {
|
|
177
|
+
const config = this.get(agentName);
|
|
178
|
+
if (!config)
|
|
179
|
+
throw new Error(`Agent "${agentName}" not found`);
|
|
180
|
+
return config.cronJobs;
|
|
181
|
+
}
|
|
182
|
+
toggleCronJob(agentName, jobId, enabled) {
|
|
183
|
+
const config = this.get(agentName);
|
|
184
|
+
if (!config)
|
|
185
|
+
throw new Error(`Agent "${agentName}" not found`);
|
|
186
|
+
const job = config.cronJobs.find((j) => j.id === jobId);
|
|
187
|
+
if (!job)
|
|
188
|
+
throw new Error(`Cron job "${jobId}" not found`);
|
|
189
|
+
job.enabled = enabled;
|
|
190
|
+
config.updatedAt = new Date().toISOString();
|
|
191
|
+
this.save(config);
|
|
192
|
+
}
|
|
193
|
+
writeWorkspaceFiles(config, dir) {
|
|
194
|
+
const memoryStore = this.getMemoryStore(config.name);
|
|
195
|
+
const memories = memoryStore.list();
|
|
196
|
+
writeFileSync(join(dir, "CLAUDE.md"), generateClaudeMd(config, memories), "utf-8");
|
|
197
|
+
const soulPath = join(dir, "SOUL.md");
|
|
198
|
+
if (!existsSync(soulPath)) {
|
|
199
|
+
writeFileSync(soulPath, `# ${config.displayName}\n\nDefine this agent's personality and identity here.\n`, "utf-8");
|
|
200
|
+
}
|
|
201
|
+
const rolePath = join(dir, "ROLE.md");
|
|
202
|
+
if (!existsSync(rolePath)) {
|
|
203
|
+
writeFileSync(rolePath, `# ${config.displayName} — Role\n\n${config.role}\n\nAdd detailed capabilities and instructions here.\n`, "utf-8");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=agent-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../src/agent-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createCalendarOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getCalendarAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=calendar-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-auth.d.ts","sourceRoot":"","sources":["../src/calendar-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAIrG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ/D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { google } from "googleapis";
|
|
3
|
+
export function createCalendarOAuthClient(clientSecretPath, redirectUri) {
|
|
4
|
+
const secret = JSON.parse(readFileSync(clientSecretPath, "utf-8"));
|
|
5
|
+
const { client_id, client_secret } = secret.installed ?? secret.web;
|
|
6
|
+
return new google.auth.OAuth2(client_id, client_secret, redirectUri);
|
|
7
|
+
}
|
|
8
|
+
export function getCalendarAuthUrl(client) {
|
|
9
|
+
return client.generateAuthUrl({
|
|
10
|
+
access_type: "offline",
|
|
11
|
+
scope: [
|
|
12
|
+
"https://www.googleapis.com/auth/calendar",
|
|
13
|
+
],
|
|
14
|
+
prompt: "consent",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=calendar-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-auth.js","sourceRoot":"","sources":["../src/calendar-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,EAAE,WAAmB;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,MAAM,CAAC,eAAe,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE;YACL,0CAA0C;SAC3C;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAE,WAAW,EAAO,GAAG,MAAM,CA0F1F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export function generateClaudeMd(config, memories = []) {
|
|
2
|
+
const { displayName, permissions } = config;
|
|
3
|
+
const hasPermissions = permissions.length > 0;
|
|
4
|
+
// Deduplicate integrations for the summary
|
|
5
|
+
const integrations = [...new Set(permissions.map((p) => p.integration))];
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`# ${displayName}`);
|
|
8
|
+
lines.push("");
|
|
9
|
+
lines.push("Read SOUL.md for your identity and personality.");
|
|
10
|
+
lines.push("Read ROLE.md for your capabilities and instructions.");
|
|
11
|
+
lines.push("");
|
|
12
|
+
lines.push("## CLI Usage");
|
|
13
|
+
lines.push("All integrations are accessed via the `cliclaw` CLI. Always pass `--account <account>` to specify which account to use.");
|
|
14
|
+
lines.push("");
|
|
15
|
+
lines.push("For detailed usage of any command, run:");
|
|
16
|
+
lines.push(" `cliclaw <command> --help` or `cliclaw <command> <subcommand> --help`");
|
|
17
|
+
lines.push("");
|
|
18
|
+
lines.push("## Permitted Integrations");
|
|
19
|
+
if (!hasPermissions) {
|
|
20
|
+
lines.push("No permissions granted yet.");
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
for (const perm of permissions) {
|
|
24
|
+
lines.push(`- **${perm.integration}** — account: \`${perm.account}\``);
|
|
25
|
+
}
|
|
26
|
+
lines.push("");
|
|
27
|
+
lines.push("IMPORTANT: ONLY access accounts listed above.");
|
|
28
|
+
lines.push("");
|
|
29
|
+
lines.push("Available integrations: " + integrations.map((i) => `\`cliclaw ${i}\``).join(", "));
|
|
30
|
+
}
|
|
31
|
+
lines.push("");
|
|
32
|
+
lines.push("## Memory");
|
|
33
|
+
lines.push(`Save, search, and remove memories with \`cliclaw agent memory --help\`. Your agent name is \`${config.name}\`.`);
|
|
34
|
+
lines.push("");
|
|
35
|
+
if (config.cronJobs && config.cronJobs.length > 0) {
|
|
36
|
+
lines.push("## Scheduled Tasks");
|
|
37
|
+
lines.push("");
|
|
38
|
+
for (const job of config.cronJobs) {
|
|
39
|
+
const status = job.enabled ? "enabled" : "disabled";
|
|
40
|
+
lines.push(`- **${job.id}** (${status}): \`${job.schedule}\``);
|
|
41
|
+
lines.push(` Task: ${job.task}`);
|
|
42
|
+
lines.push(` Completion word: ${job.completionPromise} | Max iterations: ${job.maxIterations}`);
|
|
43
|
+
}
|
|
44
|
+
lines.push("");
|
|
45
|
+
}
|
|
46
|
+
if (memories.length === 0) {
|
|
47
|
+
lines.push("### Current Memories");
|
|
48
|
+
lines.push("No memories yet.");
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lines.push("### Current Memories");
|
|
52
|
+
let displayMemories;
|
|
53
|
+
let truncated = false;
|
|
54
|
+
if (memories.length > 50) {
|
|
55
|
+
const critical = memories.filter((m) => m.importance === 3);
|
|
56
|
+
const recent = memories.slice(-30);
|
|
57
|
+
// Merge critical + recent, deduplicate by id
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
displayMemories = [];
|
|
60
|
+
for (const m of [...critical, ...recent]) {
|
|
61
|
+
if (!seen.has(m.id)) {
|
|
62
|
+
seen.add(m.id);
|
|
63
|
+
displayMemories.push(m);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
truncated = true;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
displayMemories = memories;
|
|
70
|
+
}
|
|
71
|
+
for (const m of displayMemories) {
|
|
72
|
+
const tags = m.tags.length > 0 ? " " + m.tags.map((t) => `#${t}`).join(" ") : "";
|
|
73
|
+
lines.push(`- [${m.id}] ${m.fact}${tags}`);
|
|
74
|
+
}
|
|
75
|
+
if (truncated) {
|
|
76
|
+
lines.push("");
|
|
77
|
+
lines.push(`(${memories.length} total memories — showing critical + 30 most recent. Use search to find more.)`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return lines.join("\n");
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=claude-md-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface CliclawConfig {
|
|
2
|
+
client_secret_path: string;
|
|
3
|
+
oauth_port: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function getConfigDir(): string;
|
|
6
|
+
export declare function getTokensPath(): string;
|
|
7
|
+
export declare function getAgentsDir(): string;
|
|
8
|
+
export declare function loadConfig(): CliclawConfig;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,aAAa,CAwB1C"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
const CONFIG_DIR = process.env.CLICLAW_HOME || join(homedir(), ".cliclaw");
|
|
5
|
+
const CONFIG_PATH = join(CONFIG_DIR, "config.json");
|
|
6
|
+
export function getConfigDir() {
|
|
7
|
+
return CONFIG_DIR;
|
|
8
|
+
}
|
|
9
|
+
export function getTokensPath() {
|
|
10
|
+
return process.env.CLICLAW_TOKENS_PATH || join(CONFIG_DIR, "tokens.json");
|
|
11
|
+
}
|
|
12
|
+
export function getAgentsDir() {
|
|
13
|
+
return join(CONFIG_DIR, "agents");
|
|
14
|
+
}
|
|
15
|
+
export function loadConfig() {
|
|
16
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
17
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
if (!existsSync(CONFIG_PATH)) {
|
|
20
|
+
throw new Error(`Config file not found: ${CONFIG_PATH}\n` +
|
|
21
|
+
`Create it with:\n` +
|
|
22
|
+
` mkdir -p ~/.cliclaw\n` +
|
|
23
|
+
` echo '{"client_secret_path": "/path/to/client_secret.json", "oauth_port": 9753}' > ~/.cliclaw/config.json`);
|
|
24
|
+
}
|
|
25
|
+
const raw = JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
26
|
+
if (!raw.client_secret_path) {
|
|
27
|
+
throw new Error("config.json missing required field: client_secret_path");
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
client_secret_path: raw.client_secret_path,
|
|
31
|
+
oauth_port: raw.oauth_port ?? 9753,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0BAA0B,WAAW,IAAI;YACzC,mBAAmB;YACnB,yBAAyB;YACzB,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;QAC1C,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createFormsOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getFormsAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=forms-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-auth.d.ts","sourceRoot":"","sources":["../src/forms-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAIlG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAU5D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { google } from "googleapis";
|
|
3
|
+
export function createFormsOAuthClient(clientSecretPath, redirectUri) {
|
|
4
|
+
const secret = JSON.parse(readFileSync(clientSecretPath, "utf-8"));
|
|
5
|
+
const { client_id, client_secret } = secret.installed ?? secret.web;
|
|
6
|
+
return new google.auth.OAuth2(client_id, client_secret, redirectUri);
|
|
7
|
+
}
|
|
8
|
+
export function getFormsAuthUrl(client) {
|
|
9
|
+
return client.generateAuthUrl({
|
|
10
|
+
access_type: "offline",
|
|
11
|
+
scope: [
|
|
12
|
+
"https://www.googleapis.com/auth/forms.body",
|
|
13
|
+
"https://www.googleapis.com/auth/forms.responses.readonly",
|
|
14
|
+
"https://www.googleapis.com/auth/drive.metadata.readonly",
|
|
15
|
+
],
|
|
16
|
+
prompt: "consent",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=forms-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-auth.js","sourceRoot":"","sources":["../src/forms-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,sBAAsB,CAAC,gBAAwB,EAAE,WAAmB;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,MAAM,CAAC,eAAe,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE;YACL,4CAA4C;YAC5C,0DAA0D;YAC1D,yDAAyD;SAC1D;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createGDriveOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getGDriveAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=gdrive-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdrive-auth.d.ts","sourceRoot":"","sources":["../src/gdrive-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAInG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ7D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { google } from "googleapis";
|
|
3
|
+
export function createGDriveOAuthClient(clientSecretPath, redirectUri) {
|
|
4
|
+
const secret = JSON.parse(readFileSync(clientSecretPath, "utf-8"));
|
|
5
|
+
const { client_id, client_secret } = secret.installed ?? secret.web;
|
|
6
|
+
return new google.auth.OAuth2(client_id, client_secret, redirectUri);
|
|
7
|
+
}
|
|
8
|
+
export function getGDriveAuthUrl(client) {
|
|
9
|
+
return client.generateAuthUrl({
|
|
10
|
+
access_type: "offline",
|
|
11
|
+
scope: [
|
|
12
|
+
"https://www.googleapis.com/auth/drive",
|
|
13
|
+
],
|
|
14
|
+
prompt: "consent",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=gdrive-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdrive-auth.js","sourceRoot":"","sources":["../src/gdrive-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,uBAAuB,CAAC,gBAAwB,EAAE,WAAmB;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,MAAM,CAAC,eAAe,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE;YACL,uCAAuC;SACxC;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=gmail-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gmail-auth.d.ts","sourceRoot":"","sources":["../src/gmail-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAI7F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { google } from "googleapis";
|
|
3
|
+
export function createOAuthClient(clientSecretPath, redirectUri) {
|
|
4
|
+
const secret = JSON.parse(readFileSync(clientSecretPath, "utf-8"));
|
|
5
|
+
const { client_id, client_secret } = secret.installed ?? secret.web;
|
|
6
|
+
return new google.auth.OAuth2(client_id, client_secret, redirectUri);
|
|
7
|
+
}
|
|
8
|
+
export function getAuthUrl(client) {
|
|
9
|
+
return client.generateAuthUrl({
|
|
10
|
+
access_type: "offline",
|
|
11
|
+
scope: [
|
|
12
|
+
"https://www.googleapis.com/auth/gmail.modify",
|
|
13
|
+
],
|
|
14
|
+
prompt: "consent",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=gmail-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gmail-auth.js","sourceRoot":"","sources":["../src/gmail-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,iBAAiB,CAAC,gBAAwB,EAAE,WAAmB;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,MAAM,CAAC,eAAe,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE;YACL,8CAA8C;SAC/C;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createGSheetsOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getGSheetsAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=gsheets-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsheets-auth.d.ts","sourceRoot":"","sources":["../src/gsheets-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAIpG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAS9D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { google } from "googleapis";
|
|
3
|
+
export function createGSheetsOAuthClient(clientSecretPath, redirectUri) {
|
|
4
|
+
const secret = JSON.parse(readFileSync(clientSecretPath, "utf-8"));
|
|
5
|
+
const { client_id, client_secret } = secret.installed ?? secret.web;
|
|
6
|
+
return new google.auth.OAuth2(client_id, client_secret, redirectUri);
|
|
7
|
+
}
|
|
8
|
+
export function getGSheetsAuthUrl(client) {
|
|
9
|
+
return client.generateAuthUrl({
|
|
10
|
+
access_type: "offline",
|
|
11
|
+
scope: [
|
|
12
|
+
"https://www.googleapis.com/auth/spreadsheets",
|
|
13
|
+
"https://www.googleapis.com/auth/drive",
|
|
14
|
+
],
|
|
15
|
+
prompt: "consent",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=gsheets-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsheets-auth.js","sourceRoot":"","sources":["../src/gsheets-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,wBAAwB,CAAC,gBAAwB,EAAE,WAAmB;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,MAAM,CAAC,eAAe,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE;YACL,8CAA8C;YAC9C,uCAAuC;SACxC;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { google } from "googleapis";
|
|
2
|
+
type OAuth2Client = InstanceType<typeof google.auth.OAuth2>;
|
|
3
|
+
export declare function createGSlidesOAuthClient(clientSecretPath: string, redirectUri: string): OAuth2Client;
|
|
4
|
+
export declare function getGSlidesAuthUrl(client: OAuth2Client): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=gslides-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gslides-auth.d.ts","sourceRoot":"","sources":["../src/gslides-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAIpG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAS9D"}
|