@xylex-group/athena 2.12.1 → 2.13.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 (96) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1190 -1184
  3. package/bin/athena-js.js +104 -76
  4. package/dist/admin.cjs +45 -0
  5. package/dist/admin.cjs.map +1 -0
  6. package/dist/admin.d.cts +64 -0
  7. package/dist/admin.d.ts +64 -0
  8. package/dist/admin.js +41 -0
  9. package/dist/admin.js.map +1 -0
  10. package/dist/athena-auth-url-oLux_57a.d.cts +377 -0
  11. package/dist/athena-auth-url-oLux_57a.d.ts +377 -0
  12. package/dist/browser.cjs +33 -49
  13. package/dist/browser.cjs.map +1 -1
  14. package/dist/browser.d.cts +12 -10
  15. package/dist/browser.d.ts +12 -10
  16. package/dist/browser.js +33 -49
  17. package/dist/browser.js.map +1 -1
  18. package/dist/cli/index.cjs +150 -51
  19. package/dist/cli/index.cjs.map +1 -1
  20. package/dist/cli/index.d.cts +14 -5
  21. package/dist/cli/index.d.ts +14 -5
  22. package/dist/cli/index.js +150 -52
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/{client-CMtx5P4D.d.cts → client-BJjUwDSg.d.cts} +109 -1448
  25. package/dist/{client-Dre8H24u.d.ts → client-DVOKSYDI.d.ts} +109 -1448
  26. package/dist/cookies.cjs +18 -0
  27. package/dist/cookies.cjs.map +1 -1
  28. package/dist/cookies.d.cts +2 -1
  29. package/dist/cookies.d.ts +2 -1
  30. package/dist/cookies.js +17 -1
  31. package/dist/cookies.js.map +1 -1
  32. package/dist/{index-CVcQCGyG.d.ts → index-CFL9xbFR.d.cts} +2 -0
  33. package/dist/{index-CVcQCGyG.d.cts → index-UKJpunc6.d.ts} +2 -0
  34. package/dist/index.cjs +101 -49
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +13 -10
  37. package/dist/index.d.ts +13 -10
  38. package/dist/index.js +101 -50
  39. package/dist/index.js.map +1 -1
  40. package/dist/{model-form-DfTi8-D1.d.cts → model-form-Dw4zEL5a.d.cts} +2 -2
  41. package/dist/{model-form-CU0mWrF9.d.ts → model-form-yRg71q3H.d.ts} +2 -2
  42. package/dist/{module-DBGmbIuh.d.ts → module-DBteUIob.d.ts} +12 -9
  43. package/dist/{module-GoijrBXV.d.cts → module-yoX49uQC.d.cts} +12 -9
  44. package/dist/next/client.cjs +452 -49
  45. package/dist/next/client.cjs.map +1 -1
  46. package/dist/next/client.d.cts +7 -4
  47. package/dist/next/client.d.ts +7 -4
  48. package/dist/next/client.js +430 -50
  49. package/dist/next/client.js.map +1 -1
  50. package/dist/next/server.cjs +292 -49
  51. package/dist/next/server.cjs.map +1 -1
  52. package/dist/next/server.d.cts +81 -5
  53. package/dist/next/server.d.ts +81 -5
  54. package/dist/next/server.js +280 -50
  55. package/dist/next/server.js.map +1 -1
  56. package/dist/organization.cjs +72 -0
  57. package/dist/organization.cjs.map +1 -0
  58. package/dist/organization.d.cts +43 -0
  59. package/dist/organization.d.ts +43 -0
  60. package/dist/organization.js +70 -0
  61. package/dist/organization.js.map +1 -0
  62. package/dist/payload-BzVbUgY_.d.cts +219 -0
  63. package/dist/payload-DEOWN_oo.d.ts +219 -0
  64. package/dist/{pipeline-DrjU2vNA.d.ts → pipeline-Bj6RWt1A.d.ts} +1 -1
  65. package/dist/{pipeline-c7Gdm0qv.d.cts → pipeline-Dwck-wZO.d.cts} +1 -1
  66. package/dist/react.cjs +2 -13
  67. package/dist/react.cjs.map +1 -1
  68. package/dist/react.d.cts +26 -7
  69. package/dist/react.d.ts +26 -7
  70. package/dist/react.js +2 -13
  71. package/dist/react.js.map +1 -1
  72. package/dist/session-cookie-detection-BqOp9mO6.d.cts +46 -0
  73. package/dist/session-cookie-detection-BqOp9mO6.d.ts +46 -0
  74. package/dist/social-providers.cjs +4189 -0
  75. package/dist/social-providers.cjs.map +1 -0
  76. package/dist/social-providers.d.cts +4948 -0
  77. package/dist/social-providers.d.ts +4948 -0
  78. package/dist/social-providers.js +4117 -0
  79. package/dist/social-providers.js.map +1 -0
  80. package/dist/{types-Bez4HSbI.d.cts → types-BRP7sfSF.d.ts} +50 -2
  81. package/dist/{types-kPaHUqUa.d.ts → types-BU8uJH_b.d.cts} +50 -2
  82. package/dist/{types-BRUHGXo2.d.ts → types-CH78O90i.d.cts} +2 -2
  83. package/dist/{types-BRUHGXo2.d.cts → types-CH78O90i.d.ts} +2 -2
  84. package/dist/{types-BLizCLd1.d.cts → types-CjC9_5ZQ.d.cts} +3 -3
  85. package/dist/{types-DRRb0Fd0.d.ts → types-DPgejxYC.d.ts} +3 -3
  86. package/dist/types-eAKAh71s.d.cts +1476 -0
  87. package/dist/types-eAKAh71s.d.ts +1476 -0
  88. package/dist/utils.cjs +438 -15
  89. package/dist/utils.cjs.map +1 -1
  90. package/dist/utils.d.cts +76 -11
  91. package/dist/utils.d.ts +76 -11
  92. package/dist/utils.js +390 -16
  93. package/dist/utils.js.map +1 -1
  94. package/package.json +49 -22
  95. package/dist/shared-DZSGAmXs.d.cts +0 -35
  96. package/dist/shared-MMnVBBfy.d.ts +0 -35
