@antelopejs/dms-ai 0.4.0 → 0.5.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.
Files changed (125) hide show
  1. package/README.md +5 -3
  2. package/dist/constants/database.d.ts +7 -0
  3. package/dist/constants/database.js +11 -0
  4. package/dist/constants/database.js.map +1 -0
  5. package/dist/constants/pages.d.ts +3 -0
  6. package/dist/constants/pages.js +3 -0
  7. package/dist/constants/pages.js.map +1 -1
  8. package/dist/database/catalog.d.ts +4 -0
  9. package/dist/database/catalog.js +25 -0
  10. package/dist/database/catalog.js.map +1 -0
  11. package/dist/logging/log-buffer.js +1 -1
  12. package/dist/logging/log-buffer.js.map +1 -1
  13. package/dist/pages/settings/page.d.ts +1 -0
  14. package/dist/pages/settings/page.js +1 -0
  15. package/dist/pages/settings/page.js.map +1 -1
  16. package/dist/routes/builder.js +8 -0
  17. package/dist/routes/builder.js.map +1 -1
  18. package/dist/routes/codex-account.d.ts +8 -0
  19. package/dist/routes/codex-account.js +162 -0
  20. package/dist/routes/codex-account.js.map +1 -0
  21. package/dist/routes/database.d.ts +21 -0
  22. package/dist/routes/database.js +115 -0
  23. package/dist/routes/database.js.map +1 -0
  24. package/dist/routes/index.d.ts +2 -0
  25. package/dist/routes/index.js +2 -0
  26. package/dist/routes/index.js.map +1 -1
  27. package/frontend-vue/app/chat/utils/tool-lexicon.ts +46 -0
  28. package/frontend-vue/app/runtime/session-gate.ts +11 -5
  29. package/frontend-vue/i18n/locales/dms-ai-pages-en-GB.json +30 -1
  30. package/frontend-vue/i18n/locales/dms-ai-pages-fr-FR.json +30 -1
  31. package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +8 -0
  32. package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +8 -0
  33. package/frontend-vue/package.json +1 -1
  34. package/frontend-vue/tests/panel-states.test.ts +1 -1
  35. package/frontend-vue/tests/session-gate.test.ts +28 -1
  36. package/package.json +6 -5
  37. package/sidecar/dist/agent/permission-preview.js +49 -2
  38. package/sidecar/dist/agent/permission-preview.js.map +1 -1
  39. package/sidecar/dist/agent/tool-kinds.d.ts +1 -0
  40. package/sidecar/dist/agent/tool-kinds.js +2 -1
  41. package/sidecar/dist/agent/tool-kinds.js.map +1 -1
  42. package/sidecar/dist/constants/builder.d.ts +7 -1
  43. package/sidecar/dist/constants/builder.js +10 -0
  44. package/sidecar/dist/constants/builder.js.map +1 -1
  45. package/sidecar/dist/constants/chatgpt.d.ts +39 -0
  46. package/sidecar/dist/constants/chatgpt.js +55 -0
  47. package/sidecar/dist/constants/chatgpt.js.map +1 -0
  48. package/sidecar/dist/constants/codex.d.ts +4 -5
  49. package/sidecar/dist/constants/codex.js +4 -5
  50. package/sidecar/dist/constants/codex.js.map +1 -1
  51. package/sidecar/dist/constants/database.d.ts +11 -0
  52. package/sidecar/dist/constants/database.js +17 -0
  53. package/sidecar/dist/constants/database.js.map +1 -0
  54. package/sidecar/dist/constants/http.d.ts +3 -0
  55. package/sidecar/dist/constants/http.js +3 -0
  56. package/sidecar/dist/constants/http.js.map +1 -1
  57. package/sidecar/dist/constants/mcp.js +2 -0
  58. package/sidecar/dist/constants/mcp.js.map +1 -1
  59. package/sidecar/dist/constants/providers.d.ts +1 -1
  60. package/sidecar/dist/constants/providers.js +1 -1
  61. package/sidecar/dist/constants/providers.js.map +1 -1
  62. package/sidecar/dist/constants/tool-kinds.d.ts +1 -0
  63. package/sidecar/dist/constants/tool-kinds.js +7 -0
  64. package/sidecar/dist/constants/tool-kinds.js.map +1 -1
  65. package/sidecar/dist/database/database-client.d.ts +11 -0
  66. package/sidecar/dist/database/database-client.js +50 -0
  67. package/sidecar/dist/database/database-client.js.map +1 -0
  68. package/sidecar/dist/index.js +6 -0
  69. package/sidecar/dist/index.js.map +1 -1
  70. package/sidecar/dist/mcp/tool-definitions.js +2 -0
  71. package/sidecar/dist/mcp/tool-definitions.js.map +1 -1
  72. package/sidecar/dist/mcp/tools/builder-gate.js +3 -1
  73. package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -1
  74. package/sidecar/dist/mcp/tools/builder-project.d.ts +8 -0
  75. package/sidecar/dist/mcp/tools/builder-project.js +181 -0
  76. package/sidecar/dist/mcp/tools/builder-project.js.map +1 -0
  77. package/sidecar/dist/mcp/tools/builder.d.ts +5 -2
  78. package/sidecar/dist/mcp/tools/builder.js +5 -11
  79. package/sidecar/dist/mcp/tools/builder.js.map +1 -1
  80. package/sidecar/dist/mcp/tools/database.d.ts +6 -0
  81. package/sidecar/dist/mcp/tools/database.js +42 -0
  82. package/sidecar/dist/mcp/tools/database.js.map +1 -0
  83. package/sidecar/dist/mcp/types.d.ts +2 -0
  84. package/sidecar/dist/providers/claude/safe-mode.js +11 -1
  85. package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
  86. package/sidecar/dist/providers/codex/chatgpt/credentials.d.ts +10 -0
  87. package/sidecar/dist/providers/codex/chatgpt/credentials.js +63 -0
  88. package/sidecar/dist/providers/codex/chatgpt/credentials.js.map +1 -0
  89. package/sidecar/dist/providers/codex/chatgpt/http.d.ts +3 -0
  90. package/sidecar/dist/providers/codex/chatgpt/http.js +66 -0
  91. package/sidecar/dist/providers/codex/chatgpt/http.js.map +1 -0
  92. package/sidecar/dist/providers/codex/chatgpt/lock.d.ts +1 -0
  93. package/sidecar/dist/providers/codex/chatgpt/lock.js +58 -0
  94. package/sidecar/dist/providers/codex/chatgpt/lock.js.map +1 -0
  95. package/sidecar/dist/providers/codex/chatgpt/login.d.ts +8 -0
  96. package/sidecar/dist/providers/codex/chatgpt/login.js +138 -0
  97. package/sidecar/dist/providers/codex/chatgpt/login.js.map +1 -0
  98. package/sidecar/dist/providers/codex/chatgpt/oauth.d.ts +38 -0
  99. package/sidecar/dist/providers/codex/chatgpt/oauth.js +167 -0
  100. package/sidecar/dist/providers/codex/chatgpt/oauth.js.map +1 -0
  101. package/sidecar/dist/providers/codex/chatgpt/store.d.ts +21 -0
  102. package/sidecar/dist/providers/codex/chatgpt/store.js +75 -0
  103. package/sidecar/dist/providers/codex/chatgpt/store.js.map +1 -0
  104. package/sidecar/dist/providers/codex/config.d.ts +1 -5
  105. package/sidecar/dist/providers/codex/config.js +27 -4
  106. package/sidecar/dist/providers/codex/config.js.map +1 -1
  107. package/sidecar/dist/providers/codex/module.js +11 -4
  108. package/sidecar/dist/providers/codex/module.js.map +1 -1
  109. package/sidecar/dist/providers/codex/process.d.ts +1 -1
  110. package/sidecar/dist/providers/codex/process.js +7 -3
  111. package/sidecar/dist/providers/codex/process.js.map +1 -1
  112. package/sidecar/dist/providers/codex/provider.d.ts +0 -1
  113. package/sidecar/dist/providers/codex/provider.js +7 -5
  114. package/sidecar/dist/providers/codex/provider.js.map +1 -1
  115. package/sidecar/dist/server/http.js +38 -0
  116. package/sidecar/dist/server/http.js.map +1 -1
  117. package/sidecar/dist/server/permission-events.js +3 -1
  118. package/sidecar/dist/server/permission-events.js.map +1 -1
  119. package/sidecar/dist/server/raw-data.js +1 -1
  120. package/sidecar/dist/server/raw-data.js.map +1 -1
  121. package/sidecar/dist/server/safety-net.js +1 -1
  122. package/sidecar/dist/server/safety-net.js.map +1 -1
  123. package/skills/dms-ai/SKILL.md +1 -1
  124. package/skills/dms-external-database/REFERENCE.md +132 -0
  125. package/skills/dms-external-database/SKILL.md +142 -0
