@squarecloud/api
Version:
A NodeJS wrapper for Square Cloud API
1 lines • 35.5 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/structures/application/base.ts","../../../src/lib/routes.ts","../../../src/services/cache/base.ts","../../../src/services/cache/application.ts","../../../src/structures/backup.ts","../../../src/modules/backups.ts","../../../src/structures/deploy.ts","../../../src/modules/deploys.ts","../../../src/modules/files.ts","../../../src/structures/error.ts","../../../src/structures/status.ts","../../../src/assertions/common.ts","../../../src/assertions/literal.ts"],"sourcesContent":["import type {\n\tAPIUserApplication,\n\tApplicationLanguage,\n} from \"@squarecloud/api-types/v2\";\nimport { readFile } from \"fs/promises\";\n\nimport { assertPathLike, assertString } from \"@/assertions/literal\";\nimport type { SquareCloudAPI } from \"@/index\";\nimport { Routes } from \"@/lib/routes\";\nimport { BackupsModule, DeploysModule, FilesModule } from \"@/modules\";\nimport { ApplicationCacheService } from \"@/services\";\nimport { ApplicationStatus } from \"@/structures\";\nimport type { Application } from \"./application\";\n\n/**\n * Represents the base application from the user endpoint\n */\nexport class BaseApplication {\n\t/** The application ID */\n\tpublic readonly id: string;\n\t/** The application display name */\n\tpublic name: string;\n\t/** The application description */\n\tpublic description?: string;\n\t/** The url to manage the application via web */\n\tpublic url: string;\n\t/** The application total ram */\n\tpublic ram: number;\n\t/** The application current cluster */\n\tpublic cluster: string;\n\t/**\n\t * The application programming language\n\t *\n\t * - `javascript`\n\t * - `typescript`\n\t * - `python`\n\t * - `java`\n\t * - `elixir`\n\t * - `rust`\n\t * - `go`\n\t * - `php`\n\t * - `dotnet`\n\t * - `static`\n\t */\n\tpublic language: ApplicationLanguage;\n\n\t/** Cache service for this application */\n\tpublic readonly cache = new ApplicationCacheService();\n\t/** Files module for this application */\n\tpublic readonly files = new FilesModule(this);\n\t/** Backup module for this application */\n\tpublic readonly backups = new BackupsModule(this);\n\t/** Deploys module for this application */\n\tpublic readonly deploys = new DeploysModule(this);\n\n\t/**\n\t * Represents the base application from the user endpoint\n\t *\n\t * @constructor\n\t * @param client - The client for this application\n\t * @param data - The data from this application\n\t */\n\tconstructor(\n\t\tpublic readonly client: SquareCloudAPI,\n\t\tdata: APIUserApplication,\n\t) {\n\t\tconst { id, name, desc, ram, lang, cluster } = data;\n\n\t\tthis.id = id;\n\t\tthis.name = name;\n\t\tthis.description = desc;\n\t\tthis.ram = ram;\n\t\tthis.language = lang;\n\t\tthis.cluster = cluster;\n\t\tthis.url = `https://squarecloud.app/dashboard/app/${id}`;\n\t}\n\n\t/** @deprecated Use `Application#backups` instead */\n\tget backup() {\n\t\tconsole.warn(\n\t\t\t\"[SquareCloudAPI] The 'backup' property is deprecated and will be removed in the the next major version. Use Application#backups instead.\",\n\t\t);\n\t\treturn this.backups;\n\t}\n\n\t/**\n\t * Fetches this application for full information\n\t */\n\tasync fetch(): Promise<Application> {\n\t\treturn this.client.applications.fetch(this.id);\n\t}\n\n\t/**\n\t * Gets the application current status information\n\t */\n\tasync getStatus(): Promise<ApplicationStatus> {\n\t\tconst data = await this.client.api.request(Routes.apps.status(this.id));\n\t\tconst status = new ApplicationStatus(this.client, data.response, this.id);\n\n\t\tthis.client.emit(\"statusUpdate\", this, this.cache.status, status);\n\t\tthis.cache.set(\"status\", status);\n\n\t\treturn status;\n\t}\n\n\t/**\n\t * Gets the application current logs\n\t */\n\tasync getLogs(): Promise<string> {\n\t\tconst data = await this.client.api.request(Routes.apps.logs(this.id));\n\t\tconst { logs } = data.response;\n\n\t\tthis.client.emit(\"logsUpdate\", this, this.cache.logs, logs);\n\t\tthis.cache.set(\"logs\", logs);\n\n\t\treturn logs;\n\t}\n\n\t/**\n\t * Starts up the application\n\t * @returns `boolean` for success or fail\n\t */\n\tasync start(): Promise<boolean> {\n\t\tconst data = await this.client.api.request(Routes.apps.start(this.id), {\n\t\t\tmethod: \"POST\",\n\t\t});\n\n\t\treturn data?.status === \"success\";\n\t}\n\n\t/**\n\t * Stops the application\n\t * @returns `boolean` for success or fail\n\t */\n\tasync stop(): Promise<boolean> {\n\t\tconst data = await this.client.api.request(Routes.apps.stop(this.id), {\n\t\t\tmethod: \"POST\",\n\t\t});\n\n\t\treturn data?.status === \"success\";\n\t}\n\n\t/**\n\t * Restarts the application\n\t * @returns `boolean` for success or fail\n\t */\n\tasync restart(): Promise<boolean> {\n\t\tconst data = await this.client.api.request(Routes.apps.restart(this.id), {\n\t\t\tmethod: \"POST\",\n\t\t});\n\n\t\treturn data?.status === \"success\";\n\t}\n\n\t/**\n\t * Deletes your whole application\n\t * - This action is irreversible.\n\t *\n\t * @returns `boolean` for success or fail\n\t */\n\tasync delete(): Promise<boolean> {\n\t\tconst data = await this.client.api.request(Routes.apps.delete(this.id), {\n\t\t\tmethod: \"DELETE\",\n\t\t});\n\n\t\treturn data?.status === \"success\";\n\t}\n\n\t/**\n\t * Commit files to your application folder\n\t *\n\t * - This action is irreversible.\n\t *\n\t * - Tip: use this to get an absolute path.\n\t * ```ts\n\t * require('path').join(__dirname, 'fileName')\n\t * ```\n\t * - Tip 2: use a zip file to commit more than one archive\n\t *\n\t * @param file - Buffer or absolute path to the file\n\t * @param fileName - The file name (e.g.: \"index.js\")\n\t * @param restart - Whether the application should be restarted after the commit\n\t * @returns `true` for success or `false` for fail\n\t */\n\tasync commit(file: string | Buffer, fileName?: string): Promise<boolean> {\n\t\tassertPathLike(file, \"COMMIT_FILE\");\n\n\t\tif (fileName) {\n\t\t\tassertString(fileName, \"FILE_NAME\");\n\t\t}\n\n\t\tif (typeof file === \"string\") {\n\t\t\tfile = await readFile(file);\n\t\t}\n\n\t\tconst formData = new FormData();\n\t\tconst blob = new Blob([file]);\n\t\tformData.append(\"file\", blob, fileName || \"commit.zip\");\n\n\t\tconst data = await this.client.api.request(Routes.apps.commit(this.id), {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\treturn data?.status === \"success\";\n\t}\n}\n","import type { APIEndpoint } from \"@/types\";\n\nexport type Route<T extends APIEndpoint> = string & { __route: T };\nexport const Route = <T extends APIEndpoint>(route: string) =>\n\troute as Route<T>;\n\ninterface IRoutes {\n\t[k: string]: ((...args: string[]) => Route<APIEndpoint>) | IRoutes;\n}\n\nexport const Routes = {\n\tuser: () => {\n\t\treturn Route<\"user\">(\"users/me\");\n\t},\n\tservice: {\n\t\tstatus: () => {\n\t\t\treturn Route<\"service/status\">(\"service/status\");\n\t\t},\n\t},\n\tapps: {\n\t\tupload: () => {\n\t\t\treturn Route<\"apps/upload\">(\"apps\");\n\t\t},\n\t\tstatusAll: () => {\n\t\t\treturn Route<\"apps/status-all\">(\"apps/status\");\n\t\t},\n\t\tinfo: (appId: string) => {\n\t\t\treturn Route<\"apps/info\">(`apps/${appId}`);\n\t\t},\n\t\tstatus: (appId: string) => {\n\t\t\treturn Route<\"apps/status\">(`apps/${appId}/status`);\n\t\t},\n\t\tlogs: (appId: string) => {\n\t\t\treturn Route<\"apps/logs\">(`apps/${appId}/logs`);\n\t\t},\n\t\tdelete: (appId: string) => {\n\t\t\treturn Route<\"apps/delete\">(`apps/${appId}`);\n\t\t},\n\t\tcommit: (appId: string) => {\n\t\t\treturn Route<\"apps/commit\">(`apps/${appId}/commit`);\n\t\t},\n\t\tsnapshots: (appId: string) => {\n\t\t\treturn Route<\"apps/snapshots\">(`apps/${appId}/snapshots`);\n\t\t},\n\t\tgenerateSnapshot: (appId: string) => {\n\t\t\treturn Route<\"apps/generate-snapshot\">(`apps/${appId}/snapshots`);\n\t\t},\n\t\tstart: (appId: string) => {\n\t\t\treturn Route<\"apps/start\">(`apps/${appId}/start`);\n\t\t},\n\t\trestart: (appId: string) => {\n\t\t\treturn Route<\"apps/restart\">(`apps/${appId}/restart`);\n\t\t},\n\t\tstop: (appId: string) => {\n\t\t\treturn Route<\"apps/stop\">(`apps/${appId}/stop`);\n\t\t},\n\t\tfiles: {\n\t\t\tread: (appId: string) => {\n\t\t\t\treturn Route<\"apps/files/read\">(`apps/${appId}/files/content`);\n\t\t\t},\n\t\t\tlist: (appId: string) => {\n\t\t\t\treturn Route<\"apps/files/list\">(`apps/${appId}/files`);\n\t\t\t},\n\t\t\tupsert: (appId: string) => {\n\t\t\t\treturn Route<\"apps/files/upsert\">(`apps/${appId}/files`);\n\t\t\t},\n\t\t\tmove: (appId: string) => {\n\t\t\t\treturn Route<\"apps/files/move\">(`apps/${appId}/files`);\n\t\t\t},\n\t\t\tdelete: (appId: string) => {\n\t\t\t\treturn Route<\"apps/files/delete\">(`apps/${appId}/files`);\n\t\t\t},\n\t\t},\n\t\tdeployments: {\n\t\t\tlist: (appId: string) => {\n\t\t\t\treturn Route<\"apps/deployments/list\">(`apps/${appId}/deployments`);\n\t\t\t},\n\t\t\tcurrent: (appId: string) => {\n\t\t\t\treturn Route<\"apps/deployments/current\">(\n\t\t\t\t\t`apps/${appId}/deployments/current`,\n\t\t\t\t);\n\t\t\t},\n\t\t\twebhook: (appId: string) => {\n\t\t\t\treturn Route<\"apps/deployments/webhook\">(\n\t\t\t\t\t`apps/${appId}/deploy/webhook`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tnetwork: {\n\t\t\tdns: (appId: string) => {\n\t\t\t\treturn Route<\"apps/network/dns\">(`apps/${appId}/network/dns`);\n\t\t\t},\n\t\t\tcustom: (appId: string) => {\n\t\t\t\treturn Route<\"apps/network/custom\">(`apps/${appId}/network/custom`);\n\t\t\t},\n\t\t\tanalytics: (appId: string) => {\n\t\t\t\treturn Route<\"apps/network/analytics\">(\n\t\t\t\t\t`apps/${appId}/network/analytics`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t},\n} satisfies IRoutes;\n","export abstract class BaseCacheService<\n\tStruct extends object,\n\tKeys extends keyof Struct = keyof Struct,\n> {\n\tprotected cache: Struct;\n\n\tset<T extends Keys>(key: T, value: Struct[T]) {\n\t\tReflect.set(this.cache, key, value);\n\t}\n\n\tget<T extends Keys>(key: T): Struct[T] {\n\t\treturn this.cache[key];\n\t}\n\n\tremove<T extends Keys>(key: T) {\n\t\tReflect.set(this.cache, key, undefined);\n\t}\n}\n","import type { ApplicationStatus } from \"@/structures\";\nimport type { Backup } from \"@/structures/backup\";\nimport { BaseCacheService } from \"./base\";\n\nexport interface ApplicationCache {\n\treadonly status?: ApplicationStatus;\n\treadonly backups?: Backup[];\n\treadonly logs?: string;\n}\n\nexport class ApplicationCacheService extends BaseCacheService<ApplicationCache> {\n\tprotected cache: ApplicationCache = {\n\t\tstatus: undefined,\n\t\tbackups: undefined,\n\t\tlogs: undefined,\n\t};\n\n\tget status() {\n\t\treturn this.cache.status;\n\t}\n\n\tget backups() {\n\t\treturn this.cache.backups;\n\t}\n\n\tget logs() {\n\t\treturn this.cache.logs;\n\t}\n}\n","import type { APIApplicationBackup } from \"@squarecloud/api-types/v2\";\n\nimport type { BaseApplication } from \"./application/base\";\n\n/**\n * Represents an application backup (snapshot)\n */\nexport class Backup {\n\t/** Size of the backup in bytes. */\n\tpublic size: number;\n\n\t/** Date of the last modification of the backup. */\n\tpublic modifiedAt: Date;\n\n\t/** Date of the last modification of the backup in millisseconds. */\n\tpublic modifiedTimestamp: number;\n\n\t/** AWS access key for the backup. */\n\tpublic readonly key: string;\n\n\t/** The URL for downloading this backup */\n\tpublic readonly url: string;\n\n\t/**\n\t * Represents an application backup (snapshot)\n\t *\n\t * @constructor\n\t * @param application - The application from which you fetched the backups\n\t * @param data - The data from this backup\n\t */\n\tconstructor(\n\t\tpublic readonly application: BaseApplication,\n\t\tdata: APIApplicationBackup,\n\t) {\n\t\tconst { name, size, modified, key } = data;\n\t\tconst { userId } = application.client.api;\n\n\t\tthis.size = size;\n\t\tthis.modifiedAt = new Date(modified);\n\t\tthis.modifiedTimestamp = this.modifiedAt.getTime();\n\t\tthis.key = key;\n\t\tthis.url = `https://snapshots.squarecloud.app/applications/${userId}/${name}.zip?${key}`;\n\t}\n\n\t/**\n\t * Downloads this backup\n\t * @returns The downloaded backup bufer\n\t */\n\tasync download(): Promise<Buffer> {\n\t\tconst res = await fetch(this.url)\n\t\t\t.then((res) => res.arrayBuffer())\n\t\t\t.catch(() => undefined);\n\n\t\tif (!res) {\n\t\t\tthrow new Error(\"BACKUP_DOWNLOAD_FAILED\");\n\t\t}\n\n\t\treturn Buffer.from(res);\n\t}\n}\n","import type { RESTPostAPIApplicationBackupResult } from \"@squarecloud/api-types/v2\";\n\nimport { Routes } from \"@/lib/routes\";\nimport { type BaseApplication, SquareCloudAPIError } from \"@/structures\";\nimport { Backup } from \"@/structures/backup\";\n\nexport class BackupsModule {\n\tconstructor(public readonly application: BaseApplication) {}\n\n\t/**\n\t * Gets the list of generated backups (snapshots) for this application\n\t */\n\tasync list(): Promise<Backup[]> {\n\t\tconst data = await this.application.client.api.request(\n\t\t\tRoutes.apps.snapshots(this.application.id),\n\t\t);\n\n\t\tconst backups = data.response.map(\n\t\t\t(backup) => new Backup(this.application, backup),\n\t\t);\n\n\t\tthis.application.client.emit(\n\t\t\t\"backupsUpdate\",\n\t\t\tthis.application,\n\t\t\tthis.application.cache.backups,\n\t\t\tbackups,\n\t\t);\n\t\tthis.application.cache.set(\"backups\", backups);\n\n\t\treturn backups;\n\t}\n\n\t/**\n\t * Generates a new backup\n\t * @returns The generated backup URL and key\n\t */\n\tasync create(): Promise<RESTPostAPIApplicationBackupResult> {\n\t\tconst data = await this.application.client.api.request(\n\t\t\tRoutes.apps.generateSnapshot(this.application.id),\n\t\t\t{ method: \"POST\" },\n\t\t);\n\n\t\treturn data.response;\n\t}\n\n\t/**\n\t * Generates a new backup and downloads it\n\t * @returns The downloaded backup bufer\n\t */\n\tasync download(): Promise<Buffer> {\n\t\tconst backup = await this.create();\n\n\t\tconst res = await fetch(backup.url)\n\t\t\t.then((res) => res.arrayBuffer())\n\t\t\t.catch(() => undefined);\n\n\t\tif (!res) {\n\t\t\tthrow new SquareCloudAPIError(\"BACKUP_DOWNLOAD_FAILED\");\n\t\t}\n\n\t\treturn Buffer.from(res);\n\t}\n}\n","import type { APIDeployment, DeploymentState } from \"@squarecloud/api-types/v2\";\n\nimport type { BaseApplication } from \"./application/base\";\n\n/**\n * Represents an application deployment\n */\nexport class Deployment {\n\t/** The ID of the deploy. */\n\tpublic readonly id: `git-${string}`;\n\n\t/** The current state of the deploy. */\n\tpublic state: DeploymentState;\n\n\t/** The date the deploy was created. */\n\tpublic createdAt: Date;\n\n\t/** The date the deploy was created in millisseconds. */\n\tpublic createdTimestamp: number;\n\n\t/**\n\t * Represents an application deployment\n\t *\n\t * @constructor\n\t * @param application - The application from which you fetched the deployment\n\t * @param data - The data from this deployment\n\t */\n\tconstructor(\n\t\tpublic readonly application: BaseApplication,\n\t\tdata: APIDeployment,\n\t) {\n\t\tconst { id, state, date } = data;\n\n\t\tthis.id = id;\n\t\tthis.state = state;\n\t\tthis.createdAt = new Date(date);\n\t\tthis.createdTimestamp = this.createdAt.getTime();\n\t}\n}\n","import { assertString } from \"@/assertions/literal\";\nimport { Routes } from \"@/lib/routes\";\nimport type { BaseApplication } from \"@/structures\";\nimport { Deployment } from \"@/structures/deploy\";\n\nexport class DeploysModule {\n\tconstructor(public readonly application: BaseApplication) {}\n\n\t/**\n\t * Integrates Square Cloud with GitHub webhooks\n\t *\n\t * @param accessToken - The access token for your GitHub repository. You can find this in your [GitHub Tokens Classic](https://github.com/settings/tokens/new)\n\t */\n\tasync integrateGithubWebhook(accessToken: string) {\n\t\tassertString(accessToken);\n\n\t\tconst data = await this.application.client.api.request(\n\t\t\tRoutes.apps.deployments.webhook(this.application.id),\n\t\t\t{ method: \"POST\", body: { access_token: accessToken } },\n\t\t);\n\n\t\treturn data.response.webhook;\n\t}\n\n\t/**\n\t * Gets the last 10 deployments of an application from the last 24 hours\n\t */\n\tasync list() {\n\t\tconst data = await this.application.client.api.request(\n\t\t\tRoutes.apps.deployments.list(this.application.id),\n\t\t);\n\n\t\treturn data.response.map(\n\t\t\t(deployment) => new Deployment(this.application, deployment),\n\t\t);\n\t}\n\n\t/**\n\t * Gets the current webhook URL\n\t */\n\tasync webhookURL() {\n\t\tconst data = await this.application.client.api.request(\n\t\t\tRoutes.apps.deployments.current(this.application.id),\n\t\t);\n\n\t\treturn data.response.webhook;\n\t}\n}\n","import { join } from \"path\";\nimport { readFile } from \"fs/promises\";\n\nimport { assertPathLike, assertString } from \"@/assertions/literal\";\nimport { Routes } from \"@/lib/routes\";\nimport type { BaseApplication } from \"@/structures\";\n\nexport class FilesModule {\n\tconstructor(public readonly application: BaseApplication) {}\n\n\t/**\n\t * Lists the files inside a directory\n\t *\n\t * @param path - The absolute directory path\n\t */\n\tasync list(path = \"/\") {\n\t\tassertString(path, \"LIST_FILES_PATH\");\n\n\t\tconst { response } = await this.application.client.api.request(\n\t\t\tRoutes.apps.files.list(this.application.id),\n\t\t\t{ query: { path } },\n\t\t);\n\n\t\treturn response;\n\t}\n\n\t/**\n\t * Reads the specified file content\n\t *\n\t * @param path - The absolute file path\n\t */\n\tasync read(path: string) {\n\t\tassertString(path, \"READ_FILE_PATH\");\n\n\t\tconst { response } = await this.application.client.api.request(\n\t\t\tRoutes.apps.files.read(this.application.id),\n\t\t\t{ query: { path } },\n\t\t);\n\n\t\tif (!response) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn Buffer.from(response.data);\n\t}\n\n\t/**\n\t * Creates a new file\n\t *\n\t * @param file - The file content\n\t * @param fileName - The file name with extension\n\t * @param path - The absolute file path\n\t */\n\tasync create(file: string | Buffer, fileName: string, path = \"/\") {\n\t\tassertPathLike(file, \"CREATE_FILE\");\n\t\tassertString(fileName, \"CREATE_FILE_NAME\");\n\t\tassertString(path, \"CREATE_FILE_PATH\");\n\n\t\tif (typeof file === \"string\") {\n\t\t\tfile = await readFile(file);\n\t\t}\n\t\tpath = join(path, fileName).replaceAll(\"\\\\\", \"/\");\n\n\t\tconst { status } = await this.application.client.api.request(\n\t\t\tRoutes.apps.files.upsert(this.application.id),\n\t\t\t{\n\t\t\t\tmethod: \"PUT\",\n\t\t\t\tbody: { content: file.toString(\"utf8\"), path },\n\t\t\t},\n\t\t);\n\n\t\treturn status === \"success\";\n\t}\n\n\t/**\n\t * Edits an existing file (same as create)\n\t *\n\t * @param file - The file content\n\t * @param path - The absolute file path\n\t */\n\tasync edit(file: string | Buffer, path = \"/\") {\n\t\tassertPathLike(file, \"EDIT_FILE\");\n\t\tassertString(path, \"EDIT_FILE_PATH\");\n\n\t\treturn this.create(file, \"\", path);\n\t}\n\n\t/**\n\t * Moves or renames a file\n\t *\n\t * @param path - The current absolute file path\n\t * @param newPath - The new absolute file path\n\t */\n\tasync move(path: string, newPath: string) {\n\t\tassertString(path, \"MOVE_FILE_PATH\");\n\t\tassertString(newPath, \"MOVE_FILE_NEW_PATH\");\n\n\t\tconst { status } = await this.application.client.api.request(\n\t\t\tRoutes.apps.files.move(this.application.id),\n\t\t\t{ method: \"PATCH\", body: { path, to: newPath } },\n\t\t);\n\n\t\treturn status === \"success\";\n\t}\n\n\t/**\n\t * Deletes the specified file or directory\n\t *\n\t * @param path - The absolute file or directory path\n\t */\n\tasync delete(path: string) {\n\t\tassertString(path, \"DELETE_FILE_PATH\");\n\n\t\tconst { status } = await this.application.client.api.request(\n\t\t\tRoutes.apps.files.delete(this.application.id),\n\t\t\t{ method: \"DELETE\", body: { path } },\n\t\t);\n\n\t\treturn status === \"success\";\n\t}\n}\n","export class SquareCloudAPIError extends TypeError {\n\tconstructor(\n\t\tcode: string,\n\t\tmessage?: string,\n\t\toptions?: { stack?: string; cause?: unknown },\n\t) {\n\t\tsuper(code);\n\n\t\tthis.name = \"SquareCloudAPIError\";\n\n\t\tthis.message =\n\t\t\t(code\n\t\t\t\t?.replaceAll(\"_\", \" \")\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/(^|\\s)\\S/g, (L) => L.toUpperCase()) || \"UNKNOWN_CODE\") +\n\t\t\t(message ? `: ${message}` : \"\");\n\n\t\tif (options?.stack) {\n\t\t\tthis.stack = options.stack;\n\t\t}\n\n\t\tif (options?.cause) {\n\t\t\tthis.cause = options.cause;\n\t\t}\n\t}\n}\n","import type {\n\tAPIApplicationStatus,\n\tAPIApplicationStatusAll,\n\tApplicationStatus as ApplicationStatusType,\n} from \"@squarecloud/api-types/v2\";\n\nimport { Routes } from \"@/lib/routes\";\nimport type { ApplicationStatusUsage } from \"@/types/application\";\nimport type { SquareCloudAPI } from \"..\";\n\n/**\n * Represents an application status fetched from status all endpoint\n */\nexport class SimpleApplicationStatus<R extends boolean = boolean> {\n\t/** The application's ID this status came from */\n\tpublic readonly applicationId: string;\n\t/** Usage statuses for this application */\n\tpublic usage: R extends true\n\t\t? Pick<ApplicationStatusUsage, \"cpu\" | \"ram\">\n\t\t: undefined;\n\t/** Whether the application is running or not */\n\tpublic running: R;\n\n\t/**\n\t * Represents an application status fetched from status all endpoint\n\t *\n\t * @constructor\n\t * @param client - The client for this status\n\t * @param data - The data from this status\n\t */\n\tconstructor(\n\t\tpublic readonly client: SquareCloudAPI,\n\t\tdata: APIApplicationStatusAll,\n\t) {\n\t\tconst { id, running } = data;\n\n\t\tthis.applicationId = id;\n\t\tthis.running = running as R;\n\n\t\tif (running) {\n\t\t\tconst { cpu, ram } = data;\n\n\t\t\tthis.usage = { cpu, ram } as R extends true\n\t\t\t\t? Pick<ApplicationStatusUsage, \"cpu\" | \"ram\">\n\t\t\t\t: undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the full application status\n\t */\n\tasync fetch() {\n\t\tconst data = await this.client.api.request(\n\t\t\tRoutes.apps.status(this.applicationId),\n\t\t);\n\n\t\treturn new ApplicationStatus(\n\t\t\tthis.client,\n\t\t\tdata.response,\n\t\t\tthis.applicationId,\n\t\t);\n\t}\n}\n\n/**\n * Represents an application status\n */\nexport class ApplicationStatus {\n\t/** The application's ID this status came from */\n\tpublic readonly applicationId: string;\n\t/** Usage statuses for this application */\n\tpublic usage: ApplicationStatusUsage;\n\t/** Whether the application is running or not */\n\tpublic running: boolean;\n\t/**\n\t * The status of the application\n\t *\n\t * - 'exited' (stopped)\n\t * - 'created' (being created)\n\t * - 'running'\n\t * - 'starting'\n\t * - 'restarting'\n\t * - 'deleting'\n\t */\n\tpublic status: ApplicationStatusType;\n\t/** For how long the app is running in millisseconds */\n\tpublic uptimeTimestamp?: number;\n\t/** For how long the app is running */\n\tpublic uptime?: Date;\n\n\t/**\n\t * Represents an application status\n\t *\n\t * @constructor\n\t * @param client - The client for this status\n\t * @param data - The data from this status\n\t * @param applicationId - The application ID this status came from\n\t */\n\tconstructor(\n\t\tpublic readonly client: SquareCloudAPI,\n\t\tdata: APIApplicationStatus,\n\t\tapplicationId: string,\n\t) {\n\t\tconst { cpu, ram, network, storage, running, status, uptime } = data;\n\n\t\tthis.applicationId = applicationId;\n\t\tthis.usage = { cpu, ram, network, storage };\n\t\tthis.running = running;\n\t\tthis.status = status;\n\t\tthis.uptime = uptime ? new Date(uptime) : undefined;\n\t\tthis.uptimeTimestamp = uptime ?? undefined;\n\t}\n}\n","import { SquareCloudAPIError } from \"../structures\";\n\nexport interface AssertionProps {\n\tvalidate: (value: unknown) => boolean;\n\texpect: string;\n\tvalue: unknown;\n\tname?: string;\n}\n\nexport function assert({ validate, value, expect, name }: AssertionProps) {\n\tif (!validate(value)) {\n\t\tconst code = name ? `INVALID_${name}` : \"VALIDATION_ERROR\";\n\t\tconst message = `Expected ${expect}, got ${typeof value}`;\n\n\t\tthrow new SquareCloudAPIError(code, message);\n\t}\n}\n\nexport function makeAssertion(\n\texpect: string,\n\tvalidate: (value: unknown) => boolean,\n) {\n\treturn (value: unknown, name?: string) => {\n\t\tassert({ validate, value, expect, name });\n\t};\n}\n","import { makeAssertion } from \"./common\";\n\nexport const assertString = makeAssertion(\n\t\"string\",\n\t(value) => typeof value === \"string\",\n);\n\nexport const assertBoolean = makeAssertion(\n\t\"boolean\",\n\t(value) => typeof value === \"boolean\",\n);\n\nexport const assertPathLike = makeAssertion(\n\t\"string or Buffer\",\n\t(value) => typeof value === \"string\" || value instanceof Buffer,\n);\n"],"mappings":"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","names":["import_promises","res","res"]}