@wix/ditto-codegen-public 1.0.454 → 1.0.456

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 (2) hide show
  1. package/dist/out.js +54 -53
  2. package/package.json +2 -2
package/dist/out.js CHANGED
@@ -10581,46 +10581,6 @@ var require_wixTokenRefresh = __commonJS({
10581
10581
  }
10582
10582
  });
10583
10583
 
10584
- // dist/experiments.js
10585
- var require_experiments = __commonJS({
10586
- "dist/experiments.js"(exports2) {
10587
- "use strict";
10588
- Object.defineProperty(exports2, "__esModule", { value: true });
10589
- exports2.FILTERED_JOB_POLLING = void 0;
10590
- exports2.getExperimentVariant = getExperimentVariant;
10591
- exports2.isExperimentEnabled = isExperimentEnabled;
10592
- var logger_12 = require_logger();
10593
- exports2.FILTERED_JOB_POLLING = "codegenFilteredJobPolling";
10594
- var parsedExperiments = null;
10595
- function getExperiments() {
10596
- if (parsedExperiments !== null) {
10597
- return parsedExperiments;
10598
- }
10599
- const raw = process.env.CODEGEN_EXPERIMENTS;
10600
- if (!raw) {
10601
- parsedExperiments = {};
10602
- return parsedExperiments;
10603
- }
10604
- try {
10605
- parsedExperiments = JSON.parse(raw);
10606
- } catch (error) {
10607
- logger_12.logger.error("[Experiments] Failed to parse CODEGEN_EXPERIMENTS", {
10608
- error: error instanceof Error ? error.message : String(error)
10609
- });
10610
- parsedExperiments = {};
10611
- }
10612
- return parsedExperiments;
10613
- }
10614
- function getExperimentVariant(specName) {
10615
- return getExperiments()[specName] ?? "A";
10616
- }
10617
- function isExperimentEnabled(specName) {
10618
- const variant = getExperimentVariant(specName);
10619
- return variant === "true" || variant !== "A" && variant !== "false";
10620
- }
10621
- }
10622
- });
10623
-
10624
10584
  // ../codegen-types/dist/errors/ErrorTypes.js