@@ -2,18 +2,8 @@ import { z } from "zod";
2
2
  import { BUILDER_ESCALATION_NOTE, BUILDER_EXPR_REFUSAL, BUILDER_REF_NOTE, } from "../../prompts/builder.js";
3
3
  import { defineTool } from "../define-tool.js";
4
4
  import { gateBuilderTools } from "./builder-gate.js";
5
+ import { buildProjectTools, opResult, TARGET_MODULE, } from "./builder-project.js";
5
6
  import { shapeCatalog } from "./builder-catalog.js";
6
- function isFailedOp(value) {
7
- return (value !== null &&
8
- typeof value === "object" &&
9
- value.ok === false);
10
- }
11
- function opResult(value) {
12
- const text = JSON.stringify(value);
13
- if (!isFailedOp(value))
14
- return { content: [{ type: "text", text }] };
15
- return { content: [{ type: "text", text }], isError: true };
16
- }
17
7
  function note(description) {
18
8
  return `${description}\n\n${BUILDER_ESCALATION_NOTE}`;
19
9
  }
@@ -127,6 +117,7 @@ function buildUngatedBuilderTools(deps) {
127
117
  ...buildBlockTools(run),
128
118
  ...buildResourceTools(run),
129
119
  ...buildQueryTools(run),
120
+ ...buildProjectTools(deps.builderClient, deps.gate),
130
121
  ];
