terse-types 0.0.71 → 0.0.72

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.
@@ -0,0 +1,18 @@
1
+ import type * as z from "zod";
2
+ export declare const triggerPayloadProjections: Readonly<Record<string, TriggerPayloadProjection>>;
3
+ export declare function isProjectedTriggerName(name: string): boolean;
4
+ export type TriggerPayloadSchemaProjection = {
5
+ kind: "schema";
6
+ schema: z.ZodType;
7
+ /** Printed verbatim after the payload interface name, e.g. "<TBody = unknown>". */
8
+ typeParams?: string;
9
+ /** Dot-path within the payload -> TypeScript type expression printed instead of the schema field. */
10
+ fieldOverrides?: Record<string, string>;
11
+ /** Extra terse-sdk type imports the overrides reference. */
12
+ sdkImports?: string[];
13
+ };
14
+ export type TriggerPayloadUnionProjection = {
15
+ kind: "union";
16
+ members: string[];
17
+ };
18
+ export type TriggerPayloadProjection = TriggerPayloadSchemaProjection | TriggerPayloadUnionProjection;
@@ -0,0 +1,167 @@
1
+ import { GithubIssueCommentCreatedTriggerSchema, GithubPRClosedTriggerSchema, GithubPRMergedTriggerSchema, GithubPROpenedTriggerSchema, GithubPRSynchronizedTriggerSchema, GithubPushTriggerSchema, attioCallRecordingCreatedTriggerSchema, attioCommentCreatedTriggerSchema, attioCommentDeletedTriggerSchema, attioCommentResolvedTriggerSchema, attioCommentUnresolvedTriggerSchema, attioListAttributeCreatedTriggerSchema, attioListAttributeUpdatedTriggerSchema, attioListCreatedTriggerSchema, attioListDeletedTriggerSchema, attioListEntryCreatedTriggerSchema, attioListEntryDeletedTriggerSchema, attioListEntryUpdatedTriggerSchema, attioListUpdatedTriggerSchema, attioNoteContentUpdatedTriggerSchema, attioNoteCreatedTriggerSchema, attioNoteDeletedTriggerSchema, attioNoteUpdatedTriggerSchema, attioObjectAttributeCreatedTriggerSchema, attioObjectAttributeUpdatedTriggerSchema, attioRecordCreatedTriggerSchema, attioRecordDeletedTriggerSchema, attioRecordMergedTriggerSchema, attioRecordUpdatedTriggerSchema, attioTaskCreatedTriggerSchema, attioTaskDeletedTriggerSchema, attioTaskUpdatedTriggerSchema, attioWorkspaceMemberCreatedTriggerSchema, cronTriggerSchema, gmailTriggerSchema, heyReachCampaignCompletedTriggerSchema, heyReachConnectionRequestAcceptedTriggerSchema, heyReachConnectionRequestSentTriggerSchema, heyReachFollowSentTriggerSchema, heyReachInmailReplyReceivedTriggerSchema, heyReachInmailSentTriggerSchema, heyReachLeadTagUpdatedTriggerSchema, heyReachLikedPostTriggerSchema, heyReachMessageReplyReceivedTriggerSchema, heyReachMessageSentTriggerSchema, heyReachViewedProfileTriggerSchema, linearCommentCreatedTriggerSchema, linearIssueCreatedTriggerSchema, linearIssueUpdatedTriggerSchema, slackAppMentionTriggerSchema, slackMessageTriggerSchema, slackReactionAddedTriggerSchema, webMonitorTriggerSchema, webhookTriggerSchema, workOSInvitationAcceptedTriggerSchema, workOSInvitationCreatedTriggerSchema, workOSInvitationResentTriggerSchema, workOSInvitationRevokedTriggerSchema, workOSOrganizationMembershipCreatedTriggerSchema, workOSOrganizationMembershipDeletedTriggerSchema, workOSOrganizationMembershipUpdatedTriggerSchema, workOSOrganizationTriggerSchema, workOSUserCreatedTriggerSchema, workOSUserDeletedTriggerSchema, workOSUserUpdatedTriggerSchema } from "./Triggers.js";
2
+ // The hand-written SlackMessageTrigger et al. widen these schema fields (z.array(z.unknown()))
3
+ // to the structured Slack types, so projections must print the widened form.
4
+ const slackWidenedFields = {
5
+ blocks: "SlackBlocks | null",
6
+ attachments: "SlackAttachments | null",
7
+ files: "SlackFiles | null"
8
+ };
9
+ const slackSdkImports = ["SlackAttachments", "SlackBlocks", "SlackFiles"];
10
+ const attioRecordProjection = (schema) => ({
11
+ kind: "schema",
12
+ schema,
13
+ typeParams: "<TValues = Record<string, unknown>>",
14
+ // The registered attio event transform flattens record.values before handlers run,
15
+ // matching the SDK-level generic, not the raw wire shape.
16
+ fieldOverrides: { "record.values": "TValues" }
17
+ });
18
+ export const triggerPayloadProjections = {
19
+ SlackMessageTrigger: { kind: "schema", schema: slackMessageTriggerSchema, fieldOverrides: slackWidenedFields, sdkImports: slackSdkImports },
20
+ SlackAppMentionTrigger: { kind: "schema", schema: slackAppMentionTriggerSchema, fieldOverrides: slackWidenedFields, sdkImports: slackSdkImports },
21
+ SlackReactionAddedTrigger: { kind: "schema", schema: slackReactionAddedTriggerSchema, fieldOverrides: slackWidenedFields, sdkImports: slackSdkImports },
22
+ SlackTrigger: { kind: "union", members: ["SlackMessageTrigger", "SlackAppMentionTrigger", "SlackReactionAddedTrigger"] },
23
+ GithubPushTrigger: { kind: "schema", schema: GithubPushTriggerSchema },
24
+ GithubPROpenedTrigger: { kind: "schema", schema: GithubPROpenedTriggerSchema },
25
+ GithubPRSynchronizedTrigger: { kind: "schema", schema: GithubPRSynchronizedTriggerSchema },
26
+ GithubPRClosedTrigger: { kind: "schema", schema: GithubPRClosedTriggerSchema },
27
+ GithubPRMergedTrigger: { kind: "schema", schema: GithubPRMergedTriggerSchema },
28
+ GithubIssueCommentCreatedTrigger: { kind: "schema", schema: GithubIssueCommentCreatedTriggerSchema },
29
+ GithubPRTrigger: { kind: "union", members: ["GithubPROpenedTrigger", "GithubPRSynchronizedTrigger", "GithubPRClosedTrigger", "GithubPRMergedTrigger"] },
30
+ GithubTrigger: {
31
+ kind: "union",
32
+ members: ["GithubPushTrigger", "GithubPROpenedTrigger", "GithubPRSynchronizedTrigger", "GithubPRClosedTrigger", "GithubPRMergedTrigger", "GithubIssueCommentCreatedTrigger"]
33
+ },
34
+ GmailTrigger: { kind: "schema", schema: gmailTriggerSchema },
35
+ LinearIssueCreatedTrigger: { kind: "schema", schema: linearIssueCreatedTriggerSchema },
36
+ LinearIssueUpdatedTrigger: { kind: "schema", schema: linearIssueUpdatedTriggerSchema },
37
+ LinearCommentCreatedTrigger: { kind: "schema", schema: linearCommentCreatedTriggerSchema },
38
+ LinearTrigger: { kind: "union", members: ["LinearIssueCreatedTrigger", "LinearIssueUpdatedTrigger", "LinearCommentCreatedTrigger"] },
39
+ WorkOSUserCreatedTrigger: { kind: "schema", schema: workOSUserCreatedTriggerSchema },
40
+ WorkOSUserUpdatedTrigger: { kind: "schema", schema: workOSUserUpdatedTriggerSchema },
41
+ WorkOSUserDeletedTrigger: { kind: "schema", schema: workOSUserDeletedTriggerSchema },
42
+ WorkOSUserTrigger: { kind: "union", members: ["WorkOSUserCreatedTrigger", "WorkOSUserUpdatedTrigger", "WorkOSUserDeletedTrigger"] },
43
+ WorkOSOrganizationMembershipCreatedTrigger: { kind: "schema", schema: workOSOrganizationMembershipCreatedTriggerSchema },
44
+ WorkOSOrganizationMembershipUpdatedTrigger: { kind: "schema", schema: workOSOrganizationMembershipUpdatedTriggerSchema },
45
+ WorkOSOrganizationMembershipDeletedTrigger: { kind: "schema", schema: workOSOrganizationMembershipDeletedTriggerSchema },
46
+ WorkOSMembershipTrigger: {
47
+ kind: "union",
48
+ members: ["WorkOSOrganizationMembershipCreatedTrigger", "WorkOSOrganizationMembershipUpdatedTrigger", "WorkOSOrganizationMembershipDeletedTrigger"]
49
+ },
50
+ WorkOSInvitationCreatedTrigger: { kind: "schema", schema: workOSInvitationCreatedTriggerSchema },
51
+ WorkOSInvitationAcceptedTrigger: { kind: "schema", schema: workOSInvitationAcceptedTriggerSchema },
52
+ WorkOSInvitationResentTrigger: { kind: "schema", schema: workOSInvitationResentTriggerSchema },
53
+ WorkOSInvitationRevokedTrigger: { kind: "schema", schema: workOSInvitationRevokedTriggerSchema },
54
+ WorkOSInvitationTrigger: {
55
+ kind: "union",
56
+ members: ["WorkOSInvitationCreatedTrigger", "WorkOSInvitationAcceptedTrigger", "WorkOSInvitationResentTrigger", "WorkOSInvitationRevokedTrigger"]
57
+ },
58
+ WorkOSOrganizationTrigger: { kind: "schema", schema: workOSOrganizationTriggerSchema },
59
+ WorkOSTrigger: {
60
+ kind: "union",
61
+ members: [
62
+ "WorkOSUserCreatedTrigger",
63
+ "WorkOSUserUpdatedTrigger",
64
+ "WorkOSUserDeletedTrigger",
65
+ "WorkOSOrganizationMembershipCreatedTrigger",
66
+ "WorkOSOrganizationMembershipUpdatedTrigger",
67
+ "WorkOSOrganizationMembershipDeletedTrigger",
68
+ "WorkOSInvitationCreatedTrigger",
69
+ "WorkOSInvitationAcceptedTrigger",
70
+ "WorkOSInvitationResentTrigger",
71
+ "WorkOSInvitationRevokedTrigger",
72
+ "WorkOSOrganizationTrigger"
73
+ ]
74
+ },
75
+ HeyReachConnectionRequestSentTrigger: { kind: "schema", schema: heyReachConnectionRequestSentTriggerSchema },
76
+ HeyReachConnectionRequestAcceptedTrigger: { kind: "schema", schema: heyReachConnectionRequestAcceptedTriggerSchema },
77
+ HeyReachMessageSentTrigger: { kind: "schema", schema: heyReachMessageSentTriggerSchema },
78
+ HeyReachMessageReplyReceivedTrigger: { kind: "schema", schema: heyReachMessageReplyReceivedTriggerSchema },
79
+ HeyReachInmailSentTrigger: { kind: "schema", schema: heyReachInmailSentTriggerSchema },
80
+ HeyReachInmailReplyReceivedTrigger: { kind: "schema", schema: heyReachInmailReplyReceivedTriggerSchema },
81
+ HeyReachFollowSentTrigger: { kind: "schema", schema: heyReachFollowSentTriggerSchema },
82
+ HeyReachLikedPostTrigger: { kind: "schema", schema: heyReachLikedPostTriggerSchema },
83
+ HeyReachViewedProfileTrigger: { kind: "schema", schema: heyReachViewedProfileTriggerSchema },
84
+ HeyReachCampaignCompletedTrigger: { kind: "schema", schema: heyReachCampaignCompletedTriggerSchema },
85
+ HeyReachLeadTagUpdatedTrigger: { kind: "schema", schema: heyReachLeadTagUpdatedTriggerSchema },
86
+ HeyReachTrigger: {
87
+ kind: "union",
88
+ members: [
89
+ "HeyReachConnectionRequestSentTrigger",
90
+ "HeyReachConnectionRequestAcceptedTrigger",
91
+ "HeyReachMessageSentTrigger",
92
+ "HeyReachMessageReplyReceivedTrigger",
93
+ "HeyReachInmailSentTrigger",
94
+ "HeyReachInmailReplyReceivedTrigger",
95
+ "HeyReachFollowSentTrigger",
96
+ "HeyReachLikedPostTrigger",
97
+ "HeyReachViewedProfileTrigger",
98
+ "HeyReachCampaignCompletedTrigger",
99
+ "HeyReachLeadTagUpdatedTrigger"
100
+ ]
101
+ },
102
+ AttioCallRecordingCreatedTrigger: { kind: "schema", schema: attioCallRecordingCreatedTriggerSchema },
103
+ AttioCommentCreatedTrigger: { kind: "schema", schema: attioCommentCreatedTriggerSchema },
104
+ AttioCommentResolvedTrigger: { kind: "schema", schema: attioCommentResolvedTriggerSchema },
105
+ AttioCommentUnresolvedTrigger: { kind: "schema", schema: attioCommentUnresolvedTriggerSchema },
106
+ AttioCommentDeletedTrigger: { kind: "schema", schema: attioCommentDeletedTriggerSchema },
107
+ AttioListCreatedTrigger: { kind: "schema", schema: attioListCreatedTriggerSchema },
108
+ AttioListUpdatedTrigger: { kind: "schema", schema: attioListUpdatedTriggerSchema },
109
+ AttioListDeletedTrigger: { kind: "schema", schema: attioListDeletedTriggerSchema },
110
+ AttioListAttributeCreatedTrigger: { kind: "schema", schema: attioListAttributeCreatedTriggerSchema },
111
+ AttioListAttributeUpdatedTrigger: { kind: "schema", schema: attioListAttributeUpdatedTriggerSchema },
112
+ AttioListEntryCreatedTrigger: { kind: "schema", schema: attioListEntryCreatedTriggerSchema },
113
+ AttioListEntryUpdatedTrigger: { kind: "schema", schema: attioListEntryUpdatedTriggerSchema },
114
+ AttioListEntryDeletedTrigger: { kind: "schema", schema: attioListEntryDeletedTriggerSchema },
115
+ AttioObjectAttributeCreatedTrigger: { kind: "schema", schema: attioObjectAttributeCreatedTriggerSchema },
116
+ AttioObjectAttributeUpdatedTrigger: { kind: "schema", schema: attioObjectAttributeUpdatedTriggerSchema },
117
+ AttioNoteCreatedTrigger: { kind: "schema", schema: attioNoteCreatedTriggerSchema },
118
+ AttioNoteContentUpdatedTrigger: { kind: "schema", schema: attioNoteContentUpdatedTriggerSchema },
119
+ AttioNoteUpdatedTrigger: { kind: "schema", schema: attioNoteUpdatedTriggerSchema },
120
+ AttioNoteDeletedTrigger: { kind: "schema", schema: attioNoteDeletedTriggerSchema },
121
+ AttioRecordCreatedTrigger: attioRecordProjection(attioRecordCreatedTriggerSchema),
122
+ AttioRecordMergedTrigger: attioRecordProjection(attioRecordMergedTriggerSchema),
123
+ AttioRecordUpdatedTrigger: attioRecordProjection(attioRecordUpdatedTriggerSchema),
124
+ AttioRecordDeletedTrigger: { kind: "schema", schema: attioRecordDeletedTriggerSchema },
125
+ AttioTaskCreatedTrigger: { kind: "schema", schema: attioTaskCreatedTriggerSchema },
126
+ AttioTaskUpdatedTrigger: { kind: "schema", schema: attioTaskUpdatedTriggerSchema },
127
+ AttioTaskDeletedTrigger: { kind: "schema", schema: attioTaskDeletedTriggerSchema },
128
+ AttioWorkspaceMemberCreatedTrigger: { kind: "schema", schema: attioWorkspaceMemberCreatedTriggerSchema },
129
+ AttioTrigger: {
130
+ kind: "union",
131
+ members: [
132
+ "AttioCallRecordingCreatedTrigger",
133
+ "AttioCommentCreatedTrigger",
134
+ "AttioCommentResolvedTrigger",
135
+ "AttioCommentUnresolvedTrigger",
136
+ "AttioCommentDeletedTrigger",
137
+ "AttioListCreatedTrigger",
138
+ "AttioListUpdatedTrigger",
139
+ "AttioListDeletedTrigger",
140
+ "AttioListAttributeCreatedTrigger",
141
+ "AttioListAttributeUpdatedTrigger",
142
+ "AttioListEntryCreatedTrigger",
143
+ "AttioListEntryUpdatedTrigger",
144
+ "AttioListEntryDeletedTrigger",
145
+ "AttioObjectAttributeCreatedTrigger",
146
+ "AttioObjectAttributeUpdatedTrigger",
147
+ "AttioNoteCreatedTrigger",
148
+ "AttioNoteContentUpdatedTrigger",
149
+ "AttioNoteUpdatedTrigger",
150
+ "AttioNoteDeletedTrigger",
151
+ "AttioRecordCreatedTrigger",
152
+ "AttioRecordMergedTrigger",
153
+ "AttioRecordUpdatedTrigger",
154
+ "AttioRecordDeletedTrigger",
155
+ "AttioTaskCreatedTrigger",
156
+ "AttioTaskUpdatedTrigger",
157
+ "AttioTaskDeletedTrigger",
158
+ "AttioWorkspaceMemberCreatedTrigger"
159
+ ]
160
+ },
161
+ CronTrigger: { kind: "schema", schema: cronTriggerSchema },
162
+ WebhookTrigger: { kind: "schema", schema: webhookTriggerSchema, typeParams: "<TBody = unknown>", fieldOverrides: { body: "TBody" } },
163
+ WebMonitorTrigger: { kind: "schema", schema: webMonitorTriggerSchema, typeParams: "<TPayload = unknown>", fieldOverrides: { payload: "TPayload" } }
164
+ };
165
+ export function isProjectedTriggerName(name) {
166
+ return name in triggerPayloadProjections;
167
+ }
package/dist/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as z from "zod";
2
2
  import type { RunHistoryAction } from "./RunHistoryTypes.js";
