feat(events): Type agent blueprint, instance and registration events by birdcar · Pull Request #1729 · workos/workos-node · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions src/agents/interfaces/agent-event.interface.ts
1 change: 1 addition & 0 deletions src/agents/interfaces/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export * from './agent-blueprint.interface';
export * from './agent-event.interface';
export * from './agent-instance-session.interface';
export * from './agent-instance.interface';
export * from './agent-registration.interface';
Expand Down
151 changes: 151 additions & 0 deletions src/agents/serializers/agent-event.serializer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
import {
AgentBlueprintDeletedEventData,
AgentBlueprintDeletedEventResponseData,
AgentBlueprintEventData,
AgentBlueprintEventResponseData,
AgentInstanceSessionCreatedEventData,
AgentInstanceSessionCreatedEventResponseData,
AgentInstanceSessionEventData,
AgentInstanceSessionEventResponseData,
AgentRegistrationClaimAttemptCreatedEventData,
AgentRegistrationClaimAttemptCreatedEventResponseData,
AgentRegistrationClaimCompletedEventData,
AgentRegistrationClaimCompletedEventResponseData,
AgentRegistrationCreatedEventData,
AgentRegistrationCreatedEventResponseData,
AgentRegistrationCredentialDetail,
AgentRegistrationCredentialDetailResponse,
AgentRegistrationCredentialIssuedEventData,
AgentRegistrationCredentialIssuedEventResponseData,
AgentRegistrationLifecycleEventData,
AgentRegistrationLifecycleEventResponseData,
AgentRegistrationOrganizationSwitchedEventData,
AgentRegistrationOrganizationSwitchedEventResponseData,
} from '../interfaces/agent-event.interface';
import { deserializeAgentBlueprint } from './agent-blueprint.serializer';

export const deserializeAgentBlueprintEvent = (
data: AgentBlueprintEventResponseData,
): AgentBlueprintEventData => ({
...deserializeAgentBlueprint(data),
invocableAs: {
instanceTypes: data.invocable_as.instance_types,
},
});

export const deserializeAgentBlueprintDeletedEvent = (
data: AgentBlueprintDeletedEventResponseData,
): AgentBlueprintDeletedEventData => ({
object: data.object,
id: data.id,
name: data.name,
createdAt: data.created_at,
updatedAt: data.updated_at,
});

export const deserializeAgentInstanceSessionEvent = (
data: AgentInstanceSessionEventResponseData,
): AgentInstanceSessionEventData => ({
object: data.object,
id: data.id,
agentInstanceId: data.agent_instance_id,
organizationId: data.organization_id,
expiresAt: data.expires_at,
revokedAt: data.revoked_at,
createdAt: data.created_at,
updatedAt: data.updated_at,
});

export const deserializeAgentInstanceSessionCreatedEvent = (
data: AgentInstanceSessionCreatedEventResponseData,
): AgentInstanceSessionCreatedEventData => ({
...deserializeAgentInstanceSessionEvent(data),
permissionSlugs: data.permission_slugs,
});

export const deserializeAgentRegistrationCreatedEvent = (
data: AgentRegistrationCreatedEventResponseData,
): AgentRegistrationCreatedEventData => ({
object: data.object,
id: data.id,
agentIdentity: {
object: data.agent_identity.object,
id: data.agent_identity.id,
userlandUserId: data.agent_identity.userland_user_id,
},
organizationId: data.organization_id,
status: data.status,
kind: data.kind,
method: data.method,
createdAt: data.created_at,
updatedAt: data.updated_at,
});

export const deserializeAgentRegistrationClaimAttemptCreatedEvent = (
data: AgentRegistrationClaimAttemptCreatedEventResponseData,
): AgentRegistrationClaimAttemptCreatedEventData => ({
object: data.object,
id: data.id,
agentRegistrationId: data.agent_registration_id,
agentRegistrationClaimId: data.agent_registration_claim_id,
loginHint: data.login_hint,
expiresAt: data.expires_at,
createdAt: data.created_at,
updatedAt: data.updated_at,
});

export const deserializeAgentRegistrationClaimCompletedEvent = (
data: AgentRegistrationClaimCompletedEventResponseData,
): AgentRegistrationClaimCompletedEventData => ({
object: data.object,
id: data.id,
agentRegistrationId: data.agent_registration_id,
completedByAttemptId: data.completed_by_attempt_id,
claimedBy: {
userId: data.claimed_by.user_id,
organizationId: data.claimed_by.organization_id,
},
completedAt: data.completed_at,
createdAt: data.created_at,
updatedAt: data.updated_at,
});

const deserializeAgentRegistrationCredentialDetail = (
detail: AgentRegistrationCredentialDetailResponse,
): AgentRegistrationCredentialDetail => {
switch (detail.kind) {
case 'api_key':
return { kind: detail.kind, apiKeyId: detail.api_key_id };
case 'access_token':
return {
kind: detail.kind,
jti: detail.jti,
expiresAt: detail.expires_at,
};
}
};

export const deserializeAgentRegistrationCredentialIssuedEvent = (
data: AgentRegistrationCredentialIssuedEventResponseData,
): AgentRegistrationCredentialIssuedEventData => ({
object: data.object,
id: data.id,
agentRegistrationId: data.agent_registration_id,
detail: deserializeAgentRegistrationCredentialDetail(data.detail),
createdAt: data.created_at,
updatedAt: data.updated_at,
});

export const deserializeAgentRegistrationOrganizationSwitchedEvent = (
data: AgentRegistrationOrganizationSwitchedEventResponseData,
): AgentRegistrationOrganizationSwitchedEventData => ({
agentRegistrationId: data.agent_registration_id,
fromOrganizationId: data.from_organization_id,
toOrganizationId: data.to_organization_id,
});

export const deserializeAgentRegistrationLifecycleEvent = (
data: AgentRegistrationLifecycleEventResponseData,
): AgentRegistrationLifecycleEventData => ({
agentRegistrationId: data.agent_registration_id,
});
1 change: 1 addition & 0 deletions src/agents/serializers/index.ts
Loading
Loading