import {z} from 'zod' export type GetApiApiV2SoftwareCatalogAppsObjectIdArgs = {objectId: string}; export type GetApiApiV2SoftwareCatalogAppsObjectIdOptions = {baseUrl?: string | undefined, xApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const devicesSoftwareAppSettingAdminManagementIntent = z.enum(["INTENT_UNSPECIFIED", "INTENT_FORCE_MANAGED", "INTENT_FORCE_UNMANAGED"]); export const devicesSoftwareAppSettingAppDeliveryMethod = z.enum(["IMMEDIATE", "ON_DEMAND"]); export const devicesSoftwareAppAppleVppDeviceFamily = z.enum(["MAC", "IPAD", "IPHONE", "IPOD"]); export const devicesSoftwareAppAppleVpp = z.object({appConfiguration: z.string().optional(), assignedLicenses: z.string().optional(), availableLicenses: z.string().optional(), details: z.string().optional(), isConfigEnabled: z.boolean().optional(), supportedDeviceFamilies: z.array(devicesSoftwareAppAppleVppDeviceFamily).optional(), totalLicenses: z.string().optional()}); export const devicesSoftwareAppDesiredState = z.enum(["INSTALL", "UNINSTALL"]); export const devicesDetectionRuleCustomScript = z.object({powerShellScript: z.string().optional()}); export const devicesDetectionRuleDisplayName = z.object({expectedDisplayName: z.string().optional()}); export const devicesDetectionRuleRegistry = z.object({registryExpectedValue: z.string().optional(), registryPath: z.string().optional(), registryValueName: z.string().optional()}); export const devicesWindowsCustomDetectionRules = z.object({customScript: devicesDetectionRuleCustomScript.optional(), displayName: devicesDetectionRuleDisplayName.optional(), registry: devicesDetectionRuleRegistry.optional()}); export const devicesSoftwareAppSettingFormat = z.enum(["PKG", "APP_IN_DMG", "PKG_IN_DMG", "IPA", "APP_IN_ZIP", "PKG_IN_ZIP", "APP_IN_DMG_ZIP"]); export const devicesSoftwareAppAutoUpdateMode = z.enum(["AUTO_UPDATE_MODE_UNSPECIFIED", "AUTO_UPDATE_DEFAULT", "AUTO_UPDATE_POSTPONED", "AUTO_UPDATE_HIGH_PRIORITY"]); export const devicesSoftwareAppInstallType = z.enum(["INSTALL_TYPE_UNSPECIFIED", "PREINSTALLED", "FORCE_INSTALLED", "BLOCKED", "AVAILABLE", "REQUIRED_FOR_SETUP", "KIOSK"]); export const devicesSoftwareAppRuntimePermission = z.enum(["PERMISSION_POLICY_UNSPECIFIED", "PROMPT", "GRANT", "DENY"]); export const devicesSoftwareAppPermissionGrant = z.object({id: z.string().optional(), policy: devicesSoftwareAppRuntimePermission.optional()}); export const devicesSoftwareAppType = z.enum(["APP_TYPE_UNSPECIFIED", "PUBLIC", "PRIVATE", "WEBAPP"]); export const devicesSoftwareAppGoogleAndroid = z.object({androidFeatures: z.array(z.string()).optional(), appPricing: z.string().optional(), appVersion: z.string().optional(), author: z.string().optional(), autoUpdateMode: devicesSoftwareAppAutoUpdateMode.optional(), category: z.string().optional(), contentRating: z.string().optional(), disabled: z.boolean().optional(), displayMode: z.string().optional(), distributionChannel: z.string().optional(), fullDescription: z.string().optional(), iconUrl: z.string().optional(), installPriority: z.number().int().optional(), installType: devicesSoftwareAppInstallType.optional(), managedConfigurationTemplateId: z.string().optional(), managedProperties: z.boolean().optional(), minSdkVersion: z.string().optional(), name: z.string().optional(), permissionGrants: z.array(devicesSoftwareAppPermissionGrant).optional(), playStoreUrl: z.string().optional(), runtimePermission: devicesSoftwareAppRuntimePermission.optional(), startUrl: z.string().optional(), type: devicesSoftwareAppType.optional(), updateTime: z.string().optional(), versionCode: z.string().optional()}); export const devicesWindowsCustomInstallerConfig = z.object({successExitCodes: z.array(z.number().int()).optional()}); export const devicesMetadataPKGManagedInstallEligibilityStatus = z.enum(["MANAGED_INSTALL_ELIGIBILITY_NOT_EVALUATED", "MANAGED_INSTALL_ELIGIBLE", "MANAGED_INSTALL_INELIGIBLE", "MANAGED_INSTALL_ELIGIBILITY_UNKNOWN"]); export const devicesSoftwareAppMicrosoftStore = z.object({doNotUpdate: z.boolean().optional(), nonRemovable: z.boolean().optional(), packageFamilyName: z.string().optional()}); export const devicesSoftwareAppPackageManager = z.enum(["UNKNOWN", "CHOCOLATEY", "APPLE_VPP", "APPLE_CUSTOM", "GOOGLE_ANDROID", "WINDOWS_MDM", "MICROSOFT_STORE", "WINGET", "MAC_OS_APP_CATALOG", "WINDOWS_CUSTOM"]); export const devicesSoftwareAppSettingScope = z.enum(["SYSTEM", "USER"]); export const directoryType = z.enum(["UNKNOWN", "USER", "USER_GROUP", "SYSTEM", "SYSTEM_GROUP", "RADIUS_SERVER", "RADIUS_SERVER_GROUP", "APPLICATION", "APPLICATION_GROUP", "COMMAND", "COMMAND_GROUP", "G_SUITE", "G_SUITE_GROUP", "OFFICE_365", "OFFICE_365_GROUP", "LDAP_SERVER", "LDAP_SERVER_GROUP", "PASSWORD_MANAGER_ITEM", "PASSWORD_MANAGER_ITEM_GROUP", "POLICY", "POLICY_GROUP", "ACTIVE_DIRECTORY", "ACTIVE_DIRECTORY_GROUP", "WORKDAY", "WORKDAY_GROUP", "SCIM_CLIENT", "SCIM_CLIENT_GROUP", "SOFTWARE_APP", "SOFTWARE_APP_GROUP", "IDP_ROUTING_POLICY", "IDP_ROUTING_POLICY_GROUP", "RULE", "RULE_GROUP"]); export const devicesTrackObject = z.object({objectId: z.string().optional(), type: directoryType.optional()}); export const devicesObjectStorageReferrer = z.object({trackObject: devicesTrackObject.optional()}); export const devicesMetadataEXE = z.object({arch: z.string().optional(), author: z.string().optional(), installerEngineVersion: z.string().optional(), sha256sum: z.string().optional(), signatureLabel: z.string().optional(), size: z.number().int().optional(), title: z.string().optional(), url: z.string().optional(), version: z.string().optional()}); export const devicesMetadataFile = z.object({mimeType: z.string().optional(), sha256sum: z.string().optional(), size: z.number().int().optional()}); export const devicesMetadataIPA = z.object({assetKind: z.string().optional(), bundleIdentifier: z.string().optional(), bundleVersion: z.string().optional(), packageKind: z.string().optional(), sha256sum: z.string().optional(), shortVersion: z.string().optional(), subtitle: z.string().optional(), title: z.string().optional()}); export const devicesMetadataMSI = z.object({manufacturer: z.string().optional(), productCode: z.string().optional(), productName: z.string().optional(), productVersion: z.string().optional(), sha256sum: z.string().optional(), upgradeCode: z.string().optional()}); export const devicesMetadataPKG = z.object({assetKind: z.string().optional(), bundleIdentifier: z.string().optional(), bundleVersion: z.string().optional(), managedInstallEligibilityStatus: devicesMetadataPKGManagedInstallEligibilityStatus.optional(), packageKind: z.string().optional(), sha256sum: z.string().optional(), shortVersion: z.string().optional(), subtitle: z.string().optional(), title: z.string().optional()}); export const devicesObjectStorageMetadata = z.object({metadataExe: devicesMetadataEXE.optional(), metadataFile: devicesMetadataFile.optional(), metadataIpa: devicesMetadataIPA.optional(), metadataMsi: devicesMetadataMSI.optional(), metadataPkg: devicesMetadataPKG.optional()}); export const devicesObjectStorageVersionStatus = z.enum(["UNKNOWN", "PENDING", "VALIDATING", "AVAILABLE", "REJECTED", "INACTIVE"]); export const devicesObjectStorageVersion = z.object({createdAt: z.string().optional(), displayVersion: z.string().optional(), metadata: devicesObjectStorageMetadata.optional(), name: z.string().optional(), objectId: z.string().optional(), rejectedReason: z.string().optional(), sha256sum: z.string().optional(), size: z.number().int().optional(), status: devicesObjectStorageVersionStatus.optional(), storagePath: z.string().optional(), updatedAt: z.string().optional(), version: z.number().int().optional()}); export const devicesObjectStorageItem = z.object({objectId: z.string().optional(), references: z.array(devicesObjectStorageReferrer).optional(), versions: z.array(devicesObjectStorageVersion).optional()}); export const devicesSoftwareAppSetting = z.object({adminIntent: devicesSoftwareAppSettingAdminManagementIntent.optional(), allowUpdateDelay: z.boolean().optional(), appCatalogInstallableObjectId: z.string().optional(), appDeliveryMethod: devicesSoftwareAppSettingAppDeliveryMethod.optional(), appFileName: z.string().optional(), appleVpp: devicesSoftwareAppAppleVpp.optional(), architectures: z.array(z.string()).optional(), assetKind: z.string().optional(), assetSha256Size: z.number().int().optional(), assetSha256Strings: z.array(z.string()).optional(), autoUpdate: z.boolean().optional(), autoUpdateNotificationsDisabled: z.boolean().optional(), bundleId: z.string().optional(), commandLineArguments: z.string().optional(), createdAt: z.string().nullable().optional(), description: z.string().optional(), desiredState: devicesSoftwareAppDesiredState.optional(), detectionRules: devicesWindowsCustomDetectionRules.nullable().optional(), displayVersion: z.string().optional(), downloadUrl: z.string().optional(), enterpriseObjectId: z.string().optional(), format: devicesSoftwareAppSettingFormat.optional(), googleAndroid: devicesSoftwareAppGoogleAndroid.optional(), iconUrl: z.string().optional(), installerConfig: devicesWindowsCustomInstallerConfig.nullable().optional(), installerType: z.string().optional(), location: z.string().optional(), locationObjectId: z.string().optional(), managedInstallEligibilityStatus: devicesMetadataPKGManagedInstallEligibilityStatus.optional(), microsoftStore: devicesSoftwareAppMicrosoftStore.optional(), migrationSafe: z.boolean().optional(), packageFamilyName: z.string().optional(), packageId: z.string().optional(), packageKind: z.string().optional(), packageManager: devicesSoftwareAppPackageManager.optional(), packageSubtitle: z.string().optional(), packageVersion: z.string().optional(), packageVersionUpdatedAt: z.string().nullable().optional(), scope: devicesSoftwareAppSettingScope.optional(), shortVersion: z.string().optional(), silentInstallFlags: z.array(z.string()).optional(), storedPackage: devicesObjectStorageItem.optional(), storedPackageObjectId: z.string().optional(), teamId: z.string().optional(), uninstallOnUnbind: z.boolean().optional(), unsafeUninstall: z.boolean().optional(), updateTool: z.string().optional(), updateToolArguments: z.string().optional(), updatedAt: z.string().nullable().optional(), versionlessDownloadUrl: z.boolean().optional()}); export const devicesSoftwareApp = z.object({createdAt: z.string().nullable().optional(), deletedAt: z.string().nullable().optional(), displayName: z.string().optional(), objectId: z.string().optional(), organizationObjectId: z.string().optional(), settings: z.array(devicesSoftwareAppSetting).optional(), updatedAt: z.string().nullable().optional()}); export const devicesAppCatalogInstallableItem = z.object({architectures: z.array(z.string()).optional(), installerType: z.string().optional(), objectId: z.string().optional(), operatingSystem: z.string().optional(), softwareApp: devicesSoftwareApp.optional(), version: z.string().optional()}); export const devicesAppCatalogItem = z.object({iconSha256: z.string().optional(), iconUrl: z.string().optional(), installableItems: z.array(devicesAppCatalogInstallableItem).optional(), name: z.string().optional(), objectId: z.string().optional(), version: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get an App Catalog Item * * GET /api/v2/software/catalog/apps/{objectId} */ export const getApiApiV2SoftwareCatalogAppsObjectId = async (args: GetApiApiV2SoftwareCatalogAppsObjectIdArgs, options?: GetApiApiV2SoftwareCatalogAppsObjectIdOptions) => { const {baseUrl = "https://console.jumpcloud.com", fetch: fetchFn = fetch, xApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (xApiKey !== undefined) headers.set("x-api-key", xApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/api/v2/software/catalog/apps/${encodeURIComponent(String(args.objectId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(devicesAppCatalogItem, await res.json()) };