@alpic-ai/api 0.0.0-dev.ged5722c → 0.0.0-dev.gedf7bcb

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
@@ -448,6 +448,7 @@ declare const contract: {
448
448
  }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
449
449
  NOT_FOUND: {};
450
450
  BAD_REQUEST: {};
451
+ FORBIDDEN: {};
451
452
  }>, Record<never, never>>;
452
453
  };
453
454
  get: {
@@ -663,6 +664,7 @@ declare const contract: {
663
664
  }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
664
665
  NOT_FOUND: {};
665
666
  BAD_REQUEST: {};
667
+ FORBIDDEN: {};
666
668
  }>, Record<never, never>>;
667
669
  };
668
670
  delete: {
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import * as z$1 from "zod/v4";
3
3
  import { oc } from "@orpc/contract";
4
4
  import ms from "ms";
5
- //#region ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_@cfworker+json-schema@4.1.1_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js
5
+ //#region ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js
6
6
  /**
7
7
  * Reusable URL validation that disallows javascript: scheme
8
8
  */
@@ -369,6 +369,12 @@ const environmentSchema$1 = z.object({
369
369
  updatedAt: z.coerce.date()
370
370
  });
371
371
  const environmentWithDomainsSchema = environmentSchema$1.extend({ domains: z.array(environmentDomainSchema) });
372
+ z.object({
373
+ sessionReplayEnabled: z.boolean(),
374
+ collectRequestPayload: z.boolean(),
375
+ collectResponsePayload: z.boolean(),
376
+ collectErrorMessage: z.boolean()
377
+ });
372
378
  z.object({
373
379
  id: z.string(),
374
380
  createdAt: z.coerce.date(),
@@ -567,10 +573,10 @@ const toolDefinitionSchema = z.object({
567
573
  }).optional()
568
574
  });
569
575
  const positiveTestCaseSchema = z.object({
570
- scenario: z.string(),
571
- userPrompt: z.string(),
572
- toolTriggered: z.string().optional(),
573
- expectedOutput: z.string().optional()
576
+ scenario: z.string().describe("Short label for what this case demonstrates."),
577
+ userPrompt: z.string().describe("A realistic, standalone user message a reviewer can paste and run with no prior state or multi-turn setup. Vary phrasing and tone across cases."),
578
+ toolTriggered: z.string().optional().describe("The tool this prompt should invoke."),
579
+ expectedOutput: z.string().optional().describe("What the user should see, including post-interaction behaviour where relevant.")
574
580
  }).partial().describe("Each case: Scenario, User prompt, Tool triggered, Expected output.");
575
581
  const screenshotEntrySchema = z.object({
576
582
  prompt: z.string(),
@@ -578,6 +584,8 @@ const screenshotEntrySchema = z.object({
578
584
  }).describe("Each screenshot: the user prompt that produced it + the image URL.");
579
585
  /** Accepts either a valid email or URL. */
580
586
  const supportChannelSchema = z.string().refine((value) => z.email().safeParse(value).success || z.url().safeParse(value).success, { error: "Must be a valid email or URL" });
587
+ /** A URL field whose error spells out that the scheme is required. */
588
+ const urlField = z.url({ error: "Enter a full URL including https:// (e.g. https://example.com)" });
581
589
  const chatgptCategorySchema = z.enum([
582
590
  "BUSINESS",
583
591
  "COLLABORATION",
@@ -886,10 +894,10 @@ const negativeTestCaseSchema = z.object({
886
894
  }).partial().describe("Each case: Scenario + User prompt (the app should NOT trigger).");
887
895
  const chatgptToolJustificationSchema = z.object({
888
896
  toolName: z.string(),
889
- readOnlyJustification: z.string(),
890
- openWorldJustification: z.string(),
891
- destructiveJustification: z.string()
892
- }).describe("Per-tool justification of each MCP annotation value (one sentence per hint).");
897
+ readOnlyJustification: z.string().describe("One sentence on what the tool reads and returns."),
898
+ openWorldJustification: z.string().describe("One sentence on whether the tool reaches external systems beyond your own service."),
899
+ destructiveJustification: z.string().describe("One sentence on whether the tool changes data. For a read-only tool, state the full triad: \"No data is created, modified, or deleted.\"")
900
+ }).describe("Per-tool justification of each MCP annotation value (one specific sentence per hint).");
893
901
  /**
894
902
  * Base copy fields, defined once and reused by both the submission form and per-locale
895
903
  * translations so the constraints (tagline ≤ 30 chars) never drift. The translation generation
@@ -911,23 +919,23 @@ const chatgptSubmissionFormDataSchema = z.object({
911
919
  logoLight: z.string().describe("Logo icon for light mode. Square PNG, no borders or rounded corners (clients apply circular cropping)."),
912
920
  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."),
913
921
  appName: z.string().describe("The name users will see in ChatGPT and in the Apps Directory."),
914
- tagline: chatgptTaglineSchema.describe("Plain-language phrase focused on function and user value. 30 chars max."),
915
- description: chatgptDescriptionSchema.describe("Clear, engaging description highlighting what the app does and why people will love it. Appears publicly on the directory page."),
922
+ tagline: chatgptTaglineSchema.describe("Plain-language phrase focused on function and user value, 30 chars max. Avoid generic superlatives like \"the best …\"."),
923
+ description: chatgptDescriptionSchema.describe("Clear, engaging description highlighting what the app does and why people will love it. Appears publicly on the directory page. End it by naming the product categories or intents the app does NOT cover, so ChatGPT learns when not to route to it (define exclusions by absent categories or wrong intents, never by naming other brands)."),
916
924
  category: chatgptCategorySchema.describe("Category from the OpenAI taxonomy."),
917
925
  developerName: z.string().describe("Developer name shown publicly on the app's directory page."),
918
- companyUrl: z.url().describe("Your company's main website URL."),
926
+ companyUrl: urlField.describe("Your company's main website URL."),
919
927
  supportChannel: supportChannelSchema.describe("Customer support URL or email address."),
920
- privacyPolicyUrl: z.url().describe("URL to your privacy policy."),
921
- termsOfServiceUrl: z.url().describe("URL to the app's terms of service."),
922
- demoRecordingUrl: z.url().describe("URL to a video demonstrating the app, recorded via OpenAI Developer Mode. Cover all main use cases on web, iOS, and Android."),
928
+ privacyPolicyUrl: urlField.describe("URL to your privacy policy."),
929
+ termsOfServiceUrl: urlField.describe("URL to the app's terms of service."),
930
+ demoRecordingUrl: urlField.describe("URL to a video demonstrating the app, recorded via OpenAI Developer Mode. Cover all main use cases on web, iOS, and Android."),
923
931
  appCommerceAndPurchasing: z.boolean().describe("Checkbox: 'My app links or directs users out of ChatGPT to make purchases.' Defaults to false. Verify the app does not offer digital goods."),
924
- serverUrl: z.url().describe("URL of the MCP server."),
932
+ serverUrl: urlField.describe("URL of the MCP server."),
925
933
  authentication: chatgptAuthenticationSchema.describe("OAuth 2.0 or No auth. OAuth configuration is auto-discovered from the MCP server's metadata."),
926
934
  tools: z.array(toolDefinitionSchema).describe("List of tools exposed by the MCP server (auto-populated from the production server's manifest)."),
927
- toolJustifications: z.array(chatgptToolJustificationSchema).describe("Per-tool justification of `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotation values."),
928
- 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."),
929
- negativeTestCases: z.array(negativeTestCaseSchema).describe("3 negative test cases — prompts where the app should NOT trigger but the model might think it's relevant."),
930
- screenshots: z.array(screenshotEntrySchema).max(3).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 3 entries, all public. Images: 706px wide, 400–860px tall, PNG."),
935
+ toolJustifications: z.array(chatgptToolJustificationSchema).describe("Per-tool justification of `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotation values. One short, specific sentence per hint describing what the tool actually does."),
936
+ testCases: z.array(positiveTestCaseSchema).describe("At least 5 positive test cases. Each: Scenario, User prompt, Tool triggered, Expected output. Collectively cover the full capability across different flow stages (initial search or browse, market or locale handling, post-interaction detail, an action ChatGPT performs on the user's behalf, and a conversion or secondary tool) rather than five variations of the same first step."),
937
+ negativeTestCases: z.array(negativeTestCaseSchema).describe("3 negative test cases: prompts where the app should NOT trigger but the model might think it is relevant. These become production routing metadata that teaches ChatGPT when to stay silent, so pick tight near-misses: a product category the app does not carry, the right brand or domain but an intent the app does not serve, or a boundary with a sibling app."),
938
+ screenshots: z.array(screenshotEntrySchema.extend({ prompt: z.string().max(75, { error: "Screenshot prompts are limited to 75 characters." }) })).max(3).describe("In-app screenshots paired with the user prompt that produced them (each prompt is 75 characters max). Widget apps must show the widget UI; non-widget apps show the model response. Min 1, max 3 entries, all public. Images: 706px wide, 400–860px tall, PNG."),
931
939
  translations: z.array(chatgptTranslationSchema).describe("Per-locale translation of tagline + description. English (US) is the default."),
932
940
  allowedCountries: chatgptAllowedCountriesSchema.describe("Availability: all supported countries, or an allow-list / block-list of specific ones (ISO alpha-2)."),
933
941
  releaseNotes: z.string().describe("Publicly displayed on the app details page.")
@@ -1158,6 +1166,7 @@ claudeSubmissionFormDataSchema.pick({
1158
1166
  const submissionMetaFieldsSchema = z.object({
1159
1167
  id: z.string(),
1160
1168
  environmentId: z.string(),
1169
+ auditId: z.string().nullable(),
1161
1170
  createdAt: z.coerce.date(),
1162
1171
  updatedAt: z.coerce.date()
1163
1172
  });
@@ -1422,7 +1431,8 @@ const createProjectContractV1 = oc.route({
1422
1431
  successDescription: "The project has been created successfully"
1423
1432
  }).errors({
1424
1433
  NOT_FOUND: {},
1425
- BAD_REQUEST: {}
1434
+ BAD_REQUEST: {},
1435
+ FORBIDDEN: {}
1426
1436
  }).input(z.object({
1427
1437
  teamId: z.string().optional(),
1428
1438
  name: z.string().trim().min(1).max(100),
@@ -1528,7 +1538,8 @@ const updateProjectContractV1 = oc.route({
1528
1538
  successDescription: "The project has been updated successfully"
1529
1539
  }).errors({
1530
1540
  NOT_FOUND: {},
1531
- BAD_REQUEST: {}
1541
+ BAD_REQUEST: {},
1542
+ FORBIDDEN: {}
1532
1543
  }).input(z.object({
1533
1544
  projectId: z.string().describe("The ID of the project"),
1534
1545
  name: z.string().min(1).max(100).optional().describe("The new name for the project"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpic-ai/api",
3
- "version": "0.0.0-dev.ged5722c",
3
+ "version": "0.0.0-dev.gedf7bcb",
4
4
  "description": "Contract for the Alpic API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -17,19 +17,19 @@
17
17
  "author": "Alpic",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@orpc/contract": "^1.14.4",
20
+ "@orpc/contract": "^1.14.6",
21
21
  "ms": "^2.1.3",
22
22
  "zod": "^4.4.3"
23
23
  },
24
24
  "devDependencies": {
25
- "@orpc/openapi": "^1.14.4",
26
- "@orpc/zod": "^1.14.4",
25
+ "@orpc/openapi": "^1.14.6",
26
+ "@orpc/zod": "^1.14.6",
27
27
  "@total-typescript/tsconfig": "^1.0.4",
28
28
  "@types/ms": "^2.1.0",
29
29
  "shx": "^0.4.0",
30
- "tsdown": "^0.22.1",
30
+ "tsdown": "^0.22.3",
31
31
  "typescript": "^6.0.3",
32
- "vitest": "^4.1.8",
32
+ "vitest": "^4.1.9",
33
33
  "@alpic-ai/domains": "0.0.0"
34
34
  },
35
35
  "scripts": {