10625
10585
  var require_ErrorTypes = __commonJS({
10626
10586
  "../codegen-types/dist/errors/ErrorTypes.js"(exports2) {
@@ -11049,7 +11009,7 @@ var require_CodeGenService = __commonJS({
11049
11009
  "dist/services/CodeGenService.js"(exports2) {
11050
11010
  "use strict";
11051
11011
  Object.defineProperty(exports2, "__esModule", { value: true });
11052
- exports2.CodeGenService = exports2.FETCH_TIMEOUT_MS = exports2.REQUEST_TIMEOUT_MS = exports2.JobsSortOrder = exports2.TaskKind = exports2.Status = void 0;
11012
+ exports2.CodeGenService = exports2.AUTH_REFRESH_COOLDOWN_MS = exports2.FETCH_TIMEOUT_MS = exports2.REQUEST_TIMEOUT_MS = exports2.JobsSortOrder = exports2.TaskKind = exports2.Status = void 0;
11053
11013
  exports2.createCodeGenErrorHandler = createCodeGenErrorHandler;
11054
11014
  var http_client_1 = require_index_node();
11055
11015
  var http_1 = require_http_impl();
@@ -11065,7 +11025,6 @@ var require_CodeGenService = __commonJS({
11065
11025
  return types_1.JobsSortOrder;
11066
11026
  } });
11067
11027
  var logger_12 = require_logger();
11068
- var experiments_1 = require_experiments();
11069
11028
  var ditto_codegen_types_12 = require_dist4();
11070
11029
  var FILE_OPERATION = {
11071
11030
  [ditto_codegen_types_12.ExtensionGenerationOperation.INSERT]: types_1.FileOperation.INSERT,
@@ -11141,6 +11100,8 @@ var require_CodeGenService = __commonJS({
11141
11100
  }
11142
11101
  exports2.REQUEST_TIMEOUT_MS = 12e4;
11143
11102
  exports2.FETCH_TIMEOUT_MS = 3e4;
11103
+ var AUTH_FAILURE_STATUSES = /* @__PURE__ */ new Set([401, 403]);
11104
+ exports2.AUTH_REFRESH_COOLDOWN_MS = 6e4;
11144
11105
  function isNotFound(error) {
11145
11106
  return http_client_1.HttpClient.isHttpError(error) && error.response?.status === 404;
11146
11107
  }
@@ -11151,27 +11112,31 @@ var require_CodeGenService = __commonJS({
11151
11112
  constructor(projectId, httpClient) {
11152
11113
  this.projectId = projectId;
11153
11114
  this.accessToken = process.env.WIX_ACCESS_TOKEN;
11115
+ this.lastAuthRefreshAt = 0;
11116
+ this.isAuthRefreshFailing = false;
11154
11117
  this.sandboxId = process.env.SANDBOX_ID;
11155
11118
  this.refreshAccessToken = async () => {
11156
- const token = await (0, wixTokenRefresh_1.refreshWixAccessToken)();
11157
- this.setAccessToken(token);
11158
- return token;
11119
+ if (!this.inFlightRefresh) {
11120
+ this.inFlightRefresh = this.mintAccessToken();
11121
+ }
11122
+ return this.inFlightRefresh;
11159
11123
  };
11160
11124
  this.request = async (req, timeout) => {
11161
11125
  const build = () => this.withTimeout(this.withAuth(req), timeout);
11126
+ const attemptedToken = this.accessToken;
11162
11127
  try {
11163
11128
  return await this.httpClient.request(build());
11164
11129
  } catch (err) {
11165
- if (!this.isUnauthorized(err))
11130
+ if (!this.isAuthFailure(err))
11131
+ throw err;
11132
+ if (!await this.prepareAuthRetry(attemptedToken))
11166
11133
  throw err;
11167
- logger_12.logger.warn("[CodeGenService] 401 received, refreshing token and retrying once");
11168
- await this.refreshAccessToken();
11169
11134
  return await this.httpClient.request(build());
11170
11135
  }
11171
11136
  };
11172
11137
  this.fetchPendingJobs = async () => {
11173
11138
  const { sandboxId } = this;
11174
- const filtered = sandboxId && (0, experiments_1.isExperimentEnabled)(experiments_1.FILTERED_JOB_POLLING) ? {
11139
+ const filtered = sandboxId ? {
11175
11140
  projectId: this.projectId,
11176
11141
  filter: { status: types_1.Status.PENDING, sandboxId },
11177
11142
  paging: { limit: 1 },
@@ -11379,13 +11344,49 @@ var require_CodeGenService = __commonJS({
11379
11344
  }
11380
11345
  setAccessToken(token) {
11381
11346
  this.accessToken = token;
11347
+ this.onAccessTokenChanged?.(token);
11348
+ }
11349
+ /** Inverted wiring: `opencode-integration/config` imports this module. */
11350
+ setAccessTokenListener(listener) {
11351
+ this.onAccessTokenChanged = listener;
11382
11352
  }
11383
- isUnauthorized(error) {
11353
+ async mintAccessToken() {
11354
+ this.lastAuthRefreshAt = Date.now();
11355
+ try {
11356
+ const token = await (0, wixTokenRefresh_1.refreshWixAccessToken)();
11357
+ this.isAuthRefreshFailing = false;
11358
+ this.setAccessToken(token);
11359
+ return token;
11360
+ } catch (err) {
11361
+ this.isAuthRefreshFailing = true;
11362
+ throw err;
11363
+ } finally {
11364
+ this.inFlightRefresh = void 0;
11365
+ }
11366
+ }
11367
+ isAuthFailure(error) {
11384
11368
  if (!http_client_1.HttpClient.isHttpError(error))
11385
11369
  return false;
11386
11370
  if (this.httpClient.isCancel(error))
11387
11371
  return false;
11388
- return error.response?.status === 401;
11372
+ const status = error.response?.status;
11373
+ return status !== void 0 && AUTH_FAILURE_STATUSES.has(status);
11374
+ }
11375
+ async prepareAuthRetry(attemptedToken) {
11376
+ if (this.accessToken !== attemptedToken)
11377
+ return true;
11378
+ if (this.inFlightRefresh) {
11379
+ await this.inFlightRefresh;
11380
+ return true;
11381
+ }
11382
+ const tokenAgeMs = Date.now() - this.lastAuthRefreshAt;
11383
+ if (tokenAgeMs < exports2.AUTH_REFRESH_COOLDOWN_MS) {
11384
+ logger_12.logger.warn(this.isAuthRefreshFailing ? "[CodeGenService] auth failure while token refresh is failing, not retrying" : "[CodeGenService] auth failure on a freshly refreshed token, not retrying", { tokenAgeMs });
11385
+ return false;
11386
+ }
11387
+ logger_12.logger.info("[CodeGenService] auth failure received, refreshing token and retrying once", { tokenAgeMs });
11388
+ await this.refreshAccessToken();
11389
+ return true;
11389
11390
  }
11390
11391
  withAuth(req) {
11391
11392
  return mapRequest(req, (r) => ({
@@ -24676,8 +24677,7 @@ var runPendingJob = async (job, logPrefix) => {
24676
24677
  }
24677
24678
  const jobId = job.id;
24678
24679
  logger_1.logger.info(`${logPrefix} Selected job`, { jobId });
24679
- const freshToken = await codeGenerationService_1.codeGenerationService.refreshAccessToken();
24680
- (0, config_1.setCurrentAccessToken)(freshToken);
24680
+ await codeGenerationService_1.codeGenerationService.refreshAccessToken();
24681
24681
  await codeGenerationService_1.codeGenerationService.markJobAsRuninng(jobId);
24682
24682
  await processJob(job);
24683
24683
  await codeGenerationService_1.codeGenerationService.markJobAsCompleted(jobId);
@@ -24741,6 +24741,7 @@ async function main(ctx) {
24741
24741
  codeIdentifier: ctx.codeIdentifier,
24742
24742
  metasiteId: ctx.metasiteId
24743
24743
  });
24744
+ codeGenerationService_1.codeGenerationService.setAccessTokenListener(config_1.setCurrentAccessToken);
24744
24745
  await initOpenCode();
24745
24746
  const nudgeListenerServer = new nudge_listener_server_1.NudgeListenerServer({
24746
24747
  fetchPendingJobs: () => codeGenerationService_1.codeGenerationService.fetchPendingJobs(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/ditto-codegen-public",
3
- "version": "1.0.454",
3
+ "version": "1.0.456",
4
4
  "description": "AI-powered Wix CLI app generator - standalone executable",
5
5
  "scripts": {
6
6
  "build": "node build.mjs",
@@ -29,5 +29,5 @@
29
29
  "esbuild": "^0.27.2",
30
30
  "vitest": "^4.0.16"
31
31
  },
32
- "falconPackageHash": "00be7bc54d1f2483b05b7e95eb088652073949d7346708269bf89b49"
32
+ "falconPackageHash": "b4e524a284525e70d74a19bc69db923c47fac5ed6de358b32ae8f17e"
33
33
  }