@mittwald/api-models 0.1.0-alpha.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/config/config.ts","../src/project/Project/behaviors/api.ts","../src/server/Server/behaviors/api.ts","../src/customer/Customer/behaviors/api.ts","../src/domain/Ingress/behaviors/api.ts","../src/app/AppInstallation/behaviors/api.ts","../src/config/behaviors/api.ts","../src/lib/deepFreeze.ts","../src/base/DataModel.ts","../src/errors/ObjectNotFoundError.ts","../src/base/assertObjectFound.ts","../src/base/ReferenceModel.ts","../src/lib/isUuid.ts","../src/server/Server/Server.ts","../src/customer/Customer/Customer.ts","../src/app/AppInstallation/AppInstallation.ts","../src/domain/IngressTarget/IngressTarget.ts","../src/domain/IngressPath/IngressPath.ts","../src/domain/Ingress/Ingress.ts","../src/project/Project/Project.ts"],"sourcesContent":["import { ProjectBehaviors } from \"../project/Project/behaviors/index.js\";\nimport { ServerBehaviors } from \"../server/Server/behaviors/index.js\";\nimport { CustomerBehaviors } from \"../customer/Customer/behaviors/index.js\";\nimport { IngressBehaviors } from \"../domain/Ingress/behaviors/index.js\";\nimport { AppInstallationBehaviors } from \"../app/AppInstallation/behaviors/index.js\";\n\ninterface Config {\n behaviors: {\n project: ProjectBehaviors;\n server: ServerBehaviors;\n customer: CustomerBehaviors;\n ingress: IngressBehaviors;\n appInstallation: AppInstallationBehaviors;\n };\n}\n\nexport const config: Config = {\n behaviors: {\n project: undefined as unknown as ProjectBehaviors,\n server: undefined as unknown as ServerBehaviors,\n customer: undefined as unknown as CustomerBehaviors,\n ingress: undefined as unknown as IngressBehaviors,\n appInstallation: undefined as unknown as AppInstallationBehaviors,\n },\n};\n","import { ProjectBehaviors } from \"./types.js\";\nimport { assertStatus, MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { assertOneOfStatus } from \"@mittwald/api-client-commons\";\n\nexport const apiProjectBehaviors = (\n client: MittwaldAPIV2Client,\n): ProjectBehaviors => ({\n find: async (id) => {\n const response = await client.project.getProject({\n projectId: id,\n });\n\n if (response.status === 200) {\n return response.data;\n }\n assertOneOfStatus(response, [403]);\n },\n\n list: async (query) => {\n const response = await client.project.listProjects({\n queryParameters: query,\n });\n assertStatus(response, 200);\n return response.data;\n },\n\n create: async (serverId: string, description: string) => {\n const response = await client.project.createProject({\n serverId,\n data: {\n description,\n },\n });\n assertStatus(response, 201);\n return response.data;\n },\n\n leave: async (id: string) => {\n const response = await client.project.leaveProject({\n projectId: id,\n });\n assertStatus(response, 204);\n },\n\n delete: async (id: string) => {\n const response = await client.project.deleteProject({\n projectId: id,\n });\n assertStatus(response, 204);\n },\n\n updateDescription: async (id: string, description: string) => {\n const response = await client.project.updateProjectDescription({\n projectId: id,\n data: {\n description,\n },\n });\n assertStatus(response, 200);\n },\n});\n","import { assertStatus, MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { assertOneOfStatus } from \"@mittwald/api-client-commons\";\nimport { ServerBehaviors } from \"./types.js\";\n\nexport const apiServerBehaviors = (\n client: MittwaldAPIV2Client,\n): ServerBehaviors => ({\n find: async (id) => {\n const response = await client.project.getServer({\n serverId: id,\n });\n\n if (response.status === 200) {\n return response.data;\n }\n assertOneOfStatus(response, [403, 404]);\n },\n\n list: async (query) => {\n const response = await client.project.listServers({\n queryParameters: query,\n });\n assertStatus(response, 200);\n return response.data;\n },\n});\n","import { assertStatus, MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { assertOneOfStatus } from \"@mittwald/api-client-commons\";\nimport { CustomerBehaviors } from \"./types.js\";\n\nexport const apiCustomerBehaviors = (\n client: MittwaldAPIV2Client,\n): CustomerBehaviors => ({\n find: async (id) => {\n const response = await client.customer.getCustomer({\n customerId: id,\n });\n\n if (response.status === 200) {\n return response.data;\n }\n assertOneOfStatus(response, [403]);\n },\n\n list: async (query) => {\n const response = await client.customer.listCustomers({\n queryParameters: query,\n });\n assertStatus(response, 200);\n return response.data;\n },\n});\n","import { assertStatus, MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { assertOneOfStatus } from \"@mittwald/api-client-commons\";\nimport { IngressBehaviors } from \"./types.js\";\n\nexport const apiIngressBehaviors = (\n client: MittwaldAPIV2Client,\n): IngressBehaviors => ({\n find: async (id) => {\n const response = await client.domain.ingressGetSpecific({\n ingressId: id,\n });\n\n if (response.status === 200) {\n return response.data;\n }\n assertOneOfStatus(response, [403]);\n },\n\n list: async (query = {}) => {\n const { projectId } = query;\n\n if (projectId) {\n const response = await client.domain.ingressListForProject({\n projectId,\n });\n assertStatus(response, 200);\n return response.data;\n } else {\n const response = await client.domain.ingressListAccessible();\n assertStatus(response, 200);\n return response.data;\n }\n },\n});\n","import { assertStatus, MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { assertOneOfStatus } from \"@mittwald/api-client-commons\";\nimport { AppInstallationBehaviors } from \"./types.js\";\n\nexport const apiAppInstallationBehaviors = (\n client: MittwaldAPIV2Client,\n): AppInstallationBehaviors => ({\n find: async (id) => {\n const response = await client.appInstallation.getAppInstallation({\n appInstallationId: id,\n });\n\n if (response.status === 200) {\n return response.data;\n }\n assertOneOfStatus(response, [403]);\n },\n\n list: async (query) => {\n const response = await client.appInstallation.listAppInstallations({\n queryParameters: query,\n });\n assertStatus(response, 200);\n return response.data;\n },\n});\n","import { MittwaldAPIV2Client } from \"@mittwald/api-client\";\nimport { config } from \"../config.js\";\nimport { apiProjectBehaviors } from \"../../project/Project/behaviors/index.js\";\nimport { apiServerBehaviors } from \"../../server/Server/behaviors/index.js\";\nimport { apiCustomerBehaviors } from \"../../customer/Customer/behaviors/index.js\";\nimport { apiIngressBehaviors } from \"../../domain/Ingress/behaviors/index.js\";\nimport { apiAppInstallationBehaviors } from \"../../app/AppInstallation/behaviors/index.js\";\n\nexport const setupApiBehaviors = (client: MittwaldAPIV2Client): void => {\n config.behaviors.project = apiProjectBehaviors(client);\n config.behaviors.server = apiServerBehaviors(client);\n config.behaviors.customer = apiCustomerBehaviors(client);\n config.behaviors.ingress = apiIngressBehaviors(client);\n config.behaviors.appInstallation = apiAppInstallationBehaviors(client);\n};\n","import deepFreezeLib from \"another-deep-freeze\";\nimport type { ReadonlyDeep } from \"type-fest\";\nexport type { ReadonlyDeep } from \"type-fest\";\n\ntype DeepFreeze = <T>(subject: T) => ReadonlyDeep<T>;\n\nconst deepFreeze = deepFreezeLib.default as DeepFreeze;\n\nexport default deepFreeze;\n","import { ReadonlyDeep } from \"type-fest\";\nimport deepFreeze from \"../lib/deepFreeze.js\";\n\nexport class DataModel<T> {\n public readonly data: ReadonlyDeep<T>;\n\n public constructor(data: T) {\n this.data = deepFreeze(data);\n }\n}\n","export default class ObjectNotFoundError extends Error {\n public constructor(type: string, refName: string) {\n super(`${type}@${refName} not found`);\n this.name = \"ObjectNotFoundError\";\n Object.setPrototypeOf(this, ObjectNotFoundError.prototype);\n }\n}\n","import ObjectNotFoundError from \"../errors/ObjectNotFoundError.js\";\nimport { Constructor } from \"type-fest\";\nimport { ReferenceModel } from \"./ReferenceModel.js\";\n\nexport default function assertObjectFound<T>(\n obj: T | undefined,\n theClass: Constructor<unknown>,\n refIdOrObject: string | ReferenceModel,\n): asserts obj is T {\n if (obj === undefined) {\n const refName =\n typeof refIdOrObject === \"string\"\n ? refIdOrObject\n : refIdOrObject.toString();\n\n throw new ObjectNotFoundError(theClass.name, refName);\n }\n}\n","export abstract class ReferenceModel {\n public readonly id: string;\n\n public constructor(id: string) {\n this.id = id;\n }\n\n public describe(): string {\n return `${this.constructor.name}@${this.id}`;\n }\n}\n","const uuidRegex = RegExp(\n \"^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$\",\n);\n\nexport const isUuid = (testString: string): boolean =>\n uuidRegex.test(testString);\n","import { ReferenceModel } from \"../../base/ReferenceModel.js\";\nimport { ServerListItemData, ServerData, ServerListQuery } from \"./types.js\";\nimport { config } from \"../../config/config.js\";\nimport { classes } from \"polytype\";\nimport { DataModel } from \"../../base/DataModel.js\";\nimport assertObjectFound from \"../../base/assertObjectFound.js\";\nimport { Project } from \"../../project/index.js\";\nimport { FirstParameter, ParamsExceptFirst } from \"../../lib/types.js\";\nimport { isUuid } from \"../../lib/isUuid.js\";\nimport {\n AsyncResourceVariant,\n withAsyncResourceVariant,\n} from \"../../lib/withAsyncResourceVariant.js\";\n\nexport class Server extends ReferenceModel {\n public static find = withAsyncResourceVariant(\n async (id: string): Promise<Server | undefined> => {\n const serverData = await config.behaviors.server.find(\n await Server.getUuid(id),\n );\n\n if (serverData !== undefined) {\n return new ServerDetailed([serverData]);\n }\n },\n );\n\n public static get = withAsyncResourceVariant(\n async (id: string): Promise<Server> => {\n const server = await ServerDetailed.find(id);\n assertObjectFound(server, this, id);\n return server;\n },\n );\n\n public static list = withAsyncResourceVariant(\n async (query: ServerListQuery = {}): Promise<ServerListItem[]> => {\n const projectListData = await config.behaviors.server.list(query);\n return projectListData.map((d) => new ServerListItem([d]));\n },\n );\n\n public static ofId(id: string): Server {\n return new Server(id);\n }\n\n private async getUuid(): Promise<string> {\n return Server.getUuid(this.id);\n }\n\n private static async getUuid(shortIdOrUuid: string): Promise<string> {\n if (isUuid(shortIdOrUuid)) {\n return shortIdOrUuid;\n }\n const allServers = await ServerListItem.list();\n\n const uuid = allServers.find((p) => p.data.shortId === shortIdOrUuid)?.id;\n assertObjectFound(uuid, Server, shortIdOrUuid);\n return uuid;\n }\n\n public async createProject(\n ...parameters: ParamsExceptFirst<typeof Project.create>\n ): ReturnType<typeof Project.create> {\n return Project.create(await this.getUuid(), ...parameters);\n }\n\n public listProjects = withAsyncResourceVariant(\n async (\n query: Omit<FirstParameter<typeof Project.list>, \"serverId\"> = {},\n ): ReturnType<typeof Project.list> => {\n return Project.list({\n ...query,\n serverId: await this.getUuid(),\n });\n },\n );\n\n public getDetailed = withAsyncResourceVariant(() =>\n ServerDetailed.get(this.id),\n ) as AsyncResourceVariant<ServerDetailed, []>;\n}\n\n// Common class for future extension\nclass ServerCommon extends classes(\n DataModel<ServerListItemData | ServerData>,\n Server,\n) {\n public constructor(data: ServerListItemData | ServerData) {\n super([data], [data.id]);\n }\n}\n\nexport class ServerListItem extends classes<\n [typeof ServerCommon, typeof DataModel<ServerListItemData>]\n>(ServerCommon, DataModel<ServerListItemData>) {}\n\nexport class ServerDetailed extends classes<\n [typeof ServerCommon, typeof DataModel<ServerData>]\n>(ServerCommon, DataModel<ServerData>) {}\n","import { config } from \"../../config/config.js\";\nimport { classes } from \"polytype\";\nimport { DataModel } from \"../../base/DataModel.js\";\nimport assertObjectFound from \"../../base/assertObjectFound.js\";\nimport { ReferenceModel } from \"../../base/ReferenceModel.js\";\nimport { isUuid } from \"../../lib/isUuid.js\";\nimport type { AsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport { withAsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport {\n CustomerListItemData,\n CustomerData,\n CustomerListQuery,\n} from \"./types.js\";\n\nexport class Customer extends ReferenceModel {\n public static ofId(id: string): Customer {\n return new Customer(id);\n }\n\n public static find = withAsyncResourceVariant(\n async (id: string): Promise<CustomerDetailed | undefined> => {\n const data = await config.behaviors.customer.find(\n await Customer.getUuid(id),\n );\n if (data !== undefined) {\n return new CustomerDetailed(data);\n }\n },\n );\n\n public static list = withAsyncResourceVariant(\n async (\n query: CustomerListQuery = {},\n ): Promise<Readonly<Array<CustomerListItem>>> => {\n const data = await config.behaviors.customer.list(query);\n return Object.freeze(data.map((d) => new CustomerListItem(d)));\n },\n );\n\n public static get = withAsyncResourceVariant(\n async (id: string): Promise<CustomerDetailed> => {\n const customer = await this.find(id);\n assertObjectFound(customer, this, id);\n return customer;\n },\n );\n\n private static async getUuid(numberOrUuid: string): Promise<string> {\n if (isUuid(numberOrUuid)) {\n return numberOrUuid;\n }\n const allCustomers = await CustomerListItem.list();\n\n const uuid = allCustomers.find(\n (p) => p.data.customerNumber === numberOrUuid,\n )?.id;\n assertObjectFound(uuid, Customer, numberOrUuid);\n return uuid;\n }\n\n public getDetailed = withAsyncResourceVariant(() =>\n Customer.get(this.id),\n ) as AsyncResourceVariant<CustomerDetailed, []>;\n}\n\n// Common class for future extension\nclass CustomerCommon extends classes(\n DataModel<CustomerListItemData | CustomerData>,\n Customer,\n) {\n public constructor(data: CustomerListItemData | CustomerData) {\n super([data], [data.customerId]);\n }\n}\n\nexport class CustomerDetailed extends classes(\n CustomerCommon,\n DataModel<CustomerData>,\n) {\n public constructor(data: CustomerData) {\n super([data], [data]);\n }\n}\n\nexport class CustomerListItem extends classes(\n CustomerCommon,\n DataModel<CustomerListItemData>,\n) {\n public constructor(data: CustomerListItemData) {\n super([data], [data]);\n }\n}\n","import { config } from \"../../config/config.js\";\nimport { classes } from \"polytype\";\nimport { DataModel } from \"../../base/DataModel.js\";\nimport assertObjectFound from \"../../base/assertObjectFound.js\";\nimport { ReferenceModel } from \"../../base/ReferenceModel.js\";\nimport type { AsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport { withAsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport {\n AppInstallationListItemData,\n AppInstallationData,\n AppInstallationListQuery,\n} from \"./types.js\";\n\nexport class AppInstallation extends ReferenceModel {\n public static find = withAsyncResourceVariant(\n async (id: string): Promise<AppInstallationDetailed | undefined> => {\n const data = await config.behaviors.appInstallation.find(id);\n if (data !== undefined) {\n return new AppInstallationDetailed(data);\n }\n },\n );\n\n public static get = withAsyncResourceVariant(\n async (id: string): Promise<AppInstallationDetailed> => {\n const appInstallation = await this.find(id);\n assertObjectFound(appInstallation, this, id);\n return appInstallation;\n },\n );\n\n public static ofId(id: string): AppInstallation {\n return new AppInstallation(id);\n }\n\n public static list = withAsyncResourceVariant(\n async (\n query: AppInstallationListQuery = {},\n ): Promise<Array<AppInstallationListItem>> => {\n const data = await config.behaviors.appInstallation.list(query);\n return data.map((d) => new AppInstallationListItem(d));\n },\n );\n\n public getDetailed = withAsyncResourceVariant(() =>\n AppInstallation.get(this.id),\n ) as AsyncResourceVariant<AppInstallationDetailed, []>;\n}\n\n// Common class for future extension\nclass AppInstallationCommon extends classes(\n DataModel<AppInstallationListItemData | AppInstallationData>,\n AppInstallation,\n) {\n public constructor(data: AppInstallationListItemData | AppInstallationData) {\n super([data], [data.id]);\n }\n}\n\nexport class AppInstallationDetailed extends classes(\n AppInstallationCommon,\n DataModel<AppInstallationData>,\n) {\n public constructor(data: AppInstallationData) {\n super([data], [data]);\n }\n}\n\nexport class AppInstallationListItem extends classes(\n AppInstallationCommon,\n DataModel<AppInstallationListItemData>,\n) {\n public constructor(data: AppInstallationListItemData) {\n super([data], [data]);\n }\n}\n","import { DataModel } from \"../../base/DataModel.js\";\nimport {\n IngressUndefinedTargetData,\n IngressDirectoryTargetData,\n IngressAppInstallationTargetData,\n IngressRedirectTargetData,\n IngressTargetData,\n} from \"./types.js\";\nimport { IngressPath } from \"../IngressPath/IngressPath.js\";\nimport { AppInstallation } from \"../../app/AppInstallation/index.js\";\n\nabstract class IngressTargetBase<\n T extends IngressTargetData,\n> extends DataModel<T> {\n public readonly path: IngressPath;\n\n public constructor(path: IngressPath, data: T) {\n super(data);\n this.path = path;\n }\n}\n\nexport class IngressRedirectTarget extends IngressTargetBase<IngressRedirectTargetData> {\n public readonly type = \"redirect\";\n public readonly url: URL;\n\n public constructor(path: IngressPath, data: IngressRedirectTargetData) {\n super(path, data);\n this.url = new URL(data.url);\n }\n}\n\nexport class IngressDirectoryTarget extends IngressTargetBase<IngressDirectoryTargetData> {\n public readonly type = \"directory\";\n public readonly directory: string;\n\n public constructor(path: IngressPath, data: IngressDirectoryTargetData) {\n super(path, data);\n this.directory = data.directory;\n }\n}\n\nexport class IngressAppInstallationTarget extends IngressTargetBase<IngressAppInstallationTargetData> {\n public readonly type = \"appInstallation\";\n public readonly appInstallation: AppInstallation;\n\n public constructor(\n path: IngressPath,\n data: IngressAppInstallationTargetData,\n ) {\n super(path, data);\n this.appInstallation = AppInstallation.ofId(data.installationId);\n }\n}\n\nexport class IngressUndefinedTarget extends IngressTargetBase<IngressUndefinedTargetData> {\n public readonly type = \"undefined\";\n}\n\nexport type IngressTarget =\n | IngressRedirectTarget\n | IngressDirectoryTarget\n | IngressAppInstallationTarget\n | IngressUndefinedTarget;\n\nexport const ingressTargetFactory = (\n path: IngressPath,\n data: IngressTargetData,\n): IngressTarget => {\n if (\"directory\" in data) {\n return new IngressDirectoryTarget(path, data);\n }\n\n if (\"url\" in data) {\n return new IngressRedirectTarget(path, data);\n }\n\n if (\"installationId\" in data) {\n return new IngressAppInstallationTarget(path, data);\n }\n\n if (\"useDefaultPage\" in data) {\n return new IngressUndefinedTarget(path, data);\n }\n\n throw new Error(\"Ingress target type is not supported.\");\n};\n","import { DataModel } from \"../../base/DataModel.js\";\nimport { IngressPathData } from \"./types.js\";\nimport { IngressCommon, Ingress } from \"../Ingress/index.js\";\nimport {\n IngressTarget,\n ingressTargetFactory,\n} from \"../IngressTarget/IngressTarget.js\";\n\nexport class IngressPath extends DataModel<IngressPathData> {\n public readonly ingress: Ingress;\n public readonly path: string;\n public readonly url: URL;\n public readonly target: IngressTarget;\n\n public constructor(ingress: IngressCommon, data: IngressPathData) {\n super(data);\n this.ingress = ingress;\n this.path = data.path;\n this.url = new URL(data.path, ingress.baseUrl);\n this.target = ingressTargetFactory(this, data.target);\n }\n}\n","import { config } from \"../../config/config.js\";\nimport { classes } from \"polytype\";\nimport { DataModel } from \"../../base/DataModel.js\";\nimport assertObjectFound from \"../../base/assertObjectFound.js\";\nimport { ReferenceModel } from \"../../base/ReferenceModel.js\";\nimport { isUuid } from \"../../lib/isUuid.js\";\nimport type { AsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport { withAsyncResourceVariant } from \"../../lib/withAsyncResourceVariant.js\";\nimport { IngressListItemData, IngressData, IngressListQuery } from \"./types.js\";\nimport { IngressPath } from \"../IngressPath/IngressPath.js\";\n\nexport class Ingress extends ReferenceModel {\n public static ofId(id: string): Ingress {\n return new Ingress(id);\n }\n\n public static ofHostname(hostname: string): Ingress {\n return Ingress.ofId(hostname);\n }\n\n public static list = withAsyncResourceVariant(\n async (query: IngressListQuery = {}): Promise<Array<IngressListItem>> => {\n const data = await config.behaviors.ingress.list(query);\n return data.map((d) => new IngressListItem(d));\n },\n );\n\n public static find = withAsyncResourceVariant(\n async (id: string): Promise<IngressDetailed | undefined> => {\n const data = await config.behaviors.ingress.find(\n await Ingress.getUuid(id),\n );\n if (data !== undefined) {\n return new IngressDetailed(data);\n }\n },\n );\n\n public static get = withAsyncResourceVariant(\n async (id: string): Promise<IngressDetailed> => {\n const ingress = await this.find(id);\n assertObjectFound(ingress, this, id);\n return ingress;\n },\n );\n\n private static async getUuid(hostnameOrUuid: string): Promise<string> {\n if (isUuid(hostnameOrUuid)) {\n return hostnameOrUuid;\n }\n const allIngress = await IngressListItem.list();\n\n const uuid = allIngress.find(\n (p) => p.data.isEnabled && p.data.hostname === hostnameOrUuid,\n )?.id;\n assertObjectFound(uuid, Ingress, hostnameOrUuid);\n return uuid;\n }\n\n public getDetailed = withAsyncResourceVariant(() =>\n Ingress.get(this.id),\n ) as AsyncResourceVariant<IngressDetailed, []>;\n}\n\nexport class IngressCommon extends classes(\n DataModel<IngressListItemData | IngressData>,\n Ingress,\n) {\n public readonly baseUrl: string;\n public readonly paths: ReadonlyArray<IngressPath>;\n public readonly defaultPath: IngressPath;\n\n public constructor(data: IngressListItemData | IngressData) {\n super([data], [data.id]);\n this.baseUrl = `https://${data.hostname}`;\n this.paths = Object.freeze(data.paths.map((p) => new IngressPath(this, p)));\n\n const defaultPath = this.paths.find((p) => p.path === \"/\");\n if (defaultPath === undefined) {\n throw new Error(`Ingress ${this.describe()} has no default path.`);\n }\n this.defaultPath = defaultPath;\n }\n}\n\nexport class IngressDetailed extends classes(\n IngressCommon,\n DataModel<IngressData>,\n) {\n public constructor(data: IngressData) {\n super([data], [data]);\n }\n}\n\nexport class IngressListItem extends classes(\n IngressCommon,\n DataModel<IngressListItemData>,\n) {\n public constructor(data: IngressListItemData) {\n super([data], [data]);\n }\n}\n","import { ProjectListItemData, ProjectData, ProjectListQuery } from \"./types.js\";\nimport { config } from \"../../config/config.js\";\nimport { classes } from \"polytype\";\nimport { DataModel } from \"../../base/DataModel.js\";\nimport assertObjectFound from \"../../base/assertObjectFound.js\";\nimport { Server } from \"../../server/index.js\";\nimport {\n type AsyncResourceVariant,\n withAsyncResourceVariant,\n} from \"../../lib/withAsyncResourceVariant.js\";\nimport { Customer } from \"../../customer/Customer/Customer.js\";\nimport { ReferenceModel } from \"../../base/ReferenceModel.js\";\nimport { isUuid } from \"../../lib/isUuid.js\";\nimport { Ingress, IngressListItem } from \"../../domain/index.js\";\n\nexport class Project extends ReferenceModel {\n public static ofId(id: string): Project {\n return new Project(id);\n }\n\n public static find = withAsyncResourceVariant(\n async (id: string): Promise<ProjectDetailed | undefined> => {\n const data = await config.behaviors.project.find(\n await Project.getUuid(id),\n );\n\n if (data !== undefined) {\n return new ProjectDetailed(data);\n }\n },\n );\n\n public static get = withAsyncResourceVariant(\n async (id: string): Promise<ProjectDetailed> => {\n const project = await this.find(id);\n assertObjectFound(project, this, id);\n return project;\n },\n );\n\n public static list = withAsyncResourceVariant(\n async (\n query: ProjectListQuery = {},\n ): Promise<Readonly<Array<ProjectListItem>>> => {\n const data = await config.behaviors.project.list(query);\n return Object.freeze(data.map((d) => new ProjectListItem(d)));\n },\n );\n\n public static async create(\n serverId: string,\n description: string,\n ): Promise<Project> {\n const { id } = await config.behaviors.project.create(serverId, description);\n return new Project(id);\n }\n\n public getDetailed = withAsyncResourceVariant(() =>\n Project.get(this.id),\n ) as AsyncResourceVariant<ProjectDetailed, []>;\n\n public listIngresses = withAsyncResourceVariant(() =>\n Ingress.list({ projectId: this.id }),\n ) as AsyncResourceVariant<IngressListItem[], []>;\n\n public getDefaultIngress = withAsyncResourceVariant(async () => {\n const ingresses = await Project.ofId(this.id).listIngresses();\n const defaultIngress = ingresses.find((i) => i.data.isDefault);\n assertObjectFound(defaultIngress, IngressListItem, this);\n return defaultIngress;\n }) as AsyncResourceVariant<IngressListItem, []>;\n\n private async getUuid(): Promise<string> {\n return Project.getUuid(this.id);\n }\n\n protected static async getUuid(shortIdOrUuid: string): Promise<string> {\n if (isUuid(shortIdOrUuid)) {\n return shortIdOrUuid;\n }\n const allProjects = await ProjectListItem.list();\n\n const uuid = allProjects.find((p) => p.data.shortId === shortIdOrUuid)?.id;\n assertObjectFound(uuid, Project, shortIdOrUuid);\n return uuid;\n }\n\n public async updateDescription(description: string): Promise<void> {\n await config.behaviors.project.updateDescription(\n await this.getUuid(),\n description,\n );\n }\n\n public async leave(): Promise<void> {\n await config.behaviors.project.leave(await this.getUuid());\n }\n\n public async delete(): Promise<void> {\n await config.behaviors.project.delete(await this.getUuid());\n }\n}\n\nclass ProjectCommon extends classes(\n DataModel<ProjectListItemData | ProjectData>,\n Project,\n) {\n public readonly server: Server | undefined;\n public readonly customer: Customer;\n\n public constructor(data: ProjectListItemData | ProjectData) {\n super([data], [data.id]);\n this.server = data.serverId ? Server.ofId(data.serverId) : undefined;\n this.customer = Customer.ofId(data.customerId);\n }\n}\n\nexport class ProjectDetailed extends classes(\n ProjectCommon,\n DataModel<ProjectData>,\n) {\n public constructor(data: ProjectData) {\n super([data], [data]);\n }\n}\n\nexport class ProjectListItem extends classes(\n ProjectCommon,\n DataModel<ProjectListItemData>,\n) {\n public constructor(data: ProjectListItemData) {\n super([data], [data]);\n }\n}\n"],"names":["__publicField"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { AsyncResource } from '@mittwald/react-use-promise';
3
+ export { AsyncResource, getAsyncResource } from '@mittwald/react-use-promise';
4
+
5
+ declare const MittwaldApiModelProvider: FC<PropsWithChildren>;
6
+
7
+ type FnParameters = unknown[];
8
+ type AsyncFn<TResult, TParams extends FnParameters> = (...args: TParams) => Promise<TResult>;
9
+ declare const withAsyncResourceVariant: <TValue, TParams extends FnParameters>(loader: AsyncFn<TValue, TParams>) => AsyncResourceVariant<TValue, TParams>;
10
+ type AsyncResourceVariant<TValue, TParams extends FnParameters> = TParams extends null ? AsyncFn<TValue, TParams> & {
11
+ asResource: () => AsyncResource<TValue>;
12
+ } : AsyncFn<TValue, TParams> & {
13
+ asResource: (...params: TParams) => AsyncResource<TValue>;
14
+ use: (...params: TParams) => TValue;
15
+ };
16
+
17
+ export { type AsyncResourceVariant, MittwaldApiModelProvider, withAsyncResourceVariant };
@@ -0,0 +1,17 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { AsyncResource } from '@mittwald/react-use-promise';
3
+ export { AsyncResource, getAsyncResource } from '@mittwald/react-use-promise';
4
+
5
+ declare const MittwaldApiModelProvider: FC<PropsWithChildren>;
6
+
7
+ type FnParameters = unknown[];
8
+ type AsyncFn<TResult, TParams extends FnParameters> = (...args: TParams) => Promise<TResult>;
9
+ declare const withAsyncResourceVariant: <TValue, TParams extends FnParameters>(loader: AsyncFn<TValue, TParams>) => AsyncResourceVariant<TValue, TParams>;
10
+ type AsyncResourceVariant<TValue, TParams extends FnParameters> = TParams extends null ? AsyncFn<TValue, TParams> & {
11
+ asResource: () => AsyncResource<TValue>;
12
+ } : AsyncFn<TValue, TParams> & {
13
+ asResource: (...params: TParams) => AsyncResource<TValue>;
14
+ use: (...params: TParams) => TValue;
15
+ };
16
+
17
+ export { type AsyncResourceVariant, MittwaldApiModelProvider, withAsyncResourceVariant };
package/dist/react.mjs ADDED
@@ -0,0 +1,17 @@
1
+ import React, { createElement } from 'react';
2
+ import { s as setModule } from './shared/api-models.54184fa2.mjs';
3
+ export { r as reactUsePromise, w as withAsyncResourceVariant } from './shared/api-models.54184fa2.mjs';
4
+
5
+ let loadingPromise = void 0;
6
+ const MittwaldApiModelProvider = (props) => {
7
+ if (loadingPromise === void 0) {
8
+ loadingPromise = import('@mittwald/react-use-promise').then((m) => {
9
+ setModule(m);
10
+ });
11
+ throw loadingPromise;
12
+ }
13
+ return createElement(React.Fragment, void 0, props.children);
14
+ };
15
+
16
+ export { MittwaldApiModelProvider, setModule };
17
+ //# sourceMappingURL=react.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.mjs","sources":["../src/react/MittwaldApiModelProvider.ts"],"sourcesContent":["import React, { createElement, FC, PropsWithChildren } from \"react\";\nimport { setModule } from \"./reactUsePromise.js\";\n\nlet loadingPromise: Promise<void> | undefined = undefined;\n\nexport const MittwaldApiModelProvider: FC<PropsWithChildren> = (props) => {\n if (loadingPromise === undefined) {\n loadingPromise = import(\"@mittwald/react-use-promise\").then((m) => {\n setModule(m);\n });\n\n throw loadingPromise;\n }\n\n return createElement(React.Fragment, undefined, props.children);\n};\n"],"names":[],"mappings":";;;;AAGA,IAAI,cAA4C,GAAA,KAAA,CAAA,CAAA;AAEnC,MAAA,wBAAA,GAAkD,CAAC,KAAU,KAAA;AACxE,EAAA,IAAI,mBAAmB,KAAW,CAAA,EAAA;AAChC,IAAA,cAAA,GAAiB,OAAO,6BAA6B,CAAE,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACjE,MAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAAA,KACZ,CAAA,CAAA;AAED,IAAM,MAAA,cAAA,CAAA;AAAA,GACR;AAEA,EAAA,OAAO,aAAc,CAAA,KAAA,CAAM,QAAU,EAAA,KAAA,CAAA,EAAW,MAAM,QAAQ,CAAA,CAAA;AAChE;;;;"}
@@ -0,0 +1,25 @@
1
+ let module = void 0;
2
+ const reactUsePromise = new Proxy(
3
+ {},
4
+ {
5
+ get: (_, prop) => {
6
+ if (module === void 0) {
7
+ throw new Error("ModelProvider not found");
8
+ }
9
+ if (prop in module) {
10
+ return module[prop];
11
+ }
12
+ }
13
+ }
14
+ );
15
+ const setModule = (theModule) => {
16
+ module = theModule;
17
+ };
18
+
19
+ const withAsyncResourceVariant = (loader) => Object.assign(loader, {
20
+ asResource: (...params) => reactUsePromise.getAsyncResource(loader, params),
21
+ use: (...params) => reactUsePromise.getAsyncResource(loader, params).use()
22
+ });
23
+
24
+ export { reactUsePromise as r, setModule as s, withAsyncResourceVariant as w };
25
+ //# sourceMappingURL=api-models.54184fa2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-models.54184fa2.mjs","sources":["../../src/react/reactUsePromise.ts","../../src/lib/withAsyncResourceVariant.ts"],"sourcesContent":["type ReactUsePromiseModule = typeof import(\"@mittwald/react-use-promise\");\n\nexport type {\n AsyncResource,\n getAsyncResource,\n} from \"@mittwald/react-use-promise\";\n\nlet module: ReactUsePromiseModule | undefined = undefined;\n\n/** @internal */\nexport const reactUsePromise = new Proxy<ReactUsePromiseModule>(\n {} as ReactUsePromiseModule,\n {\n get: (_, prop) => {\n if (module === undefined) {\n // @todo Provide better error message\n throw new Error(\"ModelProvider not found\");\n }\n\n if (prop in module) {\n return module[prop as keyof typeof module];\n }\n },\n },\n);\n\n/** @internal */\nexport const setModule = (theModule: ReactUsePromiseModule): void => {\n module = theModule;\n};\n","import { AsyncResource, reactUsePromise } from \"../react/reactUsePromise.js\";\n\ntype FnParameters = unknown[];\ntype AsyncFn<TResult, TParams extends FnParameters> = (\n ...args: TParams\n) => Promise<TResult>;\n\nexport const withAsyncResourceVariant = <TValue, TParams extends FnParameters>(\n loader: AsyncFn<TValue, TParams>,\n) =>\n Object.assign(loader, {\n asResource: (...params: TParams) =>\n reactUsePromise.getAsyncResource(loader, params),\n use: (...params: TParams) =>\n reactUsePromise.getAsyncResource(loader, params).use(),\n }) as AsyncResourceVariant<TValue, TParams>;\n\nexport type AsyncResourceVariant<\n TValue,\n TParams extends FnParameters,\n> = TParams extends null\n ? AsyncFn<TValue, TParams> & {\n asResource: () => AsyncResource<TValue>;\n }\n : AsyncFn<TValue, TParams> & {\n asResource: (...params: TParams) => AsyncResource<TValue>;\n use: (...params: TParams) => TValue;\n };\n"],"names":[],"mappings":"AAOA,IAAI,MAA4C,GAAA,KAAA,CAAA,CAAA;AAGzC,MAAM,kBAAkB,IAAI,KAAA;AAAA,EACjC,EAAC;AAAA,EACD;AAAA,IACE,GAAA,EAAK,CAAC,CAAA,EAAG,IAAS,KAAA;AAChB,MAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AAExB,QAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA,CAAA;AAAA,OAC3C;AAEA,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAA,OAAO,OAAO,IAA2B,CAAA,CAAA;AAAA,OAC3C;AAAA,KACF;AAAA,GACF;AACF,EAAA;AAGa,MAAA,SAAA,GAAY,CAAC,SAA2C,KAAA;AACnE,EAAS,MAAA,GAAA,SAAA,CAAA;AACX;;ACtBO,MAAM,wBAA2B,GAAA,CACtC,MAEA,KAAA,MAAA,CAAO,OAAO,MAAQ,EAAA;AAAA,EACpB,YAAY,CAAI,GAAA,MAAA,KACd,eAAgB,CAAA,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAAA,EACjD,GAAA,EAAK,IAAI,MACP,KAAA,eAAA,CAAgB,iBAAiB,MAAQ,EAAA,MAAM,EAAE,GAAI,EAAA;AACzD,CAAC;;;;"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@mittwald/api-models",
3
+ "version": "0.1.0-alpha.1",
4
+ "author": "Mittwald CM Service GmbH & Co. KG <opensource@mittwald.de>",
5
+ "type": "module",
6
+ "description": "Collection of domain models for coherent interaction with the API",
7
+ "keywords": [
8
+ "api",
9
+ "client",
10
+ "mittwald",
11
+ "rest",
12
+ "sdk"
13
+ ],
14
+ "homepage": "https://developer.mittwald.de",
15
+ "repository": "github:mittwald/api-client-js",
16
+ "bugs": {
17
+ "url": "https://github.com/mittwald/api-client-js/issues"
18
+ },
19
+ "license": "MIT",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.mts",
23
+ "default": "./dist/index.mjs"
24
+ },
25
+ "./react": {
26
+ "types": "./dist/react.d.mts",
27
+ "default": "./dist/react.mjs"
28
+ }
29
+ },
30
+ "types": "./dist/index.d.ts",
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "scripts": {
35
+ "build": "unbuild",
36
+ "test": "node --experimental-vm-modules $(yarn bin jest)"
37
+ },
38
+ "dependencies": {
39
+ "@mittwald/api-client-commons": "^4.2.0",
40
+ "@mittwald/react-use-promise": "^2.1.2",
41
+ "another-deep-freeze": "^1.0.0",
42
+ "polytype": "^0.17.0",
43
+ "type-fest": "^4.9.0"
44
+ },
45
+ "devDependencies": {
46
+ "@jest/globals": "^29.7.0",
47
+ "@mittwald/api-client": "*",
48
+ "@types/jest": "^29.5.11",
49
+ "@types/react": "^18.2.47",
50
+ "@typescript-eslint/eslint-plugin": "^6.18.1",
51
+ "@typescript-eslint/parser": "^6.18.1",
52
+ "eslint": "^8.56.0",
53
+ "eslint-config-prettier": "^9.1.0",
54
+ "eslint-plugin-json": "^3.1.0",
55
+ "eslint-plugin-prettier": "^5.1.3",
56
+ "jest": "^29.7.0",
57
+ "prettier": "^3.1.1",
58
+ "react": "^18.2.0",
59
+ "ts-jest": "^29.1.1",
60
+ "typescript": "^5.3.3",
61
+ "unbuild": "^2.0.0"
62
+ },
63
+ "peerDependencies": {
64
+ "@mittwald/api-client": "*",
65
+ "react": "^18.2.0"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "react": {
69
+ "optional": true
70
+ }
71
+ },
72
+ "unbuild": {
73
+ "declaration": true,
74
+ "sourcemap": true,
75
+ "externals": [
76
+ "react",
77
+ "axios"
78
+ ]
79
+ }
80
+ }