@@ -2004,7 +2004,7 @@ var getSessionCookie = (request2, config) => {
2004
2004
 
2005
2005
  // src/utils/athena-request-headers.ts
2006
2006
  var NO_CACHE_HEADER_VALUE = "no-cache";
2007
- var API_KEY_HEADER_CANDIDATES = ["X-Api-Key", "x-api-key", "apikey"];
2007
+ var API_KEY_HEADER_CANDIDATES = ["X-Athena-Key", "x-athena-key", "X-Api-Key", "x-api-key", "apikey"];
2008
2008
  var ATHENA_KEY_HEADER_CANDIDATES = ["X-Athena-Key", "x-athena-key"];
2009
2009
  var SESSION_TOKEN_HEADER_CANDIDATES = ["X-Athena-Auth-Session-Token"];
2010
2010
  var BEARER_MIRROR_HEADER_CANDIDATES = ["X-Athena-Auth-Bearer-Token"];
@@ -2106,17 +2106,6 @@ function buildServiceRequestHeaders(profile, sdkHeaderValue, config, options, ex
2106
2106
  });
2107
2107
  }
2108
2108
  function applyAthenaApiKeyHeaders(headers, apiKey, athenaKey) {
2109
- if (apiKey) {
2110
- if (!hasHeaderIgnoreCase(headers, "apikey")) {
2111
- headers.apikey = apiKey;
2112
- }
2113
- if (!Object.hasOwn(headers, "x-api-key")) {
2114
- headers["x-api-key"] = apiKey;
2115
- }
2116
- if (!Object.hasOwn(headers, "X-Api-Key")) {
2117
- headers["X-Api-Key"] = apiKey;
2118
- }
2119
- }
2120
2109
  const resolvedAthenaKey = normalizeHeaderValue(athenaKey) ?? normalizeHeaderValue(apiKey);
2121
2110
  if (resolvedAthenaKey && !hasHeaderIgnoreCase(headers, "X-Athena-Key")) {
2122
2111
  headers["X-Athena-Key"] = resolvedAthenaKey;
@@ -2242,7 +2231,7 @@ function buildAthenaRequestHeaders(input) {
2242
2231
 
2243
2232
  // package.json
2244
2233
  var package_default = {
2245
- version: "2.12.1"
2234
+ version: "2.13.0"
2246
2235
  };
2247
2236
 
2248
2237
  // src/sdk-version.ts
@@ -4335,38 +4324,6 @@ function createAuthClient(config = {}) {
4335
4324
  };
4336
4325
  }
4337
4326
 
4338
- // src/db/module.ts
4339
- function createDbModule(input) {
4340
- const db = {
4341
- from: input.from,
4342
- select(table, first, second) {
4343
- if (first && typeof first === "object" && !Array.isArray(first)) {
4344
- return input.from(table).select(void 0, first);
4345
- }
4346
- return input.from(table).select(first, second);
4347
- },
4348
- insert(table, values, options) {
4349
- return Array.isArray(values) ? input.from(table).insert(values, options) : input.from(table).insert(values, options);
4350
- },
4351
- upsert(table, values, options) {
4352
- return Array.isArray(values) ? input.from(table).upsert(values, options) : input.from(table).upsert(values, options);
4353
- },
4354
- update(table, values, options) {
4355
- return input.from(table).update(values, options);
4356
- },
4357
- delete(table, options) {
4358
- return input.from(table).delete(options);
4359
- },
4360
- rpc(fn, args, options) {
4361
- return input.rpc(fn, args, options);
4362
- },
4363
- query(query, options) {
4364
- return input.query(query, options);
4365
- }
4366
- };
4367
- return db;
4368
- }
4369
-
4370
4327
  // src/storage/file.ts
4371
4328
  function createStorageFileModule(base, config = {}) {
4372
4329
  const upload = async (input, options) => {
@@ -9714,7 +9671,30 @@ function createClientFromConfig(config, sourceConfig) {
9714
9671
  config.experimental,
9715
9672
  queryTracer
9716
9673
  );
9717
- const db = createDbModule({ from, rpc, query });
9674
+ const untypedDbFrom = from;
9675
+ const db = {
9676
+ from,
9677
+ select(table, first, second) {
9678
+ if (first && typeof first === "object" && !Array.isArray(first)) {
9679
+ return untypedDbFrom(table).select(void 0, first);
9680
+ }
9681
+ return untypedDbFrom(table).select(first, second);
9682
+ },
9683
+ insert(table, values, options) {
9684
+ return Array.isArray(values) ? untypedDbFrom(table).insert(values, options) : untypedDbFrom(table).insert(values, options);
9685
+ },
9686
+ upsert(table, values, options) {
9687
+ return Array.isArray(values) ? untypedDbFrom(table).upsert(values, options) : untypedDbFrom(table).upsert(values, options);
9688
+ },
9689
+ update(table, values, options) {
9690
+ return untypedDbFrom(table).update(values, options);
9691
+ },
9692
+ delete(table, options) {
9693
+ return untypedDbFrom(table).delete(options);
9694
+ },
9695
+ rpc,
9696
+ query
9697
+ };
9718
9698
  const chat = createChatModule({
9719
9699
  baseUrl: config.chatUrl,
9720
9700
  apiKey: config.apiKey,
@@ -9862,7 +9842,8 @@ function createClientFromConfig(config, sourceConfig) {
9862
9842
  }
9863
9843
  return sdkClient;
9864
9844
  }
9865
- function createClient(configOrUrl, apiKey, options) {
9845
+ function createClient(...args) {
9846
+ const [configOrUrl, apiKey, options] = args;
9866
9847
  if (typeof configOrUrl === "string" || configOrUrl === null || configOrUrl === void 0) {
9867
9848
  return createClientFromInput({
9868
9849
  url: configOrUrl,
@@ -10469,6 +10450,10 @@ async function runSchemaGenerator(options = {}) {
10469
10450
  }
10470
10451
 
10471
10452
  // src/cli/index.ts
10453
+ function isDebugEnabled() {
10454
+ const value = globalThis.process?.env?.ATHENA_JS_DEBUG;
10455
+ return value === "1" || value === "true";
10456
+ }
10472
10457
  function rootUsage() {
10473
10458
  return [
10474
10459
  "athena-js CLI",
@@ -10632,7 +10617,61 @@ function extractMissingDatabaseName(message) {
10632
10617
  function isErrorWithCode(error) {
10633
10618
  return typeof error === "object" && error !== null && "code" in error;
10634
10619
  }
10620
+ function isNetworkConnectionError(error) {
10621
+ if (!isErrorWithCode(error)) {
10622
+ return false;
10623
+ }
10624
+ const code = typeof error.code === "string" ? error.code : "";
10625
+ if (code === "ECONNRESET" || code === "ECONNREFUSED" || code === "ETIMEDOUT" || code === "ENOTFOUND" || code === "EAI_AGAIN" || code === "EPIPE" || code === "EHOSTUNREACH" || code === "ENETUNREACH") {
10626
+ return true;
10627
+ }
10628
+ const message = normalizeErrorMessage(error).toLowerCase();
10629
+ return message.includes("econnreset") || message.includes("econnrefused") || message.includes("etimedout") || message.includes("connection terminated") || message.includes("connection refused") || message.includes("timeout expired");
10630
+ }
10631
+ function collectErrorDiagnostics(error) {
10632
+ const lines = [];
10633
+ if (!isErrorWithCode(error) && !(error instanceof Error)) {
10634
+ return lines;
10635
+ }
10636
+ const code = isErrorWithCode(error) && error.code !== void 0 ? String(error.code) : void 0;
10637
+ if (code) {
10638
+ lines.push(` code: ${code}`);
10639
+ }
10640
+ const errno = isErrorWithCode(error) && error.errno !== void 0 ? String(error.errno) : void 0;
10641
+ if (errno) {
10642
+ lines.push(` errno: ${errno}`);
10643
+ }
10644
+ const syscall = isErrorWithCode(error) && typeof error.syscall === "string" ? error.syscall : void 0;
10645
+ if (syscall) {
10646
+ lines.push(` syscall: ${syscall}`);
10647
+ }
10648
+ const address = isErrorWithCode(error) && typeof error.address === "string" ? error.address : void 0;
10649
+ const port = isErrorWithCode(error) && error.port !== void 0 ? String(error.port) : void 0;
10650
+ if (address || port) {
10651
+ lines.push(
10652
+ ` remote: ${address ?? "?"}${port ? `:${port}` : ""}`
10653
+ );
10654
+ }
10655
+ const hostname = isErrorWithCode(error) && typeof error.hostname === "string" ? error.hostname : void 0;
10656
+ if (hostname) {
10657
+ lines.push(` hostname: ${hostname}`);
10658
+ }
10659
+ let cause = error instanceof Error ? error.cause : isErrorWithCode(error) ? error.cause : void 0;
10660
+ let depth = 0;
10661
+ while (cause && depth < 4) {
10662
+ const causeMessage = normalizeErrorMessage(cause);
10663
+ const causeCode = isErrorWithCode(cause) && cause.code !== void 0 ? String(cause.code) : void 0;
10664
+ lines.push(
10665
+ ` cause[${depth}]: ${causeCode ? `${causeCode} \u2014 ` : ""}${causeMessage}`
10666
+ );
10667
+ cause = cause instanceof Error ? cause.cause : isErrorWithCode(cause) ? cause.cause : void 0;
10668
+ depth += 1;
10669
+ }
10670
+ return lines;
10671
+ }
10635
10672
  function formatGeneratorError(error, configPath) {
10673
+ const diagnostics = collectErrorDiagnostics(error);
10674
+ const diagnosticsBlock = diagnostics.length > 0 ? ["", "Diagnostics:", ...diagnostics] : [];
10636
10675
  if (isErrorWithCode(error) && error.code === "3D000") {
10637
10676
  const message = normalizeErrorMessage(error);
10638
10677
  const databaseName = extractMissingDatabaseName(message);
@@ -10641,15 +10680,58 @@ function formatGeneratorError(error, configPath) {
10641
10680
  return new Error(
10642
10681
  [
10643
10682
  `${databaseLabel} (code 3D000).`,
10644
- `Update provider.connectionString (and provider.database, if set) in ${configLabel}, or create that database before running generate.`
10683
+ `Update provider.connectionString (and provider.database, if set) in ${configLabel}, or create that database before running generate.`,
10684
+ ...diagnosticsBlock,
10685
+ "",
10686
+ "Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate"
10687
+ ].join("\n")
10688
+ );
10689
+ }
10690
+ if (isNetworkConnectionError(error)) {
10691
+ const message = normalizeErrorMessage(error);
10692
+ const configLabel = configPath ? `config "${configPath}"` : "the resolved athena config";
10693
+ const code = isErrorWithCode(error) && typeof error.code === "string" ? error.code : "network";
10694
+ return new Error(
10695
+ [
10696
+ `Schema introspection failed: database connection was reset or unreachable (${code}: ${message}).`,
10697
+ `The CLI started correctly; generate could not finish talking to Postgres for ${configLabel}.`,
10698
+ ...diagnosticsBlock,
10699
+ "",
10700
+ "Check:",
10701
+ " 1. DATABASE_URL / provider.connectionString is reachable from this machine (VPN, Railway proxy, firewall).",
10702
+ ' 2. The database is running and accepts connections (try `psql "$DATABASE_URL" -c "select 1"`).',
10703
+ " 3. SSL settings match the host (Railway/public proxy often needs `?sslmode=require`).",
10704
+ " 4. Retry once \u2014 ECONNRESET is often a transient proxy drop mid-introspection.",
10705
+ "",
10706
+ "For a full stack: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate"
10645
10707
  ].join("\n")
10646
10708
  );
10647
10709
  }
10648
10710
  if (error instanceof Error) {
10649
- return error;
10711
+ if (diagnostics.length === 0 && !isDebugEnabled()) {
10712
+ return error;
10713
+ }
10714
+ const base = error.message || normalizeErrorMessage(error);
10715
+ return new Error(
10716
+ [
10717
+ base,
10718
+ ...diagnosticsBlock,
10719
+ ...isDebugEnabled() && error.stack ? ["", "Stack:", error.stack] : ["", "Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate"]
10720
+ ].join("\n")
10721
+ );
10650
10722
  }
10651
10723
  return new Error(normalizeErrorMessage(error));
10652
10724
  }
10725
+ function logCliError(error, errorLog = console.error) {
10726
+ const message = error instanceof Error ? error.message : normalizeErrorMessage(error);
10727
+ errorLog(message);
10728
+ if (isDebugEnabled() && error instanceof Error && error.stack) {
10729
+ const stackOnly = error.stack.startsWith(error.message) ? error.stack.slice(error.message.length).replace(/^\n/, "") : error.stack;
10730
+ if (stackOnly) {
10731
+ errorLog(stackOnly);
10732
+ }
10733
+ }
10734
+ }
10653
10735
  function formatSkippedArtifactLine(artifact) {
10654
10736
  if (artifact.reason === "protected-existing-file") {
10655
10737
  return ` [skip] ${artifact.path} (existing ${artifact.kind} artifacts are protected from overwrite; delete or retarget the file to regenerate it)`;
@@ -10658,20 +10740,36 @@ function formatSkippedArtifactLine(artifact) {
10658
10740
  }
10659
10741
  async function runCLI(argv, runtime = {}) {
10660
10742
  const log = runtime.log ?? console.log;
10743
+ const errorLog = runtime.errorLog ?? console.error;
10661
10744
  const runGenerator = runtime.runGenerator ?? runSchemaGenerator;
10662
- const parsed = parseCommand(argv);
10745
+ let parsed;
10746
+ try {
10747
+ parsed = parseCommand(argv);
10748
+ } catch (error) {
10749
+ logCliError(formatGeneratorError(error), errorLog);
10750
+ process.exitCode = 1;
10751
+ return;
10752
+ }
10663
10753
  if (parsed.command === "help") {
10664
10754
  log(usage(parsed.topic));
10665
10755
  return;
10666
10756
  }
10667
10757
  let result;
10668
10758
  try {
10759
+ if (isDebugEnabled()) {
10760
+ errorLog(
10761
+ `[athena-js] generate starting (dryRun=${parsed.dryRun}${parsed.configPath ? ` config=${parsed.configPath}` : ""})`
10762
+ );
10763
+ }
10669
10764
  result = await runGenerator({
10670
10765
  configPath: parsed.configPath,
10671
10766
  dryRun: parsed.dryRun
10672
10767
  });
10673
10768
  } catch (error) {
10674
- throw formatGeneratorError(error, parsed.configPath);
10769
+ const formatted = formatGeneratorError(error, parsed.configPath);
10770
+ logCliError(formatted, errorLog);
10771
+ process.exitCode = 1;
10772
+ return;
10675
10773
  }
10676
10774
  if (parsed.dryRun) {
10677
10775
  log(`[dry-run] Generated ${result.files.length} files from ${result.configPath}`);
@@ -10695,6 +10793,7 @@ async function runCLI(argv, runtime = {}) {
10695
10793
  }
10696
10794
  }
10697
10795
 
10796
+ exports.logCliError = logCliError;
10698
10797
  exports.parseCommand = parseCommand;
10699
10798
  exports.runCLI = runCLI;
10700
10799
  exports.usage = usage;