@forge/cli

13.4.0-next.5-experimental-c57557413.4.0-next.7-experimental-ccd5143
out/site/site-service.js
~out/site/site-service.jsModified
+32−2
Index: package/out/site/site-service.js
===================================================================
--- package/out/site/site-service.js
+++ package/out/site/site-service.js
@@ -1,24 +1,54 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.SiteService = exports.SiteProvisioningFailedError = exports.DEFAULT_PROVISION_POLL_INTERVAL_MS = exports.DEFAULT_PROVISION_TIMEOUT_MS = void 0;
+exports.SiteService = exports.isActiveDemoSite = exports.SiteProvisioningFailedError = exports.DEFAULT_PROVISION_POLL_INTERVAL_MS = exports.DEFAULT_PROVISION_TIMEOUT_MS = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
+const INACTIVE_SITE_STATUSES = ['EXPIRED', 'DEACTIVATED', 'DELETED', 'INACTIVE', 'FAILED'];
 exports.DEFAULT_PROVISION_TIMEOUT_MS = 3 * 60 * 1000;
 exports.DEFAULT_PROVISION_POLL_INTERVAL_MS = 5 * 1000;
 class SiteProvisioningFailedError extends cli_shared_1.UserError {
 }
 exports.SiteProvisioningFailedError = SiteProvisioningFailedError;
+const isActiveDemoSite = (site) => {
+    if (!site?.siteUrl) {
+        return false;
+    }
+    if (site.status && INACTIVE_SITE_STATUSES.includes(site.status.toUpperCase())) {
+        return false;
+    }
+    if (site.expiresAt) {
+        const expiresAt = Date.parse(site.expiresAt);
+        if (!Number.isNaN(expiresAt) && expiresAt <= Date.now()) {
+            return false;
+        }
+    }
+    return true;
+};
+exports.isActiveDemoSite = isActiveDemoSite;
 class SiteService {
     client;
-    constructor(client) {
+    logger;
+    constructor(client, logger = cli_shared_1.NullLogger) {
         this.client = client;
+        this.logger = logger;
     }
     async provision() {
         return this.client.provisionDemoSite();
     }
     async getExistingSite() {
         return this.client.getDemoSite();
     }
+    async hasActiveDemoSite() {
+        try {
+            const site = await this.client.getDemoSite();
+            this.logger.debug(cli_shared_1.Text.site.debug.demoSiteLookup(site?.siteUrl, site?.status, site?.expiresAt));
+            return (0, exports.isActiveDemoSite)(site);
+        }
+        catch (error) {
+            this.logger.debug(cli_shared_1.Text.site.debug.demoSiteLookupFailed(error instanceof Error ? error.message : String(error)));
+            return true;
+        }
+    }
     async pollProvisioning(taskId, options = {}) {
         const timeoutMs = options.timeoutMs ?? exports.DEFAULT_PROVISION_TIMEOUT_MS;
         const intervalMs = options.intervalMs ?? exports.DEFAULT_PROVISION_POLL_INTERVAL_MS;
         const deadline = Date.now() + timeoutMs;