131
122
  }
132
123
  const CATALOG_NAMES = z.array(z.string()).optional();
@@ -147,6 +138,7 @@ function buildPageTools(run) {
147
138
  icon: z.string().optional(),
148
139
  order: z.number().optional(),
149
140
  description: z.string().optional(),
141
+ module: TARGET_MODULE,
150
142
  }, (input) => run("CreatePage", [input])),
151
143
  defineTool("BuilderConfigurePage", note("Updates a page's metadata (displayName, icon, order, description)."), { pageRef: z.string(), patch: CONFIG }, async ({ pageRef, patch }) => hasExprSentinel(patch)
152
144
  ? exprRefusal()
@@ -187,6 +179,7 @@ function buildBlockTools(run) {
187
179
  parent: z.string().optional(),
188
180
  icon: z.string().optional(),
189
181
  order: z.number().optional(),
182
+ module: TARGET_MODULE,
190
183
  }, (input) => run("CreateCategory", [input])),
191
184
  defineTool("BuilderConfigureCategory", note("Updates a category's metadata (displayName, icon, order)."), { ref: z.string(), patch: CONFIG }, async ({ ref, patch }) => hasExprSentinel(patch)
192
185
  ? exprRefusal()
@@ -207,6 +200,7 @@ function buildResourceTools(run) {
207
200
  seeds: z.array(z.record(z.string(), z.unknown())).optional(),
208
201
  location: RESOURCE_LOCATION.optional(),
209
202
  routes: z.array(RESOURCE_ROUTE).min(1).optional(),
203
+ module: TARGET_MODULE,
210
204
  }, async (input) => hasExprSentinel(input) ? exprRefusal() : run("CreateResource", [input])),
211
205
  defineTool("BuilderDeleteResource", note("Deletes a resource: removes its database.ts/data-api.ts/index.ts files, unwires the barrel export, and (by default) clears the resource's database table so a later resource reusing the name re-seeds cleanly instead of inheriting stale rows. Pass keepData: true to leave the table data in place. Does not detect pages whose TableView references its /api route."), { ref: z.string(), keepData: z.boolean().optional() }, ({ ref, keepData }) => run("DeleteResource", keepData === undefined ? [ref] : [ref, { keepData }])),
212
206
  defineTool("BuilderAddField", note("Adds a field to a resource, editing the Table and DataAPI classes together in one atomic op."), { ref: z.string(), field: FIELD_SPEC }, async ({ ref, field }) => hasExprSentinel(field) ? exprRefusal() : run("AddField", [ref, field])),
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/mcp/tools/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/mcp/tools/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DatabaseClient } from "../../database/database-client.js";
2
+ import { type AnyMcpToolDefinition } from "../define-tool.js";
3
+ export interface DatabaseToolsDeps {
4
+ databaseClient: DatabaseClient;
5
+ }
6
+ export declare function buildDatabaseTools(deps: DatabaseToolsDeps): AnyMcpToolDefinition[];
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { DATABASE_CONNECTIONS_PATH, DATABASE_CONNECTIONS_TOOL_NAME, DATABASE_DESCRIBE_PATH, DATABASE_DESCRIBE_TOOL_NAME, DATABASE_PROFILE_PATH, DATABASE_PROFILE_TOOL_NAME, DATABASE_RELATIONS_PATH, DATABASE_RELATIONS_TOOL_NAME, } from "../../constants/database.js";
3
+ import { defineTool, } from "../define-tool.js";
4
+ function isFailed(value) {
5
+ return (value !== null &&
6
+ typeof value === "object" &&
7
+ value.ok === false);
8
+ }
9
+ function answer(value) {
10
+ const text = JSON.stringify(value);
11
+ return isFailed(value)
12
+ ? { content: [{ type: "text", text }], isError: true }
13
+ : { content: [{ type: "text", text }] };
14
+ }
15
+ const CONNECTION = z
16
+ .string()
17
+ .describe("A connection id from DatabaseConnections, e.g. `erp`.");
18
+ const RELATION = z
19
+ .string()
20
+ .describe('A relation named `"schema.name"`, e.g. `sales.accounts`.');
21
+ const COLUMN_REFERENCE = z.object({ relation: RELATION, column: z.string() });
22
+ const CONNECTIONS_DESCRIPTION = "Lists the databases the project connects dms-ai to, each with its engine, version, database and role. Configuration declares them; when none is listed, connect one first with BuilderConfigureProject.";
23
+ const RELATIONS_DESCRIPTION = "Lists every relation of a connection (tables, partitioned tables, views, materialized views, foreign tables), with its row estimate and where it came from, its key (the columns `_id` aliases, or null), what the role may write, its comment, and `unmappable` with the reason when it cannot be mapped.";
24
+ const DESCRIBE_DESCRIPTION = "Describes relations in full: every column's native type, nullability, default, generated/identity, enum labels, comment, `accepts` (the declarations registration takes, the one to propose first) and `readOnly`; indexes; foreign keys out (`references`) and in (`referencedBy`). Describe in batches of up to 20.";
25
+ const PROFILE_DESCRIPTION = "Profiles one relation with aggregates only, in a read-only transaction: rows, and per column nulls, distinct, numeric/date/enum ranges, months, categories (values of few-valued columns, each seen at least 5 times) and text lengths, with traits (enum-like, identifier-like, label-candidate, time-axis, measure); children per parent over each foreign key. A measure past its time answers `timeout`. Large relations are sampled. `references` checks columns that look like references without a declared foreign key: containment of their values in the target column, and whether the target is a key.";
26
+ export function buildDatabaseTools(deps) {
27
+ const client = deps.databaseClient;
28
+ return [
29
+ defineTool(DATABASE_CONNECTIONS_TOOL_NAME, CONNECTIONS_DESCRIPTION, {}, async () => answer(await client.get(DATABASE_CONNECTIONS_PATH))),
30
+ defineTool(DATABASE_RELATIONS_TOOL_NAME, RELATIONS_DESCRIPTION, { connection: CONNECTION, schemas: z.array(z.string()).optional() }, async (input) => answer(await client.post(DATABASE_RELATIONS_PATH, input))),
31
+ defineTool(DATABASE_DESCRIBE_TOOL_NAME, DESCRIBE_DESCRIPTION, { connection: CONNECTION, relations: z.array(RELATION).min(1) }, async (input) => answer(await client.post(DATABASE_DESCRIBE_PATH, input))),
32
+ defineTool(DATABASE_PROFILE_TOOL_NAME, PROFILE_DESCRIPTION, {
33
+ connection: CONNECTION,
34
+ relation: RELATION.optional(),
35
+ columns: z.array(z.string()).optional(),
36
+ references: z
37
+ .array(z.object({ from: COLUMN_REFERENCE, to: COLUMN_REFERENCE }))
38
+ .optional(),
39
+ }, async (input) => answer(await client.post(DATABASE_PROFILE_PATH, input))),
40
+ ];
41
+ }
42
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { QuestionAnswers, QuestionRequest } from "../agent/question-bus.js";
2
2
  import type { BuilderClient } from "../builder/builder-client.js";
