@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 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.ZodURL>;
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("Logo icon for dark mode. Square PNG. Same specs as the light icon."),
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(z.url()).describe("URLs of in-app screenshots. Widget apps must show the widget UI; non-widget apps show the model response. Min 1, max 4. First three are public."),
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 as displayed in the directory. Requirements:
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 both light and dark backgrounds (or you can provide separate light/dark versions)
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
- screenshots: z.array(z.url()).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:
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.url()),
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.gde9ffac",
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": {