@maudecode/kanvil 0.3.0 → 0.4.0
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/apps/server/dist/{auth-JcS53IcO.mjs → auth-Cuo7ECLh.mjs} +119 -4773
- package/apps/server/dist/client.mjs +884 -0
- package/apps/server/dist/{config-D3cAABi7.mjs → config-DtNfVSnB.mjs} +2 -132
- package/apps/server/dist/index.mjs +6 -4
- package/apps/server/dist/instance-CCeXRJ6m.mjs +133 -0
- package/apps/server/dist/migrate.mjs +1 -1
- package/apps/server/dist/recover.mjs +3 -2
- package/apps/server/dist/src-tQ82UI8k.mjs +4818 -0
- package/apps/server/drizzle/0038_time_entries.sql +19 -0
- package/apps/server/drizzle/meta/0038_snapshot.json +6998 -0
- package/apps/server/drizzle/meta/_journal.json +7 -0
- package/apps/web/dist/assets/{CompositeItem-BbuEp99X.js → CompositeItem-DgnfVvrF.js} +1 -1
- package/apps/web/dist/assets/{Trans-DJGH63s1.js → Trans-f2VYVS9z.js} +1 -1
- package/apps/web/dist/assets/admin-settings-DBZL4siY.js +1 -0
- package/apps/web/dist/assets/{archive-restore-B6_SsOIP.js → archive-restore-CGuLxoHC.js} +1 -1
- package/apps/web/dist/assets/az-AZ-DesqXNg5.js +1 -0
- package/apps/web/dist/assets/{az-DqY__MpS.js → az-BE5iqNIE.js} +1 -1
- package/apps/web/dist/assets/{corner-left-up-DA7MG5uX.js → corner-left-up-BCro--Gl.js} +1 -1
- package/apps/web/dist/assets/de-DE-BIGY9SNm.js +1 -0
- package/apps/web/dist/assets/{de-UHreLwyV.js → de-DLGjUGf_.js} +1 -1
- package/apps/web/dist/assets/{default-D5TdIZQS.js → default-BgvtI7HK.js} +1 -1
- package/apps/web/dist/assets/delivery-settings-CZOtb4X8.js +1 -0
- package/apps/web/dist/assets/{el-EJnrsyVr.js → el-CG6Xy42v.js} +1 -1
- package/apps/web/dist/assets/el-GR-D2TjImt0.js +1 -0
- package/apps/web/dist/assets/{ellipsis-D6154JKs.js → ellipsis-ZJM26JNS.js} +1 -1
- package/apps/web/dist/assets/{es-D2ScuV-5.js → es-Bbj5WuMM.js} +1 -1
- package/apps/web/dist/assets/es-ES-C_fRqLGU.js +1 -0
- package/apps/web/dist/assets/{forms-BcD6Wwyv.js → forms-C3pNy-qY.js} +1 -1
- package/apps/web/dist/assets/{fr-C_VpS8u6.js → fr-CjuIKc1o.js} +1 -1
- package/apps/web/dist/assets/fr-FR-_tnQsn4j.js +1 -0
- package/apps/web/dist/assets/{hi-CW4rdp_m.js → hi-BVVrZ-zZ.js} +1 -1
- package/apps/web/dist/assets/hi-IN-CcmFsZYy.js +1 -0
- package/apps/web/dist/assets/{highlight-CMydIf9M.js → highlight-CKyEM4jx.js} +1 -1
- package/apps/web/dist/assets/{id-CvL3yBVr.js → id-BhNWOQnp.js} +1 -1
- package/apps/web/dist/assets/id-ID-C59tC61D.js +1 -0
- package/apps/web/dist/assets/index-BIuqxnJn.js +17 -0
- package/apps/web/dist/assets/{invitations-BmpelTJu.js → invitations-D5unaga2.js} +1 -1
- package/apps/web/dist/assets/{it-DOLotXOj.js → it-Cav3_-xd.js} +1 -1
- package/apps/web/dist/assets/it-IT-BAP5O3gK.js +1 -0
- package/apps/web/dist/assets/{item-Cq_ZbivE.js → item-Cj8xpMLk.js} +1 -1
- package/apps/web/dist/assets/{ja-B1iJt9qB.js → ja-DTmZE0Qe.js} +1 -1
- package/apps/web/dist/assets/ja-JP-vQa7mEdh.js +1 -0
- package/apps/web/dist/assets/{ko-fmUq1-8W.js → ko-BuYCMOUj.js} +1 -1
- package/apps/web/dist/assets/ko-KR-CXlpmX0-.js +1 -0
- package/apps/web/dist/assets/{label-settings-B3LsJxhk.js → label-settings-B89Ehf78.js} +1 -1
- package/apps/web/dist/assets/{markdown-blocks-Bw26pRKB.js → markdown-blocks-DSEA68s5.js} +1 -1
- package/apps/web/dist/assets/{member-directory-CHKUw0u4.js → member-directory-48yD01yN.js} +1 -1
- package/apps/web/dist/assets/{mk-LWVrR-T-.js → mk-BZ2Rg2sU.js} +1 -1
- package/apps/web/dist/assets/mk-MK-BU5BLpXM.js +1 -0
- package/apps/web/dist/assets/{nl-ro6hbqo5.js → nl-BtnPzRih.js} +1 -1
- package/apps/web/dist/assets/nl-NL-2aSpdZkg.js +1 -0
- package/apps/web/dist/assets/{pl-Bx_fYLKY.js → pl-Beg8hEdK.js} +1 -1
- package/apps/web/dist/assets/pl-PL-C5Wvnv7f.js +1 -0
- package/apps/web/dist/assets/project-lifecycle-CIAMJ-SX.js +1 -0
- package/apps/web/dist/assets/project-settings-C7lolDSl.js +1 -0
- package/apps/web/dist/assets/{pt-BR-D-a7F5zJ.js → pt-BR-B4VZ35N_.js} +1 -1
- package/apps/web/dist/assets/pt-BR-CVvI-ZB7.js +1 -0
- package/apps/web/dist/assets/public-project-DvvfaUd2.js +1 -0
- package/apps/web/dist/assets/{rotate-ccw-Bm0ESNH_.js → rotate-ccw-GjVJPDML.js} +1 -1
- package/apps/web/dist/assets/{ru-D-WIMI5_.js → ru-DjVJVHzv.js} +1 -1
- package/apps/web/dist/assets/ru-RU-C7UUdGIh.js +1 -0
- package/apps/web/dist/assets/search-ZaQmVnj1.js +85 -0
- package/apps/web/dist/assets/{send-D9TETK3s.js → send-Dr9bXHhf.js} +1 -1
- package/apps/web/dist/assets/settings-DXvrVvyS.js +1 -0
- package/apps/web/dist/assets/{sliders-horizontal-CiZZFL1o.js → sliders-horizontal-C1t_zA7D.js} +1 -1
- package/apps/web/dist/assets/{switch-B_u8n1o6.js → switch-D-WTDajm.js} +1 -1
- package/apps/web/dist/assets/{table-DcCLC7fi.js → table-BaRMFP84.js} +1 -1
- package/apps/web/dist/assets/ticket-detail-CFJI4qoK.js +2 -0
- package/apps/web/dist/assets/ticket-editor-DL3nHG_q.js +2 -0
- package/apps/web/dist/assets/ticket-list-CDkweYGS.js +5 -0
- package/apps/web/dist/assets/ticket-list-controls-CmTgFQQ-.js +1 -0
- package/apps/web/dist/assets/{tr-BZEJyY-F.js → tr-Ckc4TA71.js} +1 -1
- package/apps/web/dist/assets/tr-TR-VVsL3uMp.js +1 -0
- package/apps/web/dist/assets/{uk-f8X5q5C_.js → uk-B4ZvJ8xG.js} +1 -1
- package/apps/web/dist/assets/uk-UA-DRpCbOps.js +1 -0
- package/apps/web/dist/assets/{upload-CGpna3R2.js → upload-BwGa8shS.js} +1 -1
- package/apps/web/dist/assets/{useQueries-BihXYrAP.js → useQueries-sQEHjB0a.js} +1 -1
- package/apps/web/dist/assets/{vi-CSGaJFlR.js → vi-Dq2krfY8.js} +1 -1
- package/apps/web/dist/assets/vi-VN-C0YFqq9j.js +1 -0
- package/apps/web/dist/assets/{visual-editor-B6HiiLMg.js → visual-editor-CBhwqTDu.js} +1 -1
- package/apps/web/dist/assets/workspace-settings-DgLyieJN.js +1 -0
- package/apps/web/dist/assets/{zh-CN-BdRcimyZ.js → zh-CN-B7Rxc3Mp.js} +1 -1
- package/apps/web/dist/assets/zh-CN-pcgTdR8c.js +1 -0
- package/apps/web/dist/assets/zh-TW-DymSXkFg.js +1 -0
- package/apps/web/dist/assets/{zh-TW-BH1L9tOt.js → zh-TW-awiwHjeM.js} +1 -1
- package/apps/web/dist/index.html +7 -7
- package/bin/kanvil.mjs +3 -1
- package/docs/api.md +27 -1
- package/docs/cli.md +74 -0
- package/docs/plan.md +6 -1
- package/docs/workspaces.md +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/admin-settings-CJG9PMKR.js +0 -1
- package/apps/web/dist/assets/az-AZ-BtrlbgjS.js +0 -1
- package/apps/web/dist/assets/de-DE-Bu_Ko2QA.js +0 -1
- package/apps/web/dist/assets/delivery-settings-BE5MW8U0.js +0 -1
- package/apps/web/dist/assets/el-GR-CpKEps47.js +0 -1
- package/apps/web/dist/assets/es-ES-DVkfi7H-.js +0 -1
- package/apps/web/dist/assets/fr-FR-DkHaEHqi.js +0 -1
- package/apps/web/dist/assets/hi-IN-CbUDNSTK.js +0 -1
- package/apps/web/dist/assets/id-ID-DLTkxt2j.js +0 -1
- package/apps/web/dist/assets/index-DoqlyejP.js +0 -17
- package/apps/web/dist/assets/it-IT-CIzq0YwC.js +0 -1
- package/apps/web/dist/assets/ja-JP-CIE4-D-v.js +0 -1
- package/apps/web/dist/assets/ko-KR-DYP5Zae6.js +0 -1
- package/apps/web/dist/assets/mk-MK-CpOo5Bd8.js +0 -1
- package/apps/web/dist/assets/nl-NL-Mu8G8RON.js +0 -1
- package/apps/web/dist/assets/pl-PL-DGuxe2Aq.js +0 -1
- package/apps/web/dist/assets/project-lifecycle-Ba7iRF3u.js +0 -1
- package/apps/web/dist/assets/project-settings-CtOWgEam.js +0 -1
- package/apps/web/dist/assets/pt-BR-DwkMPgq1.js +0 -1
- package/apps/web/dist/assets/public-project-CHRjhFIn.js +0 -1
- package/apps/web/dist/assets/ru-RU-DrXnqZbV.js +0 -1
- package/apps/web/dist/assets/search-D94SZwrC.js +0 -85
- package/apps/web/dist/assets/settings-Dd9EVxua.js +0 -1
- package/apps/web/dist/assets/ticket-detail-C9egaVSf.js +0 -2
- package/apps/web/dist/assets/ticket-editor-UlSZgpWF.js +0 -2
- package/apps/web/dist/assets/ticket-list-controls-BidzkMOD.js +0 -1
- package/apps/web/dist/assets/ticket-list-vNBO8mkk.js +0 -5
- package/apps/web/dist/assets/tr-TR-B92YeFW5.js +0 -1
- package/apps/web/dist/assets/uk-UA-DmcDs-MU.js +0 -1
- package/apps/web/dist/assets/vi-VN-DM5JYNuP.js +0 -1
- package/apps/web/dist/assets/workspace-settings-CSvVqaL6.js +0 -1
- package/apps/web/dist/assets/zh-CN-CiUOkQXe.js +0 -1
- package/apps/web/dist/assets/zh-TW-Co4UBSfi.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { l as searchSettingsSchema, r as brokerSettingsSchema, s as s3SettingsSchema } from "./instance-CCeXRJ6m.mjs";
|
|
1
2
|
import pg from "pg";
|
|
2
3
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
3
4
|
import { relations } from "drizzle-orm";
|
|
@@ -355,137 +356,6 @@ function createDatabase(url) {
|
|
|
355
356
|
};
|
|
356
357
|
}
|
|
357
358
|
//#endregion
|
|
358
|
-
//#region ../../packages/contracts/src/instance.ts
|
|
359
|
-
const endpoint = z.url({ protocol: /^https?$/ }).refine((value) => !/^https?:\/\/[^/]*@/.test(value) && !/[?#]/.test(value), "Use an HTTP(S) endpoint without embedded credentials");
|
|
360
|
-
const s3SettingsSchema = z.object({
|
|
361
|
-
endpoint: z.union([endpoint, z.literal("")]).default(""),
|
|
362
|
-
region: z.string().min(1).max(100).default("us-east-1"),
|
|
363
|
-
bucket: z.string().min(3).max(255),
|
|
364
|
-
prefix: z.string().max(200).regex(/^[a-zA-Z0-9/_-]*$/).default("kanvil/"),
|
|
365
|
-
forcePathStyle: z.boolean().default(true),
|
|
366
|
-
accessKeyId: z.string().max(500).default(""),
|
|
367
|
-
secretAccessKey: z.string().max(2e3).optional()
|
|
368
|
-
}).strict();
|
|
369
|
-
const searchAuthenticationSchema = z.enum([
|
|
370
|
-
"none",
|
|
371
|
-
"apiKey",
|
|
372
|
-
"basic"
|
|
373
|
-
]);
|
|
374
|
-
const searchSettingsSchema = z.object({
|
|
375
|
-
url: endpoint,
|
|
376
|
-
auth: searchAuthenticationSchema.optional(),
|
|
377
|
-
index: z.string().regex(/^[a-z0-9][a-z0-9_-]{0,100}$/),
|
|
378
|
-
apiKey: z.string().max(4e3).optional(),
|
|
379
|
-
username: z.string().max(500).default(""),
|
|
380
|
-
password: z.string().max(2e3).optional()
|
|
381
|
-
}).strict();
|
|
382
|
-
const storageSettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("local") }).strict(), s3SettingsSchema.extend({ provider: z.literal("s3") })]);
|
|
383
|
-
const externalSearchSettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("postgres") }).strict(), searchSettingsSchema.extend({ provider: z.literal("elasticsearch") })]);
|
|
384
|
-
const brokerSettingsSchema = z.object({
|
|
385
|
-
url: z.url({ protocol: /^amqps?$/ }).max(4e3).optional(),
|
|
386
|
-
exchange: z.string().min(1).max(200).regex(/^[a-zA-Z0-9_.-]+$/).refine((value) => !value.startsWith("amq."), "Use an application exchange").default("kanvil.events")
|
|
387
|
-
}).strict();
|
|
388
|
-
const eventDeliverySettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("postgres") }).strict(), brokerSettingsSchema.extend({ provider: z.literal("rabbitmq") })]);
|
|
389
|
-
const authenticationPolicySchema = z.object({
|
|
390
|
-
emailPasswordEnabled: z.boolean().default(true),
|
|
391
|
-
ssoAutoProvision: z.boolean().default(false)
|
|
392
|
-
}).strict();
|
|
393
|
-
const instanceUpdateSchema = z.object({
|
|
394
|
-
expectedVersion: z.number().int().positive(),
|
|
395
|
-
name: z.string().trim().min(1).max(100),
|
|
396
|
-
description: z.string().max(500),
|
|
397
|
-
storage: storageSettingsSchema,
|
|
398
|
-
search: externalSearchSettingsSchema,
|
|
399
|
-
broker: eventDeliverySettingsSchema.optional(),
|
|
400
|
-
authentication: authenticationPolicySchema.optional()
|
|
401
|
-
}).strict();
|
|
402
|
-
z.object({
|
|
403
|
-
name: z.string(),
|
|
404
|
-
description: z.string()
|
|
405
|
-
});
|
|
406
|
-
const adminInstanceSchema = z.object({
|
|
407
|
-
id: z.uuid(),
|
|
408
|
-
version: z.number().int(),
|
|
409
|
-
name: z.string(),
|
|
410
|
-
description: z.string(),
|
|
411
|
-
authentication: authenticationPolicySchema.default(() => authenticationPolicySchema.parse({})),
|
|
412
|
-
storage: z.object({
|
|
413
|
-
provider: z.enum(["local", "s3"]),
|
|
414
|
-
source: z.enum(["deployment", "admin"]),
|
|
415
|
-
settings: s3SettingsSchema.omit({ secretAccessKey: true }).nullable(),
|
|
416
|
-
secretConfigured: z.boolean(),
|
|
417
|
-
pending: z.number().int(),
|
|
418
|
-
status: z.enum([
|
|
419
|
-
"ready",
|
|
420
|
-
"transferring",
|
|
421
|
-
"unavailable"
|
|
422
|
-
]),
|
|
423
|
-
error: z.string().nullable()
|
|
424
|
-
}),
|
|
425
|
-
search: z.object({
|
|
426
|
-
provider: z.enum(["postgres", "elasticsearch"]),
|
|
427
|
-
source: z.enum(["deployment", "admin"]),
|
|
428
|
-
settings: searchSettingsSchema.omit({
|
|
429
|
-
apiKey: true,
|
|
430
|
-
password: true
|
|
431
|
-
}).nullable(),
|
|
432
|
-
secretConfigured: z.boolean(),
|
|
433
|
-
status: z.enum([
|
|
434
|
-
"builtin",
|
|
435
|
-
"indexing",
|
|
436
|
-
"ready",
|
|
437
|
-
"unavailable"
|
|
438
|
-
]),
|
|
439
|
-
cursor: z.string(),
|
|
440
|
-
error: z.string().nullable()
|
|
441
|
-
}),
|
|
442
|
-
broker: z.object({
|
|
443
|
-
provider: z.enum(["postgres", "rabbitmq"]),
|
|
444
|
-
source: z.enum(["deployment", "admin"]),
|
|
445
|
-
settings: z.object({
|
|
446
|
-
endpoint: z.string(),
|
|
447
|
-
exchange: z.string()
|
|
448
|
-
}).nullable(),
|
|
449
|
-
secretConfigured: z.boolean(),
|
|
450
|
-
status: z.enum([
|
|
451
|
-
"builtin",
|
|
452
|
-
"connecting",
|
|
453
|
-
"ready",
|
|
454
|
-
"unavailable"
|
|
455
|
-
]),
|
|
456
|
-
error: z.string().nullable()
|
|
457
|
-
}),
|
|
458
|
-
deployment: z.object({
|
|
459
|
-
url: z.string(),
|
|
460
|
-
oidc: z.object({
|
|
461
|
-
name: z.string(),
|
|
462
|
-
discoveryUrl: z.string(),
|
|
463
|
-
clientId: z.string()
|
|
464
|
-
}).nullable(),
|
|
465
|
-
push: z.boolean(),
|
|
466
|
-
version: z.string()
|
|
467
|
-
}),
|
|
468
|
-
locations: z.array(z.object({
|
|
469
|
-
id: z.uuid(),
|
|
470
|
-
bucket: z.string(),
|
|
471
|
-
endpoint: z.string(),
|
|
472
|
-
prefix: z.string(),
|
|
473
|
-
objects: z.number().int()
|
|
474
|
-
}))
|
|
475
|
-
});
|
|
476
|
-
const photoInputSchema = z.object({
|
|
477
|
-
data: z.string().max(7e5),
|
|
478
|
-
contentType: z.enum([
|
|
479
|
-
"image/png",
|
|
480
|
-
"image/jpeg",
|
|
481
|
-
"image/webp"
|
|
482
|
-
])
|
|
483
|
-
}).strict();
|
|
484
|
-
const photoResultSchema = z.object({ image: z.string().nullable() });
|
|
485
|
-
function searchAuthentication(settings) {
|
|
486
|
-
return settings.auth ?? (settings.apiKey ? "apiKey" : settings.username && settings.password ? "basic" : "none");
|
|
487
|
-
}
|
|
488
|
-
//#endregion
|
|
489
359
|
//#region src/config.ts
|
|
490
360
|
const optionalEnv = (schema) => z.preprocess((value) => value === "" ? void 0 : value, schema.optional());
|
|
491
361
|
const envSchema = z.object({
|
|
@@ -603,4 +473,4 @@ function readConfig(env = process.env) {
|
|
|
603
473
|
};
|
|
604
474
|
}
|
|
605
475
|
//#endregion
|
|
606
|
-
export {
|
|
476
|
+
export { auth_schema_exports as a, oauthConsent as c, user as d, apikey as i, oauthRefreshToken as l, createDatabase as n, oauthAccessToken as o, account as r, oauthClient as s, readConfig as t, session as u };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as auth_schema_exports, d as user$1, i as apikey, n as createDatabase, r as account, t as readConfig, u as session } from "./config-DtNfVSnB.mjs";
|
|
2
|
+
import { a as photoInputSchema, i as instanceUpdateSchema, l as searchSettingsSchema, o as photoResultSchema, r as brokerSettingsSchema, s as s3SettingsSchema, t as adminInstanceSchema } from "./instance-CCeXRJ6m.mjs";
|
|
2
3
|
import { t as migrateDatabase } from "./migrate-C9f4ozB4.mjs";
|
|
3
|
-
import { $ as subscriptions, A as createTicketSearch, B as blobObjects, C as DeliveryError,
|
|
4
|
+
import { $ as subscriptions, A as createTicketSearch, B as blobObjects, C as DeliveryError, D as requireInstanceAdmin, E as createWriteLimiter, F as stagedUploadCutoff, G as members, H as eventClock, I as createObjectStore, J as profilePhotos, K as notificationPreferences, L as createPollingJob, M as createBlobStorage, N as decodeImage, O as requireSession, P as imageResponse, Q as storageBackends, R as attachmentContent, S as deliverBatch, T as createAccess, U as events, V as deliveryCheckpoints, X as pushDevices, Y as projects, Z as stagedUploads, _ as recipientColumns, a as deliverySecrets, b as receiveRepositoryWebhook, c as ownerBlocker, d as createDomain, et as tickets, f as fail, g as reachable, h as one, i as createInstance, j as createTicketIndex, k as readCalendarFeed, l as appendEvents, m as notify, n as emailCodesAvailable, nt as workspaces, o as otherActiveAdministrator, p as json, q as notifications, r as signInProviders, rt as matchesOIDCBinding, s as ownedWorkspaces, t as createAuth, tt as workspaceMembers, u as assertVersion, v as requireRow, w as createHttpSender, x as defaultSenders, y as processImports, z as attachments } from "./auth-Cuo7ECLh.mjs";
|
|
5
|
+
import { A as importProviderDefinitions, B as notificationIdsInput, F as isPresetColor, G as okSchema, H as notificationPreferencesSchema, I as isPublicOperation, O as hasAdminRole, P as isOperation, R as memberSchema, St as ticketExportFormat, U as notificationReadInput, V as notificationPreferencesInput, ft as roles, it as pushDeviceInput, k as importLimits, m as defaultWorkflow, o as closedStates, pt as scopes, q as operations, rt as publicOperations, s as credentialInput, t as ApiError, x as errorSchema, yt as stateLabels } from "./src-tQ82UI8k.mjs";
|
|
4
6
|
import { serve } from "@hono/node-server";
|
|
5
7
|
import pg from "pg";
|
|
6
8
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
@@ -324,7 +326,7 @@ function createAccountAdministration(database, auth, config) {
|
|
|
324
326
|
}
|
|
325
327
|
//#endregion
|
|
326
328
|
//#region src/version.ts
|
|
327
|
-
const applicationVersion = "0.
|
|
329
|
+
const applicationVersion = "0.4.0";
|
|
328
330
|
//#endregion
|
|
329
331
|
//#region src/realtime.ts
|
|
330
332
|
async function createRealtime(config) {
|
|
@@ -3447,7 +3449,7 @@ async function createApplication(database, config, overrides = {}) {
|
|
|
3447
3449
|
const identity = c.get("actor");
|
|
3448
3450
|
if (identity.machine) fail(403, "forbidden", "Use a signed-in account to manage credentials");
|
|
3449
3451
|
const input = credentialInput.parse(await c.req.json()), allowed = await domain.accessibleProjects(identity);
|
|
3450
|
-
if (input.projectIds
|
|
3452
|
+
if (input.projectIds?.some((id) => !allowed.some((row) => row.id === id))) fail(403, "forbidden", "Choose projects you can access");
|
|
3451
3453
|
const key = await auth.api.createApiKey({ body: {
|
|
3452
3454
|
userId: identity.id,
|
|
3453
3455
|
name: input.name,
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region ../../packages/contracts/src/instance.ts
|
|
3
|
+
const endpoint = z.url({ protocol: /^https?$/ }).refine((value) => !/^https?:\/\/[^/]*@/.test(value) && !/[?#]/.test(value), "Use an HTTP(S) endpoint without embedded credentials");
|
|
4
|
+
const s3SettingsSchema = z.object({
|
|
5
|
+
endpoint: z.union([endpoint, z.literal("")]).default(""),
|
|
6
|
+
region: z.string().min(1).max(100).default("us-east-1"),
|
|
7
|
+
bucket: z.string().min(3).max(255),
|
|
8
|
+
prefix: z.string().max(200).regex(/^[a-zA-Z0-9/_-]*$/).default("kanvil/"),
|
|
9
|
+
forcePathStyle: z.boolean().default(true),
|
|
10
|
+
accessKeyId: z.string().max(500).default(""),
|
|
11
|
+
secretAccessKey: z.string().max(2e3).optional()
|
|
12
|
+
}).strict();
|
|
13
|
+
const searchAuthenticationSchema = z.enum([
|
|
14
|
+
"none",
|
|
15
|
+
"apiKey",
|
|
16
|
+
"basic"
|
|
17
|
+
]);
|
|
18
|
+
const searchSettingsSchema = z.object({
|
|
19
|
+
url: endpoint,
|
|
20
|
+
auth: searchAuthenticationSchema.optional(),
|
|
21
|
+
index: z.string().regex(/^[a-z0-9][a-z0-9_-]{0,100}$/),
|
|
22
|
+
apiKey: z.string().max(4e3).optional(),
|
|
23
|
+
username: z.string().max(500).default(""),
|
|
24
|
+
password: z.string().max(2e3).optional()
|
|
25
|
+
}).strict();
|
|
26
|
+
const storageSettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("local") }).strict(), s3SettingsSchema.extend({ provider: z.literal("s3") })]);
|
|
27
|
+
const externalSearchSettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("postgres") }).strict(), searchSettingsSchema.extend({ provider: z.literal("elasticsearch") })]);
|
|
28
|
+
const brokerSettingsSchema = z.object({
|
|
29
|
+
url: z.url({ protocol: /^amqps?$/ }).max(4e3).optional(),
|
|
30
|
+
exchange: z.string().min(1).max(200).regex(/^[a-zA-Z0-9_.-]+$/).refine((value) => !value.startsWith("amq."), "Use an application exchange").default("kanvil.events")
|
|
31
|
+
}).strict();
|
|
32
|
+
const eventDeliverySettingsSchema = z.discriminatedUnion("provider", [z.object({ provider: z.literal("postgres") }).strict(), brokerSettingsSchema.extend({ provider: z.literal("rabbitmq") })]);
|
|
33
|
+
const authenticationPolicySchema = z.object({
|
|
34
|
+
emailPasswordEnabled: z.boolean().default(true),
|
|
35
|
+
ssoAutoProvision: z.boolean().default(false)
|
|
36
|
+
}).strict();
|
|
37
|
+
const instanceUpdateSchema = z.object({
|
|
38
|
+
expectedVersion: z.number().int().positive(),
|
|
39
|
+
name: z.string().trim().min(1).max(100),
|
|
40
|
+
description: z.string().max(500),
|
|
41
|
+
storage: storageSettingsSchema,
|
|
42
|
+
search: externalSearchSettingsSchema,
|
|
43
|
+
broker: eventDeliverySettingsSchema.optional(),
|
|
44
|
+
authentication: authenticationPolicySchema.optional()
|
|
45
|
+
}).strict();
|
|
46
|
+
z.object({
|
|
47
|
+
name: z.string(),
|
|
48
|
+
description: z.string()
|
|
49
|
+
});
|
|
50
|
+
const adminInstanceSchema = z.object({
|
|
51
|
+
id: z.uuid(),
|
|
52
|
+
version: z.number().int(),
|
|
53
|
+
name: z.string(),
|
|
54
|
+
description: z.string(),
|
|
55
|
+
authentication: authenticationPolicySchema.default(() => authenticationPolicySchema.parse({})),
|
|
56
|
+
storage: z.object({
|
|
57
|
+
provider: z.enum(["local", "s3"]),
|
|
58
|
+
source: z.enum(["deployment", "admin"]),
|
|
59
|
+
settings: s3SettingsSchema.omit({ secretAccessKey: true }).nullable(),
|
|
60
|
+
secretConfigured: z.boolean(),
|
|
61
|
+
pending: z.number().int(),
|
|
62
|
+
status: z.enum([
|
|
63
|
+
"ready",
|
|
64
|
+
"transferring",
|
|
65
|
+
"unavailable"
|
|
66
|
+
]),
|
|
67
|
+
error: z.string().nullable()
|
|
68
|
+
}),
|
|
69
|
+
search: z.object({
|
|
70
|
+
provider: z.enum(["postgres", "elasticsearch"]),
|
|
71
|
+
source: z.enum(["deployment", "admin"]),
|
|
72
|
+
settings: searchSettingsSchema.omit({
|
|
73
|
+
apiKey: true,
|
|
74
|
+
password: true
|
|
75
|
+
}).nullable(),
|
|
76
|
+
secretConfigured: z.boolean(),
|
|
77
|
+
status: z.enum([
|
|
78
|
+
"builtin",
|
|
79
|
+
"indexing",
|
|
80
|
+
"ready",
|
|
81
|
+
"unavailable"
|
|
82
|
+
]),
|
|
83
|
+
cursor: z.string(),
|
|
84
|
+
error: z.string().nullable()
|
|
85
|
+
}),
|
|
86
|
+
broker: z.object({
|
|
87
|
+
provider: z.enum(["postgres", "rabbitmq"]),
|
|
88
|
+
source: z.enum(["deployment", "admin"]),
|
|
89
|
+
settings: z.object({
|
|
90
|
+
endpoint: z.string(),
|
|
91
|
+
exchange: z.string()
|
|
92
|
+
}).nullable(),
|
|
93
|
+
secretConfigured: z.boolean(),
|
|
94
|
+
status: z.enum([
|
|
95
|
+
"builtin",
|
|
96
|
+
"connecting",
|
|
97
|
+
"ready",
|
|
98
|
+
"unavailable"
|
|
99
|
+
]),
|
|
100
|
+
error: z.string().nullable()
|
|
101
|
+
}),
|
|
102
|
+
deployment: z.object({
|
|
103
|
+
url: z.string(),
|
|
104
|
+
oidc: z.object({
|
|
105
|
+
name: z.string(),
|
|
106
|
+
discoveryUrl: z.string(),
|
|
107
|
+
clientId: z.string()
|
|
108
|
+
}).nullable(),
|
|
109
|
+
push: z.boolean(),
|
|
110
|
+
version: z.string()
|
|
111
|
+
}),
|
|
112
|
+
locations: z.array(z.object({
|
|
113
|
+
id: z.uuid(),
|
|
114
|
+
bucket: z.string(),
|
|
115
|
+
endpoint: z.string(),
|
|
116
|
+
prefix: z.string(),
|
|
117
|
+
objects: z.number().int()
|
|
118
|
+
}))
|
|
119
|
+
});
|
|
120
|
+
const photoInputSchema = z.object({
|
|
121
|
+
data: z.string().max(7e5),
|
|
122
|
+
contentType: z.enum([
|
|
123
|
+
"image/png",
|
|
124
|
+
"image/jpeg",
|
|
125
|
+
"image/webp"
|
|
126
|
+
])
|
|
127
|
+
}).strict();
|
|
128
|
+
const photoResultSchema = z.object({ image: z.string().nullable() });
|
|
129
|
+
function searchAuthentication(settings) {
|
|
130
|
+
return settings.auth ?? (settings.apiKey ? "apiKey" : settings.username && settings.password ? "basic" : "none");
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
export { photoInputSchema as a, searchAuthentication as c, instanceUpdateSchema as i, searchSettingsSchema as l, authenticationPolicySchema as n, photoResultSchema as o, brokerSettingsSchema as r, s3SettingsSchema as s, adminInstanceSchema as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as createDatabase, t as readConfig } from "./config-DtNfVSnB.mjs";
|
|
2
2
|
import { t as migrateDatabase } from "./migrate-C9f4ozB4.mjs";
|
|
3
3
|
//#region src/cli/migrate.ts
|
|
4
4
|
const database = createDatabase(readConfig().DATABASE_URL);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { W as instanceSettings,
|
|
1
|
+
import { d as user, n as createDatabase, r as account, t as readConfig, u as session } from "./config-DtNfVSnB.mjs";
|
|
2
|
+
import { W as instanceSettings, f as fail, t as createAuth } from "./auth-Cuo7ECLh.mjs";
|
|
3
|
+
import { O as hasAdminRole } from "./src-tQ82UI8k.mjs";
|
|
3
4
|
import { and, eq, isNull, sql } from "drizzle-orm";
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
import { parseArgs } from "node:util";
|