@deksden-com/cpa-kit 0.0.0-stage → 0.1.3

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/NOTICE ADDED
@@ -0,0 +1 @@
1
+ CPA Kit is original integration code. CLIProxyAPI is a separately installed upstream product, not bundled. Dependencies retain their own licenses: zod (MIT), yauzl (MIT). No credentials, runtime data or CPA binary are included.
package/README.md CHANGED
@@ -1,3 +1,28 @@
1
- # Temporary Holding Version
1
+ # CPA Kit
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Встраиваемое администрирование CLIProxyAPI, не отдельное приложение и не inference SDK.
4
+ Node.js `>=22.23.2` без верхней границы. ESM; browser-safe contracts/client,
5
+ серверные адаптеры — только через `/server`.
6
+
7
+ Доступен на [npm](https://www.npmjs.com/package/@deksden-com/cpa-kit):
8
+ `pnpm add @deksden-com/cpa-kit`. Токен для установки не требуется.
9
+
10
+ ```ts
11
+ import { createCpaAdminClient } from '@deksden-com/cpa-kit/client';
12
+ const client = createCpaAdminClient({
13
+ baseUrl: '/api/cpa', instanceId: 'primary',
14
+ });
15
+ const status = await client.status();
16
+ ```
17
+
18
+ Это клиент **вашего** защищённого административного API, не прямого CPA endpoint.
19
+ Для cookie mutations передайте `headers: () => ({ 'X-CSRF-Token': token })`.
20
+ На сервере `createCpaManager(config, adapters)` принимает durable store, staging,
21
+ backend и authorization. Import не запускает процесс, worker или таймеры.
22
+ Секреты, маршруты, supervised worker и maintenance/drain принадлежат приложению.
23
+
24
+ - [Индекс документации](https://github.com/deksden-com/dd-cpa-kit/blob/main/docs/index.md): рецепты интеграции и API.
25
+ - [Обновления и соединения](https://github.com/deksden-com/dd-cpa-kit/blob/main/docs/operations.md): безопасная остановка, drain, rollback и cleanup.
26
+
27
+ UI доступен отдельным пакетом `@deksden-com/cpa-kit-react`. Для генерации используйте
28
+ собственный HTTP/AI SDK клиент с endpoint CPA; Kit его не подменяет.
@@ -0,0 +1,234 @@
1
+ // src/contracts/index.ts
2
+ import { z } from "zod";
3
+ var idSchema = z.string().regex(/^[A-Za-z0-9_.:-]{1,128}$/);
4
+ var errorCodes = [
5
+ "INVALID_INPUT",
6
+ "UNSUPPORTED_CAPABILITY",
7
+ "NOT_AUTHORIZED",
8
+ "REVISION_CONFLICT",
9
+ "IDEMPOTENCY_CONFLICT",
10
+ "KEY_EXPIRED",
11
+ "INSTANCE_BUSY",
12
+ "UPLOAD_LIMIT",
13
+ "ARCHIVE_UNSAFE",
14
+ "CREDENTIAL_INVALID",
15
+ "MANAGEMENT_UNAVAILABLE",
16
+ "DRAIN_TIMEOUT",
17
+ "PROBE_QUOTA_LIMITED",
18
+ "PROBE_FAILED",
19
+ "APPLY_PARTIAL",
20
+ "OUTCOME_UNKNOWN",
21
+ "RECOVERY_REQUIRED",
22
+ "CANCELLED",
23
+ "INTERNAL"
24
+ ];
25
+ var states = [
26
+ "queued",
27
+ "running",
28
+ "succeeded",
29
+ "failed",
30
+ "cancelled",
31
+ "partially_applied",
32
+ "recovery_required"
33
+ ];
34
+ var payloadSchemas = {
35
+ "import.stage": z.object({ uploadId: idSchema, format: z.literal("auto").default("auto") }).strict(),
36
+ "import.apply": z.object({
37
+ candidateId: idSchema,
38
+ previewRevision: z.string().min(1).max(128),
39
+ mode: z.enum(["merge", "replace"]),
40
+ overwriteIds: z.array(idSchema).max(1e3),
41
+ confirmedRemovals: z.array(idSchema).max(1e3)
42
+ }).strict(),
43
+ "import.cancel": z.object({ candidateId: idSchema }).strict(),
44
+ "credential.delete": z.object({ credentialId: idSchema, confirmed: z.literal(true) }).strict(),
45
+ "catalog.refresh": z.object({}).strict(),
46
+ "release.discover": z.object({}).strict(),
47
+ "release.install": z.object({ releaseId: idSchema }).strict(),
48
+ "release.activate": z.object({ installedReleaseId: idSchema, confirmed: z.literal(true) }).strict(),
49
+ "release.delete": z.object({ installedReleaseId: idSchema, confirmed: z.literal(true) }).strict(),
50
+ "release.rollback": z.object({ lastKnownGoodReleaseId: idSchema, confirmed: z.literal(true) }).strict(),
51
+ "model.probe": z.object({
52
+ modelId: z.string().min(1).max(256),
53
+ protocol: z.string().min(1).max(64),
54
+ reasoningProfile: z.string().max(64).nullable()
55
+ }).strict(),
56
+ "operation.cancel": z.object({ operationId: idSchema }).strict()
57
+ };
58
+ var commandSchema = z.object({
59
+ apiVersion: z.literal(1),
60
+ instanceId: idSchema,
61
+ kind: z.enum(
62
+ Object.keys(payloadSchemas)
63
+ ),
64
+ payload: z.unknown(),
65
+ idempotencyKey: z.string().regex(/^[A-Za-z0-9_.:-]{16,128}$/),
66
+ expectedRevision: z.string().min(1).max(128).nullable()
67
+ }).strict().transform((value, ctx) => {
68
+ const parsed = payloadSchemas[value.kind].safeParse(value.payload);
69
+ if (!parsed.success) {
70
+ ctx.addIssue({ code: "custom", message: "Invalid command payload" });
71
+ return z.NEVER;
72
+ }
73
+ if ([
74
+ "import.apply",
75
+ "credential.delete",
76
+ "release.activate",
77
+ "release.delete",
78
+ "release.rollback"
79
+ ].includes(value.kind) && !value.expectedRevision) {
80
+ ctx.addIssue({ code: "custom", message: "Revision required" });
81
+ return z.NEVER;
82
+ }
83
+ return { ...value, payload: parsed.data };
84
+ });
85
+ var errorSchema = z.object({
86
+ code: z.enum(errorCodes),
87
+ message: z.string().max(512),
88
+ retryable: z.boolean(),
89
+ retryAt: z.string().nullable(),
90
+ operationId: z.string().nullable()
91
+ }).strict();
92
+ var acceptSchema = z.object({
93
+ apiVersion: z.literal(1),
94
+ operationId: idSchema,
95
+ state: z.enum(states),
96
+ reused: z.boolean()
97
+ }).strict();
98
+ var operationSchema = z.object({
99
+ apiVersion: z.literal(1),
100
+ instanceId: idSchema,
101
+ id: idSchema,
102
+ kind: z.enum(
103
+ Object.keys(payloadSchemas)
104
+ ),
105
+ actorId: idSchema,
106
+ state: z.enum(states),
107
+ phase: z.enum([
108
+ "validate",
109
+ "preview",
110
+ "drain",
111
+ "prepare",
112
+ "switch",
113
+ "verify",
114
+ "commit",
115
+ "cleanup"
116
+ ]),
117
+ progress: z.object({
118
+ completed: z.number().int().nonnegative(),
119
+ total: z.number().int().nonnegative().nullable()
120
+ }).strict(),
121
+ createdAt: z.string(),
122
+ startedAt: z.string().nullable(),
123
+ updatedAt: z.string(),
124
+ finishedAt: z.string().nullable(),
125
+ revision: z.number().int(),
126
+ error: errorSchema.nullable(),
127
+ result: z.record(z.string(), z.unknown()).nullable(),
128
+ recoveryDisposition: z.string().nullable(),
129
+ cancelRequested: z.boolean()
130
+ }).strict();
131
+ function isTerminal(state) {
132
+ return !["queued", "running", "recovery_required"].includes(state);
133
+ }
134
+ var nullableDate = z.iso.datetime().nullable();
135
+ var capabilitySchema = z.object({
136
+ enabled: z.boolean(),
137
+ reasonCode: z.string().max(128).nullable(),
138
+ modes: z.array(z.enum(["merge", "replace"])).optional(),
139
+ overwrite: z.boolean().optional()
140
+ }).strict();
141
+ var credentialSchema = z.object({
142
+ id: idSchema,
143
+ provider: z.string().min(1).max(64),
144
+ fingerprint: z.string().max(64),
145
+ usability: z.enum(["usable", "unknown", "disabled"]),
146
+ updatedAt: nullableDate
147
+ }).strict();
148
+ var modelSchema = z.object({
149
+ id: z.string().min(1).max(256),
150
+ capabilities: z.array(z.string().max(64)).max(32)
151
+ }).strict();
152
+ var modelsSchema = z.object({
153
+ apiVersion: z.literal(1),
154
+ instanceId: idSchema,
155
+ models: z.array(modelSchema).max(1e3),
156
+ fetchedAt: nullableDate,
157
+ expiresAt: nullableDate,
158
+ stale: z.boolean(),
159
+ revision: z.string().min(1).max(128)
160
+ }).strict();
161
+ var releaseSchema = z.object({
162
+ id: idSchema,
163
+ version: z.string().min(1).max(128),
164
+ installed: z.boolean(),
165
+ active: z.boolean(),
166
+ lastKnownGood: z.boolean(),
167
+ installedAt: nullableDate
168
+ }).strict();
169
+ var statusSchema = z.object({
170
+ apiVersion: z.literal(1),
171
+ instanceId: idSchema,
172
+ revision: z.string().min(1).max(128),
173
+ runtime: z.object({
174
+ mode: z.enum(["managed", "remote"]),
175
+ version: z.string().max(128).nullable(),
176
+ state: z.enum(["running", "stopped", "unknown"])
177
+ }).strict(),
178
+ management: z.object({
179
+ protocol: z.string().max(64).nullable(),
180
+ availability: z.enum(["available", "unavailable", "unknown"])
181
+ }).strict(),
182
+ inference: z.object({
183
+ reachable: z.boolean().nullable(),
184
+ catalogState: z.enum(["fresh", "stale", "unknown"]),
185
+ probeState: z.enum(["passed", "failed", "unknown"]),
186
+ checkedAt: nullableDate
187
+ }).strict(),
188
+ capabilities: z.record(z.string().max(64), capabilitySchema),
189
+ busyOperationId: idSchema.nullable()
190
+ }).strict();
191
+ var importPreviewSchema = z.object({
192
+ apiVersion: z.literal(1),
193
+ instanceId: idSchema,
194
+ candidateId: idSchema,
195
+ revision: z.string().min(1).max(128),
196
+ expiresAt: z.iso.datetime(),
197
+ previewExpiresAt: z.iso.datetime(),
198
+ accepted: z.number().int().nonnegative(),
199
+ skipped: z.number().int().nonnegative(),
200
+ additions: z.array(idSchema).max(1e3),
201
+ preserved: z.array(idSchema).max(1e3),
202
+ replacements: z.array(idSchema).max(1e3),
203
+ removals: z.array(idSchema).max(1e3),
204
+ reasons: z.record(z.string().max(64), z.number().int().nonnegative())
205
+ }).strict();
206
+ var uploadResultSchema = z.object({ apiVersion: z.literal(1), uploadId: idSchema }).strict();
207
+ var listSchema = (item) => z.object({
208
+ apiVersion: z.literal(1),
209
+ instanceId: idSchema,
210
+ items: z.array(item).max(1e3),
211
+ nextCursor: z.string().max(2048).nullable()
212
+ }).strict();
213
+
214
+ export {
215
+ idSchema,
216
+ errorCodes,
217
+ states,
218
+ payloadSchemas,
219
+ commandSchema,
220
+ errorSchema,
221
+ acceptSchema,
222
+ operationSchema,
223
+ isTerminal,
224
+ capabilitySchema,
225
+ credentialSchema,
226
+ modelSchema,
227
+ modelsSchema,
228
+ releaseSchema,
229
+ statusSchema,
230
+ importPreviewSchema,
231
+ uploadResultSchema,
232
+ listSchema
233
+ };
234
+ //# sourceMappingURL=chunk-T47QB7AC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts/index.ts"],"sourcesContent":["import { z } from \"zod\";\nexport const idSchema = z.string().regex(/^[A-Za-z0-9_.:-]{1,128}$/);\nexport const errorCodes = [\n \"INVALID_INPUT\",\n \"UNSUPPORTED_CAPABILITY\",\n \"NOT_AUTHORIZED\",\n \"REVISION_CONFLICT\",\n \"IDEMPOTENCY_CONFLICT\",\n \"KEY_EXPIRED\",\n \"INSTANCE_BUSY\",\n \"UPLOAD_LIMIT\",\n \"ARCHIVE_UNSAFE\",\n \"CREDENTIAL_INVALID\",\n \"MANAGEMENT_UNAVAILABLE\",\n \"DRAIN_TIMEOUT\",\n \"PROBE_QUOTA_LIMITED\",\n \"PROBE_FAILED\",\n \"APPLY_PARTIAL\",\n \"OUTCOME_UNKNOWN\",\n \"RECOVERY_REQUIRED\",\n \"CANCELLED\",\n \"INTERNAL\",\n] as const;\nexport type ErrorCode = (typeof errorCodes)[number];\nexport interface ErrorDto {\n code: ErrorCode;\n message: string;\n retryable: boolean;\n retryAt: string | null;\n operationId: string | null;\n}\nexport const states = [\n \"queued\",\n \"running\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n \"partially_applied\",\n \"recovery_required\",\n] as const;\nexport type OperationState = (typeof states)[number];\nexport type Phase =\n | \"validate\"\n | \"preview\"\n | \"drain\"\n | \"prepare\"\n | \"switch\"\n | \"verify\"\n | \"commit\"\n | \"cleanup\";\nexport const payloadSchemas = {\n \"import.stage\": z\n .object({ uploadId: idSchema, format: z.literal(\"auto\").default(\"auto\") })\n .strict(),\n \"import.apply\": z\n .object({\n candidateId: idSchema,\n previewRevision: z.string().min(1).max(128),\n mode: z.enum([\"merge\", \"replace\"]),\n overwriteIds: z.array(idSchema).max(1000),\n confirmedRemovals: z.array(idSchema).max(1000),\n })\n .strict(),\n \"import.cancel\": z.object({ candidateId: idSchema }).strict(),\n \"credential.delete\": z\n .object({ credentialId: idSchema, confirmed: z.literal(true) })\n .strict(),\n \"catalog.refresh\": z.object({}).strict(),\n \"release.discover\": z.object({}).strict(),\n \"release.install\": z.object({ releaseId: idSchema }).strict(),\n \"release.activate\": z\n .object({ installedReleaseId: idSchema, confirmed: z.literal(true) })\n .strict(),\n \"release.delete\": z\n .object({ installedReleaseId: idSchema, confirmed: z.literal(true) })\n .strict(),\n \"release.rollback\": z\n .object({ lastKnownGoodReleaseId: idSchema, confirmed: z.literal(true) })\n .strict(),\n \"model.probe\": z\n .object({\n modelId: z.string().min(1).max(256),\n protocol: z.string().min(1).max(64),\n reasoningProfile: z.string().max(64).nullable(),\n })\n .strict(),\n \"operation.cancel\": z.object({ operationId: idSchema }).strict(),\n} as const;\nexport type CommandKind = keyof typeof payloadSchemas;\nexport type Command = {\n [K in CommandKind]: {\n apiVersion: 1;\n instanceId: string;\n kind: K;\n payload: z.infer<(typeof payloadSchemas)[K]>;\n idempotencyKey: string;\n expectedRevision: string | null;\n };\n}[CommandKind];\nexport const commandSchema = z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n kind: z.enum(\n Object.keys(payloadSchemas) as [CommandKind, ...CommandKind[]],\n ),\n payload: z.unknown(),\n idempotencyKey: z.string().regex(/^[A-Za-z0-9_.:-]{16,128}$/),\n expectedRevision: z.string().min(1).max(128).nullable(),\n })\n .strict()\n .transform((value, ctx) => {\n const parsed = payloadSchemas[value.kind].safeParse(value.payload);\n if (!parsed.success) {\n ctx.addIssue({ code: \"custom\", message: \"Invalid command payload\" });\n return z.NEVER;\n }\n if (\n [\n \"import.apply\",\n \"credential.delete\",\n \"release.activate\",\n \"release.delete\",\n \"release.rollback\",\n ].includes(value.kind) &&\n !value.expectedRevision\n ) {\n ctx.addIssue({ code: \"custom\", message: \"Revision required\" });\n return z.NEVER;\n }\n return { ...value, payload: parsed.data } as Command;\n });\nexport interface Actor {\n id: string;\n admin?: boolean;\n}\nexport interface Capability {\n enabled: boolean;\n reasonCode: string | null;\n modes?: (\"merge\" | \"replace\")[];\n overwrite?: boolean;\n}\nexport type Capabilities = Partial<\n Record<\n CommandKind | \"credentials.list\" | \"models.get\" | \"releases.list\",\n Capability\n >\n>;\nexport interface CredentialDto {\n id: string;\n provider: string;\n fingerprint: string;\n usability: \"usable\" | \"unknown\" | \"disabled\";\n updatedAt: string | null;\n}\nexport interface ModelDto {\n id: string;\n capabilities: string[];\n}\nexport interface ModelsDto {\n apiVersion: 1;\n instanceId: string;\n models: ModelDto[];\n fetchedAt: string | null;\n expiresAt: string | null;\n stale: boolean;\n revision: string;\n}\nexport interface ReleaseDto {\n id: string;\n version: string;\n installed: boolean;\n active: boolean;\n lastKnownGood: boolean;\n installedAt: string | null;\n}\nexport interface StatusDto {\n apiVersion: 1;\n instanceId: string;\n revision: string;\n runtime: {\n mode: \"managed\" | \"remote\";\n version: string | null;\n state: \"running\" | \"stopped\" | \"unknown\";\n };\n management: {\n protocol: string | null;\n availability: \"available\" | \"unavailable\" | \"unknown\";\n };\n inference: {\n reachable: boolean | null;\n catalogState: \"fresh\" | \"stale\" | \"unknown\";\n probeState: \"passed\" | \"failed\" | \"unknown\";\n checkedAt: string | null;\n };\n capabilities: Capabilities;\n busyOperationId: string | null;\n}\nexport interface OperationDto {\n apiVersion: 1;\n instanceId: string;\n id: string;\n kind: CommandKind;\n actorId: string;\n state: OperationState;\n phase: Phase;\n progress: { completed: number; total: number | null };\n createdAt: string;\n startedAt: string | null;\n updatedAt: string;\n finishedAt: string | null;\n revision: number;\n error: ErrorDto | null;\n result: Record<string, unknown> | null;\n recoveryDisposition: string | null;\n cancelRequested: boolean;\n}\nexport interface AcceptResult {\n apiVersion: 1;\n operationId: string;\n state: OperationState;\n reused: boolean;\n}\nexport interface ImportPreviewDto {\n apiVersion: 1;\n instanceId: string;\n candidateId: string;\n revision: string;\n expiresAt: string;\n previewExpiresAt: string;\n accepted: number;\n skipped: number;\n additions: string[];\n preserved: string[];\n replacements: string[];\n removals: string[];\n reasons: Record<string, number>;\n}\nexport interface ListDto<T> {\n apiVersion: 1;\n instanceId: string;\n items: T[];\n nextCursor: string | null;\n}\nexport interface UploadResult {\n apiVersion: 1;\n uploadId: string;\n}\nexport const errorSchema = z\n .object({\n code: z.enum(errorCodes),\n message: z.string().max(512),\n retryable: z.boolean(),\n retryAt: z.string().nullable(),\n operationId: z.string().nullable(),\n })\n .strict();\nexport const acceptSchema = z\n .object({\n apiVersion: z.literal(1),\n operationId: idSchema,\n state: z.enum(states),\n reused: z.boolean(),\n })\n .strict();\nexport const operationSchema = z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n id: idSchema,\n kind: z.enum(\n Object.keys(payloadSchemas) as [CommandKind, ...CommandKind[]],\n ),\n actorId: idSchema,\n state: z.enum(states),\n phase: z.enum([\n \"validate\",\n \"preview\",\n \"drain\",\n \"prepare\",\n \"switch\",\n \"verify\",\n \"commit\",\n \"cleanup\",\n ]),\n progress: z\n .object({\n completed: z.number().int().nonnegative(),\n total: z.number().int().nonnegative().nullable(),\n })\n .strict(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n updatedAt: z.string(),\n finishedAt: z.string().nullable(),\n revision: z.number().int(),\n error: errorSchema.nullable(),\n result: z.record(z.string(), z.unknown()).nullable(),\n recoveryDisposition: z.string().nullable(),\n cancelRequested: z.boolean(),\n })\n .strict();\nexport function isTerminal(state: OperationState) {\n return ![\"queued\", \"running\", \"recovery_required\"].includes(state);\n}\nconst nullableDate = z.iso.datetime().nullable();\nexport const capabilitySchema = z\n .object({\n enabled: z.boolean(),\n reasonCode: z.string().max(128).nullable(),\n modes: z.array(z.enum([\"merge\", \"replace\"])).optional(),\n overwrite: z.boolean().optional(),\n })\n .strict();\nexport const credentialSchema = z\n .object({\n id: idSchema,\n provider: z.string().min(1).max(64),\n fingerprint: z.string().max(64),\n usability: z.enum([\"usable\", \"unknown\", \"disabled\"]),\n updatedAt: nullableDate,\n })\n .strict();\nexport const modelSchema = z\n .object({\n id: z.string().min(1).max(256),\n capabilities: z.array(z.string().max(64)).max(32),\n })\n .strict();\nexport const modelsSchema = z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n models: z.array(modelSchema).max(1000),\n fetchedAt: nullableDate,\n expiresAt: nullableDate,\n stale: z.boolean(),\n revision: z.string().min(1).max(128),\n })\n .strict();\nexport const releaseSchema = z\n .object({\n id: idSchema,\n version: z.string().min(1).max(128),\n installed: z.boolean(),\n active: z.boolean(),\n lastKnownGood: z.boolean(),\n installedAt: nullableDate,\n })\n .strict();\nexport const statusSchema = z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n revision: z.string().min(1).max(128),\n runtime: z\n .object({\n mode: z.enum([\"managed\", \"remote\"]),\n version: z.string().max(128).nullable(),\n state: z.enum([\"running\", \"stopped\", \"unknown\"]),\n })\n .strict(),\n management: z\n .object({\n protocol: z.string().max(64).nullable(),\n availability: z.enum([\"available\", \"unavailable\", \"unknown\"]),\n })\n .strict(),\n inference: z\n .object({\n reachable: z.boolean().nullable(),\n catalogState: z.enum([\"fresh\", \"stale\", \"unknown\"]),\n probeState: z.enum([\"passed\", \"failed\", \"unknown\"]),\n checkedAt: nullableDate,\n })\n .strict(),\n capabilities: z.record(z.string().max(64), capabilitySchema),\n busyOperationId: idSchema.nullable(),\n })\n .strict();\nexport const importPreviewSchema = z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n candidateId: idSchema,\n revision: z.string().min(1).max(128),\n expiresAt: z.iso.datetime(),\n previewExpiresAt: z.iso.datetime(),\n accepted: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n additions: z.array(idSchema).max(1000),\n preserved: z.array(idSchema).max(1000),\n replacements: z.array(idSchema).max(1000),\n removals: z.array(idSchema).max(1000),\n reasons: z.record(z.string().max(64), z.number().int().nonnegative()),\n })\n .strict();\nexport const uploadResultSchema = z\n .object({ apiVersion: z.literal(1), uploadId: idSchema })\n .strict();\nexport const listSchema = <T extends z.ZodType>(item: T) =>\n z\n .object({\n apiVersion: z.literal(1),\n instanceId: idSchema,\n items: z.array(item).max(1000),\n nextCursor: z.string().max(2048).nullable(),\n })\n .strict();\n"],"mappings":"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","names":[]}
@@ -0,0 +1,35 @@
1
+ import { StatusDto, ListDto, CredentialDto, ModelsDto, ReleaseDto, OperationDto, ImportPreviewDto, Command, AcceptResult, UploadResult, ErrorDto } from '../contracts/index.js';
2
+ import 'zod';
3
+
4
+ interface CpaAdminClient {
5
+ status(signal?: AbortSignal): Promise<StatusDto>;
6
+ credentials(signal?: AbortSignal): Promise<ListDto<CredentialDto>>;
7
+ models(signal?: AbortSignal): Promise<ModelsDto>;
8
+ releases(signal?: AbortSignal): Promise<ListDto<ReleaseDto>>;
9
+ operations(options?: {
10
+ cursor?: string;
11
+ limit?: number;
12
+ signal?: AbortSignal;
13
+ }): Promise<ListDto<OperationDto>>;
14
+ operation(id: string, signal?: AbortSignal): Promise<OperationDto>;
15
+ preview(candidateId: string, options?: {
16
+ mode?: "merge" | "replace";
17
+ overwriteIds?: string[];
18
+ signal?: AbortSignal;
19
+ }): Promise<ImportPreviewDto>;
20
+ command(command: Command, signal?: AbortSignal): Promise<AcceptResult>;
21
+ upload(files: File[], signal?: AbortSignal): Promise<UploadResult>;
22
+ }
23
+ declare class CpaClientError extends Error {
24
+ readonly detail: ErrorDto;
25
+ readonly status: number;
26
+ constructor(detail: ErrorDto, status: number);
27
+ }
28
+ declare function createCpaAdminClient(options: {
29
+ baseUrl: string;
30
+ instanceId: string;
31
+ fetch?: typeof fetch;
32
+ headers?: () => HeadersInit;
33
+ }): CpaAdminClient;
34
+
35
+ export { type CpaAdminClient, CpaClientError, createCpaAdminClient };
@@ -0,0 +1,99 @@
1
+ import {
2
+ acceptSchema,
3
+ commandSchema,
4
+ credentialSchema,
5
+ errorSchema,
6
+ importPreviewSchema,
7
+ listSchema,
8
+ modelsSchema,
9
+ operationSchema,
10
+ releaseSchema,
11
+ statusSchema,
12
+ uploadResultSchema
13
+ } from "../chunk-T47QB7AC.js";
14
+
15
+ // src/client/index.ts
16
+ var CpaClientError = class extends Error {
17
+ constructor(detail, status) {
18
+ super(detail.message);
19
+ this.detail = detail;
20
+ this.status = status;
21
+ }
22
+ };
23
+ function createCpaAdminClient(options) {
24
+ const base = options.baseUrl.replace(/\/$/, "");
25
+ const request = async (path, init = {}) => {
26
+ const headers = new Headers(options.headers?.());
27
+ if (init.body && typeof init.body === "string")
28
+ headers.set("Content-Type", "application/json");
29
+ const response = await (options.fetch ?? fetch)(`${base}${path}`, {
30
+ credentials: "same-origin",
31
+ ...init,
32
+ headers
33
+ });
34
+ const value = await response.json();
35
+ if (!response.ok) {
36
+ const parsed = errorSchema.safeParse(value);
37
+ throw new CpaClientError(
38
+ parsed.success ? parsed.data : {
39
+ code: "INTERNAL",
40
+ message: "Administration request failed",
41
+ retryable: response.status >= 500,
42
+ retryAt: null,
43
+ operationId: null
44
+ },
45
+ response.status
46
+ );
47
+ }
48
+ return value;
49
+ };
50
+ const scope = `instanceId=${encodeURIComponent(options.instanceId)}`;
51
+ return {
52
+ status: async (s) => statusSchema.parse(await request(`/status?${scope}`, { signal: s })),
53
+ credentials: async (s) => listSchema(credentialSchema).parse(
54
+ await request(`/credentials?${scope}`, { signal: s })
55
+ ),
56
+ models: async (s) => modelsSchema.parse(await request(`/models?${scope}`, { signal: s })),
57
+ releases: async (s) => listSchema(releaseSchema).parse(
58
+ await request(`/releases?${scope}`, { signal: s })
59
+ ),
60
+ operations: async (o) => listSchema(operationSchema).parse(
61
+ await request(
62
+ `/operations?${scope}&limit=${o?.limit ?? 50}${o?.cursor ? `&cursor=${encodeURIComponent(o.cursor)}` : ""}`,
63
+ { signal: o?.signal }
64
+ )
65
+ ),
66
+ operation: async (id, s) => operationSchema.parse(
67
+ await request(`/operations/${encodeURIComponent(id)}?${scope}`, {
68
+ signal: s
69
+ })
70
+ ),
71
+ preview: async (id, o) => importPreviewSchema.parse(
72
+ await request(
73
+ `/imports/${encodeURIComponent(id)}/preview?${scope}&mode=${o?.mode ?? "merge"}&overwriteIds=${encodeURIComponent(JSON.stringify(o?.overwriteIds ?? []))}`,
74
+ { signal: o?.signal }
75
+ )
76
+ ),
77
+ command: async (c, s) => acceptSchema.parse(
78
+ await request("/commands", {
79
+ method: "POST",
80
+ body: JSON.stringify(commandSchema.parse(c)),
81
+ signal: s
82
+ })
83
+ ),
84
+ upload: async (files, s) => {
85
+ const data = new FormData();
86
+ data.set("instanceId", options.instanceId);
87
+ for (const file of files)
88
+ data.append("files", file, file.webkitRelativePath || file.name);
89
+ return uploadResultSchema.parse(
90
+ await request("/uploads", { method: "POST", body: data, signal: s })
91
+ );
92
+ }
93
+ };
94
+ }
95
+ export {
96
+ CpaClientError,
97
+ createCpaAdminClient
98
+ };
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/index.ts"],"sourcesContent":["import {\n acceptSchema,\n commandSchema,\n errorSchema,\n operationSchema,\n statusSchema,\n credentialSchema,\n modelsSchema,\n releaseSchema,\n importPreviewSchema,\n uploadResultSchema,\n listSchema,\n type AcceptResult,\n type Command,\n type CredentialDto,\n type ImportPreviewDto,\n type ListDto,\n type ModelsDto,\n type OperationDto,\n type ReleaseDto,\n type StatusDto,\n type UploadResult,\n} from \"../contracts/index.js\";\nexport interface CpaAdminClient {\n status(signal?: AbortSignal): Promise<StatusDto>;\n credentials(signal?: AbortSignal): Promise<ListDto<CredentialDto>>;\n models(signal?: AbortSignal): Promise<ModelsDto>;\n releases(signal?: AbortSignal): Promise<ListDto<ReleaseDto>>;\n operations(options?: {\n cursor?: string;\n limit?: number;\n signal?: AbortSignal;\n }): Promise<ListDto<OperationDto>>;\n operation(id: string, signal?: AbortSignal): Promise<OperationDto>;\n preview(\n candidateId: string,\n options?: {\n mode?: \"merge\" | \"replace\";\n overwriteIds?: string[];\n signal?: AbortSignal;\n },\n ): Promise<ImportPreviewDto>;\n command(command: Command, signal?: AbortSignal): Promise<AcceptResult>;\n upload(files: File[], signal?: AbortSignal): Promise<UploadResult>;\n}\nexport class CpaClientError extends Error {\n constructor(\n public readonly detail: import(\"../contracts/index.js\").ErrorDto,\n public readonly status: number,\n ) {\n super(detail.message);\n }\n}\nexport function createCpaAdminClient(options: {\n baseUrl: string;\n instanceId: string;\n fetch?: typeof fetch;\n headers?: () => HeadersInit;\n}): CpaAdminClient {\n const base = options.baseUrl.replace(/\\/$/, \"\");\n const request = async <T>(\n path: string,\n init: RequestInit = {},\n ): Promise<T> => {\n const headers = new Headers(options.headers?.());\n if (init.body && typeof init.body === \"string\")\n headers.set(\"Content-Type\", \"application/json\");\n const response = await (options.fetch ?? fetch)(`${base}${path}`, {\n credentials: \"same-origin\",\n ...init,\n headers,\n });\n const value = await response.json();\n if (!response.ok) {\n const parsed = errorSchema.safeParse(value);\n throw new CpaClientError(\n parsed.success\n ? parsed.data\n : {\n code: \"INTERNAL\",\n message: \"Administration request failed\",\n retryable: response.status >= 500,\n retryAt: null,\n operationId: null,\n },\n response.status,\n );\n }\n return value as T;\n };\n const scope = `instanceId=${encodeURIComponent(options.instanceId)}`;\n return {\n status: async (s) =>\n statusSchema.parse(await request(`/status?${scope}`, { signal: s })),\n credentials: async (s) =>\n listSchema(credentialSchema).parse(\n await request(`/credentials?${scope}`, { signal: s }),\n ),\n models: async (s) =>\n modelsSchema.parse(await request(`/models?${scope}`, { signal: s })),\n releases: async (s) =>\n listSchema(releaseSchema).parse(\n await request(`/releases?${scope}`, { signal: s }),\n ),\n operations: async (o) =>\n listSchema(operationSchema).parse(\n await request(\n `/operations?${scope}&limit=${o?.limit ?? 50}${o?.cursor ? `&cursor=${encodeURIComponent(o.cursor)}` : \"\"}`,\n { signal: o?.signal },\n ),\n ),\n operation: async (id, s) =>\n operationSchema.parse(\n await request(`/operations/${encodeURIComponent(id)}?${scope}`, {\n signal: s,\n }),\n ),\n preview: async (id, o) =>\n importPreviewSchema.parse(\n await request(\n `/imports/${encodeURIComponent(id)}/preview?${scope}&mode=${o?.mode ?? \"merge\"}&overwriteIds=${encodeURIComponent(JSON.stringify(o?.overwriteIds ?? []))}`,\n { signal: o?.signal },\n ),\n ),\n command: async (c, s) =>\n acceptSchema.parse(\n await request(\"/commands\", {\n method: \"POST\",\n body: JSON.stringify(commandSchema.parse(c)),\n signal: s,\n }),\n ),\n upload: async (files, s) => {\n const data = new FormData();\n data.set(\"instanceId\", options.instanceId);\n for (const file of files)\n data.append(\"files\", file, file.webkitRelativePath || file.name);\n return uploadResultSchema.parse(\n await request(\"/uploads\", { method: \"POST\", body: data, signal: s }),\n );\n },\n };\n}\n"],"mappings":"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","names":[]}