opencode-antigravity-auth 1.0.3 → 1.0.5

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 (62) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +3 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/antigravity/oauth.d.ts +31 -0
  7. package/dist/src/antigravity/oauth.d.ts.map +1 -0
  8. package/dist/src/antigravity/oauth.js +154 -0
  9. package/dist/src/antigravity/oauth.js.map +1 -0
  10. package/dist/src/constants.d.ts +52 -0
  11. package/dist/src/constants.d.ts.map +1 -0
  12. package/dist/src/constants.js +66 -0
  13. package/dist/src/constants.js.map +1 -0
  14. package/dist/src/plugin/auth.d.ts +15 -0
  15. package/dist/src/plugin/auth.d.ts.map +1 -0
  16. package/dist/src/plugin/auth.js +33 -0
  17. package/dist/src/plugin/auth.js.map +1 -0
  18. package/dist/src/plugin/cache.d.ts +14 -0
  19. package/dist/src/plugin/cache.d.ts.map +1 -0
  20. package/dist/src/plugin/cache.js +56 -0
  21. package/dist/src/plugin/cache.js.map +1 -0
  22. package/dist/src/plugin/cli.d.ts +5 -0
  23. package/dist/src/plugin/cli.d.ts.map +1 -0
  24. package/dist/src/plugin/cli.js +16 -0
  25. package/dist/src/plugin/cli.js.map +1 -0
  26. package/dist/src/plugin/debug.d.ts +30 -0
  27. package/dist/src/plugin/debug.d.ts.map +1 -0
  28. package/dist/src/plugin/debug.js +142 -0
  29. package/dist/src/plugin/debug.js.map +1 -0
  30. package/dist/src/plugin/project.d.ts +33 -0
  31. package/dist/src/plugin/project.d.ts.map +1 -0
  32. package/dist/src/plugin/project.js +241 -0
  33. package/dist/src/plugin/project.js.map +1 -0
  34. package/dist/src/plugin/request-helpers.d.ts +51 -0
  35. package/dist/src/plugin/request-helpers.d.ts.map +1 -0
  36. package/dist/src/plugin/request-helpers.js +135 -0
  37. package/dist/src/plugin/request-helpers.js.map +1 -0
  38. package/dist/src/plugin/request.d.ts +27 -0
  39. package/dist/src/plugin/request.d.ts.map +1 -0
  40. package/dist/src/plugin/request.js +458 -0
  41. package/dist/src/plugin/request.js.map +1 -0
  42. package/dist/src/plugin/server.d.ts +23 -0
  43. package/dist/src/plugin/server.d.ts.map +1 -0
  44. package/dist/src/plugin/server.js +216 -0
  45. package/dist/src/plugin/server.js.map +1 -0
  46. package/dist/src/plugin/token.d.ts +6 -0
  47. package/dist/src/plugin/token.d.ts.map +1 -0
  48. package/dist/src/plugin/token.js +126 -0
  49. package/dist/src/plugin/token.js.map +1 -0
  50. package/dist/src/plugin/token.test.d.ts +2 -0
  51. package/dist/src/plugin/token.test.d.ts.map +1 -0
  52. package/dist/src/plugin/token.test.js +56 -0
  53. package/dist/src/plugin/token.test.js.map +1 -0
  54. package/dist/src/plugin/types.d.ts +68 -0
  55. package/dist/src/plugin/types.d.ts.map +1 -0
  56. package/dist/src/plugin/types.js +1 -0
  57. package/dist/src/plugin/types.js.map +1 -0
  58. package/dist/src/plugin.d.ts +8 -0
  59. package/dist/src/plugin.d.ts.map +1 -0
  60. package/dist/src/plugin.js +249 -0
  61. package/dist/src/plugin.js.map +1 -0
  62. package/package.json +4 -3
