gencow 0.1.204 → 0.1.206

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.
@@ -346,7 +346,7 @@ ${dashboardLine}
346
346
  }
347
347
 
348
348
  const currentCreds = loadCredsImpl();
349
- if (currentCreds?.currentApp === name) {
349
+ if (creds.credentialSource !== "environment" && currentCreds?.currentApp === name) {
350
350
  saveCredsImpl({ ...currentCreds, currentApp: undefined });
351
351
  }
352
352
 
@@ -75,11 +75,11 @@ async function responseError(response, fallback, creds, parsedBody) {
75
75
  throwResponseError(response, fallback, body, creds);
76
76
  }
77
77
 
78
- async function releaseCapability({ creds, appId, environment, platformFetchImpl }) {
78
+ async function releaseCapability({ creds, appId, environment, platformFetchImpl, signal }) {
79
79
  const response = await platformFetchImpl(
80
80
  creds,
81
81
  `/platform/apps/${appId}/release-capability?environment=${environment}`,
82
- { method: "GET" },
82
+ { method: "GET", ...(signal ? { signal } : {}) },
83
83
  );
84
84
  if (response.status === 404 || response.status === 405) {
85
85
  const body = (await response.json().catch(() => ({}))) || {};
@@ -108,8 +108,41 @@ export async function prepareReleaseAttempt({
108
108
  createReleaseSourcePackageImpl = createReleaseSourcePackage,
109
109
  platformFetchImpl = platformFetch,
110
110
  unlinkImpl = unlink,
111
+ capabilityTimeoutMs = null,
112
+ allowCapabilityTimeoutFallback = false,
113
+ capabilityTimeoutSetTimeoutImpl = setTimeout,
114
+ capabilityTimeoutClearTimeoutImpl = clearTimeout,
111
115
  }) {
112
- const capability = await releaseCapability({ creds, appId, environment, platformFetchImpl });
116
+ const capabilityRequest = (signal) => releaseCapability({ creds, appId, environment, platformFetchImpl, signal });
117
+ let capability;
118
+ if (Number.isFinite(capabilityTimeoutMs) && capabilityTimeoutMs > 0) {
119
+ let timeout;
120
+ const controller = new AbortController();
121
+ try {
122
+ capability = await Promise.race([
123
+ capabilityRequest(controller.signal),
124
+ new Promise((_, reject) => {
125
+ timeout = capabilityTimeoutSetTimeoutImpl(
126
+ () => {
127
+ controller.abort();
128
+ reject(new Error("APP_RELEASE_CAPABILITY_TIMEOUT"));
129
+ },
130
+ capabilityTimeoutMs,
131
+ );
132
+ timeout?.unref?.();
133
+ }),
134
+ ]);
135
+ } catch (error) {
136
+ if (!(allowCapabilityTimeoutFallback && error?.message === "APP_RELEASE_CAPABILITY_TIMEOUT")) {
137
+ throw error;
138
+ }
139
+ capability = null;
140
+ } finally {
141
+ if (timeout !== undefined) capabilityTimeoutClearTimeoutImpl(timeout);
142
+ }
143
+ } else {
144
+ capability = await capabilityRequest();
145
+ }
113
146
  if (!capability) return null;
114
147
  const requestId = releaseRequestId(explicitRequestId);
115
148
  const sourcePackage = await createReleaseSourcePackageImpl({
@@ -304,6 +304,8 @@ export function createStaticDeployRuntime({
304
304
  environment: opts.envTarget || "dev",
305
305
  requestId: opts.requestId || null,
306
306
  platformFetchImpl,
307
+ capabilityTimeoutMs: 15_000,
308
+ allowCapabilityTimeoutFallback: true,
307
309
  });
308
310
  releaseAttemptId = releaseAttempt?.attemptId ?? null;
309
311
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gencow",
3
- "version": "0.1.204",
3
+ "version": "0.1.206",
4
4
  "description": "Gencow — AI Backend Engine",
5
5
  "type": "module",
6
6
  "bin": {