@harborclient/team-hub 0.4.0 → 0.4.1
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/cli.js +301 -247
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -6865,7 +6865,7 @@ function denyUnlessAllowed(reply, allowed) {
|
|
|
6865
6865
|
}
|
|
6866
6866
|
|
|
6867
6867
|
// src/server/routes/schemas/admin.ts
|
|
6868
|
-
import { z as
|
|
6868
|
+
import { z as z9 } from "zod/v4";
|
|
6869
6869
|
|
|
6870
6870
|
// src/server/routes/schemas/auth.ts
|
|
6871
6871
|
import { z as z6 } from "zod/v4";
|
|
@@ -6932,283 +6932,154 @@ var llmUsageSummaryResponseSchema = z7.object({
|
|
|
6932
6932
|
limit: z7.number().int().positive().nullable()
|
|
6933
6933
|
});
|
|
6934
6934
|
|
|
6935
|
-
// src/server/routes/schemas/
|
|
6936
|
-
|
|
6937
|
-
|
|
6938
|
-
name: z8.string(),
|
|
6939
|
-
deletionLocked: z8.boolean()
|
|
6940
|
-
});
|
|
6941
|
-
var adminEntityConfigSchema = z8.object({
|
|
6935
|
+
// src/server/routes/schemas/entities.ts
|
|
6936
|
+
import { z as z8 } from "zod/v4";
|
|
6937
|
+
var collectionRecordSchema = z8.object({
|
|
6942
6938
|
id: z8.string(),
|
|
6943
6939
|
name: z8.string(),
|
|
6940
|
+
variables: z8.array(variableSchema),
|
|
6941
|
+
headers: z8.array(keyValueSchema),
|
|
6942
|
+
auth: authConfigSchema,
|
|
6943
|
+
preRequestScript: z8.string(),
|
|
6944
|
+
postRequestScript: z8.string(),
|
|
6945
|
+
createdAt: timestampSchema,
|
|
6946
|
+
updatedAt: timestampSchema,
|
|
6947
|
+
createdByUserId: z8.string().nullable(),
|
|
6948
|
+
updatedByUserId: z8.string().nullable(),
|
|
6944
6949
|
deletionLocked: z8.boolean()
|
|
6945
6950
|
});
|
|
6946
|
-
var
|
|
6947
|
-
deletionLocked: z8.boolean()
|
|
6948
|
-
});
|
|
6949
|
-
var updateAdminEnvironmentBodySchema = z8.object({
|
|
6950
|
-
deletionLocked: z8.boolean()
|
|
6951
|
-
});
|
|
6952
|
-
var updateAdminSnippetBodySchema = z8.object({
|
|
6953
|
-
deletionLocked: z8.boolean()
|
|
6954
|
-
});
|
|
6955
|
-
var listAdminCollectionsResponseSchema = z8.object({
|
|
6956
|
-
collections: z8.array(adminResourceOptionSchema)
|
|
6957
|
-
});
|
|
6958
|
-
var listAdminEnvironmentsResponseSchema = z8.object({
|
|
6959
|
-
environments: z8.array(adminResourceOptionSchema)
|
|
6960
|
-
});
|
|
6961
|
-
var listAdminSnippetsResponseSchema = z8.object({
|
|
6962
|
-
snippets: z8.array(adminResourceOptionSchema)
|
|
6963
|
-
});
|
|
6964
|
-
var listAdminLlmModelsResponseSchema = listLlmModelsResponseSchema;
|
|
6965
|
-
var hubUserRecordSchema = z8.object({
|
|
6951
|
+
var environmentRecordSchema = z8.object({
|
|
6966
6952
|
id: z8.string(),
|
|
6967
6953
|
name: z8.string(),
|
|
6968
|
-
|
|
6969
|
-
collectionAccess: z8.array(z8.string()),
|
|
6970
|
-
environmentAccess: z8.array(z8.string()),
|
|
6971
|
-
snippetAccess: z8.array(z8.string()),
|
|
6972
|
-
llmAccess: z8.boolean(),
|
|
6973
|
-
llmModels: z8.array(z8.string()),
|
|
6974
|
-
llmMonthlyTokenLimit: z8.number().int().nonnegative().nullable(),
|
|
6954
|
+
variables: z8.array(variableSchema),
|
|
6975
6955
|
createdAt: timestampSchema,
|
|
6976
|
-
updatedAt: timestampSchema
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
});
|
|
6981
|
-
var listAdminUsersResponseSchema = z8.object({
|
|
6982
|
-
users: z8.array(adminUserListEntrySchema)
|
|
6983
|
-
});
|
|
6984
|
-
var updateAdminUserBodySchema = z8.object({
|
|
6985
|
-
name: z8.string().trim().min(1).optional(),
|
|
6986
|
-
role: userRoleSchema.optional(),
|
|
6987
|
-
collectionAccess: z8.array(z8.string()).optional(),
|
|
6988
|
-
environmentAccess: z8.array(z8.string()).optional(),
|
|
6989
|
-
snippetAccess: z8.array(z8.string()).optional(),
|
|
6990
|
-
llmAccess: z8.boolean().optional(),
|
|
6991
|
-
llmModels: z8.array(z8.string()).optional(),
|
|
6992
|
-
llmMonthlyTokenLimit: z8.number().int().nonnegative().nullable().optional()
|
|
6993
|
-
});
|
|
6994
|
-
var createAdminUserBodySchema = z8.object({
|
|
6995
|
-
name: z8.string().trim().min(1),
|
|
6996
|
-
role: userRoleSchema,
|
|
6997
|
-
collectionAccess: z8.array(z8.string()).optional(),
|
|
6998
|
-
environmentAccess: z8.array(z8.string()).optional(),
|
|
6999
|
-
snippetAccess: z8.array(z8.string()).optional(),
|
|
7000
|
-
llmAccess: z8.boolean().optional(),
|
|
7001
|
-
llmModels: z8.array(z8.string()).optional(),
|
|
7002
|
-
llmMonthlyTokenLimit: z8.number().int().nonnegative().nullable().optional()
|
|
6956
|
+
updatedAt: timestampSchema,
|
|
6957
|
+
createdByUserId: z8.string().nullable(),
|
|
6958
|
+
updatedByUserId: z8.string().nullable(),
|
|
6959
|
+
deletionLocked: z8.boolean()
|
|
7003
6960
|
});
|
|
7004
|
-
var
|
|
6961
|
+
var snippetScopeSchema = z8.enum(["pre-request", "post-request", "any"]);
|
|
6962
|
+
var snippetRecordSchema = z8.object({
|
|
7005
6963
|
id: z8.string(),
|
|
7006
|
-
userId: z8.string(),
|
|
7007
6964
|
name: z8.string(),
|
|
7008
|
-
|
|
7009
|
-
createdAt: timestampSchema,
|
|
7010
|
-
lastUsedAt: timestampSchema.nullable(),
|
|
7011
|
-
revokedAt: timestampSchema.nullable()
|
|
7012
|
-
});
|
|
7013
|
-
var createAdminUserResponseSchema = z8.object({
|
|
7014
|
-
user: hubUserRecordSchema,
|
|
7015
|
-
token: hubApiTokenRecordSchema,
|
|
7016
|
-
secret: z8.string()
|
|
7017
|
-
});
|
|
7018
|
-
var createAdminTokenBodySchema = z8.object({
|
|
7019
|
-
name: z8.string().trim().min(1)
|
|
7020
|
-
});
|
|
7021
|
-
var createdApiTokenResponseSchema = z8.object({
|
|
7022
|
-
token: hubApiTokenRecordSchema,
|
|
7023
|
-
secret: z8.string()
|
|
7024
|
-
});
|
|
7025
|
-
var listAdminTokensResponseSchema = z8.object({
|
|
7026
|
-
tokens: z8.array(hubApiTokenRecordSchema)
|
|
7027
|
-
});
|
|
7028
|
-
var reloadConfigSectionResultSchema = z8.object({
|
|
7029
|
-
section: z8.enum(["db", "redis", "llm", "plugins", "server"]),
|
|
7030
|
-
status: z8.enum(["reloaded", "unchanged", "failed", "restart-required"]),
|
|
7031
|
-
error: z8.string().optional()
|
|
7032
|
-
});
|
|
7033
|
-
var reloadConfigResponseSchema = z8.object({
|
|
7034
|
-
sections: z8.array(reloadConfigSectionResultSchema),
|
|
7035
|
-
fatalError: z8.string().optional()
|
|
7036
|
-
});
|
|
7037
|
-
function serializeHubUser(user) {
|
|
7038
|
-
return {
|
|
7039
|
-
id: user.id,
|
|
7040
|
-
name: user.name,
|
|
7041
|
-
role: user.role,
|
|
7042
|
-
collectionAccess: user.collectionAccess,
|
|
7043
|
-
environmentAccess: user.environmentAccess,
|
|
7044
|
-
snippetAccess: user.snippetAccess,
|
|
7045
|
-
llmAccess: user.llmAccess,
|
|
7046
|
-
llmModels: user.llmModels,
|
|
7047
|
-
llmMonthlyTokenLimit: user.llmMonthlyTokenLimit,
|
|
7048
|
-
createdAt: user.createdAt.toISOString(),
|
|
7049
|
-
updatedAt: user.updatedAt.toISOString()
|
|
7050
|
-
};
|
|
7051
|
-
}
|
|
7052
|
-
function serializeApiToken(token) {
|
|
7053
|
-
return {
|
|
7054
|
-
id: token.id,
|
|
7055
|
-
userId: token.userId,
|
|
7056
|
-
name: token.name,
|
|
7057
|
-
tokenPrefix: token.tokenPrefix,
|
|
7058
|
-
createdAt: token.createdAt.toISOString(),
|
|
7059
|
-
lastUsedAt: token.lastUsedAt ? token.lastUsedAt.toISOString() : null,
|
|
7060
|
-
revokedAt: token.revokedAt ? token.revokedAt.toISOString() : null
|
|
7061
|
-
};
|
|
7062
|
-
}
|
|
7063
|
-
|
|
7064
|
-
// src/server/routes/schemas/entities.ts
|
|
7065
|
-
import { z as z9 } from "zod/v4";
|
|
7066
|
-
var collectionRecordSchema = z9.object({
|
|
7067
|
-
id: z9.string(),
|
|
7068
|
-
name: z9.string(),
|
|
7069
|
-
variables: z9.array(variableSchema),
|
|
7070
|
-
headers: z9.array(keyValueSchema),
|
|
7071
|
-
auth: authConfigSchema,
|
|
7072
|
-
preRequestScript: z9.string(),
|
|
7073
|
-
postRequestScript: z9.string(),
|
|
7074
|
-
createdAt: timestampSchema,
|
|
7075
|
-
updatedAt: timestampSchema,
|
|
7076
|
-
createdByUserId: z9.string().nullable(),
|
|
7077
|
-
updatedByUserId: z9.string().nullable(),
|
|
7078
|
-
deletionLocked: z9.boolean()
|
|
7079
|
-
});
|
|
7080
|
-
var environmentRecordSchema = z9.object({
|
|
7081
|
-
id: z9.string(),
|
|
7082
|
-
name: z9.string(),
|
|
7083
|
-
variables: z9.array(variableSchema),
|
|
7084
|
-
createdAt: timestampSchema,
|
|
7085
|
-
updatedAt: timestampSchema,
|
|
7086
|
-
createdByUserId: z9.string().nullable(),
|
|
7087
|
-
updatedByUserId: z9.string().nullable(),
|
|
7088
|
-
deletionLocked: z9.boolean()
|
|
7089
|
-
});
|
|
7090
|
-
var snippetScopeSchema = z9.enum(["pre-request", "post-request", "any"]);
|
|
7091
|
-
var snippetRecordSchema = z9.object({
|
|
7092
|
-
id: z9.string(),
|
|
7093
|
-
name: z9.string(),
|
|
7094
|
-
code: z9.string(),
|
|
6965
|
+
code: z8.string(),
|
|
7095
6966
|
scope: snippetScopeSchema,
|
|
7096
|
-
sortOrder:
|
|
6967
|
+
sortOrder: z8.number().int(),
|
|
7097
6968
|
createdAt: timestampSchema,
|
|
7098
6969
|
updatedAt: timestampSchema,
|
|
7099
|
-
createdByUserId:
|
|
7100
|
-
updatedByUserId:
|
|
7101
|
-
deletionLocked:
|
|
6970
|
+
createdByUserId: z8.string().nullable(),
|
|
6971
|
+
updatedByUserId: z8.string().nullable(),
|
|
6972
|
+
deletionLocked: z8.boolean()
|
|
7102
6973
|
});
|
|
7103
|
-
var folderRecordSchema =
|
|
7104
|
-
id:
|
|
7105
|
-
collectionId:
|
|
7106
|
-
name:
|
|
7107
|
-
sortOrder:
|
|
6974
|
+
var folderRecordSchema = z8.object({
|
|
6975
|
+
id: z8.string(),
|
|
6976
|
+
collectionId: z8.string(),
|
|
6977
|
+
name: z8.string(),
|
|
6978
|
+
sortOrder: z8.number().int(),
|
|
7108
6979
|
createdAt: timestampSchema,
|
|
7109
6980
|
updatedAt: timestampSchema,
|
|
7110
|
-
createdByUserId:
|
|
7111
|
-
updatedByUserId:
|
|
6981
|
+
createdByUserId: z8.string().nullable(),
|
|
6982
|
+
updatedByUserId: z8.string().nullable()
|
|
7112
6983
|
});
|
|
7113
|
-
var savedRequestRecordSchema =
|
|
7114
|
-
id:
|
|
7115
|
-
collectionId:
|
|
7116
|
-
name:
|
|
6984
|
+
var savedRequestRecordSchema = z8.object({
|
|
6985
|
+
id: z8.string(),
|
|
6986
|
+
collectionId: z8.string(),
|
|
6987
|
+
name: z8.string(),
|
|
7117
6988
|
method: httpMethodSchema,
|
|
7118
|
-
url:
|
|
7119
|
-
headers:
|
|
7120
|
-
params:
|
|
6989
|
+
url: z8.string(),
|
|
6990
|
+
headers: z8.array(keyValueSchema),
|
|
6991
|
+
params: z8.array(keyValueSchema),
|
|
7121
6992
|
auth: authConfigSchema,
|
|
7122
|
-
body:
|
|
6993
|
+
body: z8.string(),
|
|
7123
6994
|
bodyType: bodyTypeSchema,
|
|
7124
|
-
preRequestScript:
|
|
7125
|
-
postRequestScript:
|
|
7126
|
-
comment:
|
|
7127
|
-
folderId:
|
|
7128
|
-
sortOrder:
|
|
6995
|
+
preRequestScript: z8.string(),
|
|
6996
|
+
postRequestScript: z8.string(),
|
|
6997
|
+
comment: z8.string(),
|
|
6998
|
+
folderId: z8.string().nullable(),
|
|
6999
|
+
sortOrder: z8.number().int(),
|
|
7129
7000
|
createdAt: timestampSchema,
|
|
7130
7001
|
updatedAt: timestampSchema,
|
|
7131
|
-
createdByUserId:
|
|
7132
|
-
updatedByUserId:
|
|
7002
|
+
createdByUserId: z8.string().nullable(),
|
|
7003
|
+
updatedByUserId: z8.string().nullable()
|
|
7133
7004
|
});
|
|
7134
|
-
var createCollectionBodySchema =
|
|
7135
|
-
name:
|
|
7005
|
+
var createCollectionBodySchema = z8.object({
|
|
7006
|
+
name: z8.string().trim().min(1)
|
|
7136
7007
|
});
|
|
7137
|
-
var updateCollectionBodySchema =
|
|
7138
|
-
name:
|
|
7139
|
-
variables:
|
|
7140
|
-
headers:
|
|
7141
|
-
preRequestScript:
|
|
7142
|
-
postRequestScript:
|
|
7008
|
+
var updateCollectionBodySchema = z8.object({
|
|
7009
|
+
name: z8.string().trim().min(1),
|
|
7010
|
+
variables: z8.array(variableSchema),
|
|
7011
|
+
headers: z8.array(keyValueSchema),
|
|
7012
|
+
preRequestScript: z8.string(),
|
|
7013
|
+
postRequestScript: z8.string(),
|
|
7143
7014
|
auth: authConfigSchema
|
|
7144
7015
|
});
|
|
7145
|
-
var createEnvironmentBodySchema =
|
|
7146
|
-
name:
|
|
7016
|
+
var createEnvironmentBodySchema = z8.object({
|
|
7017
|
+
name: z8.string().trim().min(1)
|
|
7147
7018
|
});
|
|
7148
|
-
var updateEnvironmentBodySchema =
|
|
7149
|
-
name:
|
|
7150
|
-
variables:
|
|
7019
|
+
var updateEnvironmentBodySchema = z8.object({
|
|
7020
|
+
name: z8.string().trim().min(1),
|
|
7021
|
+
variables: z8.array(variableSchema)
|
|
7151
7022
|
});
|
|
7152
|
-
var createSnippetBodySchema =
|
|
7153
|
-
name:
|
|
7154
|
-
code:
|
|
7023
|
+
var createSnippetBodySchema = z8.object({
|
|
7024
|
+
name: z8.string().trim().min(1),
|
|
7025
|
+
code: z8.string().default(""),
|
|
7155
7026
|
scope: snippetScopeSchema.default("any")
|
|
7156
7027
|
});
|
|
7157
|
-
var updateSnippetBodySchema =
|
|
7158
|
-
name:
|
|
7159
|
-
code:
|
|
7028
|
+
var updateSnippetBodySchema = z8.object({
|
|
7029
|
+
name: z8.string().trim().min(1),
|
|
7030
|
+
code: z8.string(),
|
|
7160
7031
|
scope: snippetScopeSchema
|
|
7161
7032
|
});
|
|
7162
|
-
var createFolderBodySchema =
|
|
7163
|
-
name:
|
|
7033
|
+
var createFolderBodySchema = z8.object({
|
|
7034
|
+
name: z8.string().trim().min(1)
|
|
7164
7035
|
});
|
|
7165
|
-
var renameFolderBodySchema =
|
|
7166
|
-
name:
|
|
7036
|
+
var renameFolderBodySchema = z8.object({
|
|
7037
|
+
name: z8.string().trim().min(1)
|
|
7167
7038
|
});
|
|
7168
|
-
var reorderFoldersBodySchema =
|
|
7169
|
-
orderedFolderIds:
|
|
7039
|
+
var reorderFoldersBodySchema = z8.object({
|
|
7040
|
+
orderedFolderIds: z8.array(z8.string().trim().min(1))
|
|
7170
7041
|
});
|
|
7171
|
-
var saveRequestBodySchema =
|
|
7172
|
-
name:
|
|
7042
|
+
var saveRequestBodySchema = z8.object({
|
|
7043
|
+
name: z8.string().trim().min(1),
|
|
7173
7044
|
method: httpMethodSchema,
|
|
7174
|
-
url:
|
|
7175
|
-
headers:
|
|
7176
|
-
params:
|
|
7045
|
+
url: z8.string(),
|
|
7046
|
+
headers: z8.array(keyValueSchema),
|
|
7047
|
+
params: z8.array(keyValueSchema),
|
|
7177
7048
|
auth: authConfigSchema,
|
|
7178
|
-
body:
|
|
7049
|
+
body: z8.string(),
|
|
7179
7050
|
bodyType: bodyTypeSchema,
|
|
7180
|
-
preRequestScript:
|
|
7181
|
-
postRequestScript:
|
|
7182
|
-
comment:
|
|
7183
|
-
folderId:
|
|
7051
|
+
preRequestScript: z8.string(),
|
|
7052
|
+
postRequestScript: z8.string(),
|
|
7053
|
+
comment: z8.string(),
|
|
7054
|
+
folderId: z8.string().nullable().optional()
|
|
7184
7055
|
});
|
|
7185
7056
|
var updateSaveRequestBodySchema = saveRequestBodySchema.extend({
|
|
7186
|
-
collectionId:
|
|
7057
|
+
collectionId: z8.string().trim().min(1)
|
|
7187
7058
|
});
|
|
7188
|
-
var reorderRequestsBodySchema =
|
|
7189
|
-
folderId:
|
|
7190
|
-
orderedRequestIds:
|
|
7059
|
+
var reorderRequestsBodySchema = z8.object({
|
|
7060
|
+
folderId: z8.string().nullable(),
|
|
7061
|
+
orderedRequestIds: z8.array(z8.string().trim().min(1))
|
|
7191
7062
|
});
|
|
7192
|
-
var moveRequestBodySchema =
|
|
7193
|
-
folderId:
|
|
7194
|
-
index:
|
|
7063
|
+
var moveRequestBodySchema = z8.object({
|
|
7064
|
+
folderId: z8.string().nullable(),
|
|
7065
|
+
index: z8.number().int().min(0)
|
|
7195
7066
|
});
|
|
7196
|
-
var listCollectionsResponseSchema =
|
|
7197
|
-
collections:
|
|
7067
|
+
var listCollectionsResponseSchema = z8.object({
|
|
7068
|
+
collections: z8.array(collectionRecordSchema)
|
|
7198
7069
|
});
|
|
7199
|
-
var listEnvironmentsResponseSchema =
|
|
7200
|
-
environments:
|
|
7070
|
+
var listEnvironmentsResponseSchema = z8.object({
|
|
7071
|
+
environments: z8.array(environmentRecordSchema)
|
|
7201
7072
|
});
|
|
7202
|
-
var listSnippetsResponseSchema =
|
|
7203
|
-
snippets:
|
|
7073
|
+
var listSnippetsResponseSchema = z8.object({
|
|
7074
|
+
snippets: z8.array(snippetRecordSchema)
|
|
7204
7075
|
});
|
|
7205
|
-
var listFoldersResponseSchema =
|
|
7206
|
-
folders:
|
|
7076
|
+
var listFoldersResponseSchema = z8.object({
|
|
7077
|
+
folders: z8.array(folderRecordSchema)
|
|
7207
7078
|
});
|
|
7208
|
-
var listRequestsResponseSchema =
|
|
7209
|
-
requests:
|
|
7079
|
+
var listRequestsResponseSchema = z8.object({
|
|
7080
|
+
requests: z8.array(savedRequestRecordSchema)
|
|
7210
7081
|
});
|
|
7211
|
-
var emptyResponseSchema =
|
|
7082
|
+
var emptyResponseSchema = z8.null();
|
|
7212
7083
|
function serializeCollection(record) {
|
|
7213
7084
|
return {
|
|
7214
7085
|
...record,
|
|
@@ -7245,6 +7116,155 @@ function serializeSavedRequest(record) {
|
|
|
7245
7116
|
};
|
|
7246
7117
|
}
|
|
7247
7118
|
|
|
7119
|
+
// src/server/routes/schemas/admin.ts
|
|
7120
|
+
var adminResourceOptionSchema = z9.object({
|
|
7121
|
+
id: z9.string(),
|
|
7122
|
+
name: z9.string(),
|
|
7123
|
+
deletionLocked: z9.boolean()
|
|
7124
|
+
});
|
|
7125
|
+
var adminEntityConfigSchema = z9.object({
|
|
7126
|
+
id: z9.string(),
|
|
7127
|
+
name: z9.string(),
|
|
7128
|
+
deletionLocked: z9.boolean()
|
|
7129
|
+
});
|
|
7130
|
+
var updateAdminCollectionBodySchema = z9.object({
|
|
7131
|
+
deletionLocked: z9.boolean()
|
|
7132
|
+
});
|
|
7133
|
+
var updateAdminEnvironmentBodySchema = z9.object({
|
|
7134
|
+
deletionLocked: z9.boolean()
|
|
7135
|
+
});
|
|
7136
|
+
var updateAdminSnippetBodySchema = z9.object({
|
|
7137
|
+
name: z9.string().trim().min(1).optional(),
|
|
7138
|
+
code: z9.string().optional(),
|
|
7139
|
+
scope: snippetScopeSchema.optional(),
|
|
7140
|
+
deletionLocked: z9.boolean().optional()
|
|
7141
|
+
}).superRefine((body, ctx) => {
|
|
7142
|
+
const hasContentFields = body.name !== void 0 || body.code !== void 0 || body.scope !== void 0;
|
|
7143
|
+
const hasFullContent = body.name !== void 0 && body.code !== void 0 && body.scope !== void 0;
|
|
7144
|
+
if (hasContentFields && !hasFullContent) {
|
|
7145
|
+
ctx.addIssue({
|
|
7146
|
+
code: "custom",
|
|
7147
|
+
message: "name, code, and scope must be provided together"
|
|
7148
|
+
});
|
|
7149
|
+
}
|
|
7150
|
+
if (!hasContentFields && body.deletionLocked === void 0) {
|
|
7151
|
+
ctx.addIssue({
|
|
7152
|
+
code: "custom",
|
|
7153
|
+
message: "Provide snippet content (name, code, scope) and/or deletionLocked"
|
|
7154
|
+
});
|
|
7155
|
+
}
|
|
7156
|
+
});
|
|
7157
|
+
var createAdminSnippetBodySchema = createSnippetBodySchema;
|
|
7158
|
+
var listAdminCollectionsResponseSchema = z9.object({
|
|
7159
|
+
collections: z9.array(adminResourceOptionSchema)
|
|
7160
|
+
});
|
|
7161
|
+
var listAdminEnvironmentsResponseSchema = z9.object({
|
|
7162
|
+
environments: z9.array(adminResourceOptionSchema)
|
|
7163
|
+
});
|
|
7164
|
+
var listAdminSnippetsResponseSchema = z9.object({
|
|
7165
|
+
snippets: z9.array(snippetRecordSchema)
|
|
7166
|
+
});
|
|
7167
|
+
var adminSnippetRecordSchema = snippetRecordSchema;
|
|
7168
|
+
var listAdminLlmModelsResponseSchema = listLlmModelsResponseSchema;
|
|
7169
|
+
var hubUserRecordSchema = z9.object({
|
|
7170
|
+
id: z9.string(),
|
|
7171
|
+
name: z9.string(),
|
|
7172
|
+
role: userRoleSchema,
|
|
7173
|
+
collectionAccess: z9.array(z9.string()),
|
|
7174
|
+
environmentAccess: z9.array(z9.string()),
|
|
7175
|
+
snippetAccess: z9.array(z9.string()),
|
|
7176
|
+
llmAccess: z9.boolean(),
|
|
7177
|
+
llmModels: z9.array(z9.string()),
|
|
7178
|
+
llmMonthlyTokenLimit: z9.number().int().nonnegative().nullable(),
|
|
7179
|
+
createdAt: timestampSchema,
|
|
7180
|
+
updatedAt: timestampSchema
|
|
7181
|
+
});
|
|
7182
|
+
var adminUserListEntrySchema = hubUserRecordSchema.extend({
|
|
7183
|
+
warnings: z9.array(z9.string())
|
|
7184
|
+
});
|
|
7185
|
+
var listAdminUsersResponseSchema = z9.object({
|
|
7186
|
+
users: z9.array(adminUserListEntrySchema)
|
|
7187
|
+
});
|
|
7188
|
+
var updateAdminUserBodySchema = z9.object({
|
|
7189
|
+
name: z9.string().trim().min(1).optional(),
|
|
7190
|
+
role: userRoleSchema.optional(),
|
|
7191
|
+
collectionAccess: z9.array(z9.string()).optional(),
|
|
7192
|
+
environmentAccess: z9.array(z9.string()).optional(),
|
|
7193
|
+
snippetAccess: z9.array(z9.string()).optional(),
|
|
7194
|
+
llmAccess: z9.boolean().optional(),
|
|
7195
|
+
llmModels: z9.array(z9.string()).optional(),
|
|
7196
|
+
llmMonthlyTokenLimit: z9.number().int().nonnegative().nullable().optional()
|
|
7197
|
+
});
|
|
7198
|
+
var createAdminUserBodySchema = z9.object({
|
|
7199
|
+
name: z9.string().trim().min(1),
|
|
7200
|
+
role: userRoleSchema,
|
|
7201
|
+
collectionAccess: z9.array(z9.string()).optional(),
|
|
7202
|
+
environmentAccess: z9.array(z9.string()).optional(),
|
|
7203
|
+
snippetAccess: z9.array(z9.string()).optional(),
|
|
7204
|
+
llmAccess: z9.boolean().optional(),
|
|
7205
|
+
llmModels: z9.array(z9.string()).optional(),
|
|
7206
|
+
llmMonthlyTokenLimit: z9.number().int().nonnegative().nullable().optional()
|
|
7207
|
+
});
|
|
7208
|
+
var hubApiTokenRecordSchema = z9.object({
|
|
7209
|
+
id: z9.string(),
|
|
7210
|
+
userId: z9.string(),
|
|
7211
|
+
name: z9.string(),
|
|
7212
|
+
tokenPrefix: z9.string(),
|
|
7213
|
+
createdAt: timestampSchema,
|
|
7214
|
+
lastUsedAt: timestampSchema.nullable(),
|
|
7215
|
+
revokedAt: timestampSchema.nullable()
|
|
7216
|
+
});
|
|
7217
|
+
var createAdminUserResponseSchema = z9.object({
|
|
7218
|
+
user: hubUserRecordSchema,
|
|
7219
|
+
token: hubApiTokenRecordSchema,
|
|
7220
|
+
secret: z9.string()
|
|
7221
|
+
});
|
|
7222
|
+
var createAdminTokenBodySchema = z9.object({
|
|
7223
|
+
name: z9.string().trim().min(1)
|
|
7224
|
+
});
|
|
7225
|
+
var createdApiTokenResponseSchema = z9.object({
|
|
7226
|
+
token: hubApiTokenRecordSchema,
|
|
7227
|
+
secret: z9.string()
|
|
7228
|
+
});
|
|
7229
|
+
var listAdminTokensResponseSchema = z9.object({
|
|
7230
|
+
tokens: z9.array(hubApiTokenRecordSchema)
|
|
7231
|
+
});
|
|
7232
|
+
var reloadConfigSectionResultSchema = z9.object({
|
|
7233
|
+
section: z9.enum(["db", "redis", "llm", "plugins", "server"]),
|
|
7234
|
+
status: z9.enum(["reloaded", "unchanged", "failed", "restart-required"]),
|
|
7235
|
+
error: z9.string().optional()
|
|
7236
|
+
});
|
|
7237
|
+
var reloadConfigResponseSchema = z9.object({
|
|
7238
|
+
sections: z9.array(reloadConfigSectionResultSchema),
|
|
7239
|
+
fatalError: z9.string().optional()
|
|
7240
|
+
});
|
|
7241
|
+
function serializeHubUser(user) {
|
|
7242
|
+
return {
|
|
7243
|
+
id: user.id,
|
|
7244
|
+
name: user.name,
|
|
7245
|
+
role: user.role,
|
|
7246
|
+
collectionAccess: user.collectionAccess,
|
|
7247
|
+
environmentAccess: user.environmentAccess,
|
|
7248
|
+
snippetAccess: user.snippetAccess,
|
|
7249
|
+
llmAccess: user.llmAccess,
|
|
7250
|
+
llmModels: user.llmModels,
|
|
7251
|
+
llmMonthlyTokenLimit: user.llmMonthlyTokenLimit,
|
|
7252
|
+
createdAt: user.createdAt.toISOString(),
|
|
7253
|
+
updatedAt: user.updatedAt.toISOString()
|
|
7254
|
+
};
|
|
7255
|
+
}
|
|
7256
|
+
function serializeApiToken(token) {
|
|
7257
|
+
return {
|
|
7258
|
+
id: token.id,
|
|
7259
|
+
userId: token.userId,
|
|
7260
|
+
name: token.name,
|
|
7261
|
+
tokenPrefix: token.tokenPrefix,
|
|
7262
|
+
createdAt: token.createdAt.toISOString(),
|
|
7263
|
+
lastUsedAt: token.lastUsedAt ? token.lastUsedAt.toISOString() : null,
|
|
7264
|
+
revokedAt: token.revokedAt ? token.revokedAt.toISOString() : null
|
|
7265
|
+
};
|
|
7266
|
+
}
|
|
7267
|
+
|
|
7248
7268
|
// src/server/routes/admin.ts
|
|
7249
7269
|
function sendLlmUnavailable(reply) {
|
|
7250
7270
|
return reply.code(503).send({
|
|
@@ -7553,11 +7573,7 @@ async function registerAdminRoutes(app, options) {
|
|
|
7553
7573
|
}
|
|
7554
7574
|
const snippets = await db.listSnippets();
|
|
7555
7575
|
return reply.send({
|
|
7556
|
-
snippets: snippets.map((snippet) => (
|
|
7557
|
-
id: snippet.id,
|
|
7558
|
-
name: snippet.name,
|
|
7559
|
-
deletionLocked: snippet.deletionLocked
|
|
7560
|
-
}))
|
|
7576
|
+
snippets: snippets.map((snippet) => serializeSnippet(snippet))
|
|
7561
7577
|
});
|
|
7562
7578
|
} catch (error) {
|
|
7563
7579
|
if (handleDbError(reply, error)) {
|
|
@@ -7567,6 +7583,40 @@ async function registerAdminRoutes(app, options) {
|
|
|
7567
7583
|
}
|
|
7568
7584
|
}
|
|
7569
7585
|
});
|
|
7586
|
+
routes.route({
|
|
7587
|
+
method: "POST",
|
|
7588
|
+
url: "/admin/snippets",
|
|
7589
|
+
schema: {
|
|
7590
|
+
body: createAdminSnippetBodySchema,
|
|
7591
|
+
response: {
|
|
7592
|
+
201: adminSnippetRecordSchema,
|
|
7593
|
+
403: errorResponseSchema
|
|
7594
|
+
}
|
|
7595
|
+
},
|
|
7596
|
+
/**
|
|
7597
|
+
* Creates a snippet through the management API.
|
|
7598
|
+
*/
|
|
7599
|
+
handler: async (request, reply) => {
|
|
7600
|
+
try {
|
|
7601
|
+
const user = requireAuthenticatedUser(request);
|
|
7602
|
+
if (denyUnlessAllowed(reply, canUseManagementApi(user))) {
|
|
7603
|
+
return;
|
|
7604
|
+
}
|
|
7605
|
+
const snippet = await db.createSnippet(
|
|
7606
|
+
request.body.name,
|
|
7607
|
+
request.body.code,
|
|
7608
|
+
request.body.scope,
|
|
7609
|
+
user.id
|
|
7610
|
+
);
|
|
7611
|
+
return reply.code(201).send(serializeSnippet(snippet));
|
|
7612
|
+
} catch (error) {
|
|
7613
|
+
if (handleDbError(reply, error)) {
|
|
7614
|
+
return;
|
|
7615
|
+
}
|
|
7616
|
+
throw error;
|
|
7617
|
+
}
|
|
7618
|
+
}
|
|
7619
|
+
});
|
|
7570
7620
|
routes.route({
|
|
7571
7621
|
method: "DELETE",
|
|
7572
7622
|
url: "/admin/collections/:id",
|
|
@@ -7679,13 +7729,13 @@ async function registerAdminRoutes(app, options) {
|
|
|
7679
7729
|
params: idParamSchema,
|
|
7680
7730
|
body: updateAdminSnippetBodySchema,
|
|
7681
7731
|
response: {
|
|
7682
|
-
200:
|
|
7732
|
+
200: adminSnippetRecordSchema,
|
|
7683
7733
|
403: errorResponseSchema,
|
|
7684
7734
|
404: errorResponseSchema
|
|
7685
7735
|
}
|
|
7686
7736
|
},
|
|
7687
7737
|
/**
|
|
7688
|
-
* Updates
|
|
7738
|
+
* Updates snippet content and/or admin configuration.
|
|
7689
7739
|
*/
|
|
7690
7740
|
handler: async (request, reply) => {
|
|
7691
7741
|
try {
|
|
@@ -7693,16 +7743,20 @@ async function registerAdminRoutes(app, options) {
|
|
|
7693
7743
|
if (denyUnlessAllowed(reply, canUseManagementApi(user))) {
|
|
7694
7744
|
return;
|
|
7695
7745
|
}
|
|
7696
|
-
const
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
|
|
7704
|
-
|
|
7705
|
-
}
|
|
7746
|
+
const existing = await db.findSnippetById(request.params.id);
|
|
7747
|
+
if (!existing) {
|
|
7748
|
+
void reply.code(404).send({ error: "Snippet not found" });
|
|
7749
|
+
return;
|
|
7750
|
+
}
|
|
7751
|
+
let snippet = existing;
|
|
7752
|
+
const { name, code, scope, deletionLocked } = request.body;
|
|
7753
|
+
if (name !== void 0 && code !== void 0 && scope !== void 0) {
|
|
7754
|
+
snippet = await db.updateSnippet(request.params.id, name, code, scope, user.id);
|
|
7755
|
+
}
|
|
7756
|
+
if (deletionLocked !== void 0) {
|
|
7757
|
+
snippet = await db.setSnippetDeletionLocked(request.params.id, deletionLocked, user.id);
|
|
7758
|
+
}
|
|
7759
|
+
return reply.send(serializeSnippet(snippet));
|
|
7706
7760
|
} catch (error) {
|
|
7707
7761
|
if (handleDbError(reply, error)) {
|
|
7708
7762
|
return;
|