import {z} from 'zod' export type UserByThirdPartyActivationRequest = {activationCode: string}; export type CreateApiApiUserByThirdPartyActivationCodeArgs = {body: UserByThirdPartyActivationRequest}; export type CreateApiApiUserByThirdPartyActivationCodeOptions = {baseUrl?: string | undefined, ApiKeyAuthentication?: string | undefined, fetch?: typeof fetch | undefined}; export const staffInfo = z.object({isStaff: z.boolean(), hasSudoRights: z.boolean(), companyName: z.string().optional()}); export const permission = z.enum(["admin:infra:datasetVersioning:queue:write", "admin:infra:disallowedEmailDomains:read", "admin:infra:disallowedEmailDomains:write", "admin:infra:featureFlags:read", "admin:infra:featureFlags:write", "admin:infra:config:read", "admin:infra:config:write", "admin:infra:migrations:read", "admin:infra:migrations:write", "admin:metrics:read", "admin:metrics:write", "admin:oauth:read", "admin:oauth:write", "admin:organizations:extensions:write", "admin:organizations:read", "admin:organizations:write", "admin:organizations:members:write", "admin:projects:members:write", "admin:projects:read", "admin:projects:write", "admin:trashbin:write", "admin:trials:read", "admin:trials:write", "admin:users:permissions:write", "admin:users:read", "admin:users:signupApprovals:read", "admin:users:signupApprovals:write", "admin:users:write", "admin:jobs:read", "admin:emails:verification:code:read", "admin:sso:read", "admin:sso:domainIdps:write", "admin:vlm:model:read", "admin:vlm:model:write", "projects:limits:write", "projects:training:keras:write", "projects:data:versioning:write", "users:emails:read", "whitelabels:read", "whitelabels:write", "test:data:write", "test:users:read", "test:users:write"]); export const userTierEnum = z.enum(["free", "community-plus", "professional", "enterprise"]); export const userOrganizationExtensionSettings = z.object({extensionsAllowMembers: z.boolean().optional(), extensionsAllowLocalhost: z.boolean().optional(), extensionsAllowedDomains: z.array(z.string()).optional()}); export const entitlementLimits = z.object({totalStorage: z.number().optional(), computeTimePerYear: z.number().optional(), gpuComputeTimePerYear: z.number().optional(), numberOfProjects: z.number().int().optional(), numberOfUsers: z.number().int().optional()}); export const userOrganization = z.object({id: z.number().int(), name: z.string(), logo: z.string().optional(), isDeveloperProfile: z.boolean(), extensionSettings: userOrganizationExtensionSettings.optional(), whitelabelId: z.number().int().nullable(), isAdmin: z.boolean(), created: z.string(), trialId: z.number().nullable(), trialExpiredDate: z.string().nullable(), trialUpgradedDate: z.string().nullable(), entitlementLimits: entitlementLimits, userCount: z.number().int(), adminCount: z.number().int(), privateProjectCount: z.number().int(), lastAccessed: z.string().optional(), publicProjectLicense: z.object({name: z.string(), link: z.string()})}); export const projectCollaborator = z.object({id: z.number().int(), username: z.string(), name: z.string(), email: z.string(), photo: z.string().optional(), created: z.string(), lastSeen: z.string().optional(), staffInfo: staffInfo, pending: z.boolean(), jobTitle: z.string().optional(), permissions: z.array(permission).optional(), companyName: z.string().optional(), activated: z.boolean(), mfaConfigured: z.boolean(), stripeCustomerId: z.string().optional(), hasPendingPayments: z.boolean().optional(), tier: userTierEnum.optional(), idps: z.array(z.string()).optional(), isOwner: z.boolean()}); export const projectLabelingMethod = z.enum(["single_label", "object_detection", "label_map"]); export const publicProjectLicense = z.enum(["Apache-2.0", "BSD-3-Clause", "BSD-3-Clause-Clear"]); export const projectTierEnum = z.enum(["free", "community-plus", "professional", "enterprise"]); export const project = z.object({id: z.number().int(), name: z.string(), description: z.string(), created: z.string(), owner: z.string(), lastAccessed: z.string().optional(), lastModified: z.string().optional(), lastModificationDetails: z.string().optional(), logo: z.string().optional(), ownerUserId: z.number().int().optional(), ownerOrganizationId: z.number().int().optional(), ownerAvatar: z.string().optional(), ownerIsDeveloperProfile: z.boolean(), developerProfileUserId: z.number().int().optional(), collaborators: z.array(projectCollaborator), labelingMethod: projectLabelingMethod, metadata: z.object({}), dataExplorerScreenshot: z.string().optional(), isEnterpriseProject: z.boolean(), whitelabelId: z.number().int().nullable(), whitelabelName: z.string().optional(), tags: z.array(z.string()).optional(), category: z.enum(["Accelerometer", "Audio", "Images", "Keyword spotting", "Object detection", "Other"]).optional(), license: publicProjectLicense.optional(), tier: projectTierEnum, hasPublicVersion: z.boolean(), isPublic: z.boolean(), allowsLivePublicAccess: z.boolean(), indPauseProcessingSamples: z.boolean(), publicProjectListed: z.boolean(), deletedDate: z.string().optional(), fullDeletionDate: z.string().optional(), scheduledFullDeletionDate: z.string().optional()}); export const userExperiment = z.object({type: z.string(), title: z.string(), help: z.string().optional(), enabled: z.boolean(), showToUser: z.boolean()}); export const userProjectsSortOrder = z.enum(["created-asc", "created-desc", "added-asc", "added-desc", "name-asc", "name-desc", "last-accessed-desc"]); export const trialExpirationDate = z.string(); export const trialNotes = z.string(); export const enterpriseTrial = z.object({id: z.number().int(), userId: z.number().int(), organizationId: z.number().int(), created: z.string(), expirationDate: trialExpirationDate, notes: trialNotes.optional(), expiredDate: z.string().nullable(), deletedDate: z.string().nullable(), upgradedDate: z.string().nullable()}); export const userEulaName = z.enum(["brainchip", "syntiant"]); export const userEula = z.object({name: userEulaName, description: z.string(), latestVersion: z.string(), acceptedVersion: z.string().optional(), link: z.string(), userIsCompliant: z.boolean()}); export const getUserResponse = z.object({success: z.boolean(), error: z.string().optional(), id: z.number().int(), username: z.string(), name: z.string(), email: z.string(), photo: z.string().optional(), created: z.string(), lastSeen: z.string().optional(), staffInfo: staffInfo, pending: z.boolean(), jobTitle: z.string().optional(), permissions: z.array(permission).optional(), companyName: z.string().optional(), activated: z.boolean(), mfaConfigured: z.boolean(), stripeCustomerId: z.string().optional(), hasPendingPayments: z.boolean().optional(), tier: userTierEnum, idps: z.array(z.string()).optional(), organizations: z.array(userOrganization), projects: z.array(project), experiments: z.array(userExperiment), evaluation: z.boolean().optional(), ambassador: z.boolean().optional(), whitelabels: z.array(z.object({id: z.number(), domain: z.string(), name: z.string(), ownerOrganizationId: z.number(), isAdmin: z.boolean()})).optional(), suspended: z.boolean(), suspensionReason: z.string().optional(), notifications: z.array(z.string()), subscriptionCancellationRequestDate: z.string().optional(), subscriptionDowngradeDate: z.string().optional(), subscriptionTerminationDate: z.string().optional(), payAsYouGoSubscriptionPeriodStartDate: z.string().optional(), payAsYouGoSubscriptionPeriodEndDate: z.string().optional(), passwordConfigured: z.boolean(), projectsSortOrder: userProjectsSortOrder, activeEnterpriseTrial: enterpriseTrial.optional(), hasEnterpriseFeaturesAccess: z.boolean(), timezone: z.string().optional(), lastAccessedProjects: z.object({projects: z.array(z.object({id: z.number().int(), name: z.string(), created: z.string(), lastAccessed: z.string().optional()})), hasMoreProjects: z.boolean()}), privatePersonalProjectsUsed: z.number().int(), lastAcceptedTermsOfService: z.object({version: z.string(), acceptanceDate: z.string()}).optional(), eulas: z.array(userEula)}); 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 user by third party activation code * * POST /api/user/by-third-party-activation-code * * Also accepts auth: JWTAuthentication, JWTHttpHeaderAuthentication, OAuth2 */ export const createApiApiUserByThirdPartyActivationCode = async (args: CreateApiApiUserByThirdPartyActivationCodeArgs, options?: CreateApiApiUserByThirdPartyActivationCodeOptions) => { const {baseUrl = "https://studio.edgeimpulse.com/v1", fetch: fetchFn = fetch, ApiKeyAuthentication} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (ApiKeyAuthentication !== undefined) headers.set("x-api-key", ApiKeyAuthentication) const url = `${baseUrl.replace(/\/+$/, '')}/api/user/by-third-party-activation-code${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getUserResponse, await res.json()) };