3
+ import type { DatabaseClient } from "../database/database-client.js";
3
4
  import type { BuilderGate } from "./tools/builder-gate.js";
4
5
  import type { MCP_SERVER_TYPE_SDK } from "../constants/mcp.js";
5
6
  import type { LogsClient } from "../logs/logs-client.js";
@@ -18,6 +19,7 @@ export interface AiMcpServerStaticDeps {
18
19
  logsClient: LogsClient;
19
20
  builderClient: BuilderClient;
20
21
  builderEnabled: boolean;
22
+ databaseClient: DatabaseClient;
21
23
  navigationCompleter: NavigationCompleter;
22
24
  }
23
25
  export interface AiMcpServerDeps extends AiMcpServerStaticDeps {
@@ -1,6 +1,8 @@
1
1
  import { PRE_TOOL_USE_HOOK_EVENT } from "../../constants/claude.js";
2
2
  import { SDK_PERMISSION_BEHAVIOR } from "../../constants/permissions.js";
3
3
  import { SAFE_MODE_DENIED_MESSAGE, SAFE_MODE_DISALLOWED_TOOLS, } from "../../constants/settings.js";
4
+ import { homedir } from "node:os";
5
+ import { isAbsolute, join, relative } from "node:path";
4
6
  import { isMutatingTool } from "../../agent/tool-kinds.js";
5
7
  const SAFE_MODE_BLOCKED_TOOLS = new Set(SAFE_MODE_DISALLOWED_TOOLS);
6
8
  const SAFE_MODE_DENIAL = {
@@ -11,10 +13,18 @@ const SAFE_MODE_DENIAL = {
11
13
  },
12
14
  };
13
15
  const NO_DECISION = { continue: true };
16
+ const PLANS_DIRECTORY = join(homedir(), ".claude", "plans");
17
+ function isPlanFile(input) {
18
+ const filePath = (input.tool_input ?? {}).file_path;
19
+ if (typeof filePath !== "string" || !isAbsolute(filePath))
20
+ return false;
21
+ const inside = relative(PLANS_DIRECTORY, filePath);
22
+ return inside.length > 0 && !inside.startsWith("..") && !isAbsolute(inside);
23
+ }
14
24
  function isBlockedTool(input) {
15
25
  if (input.hook_event_name !== PRE_TOOL_USE_HOOK_EVENT)
16
26
  return false;
17
- return SAFE_MODE_BLOCKED_TOOLS.has(input.tool_name);
27
+ return SAFE_MODE_BLOCKED_TOOLS.has(input.tool_name) && !isPlanFile(input);
18
28
  }
19
29
  export function buildSafeModeHooks(deps) {
20
30
  const preToolUse = async (input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"safe-mode.js","sourceRoot":"","sources":["../../../src/providers/claude/safe-mode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAEpE,MAAM,gBAAgB,GAAuB;IAC3C,kBAAkB,EAAE;QAClB,aAAa,EAAE,uBAAuB;QACtC,kBAAkB,EAAE,uBAAuB,CAAC,IAAI;QAChD,wBAAwB,EAAE,wBAAwB;KACnD;CACF,CAAC;AAEF,MAAM,WAAW,GAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE3D,SAAS,aAAa,CAAC,KAAgB;IACrC,IAAI,KAAK,CAAC,eAAe,KAAK,uBAAuB;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAwBD,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACrD,MAAM,UAAU,GAAiB,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,EAAE,EAAE,GAC1D,KAAwB,CAAC;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5D,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"safe-mode.js","sourceRoot":"","sources":["../../../src/providers/claude/safe-mode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAEpE,MAAM,gBAAgB,GAAuB;IAC3C,kBAAkB,EAAE;QAClB,aAAa,EAAE,uBAAuB;QACtC,kBAAkB,EAAE,uBAAuB,CAAC,IAAI;QAChD,wBAAwB,EAAE,wBAAwB;KACnD;CACF,CAAC;AAEF,MAAM,WAAW,GAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAG3D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAW5D,SAAS,UAAU,CAAC,KAAgB;IAClC,MAAM,QAAQ,GAAG,CAAE,KAAsB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;IACtE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB;IACrC,IAAI,KAAK,CAAC,eAAe,KAAK,uBAAuB;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAwBD,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACrD,MAAM,UAAU,GAAiB,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,EAAE,EAAE,GAC1D,KAAwB,CAAC;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5D,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ChatGptAccountStatus {
2
+ isSignedIn: boolean;
3
+ email?: string;
4
+ }
5
+ export declare function readAccountStatus(): ChatGptAccountStatus;
6
+ export declare function getAccessToken(): Promise<string>;
7
+ export interface SignOutResult {
8
+ isRevoked: boolean;
9
+ }
10
+ export declare function signOut(): Promise<SignOutResult>;
@@ -0,0 +1,63 @@
1
+ import { CHATGPT_LOG_PREFIX, CHATGPT_NOT_SIGNED_IN_MESSAGE, CHATGPT_REFRESH_MARGIN_MS, CHATGPT_SIGNED_OUT_MESSAGE, } from "../../../constants/chatgpt.js";
2
+ import { withAuthLock } from "./lock.js";
3
+ import { ChatGptOAuthError, refreshTokens, revokeRefreshToken, } from "./oauth.js";
4
+ import { isSignedIn, readAuthRecord, writeAuthRecord, } from "./store.js";
5
+ export function readAccountStatus() {
6
+ const record = readAuthRecord();
7
+ if (!isSignedIn(record))
8
+ return { isSignedIn: false };
9
+ return { isSignedIn: true, email: record?.email };
10
+ }
11
+ function isFresh(tokens) {
12
+ return tokens.expiresAt - Date.now() > CHATGPT_REFRESH_MARGIN_MS;
13
+ }
14
+ function withoutTokens(record) {
15
+ const { tokens: _cleared, ...rest } = record;
16
+ return rest;
17
+ }
18
+ async function refreshLocked() {
19
+ const record = readAuthRecord();
20
+ if (record?.tokens === undefined || record.clientId === undefined) {
21
+ throw new Error(CHATGPT_NOT_SIGNED_IN_MESSAGE);
22
+ }
23
+ if (isFresh(record.tokens))
24
+ return record.tokens.accessToken;
25
+ try {
26
+ const tokens = await refreshTokens(record.clientId, record.tokens);
27
+ await writeAuthRecord({ ...record, tokens });
28
+ return tokens.accessToken;
29
+ }
30
+ catch (error) {
31
+ if (!(error instanceof ChatGptOAuthError) || !error.isTerminal)
32
+ throw error;
33
+ console.warn(`${CHATGPT_LOG_PREFIX} sign-in dropped: ${error.message}`);
34
+ await writeAuthRecord(withoutTokens(record));
35
+ throw new Error(CHATGPT_SIGNED_OUT_MESSAGE);
36
+ }
37
+ }
38
+ let refreshing = null;
39
+ export async function getAccessToken() {
40
+ const record = readAuthRecord();
41
+ if (record?.tokens === undefined || !isSignedIn(record)) {
42
+ throw new Error(CHATGPT_NOT_SIGNED_IN_MESSAGE);
43
+ }
44
+ if (isFresh(record.tokens))
45
+ return record.tokens.accessToken;
46
+ refreshing ??= withAuthLock(refreshLocked).finally(() => {
47
+ refreshing = null;
48
+ });
49
+ return refreshing;
50
+ }
51
+ export function signOut() {
52
+ return withAuthLock(async () => {
53
+ const record = readAuthRecord();
54
+ if (record?.tokens === undefined)
55
+ return { isRevoked: true };
56
+ const isRevoked = record.clientId === undefined
57
+ ? false
58
+ : await revokeRefreshToken(record.clientId, record.tokens.refreshToken);
59
+ await writeAuthRecord(withoutTokens(record));
60
+ return { isRevoked };
61
+ });
62
+ }
63
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAQpB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,OAAO,CAAC,MAAqB;IACpC,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,yBAAyB,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB;IAC9C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,MAAM,KAAK,CAAC;QAG5E,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,MAAM,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,IAAI,UAAU,GAA2B,IAAI,CAAC;AAO9C,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IAE7D,UAAU,KAAK,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACtD,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAWD,MAAM,UAAU,OAAO;IACrB,OAAO,YAAY,CAAC,KAAK,IAAI,EAAE;QAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7D,MAAM,SAAS,GACb,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC3B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5E,MAAM,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ export declare const ACCESS_TOKEN_SECRET: string;
3
+ export declare function handleChatGptRequest(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
@@ -0,0 +1,66 @@
1
+ import { timingSafeEqual } from "node:crypto";
2
+ import { CHATGPT_ACCESS_TOKEN_PATH, CHATGPT_CALLBACK_PATH, } from "../../../constants/chatgpt.js";
3
+ import { CONTENT_TYPE, HTTP_STATUS } from "../../../constants/http.js";
4
+ import { sendResponse } from "../../../server/http-io.js";
5
+ import { getAccessToken } from "./credentials.js";
6
+ import { finishLogin } from "./login.js";
7
+ import { randomUrlSafe } from "./oauth.js";
8
+ const BEARER_PREFIX = "Bearer ";
9
+ export const ACCESS_TOKEN_SECRET = randomUrlSafe();
10
+ function escapeHtml(text) {
11
+ return text
12
+ .replaceAll("&", "&amp;")
13
+ .replaceAll("<", "&lt;")
14
+ .replaceAll(">", "&gt;")
15
+ .replaceAll('"', "&quot;");
16
+ }
17
+ function renderPage(title, message) {
18
+ return [
19
+ "<!doctype html>",
20
+ '<html lang="en"><head><meta charset="utf-8">',
21
+ `<title>${escapeHtml(title)}</title>`,
22
+ '<meta name="viewport" content="width=device-width, initial-scale=1">',
23
+ "<style>body{font-family:system-ui,sans-serif;max-width:32rem;margin:15vh auto;padding:0 1.5rem;color:#18181b}h1{font-size:1.25rem}p{line-height:1.5;color:#52525b}</style>",
24
+ `</head><body><h1>${escapeHtml(title)}</h1><p>${escapeHtml(message)}</p></body></html>`,
25
+ ].join("");
26
+ }
27
+ function sendLoginPage(res, response) {
28
+ sendResponse(res, response.status, CONTENT_TYPE.HTML, renderPage(response.title, response.message));
29
+ }
30
+ function hasTokenSecret(req) {
31
+ const authorization = req.headers.authorization;
32
+ if (!authorization?.startsWith(BEARER_PREFIX))
33
+ return false;
34
+ const actual = Buffer.from(authorization.slice(BEARER_PREFIX.length));
35
+ const expected = Buffer.from(ACCESS_TOKEN_SECRET);
36
+ return actual.length === expected.length && timingSafeEqual(actual, expected);
37
+ }
38
+ async function sendAccessToken(req, res) {
39
+ if (!hasTokenSecret(req)) {
40
+ sendResponse(res, HTTP_STATUS.UNAUTHORIZED, CONTENT_TYPE.TEXT, "");
41
+ return;
42
+ }
43
+ try {
44
+ const token = await getAccessToken();
45
+ sendResponse(res, HTTP_STATUS.OK, CONTENT_TYPE.TEXT, token);
46
+ }
47
+ catch (error) {
48
+ const reason = error instanceof Error ? error.message : String(error);
49
+ sendResponse(res, HTTP_STATUS.UNAVAILABLE, CONTENT_TYPE.TEXT, reason);
50
+ }
51
+ }
52
+ export async function handleChatGptRequest(req, res) {
53
+ if (req.method !== "GET")
54
+ return false;
55
+ const url = new URL(req.url ?? "/", "http://localhost");
56
+ const routes = {
57
+ [CHATGPT_CALLBACK_PATH]: async () => sendLoginPage(res, await finishLogin(url.searchParams)),
58
+ [CHATGPT_ACCESS_TOKEN_PATH]: () => sendAccessToken(req, res),
59
+ };
60
+ const route = routes[url.pathname];
61
+ if (route === undefined)
62
+ return false;
63
+ await route();
64
+ return true;
65
+ }
66
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function withAuthLock<T>(task: () => Promise<T>): Promise<T>;
@@ -0,0 +1,58 @@
1
+ import { mkdir, rm, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { CHATGPT_CONFIG_DIR_MODE, CHATGPT_LOCK_DIR_NAME, CHATGPT_LOCK_POLL_MS, CHATGPT_LOCK_STALE_MS, CHATGPT_LOCK_TIMEOUT_MS, } from "../../../constants/chatgpt.js";
4
+ import { chatGptConfigDir } from "./store.js";
5
+ function lockPath() {
6
+ return path.join(chatGptConfigDir(), CHATGPT_LOCK_DIR_NAME);
7
+ }
8
+ function wait(ms) {
9
+ return new Promise((resolve) => setTimeout(resolve, ms));
10
+ }
11
+ function errorCode(error) {
12
+ return error?.code;
13
+ }
14
+ async function isStale(lock) {
15
+ try {
16
+ const info = await stat(lock);
17
+ return Date.now() - info.mtimeMs > CHATGPT_LOCK_STALE_MS;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ async function acquire(lock) {
24
+ const deadline = Date.now() + CHATGPT_LOCK_TIMEOUT_MS;
25
+ await mkdir(path.dirname(lock), {
26
+ recursive: true,
27
+ mode: CHATGPT_CONFIG_DIR_MODE,
28
+ });
29
+ for (;;) {
30
+ try {
31
+ await mkdir(lock);
32
+ return;
33
+ }
34
+ catch (error) {
35
+ if (errorCode(error) !== "EEXIST")
36
+ throw error;
37
+ }
38
+ if (await isStale(lock)) {
39
+ await rm(lock, { recursive: true, force: true });
40
+ continue;
41
+ }
42
+ if (Date.now() >= deadline) {
43
+ throw new Error(`timed out waiting for ${lock}`);
44
+ }
45
+ await wait(CHATGPT_LOCK_POLL_MS);
46
+ }
47
+ }
48
+ export async function withAuthLock(task) {
49
+ const lock = lockPath();
50
+ await acquire(lock);
51
+ try {
52
+ return await task();
53
+ }
54
+ finally {
55
+ await rm(lock, { recursive: true, force: true });
56
+ }
57
+ }
58
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,qBAAqB,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,IAAI,CAAC,EAAU;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAQ,KAA2C,EAAE,IAAI,CAAC;AAC5D,CAAC;AAID,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC;IACtD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC9B,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,uBAAuB;KAC9B,CAAC,CAAC;IACH,SAAS,CAAC;QACR,IAAI,CAAC;YAEH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAsB;IAC1D,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface LoginResponse {
2
+ status: number;
3
+ title: string;
4
+ message: string;
5
+ }
6
+ export declare function createLoginUrl(port: number): Promise<string>;
7
+ export declare function finishLogin(query: URLSearchParams): Promise<LoginResponse>;
8
+ export declare function finishPastedLogin(pasted: string): Promise<LoginResponse>;
@@ -0,0 +1,138 @@
1
+ import { CHATGPT_CALLBACK_PATH, CHATGPT_DYNAMIC_CLIENT_ID, CHATGPT_LOG_PREFIX, CHATGPT_LOGIN_TTL_MS, CHATGPT_MAX_PENDING_ATTEMPTS, CHATGPT_PLAN_SCOPE, } from "../../../constants/chatgpt.js";
2
+ import { HTTP_STATUS } from "../../../constants/http.js";
3
+ import { LOOPBACK_HOST } from "../../../constants/ports.js";
4
+ import { withAuthLock } from "./lock.js";
5
+ import { buildAuthorizeUrl, exchangeCode, randomUrlSafe, validateIdToken, } from "./oauth.js";
6
+ import { readAuthRecord, readOrCreateAuthRecord, writeAuthRecord, } from "./store.js";
7
+ const attempts = new Map();
8
+ function sweepExpired() {
9
+ const now = Date.now();
10
+ for (const [state, attempt] of attempts) {
11
+ if (attempt.expiresAt <= now)
12
+ attempts.delete(state);
13
+ }
14
+ while (attempts.size > CHATGPT_MAX_PENDING_ATTEMPTS) {
15
+ const oldest = attempts.keys().next();
16
+ if (oldest.done === true)
17
+ return;
18
+ attempts.delete(oldest.value);
19
+ }
20
+ }
21
+ function page(status, title, message) {
22
+ return { status, title, message };
23
+ }
24
+ const EXPIRED_LINK = page(HTTP_STATUS.BAD_REQUEST, "This sign-in link has expired", "Go back to Assistant › Settings in the dashboard and press “Sign in with ChatGPT” again.");
25
+ async function ensureRecord() {
26
+ const existing = readAuthRecord();
27
+ if (existing !== undefined)
28
+ return existing;
29
+ const created = readOrCreateAuthRecord();
30
+ await writeAuthRecord(created);
31
+ return created;
32
+ }
33
+ export async function createLoginUrl(port) {
34
+ sweepExpired();
35
+ const record = await withAuthLock(ensureRecord);
36
+ const state = randomUrlSafe();
37
+ const attempt = {
38
+ clientId: record.clientId,
39
+ hostId: record.hostId,
40
+ redirectUri: `http://${LOOPBACK_HOST}:${port}${CHATGPT_CALLBACK_PATH}`,
41
+ nonce: randomUrlSafe(),
42
+ codeVerifier: randomUrlSafe(),
43
+ expiresAt: Date.now() + CHATGPT_LOGIN_TTL_MS,
44
+ };
45
+ attempts.set(state, attempt);
46
+ return buildAuthorizeUrl({
47
+ ...attempt,
48
+ state,
49
+ idTokenHint: record.clientId === undefined ? undefined : record.tokens?.idToken,
50
+ loginHint: record.clientId === undefined ? undefined : record.email,
51
+ });
52
+ }
53
+ function resolveClientId(attempt, returned) {
54
+ if (attempt.clientId === undefined) {
55
+ if (returned === null || returned === CHATGPT_DYNAMIC_CLIENT_ID)
56
+ return undefined;
57
+ return returned;
58
+ }
59
+ if (returned !== null && returned !== attempt.clientId)
60
+ return undefined;
61
+ return attempt.clientId;
62
+ }
63
+ async function completeLogin(attempt, clientId, code) {
64
+ const tokens = await exchangeCode({
65
+ clientId,
66
+ code,
67
+ codeVerifier: attempt.codeVerifier,
68
+ redirectUri: attempt.redirectUri,
69
+ });
70
+ if (!tokens.scopes.includes(CHATGPT_PLAN_SCOPE)) {
71
+ return page(HTTP_STATUS.FORBIDDEN, "ChatGPT plan usage was not granted", "Codex runs on your ChatGPT plan. Sign in again and allow plan usage, or check that your plan includes it.");
72
+ }
73
+ const claims = await validateIdToken(tokens.idToken, {
74
+ clientId,
75
+ nonce: attempt.nonce,
76
+ });
77
+ return withAuthLock(async () => {
78
+ const record = readOrCreateAuthRecord();
79
+ const isOtherAccount = record.subject !== undefined &&
80
+ record.clientId === clientId &&
81
+ record.subject !== claims.sub;
82
+ if (isOtherAccount) {
83
+ await writeAuthRecord({ hostId: record.hostId });
84
+ return page(HTTP_STATUS.CONFLICT, "A different ChatGPT account", "This machine was registered with another ChatGPT account. Press “Sign in with ChatGPT” again to register this one.");
85
+ }
86
+ await writeAuthRecord({
87
+ hostId: record.hostId,
88
+ clientId,
89
+ subject: claims.sub,
90
+ email: claims.email,
91
+ tokens,
92
+ });
93
+ const who = claims.email === undefined ? "" : ` as ${claims.email}`;
94
+ return page(HTTP_STATUS.OK, "Signed in with ChatGPT", `Codex now runs on your ChatGPT plan${who}. You can close this tab and go back to the dashboard.`);
95
+ });
96
+ }
97
+ export async function finishLogin(query) {
98
+ sweepExpired();
99
+ const state = query.get("state");
100
+ const attempt = state === null ? undefined : attempts.get(state);
101
+ if (state === null || attempt === undefined)
102
+ return EXPIRED_LINK;
103
+ attempts.delete(state);
104
+ const error = query.get("error");
105
+ if (error !== null) {
106
+ return page(HTTP_STATUS.BAD_REQUEST, "Sign-in cancelled", error === "access_denied"
107
+ ? "Nothing was changed. Codex stays signed out."
108
+ : `OpenAI answered “${error}”. Nothing was changed.`);
109
+ }
110
+ const code = query.get("code");
111
+ const clientId = resolveClientId(attempt, query.get("client_id"));
112
+ if (code === null || clientId === undefined) {
113
+ return page(HTTP_STATUS.BAD_REQUEST, "Sign-in incomplete", "OpenAI did not finish the registration. Try again from Assistant › Settings.");
114
+ }
115
+ try {
116
+ return await completeLogin(attempt, clientId, code);
117
+ }
118
+ catch (failure) {
119
+ const reason = failure instanceof Error ? failure.message : String(failure);
120
+ console.error(`${CHATGPT_LOG_PREFIX} sign-in failed: ${reason}`);
121
+ return page(HTTP_STATUS.BAD_GATEWAY, "Sign-in failed", `${reason}. Try again from Assistant › Settings.`);
122
+ }
123
+ }
124
+ const NOT_A_CALLBACK = page(HTTP_STATUS.BAD_REQUEST, "Not the sign-in address", "Paste the whole address of the page OpenAI sent you to, starting with http://127.0.0.1.");
125
+ export function finishPastedLogin(pasted) {
126
+ let url;
127
+ try {
128
+ url = new URL(pasted.trim());
129
+ }
130
+ catch {
131
+ return Promise.resolve(NOT_A_CALLBACK);
132
+ }
133
+ if (url.pathname !== CHATGPT_CALLBACK_PATH) {
134
+ return Promise.resolve(NOT_A_CALLBACK);
135
+ }
136
+ return finishLogin(url.searchParams);
137
+ }
138
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/login.ts"],"names":[],"mappings":"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"}