@forge/cli

13.4.0-next.3-experimental-f258a6d13.4.0-next.5-experimental-016ed9d
out/site/site-service.js
+out/site/site-service.jsNew file
+50
Index: package/out/site/site-service.js
===================================================================
--- package/out/site/site-service.js
+++ package/out/site/site-service.js
@@ -0,0 +1,50 @@
+"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;
+const cli_shared_1 = require("@forge/cli-shared");
+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;
+class SiteService {
+    client;
+    constructor(client) {
+        this.client = client;
+    }
+    async provision() {
+        return this.client.provisionDemoSite();
+    }
+    async getExistingSite() {
+        return this.client.getDemoSite();
+    }
+    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;
+        let lastStatus;
+        while (true) {
+            const provisioning = await this.client.getDemoSiteProvisioning(taskId);
+            const status = provisioning?.status;
+            if (status && status !== lastStatus) {
+                lastStatus = status;
+                options.onStatus?.(status);
+            }
+            if (status === 'COMPLETED' && provisioning) {
+                return { kind: 'completed', provisioning };
+            }
+            if (status === 'COMPLETED_WITH_ERRORS' && provisioning?.site) {
+                return { kind: 'completedWithErrors', provisioning };
+            }
+            if (status === 'FAILED' || status === 'COMPLETED_WITH_ERRORS') {
+                throw new SiteProvisioningFailedError(`Demo site provisioning ${status === 'FAILED' ? 'failed' : 'completed with errors'} (taskId: ${taskId}).`);
+            }
+            if (Date.now() >= deadline) {
+                return { kind: 'timeout', taskId };
+            }
+            await (0, cli_shared_1.pause)(intervalMs);
+        }
+    }
+}
+exports.SiteService = SiteService;
+//# sourceMappingURL=site-service.js.map
\ No newline at end of file