@gravity-rail/sdk 0.7.3 → 0.8.0
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.
- package/dist/{chunk-YCASSXLL.js → chunk-ML55PVP7.js} +150 -17
- package/dist/chunk-ML55PVP7.js.map +1 -0
- package/dist/{client-B_cweJhP.d.cts → client-C2aWAalu.d.cts} +189 -43
- package/dist/{client-C-on7whi.d.ts → client-CLGovEox.d.ts} +189 -43
- package/dist/helpers.d.cts +2 -2
- package/dist/helpers.d.ts +2 -2
- package/dist/index.cjs +216 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -6
- package/dist/index.d.ts +9 -6
- package/dist/index.js +71 -1
- package/dist/index.js.map +1 -1
- package/dist/{inquiries-BX3PuU-7.d.cts → inquiries-CmECZnkl.d.cts} +3 -0
- package/dist/{inquiries-BX3PuU-7.d.ts → inquiries-CmECZnkl.d.ts} +3 -0
- package/dist/internal.cjs +141 -8
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +4 -4
- package/dist/internal.d.ts +4 -4
- package/dist/internal.js +1 -1
- package/dist/schemas.cjs +11 -0
- package/dist/schemas.cjs.map +1 -1
- package/dist/schemas.d.cts +30 -2
- package/dist/schemas.d.ts +30 -2
- package/dist/schemas.js +11 -0
- package/dist/schemas.js.map +1 -1
- package/dist/{scopes-CNbQi30F.d.cts → scopes-CDaJBQVT.d.cts} +2 -2
- package/dist/{scopes-ColqadkM.d.ts → scopes-D6a_Mvqr.d.ts} +2 -2
- package/package.json +2 -2
- package/dist/chunk-YCASSXLL.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/workspace-builder/resource.ts","../src/workspace-builder/automation.ts","../src/workspace-builder/forms.ts","../src/workspace-builder/journeys.ts","../src/workspace-builder/role-update.ts","../src/workspace-builder/workflows.ts","../src/workspace-builder/orchestrator.ts"],"sourcesContent":["import type { GravityRailWorkspaceClient } from '../client/workspace-client';\n\nexport type AnyRecord = Record<string, any>;\nexport type ResourceSummary = Record<string, Array<number | undefined>>;\n\nexport function isRecord(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isPlainRecord(value: unknown): value is AnyRecord {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function slugify(name: string): string {\n return name.toLowerCase().replaceAll(' ', '_').replaceAll('-', '_');\n}\n\nexport abstract class WorkspaceBuilderResource {\n _id?: number;\n _uuid?: string;\n _created = false;\n _existed = false;\n\n abstract planLine(): string;\n abstract apply(client: GravityRailWorkspaceClient): Promise<void>;\n\n matchKey(): string | undefined {\n return undefined;\n }\n\n adopt(existing: AnyRecord): void {\n this._id = existing.id;\n this._uuid = existing.uuid;\n this._existed = true;\n }\n}\n\nexport function resolveRefs(params: AnyRecord): AnyRecord {\n return resolveRefValue(params) as AnyRecord;\n}\n\nfunction resolveRefValue(value: unknown): unknown {\n if (value instanceof WorkspaceBuilderResource) return value._uuid;\n if (Array.isArray(value)) return value.map(resolveRefValue);\n if (!isPlainRecord(value)) return value;\n\n const out: AnyRecord = {};\n for (const [key, nestedValue] of Object.entries(value)) {\n out[key] = resolveRefValue(nestedValue);\n }\n return out;\n}\n","import {\n EventRuleEventType,\n EventRuleObjectType,\n type CreateRoutineRequest,\n type EventRuleActionType,\n type MemberFilterFilterType,\n type MemberFilterFormData,\n type MemberFilterObjectType,\n type MemberFilterRuleFormData,\n type NotificationRuleCreate,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\nimport type { WorkflowBuilder } from './workflows';\n\nexport class MemberFilterBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly rules: MemberFilterRuleFormData[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n }\n\n addRule(\n objectType: MemberFilterObjectType,\n filterType: MemberFilterFilterType,\n options: { objectIds?: number[]; query?: string } = {}\n ): MemberFilterBuilder {\n this.rules.push({\n objectType,\n filterType,\n ...(options.objectIds ? { objectIds: options.objectIds } : {}),\n ...(options.query ? { query: options.query } : {}),\n });\n return this;\n }\n\n planLine(): string {\n return `MemberFilter: ${this.name}${this.rules.length ? ` (${this.rules.length} rules)` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const payload: MemberFilterFormData = {\n name: this.name,\n description: this.description,\n rules: this.rules,\n };\n const result = await client.createMemberFilter(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\ninterface RoutineRuleDraft {\n actionType: EventRuleActionType | string;\n workflow?: WorkflowBuilder;\n memberFilter?: MemberFilterBuilder;\n actionParams: AnyRecord;\n}\n\nexport class RoutineBuilder extends WorkspaceBuilderResource {\n readonly active: boolean;\n readonly description: string;\n readonly rules: RoutineRuleDraft[] = [];\n\n constructor(\n readonly name: string,\n readonly cronSchedule = '',\n options: AnyRecord = {}\n ) {\n super();\n this.active = options.active ?? false;\n this.description = options.description ?? '';\n }\n\n addRule(\n actionType: string,\n options: {\n workflow?: WorkflowBuilder;\n memberFilter?: MemberFilterBuilder;\n actionParams?: AnyRecord;\n } = {}\n ): RoutineBuilder {\n this.rules.push({\n actionType,\n workflow: options.workflow,\n memberFilter: options.memberFilter,\n actionParams: options.actionParams ?? {},\n });\n return this;\n }\n\n planLine(): string {\n const parts = [\n ...(this.cronSchedule ? [`cron=${this.cronSchedule}`] : []),\n ...(this.rules.length ? [`${this.rules.length} rules`] : []),\n this.active ? 'active' : 'inactive',\n ];\n return `Routine: ${this.name} (${parts.join(', ')})`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const eventRules = this.rules.map((rule) => {\n const actionParams = { ...rule.actionParams };\n if (rule.workflow?._id !== undefined) actionParams.workflowId = rule.workflow._id;\n if (rule.memberFilter?._id !== undefined)\n actionParams.memberFilterId = rule.memberFilter._id;\n return {\n uuid: crypto.randomUUID(),\n objectType: EventRuleObjectType.ROUTINE,\n eventType: EventRuleEventType.ROUTINE_TRIGGERED,\n actionType: rule.actionType as EventRuleActionType,\n actionParams,\n active: true,\n };\n });\n const payload: CreateRoutineRequest = {\n name: this.name,\n cronString: this.cronSchedule,\n scheduleMode: this.cronSchedule ? 'CRON' : undefined,\n scheduleEnabled: this.active,\n ...(this.description ? { description: this.description } : {}),\n ...(eventRules.length ? { eventRules } : {}),\n };\n const result = await client.createRoutine(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class NotificationRuleBuilder extends WorkspaceBuilderResource {\n readonly noticeType: string;\n readonly memberId: number;\n readonly workflow?: WorkflowBuilder;\n readonly prompt?: string;\n readonly notifySms: boolean;\n readonly notifyEmail: boolean;\n readonly notifyVoice: boolean;\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.noticeType = options.noticeType ?? options.notice_type ?? name;\n this.memberId = options.memberId ?? options.member_id;\n this.workflow = options.workflow;\n this.prompt = options.prompt ?? options.message;\n this.notifySms = Boolean(options.notifySms ?? options.notify_sms);\n this.notifyEmail = Boolean(options.notifyEmail ?? options.notify_email);\n this.notifyVoice = Boolean(options.notifyVoice ?? options.notify_voice);\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.memberId !== undefined) parts.push(`memberId=${this.memberId}`);\n if (this.workflow) parts.push(`workflow='${this.workflow.name}'`);\n return `NotificationRule: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.memberId === undefined) {\n throw new Error(`Notification rule '${this.name}' requires memberId`);\n }\n const payload: NotificationRuleCreate = {\n noticeType: this.noticeType,\n memberId: this.memberId,\n workflowId: this.workflow?._id,\n prompt: this.prompt ?? null,\n notifySms: this.notifySms,\n notifyEmail: this.notifyEmail,\n notifyVoice: this.notifyVoice,\n };\n const result = await client.createNotificationRule(payload);\n this._id = result.id;\n this._created = true;\n }\n}\n","import {\n DataFieldType,\n EventRuleEventType,\n type DataFieldFormData,\n type DataTypeFormData,\n type EnumOption,\n type EventRuleActionType,\n type MemberLabelFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { WorkspaceBuilderEventRule } from './event-rules';\nimport { type AnyRecord, isRecord, slugify, WorkspaceBuilderResource } from './resource';\n\ntype WorkspaceFieldDraft = Omit<DataFieldFormData, 'fieldType'> & {\n fieldType: DataFieldType;\n celFunction?: string;\n};\n\nfunction normalizeOptions(options: any[]): EnumOption[] {\n if (options.length === 0) return [];\n const first = options[0];\n if (isRecord(first)) return options as EnumOption[];\n if (Array.isArray(first)) {\n return options.map((entry) => ({ label: String(entry[0]), value: entry[1] }));\n }\n return options.map((option) => ({ label: String(option), value: String(option) }));\n}\n\nfunction createFieldDraft(\n fieldType: DataFieldType,\n name: string,\n slug: string,\n options: {\n required?: boolean;\n order?: number;\n description?: string;\n choices?: EnumOption[];\n cel?: string;\n } = {}\n): WorkspaceFieldDraft {\n return {\n name,\n slug,\n fieldType,\n required: Boolean(options.required),\n order: options.order ?? 0,\n ...(options.description ? { description: options.description } : {}),\n ...(options.choices ? { options: options.choices } : {}),\n ...(options.cel ? { celFunction: options.cel } : {}),\n };\n}\n\nexport class FormBuilder extends WorkspaceBuilderResource {\n readonly name: string;\n readonly slug: string;\n readonly description: string;\n readonly prompt: string;\n readonly collection: boolean;\n readonly fields: WorkspaceFieldDraft[] = [];\n readonly eventRules: WorkspaceBuilderEventRule[] = [];\n\n constructor(name: string, slug?: string, options: AnyRecord = {}) {\n super();\n this.name = name;\n this.slug = slug ?? slugify(name);\n this.description = options.description ?? '';\n this.prompt = options.prompt ?? '';\n this.collection = options.collection ?? false;\n\n for (const field of options.fields ?? []) {\n if (!isRecord(field) || !field.name) continue;\n const choices = field.options ? normalizeOptions(field.options) : undefined;\n this.fields.push(\n createFieldDraft(\n (field.fieldType ?? field.field_type ?? DataFieldType.TEXT) as DataFieldType,\n field.name,\n field.slug ?? slugify(field.name),\n {\n required: Boolean(field.required ?? field.isRequired),\n order: field.order ?? 0,\n description: field.description,\n choices,\n }\n )\n );\n }\n }\n\n field(\n fieldType: DataFieldType,\n name: string,\n slug: string,\n options: {\n required?: boolean;\n order?: number;\n description?: string;\n choices?: any[];\n cel?: string;\n } = {}\n ): FormBuilder {\n this.fields.push(createFieldDraft(fieldType, name, slug, options));\n return this;\n }\n\n enumField(name: string, slug: string, options: any[], settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.ENUM, name, slug, {\n ...settings,\n choices: normalizeOptions(options),\n });\n }\n\n textField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.TEXT, name, slug, settings);\n }\n\n numberField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.NUMBER, name, slug, settings);\n }\n\n dateField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.DATE, name, slug, settings);\n }\n\n booleanField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.BOOLEAN, name, slug, settings);\n }\n\n functionField(name: string, slug: string, cel: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.FUNCTION, name, slug, { ...settings, cel });\n }\n\n emailField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.EMAIL, name, slug, settings);\n }\n\n phoneField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.PHONE, name, slug, settings);\n }\n\n longtextField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.LONGTEXT, name, slug, settings);\n }\n\n integerField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.INTEGER, name, slug, settings);\n }\n\n datetimeField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.DATETIME, name, slug, settings);\n }\n\n timeOfDayField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.TIME_OF_DAY, name, slug, settings);\n }\n\n usZipCodeField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.US_ZIP_CODE, name, slug, settings);\n }\n\n arrayField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.ARRAY, name, slug, settings);\n }\n\n objectField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.OBJECT, name, slug, settings);\n }\n\n onRecordCreated(\n action: string,\n params: AnyRecord = {},\n condition?: string,\n name?: string\n ): FormBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.DATA_RECORD_CREATED,\n actionType: action as EventRuleActionType,\n actionParams: params,\n condition,\n name,\n });\n return this;\n }\n\n onRecordUpdated(\n action: string,\n params: AnyRecord = {},\n condition?: string,\n name?: string\n ): FormBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.DATA_RECORD_UPDATED,\n actionType: action as EventRuleActionType,\n actionParams: params,\n condition,\n name,\n });\n return this;\n }\n\n matchKey(): string {\n return this.slug;\n }\n\n planLine(): string {\n return `Form: ${this.name} (slug=${this.slug}, ${this.fields.length} fields)`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: DataTypeFormData = {\n name: this.name,\n slug: this.slug,\n description: this.description,\n prompt: this.prompt,\n isCollection: this.collection,\n fields: this.fields,\n };\n const result = await client.createDataType(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class MemberLabelBuilder extends WorkspaceBuilderResource {\n readonly name: string;\n readonly slug: string;\n readonly color: string;\n readonly description: string;\n\n constructor(name: string, slug?: string, color = '8b5cf6', description = '') {\n super();\n this.name = name;\n this.slug = slug ?? slugify(name);\n this.color = color;\n this.description = description;\n }\n\n matchKey(): string {\n return this.slug;\n }\n\n planLine(): string {\n return `Label: ${this.name} (slug=${this.slug})`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: MemberLabelFormData = {\n name: this.name,\n slug: this.slug,\n color: this.color,\n description: this.description,\n };\n const result = await client.createMemberLabel(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n","import type {\n JourneyGoalFormData,\n JourneyStepConnectionFormData,\n JourneyStepFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\nimport type { WorkflowBuilder } from './workflows';\n\nexport interface StepConnectionDraft {\n parent: JourneyStepBuilder;\n child: JourneyStepBuilder;\n condition?: string;\n required: boolean;\n timeoutSeconds?: number;\n}\n\nexport interface JourneyGoalDraft {\n name: string;\n description: string;\n step?: JourneyStepBuilder;\n completionCel?: string;\n value?: number;\n order: number;\n}\n\nexport class JourneyStepBuilder extends WorkspaceBuilderResource {\n readonly connections: StepConnectionDraft[] = [];\n\n constructor(\n readonly name: string,\n readonly journey: JourneyBuilder,\n readonly order = 0,\n readonly workflow?: WorkflowBuilder,\n readonly description = ''\n ) {\n super();\n }\n\n connectsTo(\n child: JourneyStepBuilder,\n condition?: string,\n required = false,\n timeoutSeconds?: number\n ): JourneyStepBuilder {\n this.connections.push({ parent: this, child, condition, required, timeoutSeconds });\n return this;\n }\n\n planLine(): string {\n return `Step: ${this.name}${this.workflow ? ` -> workflow '${this.workflow.name}'` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.journey._id === undefined) return;\n const payload: JourneyStepFormData = {\n name: this.name,\n description: this.description,\n order: this.order,\n ...(this.workflow?._id ? { workflowId: this.workflow._id } : {}),\n };\n const result = await client.createStep(this.journey._id, payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class JourneyBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly steps: JourneyStepBuilder[] = [];\n readonly goals: JourneyGoalDraft[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n }\n\n step(name: string, options: AnyRecord = {}): JourneyStepBuilder {\n const step = new JourneyStepBuilder(\n name,\n this,\n options.order ?? 0,\n options.workflow,\n options.description ?? ''\n );\n this.steps.push(step);\n return step;\n }\n\n goal(name: string, options: AnyRecord = {}): JourneyBuilder {\n this.goals.push({\n name,\n description: options.description ?? '',\n step: options.step,\n completionCel: options.completionCel ?? options.completion_cel,\n value: options.value,\n order: options.order ?? 0,\n });\n return this;\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.steps.length) parts.push(`${this.steps.length} steps`);\n if (this.goals.length) parts.push(`${this.goals.length} goals`);\n return `Journey: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const result = await client.createJourney({\n name: this.name,\n description: this.description,\n });\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport function buildJourneyConnectionPayload(\n connection: StepConnectionDraft\n): JourneyStepConnectionFormData | undefined {\n if (!connection.parent._uuid || !connection.child._uuid) return undefined;\n return {\n parentStepUuid: connection.parent._uuid,\n childStepUuid: connection.child._uuid,\n ...(connection.condition ? { celCondition: connection.condition } : {}),\n ...(connection.required ? { required: true } : {}),\n ...(connection.timeoutSeconds ? { timeoutSeconds: connection.timeoutSeconds } : {}),\n };\n}\n\nexport function buildJourneyGoalPayload(goal: JourneyGoalDraft): JourneyGoalFormData {\n return {\n name: goal.name,\n description: goal.description,\n order: goal.order,\n ...(goal.step?._uuid ? { goalStepUuid: goal.step._uuid } : {}),\n ...(goal.completionCel ? { completionCel: goal.completionCel } : {}),\n ...(goal.value !== undefined ? { value: goal.value } : {}),\n };\n}\n","import type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\n\nexport class RoleUpdate extends WorkspaceBuilderResource {\n constructor(\n readonly roleId: number,\n readonly workflowIds?: number[],\n readonly dataTypeIds?: number[]\n ) {\n super();\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.workflowIds) parts.push(`workflows=${JSON.stringify(this.workflowIds)}`);\n if (this.dataTypeIds) parts.push(`dataTypes=${JSON.stringify(this.dataTypeIds)}`);\n return `RoleUpdate: roleId=${this.roleId}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const payload: AnyRecord = {};\n if (this.workflowIds) payload.workflowIds = this.workflowIds;\n if (this.dataTypeIds) payload.dataTypeIds = this.dataTypeIds;\n if (Object.keys(payload).length) await client.updateMemberRole(this.roleId, payload);\n this._id = this.roleId;\n this._created = true;\n }\n}\n","import {\n EventRuleEventType,\n type CreateAgentRequest,\n type EventRuleActionType,\n type WorkflowFormData,\n} from '../types';\nimport type { Ability } from '../types/ability-types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { WorkspaceBuilderEventRule } from './event-rules';\nimport type { FormBuilder } from './forms';\nimport { type AnyRecord, WorkspaceBuilderResource } from './resource';\n\nconst PERM_KEYS: Record<string, string> = {\n canRead: 'canRead',\n canCreate: 'canCreate',\n canEdit: 'canEdit',\n can_read: 'canRead',\n can_create: 'canCreate',\n can_edit: 'canEdit',\n};\n\nconst ABILITY_TYPE_MAP: Record<string, string> = {\n data_access: 'integration:data_access',\n file_access: 'integration:file_access',\n escalation: 'oversight:escalation',\n};\n\nclass AbilityDef {\n readonly uuid = crypto.randomUUID();\n readonly config: AnyRecord;\n readonly enabled: boolean;\n readonly celCondition?: string;\n readonly form?: FormBuilder;\n readonly perms: AnyRecord = {};\n\n constructor(\n readonly abilityType: string,\n options: AnyRecord = {}\n ) {\n this.config = options.config ?? {};\n this.enabled = options.enabled ?? true;\n this.celCondition = options.celCondition ?? options.cel_condition;\n this.form = options.form;\n for (const [inputKey, outputKey] of Object.entries(PERM_KEYS)) {\n if (inputKey in options) this.perms[outputKey] = options[inputKey];\n }\n }\n\n toAbility(): Ability {\n const config = { ...this.config };\n if (this.form?._uuid) {\n config.dataTypeUuid = this.form._uuid;\n Object.assign(config, this.perms);\n }\n return {\n uuid: this.uuid,\n abilityType: ABILITY_TYPE_MAP[this.abilityType] ?? this.abilityType,\n config,\n enabled: this.enabled,\n ...(this.celCondition ? { celCondition: this.celCondition } : {}),\n };\n }\n}\n\nexport interface TaskTransition {\n parent: TaskBuilder;\n child: TaskBuilder;\n when: string;\n autoNext: boolean;\n required: boolean;\n}\n\nexport class TaskBuilder extends WorkspaceBuilderResource {\n readonly transitions: TaskTransition[] = [];\n readonly eventRules: WorkspaceBuilderEventRule[] = [];\n\n constructor(\n readonly name: string,\n readonly workflow: WorkflowBuilder,\n readonly prompt = '',\n readonly start = false,\n readonly description = ''\n ) {\n super();\n }\n\n transitionsTo(\n child: TaskBuilder,\n when: string,\n autoNext = false,\n required = false\n ): TaskBuilder {\n if (child === this) {\n throw new Error(`Task '${this.name}' cannot transition to itself`);\n }\n this.transitions.push({ parent: this, child, when, autoNext, required });\n return this;\n }\n\n onEnter(action: string, params: AnyRecord = {}, name?: string): TaskBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.TASK_EXECUTE,\n actionType: action as EventRuleActionType,\n actionParams: params,\n name,\n });\n return this;\n }\n\n initialMessage(message: string, suggestions?: string[]): TaskBuilder {\n return this.onEnter('assistant:message', {\n message,\n ...(suggestions ? { suggestions } : {}),\n });\n }\n\n planLine(): string {\n return `Task: ${this.name}${this.start ? ' [start]' : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed || this.workflow._id === undefined) return;\n const result = await client.createTask({\n workflowId: this.workflow._id,\n name: this.name,\n prompt: this.prompt,\n description: this.description,\n });\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class WorkflowBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly prompt?: string;\n readonly agentId?: number;\n readonly tasks: TaskBuilder[] = [];\n readonly abilities: AbilityDef[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n this.prompt = options.prompt;\n this.agentId = options.agentId ?? options.agent_id;\n }\n\n task(name: string, options: AnyRecord = {}): TaskBuilder {\n const task = new TaskBuilder(\n name,\n this,\n options.prompt ?? '',\n options.start ?? false,\n options.description ?? ''\n );\n this.tasks.push(task);\n return task;\n }\n\n ability(abilityType: string, options: AnyRecord = {}): WorkflowBuilder {\n this.abilities.push(new AbilityDef(abilityType, options));\n return this;\n }\n\n get startTask(): TaskBuilder | undefined {\n return this.tasks.find((task) => task.start) ?? this.tasks[0];\n }\n\n matchKey(): string {\n return this.name;\n }\n\n adopt(existing: AnyRecord): void {\n super.adopt(existing);\n const start = this.startTask;\n if (start && existing.startTaskId) {\n start._id = existing.startTaskId;\n start._existed = true;\n }\n }\n\n planLine(): string {\n const details: string[] = [];\n if (this.tasks.length) details.push(`${this.tasks.length} tasks`);\n if (this.abilities.length) details.push(`${this.abilities.length} abilities`);\n return `Workflow: ${this.name}${details.length ? ` (${details.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: WorkflowFormData = {\n name: this.name,\n description: this.description,\n createMode: 'taskless',\n ...(this.prompt ? { prompt: this.prompt } : {}),\n ...(this.agentId ? { agentId: this.agentId } : {}),\n ...(this.abilities.length\n ? { abilities: this.abilities.map((ability) => ability.toAbility()) }\n : {}),\n };\n const result = await client.createWorkflow(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class AgentBuilder extends WorkspaceBuilderResource {\n readonly chatModelId: string;\n readonly systemPrompt: string;\n readonly memberRoleId?: number;\n readonly tools: string[];\n readonly codeInterpreterEnabled: boolean;\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.chatModelId = options.chatModelId ?? options.chat_model_id ?? '';\n this.systemPrompt = options.systemPrompt ?? options.system_prompt ?? '';\n this.memberRoleId = options.roleId ?? options.role_id;\n this.tools = options.tools ?? [];\n this.codeInterpreterEnabled =\n options.codeInterpreterEnabled ?? options.code_interpreter_enabled ?? false;\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.chatModelId) parts.push(`model=${this.chatModelId}`);\n if (this.tools.length) parts.push(`${this.tools.length} tools`);\n return `Agent: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.memberRoleId === undefined) {\n throw new Error(`Agent '${this.name}' requires memberRoleId`);\n }\n if (!this.chatModelId) {\n throw new Error(`Agent '${this.name}' requires chatModelId`);\n }\n\n const payload: CreateAgentRequest = {\n name: this.name,\n memberRoleId: this.memberRoleId,\n chatModelId: this.chatModelId,\n systemPrompt: this.systemPrompt,\n ...(this.tools.length ? { tools: this.tools } : {}),\n ...(this.codeInterpreterEnabled ? { codeInterpreterEnabled: true } : {}),\n };\n const result = await client.createAgent(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n","import {\n EventRuleObjectType,\n type EventRule,\n type EventRuleFormData,\n type UpdateEventRuleFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport { MemberFilterBuilder, NotificationRuleBuilder, RoutineBuilder } from './automation';\nimport { FormBuilder, MemberLabelBuilder } from './forms';\nimport {\n buildJourneyConnectionPayload,\n buildJourneyGoalPayload,\n JourneyBuilder,\n JourneyStepBuilder,\n} from './journeys';\nimport {\n type AnyRecord,\n type ResourceSummary,\n resolveRefs,\n WorkspaceBuilderResource,\n} from './resource';\nimport { RoleUpdate } from './role-update';\nimport { AgentBuilder, TaskBuilder, type TaskTransition, WorkflowBuilder } from './workflows';\n\nconst PHASES = new Map<Function, number>([\n [FormBuilder, 0],\n [MemberLabelBuilder, 0],\n [AgentBuilder, 1],\n [WorkflowBuilder, 2],\n [TaskBuilder, 3],\n [RoleUpdate, 4],\n [MemberFilterBuilder, 5],\n [RoutineBuilder, 6],\n [NotificationRuleBuilder, 6],\n [JourneyBuilder, 7],\n [JourneyStepBuilder, 8],\n]);\n\nexport class WorkspaceBuilder {\n readonly resources: WorkspaceBuilderResource[] = [];\n\n constructor(readonly client: GravityRailWorkspaceClient) {}\n\n form(name: string, options: AnyRecord & { slug?: string } = {}): FormBuilder {\n const form = new FormBuilder(name, options.slug, options);\n this.resources.push(form);\n return form;\n }\n\n workflow(name: string, options: AnyRecord = {}): WorkflowBuilder {\n const workflow = new WorkflowBuilder(name, options);\n this.resources.push(workflow);\n return workflow;\n }\n\n label(\n name: string,\n options: { slug?: string; color?: string; description?: string } = {}\n ): MemberLabelBuilder {\n const label = new MemberLabelBuilder(\n name,\n options.slug,\n options.color,\n options.description ?? ''\n );\n this.resources.push(label);\n return label;\n }\n\n journey(name: string, options: AnyRecord = {}): JourneyBuilder {\n const journey = new JourneyBuilder(name, options);\n this.resources.push(journey);\n return journey;\n }\n\n agent(name: string, options: AnyRecord = {}): AgentBuilder {\n const agent = new AgentBuilder(name, options);\n this.resources.push(agent);\n return agent;\n }\n\n routine(name: string, cronSchedule = '', options: AnyRecord = {}): RoutineBuilder {\n const routine = new RoutineBuilder(name, cronSchedule, options);\n this.resources.push(routine);\n return routine;\n }\n\n memberFilter(name: string, options: AnyRecord = {}): MemberFilterBuilder {\n const filter = new MemberFilterBuilder(name, options);\n this.resources.push(filter);\n return filter;\n }\n\n notificationRule(name: string, options: AnyRecord = {}): NotificationRuleBuilder {\n const rule = new NotificationRuleBuilder(name, options);\n this.resources.push(rule);\n return rule;\n }\n\n roleUpdate(roleId: number, workflowIds?: number[], dataTypeIds?: number[]): RoleUpdate {\n const update = new RoleUpdate(roleId, workflowIds, dataTypeIds);\n this.resources.push(update);\n return update;\n }\n\n plan(): void {\n const resources = this.sortedResources();\n writeLine(`\\n${'='.repeat(50)}`);\n writeLine('Plan');\n writeLine('='.repeat(50));\n for (const resource of resources) {\n writeLine(` + ${resource.planLine()}`);\n }\n const wiring = this.collectWiringSummary(resources);\n if (wiring.length) {\n writeLine('\\n Wiring:');\n for (const line of wiring) writeLine(` ${line}`);\n }\n writeLine(`\\n Total: ${resources.length} resources, ${wiring.length} connections`);\n writeLine(`${'='.repeat(50)}\\n`);\n }\n\n async preview(): Promise<void> {\n const resources = this.sortedResources();\n await this.resolveExisting(resources);\n\n writeLine(`\\n${'='.repeat(50)}`);\n writeLine('Preview');\n writeLine('='.repeat(50));\n for (const resource of resources) {\n if (resource._existed) {\n writeLine(` = ${resource.planLine()} (exists, id=${resource._id})`);\n } else {\n writeLine(` + ${resource.planLine()}`);\n }\n }\n const wiring = this.collectWiringSummary(resources);\n if (wiring.length) {\n writeLine('\\n Wiring:');\n for (const line of wiring) writeLine(` ${line}`);\n }\n const toCreate = resources.filter((resource) => !resource._existed);\n const existing = resources.filter((resource) => resource._existed);\n writeLine(\n `\\n Total: ${toCreate.length} to create, ${existing.length} existing, ${wiring.length} connections`\n );\n writeLine(`${'='.repeat(50)}\\n`);\n }\n\n async apply(): Promise<ResourceSummary> {\n const resources = this.sortedResources();\n await this.resolveExisting(resources);\n const summary: ResourceSummary = {};\n\n writeLine('Applying...');\n for (const resource of resources) {\n try {\n if (resource._existed) {\n const key = resourceKey(resource);\n summary[key] ??= [];\n summary[key]!.push(resource._id);\n writeLine(` Exists ${resource.planLine()} -> id=${resource._id}`);\n continue;\n }\n\n await resource.apply(this.client);\n if (resource._created || resource._id !== undefined) {\n const key = resourceKey(resource);\n summary[key] ??= [];\n summary[key]!.push(resource._id);\n const startTag = resource instanceof TaskBuilder && resource.start ? ' [start]' : '';\n writeLine(` Created ${resource.planLine()}${startTag} -> id=${resource._id}`);\n } else {\n writeLine(` Skipped: ${resource.planLine()}`);\n }\n } catch (err) {\n writeLine(` FAILED: ${resource.planLine()}: ${summarizeError(err)}`);\n throw new ApplyError(resource, err, summary);\n }\n }\n\n await this.applyTransitions();\n await this.applyEventRules(resources);\n await this.applyJourneyConnections(resources);\n await this.applyJourneyGoals(resources);\n\n const count = Object.values(summary).reduce((total, ids) => total + ids.length, 0);\n writeLine(`\\nDone! Created ${count} resources.`);\n return summary;\n }\n\n private async resolveExisting(resources: WorkspaceBuilderResource[]): Promise<void> {\n const formSlugs = new Map(\n resources\n .filter((resource): resource is FormBuilder => resource instanceof FormBuilder)\n .map((resource) => [resource.slug, resource])\n );\n const labelSlugs = new Map(\n resources\n .filter(\n (resource): resource is MemberLabelBuilder => resource instanceof MemberLabelBuilder\n )\n .map((resource) => [resource.slug, resource])\n );\n const workflowNames = new Map(\n resources\n .filter((resource): resource is WorkflowBuilder => resource instanceof WorkflowBuilder)\n .map((resource) => [resource.name, resource])\n );\n\n if (formSlugs.size) {\n for (const existing of await this.client.getDataTypes()) {\n if (existing.slug && formSlugs.has(existing.slug)) {\n formSlugs.get(existing.slug)!.adopt(existing);\n }\n }\n }\n if (labelSlugs.size) {\n for (const existing of await this.client.getMemberLabels()) {\n if (existing.slug && labelSlugs.has(existing.slug)) {\n labelSlugs.get(existing.slug)!.adopt(existing);\n }\n }\n }\n if (!workflowNames.size) return;\n\n for (const existing of await this.client.getWorkflows()) {\n if (existing.name && workflowNames.has(existing.name)) {\n workflowNames.get(existing.name)!.adopt(existing);\n }\n }\n\n const adoptedWorkflows = resources.filter(\n (resource): resource is WorkflowBuilder =>\n resource instanceof WorkflowBuilder && resource._existed && resource._id !== undefined\n );\n if (!adoptedWorkflows.length) return;\n\n const existingTasks = await this.client.getTasks();\n for (const workflow of adoptedWorkflows) {\n const workflowTasks = existingTasks.filter((task) => task.workflowId === workflow._id);\n const taskByName = new Map(workflowTasks.map((task) => [task.name, task]));\n for (const taskBuilder of workflow.tasks) {\n const match = taskByName.get(taskBuilder.name);\n if (match) taskBuilder.adopt(match);\n }\n\n const ids = new Map<number, TaskBuilder[]>();\n for (const taskBuilder of workflow.tasks) {\n if (taskBuilder._id !== undefined) {\n ids.set(taskBuilder._id, [...(ids.get(taskBuilder._id) ?? []), taskBuilder]);\n }\n }\n for (const builders of ids.values()) {\n if (builders.length <= 1) continue;\n const nameAdopted = builders.filter((task) => taskByName.has(task.name));\n for (const task of builders.filter((builder) => !nameAdopted.includes(builder))) {\n task._id = undefined;\n task._existed = false;\n }\n }\n }\n }\n\n private sortedResources(): WorkspaceBuilderResource[] {\n const all: WorkspaceBuilderResource[] = [];\n for (const resource of this.resources) {\n all.push(resource);\n if (resource instanceof WorkflowBuilder) {\n const start = resource.startTask;\n const tasks =\n start === undefined\n ? resource.tasks\n : [start, ...resource.tasks.filter((task) => task !== start)];\n all.push(...tasks);\n } else if (resource instanceof JourneyBuilder) {\n all.push(...resource.steps);\n }\n }\n return all.sort(\n (a, b) => (PHASES.get(a.constructor) ?? 99) - (PHASES.get(b.constructor) ?? 99)\n );\n }\n\n private collectWiringSummary(resources: WorkspaceBuilderResource[]): string[] {\n const lines: string[] = [];\n for (const resource of resources) {\n if (resource instanceof TaskBuilder) {\n for (const transition of resource.transitions) {\n lines.push(`${transition.parent.name} -> ${transition.child.name}`);\n }\n for (const rule of resource.eventRules) {\n lines.push(`${rule.actionType} on enter '${resource.name}'`);\n }\n } else if (resource instanceof FormBuilder) {\n for (const rule of resource.eventRules) {\n lines.push(`${rule.actionType} on ${rule.eventType} '${resource.name}'`);\n }\n } else if (resource instanceof RoutineBuilder) {\n for (const rule of resource.rules)\n lines.push(`${rule.actionType} rule on '${resource.name}'`);\n } else if (resource instanceof JourneyStepBuilder) {\n for (const connection of resource.connections) {\n lines.push(`${connection.parent.name} -> ${connection.child.name}`);\n }\n } else if (resource instanceof JourneyBuilder) {\n for (const goal of resource.goals) lines.push(`Goal: ${goal.name}`);\n }\n }\n return lines;\n }\n\n private async applyTransitions(): Promise<void> {\n const parentChildren = new Map<TaskBuilder, TaskTransition[]>();\n for (const resource of this.sortedResources()) {\n if (!(resource instanceof TaskBuilder)) continue;\n for (const transition of resource.transitions) {\n parentChildren.set(transition.parent, [\n ...(parentChildren.get(transition.parent) ?? []),\n transition,\n ]);\n }\n }\n\n for (const [parent, transitions] of parentChildren) {\n if (parent._id === undefined) continue;\n const childTasks = transitions.flatMap((transition) => {\n const taskId = transition.child._id;\n if (taskId === undefined || taskId === parent._id) return [];\n return [\n {\n taskId,\n choicePrompt: transition.when,\n celCondition: null,\n autoNext: transition.autoNext,\n required: transition.required,\n },\n ];\n });\n if (!childTasks.length) continue;\n await this.client.updateTask(parent._id, { childTasks });\n writeLine(\n ` Wired: ${parent.name} -> [${transitions.map((tr) => tr.child.name).join(', ')}]`\n );\n }\n }\n\n private async applyEventRules(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (resource instanceof TaskBuilder) {\n for (const rule of resource.eventRules) {\n try {\n const payload: EventRuleFormData = {\n objectType: EventRuleObjectType.TASK,\n taskId: resource._id,\n eventType: rule.eventType,\n actionType: rule.actionType,\n actionParams: resolveRefs(rule.actionParams),\n ...(rule.name ? { name: rule.name } : {}),\n };\n await this.applyEventRule(\n payload,\n `${rule.actionType} on enter '${resource.name}'`\n );\n } catch (err) {\n handleEventRuleApplyFailure(resource.name, err);\n }\n }\n } else if (resource instanceof FormBuilder) {\n for (const rule of resource.eventRules) {\n try {\n const payload: EventRuleFormData = {\n objectType: EventRuleObjectType.DATA_RECORD,\n dataTypeId: resource._id,\n eventType: rule.eventType,\n actionType: rule.actionType,\n actionParams: resolveRefs(rule.actionParams),\n ...(rule.condition ? { conditions: rule.condition } : {}),\n ...(rule.name ? { name: rule.name } : {}),\n };\n await this.applyEventRule(\n payload,\n `${rule.actionType} on ${rule.eventType} '${resource.name}'`\n );\n } catch (err) {\n handleEventRuleApplyFailure(resource.name, err);\n }\n }\n }\n }\n }\n\n private async applyEventRule(payload: EventRuleFormData, label: string): Promise<void> {\n const existing = await this.findMatchingEventRule(payload);\n if (!existing) {\n await this.client.createEventRule(payload);\n writeLine(` Wired: ${label}`);\n return;\n }\n\n const update = eventRuleUpdate(existing, payload);\n if (Object.keys(update).length) {\n await this.client.updateEventRule(existing.id, update);\n writeLine(` Updated: ${label}`);\n } else {\n writeLine(` Exists: ${label}`);\n }\n }\n\n private async findMatchingEventRule(payload: EventRuleFormData): Promise<EventRule | undefined> {\n const sourceFilter = eventRuleSourceFilter(payload);\n const candidates = await this.client.searchEventRules({\n objectType: payload.objectType,\n eventType: payload.eventType,\n actionType: payload.actionType,\n includeDisabled: true,\n ...sourceFilter,\n });\n return candidates.find((candidate) => eventRulesMatch(candidate, payload));\n }\n\n private async applyJourneyConnections(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (!(resource instanceof JourneyStepBuilder)) continue;\n for (const connection of resource.connections) {\n if (resource.journey._id === undefined) continue;\n const payload = buildJourneyConnectionPayload(connection);\n if (!payload) continue;\n await this.client.createConnection(resource.journey._id, payload);\n writeLine(` Wired: ${connection.parent.name} -> ${connection.child.name}`);\n }\n }\n }\n\n private async applyJourneyGoals(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (!(resource instanceof JourneyBuilder) || resource._id === undefined) continue;\n for (const goal of resource.goals) {\n await this.client.createGoal(resource._id, buildJourneyGoalPayload(goal));\n writeLine(` Created goal: ${goal.name}`);\n }\n }\n }\n}\n\nexport class ApplyError extends Error {\n constructor(\n readonly resource: WorkspaceBuilderResource,\n readonly cause: unknown,\n readonly createdSoFar: ResourceSummary\n ) {\n super(\n `Failed creating ${resource.planLine()}: ${summarizeError(cause)}\\nAlready created: ${JSON.stringify(\n createdSoFar\n )}`\n );\n }\n}\n\nfunction resourceKey(resource: WorkspaceBuilderResource): string {\n if (resource instanceof RoleUpdate) return 'roleUpdates';\n if (resource instanceof FormBuilder) return 'forms';\n if (resource instanceof MemberLabelBuilder) return 'labels';\n if (resource instanceof WorkflowBuilder) return 'workflows';\n if (resource instanceof TaskBuilder) return 'tasks';\n if (resource instanceof MemberFilterBuilder) return 'memberFilters';\n if (resource instanceof RoutineBuilder) return 'routines';\n if (resource instanceof NotificationRuleBuilder) return 'notificationRules';\n if (resource instanceof JourneyBuilder) return 'journeys';\n if (resource instanceof JourneyStepBuilder) return 'journeySteps';\n if (resource instanceof AgentBuilder) return 'agents';\n return 'resources';\n}\n\nconst SEARCHABLE_EVENT_RULE_SOURCE_FIELDS = [\n 'taskId',\n 'dataTypeId',\n 'routineId',\n 'workflowId',\n 'journeyStepId',\n] as const;\n\nconst EVENT_RULE_SOURCE_FIELDS = [\n ...SEARCHABLE_EVENT_RULE_SOURCE_FIELDS,\n 'calendarId',\n 'calendarEventTypeId',\n] as const;\n\ntype SearchableEventRuleSourceField = (typeof SEARCHABLE_EVENT_RULE_SOURCE_FIELDS)[number];\n\nfunction eventRuleSourceFilter(\n payload: EventRuleFormData\n): Partial<Record<SearchableEventRuleSourceField, number>> {\n const filter: Partial<Record<SearchableEventRuleSourceField, number>> = {};\n for (const field of SEARCHABLE_EVENT_RULE_SOURCE_FIELDS) {\n const value = payload[field];\n if (value !== undefined && value !== null) {\n filter[field] = value;\n }\n }\n return filter;\n}\n\nfunction eventRulesMatch(existing: EventRule, payload: EventRuleFormData): boolean {\n if (normalizeString(existing.name) !== normalizeString(payload.name)) return false;\n if (existing.objectType !== payload.objectType) return false;\n if (existing.eventType !== payload.eventType) return false;\n if (existing.actionType !== payload.actionType) return false;\n\n for (const field of EVENT_RULE_SOURCE_FIELDS) {\n if ((existing[field] ?? null) !== (payload[field] ?? null)) return false;\n }\n\n if (normalizeString(payload.name)) return true;\n if (normalizeString(existing.conditions) !== normalizeString(payload.conditions)) return false;\n if (!eventRuleValueEqual(existing.actionParams, payload.actionParams ?? null)) return false;\n if (!eventRuleValueEqual(existing.triggerParams, payload.triggerParams ?? null)) return false;\n return true;\n}\n\nfunction eventRuleUpdate(existing: EventRule, payload: EventRuleFormData): UpdateEventRuleFormData {\n const update: UpdateEventRuleFormData = {};\n const conditions = payload.conditions ?? null;\n if (normalizeString(existing.conditions) !== normalizeString(conditions)) {\n update.conditions = conditions;\n }\n const actionParams = payload.actionParams ?? null;\n if (!eventRuleValueEqual(existing.actionParams, actionParams)) {\n update.actionParams = payload.actionParams;\n }\n const triggerParams = payload.triggerParams ?? null;\n if (!eventRuleValueEqual(existing.triggerParams, triggerParams)) {\n update.triggerParams = payload.triggerParams;\n }\n const active = payload.active ?? true;\n if (existing.active !== active) {\n update.active = active;\n }\n const delay = payload.delay ?? 0;\n if (existing.delay !== delay) {\n update.delay = delay;\n }\n const order = payload.order ?? 0;\n if (existing.order !== order) {\n update.order = order;\n }\n return update;\n}\n\nfunction normalizeString(value: string | null | undefined): string {\n return value ?? '';\n}\n\nfunction eventRuleValueEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(stableValue(left)) === JSON.stringify(stableValue(right));\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== 'object') return value;\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, nested]) => [key, stableValue(nested)])\n );\n}\n\nfunction writeLine(message = ''): void {\n process.stdout.write(`${message}\\n`);\n}\n\nfunction handleEventRuleApplyFailure(resourceName: string, err: unknown): void {\n if (hasStatus(err, 403)) {\n writeLine(\n ` WARNING: Event rule on '${resourceName}' failed (retry exec() with scopes=['automations:admin'])`\n );\n return;\n }\n const summary = summarizeError(err);\n writeLine(` FAILED: Event rule on '${resourceName}': ${summary}`);\n throw new Error(`Failed wiring event rule on '${resourceName}': ${summary}`);\n}\n\nfunction summarizeError(err: unknown): string {\n if (err instanceof Error) return err.name || 'Error';\n return typeof err;\n}\n\nfunction hasStatus(err: unknown, status: number): boolean {\n if (typeof err === 'object' && err !== null) {\n const candidate = err as { status?: unknown; statusCode?: unknown };\n if (candidate.status === status || candidate.statusCode === status) return true;\n }\n const message = err instanceof Error ? err.message : typeof err === 'string' ? err : '';\n return message.includes(String(status));\n}\n\nexport async function runWorkspaceScript(\n client: GravityRailWorkspaceClient,\n build: (workspace: WorkspaceBuilder) => void | Promise<void>,\n mode = 'plan'\n): Promise<ResourceSummary | void> {\n const workspace = new WorkspaceBuilder(client);\n await build(workspace);\n if (mode === 'plan') return workspace.plan();\n if (mode === 'preview') return workspace.preview();\n if (mode === 'apply') return workspace.apply();\n throw new Error(`Unknown mode '${mode}'. Use plan, preview, or apply.`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,SAAS,SAAS,OAAoC;AAC1D,SAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACtE;AAEA,SAAS,cAAc,OAAoC;AACxD,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,SAAO,cAAc,OAAO,aAAa,cAAc;AAC1D;AAEO,SAAS,QAAQ,MAAsB;AAC3C,SAAO,KAAK,YAAY,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,GAAG;AACrE;AAEO,IAAe,2BAAf,MAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EAKX,WAA+B;AAC5B,WAAO;AAAA,EACV;AAAA,EAEA,MAAM,UAA2B;AAC9B,SAAK,MAAM,SAAS;AACpB,SAAK,QAAQ,SAAS;AACtB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,SAAS,YAAY,QAA8B;AACvD,SAAO,gBAAgB,MAAM;AAChC;AAEA,SAAS,gBAAgB,OAAyB;AAC/C,MAAI,iBAAiB,yBAA0B,QAAO,MAAM;AAC5D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,eAAe;AAC1D,MAAI,CAAC,cAAc,KAAK,EAAG,QAAO;AAElC,QAAM,MAAiB,CAAC;AACxB,aAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,GAAG,IAAI,gBAAgB,WAAW;AAAA,EACzC;AACA,SAAO;AACV;;;ACrCO,IAAM,sBAAN,cAAkC,yBAAyB;AAAA,EAI/D,YACY,MACT,UAAqB,CAAC,GACvB;AACC,UAAM;AAHG;AAIT,SAAK,cAAc,QAAQ,eAAe;AAAA,EAC7C;AAAA,EATS;AAAA,EACA,QAAoC,CAAC;AAAA,EAU9C,QACG,YACA,YACA,UAAoD,CAAC,GACjC;AACpB,SAAK,MAAM,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,MAC5D,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,IACnD,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,WAAmB;AAChB,WAAO,iBAAiB,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,MAAM,YAAY,EAAE;AAAA,EAC/F;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,UAAM,UAAgC;AAAA,MACnC,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,OAAO,KAAK;AAAA,IACf;AACA,UAAM,SAAS,MAAM,OAAO,mBAAmB,OAAO;AACtD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AASO,IAAM,iBAAN,cAA6B,yBAAyB;AAAA,EAK1D,YACY,MACA,eAAe,IACxB,UAAqB,CAAC,GACvB;AACC,UAAM;AAJG;AACA;AAIT,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,cAAc,QAAQ,eAAe;AAAA,EAC7C;AAAA,EAZS;AAAA,EACA;AAAA,EACA,QAA4B,CAAC;AAAA,EAYtC,QACG,YACA,UAII,CAAC,GACU;AACf,SAAK,MAAM,KAAK;AAAA,MACb;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,cAAc,QAAQ;AAAA,MACtB,cAAc,QAAQ,gBAAgB,CAAC;AAAA,IAC1C,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,WAAmB;AAChB,UAAM,QAAQ;AAAA,MACX,GAAI,KAAK,eAAe,CAAC,QAAQ,KAAK,YAAY,EAAE,IAAI,CAAC;AAAA,MACzD,GAAI,KAAK,MAAM,SAAS,CAAC,GAAG,KAAK,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC1D,KAAK,SAAS,WAAW;AAAA,IAC5B;AACA,WAAO,YAAY,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,UAAM,aAAa,KAAK,MAAM,IAAI,CAAC,SAAS;AACzC,YAAM,eAAe,EAAE,GAAG,KAAK,aAAa;AAC5C,UAAI,KAAK,UAAU,QAAQ,OAAW,cAAa,aAAa,KAAK,SAAS;AAC9E,UAAI,KAAK,cAAc,QAAQ;AAC5B,qBAAa,iBAAiB,KAAK,aAAa;AACnD,aAAO;AAAA,QACJ,MAAM,OAAO,WAAW;AAAA,QACxB;AAAA,QACA;AAAA,QACA,YAAY,KAAK;AAAA,QACjB;AAAA,QACA,QAAQ;AAAA,MACX;AAAA,IACH,CAAC;AACD,UAAM,UAAgC;AAAA,MACnC,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK,eAAe,SAAS;AAAA,MAC3C,iBAAiB,KAAK;AAAA,MACtB,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,MAC5D,GAAI,WAAW,SAAS,EAAE,WAAW,IAAI,CAAC;AAAA,IAC7C;AACA,UAAM,SAAS,MAAM,OAAO,cAAc,OAAO;AACjD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,IAAM,0BAAN,cAAsC,yBAAyB;AAAA,EASnE,YACY,MACT,UAAqB,CAAC,GACvB;AACC,UAAM;AAHG;AAIT,SAAK,aAAa,QAAQ,cAAc,QAAQ,eAAe;AAC/D,SAAK,WAAW,QAAQ,YAAY,QAAQ;AAC5C,SAAK,WAAW,QAAQ;AACxB,SAAK,SAAS,QAAQ,UAAU,QAAQ;AACxC,SAAK,YAAY,QAAQ,QAAQ,aAAa,QAAQ,UAAU;AAChE,SAAK,cAAc,QAAQ,QAAQ,eAAe,QAAQ,YAAY;AACtE,SAAK,cAAc,QAAQ,QAAQ,eAAe,QAAQ,YAAY;AAAA,EACzE;AAAA,EApBS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBT,WAAmB;AAChB,UAAM,QAAkB,CAAC;AACzB,QAAI,KAAK,aAAa,OAAW,OAAM,KAAK,YAAY,KAAK,QAAQ,EAAE;AACvE,QAAI,KAAK,SAAU,OAAM,KAAK,aAAa,KAAK,SAAS,IAAI,GAAG;AAChE,WAAO,qBAAqB,KAAK,IAAI,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAAA,EACvF;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,aAAa,QAAW;AAC9B,YAAM,IAAI,MAAM,sBAAsB,KAAK,IAAI,qBAAqB;AAAA,IACvE;AACA,UAAM,UAAkC;AAAA,MACrC,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,YAAY,KAAK,UAAU;AAAA,MAC3B,QAAQ,KAAK,UAAU;AAAA,MACvB,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,IACrB;AACA,UAAM,SAAS,MAAM,OAAO,uBAAuB,OAAO;AAC1D,SAAK,MAAM,OAAO;AAClB,SAAK,WAAW;AAAA,EACnB;AACH;;;ACtKA,SAAS,iBAAiB,SAA8B;AACrD,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAClC,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,SAAS,KAAK,EAAG,QAAO;AAC5B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACvB,WAAO,QAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,EAAE,EAAE;AAAA,EAC/E;AACA,SAAO,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,OAAO,MAAM,GAAG,OAAO,OAAO,MAAM,EAAE,EAAE;AACpF;AAEA,SAAS,iBACN,WACA,MACA,MACA,UAMI,CAAC,GACe;AACpB,SAAO;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,QAAQ,QAAQ,QAAQ;AAAA,IAClC,OAAO,QAAQ,SAAS;AAAA,IACxB,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IAClE,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,IACtD,GAAI,QAAQ,MAAM,EAAE,aAAa,QAAQ,IAAI,IAAI,CAAC;AAAA,EACrD;AACH;AAEO,IAAM,cAAN,cAA0B,yBAAyB;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAgC,CAAC;AAAA,EACjC,aAA0C,CAAC;AAAA,EAEpD,YAAY,MAAc,MAAe,UAAqB,CAAC,GAAG;AAC/D,UAAM;AACN,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ,QAAQ,IAAI;AAChC,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,aAAa,QAAQ,cAAc;AAExC,eAAW,SAAS,QAAQ,UAAU,CAAC,GAAG;AACvC,UAAI,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,KAAM;AACrC,YAAM,UAAU,MAAM,UAAU,iBAAiB,MAAM,OAAO,IAAI;AAClE,WAAK,OAAO;AAAA,QACT;AAAA,UACI,MAAM,aAAa,MAAM;AAAA,UAC1B,MAAM;AAAA,UACN,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,UAChC;AAAA,YACG,UAAU,QAAQ,MAAM,YAAY,MAAM,UAAU;AAAA,YACpD,OAAO,MAAM,SAAS;AAAA,YACtB,aAAa,MAAM;AAAA,YACnB;AAAA,UACH;AAAA,QACH;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA,EAEA,MACG,WACA,MACA,MACA,UAMI,CAAC,GACO;AACZ,SAAK,OAAO,KAAK,iBAAiB,WAAW,MAAM,MAAM,OAAO,CAAC;AACjE,WAAO;AAAA,EACV;AAAA,EAEA,UAAU,MAAc,MAAc,SAAgB,WAAsB,CAAC,GAAgB;AAC1F,WAAO,KAAK,yBAA0B,MAAM,MAAM;AAAA,MAC/C,GAAG;AAAA,MACH,SAAS,iBAAiB,OAAO;AAAA,IACpC,CAAC;AAAA,EACJ;AAAA,EAEA,UAAU,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC1E,WAAO,KAAK,yBAA0B,MAAM,MAAM,QAAQ;AAAA,EAC7D;AAAA,EAEA,YAAY,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC5E,WAAO,KAAK,6BAA4B,MAAM,MAAM,QAAQ;AAAA,EAC/D;AAAA,EAEA,UAAU,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC1E,WAAO,KAAK,yBAA0B,MAAM,MAAM,QAAQ;AAAA,EAC7D;AAAA,EAEA,aAAa,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC7E,WAAO,KAAK,+BAA6B,MAAM,MAAM,QAAQ;AAAA,EAChE;AAAA,EAEA,cAAc,MAAc,MAAc,KAAa,WAAsB,CAAC,GAAgB;AAC3F,WAAO,KAAK,iCAA8B,MAAM,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC;AAAA,EAC7E;AAAA,EAEA,WAAW,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC3E,WAAO,KAAK,2BAA2B,MAAM,MAAM,QAAQ;AAAA,EAC9D;AAAA,EAEA,WAAW,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC3E,WAAO,KAAK,2BAA2B,MAAM,MAAM,QAAQ;AAAA,EAC9D;AAAA,EAEA,cAAc,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC9E,WAAO,KAAK,iCAA8B,MAAM,MAAM,QAAQ;AAAA,EACjE;AAAA,EAEA,aAAa,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC7E,WAAO,KAAK,+BAA6B,MAAM,MAAM,QAAQ;AAAA,EAChE;AAAA,EAEA,cAAc,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC9E,WAAO,KAAK,iCAA8B,MAAM,MAAM,QAAQ;AAAA,EACjE;AAAA,EAEA,eAAe,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC/E,WAAO,KAAK,uCAAiC,MAAM,MAAM,QAAQ;AAAA,EACpE;AAAA,EAEA,eAAe,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC/E,WAAO,KAAK,uCAAiC,MAAM,MAAM,QAAQ;AAAA,EACpE;AAAA,EAEA,WAAW,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC3E,WAAO,KAAK,2BAA2B,MAAM,MAAM,QAAQ;AAAA,EAC9D;AAAA,EAEA,YAAY,MAAc,MAAc,WAAsB,CAAC,GAAgB;AAC5E,WAAO,KAAK,6BAA4B,MAAM,MAAM,QAAQ;AAAA,EAC/D;AAAA,EAEA,gBACG,QACA,SAAoB,CAAC,GACrB,WACA,MACY;AACZ,SAAK,WAAW,KAAK;AAAA,MAClB;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,MACd;AAAA,MACA;AAAA,IACH,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,gBACG,QACA,SAAoB,CAAC,GACrB,WACA,MACY;AACZ,SAAK,WAAW,KAAK;AAAA,MAClB;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,MACd;AAAA,MACA;AAAA,IACH,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,WAAmB;AAChB,WAAO,KAAK;AAAA,EACf;AAAA,EAEA,WAAmB;AAChB,WAAO,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,KAAK,KAAK,OAAO,MAAM;AAAA,EACtE;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,SAAU;AACnB,UAAM,UAA4B;AAAA,MAC/B,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,cAAc,KAAK;AAAA,MACnB,QAAQ,KAAK;AAAA,IAChB;AACA,UAAM,SAAS,MAAM,OAAO,eAAe,OAAO;AAClD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,IAAM,qBAAN,cAAiC,yBAAyB;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,MAAc,MAAe,QAAQ,UAAU,cAAc,IAAI;AAC1E,UAAM;AACN,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ,QAAQ,IAAI;AAChC,SAAK,QAAQ;AACb,SAAK,cAAc;AAAA,EACtB;AAAA,EAEA,WAAmB;AAChB,WAAO,KAAK;AAAA,EACf;AAAA,EAEA,WAAmB;AAChB,WAAO,UAAU,KAAK,IAAI,UAAU,KAAK,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,SAAU;AACnB,UAAM,UAA+B;AAAA,MAClC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,IACrB;AACA,UAAM,SAAS,MAAM,OAAO,kBAAkB,OAAO;AACrD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;;;ACxOO,IAAM,qBAAN,cAAiC,yBAAyB;AAAA,EAG9D,YACY,MACA,SACA,QAAQ,GACR,UACA,cAAc,IACxB;AACC,UAAM;AANG;AACA;AACA;AACA;AACA;AAAA,EAGZ;AAAA,EAVS,cAAqC,CAAC;AAAA,EAY/C,WACG,OACA,WACA,WAAW,OACX,gBACmB;AACnB,SAAK,YAAY,KAAK,EAAE,QAAQ,MAAM,OAAO,WAAW,UAAU,eAAe,CAAC;AAClF,WAAO;AAAA,EACV;AAAA,EAEA,WAAmB;AAChB,WAAO,SAAS,KAAK,IAAI,GAAG,KAAK,WAAW,iBAAiB,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,EAC1F;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,QAAQ,QAAQ,OAAW;AACpC,UAAM,UAA+B;AAAA,MAClC,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,GAAI,KAAK,UAAU,MAAM,EAAE,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,IACjE;AACA,UAAM,SAAS,MAAM,OAAO,WAAW,KAAK,QAAQ,KAAK,OAAO;AAChE,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,IAAM,iBAAN,cAA6B,yBAAyB;AAAA,EAK1D,YACY,MACT,UAAqB,CAAC,GACvB;AACC,UAAM;AAHG;AAIT,SAAK,cAAc,QAAQ,eAAe;AAAA,EAC7C;AAAA,EAVS;AAAA,EACA,QAA8B,CAAC;AAAA,EAC/B,QAA4B,CAAC;AAAA,EAUtC,KAAK,MAAc,UAAqB,CAAC,GAAuB;AAC7D,UAAM,OAAO,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB,QAAQ;AAAA,MACR,QAAQ,eAAe;AAAA,IAC1B;AACA,SAAK,MAAM,KAAK,IAAI;AACpB,WAAO;AAAA,EACV;AAAA,EAEA,KAAK,MAAc,UAAqB,CAAC,GAAmB;AACzD,SAAK,MAAM,KAAK;AAAA,MACb;AAAA,MACA,aAAa,QAAQ,eAAe;AAAA,MACpC,MAAM,QAAQ;AAAA,MACd,eAAe,QAAQ,iBAAiB,QAAQ;AAAA,MAChD,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,WAAmB;AAChB,UAAM,QAAkB,CAAC;AACzB,QAAI,KAAK,MAAM,OAAQ,OAAM,KAAK,GAAG,KAAK,MAAM,MAAM,QAAQ;AAC9D,QAAI,KAAK,MAAM,OAAQ,OAAM,KAAK,GAAG,KAAK,MAAM,MAAM,QAAQ;AAC9D,WAAO,YAAY,KAAK,IAAI,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAAA,EAC9E;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,UAAM,SAAS,MAAM,OAAO,cAAc;AAAA,MACvC,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,IACrB,CAAC;AACD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,SAAS,8BACb,YAC0C;AAC1C,MAAI,CAAC,WAAW,OAAO,SAAS,CAAC,WAAW,MAAM,MAAO,QAAO;AAChE,SAAO;AAAA,IACJ,gBAAgB,WAAW,OAAO;AAAA,IAClC,eAAe,WAAW,MAAM;AAAA,IAChC,GAAI,WAAW,YAAY,EAAE,cAAc,WAAW,UAAU,IAAI,CAAC;AAAA,IACrE,GAAI,WAAW,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,IAChD,GAAI,WAAW,iBAAiB,EAAE,gBAAgB,WAAW,eAAe,IAAI,CAAC;AAAA,EACpF;AACH;AAEO,SAAS,wBAAwB,MAA6C;AAClF,SAAO;AAAA,IACJ,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,OAAO,KAAK;AAAA,IACZ,GAAI,KAAK,MAAM,QAAQ,EAAE,cAAc,KAAK,KAAK,MAAM,IAAI,CAAC;AAAA,IAC5D,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,cAAc,IAAI,CAAC;AAAA,IAClE,GAAI,KAAK,UAAU,SAAY,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,EAC3D;AACH;;;AC9IO,IAAM,aAAN,cAAyB,yBAAyB;AAAA,EACtD,YACY,QACA,aACA,aACV;AACC,UAAM;AAJG;AACA;AACA;AAAA,EAGZ;AAAA,EAEA,WAAmB;AAChB,UAAM,QAAkB,CAAC;AACzB,QAAI,KAAK,YAAa,OAAM,KAAK,aAAa,KAAK,UAAU,KAAK,WAAW,CAAC,EAAE;AAChF,QAAI,KAAK,YAAa,OAAM,KAAK,aAAa,KAAK,UAAU,KAAK,WAAW,CAAC,EAAE;AAChF,WAAO,sBAAsB,KAAK,MAAM,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAAA,EAC1F;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,UAAM,UAAqB,CAAC;AAC5B,QAAI,KAAK,YAAa,SAAQ,cAAc,KAAK;AACjD,QAAI,KAAK,YAAa,SAAQ,cAAc,KAAK;AACjD,QAAI,OAAO,KAAK,OAAO,EAAE,OAAQ,OAAM,OAAO,iBAAiB,KAAK,QAAQ,OAAO;AACnF,SAAK,MAAM,KAAK;AAChB,SAAK,WAAW;AAAA,EACnB;AACH;;;AChBA,IAAM,YAAoC;AAAA,EACvC,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AACb;AAEA,IAAM,mBAA2C;AAAA,EAC9C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AACf;AAEA,IAAM,aAAN,MAAiB;AAAA,EAQd,YACY,aACT,UAAqB,CAAC,GACvB;AAFU;AAGT,SAAK,SAAS,QAAQ,UAAU,CAAC;AACjC,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,eAAe,QAAQ,gBAAgB,QAAQ;AACpD,SAAK,OAAO,QAAQ;AACpB,eAAW,CAAC,UAAU,SAAS,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC5D,UAAI,YAAY,QAAS,MAAK,MAAM,SAAS,IAAI,QAAQ,QAAQ;AAAA,IACpE;AAAA,EACH;AAAA,EAlBS,OAAO,OAAO,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAmB,CAAC;AAAA,EAe7B,YAAqB;AAClB,UAAM,SAAS,EAAE,GAAG,KAAK,OAAO;AAChC,QAAI,KAAK,MAAM,OAAO;AACnB,aAAO,eAAe,KAAK,KAAK;AAChC,aAAO,OAAO,QAAQ,KAAK,KAAK;AAAA,IACnC;AACA,WAAO;AAAA,MACJ,MAAM,KAAK;AAAA,MACX,aAAa,iBAAiB,KAAK,WAAW,KAAK,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,KAAK;AAAA,MACd,GAAI,KAAK,eAAe,EAAE,cAAc,KAAK,aAAa,IAAI,CAAC;AAAA,IAClE;AAAA,EACH;AACH;AAUO,IAAM,cAAN,cAA0B,yBAAyB;AAAA,EAIvD,YACY,MACA,UACA,SAAS,IACT,QAAQ,OACR,cAAc,IACxB;AACC,UAAM;AANG;AACA;AACA;AACA;AACA;AAAA,EAGZ;AAAA,EAXS,cAAgC,CAAC;AAAA,EACjC,aAA0C,CAAC;AAAA,EAYpD,cACG,OACA,MACA,WAAW,OACX,WAAW,OACC;AACZ,QAAI,UAAU,MAAM;AACjB,YAAM,IAAI,MAAM,SAAS,KAAK,IAAI,+BAA+B;AAAA,IACpE;AACA,SAAK,YAAY,KAAK,EAAE,QAAQ,MAAM,OAAO,MAAM,UAAU,SAAS,CAAC;AACvE,WAAO;AAAA,EACV;AAAA,EAEA,QAAQ,QAAgB,SAAoB,CAAC,GAAG,MAA4B;AACzE,SAAK,WAAW,KAAK;AAAA,MAClB;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,MACd;AAAA,IACH,CAAC;AACD,WAAO;AAAA,EACV;AAAA,EAEA,eAAe,SAAiB,aAAqC;AAClE,WAAO,KAAK,QAAQ,qBAAqB;AAAA,MACtC;AAAA,MACA,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,IACxC,CAAC;AAAA,EACJ;AAAA,EAEA,WAAmB;AAChB,WAAO,SAAS,KAAK,IAAI,GAAG,KAAK,QAAQ,aAAa,EAAE;AAAA,EAC3D;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,YAAY,KAAK,SAAS,QAAQ,OAAW;AACtD,UAAM,SAAS,MAAM,OAAO,WAAW;AAAA,MACpC,YAAY,KAAK,SAAS;AAAA,MAC1B,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK;AAAA,IACrB,CAAC;AACD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,IAAM,kBAAN,cAA8B,yBAAyB;AAAA,EAO3D,YACY,MACT,UAAqB,CAAC,GACvB;AACC,UAAM;AAHG;AAIT,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU,QAAQ,WAAW,QAAQ;AAAA,EAC7C;AAAA,EAdS;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAuB,CAAC;AAAA,EACxB,YAA0B,CAAC;AAAA,EAYpC,KAAK,MAAc,UAAqB,CAAC,GAAgB;AACtD,UAAM,OAAO,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA,QAAQ,UAAU;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,QAAQ,eAAe;AAAA,IAC1B;AACA,SAAK,MAAM,KAAK,IAAI;AACpB,WAAO;AAAA,EACV;AAAA,EAEA,QAAQ,aAAqB,UAAqB,CAAC,GAAoB;AACpE,SAAK,UAAU,KAAK,IAAI,WAAW,aAAa,OAAO,CAAC;AACxD,WAAO;AAAA,EACV;AAAA,EAEA,IAAI,YAAqC;AACtC,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC;AAAA,EAC/D;AAAA,EAEA,WAAmB;AAChB,WAAO,KAAK;AAAA,EACf;AAAA,EAEA,MAAM,UAA2B;AAC9B,UAAM,MAAM,QAAQ;AACpB,UAAM,QAAQ,KAAK;AACnB,QAAI,SAAS,SAAS,aAAa;AAChC,YAAM,MAAM,SAAS;AACrB,YAAM,WAAW;AAAA,IACpB;AAAA,EACH;AAAA,EAEA,WAAmB;AAChB,UAAM,UAAoB,CAAC;AAC3B,QAAI,KAAK,MAAM,OAAQ,SAAQ,KAAK,GAAG,KAAK,MAAM,MAAM,QAAQ;AAChE,QAAI,KAAK,UAAU,OAAQ,SAAQ,KAAK,GAAG,KAAK,UAAU,MAAM,YAAY;AAC5E,WAAO,aAAa,KAAK,IAAI,GAAG,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;AAAA,EACnF;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,SAAU;AACnB,UAAM,UAA4B;AAAA,MAC/B,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY;AAAA,MACZ,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,MAC7C,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,MAChD,GAAI,KAAK,UAAU,SACd,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,UAAU,CAAC,EAAE,IAClE,CAAC;AAAA,IACT;AACA,UAAM,SAAS,MAAM,OAAO,eAAe,OAAO;AAClD,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;AAEO,IAAM,eAAN,cAA2B,yBAAyB;AAAA,EAOxD,YACY,MACT,UAAqB,CAAC,GACvB;AACC,UAAM;AAHG;AAIT,SAAK,cAAc,QAAQ,eAAe,QAAQ,iBAAiB;AACnE,SAAK,eAAe,QAAQ,gBAAgB,QAAQ,iBAAiB;AACrE,SAAK,eAAe,QAAQ,UAAU,QAAQ;AAC9C,SAAK,QAAQ,QAAQ,SAAS,CAAC;AAC/B,SAAK,yBACF,QAAQ,0BAA0B,QAAQ,4BAA4B;AAAA,EAC5E;AAAA,EAjBS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAeT,WAAmB;AAChB,UAAM,QAAkB,CAAC;AACzB,QAAI,KAAK,YAAa,OAAM,KAAK,SAAS,KAAK,WAAW,EAAE;AAC5D,QAAI,KAAK,MAAM,OAAQ,OAAM,KAAK,GAAG,KAAK,MAAM,MAAM,QAAQ;AAC9D,WAAO,UAAU,KAAK,IAAI,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAAA,EAC5E;AAAA,EAEA,MAAM,MAAM,QAAmD;AAC5D,QAAI,KAAK,iBAAiB,QAAW;AAClC,YAAM,IAAI,MAAM,UAAU,KAAK,IAAI,yBAAyB;AAAA,IAC/D;AACA,QAAI,CAAC,KAAK,aAAa;AACpB,YAAM,IAAI,MAAM,UAAU,KAAK,IAAI,wBAAwB;AAAA,IAC9D;AAEA,UAAM,UAA8B;AAAA,MACjC,MAAM,KAAK;AAAA,MACX,cAAc,KAAK;AAAA,MACnB,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB,GAAI,KAAK,MAAM,SAAS,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,MACjD,GAAI,KAAK,yBAAyB,EAAE,wBAAwB,KAAK,IAAI,CAAC;AAAA,IACzE;AACA,UAAM,SAAS,MAAM,OAAO,YAAY,OAAO;AAC/C,SAAK,MAAM,OAAO;AAClB,SAAK,QAAQ,OAAO;AACpB,SAAK,WAAW;AAAA,EACnB;AACH;;;AC3OA,IAAM,SAAS,oBAAI,IAAsB;AAAA,EACtC,CAAC,aAAa,CAAC;AAAA,EACf,CAAC,oBAAoB,CAAC;AAAA,EACtB,CAAC,cAAc,CAAC;AAAA,EAChB,CAAC,iBAAiB,CAAC;AAAA,EACnB,CAAC,aAAa,CAAC;AAAA,EACf,CAAC,YAAY,CAAC;AAAA,EACd,CAAC,qBAAqB,CAAC;AAAA,EACvB,CAAC,gBAAgB,CAAC;AAAA,EAClB,CAAC,yBAAyB,CAAC;AAAA,EAC3B,CAAC,gBAAgB,CAAC;AAAA,EAClB,CAAC,oBAAoB,CAAC;AACzB,CAAC;AAEM,IAAM,mBAAN,MAAuB;AAAA,EAG3B,YAAqB,QAAoC;AAApC;AAAA,EAAqC;AAAA,EAFjD,YAAwC,CAAC;AAAA,EAIlD,KAAK,MAAc,UAAyC,CAAC,GAAgB;AAC1E,UAAM,OAAO,IAAI,YAAY,MAAM,QAAQ,MAAM,OAAO;AACxD,SAAK,UAAU,KAAK,IAAI;AACxB,WAAO;AAAA,EACV;AAAA,EAEA,SAAS,MAAc,UAAqB,CAAC,GAAoB;AAC9D,UAAM,WAAW,IAAI,gBAAgB,MAAM,OAAO;AAClD,SAAK,UAAU,KAAK,QAAQ;AAC5B,WAAO;AAAA,EACV;AAAA,EAEA,MACG,MACA,UAAmE,CAAC,GACjD;AACnB,UAAM,QAAQ,IAAI;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ,eAAe;AAAA,IAC1B;AACA,SAAK,UAAU,KAAK,KAAK;AACzB,WAAO;AAAA,EACV;AAAA,EAEA,QAAQ,MAAc,UAAqB,CAAC,GAAmB;AAC5D,UAAM,UAAU,IAAI,eAAe,MAAM,OAAO;AAChD,SAAK,UAAU,KAAK,OAAO;AAC3B,WAAO;AAAA,EACV;AAAA,EAEA,MAAM,MAAc,UAAqB,CAAC,GAAiB;AACxD,UAAM,QAAQ,IAAI,aAAa,MAAM,OAAO;AAC5C,SAAK,UAAU,KAAK,KAAK;AACzB,WAAO;AAAA,EACV;AAAA,EAEA,QAAQ,MAAc,eAAe,IAAI,UAAqB,CAAC,GAAmB;AAC/E,UAAM,UAAU,IAAI,eAAe,MAAM,cAAc,OAAO;AAC9D,SAAK,UAAU,KAAK,OAAO;AAC3B,WAAO;AAAA,EACV;AAAA,EAEA,aAAa,MAAc,UAAqB,CAAC,GAAwB;AACtE,UAAM,SAAS,IAAI,oBAAoB,MAAM,OAAO;AACpD,SAAK,UAAU,KAAK,MAAM;AAC1B,WAAO;AAAA,EACV;AAAA,EAEA,iBAAiB,MAAc,UAAqB,CAAC,GAA4B;AAC9E,UAAM,OAAO,IAAI,wBAAwB,MAAM,OAAO;AACtD,SAAK,UAAU,KAAK,IAAI;AACxB,WAAO;AAAA,EACV;AAAA,EAEA,WAAW,QAAgB,aAAwB,aAAoC;AACpF,UAAM,SAAS,IAAI,WAAW,QAAQ,aAAa,WAAW;AAC9D,SAAK,UAAU,KAAK,MAAM;AAC1B,WAAO;AAAA,EACV;AAAA,EAEA,OAAa;AACV,UAAM,YAAY,KAAK,gBAAgB;AACvC,cAAU;AAAA,EAAK,IAAI,OAAO,EAAE,CAAC,EAAE;AAC/B,cAAU,MAAM;AAChB,cAAU,IAAI,OAAO,EAAE,CAAC;AACxB,eAAW,YAAY,WAAW;AAC/B,gBAAU,OAAO,SAAS,SAAS,CAAC,EAAE;AAAA,IACzC;AACA,UAAM,SAAS,KAAK,qBAAqB,SAAS;AAClD,QAAI,OAAO,QAAQ;AAChB,gBAAU,aAAa;AACvB,iBAAW,QAAQ,OAAQ,WAAU,OAAO,IAAI,EAAE;AAAA,IACrD;AACA,cAAU;AAAA,WAAc,UAAU,MAAM,eAAe,OAAO,MAAM,cAAc;AAClF,cAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAAA,CAAI;AAAA,EAClC;AAAA,EAEA,MAAM,UAAyB;AAC5B,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,KAAK,gBAAgB,SAAS;AAEpC,cAAU;AAAA,EAAK,IAAI,OAAO,EAAE,CAAC,EAAE;AAC/B,cAAU,SAAS;AACnB,cAAU,IAAI,OAAO,EAAE,CAAC;AACxB,eAAW,YAAY,WAAW;AAC/B,UAAI,SAAS,UAAU;AACpB,kBAAU,OAAO,SAAS,SAAS,CAAC,gBAAgB,SAAS,GAAG,GAAG;AAAA,MACtE,OAAO;AACJ,kBAAU,OAAO,SAAS,SAAS,CAAC,EAAE;AAAA,MACzC;AAAA,IACH;AACA,UAAM,SAAS,KAAK,qBAAqB,SAAS;AAClD,QAAI,OAAO,QAAQ;AAChB,gBAAU,aAAa;AACvB,iBAAW,QAAQ,OAAQ,WAAU,OAAO,IAAI,EAAE;AAAA,IACrD;AACA,UAAM,WAAW,UAAU,OAAO,CAAC,aAAa,CAAC,SAAS,QAAQ;AAClE,UAAM,WAAW,UAAU,OAAO,CAAC,aAAa,SAAS,QAAQ;AACjE;AAAA,MACG;AAAA,WAAc,SAAS,MAAM,eAAe,SAAS,MAAM,cAAc,OAAO,MAAM;AAAA,IACzF;AACA,cAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAAA,CAAI;AAAA,EAClC;AAAA,EAEA,MAAM,QAAkC;AACrC,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,KAAK,gBAAgB,SAAS;AACpC,UAAM,UAA2B,CAAC;AAElC,cAAU,aAAa;AACvB,eAAW,YAAY,WAAW;AAC/B,UAAI;AACD,YAAI,SAAS,UAAU;AACpB,gBAAM,MAAM,YAAY,QAAQ;AAChC,kBAAQ,GAAG,MAAM,CAAC;AAClB,kBAAQ,GAAG,EAAG,KAAK,SAAS,GAAG;AAC/B,oBAAU,YAAY,SAAS,SAAS,CAAC,UAAU,SAAS,GAAG,EAAE;AACjE;AAAA,QACH;AAEA,cAAM,SAAS,MAAM,KAAK,MAAM;AAChC,YAAI,SAAS,YAAY,SAAS,QAAQ,QAAW;AAClD,gBAAM,MAAM,YAAY,QAAQ;AAChC,kBAAQ,GAAG,MAAM,CAAC;AAClB,kBAAQ,GAAG,EAAG,KAAK,SAAS,GAAG;AAC/B,gBAAM,WAAW,oBAAoB,eAAe,SAAS,QAAQ,aAAa;AAClF,oBAAU,aAAa,SAAS,SAAS,CAAC,GAAG,QAAQ,UAAU,SAAS,GAAG,EAAE;AAAA,QAChF,OAAO;AACJ,oBAAU,cAAc,SAAS,SAAS,CAAC,EAAE;AAAA,QAChD;AAAA,MACH,SAAS,KAAK;AACX,kBAAU,aAAa,SAAS,SAAS,CAAC,KAAK,eAAe,GAAG,CAAC,EAAE;AACpE,cAAM,IAAI,WAAW,UAAU,KAAK,OAAO;AAAA,MAC9C;AAAA,IACH;AAEA,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,gBAAgB,SAAS;AACpC,UAAM,KAAK,wBAAwB,SAAS;AAC5C,UAAM,KAAK,kBAAkB,SAAS;AAEtC,UAAM,QAAQ,OAAO,OAAO,OAAO,EAAE,OAAO,CAAC,OAAO,QAAQ,QAAQ,IAAI,QAAQ,CAAC;AACjF,cAAU;AAAA,gBAAmB,KAAK,aAAa;AAC/C,WAAO;AAAA,EACV;AAAA,EAEA,MAAc,gBAAgB,WAAsD;AACjF,UAAM,YAAY,IAAI;AAAA,MACnB,UACI,OAAO,CAAC,aAAsC,oBAAoB,WAAW,EAC7E,IAAI,CAAC,aAAa,CAAC,SAAS,MAAM,QAAQ,CAAC;AAAA,IAClD;AACA,UAAM,aAAa,IAAI;AAAA,MACpB,UACI;AAAA,QACE,CAAC,aAA6C,oBAAoB;AAAA,MACrE,EACC,IAAI,CAAC,aAAa,CAAC,SAAS,MAAM,QAAQ,CAAC;AAAA,IAClD;AACA,UAAM,gBAAgB,IAAI;AAAA,MACvB,UACI,OAAO,CAAC,aAA0C,oBAAoB,eAAe,EACrF,IAAI,CAAC,aAAa,CAAC,SAAS,MAAM,QAAQ,CAAC;AAAA,IAClD;AAEA,QAAI,UAAU,MAAM;AACjB,iBAAW,YAAY,MAAM,KAAK,OAAO,aAAa,GAAG;AACtD,YAAI,SAAS,QAAQ,UAAU,IAAI,SAAS,IAAI,GAAG;AAChD,oBAAU,IAAI,SAAS,IAAI,EAAG,MAAM,QAAQ;AAAA,QAC/C;AAAA,MACH;AAAA,IACH;AACA,QAAI,WAAW,MAAM;AAClB,iBAAW,YAAY,MAAM,KAAK,OAAO,gBAAgB,GAAG;AACzD,YAAI,SAAS,QAAQ,WAAW,IAAI,SAAS,IAAI,GAAG;AACjD,qBAAW,IAAI,SAAS,IAAI,EAAG,MAAM,QAAQ;AAAA,QAChD;AAAA,MACH;AAAA,IACH;AACA,QAAI,CAAC,cAAc,KAAM;AAEzB,eAAW,YAAY,MAAM,KAAK,OAAO,aAAa,GAAG;AACtD,UAAI,SAAS,QAAQ,cAAc,IAAI,SAAS,IAAI,GAAG;AACpD,sBAAc,IAAI,SAAS,IAAI,EAAG,MAAM,QAAQ;AAAA,MACnD;AAAA,IACH;AAEA,UAAM,mBAAmB,UAAU;AAAA,MAChC,CAAC,aACE,oBAAoB,mBAAmB,SAAS,YAAY,SAAS,QAAQ;AAAA,IACnF;AACA,QAAI,CAAC,iBAAiB,OAAQ;AAE9B,UAAM,gBAAgB,MAAM,KAAK,OAAO,SAAS;AACjD,eAAW,YAAY,kBAAkB;AACtC,YAAM,gBAAgB,cAAc,OAAO,CAAC,SAAS,KAAK,eAAe,SAAS,GAAG;AACrF,YAAM,aAAa,IAAI,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;AACzE,iBAAW,eAAe,SAAS,OAAO;AACvC,cAAM,QAAQ,WAAW,IAAI,YAAY,IAAI;AAC7C,YAAI,MAAO,aAAY,MAAM,KAAK;AAAA,MACrC;AAEA,YAAM,MAAM,oBAAI,IAA2B;AAC3C,iBAAW,eAAe,SAAS,OAAO;AACvC,YAAI,YAAY,QAAQ,QAAW;AAChC,cAAI,IAAI,YAAY,KAAK,CAAC,GAAI,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC,GAAI,WAAW,CAAC;AAAA,QAC9E;AAAA,MACH;AACA,iBAAW,YAAY,IAAI,OAAO,GAAG;AAClC,YAAI,SAAS,UAAU,EAAG;AAC1B,cAAM,cAAc,SAAS,OAAO,CAAC,SAAS,WAAW,IAAI,KAAK,IAAI,CAAC;AACvE,mBAAW,QAAQ,SAAS,OAAO,CAAC,YAAY,CAAC,YAAY,SAAS,OAAO,CAAC,GAAG;AAC9E,eAAK,MAAM;AACX,eAAK,WAAW;AAAA,QACnB;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA,EAEQ,kBAA8C;AACnD,UAAM,MAAkC,CAAC;AACzC,eAAW,YAAY,KAAK,WAAW;AACpC,UAAI,KAAK,QAAQ;AACjB,UAAI,oBAAoB,iBAAiB;AACtC,cAAM,QAAQ,SAAS;AACvB,cAAM,QACH,UAAU,SACL,SAAS,QACT,CAAC,OAAO,GAAG,SAAS,MAAM,OAAO,CAAC,SAAS,SAAS,KAAK,CAAC;AAClE,YAAI,KAAK,GAAG,KAAK;AAAA,MACpB,WAAW,oBAAoB,gBAAgB;AAC5C,YAAI,KAAK,GAAG,SAAS,KAAK;AAAA,MAC7B;AAAA,IACH;AACA,WAAO,IAAI;AAAA,MACR,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,WAAW,KAAK,OAAO,OAAO,IAAI,EAAE,WAAW,KAAK;AAAA,IAC/E;AAAA,EACH;AAAA,EAEQ,qBAAqB,WAAiD;AAC3E,UAAM,QAAkB,CAAC;AACzB,eAAW,YAAY,WAAW;AAC/B,UAAI,oBAAoB,aAAa;AAClC,mBAAW,cAAc,SAAS,aAAa;AAC5C,gBAAM,KAAK,GAAG,WAAW,OAAO,IAAI,OAAO,WAAW,MAAM,IAAI,EAAE;AAAA,QACrE;AACA,mBAAW,QAAQ,SAAS,YAAY;AACrC,gBAAM,KAAK,GAAG,KAAK,UAAU,cAAc,SAAS,IAAI,GAAG;AAAA,QAC9D;AAAA,MACH,WAAW,oBAAoB,aAAa;AACzC,mBAAW,QAAQ,SAAS,YAAY;AACrC,gBAAM,KAAK,GAAG,KAAK,UAAU,OAAO,KAAK,SAAS,KAAK,SAAS,IAAI,GAAG;AAAA,QAC1E;AAAA,MACH,WAAW,oBAAoB,gBAAgB;AAC5C,mBAAW,QAAQ,SAAS;AACzB,gBAAM,KAAK,GAAG,KAAK,UAAU,aAAa,SAAS,IAAI,GAAG;AAAA,MAChE,WAAW,oBAAoB,oBAAoB;AAChD,mBAAW,cAAc,SAAS,aAAa;AAC5C,gBAAM,KAAK,GAAG,WAAW,OAAO,IAAI,OAAO,WAAW,MAAM,IAAI,EAAE;AAAA,QACrE;AAAA,MACH,WAAW,oBAAoB,gBAAgB;AAC5C,mBAAW,QAAQ,SAAS,MAAO,OAAM,KAAK,SAAS,KAAK,IAAI,EAAE;AAAA,MACrE;AAAA,IACH;AACA,WAAO;AAAA,EACV;AAAA,EAEA,MAAc,mBAAkC;AAC7C,UAAM,iBAAiB,oBAAI,IAAmC;AAC9D,eAAW,YAAY,KAAK,gBAAgB,GAAG;AAC5C,UAAI,EAAE,oBAAoB,aAAc;AACxC,iBAAW,cAAc,SAAS,aAAa;AAC5C,uBAAe,IAAI,WAAW,QAAQ;AAAA,UACnC,GAAI,eAAe,IAAI,WAAW,MAAM,KAAK,CAAC;AAAA,UAC9C;AAAA,QACH,CAAC;AAAA,MACJ;AAAA,IACH;AAEA,eAAW,CAAC,QAAQ,WAAW,KAAK,gBAAgB;AACjD,UAAI,OAAO,QAAQ,OAAW;AAC9B,YAAM,aAAa,YAAY,QAAQ,CAAC,eAAe;AACpD,cAAM,SAAS,WAAW,MAAM;AAChC,YAAI,WAAW,UAAa,WAAW,OAAO,IAAK,QAAO,CAAC;AAC3D,eAAO;AAAA,UACJ;AAAA,YACG;AAAA,YACA,cAAc,WAAW;AAAA,YACzB,cAAc;AAAA,YACd,UAAU,WAAW;AAAA,YACrB,UAAU,WAAW;AAAA,UACxB;AAAA,QACH;AAAA,MACH,CAAC;AACD,UAAI,CAAC,WAAW,OAAQ;AACxB,YAAM,KAAK,OAAO,WAAW,OAAO,KAAK,EAAE,WAAW,CAAC;AACvD;AAAA,QACG,YAAY,OAAO,IAAI,QAAQ,YAAY,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,MACnF;AAAA,IACH;AAAA,EACH;AAAA,EAEA,MAAc,gBAAgB,WAAsD;AACjF,eAAW,YAAY,WAAW;AAC/B,UAAI,oBAAoB,aAAa;AAClC,mBAAW,QAAQ,SAAS,YAAY;AACrC,cAAI;AACD,kBAAM,UAA6B;AAAA,cAChC;AAAA,cACA,QAAQ,SAAS;AAAA,cACjB,WAAW,KAAK;AAAA,cAChB,YAAY,KAAK;AAAA,cACjB,cAAc,YAAY,KAAK,YAAY;AAAA,cAC3C,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,YAC1C;AACA,kBAAM,KAAK;AAAA,cACR;AAAA,cACA,GAAG,KAAK,UAAU,cAAc,SAAS,IAAI;AAAA,YAChD;AAAA,UACH,SAAS,KAAK;AACX,wCAA4B,SAAS,MAAM,GAAG;AAAA,UACjD;AAAA,QACH;AAAA,MACH,WAAW,oBAAoB,aAAa;AACzC,mBAAW,QAAQ,SAAS,YAAY;AACrC,cAAI;AACD,kBAAM,UAA6B;AAAA,cAChC;AAAA,cACA,YAAY,SAAS;AAAA,cACrB,WAAW,KAAK;AAAA,cAChB,YAAY,KAAK;AAAA,cACjB,cAAc,YAAY,KAAK,YAAY;AAAA,cAC3C,GAAI,KAAK,YAAY,EAAE,YAAY,KAAK,UAAU,IAAI,CAAC;AAAA,cACvD,GAAI,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,YAC1C;AACA,kBAAM,KAAK;AAAA,cACR;AAAA,cACA,GAAG,KAAK,UAAU,OAAO,KAAK,SAAS,KAAK,SAAS,IAAI;AAAA,YAC5D;AAAA,UACH,SAAS,KAAK;AACX,wCAA4B,SAAS,MAAM,GAAG;AAAA,UACjD;AAAA,QACH;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA,EAEA,MAAc,eAAe,SAA4B,OAA8B;AACpF,UAAM,WAAW,MAAM,KAAK,sBAAsB,OAAO;AACzD,QAAI,CAAC,UAAU;AACZ,YAAM,KAAK,OAAO,gBAAgB,OAAO;AACzC,gBAAU,YAAY,KAAK,EAAE;AAC7B;AAAA,IACH;AAEA,UAAM,SAAS,gBAAgB,UAAU,OAAO;AAChD,QAAI,OAAO,KAAK,MAAM,EAAE,QAAQ;AAC7B,YAAM,KAAK,OAAO,gBAAgB,SAAS,IAAI,MAAM;AACrD,gBAAU,cAAc,KAAK,EAAE;AAAA,IAClC,OAAO;AACJ,gBAAU,aAAa,KAAK,EAAE;AAAA,IACjC;AAAA,EACH;AAAA,EAEA,MAAc,sBAAsB,SAA4D;AAC7F,UAAM,eAAe,sBAAsB,OAAO;AAClD,UAAM,aAAa,MAAM,KAAK,OAAO,iBAAiB;AAAA,MACnD,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA,MACnB,YAAY,QAAQ;AAAA,MACpB,iBAAiB;AAAA,MACjB,GAAG;AAAA,IACN,CAAC;AACD,WAAO,WAAW,KAAK,CAAC,cAAc,gBAAgB,WAAW,OAAO,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAc,wBAAwB,WAAsD;AACzF,eAAW,YAAY,WAAW;AAC/B,UAAI,EAAE,oBAAoB,oBAAqB;AAC/C,iBAAW,cAAc,SAAS,aAAa;AAC5C,YAAI,SAAS,QAAQ,QAAQ,OAAW;AACxC,cAAM,UAAU,8BAA8B,UAAU;AACxD,YAAI,CAAC,QAAS;AACd,cAAM,KAAK,OAAO,iBAAiB,SAAS,QAAQ,KAAK,OAAO;AAChE,kBAAU,YAAY,WAAW,OAAO,IAAI,OAAO,WAAW,MAAM,IAAI,EAAE;AAAA,MAC7E;AAAA,IACH;AAAA,EACH;AAAA,EAEA,MAAc,kBAAkB,WAAsD;AACnF,eAAW,YAAY,WAAW;AAC/B,UAAI,EAAE,oBAAoB,mBAAmB,SAAS,QAAQ,OAAW;AACzE,iBAAW,QAAQ,SAAS,OAAO;AAChC,cAAM,KAAK,OAAO,WAAW,SAAS,KAAK,wBAAwB,IAAI,CAAC;AACxE,kBAAU,mBAAmB,KAAK,IAAI,EAAE;AAAA,MAC3C;AAAA,IACH;AAAA,EACH;AACH;AAEO,IAAM,aAAN,cAAyB,MAAM;AAAA,EACnC,YACY,UACA,OACA,cACV;AACC;AAAA,MACG,mBAAmB,SAAS,SAAS,CAAC,KAAK,eAAe,KAAK,CAAC;AAAA,mBAAsB,KAAK;AAAA,QACxF;AAAA,MACH,CAAC;AAAA,IACJ;AARS;AACA;AACA;AAAA,EAOZ;AACH;AAEA,SAAS,YAAY,UAA4C;AAC9D,MAAI,oBAAoB,WAAY,QAAO;AAC3C,MAAI,oBAAoB,YAAa,QAAO;AAC5C,MAAI,oBAAoB,mBAAoB,QAAO;AACnD,MAAI,oBAAoB,gBAAiB,QAAO;AAChD,MAAI,oBAAoB,YAAa,QAAO;AAC5C,MAAI,oBAAoB,oBAAqB,QAAO;AACpD,MAAI,oBAAoB,eAAgB,QAAO;AAC/C,MAAI,oBAAoB,wBAAyB,QAAO;AACxD,MAAI,oBAAoB,eAAgB,QAAO;AAC/C,MAAI,oBAAoB,mBAAoB,QAAO;AACnD,MAAI,oBAAoB,aAAc,QAAO;AAC7C,SAAO;AACV;AAEA,IAAM,sCAAsC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACH;AAEA,IAAM,2BAA2B;AAAA,EAC9B,GAAG;AAAA,EACH;AAAA,EACA;AACH;AAIA,SAAS,sBACN,SACwD;AACxD,QAAM,SAAkE,CAAC;AACzE,aAAW,SAAS,qCAAqC;AACtD,UAAM,QAAQ,QAAQ,KAAK;AAC3B,QAAI,UAAU,UAAa,UAAU,MAAM;AACxC,aAAO,KAAK,IAAI;AAAA,IACnB;AAAA,EACH;AACA,SAAO;AACV;AAEA,SAAS,gBAAgB,UAAqB,SAAqC;AAChF,MAAI,gBAAgB,SAAS,IAAI,MAAM,gBAAgB,QAAQ,IAAI,EAAG,QAAO;AAC7E,MAAI,SAAS,eAAe,QAAQ,WAAY,QAAO;AACvD,MAAI,SAAS,cAAc,QAAQ,UAAW,QAAO;AACrD,MAAI,SAAS,eAAe,QAAQ,WAAY,QAAO;AAEvD,aAAW,SAAS,0BAA0B;AAC3C,SAAK,SAAS,KAAK,KAAK,WAAW,QAAQ,KAAK,KAAK,MAAO,QAAO;AAAA,EACtE;AAEA,MAAI,gBAAgB,QAAQ,IAAI,EAAG,QAAO;AAC1C,MAAI,gBAAgB,SAAS,UAAU,MAAM,gBAAgB,QAAQ,UAAU,EAAG,QAAO;AACzF,MAAI,CAAC,oBAAoB,SAAS,cAAc,QAAQ,gBAAgB,IAAI,EAAG,QAAO;AACtF,MAAI,CAAC,oBAAoB,SAAS,eAAe,QAAQ,iBAAiB,IAAI,EAAG,QAAO;AACxF,SAAO;AACV;AAEA,SAAS,gBAAgB,UAAqB,SAAqD;AAChG,QAAM,SAAkC,CAAC;AACzC,QAAM,aAAa,QAAQ,cAAc;AACzC,MAAI,gBAAgB,SAAS,UAAU,MAAM,gBAAgB,UAAU,GAAG;AACvE,WAAO,aAAa;AAAA,EACvB;AACA,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,MAAI,CAAC,oBAAoB,SAAS,cAAc,YAAY,GAAG;AAC5D,WAAO,eAAe,QAAQ;AAAA,EACjC;AACA,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,MAAI,CAAC,oBAAoB,SAAS,eAAe,aAAa,GAAG;AAC9D,WAAO,gBAAgB,QAAQ;AAAA,EAClC;AACA,QAAM,SAAS,QAAQ,UAAU;AACjC,MAAI,SAAS,WAAW,QAAQ;AAC7B,WAAO,SAAS;AAAA,EACnB;AACA,QAAM,QAAQ,QAAQ,SAAS;AAC/B,MAAI,SAAS,UAAU,OAAO;AAC3B,WAAO,QAAQ;AAAA,EAClB;AACA,QAAM,QAAQ,QAAQ,SAAS;AAC/B,MAAI,SAAS,UAAU,OAAO;AAC3B,WAAO,QAAQ;AAAA,EAClB;AACA,SAAO;AACV;AAEA,SAAS,gBAAgB,OAA0C;AAChE,SAAO,SAAS;AACnB;AAEA,SAAS,oBAAoB,MAAe,OAAyB;AAClE,SAAO,KAAK,UAAU,YAAY,IAAI,CAAC,MAAM,KAAK,UAAU,YAAY,KAAK,CAAC;AACjF;AAEA,SAAS,YAAY,OAAyB;AAC3C,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,WAAW;AACtD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,MAAI,cAAc,OAAO,aAAa,cAAc,KAAM,QAAO;AACjE,SAAO,OAAO;AAAA,IACX,OAAO,QAAQ,KAAgC,EAC3C,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC;AAAA,EACxD;AACH;AAEA,SAAS,UAAU,UAAU,IAAU;AACpC,UAAQ,OAAO,MAAM,GAAG,OAAO;AAAA,CAAI;AACtC;AAEA,SAAS,4BAA4B,cAAsB,KAAoB;AAC5E,MAAI,UAAU,KAAK,GAAG,GAAG;AACtB;AAAA,MACG,6BAA6B,YAAY;AAAA,IAC5C;AACA;AAAA,EACH;AACA,QAAM,UAAU,eAAe,GAAG;AAClC,YAAU,4BAA4B,YAAY,MAAM,OAAO,EAAE;AACjE,QAAM,IAAI,MAAM,gCAAgC,YAAY,MAAM,OAAO,EAAE;AAC9E;AAEA,SAAS,eAAe,KAAsB;AAC3C,MAAI,eAAe,MAAO,QAAO,IAAI,QAAQ;AAC7C,SAAO,OAAO;AACjB;AAEA,SAAS,UAAU,KAAc,QAAyB;AACvD,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC1C,UAAM,YAAY;AAClB,QAAI,UAAU,WAAW,UAAU,UAAU,eAAe,OAAQ,QAAO;AAAA,EAC9E;AACA,QAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,QAAQ,WAAW,MAAM;AACrF,SAAO,QAAQ,SAAS,OAAO,MAAM,CAAC;AACzC;AAEA,eAAsB,mBACnB,QACA,OACA,OAAO,QACyB;AAChC,QAAM,YAAY,IAAI,iBAAiB,MAAM;AAC7C,QAAM,MAAM,SAAS;AACrB,MAAI,SAAS,OAAQ,QAAO,UAAU,KAAK;AAC3C,MAAI,SAAS,UAAW,QAAO,UAAU,QAAQ;AACjD,MAAI,SAAS,QAAS,QAAO,UAAU,MAAM;AAC7C,QAAM,IAAI,MAAM,iBAAiB,IAAI,iCAAiC;AACzE;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/workspace-builder/resource.ts","../src/workspace-builder/automation.ts","../src/workspace-builder/forms.ts","../src/workspace-builder/journeys.ts","../src/workspace-builder/role-update.ts","../src/workspace-builder/workflows.ts","../src/workspace-builder/orchestrator.ts"],"sourcesContent":["import type { GravityRailWorkspaceClient } from '../client/workspace-client';\n\nexport type AnyRecord = Record<string, any>;\nexport type ResourceSummary = Record<string, Array<number | undefined>>;\n\nexport function isRecord(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isPlainRecord(value: unknown): value is AnyRecord {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function slugify(name: string): string {\n return name.toLowerCase().replaceAll(' ', '_').replaceAll('-', '_');\n}\n\nexport abstract class WorkspaceBuilderResource {\n _id?: number;\n _uuid?: string;\n _created = false;\n _existed = false;\n\n abstract planLine(): string;\n abstract apply(client: GravityRailWorkspaceClient): Promise<void>;\n\n matchKey(): string | undefined {\n return undefined;\n }\n\n adopt(existing: AnyRecord): void {\n this._id = existing.id;\n this._uuid = existing.uuid;\n this._existed = true;\n }\n}\n\nexport function resolveRefs(params: AnyRecord): AnyRecord {\n return resolveRefValue(params) as AnyRecord;\n}\n\nfunction resolveRefValue(value: unknown): unknown {\n if (value instanceof WorkspaceBuilderResource) return value._uuid;\n if (Array.isArray(value)) return value.map(resolveRefValue);\n if (!isPlainRecord(value)) return value;\n\n const out: AnyRecord = {};\n for (const [key, nestedValue] of Object.entries(value)) {\n out[key] = resolveRefValue(nestedValue);\n }\n return out;\n}\n","import {\n EventRuleEventType,\n EventRuleObjectType,\n type CreateRoutineRequest,\n type EventRuleActionType,\n type MemberFilterFilterType,\n type MemberFilterFormData,\n type MemberFilterObjectType,\n type MemberFilterRuleFormData,\n type NotificationRuleCreate,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\nimport type { WorkflowBuilder } from './workflows';\n\nexport class MemberFilterBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly rules: MemberFilterRuleFormData[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n }\n\n addRule(\n objectType: MemberFilterObjectType,\n filterType: MemberFilterFilterType,\n options: { objectIds?: number[]; query?: string } = {}\n ): MemberFilterBuilder {\n this.rules.push({\n objectType,\n filterType,\n ...(options.objectIds ? { objectIds: options.objectIds } : {}),\n ...(options.query ? { query: options.query } : {}),\n });\n return this;\n }\n\n planLine(): string {\n return `MemberFilter: ${this.name}${this.rules.length ? ` (${this.rules.length} rules)` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const payload: MemberFilterFormData = {\n name: this.name,\n description: this.description,\n rules: this.rules,\n };\n const result = await client.createMemberFilter(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\ninterface RoutineRuleDraft {\n actionType: EventRuleActionType | string;\n workflow?: WorkflowBuilder;\n memberFilter?: MemberFilterBuilder;\n actionParams: AnyRecord;\n}\n\nexport class RoutineBuilder extends WorkspaceBuilderResource {\n readonly active: boolean;\n readonly description: string;\n readonly rules: RoutineRuleDraft[] = [];\n\n constructor(\n readonly name: string,\n readonly cronSchedule = '',\n options: AnyRecord = {}\n ) {\n super();\n this.active = options.active ?? false;\n this.description = options.description ?? '';\n }\n\n addRule(\n actionType: string,\n options: {\n workflow?: WorkflowBuilder;\n memberFilter?: MemberFilterBuilder;\n actionParams?: AnyRecord;\n } = {}\n ): RoutineBuilder {\n this.rules.push({\n actionType,\n workflow: options.workflow,\n memberFilter: options.memberFilter,\n actionParams: options.actionParams ?? {},\n });\n return this;\n }\n\n planLine(): string {\n const parts = [\n ...(this.cronSchedule ? [`cron=${this.cronSchedule}`] : []),\n ...(this.rules.length ? [`${this.rules.length} rules`] : []),\n this.active ? 'active' : 'inactive',\n ];\n return `Routine: ${this.name} (${parts.join(', ')})`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const eventRules = this.rules.map((rule) => {\n const actionParams = { ...rule.actionParams };\n if (rule.workflow?._id !== undefined) actionParams.workflowId = rule.workflow._id;\n if (rule.memberFilter?._id !== undefined)\n actionParams.memberFilterId = rule.memberFilter._id;\n return {\n uuid: crypto.randomUUID(),\n objectType: EventRuleObjectType.ROUTINE,\n eventType: EventRuleEventType.ROUTINE_TRIGGERED,\n actionType: rule.actionType as EventRuleActionType,\n actionParams,\n active: true,\n };\n });\n const payload: CreateRoutineRequest = {\n name: this.name,\n cronString: this.cronSchedule,\n scheduleMode: this.cronSchedule ? 'CRON' : undefined,\n scheduleEnabled: this.active,\n ...(this.description ? { description: this.description } : {}),\n ...(eventRules.length ? { eventRules } : {}),\n };\n const result = await client.createRoutine(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class NotificationRuleBuilder extends WorkspaceBuilderResource {\n readonly noticeType: string;\n readonly memberId: number;\n readonly workflow?: WorkflowBuilder;\n readonly prompt?: string;\n readonly notifySms: boolean;\n readonly notifyEmail: boolean;\n readonly notifyVoice: boolean;\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.noticeType = options.noticeType ?? options.notice_type ?? name;\n this.memberId = options.memberId ?? options.member_id;\n this.workflow = options.workflow;\n this.prompt = options.prompt ?? options.message;\n this.notifySms = Boolean(options.notifySms ?? options.notify_sms);\n this.notifyEmail = Boolean(options.notifyEmail ?? options.notify_email);\n this.notifyVoice = Boolean(options.notifyVoice ?? options.notify_voice);\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.memberId !== undefined) parts.push(`memberId=${this.memberId}`);\n if (this.workflow) parts.push(`workflow='${this.workflow.name}'`);\n return `NotificationRule: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.memberId === undefined) {\n throw new Error(`Notification rule '${this.name}' requires memberId`);\n }\n const payload: NotificationRuleCreate = {\n noticeType: this.noticeType,\n memberId: this.memberId,\n workflowId: this.workflow?._id,\n prompt: this.prompt ?? null,\n notifySms: this.notifySms,\n notifyEmail: this.notifyEmail,\n notifyVoice: this.notifyVoice,\n };\n const result = await client.createNotificationRule(payload);\n this._id = result.id;\n this._created = true;\n }\n}\n","import {\n DataFieldType,\n EventRuleEventType,\n type DataFieldFormData,\n type DataTypeFormData,\n type EnumOption,\n type EventRuleActionType,\n type MemberLabelFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { WorkspaceBuilderEventRule } from './event-rules';\nimport { type AnyRecord, isRecord, slugify, WorkspaceBuilderResource } from './resource';\n\ntype WorkspaceFieldDraft = Omit<DataFieldFormData, 'fieldType'> & {\n fieldType: DataFieldType;\n celFunction?: string;\n};\n\nfunction normalizeOptions(options: any[]): EnumOption[] {\n if (options.length === 0) return [];\n const first = options[0];\n if (isRecord(first)) return options as EnumOption[];\n if (Array.isArray(first)) {\n return options.map((entry) => ({ label: String(entry[0]), value: entry[1] }));\n }\n return options.map((option) => ({ label: String(option), value: String(option) }));\n}\n\nfunction createFieldDraft(\n fieldType: DataFieldType,\n name: string,\n slug: string,\n options: {\n required?: boolean;\n order?: number;\n description?: string;\n choices?: EnumOption[];\n cel?: string;\n } = {}\n): WorkspaceFieldDraft {\n return {\n name,\n slug,\n fieldType,\n required: Boolean(options.required),\n order: options.order ?? 0,\n ...(options.description ? { description: options.description } : {}),\n ...(options.choices ? { options: options.choices } : {}),\n ...(options.cel ? { celFunction: options.cel } : {}),\n };\n}\n\nexport class FormBuilder extends WorkspaceBuilderResource {\n readonly name: string;\n readonly slug: string;\n readonly description: string;\n readonly prompt: string;\n readonly collection: boolean;\n readonly fields: WorkspaceFieldDraft[] = [];\n readonly eventRules: WorkspaceBuilderEventRule[] = [];\n\n constructor(name: string, slug?: string, options: AnyRecord = {}) {\n super();\n this.name = name;\n this.slug = slug ?? slugify(name);\n this.description = options.description ?? '';\n this.prompt = options.prompt ?? '';\n this.collection = options.collection ?? false;\n\n for (const field of options.fields ?? []) {\n if (!isRecord(field) || !field.name) continue;\n const choices = field.options ? normalizeOptions(field.options) : undefined;\n this.fields.push(\n createFieldDraft(\n (field.fieldType ?? field.field_type ?? DataFieldType.TEXT) as DataFieldType,\n field.name,\n field.slug ?? slugify(field.name),\n {\n required: Boolean(field.required ?? field.isRequired),\n order: field.order ?? 0,\n description: field.description,\n choices,\n }\n )\n );\n }\n }\n\n field(\n fieldType: DataFieldType,\n name: string,\n slug: string,\n options: {\n required?: boolean;\n order?: number;\n description?: string;\n choices?: any[];\n cel?: string;\n } = {}\n ): FormBuilder {\n this.fields.push(createFieldDraft(fieldType, name, slug, options));\n return this;\n }\n\n enumField(name: string, slug: string, options: any[], settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.ENUM, name, slug, {\n ...settings,\n choices: normalizeOptions(options),\n });\n }\n\n textField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.TEXT, name, slug, settings);\n }\n\n numberField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.NUMBER, name, slug, settings);\n }\n\n dateField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.DATE, name, slug, settings);\n }\n\n booleanField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.BOOLEAN, name, slug, settings);\n }\n\n functionField(name: string, slug: string, cel: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.FUNCTION, name, slug, { ...settings, cel });\n }\n\n emailField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.EMAIL, name, slug, settings);\n }\n\n phoneField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.PHONE, name, slug, settings);\n }\n\n longtextField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.LONGTEXT, name, slug, settings);\n }\n\n integerField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.INTEGER, name, slug, settings);\n }\n\n datetimeField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.DATETIME, name, slug, settings);\n }\n\n timeOfDayField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.TIME_OF_DAY, name, slug, settings);\n }\n\n usZipCodeField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.US_ZIP_CODE, name, slug, settings);\n }\n\n arrayField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.ARRAY, name, slug, settings);\n }\n\n objectField(name: string, slug: string, settings: AnyRecord = {}): FormBuilder {\n return this.field(DataFieldType.OBJECT, name, slug, settings);\n }\n\n onRecordCreated(\n action: string,\n params: AnyRecord = {},\n condition?: string,\n name?: string\n ): FormBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.DATA_RECORD_CREATED,\n actionType: action as EventRuleActionType,\n actionParams: params,\n condition,\n name,\n });\n return this;\n }\n\n onRecordUpdated(\n action: string,\n params: AnyRecord = {},\n condition?: string,\n name?: string\n ): FormBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.DATA_RECORD_UPDATED,\n actionType: action as EventRuleActionType,\n actionParams: params,\n condition,\n name,\n });\n return this;\n }\n\n matchKey(): string {\n return this.slug;\n }\n\n planLine(): string {\n return `Form: ${this.name} (slug=${this.slug}, ${this.fields.length} fields)`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: DataTypeFormData = {\n name: this.name,\n slug: this.slug,\n description: this.description,\n prompt: this.prompt,\n isCollection: this.collection,\n fields: this.fields,\n };\n const result = await client.createDataType(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class MemberLabelBuilder extends WorkspaceBuilderResource {\n readonly name: string;\n readonly slug: string;\n readonly color: string;\n readonly description: string;\n\n constructor(name: string, slug?: string, color = '8b5cf6', description = '') {\n super();\n this.name = name;\n this.slug = slug ?? slugify(name);\n this.color = color;\n this.description = description;\n }\n\n matchKey(): string {\n return this.slug;\n }\n\n planLine(): string {\n return `Label: ${this.name} (slug=${this.slug})`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: MemberLabelFormData = {\n name: this.name,\n slug: this.slug,\n color: this.color,\n description: this.description,\n };\n const result = await client.createMemberLabel(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n","import type {\n JourneyGoalFormData,\n JourneyStepConnectionFormData,\n JourneyStepFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\nimport type { WorkflowBuilder } from './workflows';\n\nexport interface StepConnectionDraft {\n parent: JourneyStepBuilder;\n child: JourneyStepBuilder;\n condition?: string;\n required: boolean;\n timeoutSeconds?: number;\n}\n\nexport interface JourneyGoalDraft {\n name: string;\n description: string;\n step?: JourneyStepBuilder;\n completionCel?: string;\n value?: number;\n order: number;\n}\n\nexport class JourneyStepBuilder extends WorkspaceBuilderResource {\n readonly connections: StepConnectionDraft[] = [];\n\n constructor(\n readonly name: string,\n readonly journey: JourneyBuilder,\n readonly order = 0,\n readonly workflow?: WorkflowBuilder,\n readonly description = ''\n ) {\n super();\n }\n\n connectsTo(\n child: JourneyStepBuilder,\n condition?: string,\n required = false,\n timeoutSeconds?: number\n ): JourneyStepBuilder {\n this.connections.push({ parent: this, child, condition, required, timeoutSeconds });\n return this;\n }\n\n planLine(): string {\n return `Step: ${this.name}${this.workflow ? ` -> workflow '${this.workflow.name}'` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.journey._id === undefined) return;\n const payload: JourneyStepFormData = {\n name: this.name,\n description: this.description,\n order: this.order,\n ...(this.workflow?._id ? { workflowId: this.workflow._id } : {}),\n };\n const result = await client.createStep(this.journey._id, payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class JourneyBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly steps: JourneyStepBuilder[] = [];\n readonly goals: JourneyGoalDraft[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n }\n\n step(name: string, options: AnyRecord = {}): JourneyStepBuilder {\n const step = new JourneyStepBuilder(\n name,\n this,\n options.order ?? 0,\n options.workflow,\n options.description ?? ''\n );\n this.steps.push(step);\n return step;\n }\n\n goal(name: string, options: AnyRecord = {}): JourneyBuilder {\n this.goals.push({\n name,\n description: options.description ?? '',\n step: options.step,\n completionCel: options.completionCel ?? options.completion_cel,\n value: options.value,\n order: options.order ?? 0,\n });\n return this;\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.steps.length) parts.push(`${this.steps.length} steps`);\n if (this.goals.length) parts.push(`${this.goals.length} goals`);\n return `Journey: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const result = await client.createJourney({\n name: this.name,\n description: this.description,\n });\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport function buildJourneyConnectionPayload(\n connection: StepConnectionDraft\n): JourneyStepConnectionFormData | undefined {\n if (!connection.parent._uuid || !connection.child._uuid) return undefined;\n return {\n parentStepUuid: connection.parent._uuid,\n childStepUuid: connection.child._uuid,\n ...(connection.condition ? { celCondition: connection.condition } : {}),\n ...(connection.required ? { required: true } : {}),\n ...(connection.timeoutSeconds ? { timeoutSeconds: connection.timeoutSeconds } : {}),\n };\n}\n\nexport function buildJourneyGoalPayload(goal: JourneyGoalDraft): JourneyGoalFormData {\n return {\n name: goal.name,\n description: goal.description,\n order: goal.order,\n ...(goal.step?._uuid ? { goalStepUuid: goal.step._uuid } : {}),\n ...(goal.completionCel ? { completionCel: goal.completionCel } : {}),\n ...(goal.value !== undefined ? { value: goal.value } : {}),\n };\n}\n","import type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { AnyRecord } from './resource';\nimport { WorkspaceBuilderResource } from './resource';\n\nexport class RoleUpdate extends WorkspaceBuilderResource {\n constructor(\n readonly roleId: number,\n readonly workflowIds?: number[],\n readonly dataTypeIds?: number[]\n ) {\n super();\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.workflowIds) parts.push(`workflows=${JSON.stringify(this.workflowIds)}`);\n if (this.dataTypeIds) parts.push(`dataTypes=${JSON.stringify(this.dataTypeIds)}`);\n return `RoleUpdate: roleId=${this.roleId}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n const payload: AnyRecord = {};\n if (this.workflowIds) payload.workflowIds = this.workflowIds;\n if (this.dataTypeIds) payload.dataTypeIds = this.dataTypeIds;\n if (Object.keys(payload).length) await client.updateMemberRole(this.roleId, payload);\n this._id = this.roleId;\n this._created = true;\n }\n}\n","import {\n EventRuleEventType,\n type CreateAgentRequest,\n type EventRuleActionType,\n type WorkflowFormData,\n} from '../types';\nimport { DEFAULT_CHAT_MODEL } from '../constants/models';\nimport type { Ability } from '../types/ability-types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport type { WorkspaceBuilderEventRule } from './event-rules';\nimport type { FormBuilder } from './forms';\nimport { type AnyRecord, WorkspaceBuilderResource } from './resource';\n\nconst PERM_KEYS: Record<string, string> = {\n canRead: 'canRead',\n canCreate: 'canCreate',\n canEdit: 'canEdit',\n can_read: 'canRead',\n can_create: 'canCreate',\n can_edit: 'canEdit',\n};\n\nconst ABILITY_TYPE_MAP: Record<string, string> = {\n data_access: 'integration:data_access',\n file_access: 'integration:file_access',\n escalation: 'oversight:escalation',\n};\n\nclass AbilityDef {\n readonly uuid = crypto.randomUUID();\n readonly config: AnyRecord;\n readonly enabled: boolean;\n readonly celCondition?: string;\n readonly form?: FormBuilder;\n readonly perms: AnyRecord = {};\n\n constructor(\n readonly abilityType: string,\n options: AnyRecord = {}\n ) {\n this.config = options.config ?? {};\n this.enabled = options.enabled ?? true;\n this.celCondition = options.celCondition ?? options.cel_condition;\n this.form = options.form;\n for (const [inputKey, outputKey] of Object.entries(PERM_KEYS)) {\n if (inputKey in options) this.perms[outputKey] = options[inputKey];\n }\n }\n\n toAbility(): Ability {\n const config = { ...this.config };\n if (this.form?._uuid) {\n config.dataTypeUuid = this.form._uuid;\n Object.assign(config, this.perms);\n }\n return {\n uuid: this.uuid,\n abilityType: ABILITY_TYPE_MAP[this.abilityType] ?? this.abilityType,\n config,\n enabled: this.enabled,\n ...(this.celCondition ? { celCondition: this.celCondition } : {}),\n };\n }\n}\n\nexport interface TaskTransition {\n parent: TaskBuilder;\n child: TaskBuilder;\n when: string;\n autoNext: boolean;\n required: boolean;\n}\n\nexport class TaskBuilder extends WorkspaceBuilderResource {\n readonly transitions: TaskTransition[] = [];\n readonly eventRules: WorkspaceBuilderEventRule[] = [];\n\n constructor(\n readonly name: string,\n readonly workflow: WorkflowBuilder,\n readonly prompt = '',\n readonly start = false,\n readonly description = ''\n ) {\n super();\n }\n\n transitionsTo(\n child: TaskBuilder,\n when: string,\n autoNext = false,\n required = false\n ): TaskBuilder {\n if (child === this) {\n throw new Error(`Task '${this.name}' cannot transition to itself`);\n }\n this.transitions.push({ parent: this, child, when, autoNext, required });\n return this;\n }\n\n onEnter(action: string, params: AnyRecord = {}, name?: string): TaskBuilder {\n this.eventRules.push({\n eventType: EventRuleEventType.TASK_EXECUTE,\n actionType: action as EventRuleActionType,\n actionParams: params,\n name,\n });\n return this;\n }\n\n initialMessage(message: string, suggestions?: string[]): TaskBuilder {\n return this.onEnter('assistant:message', {\n message,\n ...(suggestions ? { suggestions } : {}),\n });\n }\n\n planLine(): string {\n return `Task: ${this.name}${this.start ? ' [start]' : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed || this.workflow._id === undefined) return;\n const result = await client.createTask({\n workflowId: this.workflow._id,\n name: this.name,\n prompt: this.prompt,\n description: this.description,\n });\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport class WorkflowBuilder extends WorkspaceBuilderResource {\n readonly description: string;\n readonly prompt?: string;\n private agentId?: number;\n readonly tasks: TaskBuilder[] = [];\n readonly abilities: AbilityDef[] = [];\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.description = options.description ?? '';\n this.prompt = options.prompt;\n this.agentId = options.agentId ?? options.agent_id;\n }\n\n task(name: string, options: AnyRecord = {}): TaskBuilder {\n const task = new TaskBuilder(\n name,\n this,\n options.prompt ?? '',\n options.start ?? false,\n options.description ?? ''\n );\n this.tasks.push(task);\n return task;\n }\n\n ability(abilityType: string, options: AnyRecord = {}): WorkflowBuilder {\n this.abilities.push(new AbilityDef(abilityType, options));\n return this;\n }\n\n get startTask(): TaskBuilder | undefined {\n return this.tasks.find((task) => task.start) ?? this.tasks[0];\n }\n\n matchKey(): string {\n return this.name;\n }\n\n adopt(existing: AnyRecord): void {\n super.adopt(existing);\n const start = this.startTask;\n if (start && existing.startTaskId) {\n start._id = existing.startTaskId;\n start._existed = true;\n }\n }\n\n planLine(): string {\n const details: string[] = [];\n if (this.tasks.length) details.push(`${this.tasks.length} tasks`);\n if (this.abilities.length) details.push(`${this.abilities.length} abilities`);\n return `Workflow: ${this.name}${details.length ? ` (${details.join(', ')})` : ''}`;\n }\n\n needsDefaultAgent(): boolean {\n return !this._existed && this.agentId === undefined;\n }\n\n setAgentId(agentId: number): void {\n this.agentId = agentId;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this._existed) return;\n const payload: WorkflowFormData = {\n name: this.name,\n description: this.description,\n createMode: 'taskless',\n ...(this.prompt ? { prompt: this.prompt } : {}),\n ...(this.agentId ? { agentId: this.agentId } : {}),\n ...(this.abilities.length\n ? { abilities: this.abilities.map((ability) => ability.toAbility()) }\n : {}),\n };\n const result = await client.createWorkflow(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n\nexport const WORKSPACE_BUILDER_DEFAULT_AGENT_NAME = 'Workspace Setup Agent';\n\nexport const WORKSPACE_BUILDER_DEFAULT_AGENT_PROMPT =\n 'You help workspace members complete the workflow you are assigned to. Follow the task prompts, collect requested information accurately, and escalate when the workflow asks you to.';\n\nexport async function getOrCreateDefaultWorkflowAgent(\n client: GravityRailWorkspaceClient\n): Promise<{ id: number; name: string; created: boolean }> {\n const existingAgents = recordsFromResponse(\n await client.getAgents({ pageSize: 100, includeArchived: false })\n );\n // Reuse any existing active agent intentionally. The builder only creates a\n // generic setup agent for empty workspaces.\n const existing = existingAgents.find((agent) => !agent.isArchived) ?? existingAgents[0];\n if (existing) {\n return {\n id: numberField(existing, 'id'),\n name: stringField(existing, 'name'),\n created: false,\n };\n }\n\n const roles = recordsFromResponse(await client.getMemberRoles());\n const role =\n roles.find((candidate) => stringField(candidate, 'name').toLowerCase() === 'agent') ??\n roles[0];\n if (!role) {\n throw new Error('Cannot create default workflow agent: workspace has no member roles');\n }\n\n const payload: CreateAgentRequest = {\n name: WORKSPACE_BUILDER_DEFAULT_AGENT_NAME,\n memberRoleId: numberField(role, 'id'),\n chatModelId: DEFAULT_CHAT_MODEL,\n systemPrompt: WORKSPACE_BUILDER_DEFAULT_AGENT_PROMPT,\n };\n const created = await client.createAgent(payload);\n return {\n id: created.id,\n name: created.name ?? WORKSPACE_BUILDER_DEFAULT_AGENT_NAME,\n created: true,\n };\n}\n\nfunction recordsFromResponse(value: unknown): AnyRecord[] {\n if (Array.isArray(value)) return value as AnyRecord[];\n if (value && typeof value === 'object' && Array.isArray((value as AnyRecord).items)) {\n return (value as AnyRecord).items as AnyRecord[];\n }\n return [];\n}\n\nfunction numberField(record: AnyRecord, key: string): number {\n const value = record[key];\n if (typeof value !== 'number') throw new Error(`Expected numeric ${key}`);\n return value;\n}\n\nfunction stringField(record: AnyRecord, key: string): string {\n const value = record[key];\n return typeof value === 'string' ? value : '';\n}\n\nexport class AgentBuilder extends WorkspaceBuilderResource {\n readonly chatModelId: string;\n readonly systemPrompt: string;\n readonly memberRoleId?: number;\n readonly tools: string[];\n readonly codeInterpreterEnabled: boolean;\n\n constructor(\n readonly name: string,\n options: AnyRecord = {}\n ) {\n super();\n this.chatModelId = options.chatModelId ?? options.chat_model_id ?? '';\n this.systemPrompt = options.systemPrompt ?? options.system_prompt ?? '';\n this.memberRoleId = options.roleId ?? options.role_id;\n this.tools = options.tools ?? [];\n this.codeInterpreterEnabled =\n options.codeInterpreterEnabled ?? options.code_interpreter_enabled ?? false;\n }\n\n planLine(): string {\n const parts: string[] = [];\n if (this.chatModelId) parts.push(`model=${this.chatModelId}`);\n if (this.tools.length) parts.push(`${this.tools.length} tools`);\n return `Agent: ${this.name}${parts.length ? ` (${parts.join(', ')})` : ''}`;\n }\n\n async apply(client: GravityRailWorkspaceClient): Promise<void> {\n if (this.memberRoleId === undefined) {\n throw new Error(`Agent '${this.name}' requires memberRoleId`);\n }\n if (!this.chatModelId) {\n throw new Error(`Agent '${this.name}' requires chatModelId`);\n }\n\n const payload: CreateAgentRequest = {\n name: this.name,\n memberRoleId: this.memberRoleId,\n chatModelId: this.chatModelId,\n systemPrompt: this.systemPrompt,\n ...(this.tools.length ? { tools: this.tools } : {}),\n ...(this.codeInterpreterEnabled ? { codeInterpreterEnabled: true } : {}),\n };\n const result = await client.createAgent(payload);\n this._id = result.id;\n this._uuid = result.uuid;\n this._created = true;\n }\n}\n","import {\n EventRuleObjectType,\n type EventRule,\n type EventRuleFormData,\n type UpdateEventRuleFormData,\n} from '../types';\nimport type { GravityRailWorkspaceClient } from '../client/workspace-client';\nimport { MemberFilterBuilder, NotificationRuleBuilder, RoutineBuilder } from './automation';\nimport { FormBuilder, MemberLabelBuilder } from './forms';\nimport {\n buildJourneyConnectionPayload,\n buildJourneyGoalPayload,\n JourneyBuilder,\n JourneyStepBuilder,\n} from './journeys';\nimport {\n type AnyRecord,\n type ResourceSummary,\n resolveRefs,\n WorkspaceBuilderResource,\n} from './resource';\nimport { RoleUpdate } from './role-update';\nimport {\n AgentBuilder,\n getOrCreateDefaultWorkflowAgent,\n TaskBuilder,\n type TaskTransition,\n WorkflowBuilder,\n} from './workflows';\n\nconst PHASES = new Map<Function, number>([\n [FormBuilder, 0],\n [MemberLabelBuilder, 0],\n [AgentBuilder, 1],\n [WorkflowBuilder, 2],\n [TaskBuilder, 3],\n [RoleUpdate, 4],\n [MemberFilterBuilder, 5],\n [RoutineBuilder, 6],\n [NotificationRuleBuilder, 6],\n [JourneyBuilder, 7],\n [JourneyStepBuilder, 8],\n]);\n\nexport class WorkspaceBuilder {\n readonly resources: WorkspaceBuilderResource[] = [];\n\n constructor(readonly client: GravityRailWorkspaceClient) {}\n\n form(name: string, options: AnyRecord & { slug?: string } = {}): FormBuilder {\n const form = new FormBuilder(name, options.slug, options);\n this.resources.push(form);\n return form;\n }\n\n workflow(name: string, options: AnyRecord = {}): WorkflowBuilder {\n const workflow = new WorkflowBuilder(name, options);\n this.resources.push(workflow);\n return workflow;\n }\n\n label(\n name: string,\n options: { slug?: string; color?: string; description?: string } = {}\n ): MemberLabelBuilder {\n const label = new MemberLabelBuilder(\n name,\n options.slug,\n options.color,\n options.description ?? ''\n );\n this.resources.push(label);\n return label;\n }\n\n journey(name: string, options: AnyRecord = {}): JourneyBuilder {\n const journey = new JourneyBuilder(name, options);\n this.resources.push(journey);\n return journey;\n }\n\n agent(name: string, options: AnyRecord = {}): AgentBuilder {\n const agent = new AgentBuilder(name, options);\n this.resources.push(agent);\n return agent;\n }\n\n routine(name: string, cronSchedule = '', options: AnyRecord = {}): RoutineBuilder {\n const routine = new RoutineBuilder(name, cronSchedule, options);\n this.resources.push(routine);\n return routine;\n }\n\n memberFilter(name: string, options: AnyRecord = {}): MemberFilterBuilder {\n const filter = new MemberFilterBuilder(name, options);\n this.resources.push(filter);\n return filter;\n }\n\n notificationRule(name: string, options: AnyRecord = {}): NotificationRuleBuilder {\n const rule = new NotificationRuleBuilder(name, options);\n this.resources.push(rule);\n return rule;\n }\n\n roleUpdate(roleId: number, workflowIds?: number[], dataTypeIds?: number[]): RoleUpdate {\n const update = new RoleUpdate(roleId, workflowIds, dataTypeIds);\n this.resources.push(update);\n return update;\n }\n\n plan(): void {\n const resources = this.sortedResources();\n writeLine(`\\n${'='.repeat(50)}`);\n writeLine('Plan');\n writeLine('='.repeat(50));\n for (const resource of resources) {\n writeLine(` + ${resource.planLine()}`);\n }\n const wiring = this.collectWiringSummary(resources);\n if (wiring.length) {\n writeLine('\\n Wiring:');\n for (const line of wiring) writeLine(` ${line}`);\n }\n writeLine(`\\n Total: ${resources.length} resources, ${wiring.length} connections`);\n writeLine(`${'='.repeat(50)}\\n`);\n }\n\n async preview(): Promise<void> {\n const resources = this.sortedResources();\n await this.resolveExisting(resources);\n\n writeLine(`\\n${'='.repeat(50)}`);\n writeLine('Preview');\n writeLine('='.repeat(50));\n for (const resource of resources) {\n if (resource._existed) {\n writeLine(` = ${resource.planLine()} (exists, id=${resource._id})`);\n } else {\n writeLine(` + ${resource.planLine()}`);\n }\n }\n const wiring = this.collectWiringSummary(resources);\n if (wiring.length) {\n writeLine('\\n Wiring:');\n for (const line of wiring) writeLine(` ${line}`);\n }\n const toCreate = resources.filter((resource) => !resource._existed);\n const existing = resources.filter((resource) => resource._existed);\n writeLine(\n `\\n Total: ${toCreate.length} to create, ${existing.length} existing, ${wiring.length} connections`\n );\n writeLine(`${'='.repeat(50)}\\n`);\n }\n\n async apply(): Promise<ResourceSummary> {\n const resources = this.sortedResources();\n await this.resolveExisting(resources);\n const summary: ResourceSummary = {};\n\n writeLine('Applying...');\n await this.ensureWorkflowAgents(resources, summary);\n for (const resource of resources) {\n try {\n if (resource._existed) {\n const key = resourceKey(resource);\n summary[key] ??= [];\n summary[key]!.push(resource._id);\n writeLine(` Exists ${resource.planLine()} -> id=${resource._id}`);\n continue;\n }\n\n await resource.apply(this.client);\n if (resource._created || resource._id !== undefined) {\n const key = resourceKey(resource);\n summary[key] ??= [];\n summary[key]!.push(resource._id);\n const startTag = resource instanceof TaskBuilder && resource.start ? ' [start]' : '';\n writeLine(` Created ${resource.planLine()}${startTag} -> id=${resource._id}`);\n } else {\n writeLine(` Skipped: ${resource.planLine()}`);\n }\n } catch (err) {\n writeLine(` FAILED: ${resource.planLine()}: ${summarizeError(err)}`);\n throw new ApplyError(resource, err, summary);\n }\n }\n\n await this.applyTransitions();\n await this.applyEventRules(resources);\n await this.applyJourneyConnections(resources);\n await this.applyJourneyGoals(resources);\n\n const count = Object.values(summary).reduce((total, ids) => total + ids.length, 0);\n writeLine(`\\nDone! Created ${count} resources.`);\n return summary;\n }\n\n private async resolveExisting(resources: WorkspaceBuilderResource[]): Promise<void> {\n const formSlugs = new Map(\n resources\n .filter((resource): resource is FormBuilder => resource instanceof FormBuilder)\n .map((resource) => [resource.slug, resource])\n );\n const labelSlugs = new Map(\n resources\n .filter(\n (resource): resource is MemberLabelBuilder => resource instanceof MemberLabelBuilder\n )\n .map((resource) => [resource.slug, resource])\n );\n const workflowNames = new Map(\n resources\n .filter((resource): resource is WorkflowBuilder => resource instanceof WorkflowBuilder)\n .map((resource) => [resource.name, resource])\n );\n\n if (formSlugs.size) {\n for (const existing of await this.client.getDataTypes()) {\n if (existing.slug && formSlugs.has(existing.slug)) {\n formSlugs.get(existing.slug)!.adopt(existing);\n }\n }\n }\n if (labelSlugs.size) {\n for (const existing of await this.client.getMemberLabels()) {\n if (existing.slug && labelSlugs.has(existing.slug)) {\n labelSlugs.get(existing.slug)!.adopt(existing);\n }\n }\n }\n if (!workflowNames.size) return;\n\n for (const existing of await this.client.getWorkflows()) {\n if (existing.name && workflowNames.has(existing.name)) {\n workflowNames.get(existing.name)!.adopt(existing);\n }\n }\n\n const adoptedWorkflows = resources.filter(\n (resource): resource is WorkflowBuilder =>\n resource instanceof WorkflowBuilder && resource._existed && resource._id !== undefined\n );\n if (!adoptedWorkflows.length) return;\n\n const existingTasks = await this.client.getTasks();\n for (const workflow of adoptedWorkflows) {\n const workflowTasks = existingTasks.filter((task) => task.workflowId === workflow._id);\n const taskByName = new Map(workflowTasks.map((task) => [task.name, task]));\n for (const taskBuilder of workflow.tasks) {\n const match = taskByName.get(taskBuilder.name);\n if (match) taskBuilder.adopt(match);\n }\n\n const ids = new Map<number, TaskBuilder[]>();\n for (const taskBuilder of workflow.tasks) {\n if (taskBuilder._id !== undefined) {\n ids.set(taskBuilder._id, [...(ids.get(taskBuilder._id) ?? []), taskBuilder]);\n }\n }\n for (const builders of ids.values()) {\n if (builders.length <= 1) continue;\n const nameAdopted = builders.filter((task) => taskByName.has(task.name));\n for (const task of builders.filter((builder) => !nameAdopted.includes(builder))) {\n task._id = undefined;\n task._existed = false;\n }\n }\n }\n }\n\n private async ensureWorkflowAgents(\n resources: WorkspaceBuilderResource[],\n summary: ResourceSummary\n ): Promise<void> {\n const workflows = resources.filter(\n (resource): resource is WorkflowBuilder =>\n resource instanceof WorkflowBuilder && resource.needsDefaultAgent()\n );\n if (!workflows.length) return;\n\n const agent = await getOrCreateDefaultWorkflowAgent(this.client);\n for (const workflow of workflows) workflow.setAgentId(agent.id);\n\n if (agent.created) {\n summary.agents ??= [];\n summary.agents.push(agent.id);\n writeLine(` Created Agent: ${agent.name} -> id=${agent.id}`);\n } else {\n writeLine(` Using Agent: ${agent.name || agent.id} -> id=${agent.id}`);\n }\n }\n\n private sortedResources(): WorkspaceBuilderResource[] {\n const all: WorkspaceBuilderResource[] = [];\n for (const resource of this.resources) {\n all.push(resource);\n if (resource instanceof WorkflowBuilder) {\n const start = resource.startTask;\n const tasks =\n start === undefined\n ? resource.tasks\n : [start, ...resource.tasks.filter((task) => task !== start)];\n all.push(...tasks);\n } else if (resource instanceof JourneyBuilder) {\n all.push(...resource.steps);\n }\n }\n return all.sort(\n (a, b) => (PHASES.get(a.constructor) ?? 99) - (PHASES.get(b.constructor) ?? 99)\n );\n }\n\n private collectWiringSummary(resources: WorkspaceBuilderResource[]): string[] {\n const lines: string[] = [];\n for (const resource of resources) {\n if (resource instanceof TaskBuilder) {\n for (const transition of resource.transitions) {\n lines.push(`${transition.parent.name} -> ${transition.child.name}`);\n }\n for (const rule of resource.eventRules) {\n lines.push(`${rule.actionType} on enter '${resource.name}'`);\n }\n } else if (resource instanceof FormBuilder) {\n for (const rule of resource.eventRules) {\n lines.push(`${rule.actionType} on ${rule.eventType} '${resource.name}'`);\n }\n } else if (resource instanceof RoutineBuilder) {\n for (const rule of resource.rules)\n lines.push(`${rule.actionType} rule on '${resource.name}'`);\n } else if (resource instanceof JourneyStepBuilder) {\n for (const connection of resource.connections) {\n lines.push(`${connection.parent.name} -> ${connection.child.name}`);\n }\n } else if (resource instanceof JourneyBuilder) {\n for (const goal of resource.goals) lines.push(`Goal: ${goal.name}`);\n }\n }\n return lines;\n }\n\n private async applyTransitions(): Promise<void> {\n const parentChildren = new Map<TaskBuilder, TaskTransition[]>();\n for (const resource of this.sortedResources()) {\n if (!(resource instanceof TaskBuilder)) continue;\n for (const transition of resource.transitions) {\n parentChildren.set(transition.parent, [\n ...(parentChildren.get(transition.parent) ?? []),\n transition,\n ]);\n }\n }\n\n for (const [parent, transitions] of parentChildren) {\n if (parent._id === undefined) continue;\n const childTasks = transitions.flatMap((transition) => {\n const taskId = transition.child._id;\n if (taskId === undefined || taskId === parent._id) return [];\n return [\n {\n taskId,\n choicePrompt: transition.when,\n celCondition: null,\n autoNext: transition.autoNext,\n required: transition.required,\n },\n ];\n });\n if (!childTasks.length) continue;\n await this.client.updateTask(parent._id, { childTasks });\n writeLine(\n ` Wired: ${parent.name} -> [${transitions.map((tr) => tr.child.name).join(', ')}]`\n );\n }\n }\n\n private async applyEventRules(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (resource instanceof TaskBuilder) {\n for (const rule of resource.eventRules) {\n try {\n const payload: EventRuleFormData = {\n objectType: EventRuleObjectType.TASK,\n taskId: resource._id,\n eventType: rule.eventType,\n actionType: rule.actionType,\n actionParams: resolveRefs(rule.actionParams),\n ...(rule.name ? { name: rule.name } : {}),\n };\n await this.applyEventRule(\n payload,\n `${rule.actionType} on enter '${resource.name}'`\n );\n } catch (err) {\n handleEventRuleApplyFailure(resource.name, err);\n }\n }\n } else if (resource instanceof FormBuilder) {\n for (const rule of resource.eventRules) {\n try {\n const payload: EventRuleFormData = {\n objectType: EventRuleObjectType.DATA_RECORD,\n dataTypeId: resource._id,\n eventType: rule.eventType,\n actionType: rule.actionType,\n actionParams: resolveRefs(rule.actionParams),\n ...(rule.condition ? { conditions: rule.condition } : {}),\n ...(rule.name ? { name: rule.name } : {}),\n };\n await this.applyEventRule(\n payload,\n `${rule.actionType} on ${rule.eventType} '${resource.name}'`\n );\n } catch (err) {\n handleEventRuleApplyFailure(resource.name, err);\n }\n }\n }\n }\n }\n\n private async applyEventRule(payload: EventRuleFormData, label: string): Promise<void> {\n const existing = await this.findMatchingEventRule(payload);\n if (!existing) {\n await this.client.createEventRule(payload);\n writeLine(` Wired: ${label}`);\n return;\n }\n\n const update = eventRuleUpdate(existing, payload);\n if (Object.keys(update).length) {\n await this.client.updateEventRule(existing.id, update);\n writeLine(` Updated: ${label}`);\n } else {\n writeLine(` Exists: ${label}`);\n }\n }\n\n private async findMatchingEventRule(payload: EventRuleFormData): Promise<EventRule | undefined> {\n const sourceFilter = eventRuleSourceFilter(payload);\n const candidates = await this.client.searchEventRules({\n objectType: payload.objectType,\n eventType: payload.eventType,\n actionType: payload.actionType,\n includeDisabled: true,\n ...sourceFilter,\n });\n return candidates.find((candidate) => eventRulesMatch(candidate, payload));\n }\n\n private async applyJourneyConnections(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (!(resource instanceof JourneyStepBuilder)) continue;\n for (const connection of resource.connections) {\n if (resource.journey._id === undefined) continue;\n const payload = buildJourneyConnectionPayload(connection);\n if (!payload) continue;\n await this.client.createConnection(resource.journey._id, payload);\n writeLine(` Wired: ${connection.parent.name} -> ${connection.child.name}`);\n }\n }\n }\n\n private async applyJourneyGoals(resources: WorkspaceBuilderResource[]): Promise<void> {\n for (const resource of resources) {\n if (!(resource instanceof JourneyBuilder) || resource._id === undefined) continue;\n for (const goal of resource.goals) {\n await this.client.createGoal(resource._id, buildJourneyGoalPayload(goal));\n writeLine(` Created goal: ${goal.name}`);\n }\n }\n }\n}\n\nexport class ApplyError extends Error {\n constructor(\n readonly resource: WorkspaceBuilderResource,\n readonly cause: unknown,\n readonly createdSoFar: ResourceSummary\n ) {\n super(\n `Failed creating ${resource.planLine()}: ${summarizeError(cause)}\\nAlready created: ${JSON.stringify(\n createdSoFar\n )}`\n );\n }\n}\n\nfunction resourceKey(resource: WorkspaceBuilderResource): string {\n if (resource instanceof RoleUpdate) return 'roleUpdates';\n if (resource instanceof FormBuilder) return 'forms';\n if (resource instanceof MemberLabelBuilder) return 'labels';\n if (resource instanceof WorkflowBuilder) return 'workflows';\n if (resource instanceof TaskBuilder) return 'tasks';\n if (resource instanceof MemberFilterBuilder) return 'memberFilters';\n if (resource instanceof RoutineBuilder) return 'routines';\n if (resource instanceof NotificationRuleBuilder) return 'notificationRules';\n if (resource instanceof JourneyBuilder) return 'journeys';\n if (resource instanceof JourneyStepBuilder) return 'journeySteps';\n if (resource instanceof AgentBuilder) return 'agents';\n return 'resources';\n}\n\nconst SEARCHABLE_EVENT_RULE_SOURCE_FIELDS = [\n 'taskId',\n 'dataTypeId',\n 'routineId',\n 'workflowId',\n 'journeyStepId',\n] as const;\n\nconst EVENT_RULE_SOURCE_FIELDS = [\n ...SEARCHABLE_EVENT_RULE_SOURCE_FIELDS,\n 'calendarId',\n 'calendarEventTypeId',\n] as const;\n\ntype SearchableEventRuleSourceField = (typeof SEARCHABLE_EVENT_RULE_SOURCE_FIELDS)[number];\n\nfunction eventRuleSourceFilter(\n payload: EventRuleFormData\n): Partial<Record<SearchableEventRuleSourceField, number>> {\n const filter: Partial<Record<SearchableEventRuleSourceField, number>> = {};\n for (const field of SEARCHABLE_EVENT_RULE_SOURCE_FIELDS) {\n const value = payload[field];\n if (value !== undefined && value !== null) {\n filter[field] = value;\n }\n }\n return filter;\n}\n\nfunction eventRulesMatch(existing: EventRule, payload: EventRuleFormData): boolean {\n if (normalizeString(existing.name) !== normalizeString(payload.name)) return false;\n if (existing.objectType !== payload.objectType) return false;\n if (existing.eventType !== payload.eventType) return false;\n if (existing.actionType !== payload.actionType) return false;\n\n for (const field of EVENT_RULE_SOURCE_FIELDS) {\n if ((existing[field] ?? null) !== (payload[field] ?? null)) return false;\n }\n\n if (normalizeString(payload.name)) return true;\n if (normalizeString(existing.conditions) !== normalizeString(payload.conditions)) return false;\n if (!eventRuleValueEqual(existing.actionParams, payload.actionParams ?? null)) return false;\n if (!eventRuleValueEqual(existing.triggerParams, payload.triggerParams ?? null)) return false;\n return true;\n}\n\nfunction eventRuleUpdate(existing: EventRule, payload: EventRuleFormData): UpdateEventRuleFormData {\n const update: UpdateEventRuleFormData = {};\n const conditions = payload.conditions ?? null;\n if (normalizeString(existing.conditions) !== normalizeString(conditions)) {\n update.conditions = conditions;\n }\n const actionParams = payload.actionParams ?? null;\n if (!eventRuleValueEqual(existing.actionParams, actionParams)) {\n update.actionParams = payload.actionParams;\n }\n const triggerParams = payload.triggerParams ?? null;\n if (!eventRuleValueEqual(existing.triggerParams, triggerParams)) {\n update.triggerParams = payload.triggerParams;\n }\n const active = payload.active ?? true;\n if (existing.active !== active) {\n update.active = active;\n }\n const delay = payload.delay ?? 0;\n if (existing.delay !== delay) {\n update.delay = delay;\n }\n const order = payload.order ?? 0;\n if (existing.order !== order) {\n update.order = order;\n }\n return update;\n}\n\nfunction normalizeString(value: string | null | undefined): string {\n return value ?? '';\n}\n\nfunction eventRuleValueEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(stableValue(left)) === JSON.stringify(stableValue(right));\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== 'object') return value;\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, nested]) => [key, stableValue(nested)])\n );\n}\n\nfunction writeLine(message = ''): void {\n process.stdout.write(`${message}\\n`);\n}\n\nfunction handleEventRuleApplyFailure(resourceName: string, err: unknown): void {\n if (hasStatus(err, 403)) {\n writeLine(\n ` WARNING: Event rule on '${resourceName}' failed (retry exec() with scopes=['automations:admin'])`\n );\n return;\n }\n const summary = summarizeError(err);\n writeLine(` FAILED: Event rule on '${resourceName}': ${summary}`);\n throw new Error(`Failed wiring event rule on '${resourceName}': ${summary}`);\n}\n\nfunction summarizeError(err: unknown): string {\n if (err instanceof Error) return err.name || 'Error';\n return typeof err;\n}\n\nfunction hasStatus(err: unknown, status: number): boolean {\n if (typeof err === 'object' && err !== null) {\n const candidate = err as { status?: unknown; statusCode?: unknown };\n if (candidate.status === status || candidate.statusCode === status) return true;\n }\n const message = err instanceof Error ? err.message : typeof err === 'string' ? err : '';\n return message.includes(String(status));\n}\n\nexport async function runWorkspaceScript(\n client: GravityRailWorkspaceClient,\n build: (workspace: WorkspaceBuilder) => void | Promise<void>,\n mode = 'plan'\n): Promise<ResourceSummary | void> {\n const workspace = new WorkspaceBuilder(client);\n await build(workspace);\n if (mode === 'plan') return workspace.plan();\n if (mode === 'preview') return workspace.preview();\n if (mode === 'apply') return workspace.apply();\n throw new Error(`Unknown mode '${mode}'. Use plan, preview, or apply.`);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1557,6 +1557,9 @@ interface DataRecordFieldWarning {
|
|
|
1557
1557
|
*/
|
|
1558
1558
|
interface MemberCredentialResponse {
|
|
1559
1559
|
id: number;
|
|
1560
|
+
uuid?: string | null;
|
|
1561
|
+
displayName?: string | null;
|
|
1562
|
+
isDefault?: boolean;
|
|
1560
1563
|
provider?: string | null;
|
|
1561
1564
|
externalUserId?: string | null;
|
|
1562
1565
|
externalUsername?: string | null;
|
|
@@ -1557,6 +1557,9 @@ interface DataRecordFieldWarning {
|
|
|
1557
1557
|
*/
|
|
1558
1558
|
interface MemberCredentialResponse {
|
|
1559
1559
|
id: number;
|
|
1560
|
+
uuid?: string | null;
|
|
1561
|
+
displayName?: string | null;
|
|
1562
|
+
isDefault?: boolean;
|
|
1560
1563
|
provider?: string | null;
|
|
1561
1564
|
externalUserId?: string | null;
|
|
1562
1565
|
externalUsername?: string | null;
|