3
3
  import { SlackChannelType, slackChannelTypeSchema } from "./SlackTypes.js";
4
- import { attioAttributeSchema, attioObjectSchema, attioObjectWithAttributesSchema, attioRecordIdentifierSchema, attioRecordSchema, attioUpsertErrorSchema, linearProjectSummarySchema, linearTeamSchema, slackUserResponseSchema } from "./Tools.js";
4
+ import { attioAttributeHistoryEntrySchema, attioAttributeSchema, attioCallRecordingSchema, attioCommentSchema, attioFileSchema, attioListEntrySchema, attioListSchema, attioMeetingSchema, attioNoteSchema, attioObjectSchema, attioObjectWithAttributesSchema, attioRecordIdentifierSchema, attioRecordSchema, attioSearchMatchSchema, attioSelectOptionEntitySchema, attioStatusSchema, attioTaskSchema, attioThreadSchema, attioTranscriptSchema, attioWorkspaceMemberSchema, linearProjectSummarySchema, linearTeamSchema, slackUserResponseSchema } from "./Tools.js";
5
5
  export declare const roleSchema: z.ZodEnum<{
6
6
  user: "user";
7
7
  admin: "admin";
@@ -83,6 +83,21 @@ export type AttioAttribute = z.infer<typeof attioAttributeSchema>;
83
83
  export type AttioObjectWithAttributes = z.infer<typeof attioObjectWithAttributesSchema>;
84
84
  export type AttioRecordIdentifier = z.infer<typeof attioRecordIdentifierSchema>;
85
85
  export type AttioRecord = z.infer<typeof attioRecordSchema>;
86
+ export type AttioSearchMatch = z.infer<typeof attioSearchMatchSchema>;
87
+ export type AttioAttributeHistoryEntry = z.infer<typeof attioAttributeHistoryEntrySchema>;
88
+ export type AttioWorkspaceMember = z.infer<typeof attioWorkspaceMemberSchema>;
89
+ export type AttioTask = z.infer<typeof attioTaskSchema>;
90
+ export type AttioNote = z.infer<typeof attioNoteSchema>;
91
+ export type AttioComment = z.infer<typeof attioCommentSchema>;
92
+ export type AttioThread = z.infer<typeof attioThreadSchema>;
93
+ export type AttioList = z.infer<typeof attioListSchema>;
94
+ export type AttioListEntry = z.infer<typeof attioListEntrySchema>;
95
+ export type AttioMeeting = z.infer<typeof attioMeetingSchema>;
96
+ export type AttioStatus = z.infer<typeof attioStatusSchema>;
97
+ export type AttioSelectOptionEntity = z.infer<typeof attioSelectOptionEntitySchema>;
98
+ export type AttioCallRecording = z.infer<typeof attioCallRecordingSchema>;
99
+ export type AttioTranscript = z.infer<typeof attioTranscriptSchema>;
100
+ export type AttioFile = z.infer<typeof attioFileSchema>;
86
101
  export declare const linearWorkspaceSchema: z.ZodObject<{
87
102
  id: z.ZodString;
88
103
  name: z.ZodString;
@@ -9036,7 +9051,6 @@ export declare const sdkJobServerCheckResponseSchema: z.ZodObject<{
9036
9051
  httpStatus: z.ZodOptional<z.ZodNumber>;
9037
9052
  }, z.core.$strip>;
9038
9053
  export type SdkJobServerCheckResponse = z.infer<typeof sdkJobServerCheckResponseSchema>;
9039
- export type AttioUpsertError = z.infer<typeof attioUpsertErrorSchema>;
9040
9054
  export declare const agentIdParamsSchema: z.ZodObject<{
9041
9055
  agentId: z.ZodString;
9042
9056
  }, z.core.$strip>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "terse-types",
3
- "version": "0.0.71",
3
+ "version": "0.0.72",
4
4
  "type": "module",
5
5
  "description": "Shared Terse TypeScript types, enums, constants, and helpers.",
6
6
  "main": "./dist/index.js",
@@ -1,19 +0,0 @@
1
- /**
2
- * Collapses a single Attio value entry (or nested structure) toward primitives /
3
- * simple objects, matching the shape produced for generated Attio tool outputs.
4
- */
5
- export declare function flattenAttioLeafValue(value: unknown): unknown;
6
- /**
7
- * Flattens one attribute’s raw value (often an array of interaction rows from the REST API).
8
- * @param preferArray When true, keep all entries as an array; when false, use the first entry only.
9
- */
10
- export declare function flattenAttioAttributeValue(rawValue: unknown, preferArray: boolean): unknown;
11
- /**
12
- * Flattens `record.values` from Attio’s GET record / webhook enrichment payload.
13
- */
14
- export declare function flattenAttioRecordValues(values: Record<string, unknown>, isMultiValueAttribute: (attributeSlug: string) => boolean): Record<string, unknown>;
15
- /**
16
- * Slug-only heuristic when object attribute metadata is unavailable (e.g. Attio webhook triggers).
17
- * Prefer {@link flattenAttioRecordValues} with object-aware multi-value info from codegen when possible.
18
- */
19
- export declare function isProbablyAttioMultiValueAttributeSlug(attributeSlug: string): boolean;
@@ -1,71 +0,0 @@
1
- /** Keys Attio nests on attribute timeline entries (not the semantic payload). */
2
- const ATTIO_VALUE_METADATA_KEYS = new Set([
3
- "active_from",
4
- "active_until",
5
- "attribute_type",
6
- "created_by_actor"
7
- ]);
8
- /**
9
- * Collapses a single Attio value entry (or nested structure) toward primitives /
10
- * simple objects, matching the shape produced for generated Attio tool outputs.
11
- */
12
- export function flattenAttioLeafValue(value) {
13
- if (value === null || value === undefined)
14
- return value;
15
- if (Array.isArray(value))
16
- return value.map(entry => flattenAttioLeafValue(entry));
17
- if (typeof value !== "object")
18
- return value;
19
- const rawObject = value;
20
- if (typeof rawObject.full_name === "string")
21
- return rawObject.full_name;
22
- if (typeof rawObject.email_address === "string")
23
- return rawObject.email_address;
24
- if (typeof rawObject.domain === "string")
25
- return rawObject.domain;
26
- if (typeof rawObject.phone_number === "string")
27
- return rawObject.phone_number;
28
- if ("value" in rawObject)
29
- return flattenAttioLeafValue(rawObject.value);
30
- const dataEntries = Object.entries(rawObject).filter(([key]) => !ATTIO_VALUE_METADATA_KEYS.has(key));
31
- if (dataEntries.length === 0)
32
- return rawObject;
33
- if (dataEntries.length === 1)
34
- return flattenAttioLeafValue(dataEntries[0][1]);
35
- return Object.fromEntries(dataEntries.map(([key, entryValue]) => [key, flattenAttioLeafValue(entryValue)]));
36
- }
37
- /**
38
- * Flattens one attribute’s raw value (often an array of interaction rows from the REST API).
39
- * @param preferArray When true, keep all entries as an array; when false, use the first entry only.
40
- */
41
- export function flattenAttioAttributeValue(rawValue, preferArray) {
42
- if (!Array.isArray(rawValue))
43
- return flattenAttioLeafValue(rawValue);
44
- const flattened = rawValue.map(entry => flattenAttioLeafValue(entry)).filter(entry => entry !== undefined);
45
- return preferArray ? flattened : flattened[0];
46
- }
47
- /**
48
- * Flattens `record.values` from Attio’s GET record / webhook enrichment payload.
49
- */
50
- export function flattenAttioRecordValues(values, isMultiValueAttribute) {
51
- const flattenedValues = {};
52
- for (const [attributeSlug, rawValue] of Object.entries(values)) {
53
- flattenedValues[attributeSlug] = flattenAttioAttributeValue(rawValue, isMultiValueAttribute(attributeSlug));
54
- }
55
- return flattenedValues;
56
- }
57
- /**
58
- * Slug-only heuristic when object attribute metadata is unavailable (e.g. Attio webhook triggers).
59
- * Prefer {@link flattenAttioRecordValues} with object-aware multi-value info from codegen when possible.
60
- */
61
- export function isProbablyAttioMultiValueAttributeSlug(attributeSlug) {
62
- const slug = attributeSlug.toLowerCase();
63
- return (slug === "email_addresses" ||
64
- slug === "domains" ||
65
- slug === "phone_numbers" ||
66
- slug === "social_profiles" ||
67
- slug === "links" ||
68
- slug === "tags" ||
69
- slug.endsWith("_addresses") ||
70
- slug.endsWith("_ids"));
71
- }
@@ -1,6 +0,0 @@
1
- import { z } from "zod";
2
- export declare const organizationMetadataSchema: z.ZodObject<{
3
- stripeCustomerId: z.ZodString;
4
- runExecutionBlocked: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>, z.ZodTransform<boolean, string | boolean | undefined>>;
5
- }, z.core.$strip>;
6
- export type OrganizationMetadata = z.infer<typeof organizationMetadataSchema>;
@@ -1,10 +0,0 @@
1
- import { z } from "zod";
2
- // Can be serialized a string, supports deserialization
3
- const booleanMetadataSchema = z
4
- .union([z.boolean(), z.string()])
5
- .optional()
6
- .transform(value => value === true || value === "true");
7
- export const organizationMetadataSchema = z.object({
8
- stripeCustomerId: z.string(),
9
- runExecutionBlocked: booleanMetadataSchema
10
- });