@@ -0,0 +1,216 @@
1
+ import { createServer } from "node:http";
2
+ import { ANTIGRAVITY_REDIRECT_URI } from "../constants";
3
+ const redirectUri = new URL(ANTIGRAVITY_REDIRECT_URI);
4
+ const callbackPath = redirectUri.pathname || "/";
5
+ /**
6
+ * Starts a lightweight HTTP server that listens for the Antigravity OAuth redirect
7
+ * and resolves with the captured callback URL.
8
+ */
9
+ export async function startOAuthListener({ timeoutMs = 5 * 60 * 1000 } = {}) {
10
+ const port = redirectUri.port
11
+ ? Number.parseInt(redirectUri.port, 10)
12
+ : redirectUri.protocol === "https:"
13
+ ? 443
14
+ : 80;
15
+ const origin = `${redirectUri.protocol}//${redirectUri.host}`;
16
+ let settled = false;
17
+ let resolveCallback;
18
+ let rejectCallback;
19
+ let timeoutHandle;
20
+ const callbackPromise = new Promise((resolve, reject) => {
21
+ resolveCallback = (url) => {
22
+ if (settled)
23
+ return;
24
+ settled = true;
25
+ if (timeoutHandle)
26
+ clearTimeout(timeoutHandle);
27
+ resolve(url);
28
+ };
29
+ rejectCallback = (error) => {
30
+ if (settled)
31
+ return;
32
+ settled = true;
33
+ if (timeoutHandle)
34
+ clearTimeout(timeoutHandle);
35
+ reject(error);
36
+ };
37
+ });
38
+ const successResponse = `<!DOCTYPE html>
39
+ <html lang="en">
40
+ <head>
41
+ <meta charset="utf-8" />
42
+ <meta name="viewport" content="width=device-width, initial-scale=1">
43
+ <title>Authentication Successful</title>
44
+ <style>
45
+ :root {
46
+ --bg: #FAFAFA;
47
+ --card-bg: #FFFFFF;
48
+ --text-primary: #1F2937;
49
+ --text-secondary: #6B7280;
50
+ --accent: #2563EB;
51
+ --success: #10B981;
52
+ --border: #E5E7EB;
53
+ }
54
+ @media (prefers-color-scheme: dark) {
55
+ :root {
56
+ --bg: #111827;
57
+ --card-bg: #1F2937;
58
+ --text-primary: #F9FAFB;
59
+ --text-secondary: #9CA3AF;
60
+ --accent: #3B82F6;
61
+ --success: #34D399;
62
+ --border: #374151;
63
+ }
64
+ }
65
+ body {
66
+ margin: 0;
67
+ min-height: 100vh;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
72
+ background: var(--bg);
73
+ color: var(--text-primary);
74
+ padding: 1rem;
75
+ }
76
+ .card {
77
+ background: var(--card-bg);
78
+ border-radius: 16px;
79
+ padding: 3rem 2rem;
80
+ width: 100%;
81
+ max-width: 400px;
82
+ text-align: center;
83
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
84
+ border: 1px solid var(--border);
85
+ }
86
+ .icon-wrapper {
87
+ width: 64px;
88
+ height: 64px;
89
+ background: rgba(16, 185, 129, 0.1);
90
+ border-radius: 50%;
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: center;
94
+ margin: 0 auto 1.5rem;
95
+ }
96
+ .icon {
97
+ width: 32px;
98
+ height: 32px;
99
+ color: var(--success);
100
+ }
101
+ h1 {
102
+ font-size: 1.5rem;
103
+ font-weight: 600;
104
+ margin: 0 0 0.5rem;
105
+ letter-spacing: -0.025em;
106
+ }
107
+ p {
108
+ color: var(--text-secondary);
109
+ font-size: 0.95rem;
110
+ line-height: 1.5;
111
+ margin: 0 0 2rem;
112
+ }
113
+ .btn {
114
+ display: inline-flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ background: var(--text-primary);
118
+ color: var(--card-bg);
119
+ font-weight: 500;
120
+ padding: 0.75rem 1.5rem;
121
+ border-radius: 8px;
122
+ text-decoration: none;
123
+ transition: opacity 0.2s;
124
+ font-size: 0.95rem;
125
+ border: none;
126
+ cursor: pointer;
127
+ width: 100%;
128
+ box-sizing: border-box;
129
+ }
130
+ .btn:hover {
131
+ opacity: 0.9;
132
+ }
133
+ .sub-text {
134
+ margin-top: 1rem;
135
+ font-size: 0.8rem;
136
+ color: var(--text-secondary);
137
+ }
138
+ </style>
139
+ </head>
140
+ <body>
141
+ <div class="card">
142
+ <div class="icon-wrapper">
143
+ <svg class="icon" fill="none" viewBox="0 0 24 24" stroke="currentColor">
144
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7" />
145
+ </svg>
146
+ </div>
147
+ <h1>All set!</h1>
148
+ <p>You've successfully authenticated with Antigravity. You can now return to Opencode.</p>
149
+ <button class="btn" onclick="closeWindow()">Close this tab</button>
150
+ <div class="sub-text">Usage Tip: Most browsers block auto-closing. If the button doesn't work, please close the tab manually.</div>
151
+ </div>
152
+ <script>
153
+ function closeWindow() {
154
+ window.close();
155
+ // Fallback if window.close() is blocked
156
+ document.querySelector('.btn').textContent = "Tab cannot be closed automatically";
157
+ document.querySelector('.btn').style.opacity = "0.5";
158
+ document.querySelector('.btn').style.cursor = "default";
159
+ }
160
+ </script>
161
+ </body>
162
+ </html>`;
163
+ timeoutHandle = setTimeout(() => {
164
+ rejectCallback(new Error("Timed out waiting for OAuth callback"));
165
+ }, timeoutMs);
166
+ timeoutHandle.unref?.();
167
+ const server = createServer((request, response) => {
168
+ if (!request.url) {
169
+ response.writeHead(400, { "Content-Type": "text/plain" });
170
+ response.end("Invalid request");
171
+ return;
172
+ }
173
+ const url = new URL(request.url, origin);
174
+ if (url.pathname !== callbackPath) {
175
+ response.writeHead(404, { "Content-Type": "text/plain" });
176
+ response.end("Not found");
177
+ return;
178
+ }
179
+ response.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
180
+ response.end(successResponse);
181
+ resolveCallback(url);
182
+ setImmediate(() => {
183
+ server.close();
184
+ });
185
+ });
186
+ await new Promise((resolve, reject) => {
187
+ const handleError = (error) => {
188
+ server.off("error", handleError);
189
+ reject(error);
190
+ };
191
+ server.once("error", handleError);
192
+ server.listen(port, "127.0.0.1", () => {
193
+ server.off("error", handleError);
194
+ resolve();
195
+ });
196
+ });
197
+ server.on("error", (error) => {
198
+ rejectCallback(error instanceof Error ? error : new Error(String(error)));
199
+ });
200
+ return {
201
+ waitForCallback: () => callbackPromise,
202
+ close: () => new Promise((resolve, reject) => {
203
+ server.close((error) => {
204
+ if (error && error.code !== "ERR_SERVER_NOT_RUNNING") {
205
+ reject(error);
206
+ return;
207
+ }
208
+ if (!settled) {
209
+ rejectCallback(new Error("OAuth listener closed before callback"));
210
+ }
211
+ resolve();
212
+ });
213
+ }),
214
+ };
215
+ }
216
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/plugin/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { OAuthAuthDetails, PluginClient } from "./types";
2
+ /**
3
+ * Refreshes an Antigravity OAuth access token, updates persisted credentials, and handles revocation.
4
+ */
5
+ export declare function refreshAccessToken(auth: OAuthAuthDetails, client: PluginClient, providerId: string): Promise<OAuthAuthDetails | undefined>;
6
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/plugin/token.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAoD5E;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA+FvC"}
@@ -0,0 +1,126 @@
1
+ import { ANTIGRAVITY_CLIENT_ID, ANTIGRAVITY_CLIENT_SECRET, ANTIGRAVITY_PROVIDER_ID, } from "../constants";
2
+ import { formatRefreshParts, parseRefreshParts } from "./auth";
3
+ import { clearCachedAuth, storeCachedAuth } from "./cache";
4
+ import { invalidateProjectContextCache } from "./project";
5
+ /**
6
+ * Parses OAuth error payloads returned by Google token endpoints, tolerating varied shapes.
7
+ */
8
+ function parseOAuthErrorPayload(text) {
9
+ if (!text) {
10
+ return {};
11
+ }
12
+ try {
13
+ const payload = JSON.parse(text);
14
+ if (!payload || typeof payload !== "object") {
15
+ return { description: text };
16
+ }
17
+ let code;
18
+ if (typeof payload.error === "string") {
19
+ code = payload.error;
20
+ }
21
+ else if (payload.error && typeof payload.error === "object") {
22
+ code = payload.error.status ?? payload.error.code;
23
+ if (!payload.error_description && payload.error.message) {
24
+ return { code, description: payload.error.message };
25
+ }
26
+ }
27
+ const description = payload.error_description;
28
+ if (description) {
29
+ return { code, description };
30
+ }
31
+ if (payload.error && typeof payload.error === "object" && payload.error.message) {
32
+ return { code, description: payload.error.message };
33
+ }
34
+ return { code };
35
+ }
36
+ catch {
37
+ return { description: text };
38
+ }
39
+ }
40
+ /**
41
+ * Refreshes an Antigravity OAuth access token, updates persisted credentials, and handles revocation.
42
+ */
43
+ export async function refreshAccessToken(auth, client, providerId) {
44
+ const parts = parseRefreshParts(auth.refresh);
45
+ if (!parts.refreshToken) {
46
+ return undefined;
47
+ }
48
+ try {
49
+ const response = await fetch("https://oauth2.googleapis.com/token", {
50
+ method: "POST",
51
+ headers: {
52
+ "Content-Type": "application/x-www-form-urlencoded",
53
+ },
54
+ body: new URLSearchParams({
55
+ grant_type: "refresh_token",
56
+ refresh_token: parts.refreshToken,
57
+ client_id: ANTIGRAVITY_CLIENT_ID,
58
+ client_secret: ANTIGRAVITY_CLIENT_SECRET,
59
+ }),
60
+ });
61
+ if (!response.ok) {
62
+ let errorText;
63
+ try {
64
+ errorText = await response.text();
65
+ }
66
+ catch {
67
+ errorText = undefined;
68
+ }
69
+ const { code, description } = parseOAuthErrorPayload(errorText);
70
+ const details = [code, description ?? errorText].filter(Boolean).join(": ");
71
+ const baseMessage = `Antigravity token refresh failed (${response.status} ${response.statusText})`;
72
+ console.warn(`[Antigravity OAuth] ${details ? `${baseMessage} - ${details}` : baseMessage}`);
73
+ if (code === "invalid_grant") {
74
+ console.warn("[Antigravity OAuth] Google revoked the stored refresh token. Run `opencode auth login` and reauthenticate the Google provider.");
75
+ invalidateProjectContextCache(auth.refresh);
76
+ try {
77
+ const clearedAuth = {
78
+ type: "oauth",
79
+ refresh: formatRefreshParts({
80
+ refreshToken: "",
81
+ projectId: parts.projectId,
82
+ managedProjectId: parts.managedProjectId,
83
+ }),
84
+ };
85
+ await client.auth.set({
86
+ path: { id: providerId },
87
+ body: clearedAuth,
88
+ });
89
+ }
90
+ catch (storeError) {
91
+ console.error("Failed to clear stored Antigravity OAuth credentials:", storeError);
92
+ }
93
+ }
94
+ return undefined;
95
+ }
96
+ const payload = (await response.json());
97
+ const refreshedParts = {
98
+ refreshToken: payload.refresh_token ?? parts.refreshToken,
99
+ projectId: parts.projectId,
100
+ managedProjectId: parts.managedProjectId,
101
+ };
102
+ const updatedAuth = {
103
+ ...auth,
104
+ access: payload.access_token,
105
+ expires: Date.now() + payload.expires_in * 1000,
106
+ refresh: formatRefreshParts(refreshedParts),
107
+ };
108
+ storeCachedAuth(updatedAuth);
109
+ invalidateProjectContextCache(auth.refresh);
110
+ try {
111
+ await client.auth.set({
112
+ path: { id: providerId },
113
+ body: updatedAuth,
114
+ });
115
+ }
116
+ catch (storeError) {
117
+ console.error("Failed to persist refreshed Antigravity OAuth credentials:", storeError);
118
+ }
119
+ return updatedAuth;
120
+ }
121
+ catch (error) {
122
+ console.error("Failed to refresh Antigravity access token due to an unexpected error:", error);
123
+ return undefined;
124
+ }
125
+ }
126
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/plugin/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.test.d.ts","sourceRoot":"","sources":["../../../src/plugin/token.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { ANTIGRAVITY_PROVIDER_ID } from "../constants";
3
+ import { refreshAccessToken } from "./token";
4
+ const baseAuth = {
5
+ type: "oauth",
6
+ refresh: "refresh-token|project-123",
7
+ access: "old-access",
8
+ expires: Date.now() - 1000,
9
+ };
10
+ function createClient() {
11
+ return {
12
+ auth: {
13
+ set: vi.fn(async () => { }),
14
+ },
15
+ };
16
+ }
17
+ describe("refreshAccessToken", () => {
18
+ beforeEach(() => {
19
+ vi.restoreAllMocks();
20
+ });
21
+ it("updates the caller and persists when refresh token is unchanged", async () => {
22
+ const client = createClient();
23
+ const fetchMock = vi.fn(async () => {
24
+ return new Response(JSON.stringify({
25
+ access_token: "new-access",
26
+ expires_in: 3600,
27
+ }), { status: 200 });
28
+ });
29
+ global.fetch = fetchMock;
30
+ const result = await refreshAccessToken(baseAuth, client, ANTIGRAVITY_PROVIDER_ID);
31
+ expect(result?.access).toBe("new-access");
32
+ expect(client.auth.set.mock.calls.length).toBe(1);
33
+ });
34
+ it("persists when Google rotates the refresh token", async () => {
35
+ const client = createClient();
36
+ const fetchMock = vi.fn(async () => {
37
+ return new Response(JSON.stringify({
38
+ access_token: "next-access",
39
+ expires_in: 3600,
40
+ refresh_token: "rotated-token",
41
+ }), { status: 200 });
42
+ });
43
+ global.fetch = fetchMock;
44
+ const result = await refreshAccessToken(baseAuth, client, ANTIGRAVITY_PROVIDER_ID);
45
+ expect(result?.access).toBe("next-access");
46
+ expect(client.auth.set.mock.calls.length).toBe(1);
47
+ expect(client.auth.set.mock.calls[0]?.[0]).toEqual({
48
+ path: { id: ANTIGRAVITY_PROVIDER_ID },
49
+ body: expect.objectContaining({
50
+ type: "oauth",
51
+ refresh: expect.stringContaining("rotated-token"),
52
+ }),
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=token.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.test.js","sourceRoot":"","sources":["../../../src/plugin/token.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { AntigravityTokenExchangeResult } from "../antigravity/oauth";
2
+ export interface OAuthAuthDetails {
3
+ type: "oauth";
4
+ refresh: string;
5
+ access?: string;
6
+ expires?: number;
7
+ }
8
+ export interface NonOAuthAuthDetails {
9
+ type: string;
10
+ [key: string]: unknown;
11
+ }
12
+ export type AuthDetails = OAuthAuthDetails | NonOAuthAuthDetails;
13
+ export type GetAuth = () => Promise<AuthDetails>;
14
+ export interface ProviderModel {
15
+ cost?: {
16
+ input: number;
17
+ output: number;
18
+ };
19
+ [key: string]: unknown;
20
+ }
21
+ export interface Provider {
22
+ models?: Record<string, ProviderModel>;
23
+ }
24
+ export interface LoaderResult {
25
+ apiKey: string;
26
+ fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
27
+ }
28
+ export interface AuthMethod {
29
+ provider?: string;
30
+ label: string;
31
+ type: "oauth" | "api";
32
+ authorize?: () => Promise<{
33
+ url: string;
34
+ instructions: string;
35
+ method: string;
36
+ callback: (callbackUrl: string) => Promise<AntigravityTokenExchangeResult>;
37
+ }>;
38
+ }
39
+ export interface PluginClient {
40
+ auth: {
41
+ set(input: {
42
+ path: {
43
+ id: string;
44
+ };
45
+ body: OAuthAuthDetails;
46
+ }): Promise<void>;
47
+ };
48
+ }
49
+ export interface PluginContext {
50
+ client: PluginClient;
51
+ }
52
+ export interface PluginResult {
53
+ auth: {
54
+ provider: string;
55
+ loader: (getAuth: GetAuth, provider: Provider) => Promise<LoaderResult | null>;
56
+ methods: AuthMethod[];
57
+ };
58
+ }
59
+ export interface RefreshParts {
60
+ refreshToken: string;
61
+ projectId?: string;
62
+ managedProjectId?: string;
63
+ }
64
+ export interface ProjectContextResult {
65
+ auth: OAuthAuthDetails;
66
+ effectiveProjectId: string;
67
+ }
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAEjE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;KAC5E,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,GAAG,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,IAAI,EAAE,gBAAgB,CAAA;SAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7E,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAC/E,OAAO,EAAE,UAAU,EAAE,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugin/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { PluginContext, PluginResult } from "./plugin/types";
2
+ /**
3
+ * Creates an Antigravity OAuth plugin for a specific provider ID.
4
+ */
5
+ export declare const createAntigravityPlugin: (providerId: string) => ({ client }: PluginContext) => Promise<PluginResult>;
6
+ export declare const AntigravityCLIOAuthPlugin: ({ client }: PluginContext) => Promise<PluginResult>;
7
+ export declare const GoogleOAuthPlugin: ({ client }: PluginContext) => Promise<PluginResult>;
8
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAGV,aAAa,EACb,YAAY,EAGb,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,YAAY,MAAM,MACxD,YAAY,aAAa,KACxB,OAAO,CAAC,YAAY,CA6SrB,CAAC;AAEH,eAAO,MAAM,yBAAyB,eAhTxB,aAAa,KACxB,OAAO,CAAC,YAAY,CA+SkE,CAAC;AAC1F,eAAO,MAAM,iBAAiB,eAjThB,aAAa,KACxB,OAAO,CAAC,YAAY,CAgTmC,CAAC"}