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::sql_only(include_str!("../schema/reporting_capture.sql")),
27 SchemaDefinition::new("users", include_str!("../schema/users.sql"))
28 .with_required_columns(vec![
29 "id".into(),
30 "name".into(),
31 "email".into(),
32 "created_at".into(),
33 ]),
34 SchemaDefinition::new("user_sessions", include_str!("../schema/user_sessions.sql"))
35 .with_required_columns(vec!["session_id".into(), "started_at".into()]),
36 SchemaDefinition::new("banned_ips", include_str!("../schema/banned_ips.sql"))
37 .with_required_columns(vec![
38 "ip_address".into(),
39 "reason".into(),
40 "banned_at".into(),
41 ]),
42 SchemaDefinition::new("user_api_keys", include_str!("../schema/user_api_keys.sql"))
43 .with_required_columns(vec![
44 "id".into(),
45 "user_id".into(),
46 "key_prefix".into(),
47 "key_hash".into(),
48 ]),
49 SchemaDefinition::new(
50 "user_device_certs",
51 include_str!("../schema/user_device_certs.sql"),
52 )
53 .with_required_columns(vec![
54 "id".into(),
55 "user_id".into(),
56 "fingerprint".into(),
57 "label".into(),
58 ]),
59 SchemaDefinition::new(
60 "user_rate_limit_buckets",
61 include_str!("../schema/user_rate_limit_buckets.sql"),
62 )
63 .with_required_columns(vec![
64 "user_id".into(),
65 "scope".into(),
66 "window_start".into(),
67 "hits".into(),
68 ]),
69 SchemaDefinition::new(
70 "federated_identities",
71 include_str!("../schema/federated_identities.sql"),
72 )
73 .with_required_columns(vec![
74 "issuer".into(),
75 "external_sub".into(),
76 "user_id".into(),
77 ]),
78 ]
79 }
80
81 fn dependencies(&self) -> Vec<&'static str> {
82 vec!["events"]
83 }
84
85 fn migrations(&self) -> Vec<Migration> {
86 extension_migrations!()
87 }
88}
89
90register_extension!(UsersExtension);