xiaotime 0.1.0 → 0.2.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/auth.d.ts +16 -5
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +34 -11
- package/dist/auth.js.map +1 -1
- package/package.json +2 -3
package/dist/auth.d.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* OAuth login flow for the xiaotime CLI.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* SPRINT-PLATFORM-TERMINAL-DEVELOPER-MAX-MIGRATION-1 (#6097) PR2.
|
|
5
|
+
* Defaults to Google OAuth (the platform's standard identity provider
|
|
6
|
+
* post-Discord deprecation). Discord remains usable for one observation
|
|
7
|
+
* window via XIAOTIME_OAUTH_PROVIDER=discord, then will be removed in a
|
|
8
|
+
* follow-up PR after Google has run clean.
|
|
9
|
+
*
|
|
10
|
+
* xiaotime login (provider=google):
|
|
11
|
+
* 1. POST /oauth/google/cli/init → pending_id + auth_url
|
|
12
|
+
* 2. Open browser to auth_url (Google consent screen)
|
|
13
|
+
* 3. Poll /oauth/google/cli/token?pending_id=... until complete
|
|
8
14
|
* 4. Store cli_token in ~/.xiaotime/credentials.json
|
|
15
|
+
*
|
|
16
|
+
* xiaotime login (provider=discord, legacy):
|
|
17
|
+
* Same shape, hits /oauth/discord/cli/{init,token} instead.
|
|
9
18
|
*/
|
|
10
19
|
interface Credentials {
|
|
11
20
|
token: string;
|
|
21
|
+
provider?: "discord" | "google";
|
|
12
22
|
discord_username?: string;
|
|
23
|
+
google_email?: string;
|
|
13
24
|
issued_at: string;
|
|
14
25
|
}
|
|
15
26
|
export declare function loadCredentials(): Credentials | null;
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IAMd,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAOpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAMxD;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAOjC;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC9C"}
|
package/dist/auth.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* OAuth login flow for the xiaotime CLI.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* SPRINT-PLATFORM-TERMINAL-DEVELOPER-MAX-MIGRATION-1 (#6097) PR2.
|
|
6
|
+
* Defaults to Google OAuth (the platform's standard identity provider
|
|
7
|
+
* post-Discord deprecation). Discord remains usable for one observation
|
|
8
|
+
* window via XIAOTIME_OAUTH_PROVIDER=discord, then will be removed in a
|
|
9
|
+
* follow-up PR after Google has run clean.
|
|
10
|
+
*
|
|
11
|
+
* xiaotime login (provider=google):
|
|
12
|
+
* 1. POST /oauth/google/cli/init → pending_id + auth_url
|
|
13
|
+
* 2. Open browser to auth_url (Google consent screen)
|
|
14
|
+
* 3. Poll /oauth/google/cli/token?pending_id=... until complete
|
|
9
15
|
* 4. Store cli_token in ~/.xiaotime/credentials.json
|
|
16
|
+
*
|
|
17
|
+
* xiaotime login (provider=discord, legacy):
|
|
18
|
+
* Same shape, hits /oauth/discord/cli/{init,token} instead.
|
|
10
19
|
*/
|
|
11
20
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
21
|
if (k2 === undefined) k2 = k;
|
|
@@ -52,6 +61,15 @@ const path = __importStar(require("path"));
|
|
|
52
61
|
const config_js_1 = require("./config.js");
|
|
53
62
|
const CREDENTIALS_DIR = path.join(os.homedir(), ".xiaotime");
|
|
54
63
|
const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, "credentials.json");
|
|
64
|
+
function selectedProvider() {
|
|
65
|
+
const raw = (process.env.XIAOTIME_OAUTH_PROVIDER || "").trim().toLowerCase();
|
|
66
|
+
if (raw === "discord")
|
|
67
|
+
return "discord";
|
|
68
|
+
// Any other value (including empty / typos) → google. Reasoning:
|
|
69
|
+
// typos shouldn't silently route through the deprecated Discord
|
|
70
|
+
// flow; the explicit opt-in is the only way back to Discord.
|
|
71
|
+
return "google";
|
|
72
|
+
}
|
|
55
73
|
function loadCredentials() {
|
|
56
74
|
try {
|
|
57
75
|
const raw = fs.readFileSync(CREDENTIALS_FILE, "utf-8");
|
|
@@ -77,9 +95,13 @@ function getToken() {
|
|
|
77
95
|
return creds.token;
|
|
78
96
|
}
|
|
79
97
|
async function runLogin() {
|
|
80
|
-
|
|
98
|
+
const provider = selectedProvider();
|
|
99
|
+
const providerLabel = provider === "discord" ? "Discord" : "Google";
|
|
100
|
+
const initPath = `/oauth/${provider}/cli/init`;
|
|
101
|
+
const tokenPath = `/oauth/${provider}/cli/token`;
|
|
102
|
+
console.log(`Connecting to xiaotime (${providerLabel} login)...\n`);
|
|
81
103
|
// Step 1: init
|
|
82
|
-
const initRes = await fetch(`${config_js_1.ORCHESTRATOR_URL}
|
|
104
|
+
const initRes = await fetch(`${config_js_1.ORCHESTRATOR_URL}${initPath}`, {
|
|
83
105
|
method: "POST",
|
|
84
106
|
});
|
|
85
107
|
if (!initRes.ok) {
|
|
@@ -88,27 +110,28 @@ async function runLogin() {
|
|
|
88
110
|
}
|
|
89
111
|
const { pending_id, auth_url } = await initRes.json();
|
|
90
112
|
// Step 2: open browser
|
|
91
|
-
console.log(
|
|
113
|
+
console.log(`Opening browser for ${providerLabel} login...`);
|
|
92
114
|
console.log(` ${auth_url}\n`);
|
|
93
115
|
console.log("If the browser does not open, copy the URL above and paste it into your browser.\n");
|
|
94
116
|
openBrowser(auth_url);
|
|
95
117
|
// Step 3: poll
|
|
96
118
|
console.log("Waiting for authentication...");
|
|
97
|
-
const token = await pollForToken(pending_id);
|
|
119
|
+
const token = await pollForToken(pending_id, tokenPath);
|
|
98
120
|
// Step 4: save
|
|
99
121
|
saveCredentials({
|
|
100
122
|
token,
|
|
123
|
+
provider,
|
|
101
124
|
issued_at: new Date().toISOString(),
|
|
102
125
|
});
|
|
103
126
|
console.log("\n✓ Logged in. You can now run: xiaotime dev\n");
|
|
104
127
|
}
|
|
105
|
-
async function pollForToken(pendingId, timeoutMs = 120_000) {
|
|
128
|
+
async function pollForToken(pendingId, tokenPath, timeoutMs = 120_000) {
|
|
106
129
|
const deadline = Date.now() + timeoutMs;
|
|
107
130
|
const interval = 2000;
|
|
108
131
|
while (Date.now() < deadline) {
|
|
109
132
|
await sleep(interval);
|
|
110
133
|
try {
|
|
111
|
-
const res = await fetch(`${config_js_1.ORCHESTRATOR_URL}
|
|
134
|
+
const res = await fetch(`${config_js_1.ORCHESTRATOR_URL}${tokenPath}?pending_id=${encodeURIComponent(pendingId)}`);
|
|
112
135
|
if (!res.ok) {
|
|
113
136
|
// 410 = expired
|
|
114
137
|
const body = await res.json();
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xiaotime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Xiaotime Developer — persistent-memory AI coding assistant",
|
|
5
5
|
"bin": {
|
|
6
6
|
"xiaotime": "./dist/index.js"
|
|
@@ -16,12 +16,11 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"ws": "^8.18.0",
|
|
19
|
-
"diff": "^
|
|
19
|
+
"diff": "^9.0.0",
|
|
20
20
|
"chalk": "^4.1.2"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/ws": "^8.5.12",
|
|
24
|
-
"@types/diff": "^5.2.3",
|
|
25
24
|
"@types/node": "^22.0.0",
|
|
26
25
|
"typescript": "^5.7.0",
|
|
27
26
|
"ts-node": "^10.9.2"
|