@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