@alpic-ai/api 0.0.0-staging.g82c532b → 0.0.0-staging.g83e6676
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 +14 -1
- package/dist/index.mjs +28 -11
- package/package.json +6 -6
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: {
|
|
@@ -938,6 +940,17 @@ declare const contract: {
|
|
|
938
940
|
type RouterInput = InferContractRouterInputs<typeof contract>;
|
|
939
941
|
type RouterOutput = InferContractRouterOutputs<typeof contract>;
|
|
940
942
|
//#endregion
|
|
943
|
+
//#region src/auth-scope.d.ts
|
|
944
|
+
/** Credential scope required by an API route. */
|
|
945
|
+
type AuthScope = "any" | "user";
|
|
946
|
+
/** Accepts an API key or OAuth access token (default for most routes). */
|
|
947
|
+
declare const AUTH_SCOPE_ANY = "any";
|
|
948
|
+
/** Requires a user OAuth access token; API keys are not accepted. */
|
|
949
|
+
declare const AUTH_SCOPE_USER = "user";
|
|
950
|
+
type RouteAuthMeta = {
|
|
951
|
+
authScope?: AuthScope;
|
|
952
|
+
};
|
|
953
|
+
//#endregion
|
|
941
954
|
//#region ../domains/src/platforms/schemas.d.ts
|
|
942
955
|
declare const platformSchema: z.ZodEnum<{
|
|
943
956
|
chatgpt: "chatgpt";
|
|
@@ -1017,4 +1030,4 @@ declare const serverFieldsSchema: z.ZodObject<{
|
|
|
1017
1030
|
}, z.core.$strip>>>;
|
|
1018
1031
|
}, z.core.$strip>;
|
|
1019
1032
|
//#endregion
|
|
1020
|
-
export { ApiContext, PLATFORM_LABELS, type Platform, RouterInput, RouterOutput, Runtime, Transport, buildSettingsSchema, contract, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
|
1033
|
+
export { AUTH_SCOPE_ANY, AUTH_SCOPE_USER, ApiContext, AuthScope, PLATFORM_LABELS, type Platform, RouteAuthMeta, RouterInput, RouterOutput, Runtime, Transport, buildSettingsSchema, contract, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
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.
|
|
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(),
|
|
@@ -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",
|
|
@@ -915,19 +923,19 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
915
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:
|
|
926
|
+
companyUrl: urlField.describe("Your company's main website URL."),
|
|
919
927
|
supportChannel: supportChannelSchema.describe("Customer support URL or email address."),
|
|
920
|
-
privacyPolicyUrl:
|
|
921
|
-
termsOfServiceUrl:
|
|
922
|
-
demoRecordingUrl:
|
|
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:
|
|
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
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."),
|
|
928
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."),
|
|
929
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."),
|
|
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."),
|
|
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
|
});
|
|
@@ -1194,6 +1203,12 @@ z.object({
|
|
|
1194
1203
|
partnerDiscount: partnerDiscountSchema.nullable()
|
|
1195
1204
|
});
|
|
1196
1205
|
//#endregion
|
|
1206
|
+
//#region src/auth-scope.ts
|
|
1207
|
+
/** Accepts an API key or OAuth access token (default for most routes). */
|
|
1208
|
+
const AUTH_SCOPE_ANY = "any";
|
|
1209
|
+
/** Requires a user OAuth access token; API keys are not accepted. */
|
|
1210
|
+
const AUTH_SCOPE_USER = "user";
|
|
1211
|
+
//#endregion
|
|
1197
1212
|
//#region src/schemas.ts
|
|
1198
1213
|
const RESERVED_KEYS = [
|
|
1199
1214
|
"_HANDLER",
|
|
@@ -1422,7 +1437,8 @@ const createProjectContractV1 = oc.route({
|
|
|
1422
1437
|
successDescription: "The project has been created successfully"
|
|
1423
1438
|
}).errors({
|
|
1424
1439
|
NOT_FOUND: {},
|
|
1425
|
-
BAD_REQUEST: {}
|
|
1440
|
+
BAD_REQUEST: {},
|
|
1441
|
+
FORBIDDEN: {}
|
|
1426
1442
|
}).input(z.object({
|
|
1427
1443
|
teamId: z.string().optional(),
|
|
1428
1444
|
name: z.string().trim().min(1).max(100),
|
|
@@ -1528,7 +1544,8 @@ const updateProjectContractV1 = oc.route({
|
|
|
1528
1544
|
successDescription: "The project has been updated successfully"
|
|
1529
1545
|
}).errors({
|
|
1530
1546
|
NOT_FOUND: {},
|
|
1531
|
-
BAD_REQUEST: {}
|
|
1547
|
+
BAD_REQUEST: {},
|
|
1548
|
+
FORBIDDEN: {}
|
|
1532
1549
|
}).input(z.object({
|
|
1533
1550
|
projectId: z.string().describe("The ID of the project"),
|
|
1534
1551
|
name: z.string().min(1).max(100).optional().describe("The new name for the project"),
|
|
@@ -1731,7 +1748,7 @@ const getTunnelTicketContractV1 = oc.route({
|
|
|
1731
1748
|
description: "Get a signed ticket for establishing a tunnel connection. Requires user authentication (API keys are not supported).",
|
|
1732
1749
|
tags: ["tunnels"],
|
|
1733
1750
|
successDescription: "The tunnel ticket"
|
|
1734
|
-
}).errors({ FORBIDDEN: {} }).output(z.object({
|
|
1751
|
+
}).meta({ authScope: AUTH_SCOPE_USER }).errors({ FORBIDDEN: {} }).output(z.object({
|
|
1735
1752
|
subdomain: z.string().describe("The subdomain assigned to the user"),
|
|
1736
1753
|
ticket: z.string().describe("The signed tunnel ticket"),
|
|
1737
1754
|
tunnelHost: z.string().describe("The tunnel host to connect to")
|
|
@@ -1885,4 +1902,4 @@ const contract = {
|
|
|
1885
1902
|
}
|
|
1886
1903
|
};
|
|
1887
1904
|
//#endregion
|
|
1888
|
-
export { PLATFORM_LABELS, buildSettingsSchema, contract, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
|
1905
|
+
export { AUTH_SCOPE_ANY, AUTH_SCOPE_USER, PLATFORM_LABELS, buildSettingsSchema, contract, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpic-ai/api",
|
|
3
|
-
"version": "0.0.0-staging.
|
|
3
|
+
"version": "0.0.0-staging.g83e6676",
|
|
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.
|
|
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.
|
|
26
|
-
"@orpc/zod": "^1.14.
|
|
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.
|
|
30
|
+
"tsdown": "^0.22.3",
|
|
31
31
|
"typescript": "^6.0.3",
|
|
32
|
-
"vitest": "^4.1.
|
|
32
|
+
"vitest": "^4.1.9",
|
|
33
33
|
"@alpic-ai/domains": "0.0.0"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|