@xylex-group/athena 2.12.0 → 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 -46
  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 -46
  17. package/dist/browser.js.map +1 -1
  18. package/dist/cli/index.cjs +150 -48
  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 -49
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/{client-QUbAs7E8.d.ts → client-BJjUwDSg.d.cts} +109 -1448
  25. package/dist/{client-C3x75Zgn.d.cts → 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 -46
  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 -47
  39. package/dist/index.js.map +1 -1
  40. package/dist/{model-form-CD1uhWSh.d.cts → model-form-Dw4zEL5a.d.cts} +2 -2
  41. package/dist/{model-form-Dm69I-oO.d.ts → model-form-yRg71q3H.d.ts} +2 -2
  42. package/dist/{module-CW3tWJ10.d.ts → module-DBteUIob.d.ts} +12 -9
  43. package/dist/{module-Cxcurfes.d.cts → module-yoX49uQC.d.cts} +12 -9
  44. package/dist/next/client.cjs +452 -46
  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 -47
  49. package/dist/next/client.js.map +1 -1
  50. package/dist/next/server.cjs +292 -46
  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 -47
  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-BAwb6Vzm.d.ts → pipeline-Bj6RWt1A.d.ts} +1 -1
  65. package/dist/{pipeline-B14jVK7J.d.cts → pipeline-Dwck-wZO.d.cts} +1 -1
  66. package/dist/react.cjs +2 -10
  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 -10
  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-Cq4-NoB4.d.ts → types-BRP7sfSF.d.ts} +50 -2
  81. package/dist/{types-Dr849HD6.d.cts → types-BU8uJH_b.d.cts} +50 -2
  82. package/dist/{types-CwJCPpLD.d.ts → types-CH78O90i.d.cts} +2 -2
  83. package/dist/{types-CwJCPpLD.d.cts → types-CH78O90i.d.ts} +2 -2
  84. package/dist/{types-DMOoYnPS.d.cts → types-CjC9_5ZQ.d.cts} +3 -3
  85. package/dist/{types-BcVmPBP-.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 -12
  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 -13
  93. package/dist/utils.js.map +1 -1
  94. package/package.json +49 -22
  95. package/dist/shared-0Kdc74lu.d.ts +0 -35
  96. package/dist/shared-C0wVICRv.d.cts +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", "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,14 +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 (!hasHeaderIgnoreCase(headers, "x-api-key")) {
2114
- headers["x-api-key"] = apiKey;
2115
- }
2116
- }
2117
2109
  const resolvedAthenaKey = normalizeHeaderValue(athenaKey) ?? normalizeHeaderValue(apiKey);
