Files
simstudioai--sim/apps/sim/lib/api/contracts/selectors/jsm.ts
T
wehub-resource-sync d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

463 lines
17 KiB
TypeScript

import { isRecordLike } from '@sim/utils/object'
import { z } from 'zod'
import {
credentialWorkflowDomainBodySchema,
definePostSelector,
idNameSchema,
} from '@/lib/api/contracts/selectors/shared'
import type { ContractBody, ContractJsonResponse } from '@/lib/api/contracts/types'
const jsmBaseBodySchema = z.object({
domain: z.string({ error: 'Domain is required' }).min(1, 'Domain is required'),
accessToken: z.string({ error: 'Access token is required' }).min(1, 'Access token is required'),
cloudId: z.string().optional(),
})
const jsmIssueIdOrKeyField = z
.string({ error: 'Issue ID or key is required' })
.min(1, 'Issue ID or key is required')
const jsmServiceDeskIdField = z
.string({ error: 'Service Desk ID is required' })
.min(1, 'Service Desk ID is required')
const jsmFormIdField = z.string({ error: 'Form ID is required' }).min(1, 'Form ID is required')
const jsmIdListSchema = z.union([z.string(), z.array(z.string())]).optional()
export const jsmRequestTypesBodySchema = credentialWorkflowDomainBodySchema.extend({
serviceDeskId: z.string().min(1),
})
export const jsmServiceDesksBodySchema = jsmBaseBodySchema.extend({
expand: z.string().optional(),
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmServiceDeskScopedBodySchema = jsmBaseBodySchema.extend({
serviceDeskId: jsmServiceDeskIdField,
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmQueuesBodySchema = jsmServiceDeskScopedBodySchema.extend({
includeCount: z.string().optional(),
})
export const jsmRequestTypesToolBodySchema = jsmServiceDeskScopedBodySchema.extend({
searchQuery: z.string().optional(),
groupId: z.string().optional(),
expand: z.string().optional(),
})
export const jsmRequestTypeFieldsBodySchema = jsmBaseBodySchema.extend({
serviceDeskId: jsmServiceDeskIdField,
requestTypeId: z
.string({ error: 'Request Type ID is required' })
.min(1, 'Request Type ID is required'),
})
export const jsmRequestsBodySchema = jsmBaseBodySchema.extend({
serviceDeskId: z.string().optional(),
requestOwnership: z.string().optional(),
requestStatus: z.string().optional(),
requestTypeId: z.string().optional(),
searchTerm: z.string().optional(),
expand: z.string().optional(),
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmRequestBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: z.string().optional(),
serviceDeskId: z.string().optional(),
requestTypeId: z.string().optional(),
summary: z.string().optional(),
description: z.string().optional(),
raiseOnBehalfOf: z.string().optional(),
requestFieldValues: z.record(z.string(), z.unknown()).optional(),
formAnswers: z.record(z.string(), z.unknown()).optional(),
requestParticipants: z.union([z.string(), z.array(z.string())]).optional(),
channel: z.string().optional(),
expand: z.string().optional(),
})
export const jsmCommentBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: jsmIssueIdOrKeyField,
body: z.string({ error: 'Comment body is required' }).min(1, 'Comment body is required'),
isPublic: z.boolean().optional(),
})
export const jsmCommentsBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: jsmIssueIdOrKeyField,
isPublic: z.boolean().optional(),
internal: z.boolean().optional(),
expand: z.string().optional(),
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmTransitionBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: jsmIssueIdOrKeyField,
transitionId: z
.string({ error: 'Transition ID is required' })
.min(1, 'Transition ID is required'),
comment: z.string().optional(),
})
export const jsmIssuePaginationBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: jsmIssueIdOrKeyField,
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmApprovalsBodySchema = jsmBaseBodySchema.extend({
action: z.string({ error: 'Action is required' }).min(1, 'Action is required'),
issueIdOrKey: jsmIssueIdOrKeyField,
approvalId: z.string().optional(),
decision: z.string().optional(),
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmParticipantsBodySchema = jsmBaseBodySchema.extend({
action: z.string({ error: 'Action is required' }).min(1, 'Action is required'),
issueIdOrKey: jsmIssueIdOrKeyField,
accountIds: z.union([z.string(), z.array(z.string())]).optional(),
start: z.string().optional(),
limit: z.string().optional(),
})
export const jsmCustomersBodySchema = jsmBaseBodySchema.extend({
serviceDeskId: jsmServiceDeskIdField,
query: z.string().optional(),
start: z.string().optional(),
limit: z.string().optional(),
accountIds: jsmIdListSchema,
emails: jsmIdListSchema,
})
export const jsmOrganizationBodySchema = jsmBaseBodySchema.extend({
action: z.string({ error: 'Action is required' }).min(1, 'Action is required'),
name: z.string().optional(),
serviceDeskId: z.string().optional(),
organizationId: z.string().optional(),
})
export const jsmIssueFormsBodySchema = jsmBaseBodySchema.extend({
issueIdOrKey: jsmIssueIdOrKeyField,
})
export const jsmIssueFormBodySchema = jsmIssueFormsBodySchema.extend({
formId: jsmFormIdField,
})
export const jsmAttachFormBodySchema = jsmIssueFormsBodySchema.extend({
formTemplateId: z
.string({ error: 'Form template ID is required' })
.min(1, 'Form template ID is required'),
})
export const jsmSaveFormAnswersBodySchema = jsmIssueFormBodySchema.extend({
answers: z.custom<Record<string, unknown>>(isRecordLike, {
message: 'Answers object is required',
}),
})
export const jsmProjectFormTemplatesBodySchema = jsmBaseBodySchema.extend({
projectIdOrKey: z
.string({ error: 'Project ID or key is required' })
.min(1, 'Project ID or key is required'),
})
export const jsmProjectFormStructureBodySchema = jsmProjectFormTemplatesBodySchema.extend({
formId: jsmFormIdField,
})
export const jsmCopyFormsBodySchema = jsmBaseBodySchema.extend({
sourceIssueIdOrKey: z
.string({ error: 'Source issue ID or key is required' })
.min(1, 'Source issue ID or key is required'),
targetIssueIdOrKey: z
.string({ error: 'Target issue ID or key is required' })
.min(1, 'Target issue ID or key is required'),
formIds: z.array(z.string(), { error: 'formIds must be an array of form UUIDs' }).optional(),
})
const jsmAssetsBaseBodySchema = jsmBaseBodySchema.extend({
workspaceId: z.string().optional(),
})
const jsmAssetsPaginationField = z.union([z.string(), z.number()]).optional()
export const jsmListObjectSchemasBodySchema = jsmAssetsBaseBodySchema.extend({
startAt: jsmAssetsPaginationField,
maxResults: jsmAssetsPaginationField,
includeCounts: z.union([z.string(), z.boolean()]).optional(),
})
export const jsmObjectSchemaBodySchema = jsmAssetsBaseBodySchema.extend({
schemaId: z.string({ error: 'Schema ID is required' }).min(1, 'Schema ID is required'),
})
export const jsmObjectTypesBodySchema = jsmAssetsBaseBodySchema.extend({
schemaId: z.string({ error: 'Schema ID is required' }).min(1, 'Schema ID is required'),
excludeAbstract: z.union([z.string(), z.boolean()]).optional(),
})
export const jsmObjectTypeAttributesBodySchema = jsmAssetsBaseBodySchema.extend({
objectTypeId: z
.string({ error: 'Object type ID is required' })
.min(1, 'Object type ID is required'),
onlyValueEditable: z.union([z.string(), z.boolean()]).optional(),
query: z.string().optional(),
})
export const jsmSearchObjectsAqlBodySchema = jsmAssetsBaseBodySchema.extend({
qlQuery: z.string({ error: 'AQL query is required' }).min(1, 'AQL query is required'),
page: jsmAssetsPaginationField,
resultsPerPage: jsmAssetsPaginationField,
includeAttributes: z.union([z.string(), z.boolean()]).optional(),
objectTypeId: z.string().optional(),
objectSchemaId: z.string().optional(),
})
export const jsmGetObjectBodySchema = jsmAssetsBaseBodySchema.extend({
objectId: z.string({ error: 'Object ID is required' }).min(1, 'Object ID is required'),
})
const jsmAssetAttributeInputSchema = z.object({
objectTypeAttributeId: z
.string({ error: 'objectTypeAttributeId is required' })
.min(1, 'objectTypeAttributeId is required'),
objectAttributeValues: z
.array(z.object({ value: z.unknown() }), {
error: 'objectAttributeValues must be an array of { value } entries',
})
.min(1, 'Each attribute needs at least one value'),
})
export const jsmCreateObjectBodySchema = jsmAssetsBaseBodySchema.extend({
objectTypeId: z
.string({ error: 'Object type ID is required' })
.min(1, 'Object type ID is required'),
attributes: z
.array(jsmAssetAttributeInputSchema, { error: 'attributes is required' })
.min(1, 'At least one attribute is required'),
})
export const jsmUpdateObjectBodySchema = jsmAssetsBaseBodySchema.extend({
objectId: z.string({ error: 'Object ID is required' }).min(1, 'Object ID is required'),
objectTypeId: z.string().optional(),
attributes: z
.array(jsmAssetAttributeInputSchema, { error: 'attributes is required' })
.min(1, 'At least one attribute is required'),
})
export const jsmDeleteObjectBodySchema = jsmAssetsBaseBodySchema.extend({
objectId: z.string({ error: 'Object ID is required' }).min(1, 'Object ID is required'),
})
export const defineJsmToolContract = <TBody extends z.ZodType>(path: string, body: TBody) =>
definePostSelector(path, body, z.unknown())
export const jsmServiceDesksSelectorContract = definePostSelector(
'/api/tools/jsm/selector-servicedesks',
credentialWorkflowDomainBodySchema,
z.object({ serviceDesks: z.array(idNameSchema) })
)
export const jsmRequestTypesSelectorContract = definePostSelector(
'/api/tools/jsm/selector-requesttypes',
jsmRequestTypesBodySchema,
z.object({ requestTypes: z.array(idNameSchema) })
)
export const jsmServiceDesksContract = defineJsmToolContract(
'/api/tools/jsm/servicedesks',
jsmServiceDesksBodySchema
)
export const jsmQueuesContract = defineJsmToolContract('/api/tools/jsm/queues', jsmQueuesBodySchema)
export const jsmRequestTypesContract = defineJsmToolContract(
'/api/tools/jsm/requesttypes',
jsmRequestTypesToolBodySchema
)
export const jsmRequestTypeFieldsContract = defineJsmToolContract(
'/api/tools/jsm/requesttypefields',
jsmRequestTypeFieldsBodySchema
)
export const jsmRequestsContract = defineJsmToolContract(
'/api/tools/jsm/requests',
jsmRequestsBodySchema
)
export const jsmRequestContract = defineJsmToolContract(
'/api/tools/jsm/request',
jsmRequestBodySchema
)
export const jsmCommentContract = defineJsmToolContract(
'/api/tools/jsm/comment',
jsmCommentBodySchema
)
export const jsmCommentsContract = defineJsmToolContract(
'/api/tools/jsm/comments',
jsmCommentsBodySchema
)
export const jsmTransitionContract = defineJsmToolContract(
'/api/tools/jsm/transition',
jsmTransitionBodySchema
)
export const jsmSlaContract = defineJsmToolContract(
'/api/tools/jsm/sla',
jsmIssuePaginationBodySchema
)
export const jsmTransitionsContract = defineJsmToolContract(
'/api/tools/jsm/transitions',
jsmIssuePaginationBodySchema
)
export const jsmApprovalsContract = defineJsmToolContract(
'/api/tools/jsm/approvals',
jsmApprovalsBodySchema
)
export const jsmParticipantsContract = defineJsmToolContract(
'/api/tools/jsm/participants',
jsmParticipantsBodySchema
)
export const jsmCustomersContract = defineJsmToolContract(
'/api/tools/jsm/customers',
jsmCustomersBodySchema
)
export const jsmOrganizationsContract = defineJsmToolContract(
'/api/tools/jsm/organizations',
jsmServiceDeskScopedBodySchema
)
export const jsmOrganizationContract = defineJsmToolContract(
'/api/tools/jsm/organization',
jsmOrganizationBodySchema
)
export const jsmIssueFormsContract = defineJsmToolContract(
'/api/tools/jsm/forms/issue',
jsmIssueFormsBodySchema
)
export const jsmAttachFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/attach',
jsmAttachFormBodySchema
)
export const jsmGetFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/get',
jsmIssueFormBodySchema
)
export const jsmSubmitFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/submit',
jsmIssueFormBodySchema
)
export const jsmDeleteFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/delete',
jsmIssueFormBodySchema
)
export const jsmExternaliseFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/externalise',
jsmIssueFormBodySchema
)
export const jsmInternaliseFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/internalise',
jsmIssueFormBodySchema
)
export const jsmReopenFormContract = defineJsmToolContract(
'/api/tools/jsm/forms/reopen',
jsmIssueFormBodySchema
)
export const jsmSaveFormAnswersContract = defineJsmToolContract(
'/api/tools/jsm/forms/save',
jsmSaveFormAnswersBodySchema
)
export const jsmFormAnswersContract = defineJsmToolContract(
'/api/tools/jsm/forms/answers',
jsmIssueFormBodySchema
)
export const jsmProjectFormTemplatesContract = defineJsmToolContract(
'/api/tools/jsm/forms/templates',
jsmProjectFormTemplatesBodySchema
)
export const jsmProjectFormStructureContract = defineJsmToolContract(
'/api/tools/jsm/forms/structure',
jsmProjectFormStructureBodySchema
)
export const jsmCopyFormsContract = defineJsmToolContract(
'/api/tools/jsm/forms/copy',
jsmCopyFormsBodySchema
)
export const jsmListObjectSchemasContract = defineJsmToolContract(
'/api/tools/jsm/assets/schemas',
jsmListObjectSchemasBodySchema
)
export const jsmGetObjectSchemaContract = defineJsmToolContract(
'/api/tools/jsm/assets/schema',
jsmObjectSchemaBodySchema
)
export const jsmListObjectTypesContract = defineJsmToolContract(
'/api/tools/jsm/assets/object-types',
jsmObjectTypesBodySchema
)
export const jsmObjectTypeAttributesContract = defineJsmToolContract(
'/api/tools/jsm/assets/attributes',
jsmObjectTypeAttributesBodySchema
)
export const jsmSearchObjectsAqlContract = defineJsmToolContract(
'/api/tools/jsm/assets/search',
jsmSearchObjectsAqlBodySchema
)
export const jsmGetObjectContract = defineJsmToolContract(
'/api/tools/jsm/assets/object/get',
jsmGetObjectBodySchema
)
export const jsmCreateObjectContract = defineJsmToolContract(
'/api/tools/jsm/assets/object/create',
jsmCreateObjectBodySchema
)
export const jsmUpdateObjectContract = defineJsmToolContract(
'/api/tools/jsm/assets/object/update',
jsmUpdateObjectBodySchema
)
export const jsmDeleteObjectContract = defineJsmToolContract(
'/api/tools/jsm/assets/object/delete',
jsmDeleteObjectBodySchema
)
export type JsmServiceDesksBody = ContractBody<typeof jsmServiceDesksContract>
export type JsmQueuesBody = ContractBody<typeof jsmQueuesContract>
export type JsmRequestTypesBody = ContractBody<typeof jsmRequestTypesContract>
export type JsmRequestTypeFieldsBody = ContractBody<typeof jsmRequestTypeFieldsContract>
export type JsmRequestsBody = ContractBody<typeof jsmRequestsContract>
export type JsmRequestBody = ContractBody<typeof jsmRequestContract>
export type JsmCommentBody = ContractBody<typeof jsmCommentContract>
export type JsmCommentsBody = ContractBody<typeof jsmCommentsContract>
export type JsmTransitionBody = ContractBody<typeof jsmTransitionContract>
export type JsmSlaBody = ContractBody<typeof jsmSlaContract>
export type JsmTransitionsBody = ContractBody<typeof jsmTransitionsContract>
export type JsmApprovalsBody = ContractBody<typeof jsmApprovalsContract>
export type JsmParticipantsBody = ContractBody<typeof jsmParticipantsContract>
export type JsmCustomersBody = ContractBody<typeof jsmCustomersContract>
export type JsmOrganizationsBody = ContractBody<typeof jsmOrganizationsContract>
export type JsmOrganizationBody = ContractBody<typeof jsmOrganizationContract>
export type JsmIssueFormsBody = ContractBody<typeof jsmIssueFormsContract>
export type JsmAttachFormBody = ContractBody<typeof jsmAttachFormContract>
export type JsmGetFormBody = ContractBody<typeof jsmGetFormContract>
export type JsmSubmitFormBody = ContractBody<typeof jsmSubmitFormContract>
export type JsmDeleteFormBody = ContractBody<typeof jsmDeleteFormContract>
export type JsmExternaliseFormBody = ContractBody<typeof jsmExternaliseFormContract>
export type JsmInternaliseFormBody = ContractBody<typeof jsmInternaliseFormContract>
export type JsmReopenFormBody = ContractBody<typeof jsmReopenFormContract>
export type JsmSaveFormAnswersBody = ContractBody<typeof jsmSaveFormAnswersContract>
export type JsmFormAnswersBody = ContractBody<typeof jsmFormAnswersContract>
export type JsmProjectFormTemplatesBody = ContractBody<typeof jsmProjectFormTemplatesContract>
export type JsmProjectFormStructureBody = ContractBody<typeof jsmProjectFormStructureContract>
export type JsmCopyFormsBody = ContractBody<typeof jsmCopyFormsContract>
export type JsmServiceDesksSelectorResponse = ContractJsonResponse<
typeof jsmServiceDesksSelectorContract
>
export type JsmRequestTypesSelectorResponse = ContractJsonResponse<
typeof jsmRequestTypesSelectorContract
>