@mesob/ai-hono 0.5.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/index.ts","../src/db/schema.ts","../src/handler.ts","../src/routes/index.ts","../src/routes/ai-form/ai-form.route.ts","../src/routes/ai.schema.ts","../src/routes/ai-form/handler/ai-form.ts","../src/utils/detect-refusal-in-data.ts","../src/utils/openai-model.ts","../src/utils/status-code.ts","../src/utils/wrap-ai-form-output-schema.ts","../src/db/orm/prompt.ts","../src/routes/ai-form/handler/load-system-prompt.ts","../src/index.ts"],"sourcesContent":["import { drizzle } from 'drizzle-orm/node-postgres';\nimport { Pool } from 'pg';\nimport * as schema from './schema';\n\nconst schemaConfig = { schema: { ...schema } };\n\nexport const createDatabase = (connectionString: string) => {\n const pool = new Pool({ connectionString });\n return drizzle({ client: pool, ...schemaConfig });\n};\n\nexport type Database = ReturnType<typeof createDatabase>;\n","import { pgTable, pgSchema, index, foreignKey, pgPolicy, check, uuid, varchar, timestamp, text, smallint, unique, inet, jsonb, boolean, uniqueIndex, vector } from \"drizzle-orm/pg-core\"\nimport { sql } from \"drizzle-orm\"\n\nexport const iam = pgSchema(\"iam\");\nexport const ai = pgSchema(\"ai\");\n\n\nexport const verificationsInIam = iam.table(\"verifications\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tuserId: uuid(\"user_id\").notNull(),\n\tcode: text().notNull(),\n\texpiresAt: timestamp(\"expires_at\", { withTimezone: true, mode: 'string' }).notNull(),\n\ttype: text(),\n\tattempt: smallint().default(0),\n\tto: text(),\n}, (table) => [\n\tindex(\"verifications_expires_at_idx\").using(\"btree\", table.expiresAt.asc().nullsLast().op(\"timestamptz_ops\")),\n\tindex(\"verifications_lookup_idx\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.userId.asc().nullsLast().op(\"text_ops\"), table.type.asc().nullsLast().op(\"uuid_ops\"), table.to.asc().nullsLast().op(\"text_ops\"), table.code.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"verifications_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"verifications_user_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n\tcheck(\"verifications_attempt_nonnegative_check\", sql`attempt >= 0`),\n\tcheck(\"verifications_expires_after_created_check\", sql`expires_at > created_at`),\n]);\n\nexport const sessionsInIam = iam.table(\"sessions\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tuserId: uuid(\"user_id\").notNull(),\n\texpiresAt: timestamp(\"expires_at\", { withTimezone: true, mode: 'string' }).notNull(),\n\tuserAgent: text(\"user_agent\"),\n\tip: inet(),\n\tmeta: jsonb(),\n\ttoken: text().notNull(),\n\trotatedAt: timestamp(\"rotated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`),\n}, (table) => [\n\tindex(\"sessions_expires_at_idx\").using(\"btree\", table.expiresAt.asc().nullsLast().op(\"timestamptz_ops\")),\n\tindex(\"sessions_tenant_user_idx\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"uuid_ops\"), table.userId.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"sessions_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"sessions_user_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tunique(\"sessions_token_key\").on(table.token),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n\tcheck(\"sessions_expires_after_created_check\", sql`expires_at > created_at`),\n]);\n\nexport const accountChangesInIam = iam.table(\"account_changes\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tuserId: uuid(\"user_id\").notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tchangeType: text(\"change_type\").notNull(),\n\toldEmail: varchar(\"old_email\"),\n\tnewEmail: varchar(\"new_email\"),\n\toldPhone: text(\"old_phone\"),\n\tnewPhone: text(\"new_phone\"),\n\tstatus: varchar().notNull(),\n\texpiresAt: timestamp(\"expires_at\", { withTimezone: true, mode: 'string' }).notNull(),\n\tconfirmedAt: timestamp(\"confirmed_at\", { withTimezone: true, mode: 'string' }),\n\tcancelledAt: timestamp(\"cancelled_at\", { withTimezone: true, mode: 'string' }),\n\treason: text(),\n}, (table) => [\n\tindex(\"account_changes_expires_at_idx\").using(\"btree\", table.expiresAt.asc().nullsLast().op(\"timestamptz_ops\")),\n\tindex(\"account_changes_tenant_user_status_idx\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"uuid_ops\"), table.userId.asc().nullsLast().op(\"text_ops\"), table.status.asc().nullsLast().op(\"uuid_ops\")),\n\tindex(\"idx_account_changes_expired\").using(\"btree\", table.expiresAt.asc().nullsLast().op(\"text_ops\"), table.status.asc().nullsLast().op(\"text_ops\")).where(sql`((status)::text = 'pending'::text)`),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"account_changes_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"account_changes_user_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n\tcheck(\"account_changes_expires_after_created_check\", sql`expires_at > created_at`),\n\tcheck(\"account_changes_change_type_check\", sql`((change_type = 'EMAIL'::text) AND (old_email IS NOT NULL) AND (new_email IS NOT NULL) AND (old_phone IS NULL) AND (new_phone IS NULL)) OR ((change_type = 'PHONE'::text) AND (old_phone IS NOT NULL) AND (new_phone IS NOT NULL) AND (old_email IS NULL) AND (new_email IS NULL))`),\n\tcheck(\"account_changes_status_check\", sql`(status)::text = ANY (ARRAY[('PENDING'::character varying)::text, ('APPLIED'::character varying)::text, ('CANCELLED'::character varying)::text, ('EXPIRED'::character varying)::text])`),\n]);\n\nexport const tenantsInIam = iam.table(\"tenants\", {\n\tid: varchar({ length: 30 }).primaryKey().notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tname: jsonb().notNull(),\n\tdescription: jsonb(),\n\ttheme: jsonb(),\n\tsupportedLanguages: jsonb(\"supported_languages\"),\n\tdefaultLanguage: text(\"default_language\"),\n\tsupportedCurrency: jsonb(\"supported_currency\"),\n\tdefaultCurrency: text(\"default_currency\"),\n\ttimezone: text(),\n\tisActive: boolean(\"is_active\").default(true).notNull(),\n\tlocale: jsonb(),\n\tsettings: jsonb(),\n\tseo: jsonb(),\n}, (table) => [\n\tindex(\"tenants_is_active_idx\").using(\"btree\", table.isActive.asc().nullsLast().op(\"bool_ops\")),\n]);\n\nexport const rolePermissionsInIam = iam.table(\"role_permissions\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tpermissionId: text(\"permission_id\").notNull(),\n\troleId: uuid(\"role_id\").notNull(),\n}, (table) => [\n\tindex(\"idx_role_permissions_permission_id\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.permissionId.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"role_permissions_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.permissionId],\n\t\t\tforeignColumns: [permissionsInIam.id],\n\t\t\tname: \"role_permissions_permission_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId, table.roleId],\n\t\t\tforeignColumns: [rolesInIam.tenantId, rolesInIam.id],\n\t\t\tname: \"role_permissions_tenant_role_fkey\"\n\t\t}).onDelete(\"cascade\"),\n\tunique(\"role_permissions_tenant_role_permission_unique\").on(table.tenantId, table.permissionId, table.roleId),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const permissionsInIam = iam.table(\"permissions\", {\n\tid: text().primaryKey().notNull(),\n\tdescription: jsonb().notNull(),\n\tactivity: text().notNull(),\n\tapplication: text().notNull(),\n\tfeature: text().notNull(),\n}, (table) => [\n\tunique(\"permissions_activity_application_feature_key\").on(table.activity, table.application, table.feature),\n]);\n\nexport const accountsInIam = iam.table(\"accounts\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tuserId: uuid(\"user_id\").notNull(),\n\tprovider: text().notNull(),\n\tproviderAccountId: text(\"provider_account_id\").notNull(),\n\tpassword: text(),\n\tpasswordLastChangedAt: timestamp(\"password_last_changed_at\", { withTimezone: true, mode: 'string' }),\n\tidToken: text(\"id_token\"),\n\taccessToken: text(\"access_token\"),\n\taccessTokenExpiresAt: timestamp(\"access_token_expires_at\", { withTimezone: true, mode: 'string' }),\n\trefreshToken: text(\"refresh_token\"),\n\trefreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\", { withTimezone: true, mode: 'string' }),\n\tscope: text(),\n\texpiresAt: timestamp(\"expires_at\", { withTimezone: true, mode: 'string' }),\n\tmeta: jsonb(),\n}, (table) => [\n\tindex(\"idx_accounts_provider_lookup\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.provider.asc().nullsLast().op(\"text_ops\"), table.providerAccountId.asc().nullsLast().op(\"text_ops\")),\n\tindex(\"idx_accounts_user_id\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.userId.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"accounts_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"accounts_user_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tunique(\"accounts_tenant_provider_account_unique\").on(table.tenantId, table.provider, table.providerAccountId),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const usersInIam = iam.table(\"users\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tfullName: text(\"full_name\").notNull(),\n\timage: text(),\n\tphone: text(),\n\temail: text(),\n\thandle: text().notNull(),\n\temailVerified: boolean(\"email_verified\").default(false).notNull(),\n\tphoneVerified: boolean(\"phone_verified\").default(false).notNull(),\n\tbannedUntil: timestamp(\"banned_until\", { withTimezone: true, mode: 'string' }),\n\tlastSignInAt: timestamp(\"last_sign_in_at\", { withTimezone: true, mode: 'string' }),\n\tloginAttempt: smallint(\"login_attempt\").default(0).notNull(),\n\tuserType: text(\"user_type\").array().default([\"RAY\"]).notNull(),\n}, (table) => [\n\tindex(\"idx_users_auth_lookup\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"bool_ops\"), table.email.asc().nullsLast().op(\"bool_ops\"), table.id.asc().nullsLast().op(\"timestamptz_ops\"), table.emailVerified.asc().nullsLast().op(\"timestamptz_ops\"), table.bannedUntil.asc().nullsLast().op(\"uuid_ops\")).where(sql`(email IS NOT NULL)`),\n\tindex(\"idx_users_email_lookup\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.email.asc().nullsLast().op(\"text_ops\")).where(sql`(email IS NOT NULL)`),\n\tindex(\"idx_users_handle_lookup\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.handle.asc().nullsLast().op(\"text_ops\")),\n\tindex(\"idx_users_phone_lookup\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.phone.asc().nullsLast().op(\"text_ops\")).where(sql`(phone IS NOT NULL)`),\n\tindex(\"idx_users_tenant_email_unique\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.email.asc().nullsLast().op(\"text_ops\")).where(sql`(email IS NOT NULL)`),\n\tindex(\"idx_users_tenant_is_admin\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")).where(sql`(user_type @> ARRAY['admin'::text])`),\n\tindex(\"idx_users_tenant_is_candidate\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")).where(sql`(user_type @> ARRAY['candidate'::text])`),\n\tindex(\"idx_users_tenant_is_employee\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")).where(sql`(user_type @> ARRAY['employee'::text])`),\n\tindex(\"idx_users_user_types_gin\").using(\"gin\", table.userType.asc().nullsLast().op(\"array_ops\")),\n\tuniqueIndex(\"users_tenant_lower_email_idx\").using(\"btree\", sql`tenant_id`, sql`lower(email)`),\n\tuniqueIndex(\"users_tenant_lower_handle_idx\").using(\"btree\", sql`tenant_id`, sql`lower(handle)`),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"users_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tunique(\"users_tenant_phone_key\").on(table.tenantId, table.phone),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n\tcheck(\"users_login_attempt_nonnegative_check\", sql`login_attempt >= 0`),\n\tcheck(\"users_contact_required_check\", sql`(email IS NOT NULL) OR (phone IS NOT NULL)`),\n\tcheck(\"users_user_type_check\", sql`user_type <@ ARRAY['candidate'::text, 'employee'::text, 'admin'::text]`),\n]);\n\nexport const rolesInIam = iam.table(\"roles\", {\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tname: jsonb().notNull(),\n\tdescription: jsonb().notNull(),\n\tcode: text().notNull(),\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\tisSystem: boolean(\"is_system\").default(false).notNull(),\n\tisEditable: boolean(\"is_editable\").default(true).notNull(),\n\tisDeletable: boolean(\"is_deletable\").default(true).notNull(),\n}, (table) => [\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"roles_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tunique(\"roles_tenant_code_unique\").on(table.tenantId, table.code),\n\tunique(\"roles_tenant_id_unique\").on(table.tenantId, table.id),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const promptInAi = ai.table(\"prompt\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tmeta: jsonb(),\n\tcode: text().notNull(),\n\tname: jsonb().notNull(),\n\tinstruction: text(),\n}, (table) => [\n\tindex(\"ix_ai_prompt_tenant_created\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.createdAt.desc().nullsFirst().op(\"timestamptz_ops\")),\n\tindex(\"ix_ai_prompt_tenant_id\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"fk_ai_prompt_tenant\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tunique(\"uq_ai_prompt_tenant_code\").on(table.tenantId, table.code),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const promptSystemInAi = ai.table(\"prompt_system\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tmeta: jsonb(),\n\tcode: text().notNull(),\n\tname: jsonb().notNull(),\n\tinstruction: text(),\n}, (table) => [\n\tindex(\"ix_ai_prompt_system_code\").using(\"btree\", table.code.asc().nullsLast().op(\"text_ops\")),\n\tunique(\"uq_ai_prompt_system_code\").on(table.code),\n]);\n\nexport const cvInAi = ai.table(\"cv\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tmeta: jsonb(),\n\tuserId: uuid(\"user_id\").notNull(),\n\tmodel: text(),\n\tcontent: text(),\n\tembedding: vector({ dimensions: 1536 }),\n\tmetadata: jsonb(),\n}, (table) => [\n\tindex(\"ix_ai_cv_embedding_cosine\").using(\"hnsw\", table.embedding.asc().nullsLast().op(\"vector_cosine_ops\")).with({m: \"16\",ef_construction: \"64\"}),\n\tindex(\"ix_ai_cv_tenant_created\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.createdAt.desc().nullsFirst().op(\"timestamptz_ops\")),\n\tindex(\"ix_ai_cv_tenant_id\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")),\n\tindex(\"ix_ai_cv_tenant_user\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"uuid_ops\"), table.userId.asc().nullsLast().op(\"uuid_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"fk_ai_cv_tenant\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"fk_ai_cv_user\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const userRolesInIam = iam.table(\"user_roles\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tuserId: uuid(\"user_id\").notNull(),\n\troleId: uuid(\"role_id\").notNull(),\n}, (table) => [\n\tindex(\"idx_user_roles_tenant_user\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.userId.asc().nullsLast().op(\"uuid_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"user_roles_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.userId],\n\t\t\tforeignColumns: [usersInIam.id],\n\t\t\tname: \"user_roles_user_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId, table.roleId],\n\t\t\tforeignColumns: [rolesInIam.tenantId, rolesInIam.id],\n\t\t\tname: \"user_roles_tenant_role_fkey\"\n\t\t}).onDelete(\"cascade\"),\n\tunique(\"user_roles_tenant_user_role_unique\").on(table.tenantId, table.userId, table.roleId),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n]);\n\nexport const domainsInIam = iam.table(\"domains\", {\n\tid: uuid().default(sql`uuid_generate_v7()`).primaryKey().notNull(),\n\ttenantId: varchar(\"tenant_id\", { length: 30 }).notNull(),\n\tdomain: text().notNull(),\n\tstatus: text().default('pending').notNull(),\n\tmeta: jsonb(),\n\tisPrimary: boolean(\"is_primary\").default(false).notNull(),\n\tcreatedAt: timestamp(\"created_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tupdatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: 'string' }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n\tapp: text(),\n}, (table) => [\n\tuniqueIndex(\"domains_domain_unique_idx\").using(\"btree\", sql`lower(domain)`),\n\tuniqueIndex(\"domains_primary_per_tenant_idx\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\")).where(sql`(is_primary = true)`),\n\tindex(\"domains_tenant_status_idx\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.status.asc().nullsLast().op(\"text_ops\")),\n\tindex(\"idx_domains_tenant_domain_status\").using(\"btree\", table.tenantId.asc().nullsLast().op(\"text_ops\"), table.domain.asc().nullsLast().op(\"text_ops\"), table.status.asc().nullsLast().op(\"text_ops\")),\n\tforeignKey({\n\t\t\tcolumns: [table.tenantId],\n\t\t\tforeignColumns: [tenantsInIam.id],\n\t\t\tname: \"domains_tenant_id_fkey\"\n\t\t}).onUpdate(\"cascade\").onDelete(\"cascade\"),\n\tpgPolicy(\"tenant_isolation\", { as: \"permissive\", for: \"all\", to: [\"public\"], using: sql`((tenant_id)::text = (iam.current_tenant_id())::text)`, withCheck: sql`((tenant_id)::text = (iam.current_tenant_id())::text)` }),\n\tcheck(\"domains_domain_format_check\", sql`domain ~ '^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+$'::text`),\n\tcheck(\"domains_status_check\", sql`status = ANY (ARRAY['PENDING'::text, 'ACTIVE'::text, 'DISABLED'::text, 'DELETED'::text])`),\n]);\n","import { OpenAPIHono } from '@hono/zod-openapi';\nimport routes from './routes';\nimport type { CreateAiRoutesOptions, MesobAi } from './types';\nimport type { AiContext, AiEnv } from './types/context';\n\nconst createAiMiddleware = ({ config, database }: CreateAiRoutesOptions) => {\n return async (c: AiContext, next: () => Promise<void>) => {\n c.set('config', config);\n c.set('database', database);\n await next();\n };\n};\n\nexport const createAiRoutes = (\n opts: CreateAiRoutesOptions,\n): MesobAi['routes'] => {\n const app = new OpenAPIHono<AiEnv>();\n\n app.use('*', createAiMiddleware(opts));\n\n app.route('/', routes);\n\n app.doc('/openapi.json', {\n openapi: '3.0.0',\n info: {\n title: 'Mesob AI API',\n version: '0.4.7',\n },\n });\n\n return app;\n};\n","import { OpenAPIHono } from '@hono/zod-openapi';\nimport type { AiEnv } from '../types/context';\nimport aiFormRoutes from './ai-form/ai-form.route';\n\nconst routes = new OpenAPIHono<AiEnv>().route('/', aiFormRoutes);\n\nexport default routes;\n","import { createRoute, OpenAPIHono } from '@hono/zod-openapi';\nimport type { AiEnv } from '../../types/context';\nimport {\n aiErrorResponseSchema,\n aiFormRequestOpenApiSchema,\n aiFormResponseSchema,\n} from '../ai.schema';\nimport { aiFormHandler } from './handler/ai-form';\n\nexport const aiFormRoute = createRoute({\n method: 'post',\n path: '/ai-form',\n tags: ['AI'],\n summary: 'Generate structured object from prompt and JSON schema',\n request: {\n body: {\n content: {\n 'application/json': {\n schema: aiFormRequestOpenApiSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n description: 'Generated object',\n content: {\n 'application/json': {\n schema: aiFormResponseSchema,\n },\n },\n },\n 400: {\n description: 'Invalid request',\n content: {\n 'application/json': {\n schema: aiErrorResponseSchema,\n },\n },\n },\n 422: {\n description: 'Prompt does not yield extractable structured data',\n content: {\n 'application/json': {\n schema: aiErrorResponseSchema,\n },\n },\n },\n 500: {\n description: 'Generation failed',\n content: {\n 'application/json': {\n schema: aiErrorResponseSchema,\n },\n },\n },\n },\n});\n\nconst aiFormRoutes = new OpenAPIHono<AiEnv>().openapi(\n aiFormRoute,\n aiFormHandler,\n);\n\nexport default aiFormRoutes;\n","import { z } from 'zod';\n\nexport const messageSchema = z.object({\n message: z.string(),\n});\n\nexport const aiErrorResponseSchema = z.object({\n ok: z.literal(false),\n error: z.object({\n code: z.enum([\n 'INVALID_JSON',\n 'INVALID_REQUEST',\n 'INVALID_SCHEMA',\n 'INSUFFICIENT_INPUT',\n 'MODEL_NOT_CONFIGURED',\n 'GENERATION_FAILED',\n ]),\n message: z.string(),\n }),\n});\n\nexport const jsonSchemaObjectSchema = z\n .object({\n type: z.literal('object'),\n })\n .passthrough();\n\nexport const aiFormRequestSchema = z.object({\n prompt: z.string().min(1),\n code: z.string().min(1),\n /** App-supplied facts (user, locale, prior state); optional. */\n context: z.string().max(100_000).optional(),\n count: z.number().int().min(1).max(100).optional(),\n schema: jsonSchemaObjectSchema,\n});\n\nexport const aiFormRequestOpenApiSchema = z.object({\n prompt: z.string().min(1),\n code: z.string().min(1),\n context: z.string().max(100_000).optional(),\n count: z.number().int().min(1).max(100).optional(),\n schema: z\n .object({\n type: z.literal('object'),\n description: z.string().optional(),\n additionalProperties: z.boolean().optional(),\n })\n .passthrough(),\n});\n\nexport const aiFormSuccessSchema = z.object({\n ok: z.literal(true),\n data: z.unknown(),\n});\n\nexport const aiFormResponseSchema = z.union([\n aiFormSuccessSchema,\n aiErrorResponseSchema,\n]);\n","import type { RouteHandler } from '@hono/zod-openapi';\nimport { generateText, jsonSchema, Output } from 'ai';\nimport type { AiFormResponse } from '../../../types';\nimport type { AiEnv } from '../../../types/context';\nimport { refusalPhrasesInValues } from '../../../utils/detect-refusal-in-data';\nimport {\n DEFAULT_OPENAI_MODEL,\n resolveOpenAiModel,\n} from '../../../utils/openai-model';\nimport { HTTP_STATUS_CODE } from '../../../utils/status-code';\nimport { wrapAiFormOutputSchema } from '../../../utils/wrap-ai-form-output-schema';\nimport { aiFormRequestSchema } from '../../ai.schema';\nimport type { aiFormRoute } from '../ai-form.route';\nimport { loadSystemPrompt } from './load-system-prompt';\n\nfunction isWrappedFailure(out: unknown): out is { ok: false; reason: string } {\n return (\n typeof out === 'object' &&\n out !== null &&\n (out as { ok: unknown }).ok === false &&\n typeof (out as { reason?: unknown }).reason === 'string'\n );\n}\n\nfunction isWrappedSuccess(out: unknown): out is { ok: true; data: unknown } {\n return (\n typeof out === 'object' &&\n out !== null &&\n (out as { ok: unknown }).ok === true &&\n 'data' in out\n );\n}\n\nexport const aiFormHandler: RouteHandler<typeof aiFormRoute, AiEnv> = async (\n c,\n) => {\n let requestBody: unknown;\n\n try {\n requestBody = await c.req.json();\n } catch {\n return c.json(\n {\n ok: false,\n error: {\n code: 'INVALID_JSON',\n message: 'Invalid JSON body.',\n },\n },\n HTTP_STATUS_CODE.BAD_REQUEST,\n );\n }\n\n const parsedBody = aiFormRequestSchema.safeParse(requestBody);\n\n if (!parsedBody.success) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'INVALID_REQUEST',\n message: 'prompt, code, and schema are required.',\n },\n },\n HTTP_STATUS_CODE.BAD_REQUEST,\n );\n }\n\n const body = parsedBody.data;\n const config = c.get('config');\n const database = c.get('database');\n const modelResult = resolveOpenAiModel({\n apiKey: config.apiKey,\n model: config.model ?? DEFAULT_OPENAI_MODEL,\n });\n\n if (!modelResult.success) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'MODEL_NOT_CONFIGURED',\n message: modelResult.message,\n },\n },\n HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,\n );\n }\n\n const outputSchema = jsonSchema(\n wrapAiFormOutputSchema(body.schema as Record<string, unknown>, body.count),\n );\n\n const { systemPrompt } = await loadSystemPrompt({\n database,\n code: body.code,\n });\n\n const ctx = body.context?.trim();\n const prompt = [\n systemPrompt\n ? `<SystemPrompt>\\n${systemPrompt}\\n</SystemPrompt>`\n : undefined,\n ctx ? `<Context>\\n${ctx}\\n</Context>` : undefined,\n 'User request:<UserRequest>',\n body.prompt.trim(),\n '</UserRequest>',\n [\n 'Respond with a JSON object matching the wrapper schema.',\n 'Always include ok, data, and reason keys.',\n 'If ok is true, set reason to empty string and set data to the generated value.',\n typeof body.count === 'number'\n ? `Generate exactly ${body.count} items in data array.`\n : undefined,\n 'If the user or context or system prompt text does not contain enough concrete facts to fill required fields with real values taken from their words, set ok to false, explain in reason, and set data to null.',\n 'Never use Unknown, N/A, placeholder strings, or fabricated values to satisfy the inner data schema.',\n ].join(' '),\n ]\n .filter(Boolean)\n .join('\\n\\n');\n\n try {\n const result = await generateText({\n model: modelResult.model,\n prompt,\n output: Output.object({\n schema: outputSchema,\n }),\n });\n\n const out = result.output;\n\n if (isWrappedFailure(out)) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'INSUFFICIENT_INPUT',\n message: out.reason,\n },\n },\n HTTP_STATUS_CODE.UNPROCESSABLE_ENTITY,\n );\n }\n\n if (!isWrappedSuccess(out)) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'GENERATION_FAILED',\n message: 'Unexpected model output shape.',\n },\n },\n HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,\n );\n }\n\n if (refusalPhrasesInValues(out.data)) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'INSUFFICIENT_INPUT',\n message:\n 'Model output describes missing or nonsensical input instead of extracted data.',\n },\n },\n HTTP_STATUS_CODE.UNPROCESSABLE_ENTITY,\n );\n }\n\n return c.json(\n {\n ok: true,\n data: out.data,\n } satisfies AiFormResponse<unknown>,\n HTTP_STATUS_CODE.OK,\n );\n } catch (error) {\n return c.json(\n {\n ok: false,\n error: {\n code: 'GENERATION_FAILED',\n message:\n error instanceof Error\n ? error.message\n : 'Object generation failed.',\n },\n },\n HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,\n );\n }\n};\n","const REFUSAL_PHRASES = [\n 'does not provide enough information',\n 'does not contain enough',\n 'insufficient data',\n 'insufficient information',\n 'nonsensical',\n 'not enough information',\n 'placeholder',\n 'unable to extract',\n 'no meaningful',\n 'no profile information',\n] as const;\n\n/** Whole-value placeholders the model must not use instead of ok:false. */\nconst PLACEHOLDER_EXACT = new Set([\n 'unknown',\n 'n/a',\n 'na',\n 'tbd',\n 'none',\n 'null',\n 'undefined',\n 'not applicable',\n 'not available',\n 'unspecified',\n]);\n\nfunction stringLooksLikeRefusalOrPlaceholder(s: string): boolean {\n const low = s.toLowerCase();\n if (REFUSAL_PHRASES.some((p) => low.includes(p))) {\n return true;\n }\n const t = s.trim().toLowerCase();\n return PLACEHOLDER_EXACT.has(t);\n}\n\nexport function refusalPhrasesInValues(data: unknown): boolean {\n const walk = (v: unknown): boolean => {\n if (typeof v === 'string') {\n return stringLooksLikeRefusalOrPlaceholder(v);\n }\n if (Array.isArray(v)) {\n return v.some(walk);\n }\n if (v && typeof v === 'object') {\n return Object.values(v).some(walk);\n }\n return false;\n };\n return walk(data);\n}\n","import { createOpenAI } from '@ai-sdk/openai';\n\nexport const DEFAULT_OPENAI_MODEL = 'gpt-5.4-mini';\n\nexport type ResolvedOpenAiModel = ReturnType<ReturnType<typeof createOpenAI>>;\n\nexport type OpenAiModelResult =\n | {\n success: true;\n model: ResolvedOpenAiModel;\n }\n | {\n success: false;\n message: string;\n };\n\nexport function resolveOpenAiModel(args: {\n apiKey?: string;\n model?: string;\n}): OpenAiModelResult {\n const apiKey = args.apiKey?.trim();\n if (!apiKey) {\n return {\n success: false,\n message: 'OpenAI API key is not configured.',\n };\n }\n\n const modelId = args.model?.trim() || DEFAULT_OPENAI_MODEL;\n const openai = createOpenAI({ apiKey });\n\n return {\n success: true,\n model: openai(modelId),\n };\n}\n","export const HTTP_STATUS_CODE = {\n OK: 200,\n BAD_REQUEST: 400,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n} as const;\n","type JsonSchemaObject = Record<string, unknown>;\n\n/** Wraps caller schema so model can refuse when input is not extractable. */\nexport function wrapAiFormOutputSchema(\n userSchema: JsonSchemaObject,\n count?: number,\n): JsonSchemaObject {\n const { $schema: _schema, $id: _id, ...itemSchema } = userSchema;\n\n const dataSchema =\n typeof count === 'number'\n ? {\n type: 'array',\n minItems: count,\n maxItems: count,\n items: itemSchema,\n }\n : itemSchema;\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n ok: { type: 'boolean' },\n data: {\n anyOf: [dataSchema, { type: 'null' }],\n },\n reason: { type: 'string' },\n },\n required: ['ok', 'data', 'reason'],\n };\n}\n","import { eq } from 'drizzle-orm';\nimport { promptSystemInAi } from '../schema';\nimport type { FetchSystemPromptByCodeParams } from './types';\n\nexport type SystemPrompt = {\n id: string;\n code: string;\n instruction: string | null;\n};\n\nexport const fetchSystemPromptByCode = async ({\n database,\n code,\n}: FetchSystemPromptByCodeParams): Promise<SystemPrompt | null> => {\n const [prompt] = await database\n .select({\n id: promptSystemInAi.id,\n code: promptSystemInAi.code,\n instruction: promptSystemInAi.instruction,\n })\n .from(promptSystemInAi)\n .where(eq(promptSystemInAi.code, code))\n .limit(1);\n\n return prompt || null;\n};\n","import type { Database } from '../../../db';\nimport { fetchSystemPromptByCode } from '../../../db/orm/prompt';\n\nexport async function loadSystemPrompt(args: {\n code: string;\n database?: Database;\n}): Promise<{ systemPrompt: string }> {\n if (!args.database) {\n return {\n systemPrompt: '',\n };\n }\n\n try {\n const prompt = await fetchSystemPromptByCode({\n database: args.database,\n code: args.code,\n });\n\n return {\n systemPrompt: prompt?.instruction?.trim() || '',\n };\n } catch (_error) {\n return {\n systemPrompt: '',\n };\n }\n}\n","import type { Database } from './db';\nimport { createDatabase as createDatabaseInternal } from './db';\nimport { createAiRoutes } from './handler';\nimport type { AiConfig, MesobAi } from './types';\n\nexport type { Database } from './db';\nexport { createDatabase } from './db';\nexport type { AiConfig, MesobAi } from './types';\n\nconst defaultConfig = {\n model: 'gpt-5.4-mini',\n basePath: '/api/ai',\n} satisfies Partial<AiConfig>;\n\nexport const createMesobAi = (config: AiConfig = {}): MesobAi => {\n const merged = { ...defaultConfig, ...config };\n const database: Database | undefined = merged.connectionString\n ? createDatabaseInternal(merged.connectionString)\n : undefined;\n const routes = createAiRoutes({\n config: merged,\n database,\n });\n return { routes, database };\n};\n"],"mappings":"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","names":["OpenAPIHono","OpenAPIHono","OpenAPIHono","OpenAPIHono","routes"]}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@mesob/ai-hono",
3
+ "version": "0.5.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "@ai-sdk/openai": "^3.0.23",
19
+ "@hono/zod-openapi": "^1.2.0",
20
+ "ai": "^6.0.0",
21
+ "drizzle-orm": "^0.44.4",
22
+ "hono": "^4.11.3",
23
+ "pg": "^8.16.3",
24
+ "zod": "^4.3.6",
25
+ "@mesob/auth-hono": "0.5.0",
26
+ "@mesob/common": "0.5.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20",
30
+ "@types/pg": "^8.15.6",
31
+ "drizzle-kit": "^0.31.7",
32
+ "tsup": "^8.5.0",
33
+ "typescript": "^5.7.2"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "scripts": {
39
+ "build": "tsup",
40
+ "dev": "tsup --watch",
41
+ "lint": "biome check --write .",
42
+ "db:introspect": "drizzle-kit introspect --config=./drizzle.config.ts && drizzle-kit drop",
43
+ "postdb:introspect": "node -e \"require('node:fs').rmSync('src/db/relations.ts',{force:true})\" && biome format --write './src/db/schema.ts'",
44
+ "check-types": "tsc --noEmit"
45
+ }
46
+ }