2118
2110
  if (resolvedAthenaKey && !hasHeaderIgnoreCase(headers, "X-Athena-Key")) {
2119
2111
  headers["X-Athena-Key"] = resolvedAthenaKey;
@@ -2239,7 +2231,7 @@ function buildAthenaRequestHeaders(input) {
2239
2231
 
2240
2232
  // package.json
2241
2233
  var package_default = {
2242
- version: "2.12.0"
2234
+ version: "2.13.0"
2243
2235
  };
2244
2236
 
2245
2237
  // src/sdk-version.ts
@@ -4332,38 +4324,6 @@ function createAuthClient(config = {}) {
4332
4324
  };
4333
4325
  }
4334
4326
 
4335
- // src/db/module.ts
4336
- function createDbModule(input) {
4337
- const db = {
4338
- from: input.from,
4339
- select(table, first, second) {
4340
- if (first && typeof first === "object" && !Array.isArray(first)) {
4341
- return input.from(table).select(void 0, first);
4342
- }
4343
- return input.from(table).select(first, second);
4344
- },
4345
- insert(table, values, options) {
4346
- return Array.isArray(values) ? input.from(table).insert(values, options) : input.from(table).insert(values, options);
4347
- },
4348
- upsert(table, values, options) {
4349
- return Array.isArray(values) ? input.from(table).upsert(values, options) : input.from(table).upsert(values, options);
4350
- },
4351
- update(table, values, options) {
4352
- return input.from(table).update(values, options);
4353
- },
4354
- delete(table, options) {
4355
- return input.from(table).delete(options);
4356
- },
4357
- rpc(fn, args, options) {
4358
- return input.rpc(fn, args, options);
4359
- },
4360
- query(query, options) {
4361
- return input.query(query, options);
4362
- }
4363
- };
4364
- return db;
4365
- }
4366
-
4367
4327
  // src/storage/file.ts
4368
4328
  function createStorageFileModule(base, config = {}) {
4369
4329
  const upload = async (input, options) => {
@@ -9711,7 +9671,30 @@ function createClientFromConfig(config, sourceConfig) {
9711
9671
  config.experimental,
9712
9672
  queryTracer
9713
9673
  );
9714
- 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
+ };
9715
9698
  const chat = createChatModule({
9716
9699
  baseUrl: config.chatUrl,
9717
9700
  apiKey: config.apiKey,
@@ -9859,7 +9842,8 @@ function createClientFromConfig(config, sourceConfig) {
9859
9842
  }
9860
9843
  return sdkClient;
9861
9844
  }
9862
- function createClient(configOrUrl, apiKey, options) {
9845
+ function createClient(...args) {
9846
+ const [configOrUrl, apiKey, options] = args;
9863
9847
  if (typeof configOrUrl === "string" || configOrUrl === null || configOrUrl === void 0) {
9864
9848
  return createClientFromInput({
9865
9849
  url: configOrUrl,
@@ -10466,6 +10450,10 @@ async function runSchemaGenerator(options = {}) {
10466
10450
  }
10467
10451
 
10468
10452
  // src/cli/index.ts
10453
+ function isDebugEnabled() {
10454
+ const value = globalThis.process?.env?.ATHENA_JS_DEBUG;
10455
+ return value === "1" || value === "true";
10456
+ }
10469
10457
  function rootUsage() {
10470
10458
  return [
10471
10459
  "athena-js CLI",
@@ -10629,7 +10617,61 @@ function extractMissingDatabaseName(message) {
10629
10617
  function isErrorWithCode(error) {
10630
10618
  return typeof error === "object" && error !== null && "code" in error;
10631
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
+ }
10632
10672
  function formatGeneratorError(error, configPath) {
10673
+ const diagnostics = collectErrorDiagnostics(error);
10674
+ const diagnosticsBlock = diagnostics.length > 0 ? ["", "Diagnostics:", ...diagnostics] : [];
10633
10675
  if (isErrorWithCode(error) && error.code === "3D000") {
10634
10676
  const message = normalizeErrorMessage(error);
10635
10677
  const databaseName = extractMissingDatabaseName(message);
@@ -10638,15 +10680,58 @@ function formatGeneratorError(error, configPath) {
10638
10680
  return new Error(
10639
10681
  [
10640
10682
  `${databaseLabel} (code 3D000).`,
10641
- `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"
10642
10707
  ].join("\n")
10643
10708
  );
10644
10709
  }
10645
10710
  if (error instanceof Error) {
10646
- 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
+ );
10647
10722
  }
10648
10723
  return new Error(normalizeErrorMessage(error));
10649
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
+ }
10650
10735
  function formatSkippedArtifactLine(artifact) {
10651
10736
  if (artifact.reason === "protected-existing-file") {
10652
10737
  return ` [skip] ${artifact.path} (existing ${artifact.kind} artifacts are protected from overwrite; delete or retarget the file to regenerate it)`;
@@ -10655,20 +10740,36 @@ function formatSkippedArtifactLine(artifact) {
10655
10740
  }
10656
10741
  async function runCLI(argv, runtime = {}) {
10657
10742
  const log = runtime.log ?? console.log;
10743
+ const errorLog = runtime.errorLog ?? console.error;
10658
10744
  const runGenerator = runtime.runGenerator ?? runSchemaGenerator;
10659
- 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
+ }
10660
10753
  if (parsed.command === "help") {
10661
10754
  log(usage(parsed.topic));
10662
10755
  return;
10663
10756
  }
10664
10757
  let result;
10665
10758
  try {
10759
+ if (isDebugEnabled()) {
10760
+ errorLog(
10761
+ `[athena-js] generate starting (dryRun=${parsed.dryRun}${parsed.configPath ? ` config=${parsed.configPath}` : ""})`
10762
+ );
10763
+ }
10666
10764
  result = await runGenerator({
10667
10765
  configPath: parsed.configPath,
10668
10766
  dryRun: parsed.dryRun
10669
10767
  });
10670
10768
  } catch (error) {
10671
- throw formatGeneratorError(error, parsed.configPath);
10769
+ const formatted = formatGeneratorError(error, parsed.configPath);
10770
+ logCliError(formatted, errorLog);
10771
+ process.exitCode = 1;
10772
+ return;
10672
10773
  }
10673
10774
  if (parsed.dryRun) {
10674
10775
  log(`[dry-run] Generated ${result.files.length} files from ${result.configPath}`);
@@ -10692,6 +10793,7 @@ async function runCLI(argv, runtime = {}) {
10692
10793
  }
10693
10794
  }
10694
10795
 
10796
+ exports.logCliError = logCliError;
10695
10797
  exports.parseCommand = parseCommand;
10696
10798
  exports.runCLI = runCLI;
10697
10799
  exports.usage = usage;