systemprompt_users/
extension.rs1use systemprompt_extension::prelude::*;
7
8#[derive(Debug, Clone, Copy, Default)]
9pub struct UsersExtension;
10
11impl Extension for UsersExtension {
12 fn metadata(&self) -> ExtensionMetadata {
13 ExtensionMetadata {
14 id: "users",
15 name: "Users",
16 version: env!("CARGO_PKG_VERSION"),
17 }
18 }
19
20 fn is_required(&self) -> bool {
21 true
22 }
23
24 fn schemas(&self) -> Vec<SchemaDefinition> {
25 vec![
26 SchemaDefinition::new("users", include_str!("../schema/users.sql"))
27 .with_required_columns(vec![
28 "id".into(),
29 "name".into(),
30 "email".into(),
31 "created_at".into(),
32 ]),
33 SchemaDefinition::new("user_sessions", include_str!("../schema/user_sessions.sql"))
34 .with_required_columns(vec![
35 "session_id".into(),
36 "started_at".into(),
37 "bot_type".into(),
38 ]),
39 SchemaDefinition::sql_only(include_str!("../schema/session_bot_type.sql")),
40 SchemaDefinition::new("banned_ips", include_str!("../schema/banned_ips.sql"))
41 .with_required_columns(vec![
42 "ip_address".into(),
43 "reason".into(),
44 "banned_at".into(),
45 ]),
46 SchemaDefinition::new("user_api_keys", include_str!("../schema/user_api_keys.sql"))
47 .with_required_columns(vec![
48 "id".into(),
49 "user_id".into(),
50 "key_prefix".into(),
51 "key_hash".into(),
52 "model_allowlist".into(),
53 "request_window_seconds".into(),
54 ]),
55 SchemaDefinition::new(
56 "user_api_key_scopes",
57 include_str!("../schema/user_api_key_scopes.sql"),
58 )
59 .with_required_columns(vec![
60 "key_id".into(),
61 "dimension".into(),
62 "value".into(),
63 ]),
64 SchemaDefinition::new(
65 "user_device_certs",
66 include_str!("../schema/user_device_certs.sql"),
67 )
68 .with_required_columns(vec![
69 "id".into(),
70 "user_id".into(),
71 "fingerprint".into(),
72 "label".into(),
73 ]),
74 SchemaDefinition::new(
75 "user_rate_limit_buckets",
76 include_str!("../schema/user_rate_limit_buckets.sql"),
77 )
78 .with_required_columns(vec![
79 "user_id".into(),
80 "scope".into(),
81 "window_start".into(),
82 "hits".into(),
83 ]),
84 SchemaDefinition::new(
85 "federated_identities",
86 include_str!("../schema/federated_identities.sql"),
87 )
88 .with_required_columns(vec![
89 "issuer".into(),
90 "external_sub".into(),
91 "user_id".into(),
92 ]),
93 ]
94 }
95
96 fn dependencies(&self) -> Vec<&'static str> {
97 vec!["events"]
98 }
99
100 fn migrations(&self) -> Vec<Migration> {
101 extension_migrations!()
102 }
103}
104
105register_extension!(UsersExtension);