@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 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 z8 } from "zod/v4";
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/admin.ts
6936
- var adminResourceOptionSchema = z8.object({
6937
- id: z8.string(),
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 updateAdminCollectionBodySchema = z8.object({
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
- role: userRoleSchema,
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
- var adminUserListEntrySchema = hubUserRecordSchema.extend({
6979
- warnings: z8.array(z8.string())
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 hubApiTokenRecordSchema = z8.object({
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
- tokenPrefix: z8.string(),
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: z9.number().int(),
6967
+ sortOrder: z8.number().int(),
7097
6968
  createdAt: timestampSchema,
7098
6969
  updatedAt: timestampSchema,
7099
- createdByUserId: z9.string().nullable(),
7100
- updatedByUserId: z9.string().nullable(),
7101
- deletionLocked: z9.boolean()
6970
+ createdByUserId: z8.string().nullable(),
6971
+ updatedByUserId: z8.string().nullable(),
6972
+ deletionLocked: z8.boolean()
7102
6973
  });
7103
- var folderRecordSchema = z9.object({
7104
- id: z9.string(),
7105
- collectionId: z9.string(),
7106
- name: z9.string(),
7107
- sortOrder: z9.number().int(),
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: z9.string().nullable(),
7111
- updatedByUserId: z9.string().nullable()
6981
+ createdByUserId: z8.string().nullable(),
6982
+ updatedByUserId: z8.string().nullable()
7112
6983
  });
7113
- var savedRequestRecordSchema = z9.object({
7114
- id: z9.string(),
7115
- collectionId: z9.string(),
7116
- name: z9.string(),
6984
+ var savedRequestRecordSchema = z8.object({
6985
+ id: z8.string(),
6986
+ collectionId: z8.string(),
6987
+ name: z8.string(),
7117
6988
  method: httpMethodSchema,
7118
- url: z9.string(),
7119
- headers: z9.array(keyValueSchema),
7120
- params: z9.array(keyValueSchema),
6989
+ url: z8.string(),
6990
+ headers: z8.array(keyValueSchema),
6991
+ params: z8.array(keyValueSchema),
7121
6992
  auth: authConfigSchema,
7122
- body: z9.string(),
6993
+ body: z8.string(),
7123
6994
  bodyType: bodyTypeSchema,
7124
- preRequestScript: z9.string(),
7125
- postRequestScript: z9.string(),
7126
- comment: z9.string(),
7127
- folderId: z9.string().nullable(),
7128
- sortOrder: z9.number().int(),
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: z9.string().nullable(),
7132
- updatedByUserId: z9.string().nullable()
7002
+ createdByUserId: z8.string().nullable(),
7003
+ updatedByUserId: z8.string().nullable()
7133
7004
  });
7134
- var createCollectionBodySchema = z9.object({
7135
- name: z9.string().trim().min(1)
7005
+ var createCollectionBodySchema = z8.object({
7006
+ name: z8.string().trim().min(1)
7136
7007
  });
7137
- var updateCollectionBodySchema = z9.object({
7138
- name: z9.string().trim().min(1),
7139
- variables: z9.array(variableSchema),
7140
- headers: z9.array(keyValueSchema),
7141
- preRequestScript: z9.string(),
7142
- postRequestScript: z9.string(),
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 = z9.object({
7146
- name: z9.string().trim().min(1)
7016
+ var createEnvironmentBodySchema = z8.object({
7017
+ name: z8.string().trim().min(1)
7147
7018
  });
7148
- var updateEnvironmentBodySchema = z9.object({
7149
- name: z9.string().trim().min(1),
7150
- variables: z9.array(variableSchema)
7019
+ var updateEnvironmentBodySchema = z8.object({
7020
+ name: z8.string().trim().min(1),
7021
+ variables: z8.array(variableSchema)
7151
7022
  });
7152
- var createSnippetBodySchema = z9.object({
7153
- name: z9.string().trim().min(1),
7154
- code: z9.string().default(""),
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 = z9.object({
7158
- name: z9.string().trim().min(1),
7159
- code: z9.string(),
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 = z9.object({
7163
- name: z9.string().trim().min(1)
7033
+ var createFolderBodySchema = z8.object({
7034
+ name: z8.string().trim().min(1)
7164
7035
  });
7165
- var renameFolderBodySchema = z9.object({
7166
- name: z9.string().trim().min(1)
7036
+ var renameFolderBodySchema = z8.object({
7037
+ name: z8.string().trim().min(1)
7167
7038
  });
7168
- var reorderFoldersBodySchema = z9.object({
7169
- orderedFolderIds: z9.array(z9.string().trim().min(1))
7039
+ var reorderFoldersBodySchema = z8.object({
7040
+ orderedFolderIds: z8.array(z8.string().trim().min(1))
7170
7041
  });
7171
- var saveRequestBodySchema = z9.object({
7172
- name: z9.string().trim().min(1),
7042
+ var saveRequestBodySchema = z8.object({
7043
+ name: z8.string().trim().min(1),
7173
7044
  method: httpMethodSchema,
7174
- url: z9.string(),
7175
- headers: z9.array(keyValueSchema),
7176
- params: z9.array(keyValueSchema),
7045
+ url: z8.string(),
7046
+ headers: z8.array(keyValueSchema),
7047
+ params: z8.array(keyValueSchema),
7177
7048
  auth: authConfigSchema,
7178
- body: z9.string(),
7049
+ body: z8.string(),
7179
7050
  bodyType: bodyTypeSchema,
7180
- preRequestScript: z9.string(),
7181
- postRequestScript: z9.string(),
7182
- comment: z9.string(),
7183
- folderId: z9.string().nullable().optional()
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: z9.string().trim().min(1)
7057
+ collectionId: z8.string().trim().min(1)
7187
7058
  });
7188
- var reorderRequestsBodySchema = z9.object({
7189
- folderId: z9.string().nullable(),
7190
- orderedRequestIds: z9.array(z9.string().trim().min(1))
7059
+ var reorderRequestsBodySchema = z8.object({
7060
+ folderId: z8.string().nullable(),
7061
+ orderedRequestIds: z8.array(z8.string().trim().min(1))
7191
7062
  });
7192
- var moveRequestBodySchema = z9.object({
7193
- folderId: z9.string().nullable(),
7194
- index: z9.number().int().min(0)
7063
+ var moveRequestBodySchema = z8.object({
7064
+ folderId: z8.string().nullable(),
7065
+ index: z8.number().int().min(0)
7195
7066
  });
7196
- var listCollectionsResponseSchema = z9.object({
7197
- collections: z9.array(collectionRecordSchema)
7067
+ var listCollectionsResponseSchema = z8.object({
7068
+ collections: z8.array(collectionRecordSchema)
7198
7069
  });
7199
- var listEnvironmentsResponseSchema = z9.object({
7200
- environments: z9.array(environmentRecordSchema)
7070
+ var listEnvironmentsResponseSchema = z8.object({
7071
+ environments: z8.array(environmentRecordSchema)
7201
7072
  });
7202
- var listSnippetsResponseSchema = z9.object({
7203
- snippets: z9.array(snippetRecordSchema)
7073
+ var listSnippetsResponseSchema = z8.object({
7074
+ snippets: z8.array(snippetRecordSchema)
7204
7075
  });
7205
- var listFoldersResponseSchema = z9.object({
7206
- folders: z9.array(folderRecordSchema)
7076
+ var listFoldersResponseSchema = z8.object({
7077
+ folders: z8.array(folderRecordSchema)
7207
7078
  });
7208
- var listRequestsResponseSchema = z9.object({
7209
- requests: z9.array(savedRequestRecordSchema)
7079
+ var listRequestsResponseSchema = z8.object({
7080
+ requests: z8.array(savedRequestRecordSchema)
7210
7081
  });
7211
- var emptyResponseSchema = z9.null();
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: adminEntityConfigSchema,
7732
+ 200: adminSnippetRecordSchema,
7683
7733
  403: errorResponseSchema,
7684
7734
  404: errorResponseSchema
7685
7735
  }
7686
7736
  },
7687
7737
  /**
7688
- * Updates admin configuration for a snippet.
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 snippet = await db.setSnippetDeletionLocked(
7697
- request.params.id,
7698
- request.body.deletionLocked,
7699
- user.id
7700
- );
7701
- return reply.send({
7702
- id: snippet.id,
7703
- name: snippet.name,
7704
- deletionLocked: snippet.deletionLocked
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;