@tailorkit/client-platform 0.1.0-beta.12 → 0.1.0-beta.14

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.
@@ -111,10 +111,34 @@ var previewStart = (options) => (options.client ?? client).post({
111
111
  ...options.headers
112
112
  }
113
113
  });
114
- var previewResolve = (options) => (options.client ?? client).get({
115
- url: "/preview/{sessionId}",
114
+ var previewStop = (options) => (options.client ?? client).post({
115
+ url: "/preview/{sessionId}/stop",
116
+ ...options,
117
+ headers: {
118
+ "Content-Type": "application/json",
119
+ ...options.headers
120
+ }
121
+ });
122
+ var previewInvitation = (options) => (options.client ?? client).get({
123
+ url: "/preview/shares/{shareId}",
116
124
  ...options
117
125
  });
126
+ var previewAccept = (options) => (options.client ?? client).post({
127
+ url: "/preview/shares/{shareId}/accept",
128
+ ...options,
129
+ headers: {
130
+ "Content-Type": "application/json",
131
+ ...options.headers
132
+ }
133
+ });
134
+ var previewAccepted = (options) => (options.client ?? client).post({
135
+ url: "/preview/grants/resolve",
136
+ ...options,
137
+ headers: {
138
+ "Content-Type": "application/json",
139
+ ...options.headers
140
+ }
141
+ });
118
142
 
119
143
  export {
120
144
  appsList,
@@ -133,5 +157,8 @@ export {
133
157
  deploymentsGet,
134
158
  deploymentsPublish,
135
159
  previewStart,
136
- previewResolve
160
+ previewStop,
161
+ previewInvitation,
162
+ previewAccept,
163
+ previewAccepted
137
164
  };
@@ -0,0 +1,103 @@
1
+ // src/preview.ts
2
+ import { createORPCClient } from "@orpc/client";
3
+ import { RPCLink } from "@orpc/client/websocket";
4
+ import { z } from "zod";
5
+ var identifier = z.string().regex(/^[A-Za-z0-9_-]{1,128}$/u);
6
+ var base64 = z.string().max(4 * Math.ceil(256 * 1024 / 3)).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u);
7
+ var hasControlCharacters = (value) => [...value].some((character) => (character.codePointAt(0) ?? 0) < 32);
8
+ var previewFileManifestSchema = z.object({
9
+ path: z.string().min(1).max(1024).refine((path) => new TextEncoder().encode(path).byteLength <= 1024, {
10
+ message: "Preview path exceeds 1024 UTF-8 bytes"
11
+ }),
12
+ contentType: z.string().min(1).max(255).refine((contentType) => !/[\r\n]/u.test(contentType), {
13
+ message: "Invalid preview content type"
14
+ }),
15
+ size: z.number().int().min(0).max(1024 * 1024),
16
+ chunks: z.number().int().min(0).max(4),
17
+ sha256: z.string().regex(/^[a-f0-9]{64}$/u)
18
+ });
19
+ var previewBuildManifestSchema = z.object({
20
+ files: z.array(previewFileManifestSchema).max(100)
21
+ }).superRefine((manifest, context) => {
22
+ const paths = /* @__PURE__ */ new Set();
23
+ let total = 0;
24
+ for (const [index, file] of manifest.files.entries()) {
25
+ if (file.path.startsWith("/") || file.path.includes("\\") || file.path.split("/").some((part) => !part || part === "." || part === "..") || hasControlCharacters(file.path) || paths.has(file.path)) {
26
+ context.addIssue({
27
+ code: "custom",
28
+ message: "Invalid or duplicate preview path",
29
+ path: ["files", index, "path"]
30
+ });
31
+ }
32
+ if (file.chunks !== Math.ceil(file.size / (256 * 1024))) {
33
+ context.addIssue({
34
+ code: "custom",
35
+ message: "Invalid preview chunk count",
36
+ path: ["files", index, "chunks"]
37
+ });
38
+ }
39
+ paths.add(file.path);
40
+ total += file.size;
41
+ }
42
+ if (!paths.has("client.js")) context.addIssue({ code: "custom", message: "Missing client.js" });
43
+ if (total > 10 * 1024 * 1024)
44
+ context.addIssue({ code: "custom", message: "Preview build exceeds 10 MiB" });
45
+ });
46
+ var previewEventSchema = z.discriminatedUnion("type", [
47
+ z.object({
48
+ type: z.literal("begin"),
49
+ buildId: identifier,
50
+ revision: z.number().int().positive(),
51
+ manifest: previewBuildManifestSchema
52
+ }),
53
+ z.object({
54
+ type: z.literal("chunk"),
55
+ revision: z.number().int().positive(),
56
+ fileIndex: z.number().int().min(0).max(99),
57
+ chunkIndex: z.number().int().min(0).max(3),
58
+ base64
59
+ }),
60
+ z.object({ type: z.literal("complete"), revision: z.number().int().positive() }),
61
+ z.object({ type: z.literal("ended") })
62
+ ]);
63
+ var previewMetadataSchema = z.object({
64
+ sessionId: z.uuid(),
65
+ expiresAt: z.string().min(1),
66
+ websocketUrl: z.url(),
67
+ token: z.string().min(1)
68
+ });
69
+ var beginInput = z.object({ manifest: previewBuildManifestSchema });
70
+ var uploadInput = z.object({
71
+ buildId: identifier,
72
+ fileIndex: z.number().int().min(0).max(99),
73
+ chunkIndex: z.number().int().min(0).max(3),
74
+ base64
75
+ });
76
+ var buildIdOutput = z.object({ buildId: identifier });
77
+ var acceptedOutput = z.object({ accepted: z.literal(true) });
78
+ var commitOutput = z.object({ revision: z.number().int().positive() });
79
+ function createPreviewWebSocketClient(websocket) {
80
+ const rpc = createORPCClient(new RPCLink({ websocket }));
81
+ return {
82
+ beginBuild: async (input) => buildIdOutput.parse(await rpc.beginBuild(beginInput.parse(input))),
83
+ uploadChunk: async (input) => acceptedOutput.parse(await rpc.uploadChunk(uploadInput.parse(input))),
84
+ commitBuild: async (input) => commitOutput.parse(await rpc.commitBuild({ buildId: identifier.parse(input.buildId) })),
85
+ heartbeat: async () => acceptedOutput.parse(await rpc.heartbeat()),
86
+ subscribe: async () => {
87
+ const stream = await rpc.subscribe();
88
+ return (async function* () {
89
+ for await (const value of stream) {
90
+ yield previewEventSchema.parse(value);
91
+ }
92
+ })();
93
+ }
94
+ };
95
+ }
96
+
97
+ export {
98
+ previewFileManifestSchema,
99
+ previewBuildManifestSchema,
100
+ previewEventSchema,
101
+ previewMetadataSchema,
102
+ createPreviewWebSocketClient
103
+ };
@@ -1,2 +1,2 @@
1
- import type { Client, Config } from "./types.gen";
1
+ import type { Client, Config } from "./types.gen.js";
2
2
  export declare const createClient: (config?: Config) => Client;
@@ -1,10 +1,10 @@
1
- export type { Auth } from "../core/auth.gen";
2
- export type { QuerySerializerOptions } from "../core/bodySerializer.gen";
3
- export { formDataBodySerializer, jsonBodySerializer, urlSearchParamsBodySerializer, } from "../core/bodySerializer.gen";
4
- export { buildClientParams } from "../core/params.gen";
5
- export { serializeQueryKeyValue } from "../core/queryKeySerializer.gen";
6
- export type { ServerSentEventsResult } from "../core/serverSentEvents.gen";
7
- export type { ClientMeta } from "../core/types.gen";
8
- export { createClient } from "./client.gen";
9
- export type { Client, ClientOptions, Config, CreateClientConfig, Options, RequestOptions, RequestResult, ResolvedRequestOptions, ResponseStyle, TDataShape, } from "./types.gen";
10
- export { createConfig, mergeHeaders } from "./utils.gen";
1
+ export type { Auth } from "../core/auth.gen.js";
2
+ export type { QuerySerializerOptions } from "../core/bodySerializer.gen.js";
3
+ export { formDataBodySerializer, jsonBodySerializer, urlSearchParamsBodySerializer, } from "../core/bodySerializer.gen.js";
4
+ export { buildClientParams } from "../core/params.gen.js";
5
+ export { serializeQueryKeyValue } from "../core/queryKeySerializer.gen.js";
6
+ export type { ServerSentEventsResult } from "../core/serverSentEvents.gen.js";
7
+ export type { ClientMeta } from "../core/types.gen.js";
8
+ export { createClient } from "./client.gen.js";
9
+ export type { Client, ClientOptions, Config, CreateClientConfig, Options, RequestOptions, RequestResult, ResolvedRequestOptions, ResponseStyle, TDataShape, } from "./types.gen.js";
10
+ export { createConfig, mergeHeaders } from "./utils.gen.js";
@@ -1,7 +1,7 @@
1
- import type { Auth } from "../core/auth.gen";
2
- import type { ServerSentEventsOptions, ServerSentEventsResult } from "../core/serverSentEvents.gen";
3
- import type { Client as CoreClient, Config as CoreConfig } from "../core/types.gen";
4
- import type { Middleware } from "./utils.gen";
1
+ import type { Auth } from "../core/auth.gen.js";
2
+ import type { ServerSentEventsOptions, ServerSentEventsResult } from "../core/serverSentEvents.gen.js";
3
+ import type { Client as CoreClient, Config as CoreConfig } from "../core/types.gen.js";
4
+ import type { Middleware } from "./utils.gen.js";
5
5
  export type ResponseStyle = "data" | "fields";
6
6
  export interface Config<T extends ClientOptions = ClientOptions> extends Omit<RequestInit, "body" | "headers" | "method">, CoreConfig {
7
7
  /**
@@ -1,5 +1,5 @@
1
- import type { QuerySerializerOptions } from "../core/bodySerializer.gen";
2
- import type { Client, ClientOptions, Config, RequestOptions } from "./types.gen";
1
+ import type { QuerySerializerOptions } from "../core/bodySerializer.gen.js";
2
+ import type { Client, ClientOptions, Config, RequestOptions } from "./types.gen.js";
3
3
  export declare const createQuerySerializer: <T = unknown>({ parameters, ...args }?: QuerySerializerOptions) => ((queryParams: T) => string);
4
4
  /**
5
5
  * Infers parseAs value from provided Content-Type header.
@@ -1,5 +1,5 @@
1
- import { type Client, type ClientOptions, type Config } from "./client";
2
- import type { ClientOptions as ClientOptions2 } from "./types.gen";
1
+ import { type Client, type ClientOptions, type Config } from "./client/index.js";
2
+ import type { ClientOptions as ClientOptions2 } from "./types.gen.js";
3
3
  /**
4
4
  * The `createClientConfig()` function will be called on client initialization
5
5
  * and the returned object will become the client's initial configuration.
@@ -1,4 +1,4 @@
1
- import type { ArrayStyle, ObjectStyle, SerializerOptions } from "./pathSerializer.gen";
1
+ import type { ArrayStyle, ObjectStyle, SerializerOptions } from "./pathSerializer.gen.js";
2
2
  export type QuerySerializer = (query: Record<string, unknown>) => string;
3
3
  export type BodySerializer = (body: unknown) => unknown;
4
4
  type QuerySerializerOptionsObject = {
@@ -1,4 +1,4 @@
1
- import type { Config } from "./types.gen";
1
+ import type { Config } from "./types.gen.js";
2
2
  export type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, "method"> & Pick<Config, "method" | "responseTransformer" | "responseValidator"> & {
3
3
  /**
4
4
  * Fetch API implementation. You can use this option to provide a custom
@@ -1,5 +1,5 @@
1
- import type { Auth, AuthToken } from "./auth.gen";
2
- import type { BodySerializer, QuerySerializer, QuerySerializerOptions } from "./bodySerializer.gen";
1
+ import type { Auth, AuthToken } from "./auth.gen.js";
2
+ import type { BodySerializer, QuerySerializer, QuerySerializerOptions } from "./bodySerializer.gen.js";
3
3
  export type HttpMethod = "connect" | "delete" | "get" | "head" | "options" | "patch" | "post" | "put" | "trace";
4
4
  export type Client<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
5
5
  /**
@@ -1,4 +1,4 @@
1
- import type { BodySerializer, QuerySerializer } from "./bodySerializer.gen";
1
+ import type { BodySerializer, QuerySerializer } from "./bodySerializer.gen.js";
2
2
  export interface PathSerializer {
3
3
  path: Record<string, unknown>;
4
4
  url: string;
@@ -1,2 +1,2 @@
1
- export { appsCreate, appsDelete, appsDeploy, appsGet, appsList, appsUpdate, cliAuthApprove, cliAuthDeny, cliAuthPoll, cliAuthStart, cliAuthVerifyToken, deploymentsCreate, deploymentsGet, deploymentsList, deploymentsPublish, type Options, previewResolve, previewStart, } from "./sdk.gen";
2
- export type { AppsCreateData, AppsCreateResponse, AppsCreateResponses, AppsDeleteData, AppsDeleteResponse, AppsDeleteResponses, AppsDeployData, AppsDeployResponse, AppsDeployResponses, AppsGetData, AppsGetResponse, AppsGetResponses, AppsListData, AppsListResponse, AppsListResponses, AppsUpdateData, AppsUpdateResponse, AppsUpdateResponses, CliAuthApproveData, CliAuthApproveResponse, CliAuthApproveResponses, CliAuthDenyData, CliAuthDenyResponse, CliAuthDenyResponses, CliAuthPollData, CliAuthPollResponse, CliAuthPollResponses, CliAuthStartData, CliAuthStartResponse, CliAuthStartResponses, CliAuthVerifyTokenData, CliAuthVerifyTokenResponse, CliAuthVerifyTokenResponses, ClientOptions, DeploymentsCreateData, DeploymentsCreateResponse, DeploymentsCreateResponses, DeploymentsGetData, DeploymentsGetResponse, DeploymentsGetResponses, DeploymentsListData, DeploymentsListResponse, DeploymentsListResponses, DeploymentsPublishData, DeploymentsPublishResponse, DeploymentsPublishResponses, PreviewResolveData, PreviewResolveResponse, PreviewResolveResponses, PreviewStartData, PreviewStartResponse, PreviewStartResponses, } from "./types.gen";
1
+ export { appsCreate, appsDelete, appsDeploy, appsGet, appsList, appsUpdate, cliAuthApprove, cliAuthDeny, cliAuthPoll, cliAuthStart, cliAuthVerifyToken, deploymentsCreate, deploymentsGet, deploymentsList, deploymentsPublish, type Options, previewAccept, previewAccepted, previewInvitation, previewStart, previewStop, } from "./sdk.gen.js";
2
+ export type { AppsCreateData, AppsCreateResponse, AppsCreateResponses, AppsDeleteData, AppsDeleteResponse, AppsDeleteResponses, AppsDeployData, AppsDeployResponse, AppsDeployResponses, AppsGetData, AppsGetResponse, AppsGetResponses, AppsListData, AppsListResponse, AppsListResponses, AppsUpdateData, AppsUpdateResponse, AppsUpdateResponses, CliAuthApproveData, CliAuthApproveResponse, CliAuthApproveResponses, CliAuthDenyData, CliAuthDenyResponse, CliAuthDenyResponses, CliAuthPollData, CliAuthPollResponse, CliAuthPollResponses, CliAuthStartData, CliAuthStartResponse, CliAuthStartResponses, CliAuthVerifyTokenData, CliAuthVerifyTokenResponse, CliAuthVerifyTokenResponses, ClientOptions, DeploymentsCreateData, DeploymentsCreateResponse, DeploymentsCreateResponses, DeploymentsGetData, DeploymentsGetResponse, DeploymentsGetResponses, DeploymentsListData, DeploymentsListResponse, DeploymentsListResponses, DeploymentsPublishData, DeploymentsPublishResponse, DeploymentsPublishResponses, PreviewAcceptData, PreviewAcceptedData, PreviewAcceptedResponse, PreviewAcceptedResponses, PreviewAcceptResponse, PreviewAcceptResponses, PreviewInvitationData, PreviewInvitationResponse, PreviewInvitationResponses, PreviewStartData, PreviewStartResponse, PreviewStartResponses, PreviewStopData, PreviewStopResponse, PreviewStopResponses, } from "./types.gen.js";
@@ -15,9 +15,12 @@ import {
15
15
  deploymentsGet,
16
16
  deploymentsList,
17
17
  deploymentsPublish,
18
- previewResolve,
19
- previewStart
20
- } from "../chunk-XGSFDGUP.js";
18
+ previewAccept,
19
+ previewAccepted,
20
+ previewInvitation,
21
+ previewStart,
22
+ previewStop
23
+ } from "../chunk-S6GBD6TR.js";
21
24
  import "../chunk-TZBKIIYQ.js";
22
25
  import "../chunk-X5TBL4RL.js";
23
26
  import "../chunk-VUBA7FI4.js";
@@ -45,6 +48,9 @@ export {
45
48
  deploymentsGet,
46
49
  deploymentsList,
47
50
  deploymentsPublish,
48
- previewResolve,
49
- previewStart
51
+ previewAccept,
52
+ previewAccepted,
53
+ previewInvitation,
54
+ previewStart,
55
+ previewStop
50
56
  };
@@ -1,5 +1,5 @@
1
- import type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from "./client";
2
- import type { AppsCreateData, AppsCreateResponses, AppsDeleteData, AppsDeleteResponses, AppsDeployData, AppsDeployResponses, AppsGetData, AppsGetResponses, AppsListData, AppsListResponses, AppsUpdateData, AppsUpdateResponses, CliAuthApproveData, CliAuthApproveResponses, CliAuthDenyData, CliAuthDenyResponses, CliAuthPollData, CliAuthPollResponses, CliAuthStartData, CliAuthStartResponses, CliAuthVerifyTokenData, CliAuthVerifyTokenResponses, DeploymentsCreateData, DeploymentsCreateResponses, DeploymentsGetData, DeploymentsGetResponses, DeploymentsListData, DeploymentsListResponses, DeploymentsPublishData, DeploymentsPublishResponses, PreviewResolveData, PreviewResolveResponses, PreviewStartData, PreviewStartResponses } from "./types.gen";
1
+ import type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from "./client/index.js";
2
+ import type { AppsCreateData, AppsCreateResponses, AppsDeleteData, AppsDeleteResponses, AppsDeployData, AppsDeployResponses, AppsGetData, AppsGetResponses, AppsListData, AppsListResponses, AppsUpdateData, AppsUpdateResponses, CliAuthApproveData, CliAuthApproveResponses, CliAuthDenyData, CliAuthDenyResponses, CliAuthPollData, CliAuthPollResponses, CliAuthStartData, CliAuthStartResponses, CliAuthVerifyTokenData, CliAuthVerifyTokenResponses, DeploymentsCreateData, DeploymentsCreateResponses, DeploymentsGetData, DeploymentsGetResponses, DeploymentsListData, DeploymentsListResponses, DeploymentsPublishData, DeploymentsPublishResponses, PreviewAcceptData, PreviewAcceptedData, PreviewAcceptedResponses, PreviewAcceptResponses, PreviewInvitationData, PreviewInvitationResponses, PreviewStartData, PreviewStartResponses, PreviewStopData, PreviewStopResponses } from "./types.gen.js";
3
3
  export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
4
4
  /**
5
5
  * You can provide a client instance returned by `createClient()` instead of
@@ -29,4 +29,7 @@ export declare const deploymentsCreate: <ThrowOnError extends boolean = false>(o
29
29
  export declare const deploymentsGet: <ThrowOnError extends boolean = false>(options: Options<DeploymentsGetData, ThrowOnError>) => RequestResult<DeploymentsGetResponses, unknown, ThrowOnError>;
30
30
  export declare const deploymentsPublish: <ThrowOnError extends boolean = false>(options: Options<DeploymentsPublishData, ThrowOnError>) => RequestResult<DeploymentsPublishResponses, unknown, ThrowOnError>;
31
31
  export declare const previewStart: <ThrowOnError extends boolean = false>(options: Options<PreviewStartData, ThrowOnError>) => RequestResult<PreviewStartResponses, unknown, ThrowOnError>;
32
- export declare const previewResolve: <ThrowOnError extends boolean = false>(options: Options<PreviewResolveData, ThrowOnError>) => RequestResult<PreviewResolveResponses, unknown, ThrowOnError>;
32
+ export declare const previewStop: <ThrowOnError extends boolean = false>(options: Options<PreviewStopData, ThrowOnError>) => RequestResult<PreviewStopResponses, unknown, ThrowOnError>;
33
+ export declare const previewInvitation: <ThrowOnError extends boolean = false>(options: Options<PreviewInvitationData, ThrowOnError>) => RequestResult<PreviewInvitationResponses, unknown, ThrowOnError>;
34
+ export declare const previewAccept: <ThrowOnError extends boolean = false>(options: Options<PreviewAcceptData, ThrowOnError>) => RequestResult<PreviewAcceptResponses, unknown, ThrowOnError>;
35
+ export declare const previewAccepted: <ThrowOnError extends boolean = false>(options: Options<PreviewAcceptedData, ThrowOnError>) => RequestResult<PreviewAcceptedResponses, unknown, ThrowOnError>;
@@ -14,9 +14,12 @@ import {
14
14
  deploymentsGet,
15
15
  deploymentsList,
16
16
  deploymentsPublish,
17
- previewResolve,
18
- previewStart
19
- } from "../chunk-XGSFDGUP.js";
17
+ previewAccept,
18
+ previewAccepted,
19
+ previewInvitation,
20
+ previewStart,
21
+ previewStop
22
+ } from "../chunk-S6GBD6TR.js";
20
23
  import "../chunk-TZBKIIYQ.js";
21
24
  import "../chunk-X5TBL4RL.js";
22
25
  import "../chunk-VUBA7FI4.js";
@@ -44,6 +47,9 @@ export {
44
47
  deploymentsGet,
45
48
  deploymentsList,
46
49
  deploymentsPublish,
47
- previewResolve,
48
- previewStart
50
+ previewAccept,
51
+ previewAccepted,
52
+ previewInvitation,
53
+ previewStart,
54
+ previewStop
49
55
  };
@@ -574,28 +574,119 @@ export type PreviewStartResponses = {
574
574
  sessionId: string;
575
575
  tunnelToken: string;
576
576
  tunnelUrl: string;
577
+ shareId: string;
577
578
  };
578
579
  };
579
580
  export type PreviewStartResponse = PreviewStartResponses[keyof PreviewStartResponses];
580
- export type PreviewResolveData = {
581
+ export type PreviewStopData = {
582
+ body: {
583
+ deployToken: string;
584
+ };
585
+ path: {
586
+ sessionId: string;
587
+ };
588
+ query?: never;
589
+ url: "/preview/{sessionId}/stop";
590
+ };
591
+ export type PreviewStopResponses = {
592
+ /**
593
+ * OK
594
+ */
595
+ 200: {
596
+ [key: string]: unknown;
597
+ };
598
+ };
599
+ export type PreviewStopResponse = PreviewStopResponses[keyof PreviewStopResponses];
600
+ export type PreviewInvitationData = {
581
601
  body?: never;
582
602
  path: {
603
+ shareId: string;
604
+ };
605
+ query?: never;
606
+ url: "/preview/shares/{shareId}";
607
+ };
608
+ export type PreviewInvitationResponses = {
609
+ /**
610
+ * OK
611
+ */
612
+ 200: {
613
+ appName: string;
614
+ expiresAt: string;
583
615
  sessionId: string;
584
616
  };
585
- query: {
617
+ };
618
+ export type PreviewInvitationResponse = PreviewInvitationResponses[keyof PreviewInvitationResponses];
619
+ export type PreviewAcceptData = {
620
+ body: {
586
621
  scopeId: string;
587
622
  };
588
- url: "/preview/{sessionId}";
623
+ path: {
624
+ shareId: string;
625
+ };
626
+ query?: never;
627
+ url: "/preview/shares/{shareId}/accept";
589
628
  };
590
- export type PreviewResolveResponses = {
629
+ export type PreviewAcceptResponses = {
591
630
  /**
592
631
  * OK
593
632
  */
594
633
  200: {
595
- appId: string;
596
- clientPath: string;
634
+ grantId: string;
597
635
  sessionId: string;
598
- status: "connected" | "offline";
599
636
  };
600
637
  };
601
- export type PreviewResolveResponse = PreviewResolveResponses[keyof PreviewResolveResponses];
638
+ export type PreviewAcceptResponse = PreviewAcceptResponses[keyof PreviewAcceptResponses];
639
+ export type PreviewAcceptedData = {
640
+ body: {
641
+ grantIds: Array<string>;
642
+ scopeId: string;
643
+ };
644
+ path?: never;
645
+ query?: never;
646
+ url: "/preview/grants/resolve";
647
+ };
648
+ export type PreviewAcceptedResponses = {
649
+ /**
650
+ * OK
651
+ */
652
+ 200: {
653
+ items: Array<{
654
+ app: {
655
+ id: string;
656
+ publicId: string;
657
+ projectId: string;
658
+ scopeId: string;
659
+ name: string;
660
+ description: string | null;
661
+ currentDeploymentId: string | null;
662
+ createdAt: string;
663
+ updatedAt: string;
664
+ currentDeployment: {
665
+ id: string;
666
+ publicId: string;
667
+ appId: string;
668
+ status: "uploading" | "deploying" | "verifying" | "published";
669
+ clientEntryFileId: string | null;
670
+ logoLightFileId: string | null;
671
+ logoDarkFileId: string | null;
672
+ logoLightPath: string | null;
673
+ logoDarkPath: string | null;
674
+ createdAt: string;
675
+ updatedAt: string;
676
+ } | null;
677
+ clientPath?: string;
678
+ logoPaths?: {
679
+ dark?: string;
680
+ light?: string;
681
+ };
682
+ };
683
+ preview: {
684
+ sessionId: string;
685
+ expiresAt: string;
686
+ websocketUrl: string;
687
+ token: string;
688
+ };
689
+ }>;
690
+ };
691
+ };
692
+ export type PreviewAcceptedResponse = PreviewAcceptedResponses[keyof PreviewAcceptedResponses];
package/dist/client.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import type { CreateClientConfig } from "./client/client";
1
+ import type { CreateClientConfig } from "./client/client/index.js";
2
2
  export declare const createClientConfig: CreateClientConfig;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from "./client/index";
2
- export * from "./client";
1
+ export * from "./client/index.js";
2
+ export * from "./client.js";
3
+ export * from "./preview.js";
package/dist/index.js CHANGED
@@ -1,6 +1,13 @@
1
1
  import {
2
2
  createClientConfig
3
3
  } from "./chunk-5IRC5P4W.js";
4
+ import {
5
+ createPreviewWebSocketClient,
6
+ previewBuildManifestSchema,
7
+ previewEventSchema,
8
+ previewFileManifestSchema,
9
+ previewMetadataSchema
10
+ } from "./chunk-W4IZZ2X7.js";
4
11
  import "./chunk-5X7JZMEF.js";
5
12
  import {
6
13
  appsCreate,
@@ -18,9 +25,12 @@ import {
18
25
  deploymentsGet,
19
26
  deploymentsList,
20
27
  deploymentsPublish,
21
- previewResolve,
22
- previewStart
23
- } from "./chunk-XGSFDGUP.js";
28
+ previewAccept,
29
+ previewAccepted,
30
+ previewInvitation,
31
+ previewStart,
32
+ previewStop
33
+ } from "./chunk-S6GBD6TR.js";
24
34
  import "./chunk-TZBKIIYQ.js";
25
35
  import "./chunk-X5TBL4RL.js";
26
36
  import "./chunk-VUBA7FI4.js";
@@ -45,10 +55,18 @@ export {
45
55
  cliAuthStart,
46
56
  cliAuthVerifyToken,
47
57
  createClientConfig,
58
+ createPreviewWebSocketClient,
48
59
  deploymentsCreate,
49
60
  deploymentsGet,
50
61
  deploymentsList,
51
62
  deploymentsPublish,
52
- previewResolve,
53
- previewStart
63
+ previewAccept,
64
+ previewAccepted,
65
+ previewBuildManifestSchema,
66
+ previewEventSchema,
67
+ previewFileManifestSchema,
68
+ previewInvitation,
69
+ previewMetadataSchema,
70
+ previewStart,
71
+ previewStop
54
72
  };
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ export declare const previewFileManifestSchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ contentType: z.ZodString;
5
+ size: z.ZodNumber;
6
+ chunks: z.ZodNumber;
7
+ sha256: z.ZodString;
8
+ }, z.core.$strip>;
9
+ export declare const previewBuildManifestSchema: z.ZodObject<{
10
+ files: z.ZodArray<z.ZodObject<{
11
+ path: z.ZodString;
12
+ contentType: z.ZodString;
13
+ size: z.ZodNumber;
14
+ chunks: z.ZodNumber;
15
+ sha256: z.ZodString;
16
+ }, z.core.$strip>>;
17
+ }, z.core.$strip>;
18
+ export declare const previewEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
19
+ type: z.ZodLiteral<"begin">;
20
+ buildId: z.ZodString;
21
+ revision: z.ZodNumber;
22
+ manifest: z.ZodObject<{
23
+ files: z.ZodArray<z.ZodObject<{
24
+ path: z.ZodString;
25
+ contentType: z.ZodString;
26
+ size: z.ZodNumber;
27
+ chunks: z.ZodNumber;
28
+ sha256: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ }, z.core.$strip>;
31
+ }, z.core.$strip>, z.ZodObject<{
32
+ type: z.ZodLiteral<"chunk">;
33
+ revision: z.ZodNumber;
34
+ fileIndex: z.ZodNumber;
35
+ chunkIndex: z.ZodNumber;
36
+ base64: z.ZodString;
37
+ }, z.core.$strip>, z.ZodObject<{
38
+ type: z.ZodLiteral<"complete">;
39
+ revision: z.ZodNumber;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ type: z.ZodLiteral<"ended">;
42
+ }, z.core.$strip>], "type">;
43
+ export declare const previewMetadataSchema: z.ZodObject<{
44
+ sessionId: z.ZodUUID;
45
+ expiresAt: z.ZodString;
46
+ websocketUrl: z.ZodURL;
47
+ token: z.ZodString;
48
+ }, z.core.$strip>;
49
+ export type PreviewFileManifest = z.infer<typeof previewFileManifestSchema>;
50
+ export type PreviewBuildManifest = z.infer<typeof previewBuildManifestSchema>;
51
+ export type PreviewEvent = z.infer<typeof previewEventSchema>;
52
+ declare const beginInput: z.ZodObject<{
53
+ manifest: z.ZodObject<{
54
+ files: z.ZodArray<z.ZodObject<{
55
+ path: z.ZodString;
56
+ contentType: z.ZodString;
57
+ size: z.ZodNumber;
58
+ chunks: z.ZodNumber;
59
+ sha256: z.ZodString;
60
+ }, z.core.$strip>>;
61
+ }, z.core.$strip>;
62
+ }, z.core.$strip>;
63
+ declare const uploadInput: z.ZodObject<{
64
+ buildId: z.ZodString;
65
+ fileIndex: z.ZodNumber;
66
+ chunkIndex: z.ZodNumber;
67
+ base64: z.ZodString;
68
+ }, z.core.$strip>;
69
+ declare const buildIdOutput: z.ZodObject<{
70
+ buildId: z.ZodString;
71
+ }, z.core.$strip>;
72
+ declare const acceptedOutput: z.ZodObject<{
73
+ accepted: z.ZodLiteral<true>;
74
+ }, z.core.$strip>;
75
+ declare const commitOutput: z.ZodObject<{
76
+ revision: z.ZodNumber;
77
+ }, z.core.$strip>;
78
+ export interface PreviewWebSocketClient {
79
+ beginBuild(input: z.input<typeof beginInput>): Promise<z.infer<typeof buildIdOutput>>;
80
+ uploadChunk(input: z.input<typeof uploadInput>): Promise<z.infer<typeof acceptedOutput>>;
81
+ commitBuild(input: {
82
+ buildId: string;
83
+ }): Promise<z.infer<typeof commitOutput>>;
84
+ heartbeat(): Promise<z.infer<typeof acceptedOutput>>;
85
+ subscribe(): Promise<AsyncIterable<PreviewEvent>>;
86
+ }
87
+ /** Validates every preview WebSocket request, response, and streamed event. */
88
+ export declare function createPreviewWebSocketClient(websocket: WebSocket): PreviewWebSocketClient;
89
+ export {};
@@ -0,0 +1,14 @@
1
+ import {
2
+ createPreviewWebSocketClient,
3
+ previewBuildManifestSchema,
4
+ previewEventSchema,
5
+ previewFileManifestSchema,
6
+ previewMetadataSchema
7
+ } from "./chunk-W4IZZ2X7.js";
8
+ export {
9
+ createPreviewWebSocketClient,
10
+ previewBuildManifestSchema,
11
+ previewEventSchema,
12
+ previewFileManifestSchema,
13
+ previewMetadataSchema
14
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailorkit/client-platform",
3
- "version": "0.1.0-beta.12",
3
+ "version": "0.1.0-beta.14",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,16 +24,17 @@
24
24
  "types": "./dist/client/*.d.ts",
25
25
  "import": "./dist/client/*.js"
26
26
  },
27
- "./preview-tunnel": {
28
- "types": "./dist/preview-tunnel.d.ts",
29
- "import": "./dist/preview-tunnel.js"
27
+ "./preview": {
28
+ "types": "./dist/preview.d.ts",
29
+ "import": "./dist/preview.js"
30
30
  }
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@orpc/client": "^1.15.0"
36
+ "@orpc/client": "^1.15.0",
37
+ "zod": "^4.6.2"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@hey-api/openapi-ts": "next",
@@ -46,7 +47,7 @@
46
47
  },
47
48
  "scripts": {
48
49
  "build": "tsup 'src/**/*.ts' --format esm --target node20 --clean && tsc -p tsconfig.build.json",
49
- "generate": "openapi-ts && node ./scripts/restore-openapi-params.mjs && oxfmt src/client",
50
+ "generate": "openapi-ts && node ./scripts/restore-openapi-params.mjs && node ./scripts/normalize-esm-imports.mjs && oxfmt src/client",
50
51
  "check-types": "tsc --noEmit",
51
52
  "test": "vitest run"
52
53
  }
@@ -1,3 +0,0 @@
1
- import type { PreviewTunnelRouterClient } from "@tailorkit/api-platform/preview-tunnel";
2
- /** Creates the typed oRPC client for an authenticated preview tunnel WebSocket. */
3
- export declare function createPreviewTunnelClient(websocket: WebSocket): PreviewTunnelRouterClient;
@@ -1,9 +0,0 @@
1
- // src/preview-tunnel.ts
2
- import { createORPCClient } from "@orpc/client";
3
- import { RPCLink } from "@orpc/client/websocket";
4
- function createPreviewTunnelClient(websocket) {
5
- return createORPCClient(new RPCLink({ websocket }));
6
- }
7
- export {
8
- createPreviewTunnelClient
9
- };