@alpic-ai/api 0.0.0-dev.gde9ffac → 0.0.0-dev.gdf09076
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/index.d.mts +19 -14
- package/dist/index.mjs +127 -25
- package/package.json +1 -10
package/dist/index.d.mts
CHANGED
|
@@ -212,7 +212,7 @@ declare const contract: {
|
|
|
212
212
|
name: z.ZodString;
|
|
213
213
|
sourceBranch: z.ZodNullable<z.ZodString>;
|
|
214
214
|
mcpServerUrl: z.ZodString;
|
|
215
|
-
domains: z.ZodArray<z.
|
|
215
|
+
domains: z.ZodArray<z.ZodCustomStringFormat<"hostname">>;
|
|
216
216
|
createdAt: z.ZodCoercedDate<unknown>;
|
|
217
217
|
projectId: z.ZodString;
|
|
218
218
|
}, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, {
|
|
@@ -831,6 +831,9 @@ declare const contract: {
|
|
|
831
831
|
}, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, {
|
|
832
832
|
NOT_FOUND: {};
|
|
833
833
|
BAD_REQUEST: {};
|
|
834
|
+
DNS_RESOLUTION_FAILED: {
|
|
835
|
+
status: number;
|
|
836
|
+
};
|
|
834
837
|
}>, Record<never, never>>;
|
|
835
838
|
};
|
|
836
839
|
get: {
|
|
@@ -935,7 +938,22 @@ declare const platformSchema: z.ZodEnum<{
|
|
|
935
938
|
type Platform = z.infer<typeof platformSchema>;
|
|
936
939
|
declare const PLATFORM_LABELS: Record<Platform, string>;
|
|
937
940
|
//#endregion
|
|
941
|
+
//#region ../domains/src/projects/schemas.d.ts
|
|
942
|
+
declare const runtimeSchema: z.ZodEnum<{
|
|
943
|
+
"python3.13": "python3.13";
|
|
944
|
+
"python3.14": "python3.14";
|
|
945
|
+
node22: "node22";
|
|
946
|
+
node24: "node24";
|
|
947
|
+
}>;
|
|
948
|
+
declare const transportSchema: z.ZodEnum<{
|
|
949
|
+
stdio: "stdio";
|
|
950
|
+
sse: "sse";
|
|
951
|
+
streamablehttp: "streamablehttp";
|
|
952
|
+
}>;
|
|
953
|
+
//#endregion
|
|
938
954
|
//#region src/schemas.d.ts
|
|
955
|
+
type Runtime = z.infer<typeof runtimeSchema>;
|
|
956
|
+
type Transport = z.infer<typeof transportSchema>;
|
|
939
957
|
declare const environmentVariableSchema: z.ZodObject<{
|
|
940
958
|
key: z.ZodString;
|
|
941
959
|
value: z.ZodString;
|
|
@@ -957,19 +975,6 @@ declare const buildSettingsSchema: z.ZodObject<{
|
|
|
957
975
|
buildOutputDir: z.ZodOptional<z.ZodString>;
|
|
958
976
|
startCommand: z.ZodOptional<z.ZodString>;
|
|
959
977
|
}, z.core.$strip>;
|
|
960
|
-
declare const runtimeSchema: z.ZodEnum<{
|
|
961
|
-
"python3.13": "python3.13";
|
|
962
|
-
"python3.14": "python3.14";
|
|
963
|
-
node22: "node22";
|
|
964
|
-
node24: "node24";
|
|
965
|
-
}>;
|
|
966
|
-
type Runtime = z.infer<typeof runtimeSchema>;
|
|
967
|
-
declare const transportSchema: z.ZodEnum<{
|
|
968
|
-
stdio: "stdio";
|
|
969
|
-
sse: "sse";
|
|
970
|
-
streamablehttp: "streamablehttp";
|
|
971
|
-
}>;
|
|
972
|
-
type Transport = z.infer<typeof transportSchema>;
|
|
973
978
|
declare const playgroundHeaderSchema: z.ZodObject<{
|
|
974
979
|
name: z.ZodString;
|
|
975
980
|
description: z.ZodString;
|
package/dist/index.mjs
CHANGED
|
@@ -81,12 +81,6 @@ z.object({
|
|
|
81
81
|
timestamp: z.coerce.date().optional(),
|
|
82
82
|
content: z.string().optional()
|
|
83
83
|
});
|
|
84
|
-
z.enum([
|
|
85
|
-
"INFO",
|
|
86
|
-
"WARNING",
|
|
87
|
-
"DEBUG",
|
|
88
|
-
"ERROR"
|
|
89
|
-
]);
|
|
90
84
|
z.object({
|
|
91
85
|
id: z.string(),
|
|
92
86
|
createdAt: z.coerce.date(),
|
|
@@ -98,6 +92,86 @@ z.object({
|
|
|
98
92
|
content: z.string(),
|
|
99
93
|
source: z.enum(["model", "user"])
|
|
100
94
|
});
|
|
95
|
+
const intentCategoryColorSchema = z.enum([
|
|
96
|
+
"red",
|
|
97
|
+
"orange",
|
|
98
|
+
"yellow",
|
|
99
|
+
"green",
|
|
100
|
+
"blue",
|
|
101
|
+
"purple",
|
|
102
|
+
"pink",
|
|
103
|
+
"gray"
|
|
104
|
+
]);
|
|
105
|
+
intentCategoryColorSchema.options;
|
|
106
|
+
const intentCategorySchema = z.object({
|
|
107
|
+
id: z.string(),
|
|
108
|
+
createdAt: z.coerce.date(),
|
|
109
|
+
environmentId: z.string(),
|
|
110
|
+
name: z.string(),
|
|
111
|
+
color: intentCategoryColorSchema
|
|
112
|
+
});
|
|
113
|
+
z.object({
|
|
114
|
+
id: z.string(),
|
|
115
|
+
name: z.string(),
|
|
116
|
+
color: intentCategoryColorSchema,
|
|
117
|
+
intentCount: z.number().int().nonnegative()
|
|
118
|
+
});
|
|
119
|
+
z.object({
|
|
120
|
+
id: z.string(),
|
|
121
|
+
createdAt: z.coerce.date(),
|
|
122
|
+
environmentId: z.string(),
|
|
123
|
+
toolName: z.string(),
|
|
124
|
+
message: z.string(),
|
|
125
|
+
categories: z.array(intentCategorySchema)
|
|
126
|
+
});
|
|
127
|
+
const signalCategorySchema = z.object({
|
|
128
|
+
id: z.string(),
|
|
129
|
+
name: z.string(),
|
|
130
|
+
color: intentCategoryColorSchema
|
|
131
|
+
});
|
|
132
|
+
z.discriminatedUnion("kind", [
|
|
133
|
+
z.object({
|
|
134
|
+
kind: z.literal("new"),
|
|
135
|
+
category: signalCategorySchema,
|
|
136
|
+
currentCount: z.number().int().nonnegative(),
|
|
137
|
+
currentShare: z.number()
|
|
138
|
+
}),
|
|
139
|
+
z.object({
|
|
140
|
+
kind: z.literal("resurging"),
|
|
141
|
+
category: signalCategorySchema,
|
|
142
|
+
currentCount: z.number().int().nonnegative(),
|
|
143
|
+
daysQuiet: z.number(),
|
|
144
|
+
currentShare: z.number()
|
|
145
|
+
}),
|
|
146
|
+
z.object({
|
|
147
|
+
kind: z.literal("spike"),
|
|
148
|
+
category: signalCategorySchema,
|
|
149
|
+
currentCount: z.number().int().nonnegative(),
|
|
150
|
+
previousCount: z.number().int().nonnegative(),
|
|
151
|
+
currentShare: z.number(),
|
|
152
|
+
previousShare: z.number(),
|
|
153
|
+
changeRatio: z.number()
|
|
154
|
+
}),
|
|
155
|
+
z.object({
|
|
156
|
+
kind: z.literal("declining"),
|
|
157
|
+
category: signalCategorySchema,
|
|
158
|
+
currentCount: z.number().int().nonnegative(),
|
|
159
|
+
previousCount: z.number().int().nonnegative(),
|
|
160
|
+
currentShare: z.number(),
|
|
161
|
+
previousShare: z.number(),
|
|
162
|
+
changeRatio: z.number()
|
|
163
|
+
})
|
|
164
|
+
]);
|
|
165
|
+
z.discriminatedUnion("kind", [z.object({
|
|
166
|
+
kind: z.literal("existing"),
|
|
167
|
+
categoryId: z.string(),
|
|
168
|
+
categoryName: z.string(),
|
|
169
|
+
intentIds: z.array(z.string())
|
|
170
|
+
}), z.object({
|
|
171
|
+
kind: z.literal("new"),
|
|
172
|
+
categoryName: z.string(),
|
|
173
|
+
intentIds: z.array(z.string())
|
|
174
|
+
})]);
|
|
101
175
|
z.object({
|
|
102
176
|
id: z.string(),
|
|
103
177
|
teamId: z.string(),
|
|
@@ -106,6 +180,23 @@ z.object({
|
|
|
106
180
|
createdAt: z.coerce.date(),
|
|
107
181
|
updatedAt: z.coerce.date()
|
|
108
182
|
});
|
|
183
|
+
z.enum([
|
|
184
|
+
"INFO",
|
|
185
|
+
"WARNING",
|
|
186
|
+
"DEBUG",
|
|
187
|
+
"ERROR"
|
|
188
|
+
]);
|
|
189
|
+
const runtimeSchema = z.enum([
|
|
190
|
+
"python3.13",
|
|
191
|
+
"python3.14",
|
|
192
|
+
"node22",
|
|
193
|
+
"node24"
|
|
194
|
+
]);
|
|
195
|
+
const transportSchema = z.enum([
|
|
196
|
+
"stdio",
|
|
197
|
+
"sse",
|
|
198
|
+
"streamablehttp"
|
|
199
|
+
]);
|
|
109
200
|
const toolDefinitionSchema = z.object({
|
|
110
201
|
name: z.string(),
|
|
111
202
|
title: z.string().optional().describe("Human-friendly name for the tool, used in the UI. If not provided, `name` will be used."),
|
|
@@ -123,6 +214,10 @@ const positiveTestCaseSchema = z.object({
|
|
|
123
214
|
toolTriggered: z.string().optional(),
|
|
124
215
|
expectedOutput: z.string().optional()
|
|
125
216
|
}).partial().describe("Each case: Scenario, User prompt, Tool triggered, Expected output.");
|
|
217
|
+
const screenshotEntrySchema = z.object({
|
|
218
|
+
prompt: z.string(),
|
|
219
|
+
url: z.url()
|
|
220
|
+
}).describe("Each screenshot: the user prompt that produced it + the image URL.");
|
|
126
221
|
/** Accepts either a valid email or URL. */
|
|
127
222
|
const supportChannelSchema = z.string().refine((value) => z.email().safeParse(value).success || z.url().safeParse(value).success, { error: "Must be a valid email or URL" });
|
|
128
223
|
const chatgptCategorySchema = z.enum([
|
|
@@ -163,7 +258,7 @@ const chatgptTranslationSchema = z.object({
|
|
|
163
258
|
*/
|
|
164
259
|
const chatgptSubmissionFormDataSchema = z.object({
|
|
165
260
|
logoLight: z.string().describe("Logo icon for light mode. Square PNG, no borders or rounded corners (clients apply circular cropping)."),
|
|
166
|
-
logoDark: z.string().describe("
|
|
261
|
+
logoDark: z.string().optional().describe("Optional dark-mode logo icon. Square PNG, same specs as the light icon. Leave empty if the light icon also works on dark backgrounds."),
|
|
167
262
|
appName: z.string().describe("The name users will see in ChatGPT and in the Apps Directory."),
|
|
168
263
|
tagline: z.string().max(30).describe("Plain-language phrase focused on function and user value. 30 chars max."),
|
|
169
264
|
description: z.string().describe("Clear, engaging description highlighting what the app does and why people will love it. Appears publicly on the directory page."),
|
|
@@ -181,7 +276,7 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
181
276
|
toolJustifications: z.array(chatgptToolJustificationSchema).describe("Per-tool justification of `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotation values."),
|
|
182
277
|
testCases: z.array(positiveTestCaseSchema).describe("At least 5 positive test cases. Each: Scenario, User prompt, Tool triggered, Expected output. Coverage over all major use cases."),
|
|
183
278
|
negativeTestCases: z.array(negativeTestCaseSchema).describe("3 negative test cases — prompts where the app should NOT trigger but the model might think it's relevant."),
|
|
184
|
-
screenshots: z.array(
|
|
279
|
+
screenshots: z.array(screenshotEntrySchema).describe("In-app screenshots paired with the user prompt that produced them. Widget apps must show the widget UI; non-widget apps show the model response. Min 1, max 4 entries. First three are public. Images: 706px wide, 400–860px tall, PNG."),
|
|
185
280
|
translations: z.array(chatgptTranslationSchema).describe("Per-locale translation of tagline + description. English (US) is the default."),
|
|
186
281
|
allowedCountries: chatgptAllowedCountriesSchema.describe("'Allow all' or restrict to a specific list. See OpenAI's supported countries list."),
|
|
187
282
|
releaseNotes: z.string().describe("Publicly displayed on the app details page.")
|
|
@@ -361,19 +456,20 @@ Reviewers test every single tool you list here — don't list tools that don't w
|
|
|
361
456
|
• 'I've specified user-friendly titles for all tools' — every tool has a 'title' annotation (a human-readable label, different from the tool name).
|
|
362
457
|
• 'I've specified accurate tool annotations for all tools' — every tool has the correct annotation: readOnlyHint: true for read operations (search, get, list, fetch), OR destructiveHint: true for write operations (create, update, delete, send).
|
|
363
458
|
This is the #1 reason submissions get rejected (30% of all rejections). Do not check these boxes without actually having implemented the annotations. See MCP spec for how to add them.`),
|
|
364
|
-
logoLight: z.string().describe(`Your connector's logo
|
|
459
|
+
logoLight: z.string().describe(`Your connector's logo for light backgrounds. Requirements:
|
|
365
460
|
• Format: SVG only
|
|
366
461
|
• Aspect ratio: square (1:1)
|
|
367
|
-
• Should work on
|
|
462
|
+
• Should work on a light background
|
|
368
463
|
• Provide via URL (Google Drive link is fine) or upload directly
|
|
369
464
|
Tip: use a simple, recognizable icon — not a full wordmark. The logo appears at small sizes in the directory grid.`),
|
|
370
|
-
|
|
465
|
+
logoDark: z.string().optional().describe(`Optional dark-mode variant of the connector logo. Same specs as the light variant (SVG, square 1:1) but designed to read on a dark background. Leave empty if the light logo already works on dark.`),
|
|
466
|
+
screenshots: z.array(screenshotEntrySchema).describe(`Screenshots or promotional images of your connector in action within Claude. Strongly recommended for all connectors, and required for MCP Apps (interactive UI). Guidelines:
|
|
371
467
|
• 3–5 images is ideal
|
|
372
468
|
• Minimum 1000px width, PNG format preferred
|
|
469
|
+
• Each screenshot is paired with the user prompt that produced it
|
|
373
470
|
• Crop to just the relevant part of the Claude interface (the tool response area)
|
|
374
471
|
• Show your connector doing something impressive and useful — real data, real results
|
|
375
472
|
• If you're an MCP App, include screenshots of your interactive UI elements
|
|
376
|
-
• Videos are also welcome
|
|
377
473
|
These images appear in your directory listing and are a key factor in driving user installs.`)
|
|
378
474
|
});
|
|
379
475
|
claudeSubmissionFormDataSchema.pick({
|
|
@@ -416,6 +512,22 @@ const subscriptionPlanSchema = z.enum([
|
|
|
416
512
|
"enterprise"
|
|
417
513
|
]);
|
|
418
514
|
z.object({ plan: subscriptionPlanSchema.nullable() });
|
|
515
|
+
const customerCreditsSchema = z.object({
|
|
516
|
+
balanceInCents: z.number(),
|
|
517
|
+
expiresAt: z.number().nullable(),
|
|
518
|
+
currency: z.string()
|
|
519
|
+
});
|
|
520
|
+
const customerUsageSchema = z.object({
|
|
521
|
+
amountInCents: z.number(),
|
|
522
|
+
currency: z.string(),
|
|
523
|
+
periodEnd: z.number()
|
|
524
|
+
});
|
|
525
|
+
const partnerDiscountSchema = z.object({ endsAt: z.number() });
|
|
526
|
+
z.object({
|
|
527
|
+
customerCredits: customerCreditsSchema.nullable(),
|
|
528
|
+
customerUsage: customerUsageSchema.nullable(),
|
|
529
|
+
partnerDiscount: partnerDiscountSchema.nullable()
|
|
530
|
+
});
|
|
419
531
|
//#endregion
|
|
420
532
|
//#region src/schemas.ts
|
|
421
533
|
const RESERVED_KEYS = [
|
|
@@ -470,17 +582,6 @@ const buildSettingsSchema = z.object({
|
|
|
470
582
|
buildOutputDir: z.string().optional(),
|
|
471
583
|
startCommand: z.string().optional()
|
|
472
584
|
});
|
|
473
|
-
const runtimeSchema = z.enum([
|
|
474
|
-
"python3.13",
|
|
475
|
-
"python3.14",
|
|
476
|
-
"node22",
|
|
477
|
-
"node24"
|
|
478
|
-
]);
|
|
479
|
-
const transportSchema = z.enum([
|
|
480
|
-
"stdio",
|
|
481
|
-
"sse",
|
|
482
|
-
"streamablehttp"
|
|
483
|
-
]);
|
|
484
585
|
const playgroundHeaderSchema = z.object({
|
|
485
586
|
name: z.string().min(1).max(100),
|
|
486
587
|
description: z.string().max(200),
|
|
@@ -583,7 +684,7 @@ const getEnvironmentContractV1 = oc.route({
|
|
|
583
684
|
name: z.string(),
|
|
584
685
|
sourceBranch: z.string().nullable(),
|
|
585
686
|
mcpServerUrl: z.string(),
|
|
586
|
-
domains: z.array(z.
|
|
687
|
+
domains: z.array(z.hostname()),
|
|
587
688
|
createdAt: z.coerce.date(),
|
|
588
689
|
projectId: z.string()
|
|
589
690
|
}));
|
|
@@ -1043,7 +1144,8 @@ const createBeaconContractV1 = oc.route({
|
|
|
1043
1144
|
successDescription: "The audit has been created"
|
|
1044
1145
|
}).errors({
|
|
1045
1146
|
NOT_FOUND: {},
|
|
1046
|
-
BAD_REQUEST: {}
|
|
1147
|
+
BAD_REQUEST: {},
|
|
1148
|
+
DNS_RESOLUTION_FAILED: { status: 400 }
|
|
1047
1149
|
}).input(z.object({
|
|
1048
1150
|
targetUrl: z.url().describe("The HTTPS URL of the MCP server to audit"),
|
|
1049
1151
|
teamId: z.string().optional().describe("The team ID to associate the audit with"),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpic-ai/api",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.gdf09076",
|
|
4
4
|
"description": "Contract for the Alpic API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -14,15 +14,6 @@
|
|
|
14
14
|
"files": [
|
|
15
15
|
"dist"
|
|
16
16
|
],
|
|
17
|
-
"nx": {
|
|
18
|
-
"targets": {
|
|
19
|
-
"build": {
|
|
20
|
-
"dependsOn": [
|
|
21
|
-
"^build"
|
|
22
|
-
]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
17
|
"author": "Alpic",
|
|
27
18
|
"license": "ISC",
|
|
28
19
|
"dependencies": {
|