@hitch42/applet 0.1.0-beta.3 → 0.1.0-beta.9
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/_internal/server.d.ts +14 -1
- package/dist/_internal/server.js +23 -74
- package/dist/applet.js +53 -29
- package/dist/build-BfbTbt_r.js +2 -0
- package/dist/{build-Ch3pALLA.js → build-CAb26kMY.js} +30 -14
- package/dist/ci-5qWl7lT3.js +68 -0
- package/dist/client.d.ts +3 -3
- package/dist/{contract-DMrpbaLJ.d.ts → contract-rP_eV9PK.d.ts} +1 -1
- package/dist/{deploy-DP2Bg6nt.js → deploy-D_OFJ6-Q.js} +193 -30
- package/dist/email-DBTVhNB_.js +62 -0
- package/dist/generate-BgepN4-b.js +2 -0
- package/dist/{generate-BuszZ9-U.js → generate-CBPnHoqX.js} +40 -30
- package/dist/index.d.ts +122 -11
- package/dist/index.js +141 -26
- package/dist/{init-BjWWDqqX.js → init-tfzwuYnk.js} +12 -8
- package/dist/load-config-BYSxDVAl.js +27 -0
- package/dist/login-C7RKmmTe.js +12 -0
- package/dist/{logs-m00pzr_O.js → logs-DgjgAxj2.js} +3 -3
- package/dist/{manifest-DyoJ1MIL.js → manifest-Bp87Uz0a.js} +6 -0
- package/dist/{manifest-BQCAxATS.d.ts → manifest-DD_SGkS6.d.ts} +5 -0
- package/dist/me-BW7Paary.js +32 -0
- package/dist/{project-MN3mFxeE.js → project-D6XHllmC.js} +26 -20
- package/dist/prompt-ChS-grYO.js +29 -0
- package/dist/react.d.ts +1 -1
- package/dist/react.js +40 -42
- package/dist/schedules-dhU1yyFr.js +42 -0
- package/dist/server.d.ts +3 -3
- package/dist/telephony-protocol-D-nf3Gca.d.ts +76 -0
- package/dist/telephony.d.ts +77 -0
- package/dist/telephony.js +607 -0
- package/dist/{upload-YbRKEqR6.d.ts → upload-DKZzz5kW.d.ts} +6 -6
- package/dist/{variables-CP7Ce3Np.js → variables-Bwnr7oxf.js} +3 -28
- package/dist/vite.d.ts +1 -1
- package/dist/vite.js +458 -27
- package/dist/workflow-engine-MogejNfF.js +117 -0
- package/dist/{auth-DaVK0k5R.js → workspace-XVtM12ZC.js} +44 -4
- package/package.json +6 -1
- package/scaffold/.agents/skills/hitch-applets/SKILL.md +34 -15
- package/scaffold/.agents/skills/hitch-applets/references/email-tracking.md +49 -0
- package/scaffold/.agents/skills/hitch-applets/references/files.md +3 -3
- package/scaffold/.agents/skills/hitch-applets/references/manifest.md +21 -2
- package/scaffold/.agents/skills/hitch-applets/references/performance.md +74 -0
- package/scaffold/.agents/skills/hitch-applets/references/records.md +30 -8
- package/scaffold/.agents/skills/hitch-applets/references/schedules.md +7 -2
- package/scaffold/.agents/skills/hitch-applets/references/server.md +0 -3
- package/scaffold/.agents/skills/hitch-applets/references/workflows.md +11 -3
- package/scaffold/.agents/skills/hitch-cli/SKILL.md +129 -0
- package/scaffold/.agents/skills/hitch-data/SKILL.md +51 -0
- package/scaffold/.agents/skills/hitch-data/references/attributes.md +121 -0
- package/scaffold/.agents/skills/hitch-data/references/limits.md +64 -0
- package/scaffold/.agents/skills/hitch-theory/SKILL.md +150 -0
- package/scaffold/.github/workflows/hitch.yml +1 -7
- package/dist/build-BqoQ-uNz.js +0 -2
- package/dist/generate-CRVA0Ll5.js +0 -2
- package/dist/load-config-BnxocLAQ.js +0 -56
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { _ as RegisteredWorkflows, a as AppletSourceDefinition, c as appletManifestSchema, d as RegisteredCatalog, f as RegisteredContract, g as RegisteredVariables, h as RegisteredVariableKeys, i as AppletPackages, l as appletSourceDefinitionSchema, m as RegisteredRouter, n as AppletManifest, o as RegisteredAppletSourceDefinition, p as RegisteredManifest, r as AppletManifestObject, s as appletDefinitionSchema, t as AppletDefinition, u as HitchRegister, v as registerHitchContract } from "./manifest-
|
|
2
|
-
import { n as pruneContract, t as NarrowContract } from "./contract-
|
|
3
|
-
import { a as UploadedHitchFile, c as createFileOutputSchema, d as getFileOutputSchema, i as UploadProgress, l as fileSchema, n as FilesUpload, r as UploadFileOptions, s as uploadFile, t as FilesClient, u as filesContract } from "./upload-
|
|
1
|
+
import { _ as RegisteredWorkflows, a as AppletSourceDefinition, c as appletManifestSchema, d as RegisteredCatalog, f as RegisteredContract, g as RegisteredVariables, h as RegisteredVariableKeys, i as AppletPackages, l as appletSourceDefinitionSchema, m as RegisteredRouter, n as AppletManifest, o as RegisteredAppletSourceDefinition, p as RegisteredManifest, r as AppletManifestObject, s as appletDefinitionSchema, t as AppletDefinition, u as HitchRegister, v as registerHitchContract } from "./manifest-DD_SGkS6.js";
|
|
2
|
+
import { n as pruneContract, t as NarrowContract } from "./contract-rP_eV9PK.js";
|
|
3
|
+
import { a as UploadedHitchFile, c as createFileOutputSchema, d as getFileOutputSchema, i as UploadProgress, l as fileSchema, n as FilesUpload, r as UploadFileOptions, s as uploadFile, t as FilesClient, u as filesContract } from "./upload-DKZzz5kW.js";
|
|
4
|
+
import { a as createEmailPixelOutputSchema, c as emailTagsSchema, d as listEmailTrackersInputSchema, f as listEmailTrackersOutputSchema, i as createEmailPixelInputSchema, l as emailTrackerSchema, m as markEmailTrackerSentInputSchema, n as EmailTracker, o as emailContract, r as ListEmailTrackersOutput, s as emailTagKeySchema, t as TelephonyMessageReceivedEvent, u as getEmailTrackerInputSchema } from "./telephony-protocol-D-nf3Gca.js";
|
|
4
5
|
import { ContractProcedure, Meta } from "@orpc/contract";
|
|
5
6
|
import { z } from "zod";
|
|
6
|
-
//#region src/workspace.d.
|
|
7
|
+
//#region ../shared/auth/src/workspace.d.mts
|
|
7
8
|
interface HitchConfig {
|
|
8
9
|
sdk: string;
|
|
9
10
|
org: string;
|
|
11
|
+
githubWorkflow?: boolean;
|
|
10
12
|
}
|
|
11
13
|
//#endregion
|
|
12
14
|
//#region src/hitch/me.d.ts
|
|
@@ -33,12 +35,121 @@ type HitchMe = {
|
|
|
33
35
|
} | null;
|
|
34
36
|
multiOrg: boolean;
|
|
35
37
|
};
|
|
36
|
-
declare const meSchema: z.ZodType<HitchMe>;
|
|
38
|
+
declare const meSchema: z.ZodType<HitchMe, HitchMe>;
|
|
37
39
|
type MeContract = {
|
|
38
|
-
get: ContractProcedure<z.ZodType<void>, z.ZodType<HitchMe>, Record<never, never>, Meta>;
|
|
40
|
+
get: ContractProcedure<z.ZodType<void, void>, z.ZodType<HitchMe, HitchMe>, Record<never, never>, Meta>;
|
|
39
41
|
};
|
|
40
42
|
declare const meContract: MeContract;
|
|
41
43
|
//#endregion
|
|
44
|
+
//#region src/hitch/telephony.d.ts
|
|
45
|
+
type HitchPhoneNumber = {
|
|
46
|
+
id: string;
|
|
47
|
+
e164: string;
|
|
48
|
+
label: string;
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
canRead: boolean;
|
|
51
|
+
canSend: boolean;
|
|
52
|
+
canCall: boolean;
|
|
53
|
+
voiceEnabled: boolean;
|
|
54
|
+
};
|
|
55
|
+
type HitchCall = {
|
|
56
|
+
id: string;
|
|
57
|
+
numberId: string;
|
|
58
|
+
direction: "inbound" | "outbound";
|
|
59
|
+
status: "starting" | "ringing" | "active" | "ended" | "missed" | "failed";
|
|
60
|
+
from: string;
|
|
61
|
+
to: string;
|
|
62
|
+
userId: string | null;
|
|
63
|
+
answeredAt: string | null;
|
|
64
|
+
endedAt: string | null;
|
|
65
|
+
durationSeconds: number | null;
|
|
66
|
+
voicemailSeconds: number | null;
|
|
67
|
+
hangupCause: string | null;
|
|
68
|
+
record: boolean;
|
|
69
|
+
hasRecording: boolean;
|
|
70
|
+
transcriptStatus: "pending" | "done" | "failed" | null;
|
|
71
|
+
transcript: {
|
|
72
|
+
segments: {
|
|
73
|
+
side: "member" | "customer";
|
|
74
|
+
speaker: number;
|
|
75
|
+
start: number;
|
|
76
|
+
end: number;
|
|
77
|
+
text: string;
|
|
78
|
+
}[];
|
|
79
|
+
} | null;
|
|
80
|
+
createdAt: string;
|
|
81
|
+
};
|
|
82
|
+
type ListHitchCallsInput = ListHitchMessagesInput & {
|
|
83
|
+
status?: HitchCall["status"];
|
|
84
|
+
};
|
|
85
|
+
type HitchMessage = {
|
|
86
|
+
id: string;
|
|
87
|
+
numberId: string;
|
|
88
|
+
direction: "inbound" | "outbound";
|
|
89
|
+
status: "pending" | "unknown" | "accepted" | "sent" | "delivered" | "unconfirmed" | "failed" | "received";
|
|
90
|
+
from: string;
|
|
91
|
+
to: string;
|
|
92
|
+
body: string | null;
|
|
93
|
+
redacted: boolean;
|
|
94
|
+
userId: string | null;
|
|
95
|
+
appletId: string | null;
|
|
96
|
+
requestId: string | null;
|
|
97
|
+
errorCode: string | null;
|
|
98
|
+
errorDetail: string | null;
|
|
99
|
+
statusAt: string | null;
|
|
100
|
+
createdAt: string;
|
|
101
|
+
};
|
|
102
|
+
type ListHitchMessagesInput = {
|
|
103
|
+
numberId?: string;
|
|
104
|
+
userId?: string;
|
|
105
|
+
direction?: "inbound" | "outbound";
|
|
106
|
+
since?: string;
|
|
107
|
+
until?: string;
|
|
108
|
+
cursor?: string;
|
|
109
|
+
limit?: number;
|
|
110
|
+
};
|
|
111
|
+
type SendHitchMessageInput = {
|
|
112
|
+
numberId: string;
|
|
113
|
+
to: string;
|
|
114
|
+
body: string;
|
|
115
|
+
requestId?: string;
|
|
116
|
+
};
|
|
117
|
+
type MessageIdInput = {
|
|
118
|
+
id: string;
|
|
119
|
+
};
|
|
120
|
+
type NumbersOutput = {
|
|
121
|
+
data: HitchPhoneNumber[];
|
|
122
|
+
};
|
|
123
|
+
type MessagesOutput = {
|
|
124
|
+
data: HitchMessage[];
|
|
125
|
+
nextCursor: string | null;
|
|
126
|
+
};
|
|
127
|
+
type CallsOutput = {
|
|
128
|
+
data: HitchCall[];
|
|
129
|
+
nextCursor: string | null;
|
|
130
|
+
};
|
|
131
|
+
declare const hitchPhoneNumberSchema: z.ZodType<HitchPhoneNumber, HitchPhoneNumber>;
|
|
132
|
+
declare const hitchMessageSchema: z.ZodType<HitchMessage, HitchMessage>;
|
|
133
|
+
declare const listHitchNumbersOutputSchema: z.ZodType<NumbersOutput, NumbersOutput>;
|
|
134
|
+
declare const listHitchMessagesOutputSchema: z.ZodType<MessagesOutput, MessagesOutput>;
|
|
135
|
+
declare const listHitchMessagesInputSchema: z.ZodType<ListHitchMessagesInput, ListHitchMessagesInput>;
|
|
136
|
+
declare const sendHitchMessageInputSchema: z.ZodType<SendHitchMessageInput, SendHitchMessageInput>;
|
|
137
|
+
type TelephonyContract = {
|
|
138
|
+
calls: {
|
|
139
|
+
get: ContractProcedure<z.ZodType<MessageIdInput, MessageIdInput>, z.ZodType<HitchCall, HitchCall>, Record<never, never>, Meta>;
|
|
140
|
+
list: ContractProcedure<z.ZodType<ListHitchCallsInput, ListHitchCallsInput>, z.ZodType<CallsOutput, CallsOutput>, Record<never, never>, Meta>;
|
|
141
|
+
};
|
|
142
|
+
numbers: {
|
|
143
|
+
list: ContractProcedure<z.ZodType<void, void>, z.ZodType<NumbersOutput, NumbersOutput>, Record<never, never>, Meta>;
|
|
144
|
+
};
|
|
145
|
+
messages: {
|
|
146
|
+
get: ContractProcedure<z.ZodType<MessageIdInput, MessageIdInput>, z.ZodType<HitchMessage, HitchMessage>, Record<never, never>, Meta>;
|
|
147
|
+
list: ContractProcedure<z.ZodType<ListHitchMessagesInput, ListHitchMessagesInput>, z.ZodType<MessagesOutput, MessagesOutput>, Record<never, never>, Meta>;
|
|
148
|
+
send: ContractProcedure<z.ZodType<SendHitchMessageInput, SendHitchMessageInput>, z.ZodType<HitchMessage, HitchMessage>, Record<never, never>, Meta>;
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
declare const telephonyContract: TelephonyContract;
|
|
152
|
+
//#endregion
|
|
42
153
|
//#region src/hitch/teams.d.ts
|
|
43
154
|
type HitchTeam = {
|
|
44
155
|
id: string;
|
|
@@ -61,14 +172,14 @@ type TeamsOutput = {
|
|
|
61
172
|
type TeamMembersOutput = {
|
|
62
173
|
data: HitchTeamMember[];
|
|
63
174
|
};
|
|
64
|
-
declare const teamSchema: z.ZodType<HitchTeam>;
|
|
65
|
-
declare const teamMemberSchema: z.ZodType<HitchTeamMember>;
|
|
175
|
+
declare const teamSchema: z.ZodType<HitchTeam, HitchTeam>;
|
|
176
|
+
declare const teamMemberSchema: z.ZodType<HitchTeamMember, HitchTeamMember>;
|
|
66
177
|
type TeamsContract = {
|
|
67
|
-
list: ContractProcedure<z.ZodType<void>, z.ZodType<TeamsOutput>, Record<never, never>, Meta>;
|
|
178
|
+
list: ContractProcedure<z.ZodType<void, void>, z.ZodType<TeamsOutput, TeamsOutput>, Record<never, never>, Meta>;
|
|
68
179
|
members: {
|
|
69
|
-
list: ContractProcedure<z.ZodType<TeamIdInput>, z.ZodType<TeamMembersOutput>, Record<never, never>, Meta>;
|
|
180
|
+
list: ContractProcedure<z.ZodType<TeamIdInput, TeamIdInput>, z.ZodType<TeamMembersOutput, TeamMembersOutput>, Record<never, never>, Meta>;
|
|
70
181
|
};
|
|
71
182
|
};
|
|
72
183
|
declare const teamsContract: TeamsContract;
|
|
73
184
|
//#endregion
|
|
74
|
-
export { type AppletDefinition, type AppletManifest, type AppletManifestObject, type AppletPackages, type AppletSourceDefinition, type FilesClient, type FilesUpload, type HitchConfig, type HitchMe, type HitchRegister, type HitchTeam, type HitchTeamMember, type NarrowContract, type RegisteredAppletSourceDefinition, type RegisteredCatalog, type RegisteredContract, type RegisteredManifest, type RegisteredRouter, type RegisteredVariableKeys, type RegisteredVariables, type RegisteredWorkflows, type UploadFileOptions, type UploadProgress, type UploadedHitchFile, appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createFileOutputSchema, fileSchema, filesContract, getFileOutputSchema, meContract, meSchema, pruneContract, registerHitchContract, teamMemberSchema, teamSchema, teamsContract, uploadFile };
|
|
185
|
+
export { type AppletDefinition, type AppletManifest, type AppletManifestObject, type AppletPackages, type AppletSourceDefinition, type EmailTracker, type FilesClient, type FilesUpload, type HitchConfig, type HitchMe, type HitchMessage, type HitchPhoneNumber, type HitchRegister, type HitchTeam, type HitchTeamMember, type ListEmailTrackersOutput, type ListHitchMessagesInput, type NarrowContract, type RegisteredAppletSourceDefinition, type RegisteredCatalog, type RegisteredContract, type RegisteredManifest, type RegisteredRouter, type RegisteredVariableKeys, type RegisteredVariables, type RegisteredWorkflows, type SendHitchMessageInput, type TelephonyContract, type TelephonyMessageReceivedEvent, type UploadFileOptions, type UploadProgress, type UploadedHitchFile, appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createEmailPixelInputSchema, createEmailPixelOutputSchema, createFileOutputSchema, emailContract, emailTagKeySchema, emailTagsSchema, emailTrackerSchema, fileSchema, filesContract, getEmailTrackerInputSchema, getFileOutputSchema, hitchMessageSchema, hitchPhoneNumberSchema, listEmailTrackersInputSchema, listEmailTrackersOutputSchema, listHitchMessagesInputSchema, listHitchMessagesOutputSchema, listHitchNumbersOutputSchema, markEmailTrackerSentInputSchema, meContract, meSchema, pruneContract, registerHitchContract, sendHitchMessageInputSchema, teamMemberSchema, teamSchema, teamsContract, telephonyContract, uploadFile };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { i as registerHitchContract, t as uploadFile } from "./upload-DRbVhuDm.js";
|
|
2
|
-
import { n as
|
|
2
|
+
import { a as emailTagsSchema, c as listEmailTrackersInputSchema, d as markEmailTrackerSentInputSchema, i as emailTagKeySchema, l as listEmailTrackersOutputSchema, n as createEmailPixelOutputSchema, o as emailTrackerSchema, r as emailContract, s as getEmailTrackerInputSchema, t as createEmailPixelInputSchema } from "./email-DBTVhNB_.js";
|
|
3
|
+
import { n as meSchema, t as meContract } from "./me-BW7Paary.js";
|
|
4
|
+
import { n as appletManifestSchema, r as appletSourceDefinitionSchema, t as appletDefinitionSchema } from "./manifest-Bp87Uz0a.js";
|
|
3
5
|
import { oc } from "@orpc/contract";
|
|
4
6
|
import { z } from "zod";
|
|
5
7
|
//#region src/hitch/contract.ts
|
|
@@ -78,34 +80,147 @@ const filesContract = {
|
|
|
78
80
|
}).input(fileIdInputSchema).output(getFileOutputSchema)
|
|
79
81
|
};
|
|
80
82
|
//#endregion
|
|
81
|
-
//#region src/hitch/
|
|
82
|
-
const
|
|
83
|
+
//#region src/hitch/telephony.ts
|
|
84
|
+
const hitchPhoneNumberSchema = z.object({
|
|
83
85
|
id: z.uuid(),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
e164: z.string(),
|
|
87
|
+
label: z.string(),
|
|
88
|
+
enabled: z.boolean(),
|
|
89
|
+
canRead: z.boolean(),
|
|
90
|
+
canSend: z.boolean(),
|
|
91
|
+
canCall: z.boolean(),
|
|
92
|
+
voiceEnabled: z.boolean()
|
|
93
|
+
});
|
|
94
|
+
const hitchCallSchema = z.object({
|
|
95
|
+
id: z.uuid(),
|
|
96
|
+
numberId: z.uuid(),
|
|
97
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
98
|
+
status: z.enum([
|
|
99
|
+
"starting",
|
|
100
|
+
"ringing",
|
|
101
|
+
"active",
|
|
102
|
+
"ended",
|
|
103
|
+
"missed",
|
|
104
|
+
"failed"
|
|
105
|
+
]),
|
|
106
|
+
from: z.string(),
|
|
107
|
+
to: z.string(),
|
|
108
|
+
userId: z.uuid().nullable(),
|
|
109
|
+
answeredAt: z.string().nullable(),
|
|
110
|
+
endedAt: z.string().nullable(),
|
|
111
|
+
durationSeconds: z.number().nullable(),
|
|
112
|
+
voicemailSeconds: z.number().nullable(),
|
|
113
|
+
hangupCause: z.string().nullable(),
|
|
114
|
+
record: z.boolean(),
|
|
115
|
+
hasRecording: z.boolean(),
|
|
116
|
+
transcriptStatus: z.enum([
|
|
117
|
+
"pending",
|
|
118
|
+
"done",
|
|
119
|
+
"failed"
|
|
120
|
+
]).nullable(),
|
|
121
|
+
transcript: z.object({ segments: z.array(z.object({
|
|
122
|
+
side: z.enum(["member", "customer"]),
|
|
123
|
+
speaker: z.number(),
|
|
124
|
+
start: z.number(),
|
|
125
|
+
end: z.number(),
|
|
126
|
+
text: z.string()
|
|
127
|
+
})) }).nullable(),
|
|
128
|
+
createdAt: z.string()
|
|
129
|
+
});
|
|
130
|
+
const hitchMessageSchema = z.object({
|
|
131
|
+
id: z.uuid(),
|
|
132
|
+
numberId: z.uuid(),
|
|
133
|
+
direction: z.enum(["inbound", "outbound"]),
|
|
134
|
+
status: z.enum([
|
|
135
|
+
"pending",
|
|
136
|
+
"unknown",
|
|
137
|
+
"accepted",
|
|
138
|
+
"sent",
|
|
139
|
+
"delivered",
|
|
140
|
+
"unconfirmed",
|
|
141
|
+
"failed",
|
|
142
|
+
"received"
|
|
143
|
+
]),
|
|
144
|
+
from: z.string(),
|
|
145
|
+
to: z.string(),
|
|
146
|
+
body: z.string().nullable(),
|
|
147
|
+
redacted: z.boolean(),
|
|
148
|
+
userId: z.uuid().nullable(),
|
|
149
|
+
appletId: z.uuid().nullable(),
|
|
150
|
+
requestId: z.string().nullable(),
|
|
151
|
+
errorCode: z.string().nullable(),
|
|
152
|
+
errorDetail: z.string().nullable(),
|
|
153
|
+
statusAt: z.string().nullable(),
|
|
154
|
+
createdAt: z.string()
|
|
155
|
+
});
|
|
156
|
+
const listHitchNumbersOutputSchema = z.object({ data: z.array(hitchPhoneNumberSchema) });
|
|
157
|
+
const listHitchMessagesOutputSchema = z.object({
|
|
158
|
+
data: z.array(hitchMessageSchema),
|
|
159
|
+
nextCursor: z.string().nullable()
|
|
160
|
+
});
|
|
161
|
+
const listHitchCallsOutputSchema = z.object({
|
|
162
|
+
data: z.array(hitchCallSchema),
|
|
163
|
+
nextCursor: z.string().nullable()
|
|
87
164
|
});
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
165
|
+
const idInputSchema = z.object({ id: z.uuid() });
|
|
166
|
+
const listInputFields = {
|
|
167
|
+
numberId: z.uuid().optional(),
|
|
168
|
+
userId: z.uuid().optional(),
|
|
169
|
+
direction: z.enum(["inbound", "outbound"]).optional(),
|
|
170
|
+
since: z.iso.datetime().optional(),
|
|
171
|
+
until: z.iso.datetime().optional(),
|
|
172
|
+
cursor: z.string().optional(),
|
|
173
|
+
limit: z.number().int().min(1).max(200).optional()
|
|
174
|
+
};
|
|
175
|
+
const listHitchMessagesInputSchema = z.object(listInputFields);
|
|
176
|
+
const listHitchCallsInputSchema = z.object({
|
|
177
|
+
...listInputFields,
|
|
178
|
+
status: z.enum([
|
|
179
|
+
"starting",
|
|
180
|
+
"ringing",
|
|
181
|
+
"active",
|
|
182
|
+
"ended",
|
|
183
|
+
"missed",
|
|
184
|
+
"failed"
|
|
185
|
+
]).optional()
|
|
95
186
|
});
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
code: z.string()
|
|
102
|
-
}).nullable(),
|
|
103
|
-
multiOrg: z.boolean()
|
|
187
|
+
const sendHitchMessageInputSchema = z.object({
|
|
188
|
+
numberId: z.uuid(),
|
|
189
|
+
to: z.string(),
|
|
190
|
+
body: z.string().min(1).max(1600),
|
|
191
|
+
requestId: z.string().min(1).max(200).optional()
|
|
104
192
|
});
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
193
|
+
const telephonyContract = {
|
|
194
|
+
calls: {
|
|
195
|
+
get: oc.route({
|
|
196
|
+
method: "GET",
|
|
197
|
+
path: "/v1/telephony/calls/{id}"
|
|
198
|
+
}).input(idInputSchema).output(hitchCallSchema),
|
|
199
|
+
list: oc.route({
|
|
200
|
+
method: "GET",
|
|
201
|
+
path: "/v1/telephony/calls"
|
|
202
|
+
}).input(listHitchCallsInputSchema).output(listHitchCallsOutputSchema)
|
|
203
|
+
},
|
|
204
|
+
numbers: { list: oc.route({
|
|
205
|
+
method: "GET",
|
|
206
|
+
path: "/v1/telephony/numbers"
|
|
207
|
+
}).input(z.void()).output(listHitchNumbersOutputSchema) },
|
|
208
|
+
messages: {
|
|
209
|
+
get: oc.route({
|
|
210
|
+
method: "GET",
|
|
211
|
+
path: "/v1/telephony/messages/{id}"
|
|
212
|
+
}).input(idInputSchema).output(hitchMessageSchema),
|
|
213
|
+
list: oc.route({
|
|
214
|
+
method: "GET",
|
|
215
|
+
path: "/v1/telephony/messages"
|
|
216
|
+
}).input(listHitchMessagesInputSchema).output(listHitchMessagesOutputSchema),
|
|
217
|
+
send: oc.route({
|
|
218
|
+
method: "POST",
|
|
219
|
+
path: "/v1/telephony/messages",
|
|
220
|
+
successStatus: 201
|
|
221
|
+
}).input(sendHitchMessageInputSchema).output(hitchMessageSchema)
|
|
222
|
+
}
|
|
223
|
+
};
|
|
109
224
|
//#endregion
|
|
110
225
|
//#region src/hitch/teams.ts
|
|
111
226
|
const teamSchema = z.object({
|
|
@@ -133,4 +248,4 @@ const teamsContract = {
|
|
|
133
248
|
}).input(teamIdInputSchema).output(teamMembersOutputSchema) }
|
|
134
249
|
};
|
|
135
250
|
//#endregion
|
|
136
|
-
export { appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createFileOutputSchema, fileSchema, filesContract, getFileOutputSchema, meContract, meSchema, pruneContract, registerHitchContract, teamMemberSchema, teamSchema, teamsContract, uploadFile };
|
|
251
|
+
export { appletDefinitionSchema, appletManifestSchema, appletSourceDefinitionSchema, createEmailPixelInputSchema, createEmailPixelOutputSchema, createFileOutputSchema, emailContract, emailTagKeySchema, emailTagsSchema, emailTrackerSchema, fileSchema, filesContract, getEmailTrackerInputSchema, getFileOutputSchema, hitchMessageSchema, hitchPhoneNumberSchema, listEmailTrackersInputSchema, listEmailTrackersOutputSchema, listHitchMessagesInputSchema, listHitchMessagesOutputSchema, listHitchNumbersOutputSchema, markEmailTrackerSentInputSchema, meContract, meSchema, pruneContract, registerHitchContract, sendHitchMessageInputSchema, teamMemberSchema, teamSchema, teamsContract, telephonyContract, uploadFile };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as ORG_CODE_PATTERN, i as APPLET_CODE_PATTERN } from "./manifest-
|
|
2
|
-
import {
|
|
3
|
-
import { n as runGenerate } from "./generate-
|
|
4
|
-
import { n as loadAppletSourceDefinition
|
|
5
|
-
import { a as
|
|
1
|
+
import { a as ORG_CODE_PATTERN, i as APPLET_CODE_PATTERN } from "./manifest-Bp87Uz0a.js";
|
|
2
|
+
import { d as resolveInstanceUrl, i as readWorkspaceConfig, u as resolveAuthForOrg } from "./workspace-XVtM12ZC.js";
|
|
3
|
+
import { n as runGenerate } from "./generate-CBPnHoqX.js";
|
|
4
|
+
import { n as loadAppletSourceDefinition } from "./load-config-BYSxDVAl.js";
|
|
5
|
+
import { a as writeAppletSupport, n as loadCliManifest, o as writeWorkspaceSupport, t as assertWorkspaceCli } from "./project-D6XHllmC.js";
|
|
6
6
|
import { access, cp, mkdir, readdir, writeFile } from "node:fs/promises";
|
|
7
7
|
import { relative, resolve } from "node:path";
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
@@ -23,8 +23,11 @@ async function assertTargetIsAvailable(paths, targetType) {
|
|
|
23
23
|
if (existingPath !== void 0) throw new Error(`Refusing to initialize ${targetType}: ${existingPath} already exists.`);
|
|
24
24
|
}
|
|
25
25
|
async function assertDirectoryIsEmpty(path) {
|
|
26
|
-
const
|
|
27
|
-
if (
|
|
26
|
+
const entries = await readdir(path);
|
|
27
|
+
if (entries.length > 0) {
|
|
28
|
+
const [entry] = entries;
|
|
29
|
+
throw new Error(`Refusing to initialize a workspace: ${path} is not empty (${entry} exists).`);
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
async function installDependencies(target, install) {
|
|
30
33
|
if (!install) return "skipped";
|
|
@@ -33,7 +36,8 @@ async function installDependencies(target, install) {
|
|
|
33
36
|
let finished = false;
|
|
34
37
|
const child = spawn("pnpm", ["install"], {
|
|
35
38
|
cwd: target,
|
|
36
|
-
stdio: "inherit"
|
|
39
|
+
stdio: "inherit",
|
|
40
|
+
shell: process.platform === "win32"
|
|
37
41
|
});
|
|
38
42
|
child.once("error", (error) => {
|
|
39
43
|
finished = true;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { r as appletSourceDefinitionSchema } from "./manifest-Bp87Uz0a.js";
|
|
2
|
+
import { t as resolveWorkspaceOrg } from "./workspace-XVtM12ZC.js";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { loadConfigFromFile } from "vite";
|
|
6
|
+
//#region src/typegen/load-config.ts
|
|
7
|
+
async function loadAppletSourceDefinition(root) {
|
|
8
|
+
const path = resolve(root, "applet.manifest.ts");
|
|
9
|
+
if (!existsSync(path)) throw new Error(`No applet manifest found at ${path}.`);
|
|
10
|
+
const loaded = await loadConfigFromFile({
|
|
11
|
+
command: "build",
|
|
12
|
+
mode: "production"
|
|
13
|
+
}, path, root);
|
|
14
|
+
if (loaded === null) throw new Error(`No applet manifest found at ${path}.`);
|
|
15
|
+
const parsed = appletSourceDefinitionSchema.safeParse(loaded.config);
|
|
16
|
+
if (!parsed.success) throw new Error(`Invalid applet manifest at ${loaded.path}: ${parsed.error.message}`);
|
|
17
|
+
return parsed.data;
|
|
18
|
+
}
|
|
19
|
+
async function loadAppletConfig(root) {
|
|
20
|
+
const { dependencies: _dependencies, devDependencies: _devDependencies, ...definition } = await loadAppletSourceDefinition(root);
|
|
21
|
+
return {
|
|
22
|
+
org: resolveWorkspaceOrg(root),
|
|
23
|
+
...definition
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { loadAppletSourceDefinition as n, loadAppletConfig as t };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { a as loginWithDevice, d as resolveInstanceUrl, o as AuthenticationError, r as findWorkspaceConfig } from "./workspace-XVtM12ZC.js";
|
|
2
|
+
//#region src/login.ts
|
|
3
|
+
async function runLogin(options) {
|
|
4
|
+
if (process.env.HITCH_API_KEY !== void 0) throw new AuthenticationError("HITCH_API_KEY is set — unset it to manage stored logins.");
|
|
5
|
+
const { me, membership } = await loginWithDevice(await resolveInstanceUrl(), {
|
|
6
|
+
expectedOrg: findWorkspaceConfig(process.cwd())?.org,
|
|
7
|
+
noBrowser: options.noBrowser
|
|
8
|
+
});
|
|
9
|
+
console.log(`Signed in as ${me.person.email} to ${membership.name}.`);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { runLogin };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as APPLET_CODE_PATTERN } from "./manifest-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { i as APPLET_CODE_PATTERN } from "./manifest-Bp87Uz0a.js";
|
|
2
|
+
import { i as readWorkspaceConfig, n as fetchWithOrgAuth, t as resolveWorkspaceOrg } from "./workspace-XVtM12ZC.js";
|
|
3
|
+
import { t as loadAppletConfig } from "./load-config-BYSxDVAl.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/logs.ts
|
|
6
6
|
const LOG_LEVELS = [
|
|
@@ -63,6 +63,8 @@ const appletManifestShape = {
|
|
|
63
63
|
org: z.string().regex(ORG_CODE_PATTERN, "must start with a lowercase letter, end with a letter or number, and contain only lowercase letters, numbers, and non-consecutive hyphens"),
|
|
64
64
|
name: nameSchema,
|
|
65
65
|
code: codeSchema,
|
|
66
|
+
requiresChangeset: z.uuid().optional(),
|
|
67
|
+
telephony: z.strictObject({ events: z.array(z.literal("message.received")).min(1).refine((events) => new Set(events).size === events.length).readonly() }).optional(),
|
|
66
68
|
schedules: appletManifestSchedulesSchema.optional(),
|
|
67
69
|
variables: appletManifestVariablesSchema.optional(),
|
|
68
70
|
objects: appletManifestObjectsSchema
|
|
@@ -94,6 +96,8 @@ const appletManifestSchema = z.strictObject(appletManifestShape).superRefine(che
|
|
|
94
96
|
const appletDefinitionSchema = z.strictObject({
|
|
95
97
|
name: appletManifestShape.name,
|
|
96
98
|
code: appletManifestShape.code,
|
|
99
|
+
requiresChangeset: appletManifestShape.requiresChangeset,
|
|
100
|
+
telephony: appletManifestShape.telephony,
|
|
97
101
|
schedules: appletManifestShape.schedules,
|
|
98
102
|
variables: appletManifestShape.variables,
|
|
99
103
|
objects: appletManifestShape.objects
|
|
@@ -161,6 +165,8 @@ const checkSourcePackages = (manifest, context) => {
|
|
|
161
165
|
const appletSourceDefinitionSchema = z.strictObject({
|
|
162
166
|
name: appletManifestShape.name,
|
|
163
167
|
code: appletManifestShape.code,
|
|
168
|
+
requiresChangeset: appletManifestShape.requiresChangeset,
|
|
169
|
+
telephony: appletManifestShape.telephony,
|
|
164
170
|
schedules: appletManifestShape.schedules,
|
|
165
171
|
variables: appletManifestShape.variables,
|
|
166
172
|
objects: appletManifestShape.objects,
|
|
@@ -32,6 +32,11 @@ interface AppletManifest {
|
|
|
32
32
|
org: string;
|
|
33
33
|
name: string;
|
|
34
34
|
code: string;
|
|
35
|
+
/** This code needs the schema as of this changeset. */
|
|
36
|
+
requiresChangeset?: string;
|
|
37
|
+
telephony?: {
|
|
38
|
+
events: readonly "message.received"[];
|
|
39
|
+
};
|
|
35
40
|
schedules?: readonly {
|
|
36
41
|
code: string;
|
|
37
42
|
name: string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { oc } from "@orpc/contract";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
//#region src/hitch/me.ts
|
|
4
|
+
const personSchema = z.object({
|
|
5
|
+
id: z.uuid(),
|
|
6
|
+
firstName: z.string(),
|
|
7
|
+
lastName: z.string(),
|
|
8
|
+
email: z.email()
|
|
9
|
+
});
|
|
10
|
+
const membershipSchema = z.object({
|
|
11
|
+
orgId: z.uuid(),
|
|
12
|
+
code: z.string(),
|
|
13
|
+
name: z.string(),
|
|
14
|
+
iconFileId: z.uuid().nullable(),
|
|
15
|
+
role: z.enum(["member", "owner"]),
|
|
16
|
+
capabilities: z.array(z.string())
|
|
17
|
+
});
|
|
18
|
+
const meSchema = z.object({
|
|
19
|
+
person: personSchema,
|
|
20
|
+
memberships: z.array(membershipSchema),
|
|
21
|
+
organization: z.object({
|
|
22
|
+
id: z.uuid(),
|
|
23
|
+
code: z.string()
|
|
24
|
+
}).nullable(),
|
|
25
|
+
multiOrg: z.boolean()
|
|
26
|
+
});
|
|
27
|
+
const meContract = { get: oc.route({
|
|
28
|
+
method: "GET",
|
|
29
|
+
path: "/v1/me"
|
|
30
|
+
}).input(z.void()).output(meSchema) };
|
|
31
|
+
//#endregion
|
|
32
|
+
export { meSchema as n, meContract as t };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as readWorkspaceConfig } from "./workspace-XVtM12ZC.js";
|
|
2
|
+
import { n as loadAppletSourceDefinition } from "./load-config-BYSxDVAl.js";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
import { existsSync } from "node:fs";
|
|
4
5
|
import { cp, mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises";
|
|
@@ -50,11 +51,11 @@ const cliManifestSchema = z.object({
|
|
|
50
51
|
async function loadCliManifest(options) {
|
|
51
52
|
const result = cliManifestSchema.safeParse(JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8")));
|
|
52
53
|
if (!result.success) {
|
|
53
|
-
const issue = result.error.issues
|
|
54
|
+
const issue = result.error.issues.at(0);
|
|
54
55
|
if (issue === void 0) throw new Error("Invalid CLI package manifest.");
|
|
55
56
|
throw new Error(`Invalid CLI package manifest field "${issue.path.join(".")}": ${issue.message}.`);
|
|
56
57
|
}
|
|
57
|
-
const catalogEntry = [...Object.entries(result.data.dependencies).map(([name, value]) => [`dependencies.${name}`, value]), ...Object.entries(result.data.peerDependencies).map(([name, value]) => [`peerDependencies.${name}`, value])].find(([, value]) => value
|
|
58
|
+
const catalogEntry = [...Object.entries(result.data.dependencies).map(([name, value]) => [`dependencies.${name}`, value]), ...Object.entries(result.data.peerDependencies).map(([name, value]) => [`peerDependencies.${name}`, value])].find(([, value]) => value.startsWith("catalog:"));
|
|
58
59
|
if (catalogEntry !== void 0) {
|
|
59
60
|
if (options?.allowDevelopment === true) return void 0;
|
|
60
61
|
throw new Error(`Invalid CLI package manifest field "${catalogEntry[0]}": "catalog:" identifies an unpublished development build. Run the published @hitch42/applet CLI instead.`);
|
|
@@ -127,8 +128,14 @@ minimumReleaseAgeExclude:
|
|
|
127
128
|
}
|
|
128
129
|
const GITIGNORE_START = "# BEGIN Hitch generated files";
|
|
129
130
|
const GITIGNORE_END = "# END Hitch generated files";
|
|
131
|
+
const SKILLS = [
|
|
132
|
+
"hitch-applets",
|
|
133
|
+
"hitch-cli",
|
|
134
|
+
"hitch-data",
|
|
135
|
+
"hitch-theory"
|
|
136
|
+
];
|
|
130
137
|
const GITIGNORE = `${GITIGNORE_START}
|
|
131
|
-
|
|
138
|
+
${SKILLS.map((skill) => `/.agents/skills/${skill}/`).join("\n")}
|
|
132
139
|
/.node-version
|
|
133
140
|
/AGENTS.md
|
|
134
141
|
/CLAUDE.md
|
|
@@ -169,22 +176,21 @@ async function writeWorkspaceSupport(root, config, cli) {
|
|
|
169
176
|
const resolvedCli = cli ?? await loadCliManifest();
|
|
170
177
|
if (resolvedCli === void 0) throw new Error("The CLI package manifest is not published.");
|
|
171
178
|
assertWorkspaceCli(config, resolvedCli);
|
|
172
|
-
const skillTarget = resolve(root, ".agents/skills/hitch-applets");
|
|
173
179
|
const deployWorkflowTarget = resolve(root, ".github/workflows/hitch.yml");
|
|
174
180
|
const agents = await readFile(new URL("../scaffold/AGENTS.md", import.meta.url), "utf8");
|
|
175
181
|
await Promise.all([
|
|
176
182
|
mkdir(resolve(root, ".agents/skills"), { recursive: true }),
|
|
177
|
-
mkdir(resolve(root, ".github/workflows"), { recursive: true }),
|
|
178
|
-
rm(
|
|
183
|
+
config.githubWorkflow === false ? void 0 : mkdir(resolve(root, ".github/workflows"), { recursive: true }),
|
|
184
|
+
...SKILLS.map((skill) => rm(resolve(root, ".agents/skills", skill), {
|
|
179
185
|
force: true,
|
|
180
186
|
recursive: true
|
|
181
|
-
})
|
|
187
|
+
}))
|
|
182
188
|
]);
|
|
183
189
|
await Promise.all([
|
|
184
|
-
cp(new URL(
|
|
190
|
+
...SKILLS.map((skill) => cp(new URL(`../scaffold/.agents/skills/${skill}`, import.meta.url), resolve(root, ".agents/skills", skill), { recursive: true })),
|
|
185
191
|
writeFile(resolve(root, "package.json"), `${JSON.stringify(workspacePackage(config.org), null, 2)}\n`),
|
|
186
192
|
writeFile(resolve(root, "pnpm-workspace.yaml"), workspaceFile(resolvedCli)),
|
|
187
|
-
existsSync(deployWorkflowTarget) ? void 0 : cp(new URL("../scaffold/.github/workflows/hitch.yml", import.meta.url), deployWorkflowTarget),
|
|
193
|
+
config.githubWorkflow === false || existsSync(deployWorkflowTarget) ? void 0 : cp(new URL("../scaffold/.github/workflows/hitch.yml", import.meta.url), deployWorkflowTarget),
|
|
188
194
|
writeFile(resolve(root, ".node-version"), "24\n"),
|
|
189
195
|
writeGitignore(root),
|
|
190
196
|
writeFile(resolve(root, "AGENTS.md"), agents)
|
|
@@ -336,17 +342,17 @@ export default defineConfig({
|
|
|
336
342
|
hasClient ? writeFile(resolve(root, "components.json"), await readFile(new URL("../scaffold/applet/components.json", import.meta.url), "utf8")) : void 0
|
|
337
343
|
]);
|
|
338
344
|
}
|
|
339
|
-
async function
|
|
340
|
-
const
|
|
341
|
-
const workspaceRoot = dirname(dirname(resolve(appletRoot)));
|
|
345
|
+
async function prepareAppletProjects(workspaceRoot, appletRoots) {
|
|
346
|
+
const definitions = await Promise.all(appletRoots.map((root) => loadAppletSourceDefinition(root)));
|
|
342
347
|
const workspace = readWorkspaceConfig(workspaceRoot);
|
|
343
|
-
if (workspace === void 0) throw new Error(`No Hitch workspace found
|
|
348
|
+
if (workspace === void 0) throw new Error(`No Hitch workspace found at ${workspaceRoot}.`);
|
|
344
349
|
const cli = await loadCliManifest({ allowDevelopment: true });
|
|
345
|
-
await Promise.all([cli === void 0 ? void 0 : writeWorkspaceSupport(workspaceRoot, workspace, cli), writeAppletSupport(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
+
await Promise.all([cli === void 0 ? void 0 : writeWorkspaceSupport(workspaceRoot, workspace, cli), ...appletRoots.map((root, index) => writeAppletSupport(root, definitions[index]))]);
|
|
351
|
+
}
|
|
352
|
+
async function prepareAppletProject(appletRoot = process.cwd()) {
|
|
353
|
+
const workspaceRoot = dirname(dirname(resolve(appletRoot)));
|
|
354
|
+
await prepareAppletProjects(workspaceRoot, [appletRoot]);
|
|
355
|
+
return workspaceRoot;
|
|
350
356
|
}
|
|
351
357
|
//#endregion
|
|
352
|
-
export {
|
|
358
|
+
export { writeAppletSupport as a, prepareAppletProjects as i, loadCliManifest as n, writeWorkspaceSupport as o, prepareAppletProject as r, assertWorkspaceCli as t };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Writable } from "node:stream";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
//#region src/prompt.ts
|
|
4
|
+
function question(prompt, hidden = false) {
|
|
5
|
+
return new Promise((resolveAnswer, rejectAnswer) => {
|
|
6
|
+
let muted = false;
|
|
7
|
+
const output = hidden ? new Writable({ write(chunk, encoding, callback) {
|
|
8
|
+
if (!muted) process.stdout.write(chunk, encoding);
|
|
9
|
+
callback();
|
|
10
|
+
} }) : process.stdout;
|
|
11
|
+
const readline = createInterface({
|
|
12
|
+
input: process.stdin,
|
|
13
|
+
output,
|
|
14
|
+
terminal: true
|
|
15
|
+
});
|
|
16
|
+
readline.once("error", rejectAnswer);
|
|
17
|
+
if (hidden) {
|
|
18
|
+
process.stdout.write(prompt);
|
|
19
|
+
muted = true;
|
|
20
|
+
}
|
|
21
|
+
readline.question(hidden ? "" : prompt, (answer) => {
|
|
22
|
+
readline.close();
|
|
23
|
+
if (hidden) process.stdout.write("\n");
|
|
24
|
+
resolveAnswer(answer);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { question as t };
|
package/dist/react.d.ts
CHANGED