Skip to content

Commit

Permalink
Make API key configurable. Fixes #10
Browse files Browse the repository at this point in the history
  • Loading branch information
tmcw committed Mar 28, 2024
1 parent 0145552 commit 4712f40
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 7 deletions.
4 changes: 3 additions & 1 deletion demo/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ increment('not a number');`,
typescript: true,
jsx: true,
}),
copilotPlugin(),
copilotPlugin({
apiKey: "d49954eb-cfba-4992-980f-d8fb37f0e942",
}),
],
parent: document.querySelector("#editor")!,
});
Expand Down
11 changes: 6 additions & 5 deletions src/codeium.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ import { LanguageServerService } from "./api/proto/exa/language_server_pb/langua
import { createConnectTransport } from "@connectrpc/connect-web";
import { Language } from "./api/proto/exa/codeium_common_pb/codeium_common_pb.js";
import { GetCompletionsResponse } from "./api/proto/exa/language_server_pb/language_server_pb.js";
import { CodeiumConfig } from "./config.js";

// This is the same as the monaco editor example
const EDITOR_API_KEY = "d49954eb-cfba-4992-980f-d8fb37f0e942";

const transport = createConnectTransport({
baseUrl: "https://web-backend.codeium.com",
useBinaryFormat: true,
Expand All @@ -19,9 +18,11 @@ const sessionId = crypto.randomUUID();
export async function getCodeiumCompletions({
text,
cursorOffset,
config,
}: {
text: string;
cursorOffset: number;
config: CodeiumConfig;
}) {
const completions = (await client.getCompletions(
{
Expand All @@ -30,15 +31,15 @@ export async function getCodeiumCompletions({
ideVersion: "unknown",
extensionName: "@valtown/codemirror-codeium",
extensionVersion: "unknown",
apiKey: EDITOR_API_KEY,
apiKey: config.apiKey,
sessionId: sessionId,
},
document: {
text: text,
cursorOffset: BigInt(cursorOffset),
language: Language.TYPESCRIPT,
// The types don't like this here, but it works.
editorLanguage: "typescript", // Language.TYPESCRIPT as unknown as string,
editorLanguage: "typescript",
lineEnding: "\n",
},
editorOptions: {
Expand All @@ -51,7 +52,7 @@ export async function getCodeiumCompletions({
{
// signal,
headers: {
Authorization: `Basic ${EDITOR_API_KEY}-${sessionId}`,
Authorization: `Basic ${config.apiKey}-${sessionId}`,
},
},
// TODO: why doesn't this work by default?
Expand Down
4 changes: 4 additions & 0 deletions src/completionRequester.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
} from "./effects.js";
import { completionDecoration } from "./completionDecoration.js";
import { copilotEvent } from "./annotations.js";
import { codeiumConfig } from "./config.js";

// milliseconds before cancelling request
// against codeium
Expand Down Expand Up @@ -59,6 +60,8 @@ export function completionRequester() {
let lastPos = 0;

return EditorView.updateListener.of((update: ViewUpdate) => {
const config = update.view.state.facet(codeiumConfig);

if (!shouldRequestCompletion(update)) return;

// Cancel the previous timeout
Expand All @@ -85,6 +88,7 @@ export function completionRequester() {
const completionResult = await getCodeiumCompletions({
text: source,
cursorOffset: pos,
config,
});

if (!completionResult || completionResult.length === 0) {
Expand Down
14 changes: 14 additions & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Facet, combineConfig } from "@codemirror/state";

export interface CodeiumConfig {
apiKey: string;
}

export const codeiumConfig = Facet.define<
CodeiumConfig,
Required<CodeiumConfig>
>({
combine(configs) {
return combineConfig<Required<CodeiumConfig>>(configs, {}, {});
},
});
4 changes: 3 additions & 1 deletion src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Extension, Prec } from "@codemirror/state";
import { completionDecoration } from "./completionDecoration.js";
import { completionRequester } from "./completionRequester.js";
import { sameKeyCommand, rejectSuggestionCommand } from "./commands.js";
import { CodeiumConfig, codeiumConfig } from "./config.js";

function completionPlugin() {
return EditorView.domEventHandlers({
Expand Down Expand Up @@ -32,8 +33,9 @@ function viewCompletionPlugin() {
});
}

export function copilotPlugin(): Extension {
export function copilotPlugin(config: CodeiumConfig): Extension {
return [
codeiumConfig.of(config),
completionDecoration,
Prec.highest(completionPlugin()),
Prec.highest(viewCompletionPlugin()),
Expand Down

0 comments on commit 4712f40

Please sign in to comment.