@happyvertical/smrt-users 0.39.13 → 0.39.15
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/AGENTS.md +56 -1
- package/README.md +134 -1
- package/dist/chunks/{TerminalAuthService-B5U0hvzu.js → TerminalAuthService-CpLKHLl5.js} +288 -29
- package/dist/chunks/TerminalAuthService-CpLKHLl5.js.map +1 -0
- package/dist/collections/UserCollection.d.ts +75 -2
- package/dist/collections/UserCollection.d.ts.map +1 -1
- package/dist/collections/index.d.ts +1 -1
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/manifest.json +64 -38
- package/dist/migrations/backfillUserEmailKeys.d.ts +31 -0
- package/dist/migrations/backfillUserEmailKeys.d.ts.map +1 -0
- package/dist/models/User.d.ts +4 -0
- package/dist/models/User.d.ts.map +1 -1
- package/dist/services/OidcLoginService.d.ts +7 -1
- package/dist/services/OidcLoginService.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +15 -8
- package/dist/sveltekit/index.d.ts +8 -0
- package/dist/sveltekit/index.d.ts.map +1 -1
- package/dist/sveltekit.js +3 -4
- package/dist/sveltekit.js.map +1 -1
- package/package.json +11 -11
- package/dist/chunks/TerminalAuthService-B5U0hvzu.js.map +0 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ObjectRegistry, SmrtCollection, SmrtObject, crossPackageRef, field, findManifestEntryByQualifiedName, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
2
2
|
import { AccessRequestStatus, MembershipStatus, OverrideEffect, SessionStatus, TenantPermissionEffect, TenantStatus, UserStatus } from "@happyvertical/smrt-types";
|
|
3
|
+
import { AmbiguousOidcIdentityError, OidcIdentity, OidcIdentityCollection, normalizeIdentityEmail } from "@happyvertical/smrt-profiles";
|
|
3
4
|
import { getPackageConfig } from "@happyvertical/smrt-config";
|
|
5
|
+
import { withSystemContext } from "@happyvertical/smrt-tenancy";
|
|
6
|
+
import { BackfillTracker } from "@happyvertical/smrt-core/migrations";
|
|
7
|
+
import { coordinateOidcProvisioning, createOidcProvisioningPerson, insertOidcProvisioningIdentity, isOidcProvisioningRaceConflict, saveOidcRaceArbiter } from "@happyvertical/smrt-profiles/internal/oidc-provisioning";
|
|
4
8
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
9
|
import { createHash, randomBytes } from "node:crypto";
|
|
6
10
|
//#region \0rolldown/runtime.js
|
|
@@ -16,7 +20,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
16
20
|
};
|
|
17
21
|
//#endregion
|
|
18
22
|
//#region src/__smrt-register__.ts
|
|
19
|
-
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783987332169,\"packageName\":\"@happyvertical/smrt-users\",\"packageVersion\":\"0.39.13\",\"objects\":{\"@happyvertical/smrt-users:AccessRequestCollection\":{\"name\":\"accessrequestcollection\",\"className\":\"AccessRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:AccessRequestCollection\",\"collection\":\"accessrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/AccessRequestCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByEmail\":{\"name\":\"findByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpenByEmail\":{\"name\":\"findOpenByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"AccessRequestStatus\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"access_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"AccessRequest\",\"exportName\":\"AccessRequestCollection\",\"collectionExportName\":\"AccessRequestCollectionCollection\",\"schema\":{\"tableName\":\"access_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"access_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"access_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"c7691cc2\"}},\"@happyvertical/smrt-users:UsersCliAuthRequestCollection\":{\"name\":\"userscliauthrequestcollection\",\"className\":\"UsersCliAuthRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersCliAuthRequestCollection\",\"collection\":\"userscliauthrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/CliAuthRequestCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByUserCode\":{\"name\":\"findByUserCode\",\"async\":true,\"parameters\":[{\"name\":\"userCode\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersCliAuthRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findByDeviceCodeHash\":{\"name\":\"findByDeviceCodeHash\",\"async\":true,\"parameters\":[{\"name\":\"deviceCodeHash\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersCliAuthRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_cli_auth_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"UsersCliAuthRequest\",\"exportName\":\"UsersCliAuthRequestCollection\",\"collectionExportName\":\"UsersCliAuthRequestCollectionCollection\",\"schema\":{\"tableName\":\"users_cli_auth_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_cli_auth_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"users_cli_auth_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_cli_auth_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0e072f3a\"}},\"@happyvertical/smrt-users:GroupCollection\":{\"name\":\"groupcollection\",\"className\":\"GroupCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupCollection\",\"collection\":\"groups\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/GroupCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Group[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Group | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Group\",\"exportName\":\"GroupCollection\",\"collectionExportName\":\"GroupCollectionCollection\",\"schema\":{\"tableName\":\"group_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"10e23765\"}},\"@happyvertical/smrt-users:GroupMemberCollection\":{\"name\":\"groupmembercollection\",\"className\":\"GroupMemberCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupMemberCollection\",\"collection\":\"groupmembers\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/GroupMemberCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByGroup\":{\"name\":\"findByGroup\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember[]>\",\"isStatic\":false,\"isPublic\":true},\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember[]>\",\"isStatic\":false,\"isPublic\":true},\"isMember\":{\"name\":\"isMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addMember\":{\"name\":\"addMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember>\",\"isStatic\":false,\"isPublic\":true},\"removeMember\":{\"name\":\"removeMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getGroupIds\":{\"name\":\"getGroupIds\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getGroupIdsForTenant\":{\"name\":\"getGroupIdsForTenant\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getUserIds\":{\"name\":\"getUserIds\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"GroupMember\",\"exportName\":\"GroupMemberCollection\",\"collectionExportName\":\"GroupMemberCollectionCollection\",\"schema\":{\"tableName\":\"group_member_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_member_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_member_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_member_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f61e9ad6\"}},\"@happyvertical/smrt-users:GroupRoleCollection\":{\"name\":\"grouprolecollection\",\"className\":\"GroupRoleCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupRoleCollection\",\"collection\":\"grouproles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/GroupRoleCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByGroup\":{\"name\":\"findByGroup\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole[]>\",\"isStatic\":false,\"isPublic\":true},\"hasRole\":{\"name\":\"hasRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addRole\":{\"name\":\"addRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole>\",\"isStatic\":false,\"isPublic\":true},\"removeRole\":{\"name\":\"removeRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getRoleIds\":{\"name\":\"getRoleIds\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"GroupRole\",\"exportName\":\"GroupRoleCollection\",\"collectionExportName\":\"GroupRoleCollectionCollection\",\"schema\":{\"tableName\":\"group_role_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_role_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_role_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_role_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"33fdaf49\"}},\"@happyvertical/smrt-users:UsersMagicLinkTokenCollection\":{\"name\":\"usersmagiclinktokencollection\",\"className\":\"UsersMagicLinkTokenCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersMagicLinkTokenCollection\",\"collection\":\"usersmagiclinktokens\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/MagicLinkTokenCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByNonce\":{\"name\":\"findByNonce\",\"async\":true,\"parameters\":[{\"name\":\"nonce\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersMagicLinkToken | null>\",\"isStatic\":false,\"isPublic\":true},\"markUsed\":{\"name\":\"markUsed\",\"async\":true,\"parameters\":[{\"name\":\"nonce\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_magic_link_tokens\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"UsersMagicLinkToken\",\"exportName\":\"UsersMagicLinkTokenCollection\",\"collectionExportName\":\"UsersMagicLinkTokenCollectionCollection\",\"schema\":{\"tableName\":\"users_magic_link_tokens\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_magic_link_tokens\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"users_magic_link_tokens_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_magic_link_tokens_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a8c021f9\"}},\"@happyvertical/smrt-users:MembershipCollection\":{\"name\":\"membershipcollection\",\"className\":\"MembershipCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipCollection\",\"collection\":\"memberships\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/MembershipCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findActiveByUser\":{\"name\":\"findActiveByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findActiveByTenant\":{\"name\":\"findActiveByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByUserAndTenant\":{\"name\":\"findByUserAndTenant\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership | null>\",\"isStatic\":false,\"isPublic\":true},\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"MembershipStatus\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Membership\",\"exportName\":\"MembershipCollection\",\"collectionExportName\":\"MembershipCollectionCollection\",\"schema\":{\"tableName\":\"membership_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"membership_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"8a2577ba\"}},\"@happyvertical/smrt-users:MembershipOverrideCollection\":{\"name\":\"membershipoverridecollection\",\"className\":\"MembershipOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipOverrideCollection\",\"collection\":\"membershipoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/MembershipOverrideCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByMembership\":{\"name\":\"findByMembership\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findGrants\":{\"name\":\"findGrants\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findDenies\":{\"name\":\"findDenies\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"getGrantedPermissionIds\":{\"name\":\"getGrantedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getDeniedPermissionIds\":{\"name\":\"getDeniedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"OverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"grantPermission\":{\"name\":\"grantPermission\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true},\"denyPermission\":{\"name\":\"denyPermission\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"MembershipOverride\",\"exportName\":\"MembershipOverrideCollection\",\"collectionExportName\":\"MembershipOverrideCollectionCollection\",\"schema\":{\"tableName\":\"membership_override_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_override_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"membership_override_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_override_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"43ccd4cb\"}},\"@happyvertical/smrt-users:PermissionCollection\":{\"name\":\"permissioncollection\",\"className\":\"PermissionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:PermissionCollection\",\"collection\":\"permissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/PermissionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByCategory\":{\"name\":\"findByCategory\",\"async\":true,\"parameters\":[{\"name\":\"category\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Permission[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Permission | null>\",\"isStatic\":false,\"isPublic\":true},\"findByIds\":{\"name\":\"findByIds\",\"async\":true,\"parameters\":[{\"name\":\"ids\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, Permission>>\",\"isStatic\":false,\"isPublic\":true},\"getCategories\":{\"name\":\"getCategories\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"findOrCreate\":{\"name\":\"findOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"defaults\",\"type\":\"Partial<object>\",\"optional\":true}],\"returnType\":\"Promise<Permission>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Permission\",\"exportName\":\"PermissionCollection\",\"collectionExportName\":\"PermissionCollectionCollection\",\"schema\":{\"tableName\":\"permission_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"permission_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"permission_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"permission_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"fc443bec\"}},\"@happyvertical/smrt-users:RoleCollection\":{\"name\":\"rolecollection\",\"className\":\"RoleCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:RoleCollection\",\"collection\":\"roles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/RoleCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findSystemRoles\":{\"name\":\"findSystemRoles\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findTenantRoles\":{\"name\":\"findTenantRoles\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Role | null>\",\"isStatic\":false,\"isPublic\":true},\"seedSystemRoles\":{\"name\":\"seedSystemRoles\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SeedSystemRolesOptions\",\"optional\":true}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Role\",\"exportName\":\"RoleCollection\",\"collectionExportName\":\"RoleCollectionCollection\",\"schema\":{\"tableName\":\"role_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"role_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"b6b325e0\"}},\"@happyvertical/smrt-users:RolePermissionCollection\":{\"name\":\"rolepermissioncollection\",\"className\":\"RolePermissionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:RolePermissionCollection\",\"collection\":\"rolepermissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/RolePermissionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPermission\":{\"name\":\"findByPermission\",\"async\":true,\"parameters\":[{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission[]>\",\"isStatic\":false,\"isPublic\":true},\"hasPermission\":{\"name\":\"hasPermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addPermission\":{\"name\":\"addPermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission>\",\"isStatic\":false,\"isPublic\":true},\"removePermission\":{\"name\":\"removePermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getPermissionIds\":{\"name\":\"getPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"seedRolePermissions\":{\"name\":\"seedRolePermissions\",\"async\":true,\"parameters\":[{\"name\":\"matrix\",\"type\":\"RolePermissionPatternMatrix\",\"optional\":true},{\"name\":\"options\",\"type\":\"SeedRolePermissionsOptions\",\"optional\":true}],\"returnType\":\"Promise<SeedRolePermissionsResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"RolePermission\",\"exportName\":\"RolePermissionCollection\",\"collectionExportName\":\"RolePermissionCollectionCollection\",\"schema\":{\"tableName\":\"role_permission_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_permission_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"role_permission_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_permission_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"b4ec602b\"}},\"@happyvertical/smrt-users:SessionCollection\":{\"name\":\"sessioncollection\",\"className\":\"SessionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:SessionCollection\",\"collection\":\"sessions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/SessionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"createSession\":{\"name\":\"createSession\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"CreateSessionOptions\",\"optional\":false}],\"returnType\":\"Promise<Session>\",\"isStatic\":false,\"isPublic\":true},\"findValidSession\":{\"name\":\"findValidSession\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Session | null>\",\"isStatic\":false,\"isPublic\":true},\"touch\":{\"name\":\"touch\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"extendTtl\",\"type\":\"boolean\",\"optional\":true},{\"name\":\"ttl\",\"type\":\"number\",\"optional\":true}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Session[]>\",\"isStatic\":false,\"isPublic\":true},\"deleteUserSessions\":{\"name\":\"deleteUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"revokeUserSessions\":{\"name\":\"revokeUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"revokeSession\":{\"name\":\"revokeSession\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"countUserSessions\":{\"name\":\"countUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"setSessionTenant\":{\"name\":\"setSessionTenant\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"setSessionData\":{\"name\":\"setSessionData\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getSessionData\":{\"name\":\"getSessionData\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<T | undefined>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Session\",\"exportName\":\"SessionCollection\",\"collectionExportName\":\"SessionCollectionCollection\",\"schema\":{\"tableName\":\"session_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"session_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"session_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"session_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ec13164c\"}},\"@happyvertical/smrt-users:TenantCollection\":{\"name\":\"tenantcollection\",\"className\":\"TenantCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantCollection\",\"collection\":\"tenants\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/TenantCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"TenantStatus\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant | null>\",\"isStatic\":false,\"isPublic\":true},\"findRoots\":{\"name\":\"findRoots\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findChildren\":{\"name\":\"findChildren\",\"async\":true,\"parameters\":[{\"name\":\"parentTenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findParent\":{\"name\":\"findParent\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant | null>\",\"isStatic\":false,\"isPublic\":true},\"getAncestors\":{\"name\":\"getAncestors\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getAncestorsFromRoot\":{\"name\":\"getAncestorsFromRoot\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getDescendants\":{\"name\":\"getDescendants\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getSiblings\":{\"name\":\"getSiblings\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"isAncestorOf\":{\"name\":\"isAncestorOf\",\"async\":true,\"parameters\":[{\"name\":\"potentialAncestorId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isDescendantOf\":{\"name\":\"isDescendantOf\",\"async\":true,\"parameters\":[{\"name\":\"potentialDescendantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"createChild\":{\"name\":\"createChild\",\"async\":true,\"parameters\":[{\"name\":\"parentTenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"CreateChildTenantOptions\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"moveToParent\":{\"name\":\"moveToParent\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"newParentId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"makeRoot\":{\"name\":\"makeRoot\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"validateHierarchy\":{\"name\":\"validateHierarchy\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getTree\":{\"name\":\"getTree\",\"async\":true,\"parameters\":[{\"name\":\"rootTenantId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Array>\",\"isStatic\":false,\"isPublic\":true},\"create\":{\"name\":\"create\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SmrtCreateInput<Tenant>\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Tenant\",\"exportName\":\"TenantCollection\",\"collectionExportName\":\"TenantCollectionCollection\",\"schema\":{\"tableName\":\"tenant_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"bcfa1eef\"}},\"@happyvertical/smrt-users:TenantIntegrationCollection\":{\"name\":\"tenantintegrationcollection\",\"className\":\"TenantIntegrationCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantIntegrationCollection\",\"collection\":\"tenantintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/TenantIntegrationCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"listForTenant\":{\"name\":\"listForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration[]>\",\"isStatic\":false,\"isPublic\":true},\"findFor\":{\"name\":\"findFor\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"provider\",\"type\":\"TenantIntegrationProvider\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration | null>\",\"isStatic\":false,\"isPublic\":true},\"findOrInit\":{\"name\":\"findOrInit\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"provider\",\"type\":\"TenantIntegrationProvider\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"tenant_integrations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"TenantIntegration\",\"exportName\":\"TenantIntegrationCollection\",\"collectionExportName\":\"TenantIntegrationCollectionCollection\",\"schema\":{\"tableName\":\"tenant_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_integrations\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_integrations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a3261f8f\"}},\"@happyvertical/smrt-users:TenantPermissionOverrideCollection\":{\"name\":\"tenantpermissionoverridecollection\",\"className\":\"TenantPermissionOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantPermissionOverrideCollection\",\"collection\":\"tenantpermissionoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/TenantPermissionOverrideCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findGrants\":{\"name\":\"findGrants\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findDenies\":{\"name\":\"findDenies\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findInherits\":{\"name\":\"findInherits\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"getGrantedPermissionIds\":{\"name\":\"getGrantedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getDeniedPermissionIds\":{\"name\":\"getDeniedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getOverridesByEffect\":{\"name\":\"getOverridesByEffect\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverrideResult>\",\"isStatic\":false,\"isPublic\":true},\"getOverridesByEffectBatch\":{\"name\":\"getOverridesByEffectBatch\",\"async\":true,\"parameters\":[{\"name\":\"tenantIds\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, TenantPermissionOverrideResult>>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"TenantPermissionEffect\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"removeAllOverrides\":{\"name\":\"removeAllOverrides\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"grantPermission\":{\"name\":\"grantPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"denyPermission\":{\"name\":\"denyPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"inheritPermission\":{\"name\":\"inheritPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"bulkSetOverrides\":{\"name\":\"bulkSetOverrides\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"overrides\",\"type\":\"Array<object>\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"copyOverrides\":{\"name\":\"copyOverrides\",\"async\":true,\"parameters\":[{\"name\":\"fromTenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"toTenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"TenantPermissionOverride\",\"exportName\":\"TenantPermissionOverrideCollection\",\"collectionExportName\":\"TenantPermissionOverrideCollectionCollection\",\"schema\":{\"tableName\":\"tenant_permission_override_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_permission_override_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_permission_override_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_permission_override_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e6b5a0b6\"}},\"@happyvertical/smrt-users:UserCollection\":{\"name\":\"usercollection\",\"className\":\"UserCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UserCollection\",\"collection\":\"users\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/collections/UserCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByEmail\":{\"name\":\"findByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<User | null>\",\"isStatic\":false,\"isPublic\":true},\"findByProfile\":{\"name\":\"findByProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<User | null>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"UserStatus\",\"optional\":false}],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"findPending\":{\"name\":\"findPending\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreateForProfile\":{\"name\":\"getOrCreateForProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false},{\"name\":\"email\",\"type\":\"string\",\"optional\":false},{\"name\":\"defaults\",\"type\":\"Partial<object>\",\"optional\":true}],\"returnType\":\"Promise<User>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreateFromOidc\":{\"name\":\"getOrCreateFromOidc\",\"async\":true,\"parameters\":[{\"name\":\"claims\",\"type\":\"OidcClaims\",\"optional\":false},{\"name\":\"provider\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"GetOrCreateFromOidcOptions\",\"optional\":true}],\"returnType\":\"Promise<OidcIdentityResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"User\",\"exportName\":\"UserCollection\",\"collectionExportName\":\"UserCollectionCollection\",\"schema\":{\"tableName\":\"user_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"user_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"user_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"user_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"539fdcc8\"}},\"@happyvertical/smrt-users:AccessRequest\":{\"name\":\"accessrequest\",\"className\":\"AccessRequest\",\"qualifiedName\":\"@happyvertical/smrt-users:AccessRequest\",\"collection\":\"accessrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/AccessRequest.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"email\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"indexed\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"indexed\":true}},\"source\":{\"type\":\"text\",\"required\":false,\"default\":\"\",\"_meta\":{\"indexed\":true}},\"requestContext\":{\"type\":\"text\",\"required\":false,\"default\":\"{}\"},\"note\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"requestedAt\":{\"type\":\"datetime\",\"required\":false},\"decidedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"decidedBy\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultingUserId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"tenantHint\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"getRequestContext\":{\"name\":\"getRequestContext\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRequestContext\":{\"name\":\"setRequestContext\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTenantHint\":{\"name\":\"getTenantHint\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string> | null\",\"isStatic\":false,\"isPublic\":true},\"setTenantHint\":{\"name\":\"setTenantHint\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string> | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isOpen\":{\"name\":\"isOpen\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isApproved\":{\"name\":\"isApproved\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isTerminal\":{\"name\":\"isTerminal\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"access_requests\",\"conflictColumns\":[\"id\"],\"api\":{\"include\":[]},\"mcp\":{\"include\":[]},\"cli\":{\"include\":[]}},\"extends\":\"SmrtObject\",\"exportName\":\"AccessRequest\",\"collectionExportName\":\"AccessRequestCollection\",\"validationRules\":[{\"field\":\"email\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"access_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"access_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"email\\\" TEXT NOT NULL DEFAULT '',\\n \\\"name\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"source\\\" TEXT DEFAULT '',\\n \\\"request_context\\\" TEXT DEFAULT '{}',\\n \\\"note\\\" TEXT,\\n \\\"requested_at\\\" TIMESTAMP,\\n \\\"decided_at\\\" TIMESTAMP,\\n \\\"decided_by\\\" TEXT,\\n \\\"resulting_user_id\\\" TEXT,\\n \\\"tenant_hint\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"email\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"request_context\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"{}\"},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"requested_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"decided_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"decided_by\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resulting_user_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tenant_hint\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"],\"unique\":true},{\"name\":\"access_requests_email_idx\",\"columns\":[\"email\"]},{\"name\":\"access_requests_status_idx\",\"columns\":[\"status\"]},{\"name\":\"access_requests_source_idx\",\"columns\":[\"source\"]}],\"version\":\"f396996f\"}},\"@happyvertical/smrt-users:UsersCliAuthRequest\":{\"name\":\"userscliauthrequest\",\"className\":\"UsersCliAuthRequest\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersCliAuthRequest\",\"collection\":\"userscliauthrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/CliAuthRequest.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userCode\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"deviceCodeHash\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"userId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sessionId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"expiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{}},\"approvedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"users_cli_auth_requests\",\"api\":{\"include\":[]},\"cli\":{\"include\":[]},\"mcp\":{\"include\":[]}},\"extends\":\"SmrtObject\",\"exportName\":\"UsersCliAuthRequest\",\"collectionExportName\":\"UsersCliAuthRequestCollection\",\"schema\":{\"tableName\":\"users_cli_auth_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_cli_auth_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_code\\\" TEXT,\\n \\\"device_code_hash\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"user_id\\\" TEXT,\\n \\\"tenant_id\\\" TEXT,\\n \\\"session_id\\\" TEXT,\\n \\\"expires_at\\\" TIMESTAMP,\\n \\\"approved_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_code\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"device_code_hash\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"user_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tenant_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"session_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"approved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_cli_auth_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_cli_auth_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d994ea55\"}},\"@happyvertical/smrt-users:Group\":{\"name\":\"group\",\"className\":\"Group\",\"qualifiedName\":\"@happyvertical/smrt-users:Group\",\"collection\":\"groups\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Group.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Group\",\"collectionExportName\":\"GroupCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"groups\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"groups\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"groups_id_idx\",\"columns\":[\"id\"]},{\"name\":\"groups_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"5a6913b2\"}},\"@happyvertical/smrt-users:GroupMember\":{\"name\":\"groupmember\",\"className\":\"GroupMember\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupMember\",\"collection\":\"groupmembers\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/GroupMember.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"groupId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Group\",\"_meta\":{\"required\":true}},\"userId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"User\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"GroupMember\",\"collectionExportName\":\"GroupMemberCollection\",\"validationRules\":[{\"field\":\"groupId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"userId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"group_members\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_members\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"group_id\\\" UUID NOT NULL,\\n \\\"user_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"group_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"group_members_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_members_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"77f49385\"}},\"@happyvertical/smrt-users:GroupRole\":{\"name\":\"grouprole\",\"className\":\"GroupRole\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupRole\",\"collection\":\"grouproles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/GroupRole.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"groupId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Group\",\"_meta\":{\"required\":true}},\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"GroupRole\",\"collectionExportName\":\"GroupRoleCollection\",\"validationRules\":[{\"field\":\"groupId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"group_roles\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_roles\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"group_id\\\" UUID NOT NULL,\\n \\\"role_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"group_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"group_roles_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_roles_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"75d06c96\"}},\"@happyvertical/smrt-users:UsersMagicLinkToken\":{\"name\":\"usersmagiclinktoken\",\"className\":\"UsersMagicLinkToken\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersMagicLinkToken\",\"collection\":\"usersmagiclinktokens\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/MagicLinkToken.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"nonce\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"unique\":true}},\"email\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"used\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"expiresAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"isExpired\":{\"name\":\"isExpired\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isValid\":{\"name\":\"isValid\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_magic_link_tokens\",\"api\":{\"include\":[]},\"mcp\":{\"include\":[]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"UsersMagicLinkToken\",\"collectionExportName\":\"UsersMagicLinkTokenCollection\",\"validationRules\":[{\"field\":\"nonce\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"users_magic_link_tokens\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_magic_link_tokens\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"nonce\\\" TEXT NOT NULL UNIQUE DEFAULT '',\\n \\\"email\\\" TEXT DEFAULT '',\\n \\\"used\\\" BOOLEAN DEFAULT FALSE,\\n \\\"expires_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"nonce\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":true,\"default\":\"\"},\"email\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"used\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_magic_link_tokens_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_magic_link_tokens_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"537853d3\"}},\"@happyvertical/smrt-users:Membership\":{\"name\":\"membership\",\"className\":\"Membership\",\"qualifiedName\":\"@happyvertical/smrt-users:Membership\",\"collection\":\"memberships\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Membership.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"User\",\"_meta\":{\"required\":true}},\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Membership\",\"collectionExportName\":\"MembershipCollection\",\"validationRules\":[{\"field\":\"userId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"memberships\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"memberships\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_id\\\" UUID NOT NULL,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"role_id\\\" UUID NOT NULL,\\n \\\"status\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"memberships_id_idx\",\"columns\":[\"id\"]},{\"name\":\"memberships_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"23fdb25d\"}},\"@happyvertical/smrt-users:MembershipOverride\":{\"name\":\"membershipoverride\",\"className\":\"MembershipOverride\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipOverride\",\"collection\":\"membershipoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/MembershipOverride.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"membershipId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Membership\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}},\"effect\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isGrant\":{\"name\":\"isGrant\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDeny\":{\"name\":\"isDeny\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"MembershipOverride\",\"collectionExportName\":\"MembershipOverrideCollection\",\"validationRules\":[{\"field\":\"membershipId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"membership_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"membership_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"membership_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"membership_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ab60f8f9\"}},\"@happyvertical/smrt-users:Permission\":{\"name\":\"permission\",\"className\":\"Permission\",\"qualifiedName\":\"@happyvertical/smrt-users:Permission\",\"collection\":\"permissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Permission.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"category\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"parseSlug\":{\"name\":\"parseSlug\",\"async\":false,\"parameters\":[],\"returnType\":\"ParsedPermissionSlug\",\"isStatic\":false,\"isPublic\":true},\"getResource\":{\"name\":\"getResource\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"getAction\":{\"name\":\"getAction\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"isValidSlug\":{\"name\":\"isValidSlug\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Permission\",\"collectionExportName\":\"PermissionCollection\",\"schema\":{\"tableName\":\"permissions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"permissions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"category\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"category\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"permissions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"permissions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"4c81b2af\"}},\"@happyvertical/smrt-users:Role\":{\"name\":\"role\",\"className\":\"Role\",\"qualifiedName\":\"@happyvertical/smrt-users:Role\",\"collection\":\"roles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Role.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"isSystem\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"inheritsToDescendants\":{\"type\":\"boolean\",\"required\":false,\"default\":false}},\"methods\":{\"isSystemRole\":{\"name\":\"isSystemRole\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isTenantRole\":{\"name\":\"isTenantRole\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"canDelete\":{\"name\":\"canDelete\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Role\",\"collectionExportName\":\"RoleCollection\",\"schema\":{\"tableName\":\"roles\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"roles\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"is_system\\\" BOOLEAN DEFAULT FALSE,\\n \\\"inherits_to_descendants\\\" BOOLEAN DEFAULT FALSE\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"is_system\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"inherits_to_descendants\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false}},\"indexes\":[{\"name\":\"roles_id_idx\",\"columns\":[\"id\"]},{\"name\":\"roles_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"6c08582e\"}},\"@happyvertical/smrt-users:RolePermission\":{\"name\":\"rolepermission\",\"className\":\"RolePermission\",\"qualifiedName\":\"@happyvertical/smrt-users:RolePermission\",\"collection\":\"rolepermissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/RolePermission.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"RolePermission\",\"collectionExportName\":\"RolePermissionCollection\",\"validationRules\":[{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"role_permissions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_permissions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"role_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"role_permissions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_permissions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"453cc12c\"}},\"@happyvertical/smrt-users:Session\":{\"name\":\"session\",\"className\":\"Session\",\"qualifiedName\":\"@happyvertical/smrt-users:Session\",\"collection\":\"sessions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Session.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"User\"},\"tenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"expiresAt\":{\"type\":\"datetime\",\"required\":false},\"userAgent\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"ipAddress\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"lastAccessedAt\":{\"type\":\"datetime\",\"required\":false},\"data\":{\"type\":\"json\",\"required\":false,\"default\":{}}},\"methods\":{\"isValid\":{\"name\":\"isValid\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isExpired\":{\"name\":\"isExpired\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isRevoked\":{\"name\":\"isRevoked\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"touch\":{\"name\":\"touch\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"extend\":{\"name\":\"extend\",\"async\":false,\"parameters\":[{\"name\":\"ttlSeconds\",\"type\":\"number\",\"optional\":true}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"revoke\":{\"name\":\"revoke\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"setTenant\":{\"name\":\"setTenant\",\"async\":false,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getData\":{\"name\":\"getData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"T | undefined\",\"isStatic\":false,\"isPublic\":true},\"setData\":{\"name\":\"setData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"removeData\":{\"name\":\"removeData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"get\",\"delete\"]},\"mcp\":{\"include\":[]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Session\",\"collectionExportName\":\"SessionCollection\",\"schema\":{\"tableName\":\"sessions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"sessions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_id\\\" UUID,\\n \\\"tenant_id\\\" UUID,\\n \\\"status\\\" TEXT,\\n \\\"expires_at\\\" TIMESTAMP,\\n \\\"user_agent\\\" TEXT DEFAULT '',\\n \\\"ip_address\\\" TEXT DEFAULT '',\\n \\\"last_accessed_at\\\" TIMESTAMP,\\n \\\"data\\\" JSON DEFAULT '{}'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"user_agent\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"ip_address\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"last_accessed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":{}}},\"indexes\":[{\"name\":\"sessions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"sessions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"692d8b0f\"}},\"@happyvertical/smrt-users:Tenant\":{\"name\":\"tenant\",\"className\":\"Tenant\",\"qualifiedName\":\"@happyvertical/smrt-users:Tenant\",\"collection\":\"tenants\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/Tenant.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"parentTenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"hierarchyLevel\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"hierarchyPath\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"cascadePermissions\":{\"type\":\"boolean\",\"required\":false,\"default\":true},\"inheritPermissions\":{\"type\":\"boolean\",\"required\":false,\"default\":true}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSuspended\":{\"name\":\"isSuspended\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isRoot\":{\"name\":\"isRoot\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"canCascadeToChildren\":{\"name\":\"canCascadeToChildren\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"acceptsInheritance\":{\"name\":\"acceptsInheritance\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getAncestorIds\":{\"name\":\"getAncestorIds\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableStrategy\":\"sti\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Tenant\",\"collectionExportName\":\"TenantCollection\",\"schema\":{\"tableName\":\"tenants\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenants\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"status\\\" TEXT,\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"parent_tenant_id\\\" UUID,\\n \\\"hierarchy_level\\\" INTEGER DEFAULT 0,\\n \\\"hierarchy_path\\\" TEXT DEFAULT '',\\n \\\"cascade_permissions\\\" BOOLEAN DEFAULT TRUE,\\n \\\"inherit_permissions\\\" BOOLEAN DEFAULT TRUE\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"status\":{\"type\":\"TEXT\",\"notNull\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"parent_tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"hierarchy_level\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"hierarchy_path\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"cascade_permissions\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"inherit_permissions\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true}},\"indexes\":[{\"name\":\"tenants_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenants_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"tenants_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"35dbdaec\"}},\"@happyvertical/smrt-users:TenantIntegration\":{\"name\":\"tenantintegration\",\"className\":\"TenantIntegration\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantIntegration\",\"collection\":\"tenantintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/TenantIntegration.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"provider\":{\"type\":\"text\",\"required\":false,\"default\":\"aws\"},\"externalIds\":{\"type\":\"text\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"default\":\"unprovisioned\"},\"lastCheckedAt\":{\"type\":\"datetime\",\"required\":false},\"lastCheckSummary\":{\"type\":\"text\",\"required\":false},\"lastError\":{\"type\":\"text\",\"required\":false}},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getExternalIds\":{\"name\":\"getExternalIds\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, string>\",\"isStatic\":false,\"isPublic\":true},\"setExternalIds\":{\"name\":\"setExternalIds\",\"async\":false,\"parameters\":[{\"name\":\"externalIds\",\"type\":\"Record<string, string> | string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getExternalId\":{\"name\":\"getExternalId\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"string | undefined\",\"isStatic\":false,\"isPublic\":true},\"setExternalId\":{\"name\":\"setExternalId\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"string | undefined\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getLastCheckSummary\":{\"name\":\"getLastCheckSummary\",\"async\":false,\"parameters\":[],\"returnType\":\"TenantIntegrationCheckSummary[]\",\"isStatic\":false,\"isPublic\":true},\"setLastCheckSummary\":{\"name\":\"setLastCheckSummary\",\"async\":false,\"parameters\":[{\"name\":\"summary\",\"type\":\"TenantIntegrationCheckSummary[] | string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"recordDoctorRun\":{\"name\":\"recordDoctorRun\",\"async\":false,\"parameters\":[{\"name\":\"outcome\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"tenant_integrations\",\"conflictColumns\":[\"tenant_id\",\"provider\"],\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"TenantIntegration\",\"collectionExportName\":\"TenantIntegrationCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"tenant_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_integrations\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"provider\\\" TEXT DEFAULT 'aws',\\n \\\"external_ids\\\" TEXT,\\n \\\"status\\\" TEXT DEFAULT 'unprovisioned',\\n \\\"last_checked_at\\\" TIMESTAMP,\\n \\\"last_check_summary\\\" TEXT,\\n \\\"last_error\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"provider\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"aws\"},\"external_ids\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"unprovisioned\"},\"last_checked_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_check_summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"tenant_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_integrations_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\"],\"unique\":true}],\"version\":\"3ed31966\"}},\"@happyvertical/smrt-users:TenantPermissionOverride\":{\"name\":\"tenantpermissionoverride\",\"className\":\"TenantPermissionOverride\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantPermissionOverride\",\"collection\":\"tenantpermissionoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/TenantPermissionOverride.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}},\"effect\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isInherit\":{\"name\":\"isInherit\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isGrant\":{\"name\":\"isGrant\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDeny\":{\"name\":\"isDeny\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"hasExplicitEffect\":{\"name\":\"hasExplicitEffect\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"TenantPermissionOverride\",\"collectionExportName\":\"TenantPermissionOverrideCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"tenant_permission_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_permission_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"tenant_permission_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_permission_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f3bec965\"}},\"@happyvertical/smrt-users:User\":{\"name\":\"user\",\"className\":\"User\",\"qualifiedName\":\"@happyvertical/smrt-users:User\",\"collection\":\"users\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/users/src/models/User.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"profileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\"},\"email\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"lastLoginAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"hasValidEmail\":{\"name\":\"hasValidEmail\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSuspended\":{\"name\":\"isSuspended\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"recordLogin\":{\"name\":\"recordLogin\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"User\",\"collectionExportName\":\"UserCollection\",\"schema\":{\"tableName\":\"users\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"profile_id\\\" UUID,\\n \\\"email\\\" TEXT DEFAULT '',\\n \\\"status\\\" TEXT,\\n \\\"last_login_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":false},\"email\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_login_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"dda929da\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-mobile-contract\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
23
|
+
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1784008223414,\"packageName\":\"@happyvertical/smrt-users\",\"packageVersion\":\"0.39.15\",\"objects\":{\"@happyvertical/smrt-users:AccessRequestCollection\":{\"name\":\"accessrequestcollection\",\"className\":\"AccessRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:AccessRequestCollection\",\"collection\":\"accessrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/AccessRequestCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByEmail\":{\"name\":\"findByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpenByEmail\":{\"name\":\"findOpenByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"AccessRequestStatus\",\"optional\":false}],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true},\"findOpen\":{\"name\":\"findOpen\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<AccessRequest[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"access_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"AccessRequest\",\"exportName\":\"AccessRequestCollection\",\"collectionExportName\":\"AccessRequestCollectionCollection\",\"schema\":{\"tableName\":\"access_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"access_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"access_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"c7691cc2\"}},\"@happyvertical/smrt-users:UsersCliAuthRequestCollection\":{\"name\":\"userscliauthrequestcollection\",\"className\":\"UsersCliAuthRequestCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersCliAuthRequestCollection\",\"collection\":\"userscliauthrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/CliAuthRequestCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByUserCode\":{\"name\":\"findByUserCode\",\"async\":true,\"parameters\":[{\"name\":\"userCode\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersCliAuthRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"findByDeviceCodeHash\":{\"name\":\"findByDeviceCodeHash\",\"async\":true,\"parameters\":[{\"name\":\"deviceCodeHash\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersCliAuthRequest | null>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_cli_auth_requests\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"UsersCliAuthRequest\",\"exportName\":\"UsersCliAuthRequestCollection\",\"collectionExportName\":\"UsersCliAuthRequestCollectionCollection\",\"schema\":{\"tableName\":\"users_cli_auth_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_cli_auth_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"users_cli_auth_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_cli_auth_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0e072f3a\"}},\"@happyvertical/smrt-users:GroupCollection\":{\"name\":\"groupcollection\",\"className\":\"GroupCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupCollection\",\"collection\":\"groups\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/GroupCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Group[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Group | null>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Group\",\"exportName\":\"GroupCollection\",\"collectionExportName\":\"GroupCollectionCollection\",\"schema\":{\"tableName\":\"group_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"10e23765\"}},\"@happyvertical/smrt-users:GroupMemberCollection\":{\"name\":\"groupmembercollection\",\"className\":\"GroupMemberCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupMemberCollection\",\"collection\":\"groupmembers\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/GroupMemberCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByGroup\":{\"name\":\"findByGroup\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember[]>\",\"isStatic\":false,\"isPublic\":true},\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember[]>\",\"isStatic\":false,\"isPublic\":true},\"isMember\":{\"name\":\"isMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addMember\":{\"name\":\"addMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupMember>\",\"isStatic\":false,\"isPublic\":true},\"removeMember\":{\"name\":\"removeMember\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getGroupIds\":{\"name\":\"getGroupIds\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getGroupIdsForTenant\":{\"name\":\"getGroupIdsForTenant\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getUserIds\":{\"name\":\"getUserIds\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"GroupMember\",\"exportName\":\"GroupMemberCollection\",\"collectionExportName\":\"GroupMemberCollectionCollection\",\"schema\":{\"tableName\":\"group_member_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_member_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_member_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_member_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f61e9ad6\"}},\"@happyvertical/smrt-users:GroupRoleCollection\":{\"name\":\"grouprolecollection\",\"className\":\"GroupRoleCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupRoleCollection\",\"collection\":\"grouproles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/GroupRoleCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByGroup\":{\"name\":\"findByGroup\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole[]>\",\"isStatic\":false,\"isPublic\":true},\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole[]>\",\"isStatic\":false,\"isPublic\":true},\"hasRole\":{\"name\":\"hasRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addRole\":{\"name\":\"addRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<GroupRole>\",\"isStatic\":false,\"isPublic\":true},\"removeRole\":{\"name\":\"removeRole\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false},{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getRoleIds\":{\"name\":\"getRoleIds\",\"async\":true,\"parameters\":[{\"name\":\"groupId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"GroupRole\",\"exportName\":\"GroupRoleCollection\",\"collectionExportName\":\"GroupRoleCollectionCollection\",\"schema\":{\"tableName\":\"group_role_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_role_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"group_role_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_role_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"33fdaf49\"}},\"@happyvertical/smrt-users:UsersMagicLinkTokenCollection\":{\"name\":\"usersmagiclinktokencollection\",\"className\":\"UsersMagicLinkTokenCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersMagicLinkTokenCollection\",\"collection\":\"usersmagiclinktokens\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/MagicLinkTokenCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByNonce\":{\"name\":\"findByNonce\",\"async\":true,\"parameters\":[{\"name\":\"nonce\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<UsersMagicLinkToken | null>\",\"isStatic\":false,\"isPublic\":true},\"markUsed\":{\"name\":\"markUsed\",\"async\":true,\"parameters\":[{\"name\":\"nonce\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_magic_link_tokens\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"UsersMagicLinkToken\",\"exportName\":\"UsersMagicLinkTokenCollection\",\"collectionExportName\":\"UsersMagicLinkTokenCollectionCollection\",\"schema\":{\"tableName\":\"users_magic_link_tokens\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_magic_link_tokens\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"users_magic_link_tokens_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_magic_link_tokens_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a8c021f9\"}},\"@happyvertical/smrt-users:MembershipCollection\":{\"name\":\"membershipcollection\",\"className\":\"MembershipCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipCollection\",\"collection\":\"memberships\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/MembershipCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findActiveByUser\":{\"name\":\"findActiveByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findActiveByTenant\":{\"name\":\"findActiveByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByUserAndTenant\":{\"name\":\"findByUserAndTenant\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership | null>\",\"isStatic\":false,\"isPublic\":true},\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"MembershipStatus\",\"optional\":false}],\"returnType\":\"Promise<Membership[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Membership\",\"exportName\":\"MembershipCollection\",\"collectionExportName\":\"MembershipCollectionCollection\",\"schema\":{\"tableName\":\"membership_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"membership_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"8a2577ba\"}},\"@happyvertical/smrt-users:MembershipOverrideCollection\":{\"name\":\"membershipoverridecollection\",\"className\":\"MembershipOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipOverrideCollection\",\"collection\":\"membershipoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/MembershipOverrideCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByMembership\":{\"name\":\"findByMembership\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findGrants\":{\"name\":\"findGrants\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findDenies\":{\"name\":\"findDenies\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"getGrantedPermissionIds\":{\"name\":\"getGrantedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getDeniedPermissionIds\":{\"name\":\"getDeniedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"OverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"grantPermission\":{\"name\":\"grantPermission\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true},\"denyPermission\":{\"name\":\"denyPermission\",\"async\":true,\"parameters\":[{\"name\":\"membershipId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<MembershipOverride>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"MembershipOverride\",\"exportName\":\"MembershipOverrideCollection\",\"collectionExportName\":\"MembershipOverrideCollectionCollection\",\"schema\":{\"tableName\":\"membership_override_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_override_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"membership_override_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_override_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"43ccd4cb\"}},\"@happyvertical/smrt-users:PermissionCollection\":{\"name\":\"permissioncollection\",\"className\":\"PermissionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:PermissionCollection\",\"collection\":\"permissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/PermissionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByCategory\":{\"name\":\"findByCategory\",\"async\":true,\"parameters\":[{\"name\":\"category\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Permission[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Permission | null>\",\"isStatic\":false,\"isPublic\":true},\"findByIds\":{\"name\":\"findByIds\",\"async\":true,\"parameters\":[{\"name\":\"ids\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, Permission>>\",\"isStatic\":false,\"isPublic\":true},\"getCategories\":{\"name\":\"getCategories\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"findOrCreate\":{\"name\":\"findOrCreate\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"defaults\",\"type\":\"Partial<object>\",\"optional\":true}],\"returnType\":\"Promise<Permission>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Permission\",\"exportName\":\"PermissionCollection\",\"collectionExportName\":\"PermissionCollectionCollection\",\"schema\":{\"tableName\":\"permission_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"permission_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"permission_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"permission_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"fc443bec\"}},\"@happyvertical/smrt-users:RoleCollection\":{\"name\":\"rolecollection\",\"className\":\"RoleCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:RoleCollection\",\"collection\":\"roles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/RoleCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findSystemRoles\":{\"name\":\"findSystemRoles\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findTenantRoles\":{\"name\":\"findTenantRoles\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Role | null>\",\"isStatic\":false,\"isPublic\":true},\"seedSystemRoles\":{\"name\":\"seedSystemRoles\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SeedSystemRolesOptions\",\"optional\":true}],\"returnType\":\"Promise<Role[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Role\",\"exportName\":\"RoleCollection\",\"collectionExportName\":\"RoleCollectionCollection\",\"schema\":{\"tableName\":\"role_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"role_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"b6b325e0\"}},\"@happyvertical/smrt-users:RolePermissionCollection\":{\"name\":\"rolepermissioncollection\",\"className\":\"RolePermissionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:RolePermissionCollection\",\"collection\":\"rolepermissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/RolePermissionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByRole\":{\"name\":\"findByRole\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission[]>\",\"isStatic\":false,\"isPublic\":true},\"findByPermission\":{\"name\":\"findByPermission\",\"async\":true,\"parameters\":[{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission[]>\",\"isStatic\":false,\"isPublic\":true},\"hasPermission\":{\"name\":\"hasPermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"addPermission\":{\"name\":\"addPermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<RolePermission>\",\"isStatic\":false,\"isPublic\":true},\"removePermission\":{\"name\":\"removePermission\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getPermissionIds\":{\"name\":\"getPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"roleId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"seedRolePermissions\":{\"name\":\"seedRolePermissions\",\"async\":true,\"parameters\":[{\"name\":\"matrix\",\"type\":\"RolePermissionPatternMatrix\",\"optional\":true},{\"name\":\"options\",\"type\":\"SeedRolePermissionsOptions\",\"optional\":true}],\"returnType\":\"Promise<SeedRolePermissionsResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"RolePermission\",\"exportName\":\"RolePermissionCollection\",\"collectionExportName\":\"RolePermissionCollectionCollection\",\"schema\":{\"tableName\":\"role_permission_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_permission_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"role_permission_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_permission_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"b4ec602b\"}},\"@happyvertical/smrt-users:SessionCollection\":{\"name\":\"sessioncollection\",\"className\":\"SessionCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:SessionCollection\",\"collection\":\"sessions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/SessionCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"createSession\":{\"name\":\"createSession\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"CreateSessionOptions\",\"optional\":false}],\"returnType\":\"Promise<Session>\",\"isStatic\":false,\"isPublic\":true},\"findValidSession\":{\"name\":\"findValidSession\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Session | null>\",\"isStatic\":false,\"isPublic\":true},\"touch\":{\"name\":\"touch\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"extendTtl\",\"type\":\"boolean\",\"optional\":true},{\"name\":\"ttl\",\"type\":\"number\",\"optional\":true}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"findByUser\":{\"name\":\"findByUser\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Session[]>\",\"isStatic\":false,\"isPublic\":true},\"deleteUserSessions\":{\"name\":\"deleteUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"revokeUserSessions\":{\"name\":\"revokeUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"revokeSession\":{\"name\":\"revokeSession\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"deleteExpired\":{\"name\":\"deleteExpired\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"countUserSessions\":{\"name\":\"countUserSessions\",\"async\":true,\"parameters\":[{\"name\":\"userId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"setSessionTenant\":{\"name\":\"setSessionTenant\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"setSessionData\":{\"name\":\"setSessionData\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"getSessionData\":{\"name\":\"getSessionData\",\"async\":true,\"parameters\":[{\"name\":\"sessionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<T | undefined>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Session\",\"exportName\":\"SessionCollection\",\"collectionExportName\":\"SessionCollectionCollection\",\"schema\":{\"tableName\":\"session_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"session_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"session_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"session_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ec13164c\"}},\"@happyvertical/smrt-users:TenantCollection\":{\"name\":\"tenantcollection\",\"className\":\"TenantCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantCollection\",\"collection\":\"tenants\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/TenantCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"TenantStatus\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findBySlug\":{\"name\":\"findBySlug\",\"async\":true,\"parameters\":[{\"name\":\"slug\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant | null>\",\"isStatic\":false,\"isPublic\":true},\"findRoots\":{\"name\":\"findRoots\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findChildren\":{\"name\":\"findChildren\",\"async\":true,\"parameters\":[{\"name\":\"parentTenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"findParent\":{\"name\":\"findParent\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant | null>\",\"isStatic\":false,\"isPublic\":true},\"getAncestors\":{\"name\":\"getAncestors\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getAncestorsFromRoot\":{\"name\":\"getAncestorsFromRoot\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getDescendants\":{\"name\":\"getDescendants\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"getSiblings\":{\"name\":\"getSiblings\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant[]>\",\"isStatic\":false,\"isPublic\":true},\"isAncestorOf\":{\"name\":\"isAncestorOf\",\"async\":true,\"parameters\":[{\"name\":\"potentialAncestorId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"isDescendantOf\":{\"name\":\"isDescendantOf\",\"async\":true,\"parameters\":[{\"name\":\"potentialDescendantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"createChild\":{\"name\":\"createChild\",\"async\":true,\"parameters\":[{\"name\":\"parentTenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"CreateChildTenantOptions\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"moveToParent\":{\"name\":\"moveToParent\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"newParentId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"makeRoot\":{\"name\":\"makeRoot\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true},\"validateHierarchy\":{\"name\":\"validateHierarchy\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getTree\":{\"name\":\"getTree\",\"async\":true,\"parameters\":[{\"name\":\"rootTenantId\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<Array>\",\"isStatic\":false,\"isPublic\":true},\"create\":{\"name\":\"create\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"SmrtCreateInput<Tenant>\",\"optional\":false}],\"returnType\":\"Promise<Tenant>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"Tenant\",\"exportName\":\"TenantCollection\",\"collectionExportName\":\"TenantCollectionCollection\",\"schema\":{\"tableName\":\"tenant_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"bcfa1eef\"}},\"@happyvertical/smrt-users:TenantIntegrationCollection\":{\"name\":\"tenantintegrationcollection\",\"className\":\"TenantIntegrationCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantIntegrationCollection\",\"collection\":\"tenantintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/TenantIntegrationCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"listForTenant\":{\"name\":\"listForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration[]>\",\"isStatic\":false,\"isPublic\":true},\"findFor\":{\"name\":\"findFor\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"provider\",\"type\":\"TenantIntegrationProvider\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration | null>\",\"isStatic\":false,\"isPublic\":true},\"findOrInit\":{\"name\":\"findOrInit\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"provider\",\"type\":\"TenantIntegrationProvider\",\"optional\":false}],\"returnType\":\"Promise<TenantIntegration>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"tenant_integrations\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"TenantIntegration\",\"exportName\":\"TenantIntegrationCollection\",\"collectionExportName\":\"TenantIntegrationCollectionCollection\",\"schema\":{\"tableName\":\"tenant_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_integrations\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_integrations_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"a3261f8f\"}},\"@happyvertical/smrt-users:TenantPermissionOverrideCollection\":{\"name\":\"tenantpermissionoverridecollection\",\"className\":\"TenantPermissionOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantPermissionOverrideCollection\",\"collection\":\"tenantpermissionoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/TenantPermissionOverrideCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByTenant\":{\"name\":\"findByTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findGrants\":{\"name\":\"findGrants\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findDenies\":{\"name\":\"findDenies\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findInherits\":{\"name\":\"findInherits\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"getGrantedPermissionIds\":{\"name\":\"getGrantedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getDeniedPermissionIds\":{\"name\":\"getDeniedPermissionIds\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<string[]>\",\"isStatic\":false,\"isPublic\":true},\"getOverridesByEffect\":{\"name\":\"getOverridesByEffect\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverrideResult>\",\"isStatic\":false,\"isPublic\":true},\"getOverridesByEffectBatch\":{\"name\":\"getOverridesByEffectBatch\",\"async\":true,\"parameters\":[{\"name\":\"tenantIds\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, TenantPermissionOverrideResult>>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"TenantPermissionEffect\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"removeAllOverrides\":{\"name\":\"removeAllOverrides\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"grantPermission\":{\"name\":\"grantPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"denyPermission\":{\"name\":\"denyPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"inheritPermission\":{\"name\":\"inheritPermission\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"permissionId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride>\",\"isStatic\":false,\"isPublic\":true},\"bulkSetOverrides\":{\"name\":\"bulkSetOverrides\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"overrides\",\"type\":\"Array<object>\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"copyOverrides\":{\"name\":\"copyOverrides\",\"async\":true,\"parameters\":[{\"name\":\"fromTenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"toTenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<TenantPermissionOverride[]>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"TenantPermissionOverride\",\"exportName\":\"TenantPermissionOverrideCollection\",\"collectionExportName\":\"TenantPermissionOverrideCollectionCollection\",\"schema\":{\"tableName\":\"tenant_permission_override_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_permission_override_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"tenant_permission_override_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_permission_override_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e6b5a0b6\"}},\"@happyvertical/smrt-users:UserCollection\":{\"name\":\"usercollection\",\"className\":\"UserCollection\",\"qualifiedName\":\"@happyvertical/smrt-users:UserCollection\",\"collection\":\"users\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/collections/UserCollection.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{},\"methods\":{\"findByEmail\":{\"name\":\"findByEmail\",\"async\":true,\"parameters\":[{\"name\":\"email\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<User | null>\",\"isStatic\":false,\"isPublic\":true},\"findByProfile\":{\"name\":\"findByProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<User | null>\",\"isStatic\":false,\"isPublic\":true},\"findByStatus\":{\"name\":\"findByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"UserStatus\",\"optional\":false}],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"findActive\":{\"name\":\"findActive\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"findPending\":{\"name\":\"findPending\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<User[]>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreateForProfile\":{\"name\":\"getOrCreateForProfile\",\"async\":true,\"parameters\":[{\"name\":\"profileId\",\"type\":\"string\",\"optional\":false},{\"name\":\"email\",\"type\":\"string\",\"optional\":false},{\"name\":\"defaults\",\"type\":\"Partial<object>\",\"optional\":true}],\"returnType\":\"Promise<User>\",\"isStatic\":false,\"isPublic\":true},\"getOrCreateFromOidc\":{\"name\":\"getOrCreateFromOidc\",\"async\":true,\"parameters\":[{\"name\":\"claims\",\"type\":\"OidcClaims\",\"optional\":false},{\"name\":\"provider\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"GetOrCreateFromOidcOptions\",\"optional\":true}],\"returnType\":\"Promise<OidcIdentityResult>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"User\",\"exportName\":\"UserCollection\",\"collectionExportName\":\"UserCollectionCollection\",\"schema\":{\"tableName\":\"user_collections\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"user_collections\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"user_collections_id_idx\",\"columns\":[\"id\"]},{\"name\":\"user_collections_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"539fdcc8\"}},\"@happyvertical/smrt-users:AccessRequest\":{\"name\":\"accessrequest\",\"className\":\"AccessRequest\",\"qualifiedName\":\"@happyvertical/smrt-users:AccessRequest\",\"collection\":\"accessrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/AccessRequest.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"email\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"indexed\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"indexed\":true}},\"source\":{\"type\":\"text\",\"required\":false,\"default\":\"\",\"_meta\":{\"indexed\":true}},\"requestContext\":{\"type\":\"text\",\"required\":false,\"default\":\"{}\"},\"note\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"requestedAt\":{\"type\":\"datetime\",\"required\":false},\"decidedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"decidedBy\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultingUserId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"tenantHint\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"getRequestContext\":{\"name\":\"getRequestContext\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"setRequestContext\":{\"name\":\"setRequestContext\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getTenantHint\":{\"name\":\"getTenantHint\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string> | null\",\"isStatic\":false,\"isPublic\":true},\"setTenantHint\":{\"name\":\"setTenantHint\",\"async\":false,\"parameters\":[{\"name\":\"value\",\"type\":\"Record<string> | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"isOpen\":{\"name\":\"isOpen\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isApproved\":{\"name\":\"isApproved\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isTerminal\":{\"name\":\"isTerminal\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"access_requests\",\"conflictColumns\":[\"id\"],\"api\":{\"include\":[]},\"mcp\":{\"include\":[]},\"cli\":{\"include\":[]}},\"extends\":\"SmrtObject\",\"exportName\":\"AccessRequest\",\"collectionExportName\":\"AccessRequestCollection\",\"validationRules\":[{\"field\":\"email\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"access_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"access_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"email\\\" TEXT NOT NULL DEFAULT '',\\n \\\"name\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"source\\\" TEXT DEFAULT '',\\n \\\"request_context\\\" TEXT DEFAULT '{}',\\n \\\"note\\\" TEXT,\\n \\\"requested_at\\\" TIMESTAMP,\\n \\\"decided_at\\\" TIMESTAMP,\\n \\\"decided_by\\\" TEXT,\\n \\\"resulting_user_id\\\" TEXT,\\n \\\"tenant_hint\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"email\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"source\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"request_context\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"{}\"},\"note\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"requested_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"decided_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"decided_by\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"resulting_user_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tenant_hint\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"access_requests_id_idx\",\"columns\":[\"id\"],\"unique\":true},{\"name\":\"access_requests_email_idx\",\"columns\":[\"email\"]},{\"name\":\"access_requests_status_idx\",\"columns\":[\"status\"]},{\"name\":\"access_requests_source_idx\",\"columns\":[\"source\"]}],\"version\":\"f396996f\"}},\"@happyvertical/smrt-users:UsersCliAuthRequest\":{\"name\":\"userscliauthrequest\",\"className\":\"UsersCliAuthRequest\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersCliAuthRequest\",\"collection\":\"userscliauthrequests\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/CliAuthRequest.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userCode\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"deviceCodeHash\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"userId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"sessionId\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"expiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{}},\"approvedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"users_cli_auth_requests\",\"api\":{\"include\":[]},\"cli\":{\"include\":[]},\"mcp\":{\"include\":[]}},\"extends\":\"SmrtObject\",\"exportName\":\"UsersCliAuthRequest\",\"collectionExportName\":\"UsersCliAuthRequestCollection\",\"schema\":{\"tableName\":\"users_cli_auth_requests\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_cli_auth_requests\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_code\\\" TEXT,\\n \\\"device_code_hash\\\" TEXT,\\n \\\"status\\\" TEXT,\\n \\\"user_id\\\" TEXT,\\n \\\"tenant_id\\\" TEXT,\\n \\\"session_id\\\" TEXT,\\n \\\"expires_at\\\" TIMESTAMP,\\n \\\"approved_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_code\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"device_code_hash\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"user_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"tenant_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"session_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"approved_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_cli_auth_requests_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_cli_auth_requests_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d994ea55\"}},\"@happyvertical/smrt-users:Group\":{\"name\":\"group\",\"className\":\"Group\",\"qualifiedName\":\"@happyvertical/smrt-users:Group\",\"collection\":\"groups\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Group.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Group\",\"collectionExportName\":\"GroupCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"groups\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"groups\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"groups_id_idx\",\"columns\":[\"id\"]},{\"name\":\"groups_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"5a6913b2\"}},\"@happyvertical/smrt-users:GroupMember\":{\"name\":\"groupmember\",\"className\":\"GroupMember\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupMember\",\"collection\":\"groupmembers\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/GroupMember.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"groupId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Group\",\"_meta\":{\"required\":true}},\"userId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"User\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"GroupMember\",\"collectionExportName\":\"GroupMemberCollection\",\"validationRules\":[{\"field\":\"groupId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"userId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"group_members\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_members\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"group_id\\\" UUID NOT NULL,\\n \\\"user_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"group_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"group_members_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_members_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"77f49385\"}},\"@happyvertical/smrt-users:GroupRole\":{\"name\":\"grouprole\",\"className\":\"GroupRole\",\"qualifiedName\":\"@happyvertical/smrt-users:GroupRole\",\"collection\":\"grouproles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/GroupRole.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"groupId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Group\",\"_meta\":{\"required\":true}},\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"GroupRole\",\"collectionExportName\":\"GroupRoleCollection\",\"validationRules\":[{\"field\":\"groupId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"group_roles\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"group_roles\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"group_id\\\" UUID NOT NULL,\\n \\\"role_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"group_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"group_roles_id_idx\",\"columns\":[\"id\"]},{\"name\":\"group_roles_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"75d06c96\"}},\"@happyvertical/smrt-users:UsersMagicLinkToken\":{\"name\":\"usersmagiclinktoken\",\"className\":\"UsersMagicLinkToken\",\"qualifiedName\":\"@happyvertical/smrt-users:UsersMagicLinkToken\",\"collection\":\"usersmagiclinktokens\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/MagicLinkToken.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"nonce\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"unique\":true}},\"email\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"used\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"expiresAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"isExpired\":{\"name\":\"isExpired\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isValid\":{\"name\":\"isValid\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"users_magic_link_tokens\",\"api\":{\"include\":[]},\"mcp\":{\"include\":[]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"UsersMagicLinkToken\",\"collectionExportName\":\"UsersMagicLinkTokenCollection\",\"validationRules\":[{\"field\":\"nonce\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"users_magic_link_tokens\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users_magic_link_tokens\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"nonce\\\" TEXT NOT NULL UNIQUE DEFAULT '',\\n \\\"email\\\" TEXT DEFAULT '',\\n \\\"used\\\" BOOLEAN DEFAULT FALSE,\\n \\\"expires_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"nonce\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":true,\"default\":\"\"},\"email\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"used\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_magic_link_tokens_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_magic_link_tokens_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"537853d3\"}},\"@happyvertical/smrt-users:Membership\":{\"name\":\"membership\",\"className\":\"Membership\",\"qualifiedName\":\"@happyvertical/smrt-users:Membership\",\"collection\":\"memberships\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Membership.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"User\",\"_meta\":{\"required\":true}},\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Membership\",\"collectionExportName\":\"MembershipCollection\",\"validationRules\":[{\"field\":\"userId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"memberships\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"memberships\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_id\\\" UUID NOT NULL,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"role_id\\\" UUID NOT NULL,\\n \\\"status\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"memberships_id_idx\",\"columns\":[\"id\"]},{\"name\":\"memberships_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"23fdb25d\"}},\"@happyvertical/smrt-users:MembershipOverride\":{\"name\":\"membershipoverride\",\"className\":\"MembershipOverride\",\"qualifiedName\":\"@happyvertical/smrt-users:MembershipOverride\",\"collection\":\"membershipoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/MembershipOverride.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"membershipId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Membership\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}},\"effect\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isGrant\":{\"name\":\"isGrant\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDeny\":{\"name\":\"isDeny\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"MembershipOverride\",\"collectionExportName\":\"MembershipOverrideCollection\",\"validationRules\":[{\"field\":\"membershipId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"membership_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"membership_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"membership_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"membership_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"membership_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"membership_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"ab60f8f9\"}},\"@happyvertical/smrt-users:Permission\":{\"name\":\"permission\",\"className\":\"Permission\",\"qualifiedName\":\"@happyvertical/smrt-users:Permission\",\"collection\":\"permissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Permission.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"category\":{\"type\":\"text\",\"required\":false,\"default\":\"\"}},\"methods\":{\"parseSlug\":{\"name\":\"parseSlug\",\"async\":false,\"parameters\":[],\"returnType\":\"ParsedPermissionSlug\",\"isStatic\":false,\"isPublic\":true},\"getResource\":{\"name\":\"getResource\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"getAction\":{\"name\":\"getAction\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true},\"isValidSlug\":{\"name\":\"isValidSlug\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Permission\",\"collectionExportName\":\"PermissionCollection\",\"schema\":{\"tableName\":\"permissions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"permissions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"category\\\" TEXT DEFAULT ''\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"category\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"}},\"indexes\":[{\"name\":\"permissions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"permissions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"4c81b2af\"}},\"@happyvertical/smrt-users:Role\":{\"name\":\"role\",\"className\":\"Role\",\"qualifiedName\":\"@happyvertical/smrt-users:Role\",\"collection\":\"roles\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Role.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"isSystem\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"inheritsToDescendants\":{\"type\":\"boolean\",\"required\":false,\"default\":false}},\"methods\":{\"isSystemRole\":{\"name\":\"isSystemRole\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isTenantRole\":{\"name\":\"isTenantRole\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"canDelete\":{\"name\":\"canDelete\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Role\",\"collectionExportName\":\"RoleCollection\",\"schema\":{\"tableName\":\"roles\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"roles\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"is_system\\\" BOOLEAN DEFAULT FALSE,\\n \\\"inherits_to_descendants\\\" BOOLEAN DEFAULT FALSE\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"is_system\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"inherits_to_descendants\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false}},\"indexes\":[{\"name\":\"roles_id_idx\",\"columns\":[\"id\"]},{\"name\":\"roles_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"6c08582e\"}},\"@happyvertical/smrt-users:RolePermission\":{\"name\":\"rolepermission\",\"className\":\"RolePermission\",\"qualifiedName\":\"@happyvertical/smrt-users:RolePermission\",\"collection\":\"rolepermissions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/RolePermission.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"roleId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Role\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"RolePermission\",\"collectionExportName\":\"RolePermissionCollection\",\"validationRules\":[{\"field\":\"roleId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"role_permissions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"role_permissions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"role_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"role_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"role_permissions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"role_permissions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"453cc12c\"}},\"@happyvertical/smrt-users:Session\":{\"name\":\"session\",\"className\":\"Session\",\"qualifiedName\":\"@happyvertical/smrt-users:Session\",\"collection\":\"sessions\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Session.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"userId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"User\"},\"tenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"expiresAt\":{\"type\":\"datetime\",\"required\":false},\"userAgent\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"ipAddress\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"lastAccessedAt\":{\"type\":\"datetime\",\"required\":false},\"data\":{\"type\":\"json\",\"required\":false,\"default\":{}}},\"methods\":{\"isValid\":{\"name\":\"isValid\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isExpired\":{\"name\":\"isExpired\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isRevoked\":{\"name\":\"isRevoked\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"touch\":{\"name\":\"touch\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"extend\":{\"name\":\"extend\",\"async\":false,\"parameters\":[{\"name\":\"ttlSeconds\",\"type\":\"number\",\"optional\":true}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"revoke\":{\"name\":\"revoke\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"setTenant\":{\"name\":\"setTenant\",\"async\":false,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getData\":{\"name\":\"getData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"T | undefined\",\"isStatic\":false,\"isPublic\":true},\"setData\":{\"name\":\"setData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"removeData\":{\"name\":\"removeData\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"get\",\"delete\"]},\"mcp\":{\"include\":[]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Session\",\"collectionExportName\":\"SessionCollection\",\"schema\":{\"tableName\":\"sessions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"sessions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"user_id\\\" UUID,\\n \\\"tenant_id\\\" UUID,\\n \\\"status\\\" TEXT,\\n \\\"expires_at\\\" TIMESTAMP,\\n \\\"user_agent\\\" TEXT DEFAULT '',\\n \\\"ip_address\\\" TEXT DEFAULT '',\\n \\\"last_accessed_at\\\" TIMESTAMP,\\n \\\"data\\\" JSON DEFAULT '{}'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"user_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"user_agent\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"ip_address\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"last_accessed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false,\"default\":{}}},\"indexes\":[{\"name\":\"sessions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"sessions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"692d8b0f\"}},\"@happyvertical/smrt-users:Tenant\":{\"name\":\"tenant\",\"className\":\"Tenant\",\"qualifiedName\":\"@happyvertical/smrt-users:Tenant\",\"collection\":\"tenants\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/Tenant.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"created_at\":{\"type\":\"datetime\",\"required\":false},\"updated_at\":{\"type\":\"datetime\",\"required\":false},\"name\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"parentTenantId\":{\"type\":\"foreignKey\",\"required\":false,\"related\":\"Tenant\",\"_meta\":{\"nullable\":true}},\"hierarchyLevel\":{\"type\":\"integer\",\"required\":false,\"default\":0},\"hierarchyPath\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"cascadePermissions\":{\"type\":\"boolean\",\"required\":false,\"default\":true},\"inheritPermissions\":{\"type\":\"boolean\",\"required\":false,\"default\":true}},\"methods\":{\"getAiUsageSnapshot\":{\"name\":\"getAiUsageSnapshot\",\"async\":false,\"parameters\":[],\"returnType\":\"AiUsageSnapshot | undefined\",\"isStatic\":false,\"isPublic\":true},\"resetAiUsage\":{\"name\":\"resetAiUsage\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"listAiUsage\":{\"name\":\"listAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageListOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtAiUsageRecord[]>\",\"isStatic\":false,\"isPublic\":true},\"summarizeAiUsage\":{\"name\":\"summarizeAiUsage\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiUsageSummaryOptions\",\"optional\":true}],\"returnType\":\"Promise<Record<string, AiUsageStats>>\",\"isStatic\":false,\"isPublic\":true},\"destroy\":{\"name\":\"destroy\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"markAsPersisted\":{\"name\":\"markAsPersisted\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"requireInsertOnSave\":{\"name\":\"requireInsertOnSave\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"loadDataFromDb\":{\"name\":\"loadDataFromDb\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"Record<string>\",\"optional\":false}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getFields\":{\"name\":\"getFields\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"toJSON\":{\"name\":\"toJSON\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"toPlainObject\":{\"name\":\"toPlainObject\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"toPublicJSON\":{\"name\":\"toPublicJSON\",\"async\":false,\"parameters\":[{\"name\":\"options\",\"type\":\"PublicJsonOptions\",\"optional\":true}],\"returnType\":\"Record<string>\",\"isStatic\":false,\"isPublic\":true},\"getId\":{\"name\":\"getId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSlug\":{\"name\":\"getSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"getSavedId\":{\"name\":\"getSavedId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"isSaved\":{\"name\":\"isSaved\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"classifyConstraintError\":{\"name\":\"classifyConstraintError\",\"async\":false,\"parameters\":[{\"name\":\"message\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"'unique' | 'not_null' | null\",\"isStatic\":true,\"isPublic\":true},\"loadFromId\":{\"name\":\"loadFromId\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"loadFromSlug\":{\"name\":\"loadFromSlug\",\"async\":true,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"is\":{\"name\":\"is\",\"async\":true,\"parameters\":[{\"name\":\"criteria\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"do\":{\"name\":\"do\",\"async\":true,\"parameters\":[{\"name\":\"instructions\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"describe\":{\"name\":\"describe\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"AiOperationOptions\",\"optional\":true}],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isRelatedLoaded\":{\"name\":\"isRelatedLoaded\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"_setLoadedRelationship\":{\"name\":\"_setLoadedRelationship\",\"async\":false,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"any\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"loadRelated\":{\"name\":\"loadRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"loadRelatedMany\":{\"name\":\"loadRelatedMany\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any[]>\",\"isStatic\":false,\"isPublic\":true},\"getRelated\":{\"name\":\"getRelated\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"opts\",\"type\":\"LoadRelatedOptions\",\"optional\":true}],\"returnType\":\"Promise<any>\",\"isStatic\":false,\"isPublic\":true},\"getAvailableTools\":{\"name\":\"getAvailableTools\",\"async\":false,\"parameters\":[],\"returnType\":\"AITool[]\",\"isStatic\":false,\"isPublic\":true},\"executeToolCall\":{\"name\":\"executeToolCall\",\"async\":true,\"parameters\":[{\"name\":\"toolCall\",\"type\":\"ToolCall\",\"optional\":false}],\"returnType\":\"Promise<ToolCallResult>\",\"isStatic\":false,\"isPublic\":true},\"remember\":{\"name\":\"remember\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"recall\":{\"name\":\"recall\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"recallAll\":{\"name\":\"recallAll\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string>>\",\"isStatic\":false,\"isPublic\":true},\"forget\":{\"name\":\"forget\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"forgetScope\":{\"name\":\"forgetScope\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"generateEmbeddings\":{\"name\":\"generateEmbeddings\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"GenerateEmbeddingsOptions\",\"optional\":true}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getEmbedding\":{\"name\":\"getEmbedding\",\"async\":true,\"parameters\":[{\"name\":\"fieldName\",\"type\":\"string\",\"optional\":false},{\"name\":\"model\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<number[] | null>\",\"isStatic\":false,\"isPublic\":true},\"hasStaleEmbeddings\":{\"name\":\"hasStaleEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"clearEmbeddings\":{\"name\":\"clearEmbeddings\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSuspended\":{\"name\":\"isSuspended\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isRoot\":{\"name\":\"isRoot\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"canCascadeToChildren\":{\"name\":\"canCascadeToChildren\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"acceptsInheritance\":{\"name\":\"acceptsInheritance\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"getAncestorIds\":{\"name\":\"getAncestorIds\",\"async\":false,\"parameters\":[],\"returnType\":\"string[]\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableStrategy\":\"sti\",\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"Tenant\",\"collectionExportName\":\"TenantCollection\",\"schema\":{\"tableName\":\"tenants\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenants\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"_meta_type\\\" TEXT NOT NULL,\\n \\\"_meta_data\\\" JSON,\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"name\\\" TEXT DEFAULT '',\\n \\\"status\\\" TEXT,\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"parent_tenant_id\\\" UUID,\\n \\\"hierarchy_level\\\" INTEGER DEFAULT 0,\\n \\\"hierarchy_path\\\" TEXT DEFAULT '',\\n \\\"cascade_permissions\\\" BOOLEAN DEFAULT TRUE,\\n \\\"inherit_permissions\\\" BOOLEAN DEFAULT TRUE\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"_meta_type\":{\"type\":\"TEXT\",\"notNull\":true},\"_meta_data\":{\"type\":\"JSON\",\"notNull\":false},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"name\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"status\":{\"type\":\"TEXT\",\"notNull\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"parent_tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":false},\"hierarchy_level\":{\"type\":\"INTEGER\",\"notNull\":false,\"default\":0},\"hierarchy_path\":{\"type\":\"TEXT\",\"notNull\":false,\"default\":\"\"},\"cascade_permissions\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true},\"inherit_permissions\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"default\":true}},\"indexes\":[{\"name\":\"tenants_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenants_slug_context_meta_type_idx\",\"columns\":[\"slug\",\"context\",\"_meta_type\"],\"unique\":true},{\"name\":\"tenants_meta_type_idx\",\"columns\":[\"_meta_type\"]}],\"version\":\"35dbdaec\"}},\"@happyvertical/smrt-users:TenantIntegration\":{\"name\":\"tenantintegration\",\"className\":\"TenantIntegration\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantIntegration\",\"collection\":\"tenantintegrations\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/TenantIntegration.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"provider\":{\"type\":\"text\",\"required\":false,\"default\":\"aws\"},\"externalIds\":{\"type\":\"text\",\"required\":false},\"status\":{\"type\":\"text\",\"required\":false,\"default\":\"unprovisioned\"},\"lastCheckedAt\":{\"type\":\"datetime\",\"required\":false},\"lastCheckSummary\":{\"type\":\"text\",\"required\":false},\"lastError\":{\"type\":\"text\",\"required\":false}},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"getExternalIds\":{\"name\":\"getExternalIds\",\"async\":false,\"parameters\":[],\"returnType\":\"Record<string, string>\",\"isStatic\":false,\"isPublic\":true},\"setExternalIds\":{\"name\":\"setExternalIds\",\"async\":false,\"parameters\":[{\"name\":\"externalIds\",\"type\":\"Record<string, string> | string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getExternalId\":{\"name\":\"getExternalId\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"string | undefined\",\"isStatic\":false,\"isPublic\":true},\"setExternalId\":{\"name\":\"setExternalId\",\"async\":false,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"value\",\"type\":\"string | undefined\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getLastCheckSummary\":{\"name\":\"getLastCheckSummary\",\"async\":false,\"parameters\":[],\"returnType\":\"TenantIntegrationCheckSummary[]\",\"isStatic\":false,\"isPublic\":true},\"setLastCheckSummary\":{\"name\":\"setLastCheckSummary\",\"async\":false,\"parameters\":[{\"name\":\"summary\",\"type\":\"TenantIntegrationCheckSummary[] | string\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"recordDoctorRun\":{\"name\":\"recordDoctorRun\",\"async\":false,\"parameters\":[{\"name\":\"outcome\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"tenant_integrations\",\"conflictColumns\":[\"tenant_id\",\"provider\"],\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"TenantIntegration\",\"collectionExportName\":\"TenantIntegrationCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"tenant_integrations\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_integrations\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"provider\\\" TEXT DEFAULT 'aws',\\n \\\"external_ids\\\" TEXT,\\n \\\"status\\\" TEXT DEFAULT 'unprovisioned',\\n \\\"last_checked_at\\\" TIMESTAMP,\\n \\\"last_check_summary\\\" TEXT,\\n \\\"last_error\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"provider\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"aws\"},\"external_ids\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"unprovisioned\"},\"last_checked_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_check_summary\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"tenant_integrations_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_integrations_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\"],\"unique\":true}],\"version\":\"3ed31966\"}},\"@happyvertical/smrt-users:TenantPermissionOverride\":{\"name\":\"tenantpermissionoverride\",\"className\":\"TenantPermissionOverride\",\"qualifiedName\":\"@happyvertical/smrt-users:TenantPermissionOverride\",\"collection\":\"tenantpermissionoverrides\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/TenantPermissionOverride.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"tenantId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Tenant\",\"_meta\":{\"required\":true}},\"permissionId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"Permission\",\"_meta\":{\"required\":true}},\"effect\":{\"type\":\"text\",\"required\":false,\"_meta\":{}}},\"methods\":{\"isInherit\":{\"name\":\"isInherit\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isGrant\":{\"name\":\"isGrant\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDeny\":{\"name\":\"isDeny\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"hasExplicitEffect\":{\"name\":\"hasExplicitEffect\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"TenantPermissionOverride\",\"collectionExportName\":\"TenantPermissionOverrideCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"permissionId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"}],\"schema\":{\"tableName\":\"tenant_permission_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"tenant_permission_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"permission_id\\\" UUID NOT NULL,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"permission_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"tenant_permission_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"tenant_permission_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"f3bec965\"}},\"@happyvertical/smrt-users:User\":{\"name\":\"user\",\"className\":\"User\",\"qualifiedName\":\"@happyvertical/smrt-users:User\",\"collection\":\"users\",\"filePath\":\"/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-5hwvc/smrt/smrt/packages/users/src/models/User.ts\",\"packageName\":\"@happyvertical/smrt-users\",\"fields\":{\"profileId\":{\"type\":\"crossPackageRef\",\"required\":false,\"related\":\"@happyvertical/smrt-profiles:Profile\",\"_meta\":{\"unique\":true}},\"email\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"emailKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true,\"unique\":true,\"readonly\":true},\"readonly\":true},\"status\":{\"type\":\"text\",\"required\":false,\"_meta\":{}},\"lastLoginAt\":{\"type\":\"datetime\",\"required\":false}},\"methods\":{\"hasValidEmail\":{\"name\":\"hasValidEmail\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isActive\":{\"name\":\"isActive\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isSuspended\":{\"name\":\"isSuspended\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isPending\":{\"name\":\"isPending\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"recordLogin\":{\"name\":\"recordLogin\",\"async\":false,\"parameters\":[],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"api\":{\"include\":[\"list\",\"get\"]},\"mcp\":{\"include\":[\"list\",\"get\"]},\"cli\":true},\"extends\":\"SmrtObject\",\"exportName\":\"User\",\"collectionExportName\":\"UserCollection\",\"schema\":{\"tableName\":\"users\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"users\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"profile_id\\\" UUID UNIQUE,\\n \\\"email\\\" TEXT DEFAULT '',\\n \\\"email_key\\\" TEXT UNIQUE,\\n \\\"status\\\" TEXT,\\n \\\"last_login_at\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"profile_id\":{\"type\":\"UUID\",\"referenceKind\":\"crossPackageRef\",\"notNull\":false,\"unique\":true},\"email\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"email_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":true},\"status\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"last_login_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"users_id_idx\",\"columns\":[\"id\"]},{\"name\":\"users_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"38fd1677\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-mobile-contract\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
20
24
|
//#endregion
|
|
21
25
|
//#region src/types/index.ts
|
|
22
26
|
var DEFAULT_ROLE_SLUGS = {
|
|
@@ -69,7 +73,7 @@ function isValidEmail(email) {
|
|
|
69
73
|
}
|
|
70
74
|
function normalizeEmail(email) {
|
|
71
75
|
if (!email || typeof email !== "string") return "";
|
|
72
|
-
return email.trim()
|
|
76
|
+
return email.trim() ? normalizeIdentityEmail(email) : "";
|
|
73
77
|
}
|
|
74
78
|
var User = class extends SmrtObject {
|
|
75
79
|
profileId = "";
|
|
@@ -77,6 +81,7 @@ var User = class extends SmrtObject {
|
|
|
77
81
|
* User's email address (unique, used for lookup)
|
|
78
82
|
*/
|
|
79
83
|
email = "";
|
|
84
|
+
emailKey = null;
|
|
80
85
|
status = UserStatus.ACTIVE;
|
|
81
86
|
/**
|
|
82
87
|
* Last login timestamp
|
|
@@ -120,8 +125,20 @@ var User = class extends SmrtObject {
|
|
|
120
125
|
recordLogin() {
|
|
121
126
|
this.lastLoginAt = /* @__PURE__ */ new Date();
|
|
122
127
|
}
|
|
128
|
+
/** Keep the durable email key derived from the public email field. */
|
|
129
|
+
async save() {
|
|
130
|
+
this.email = normalizeEmail(this.email);
|
|
131
|
+
this.emailKey = this.email || null;
|
|
132
|
+
return super.save();
|
|
133
|
+
}
|
|
123
134
|
};
|
|
124
|
-
__decorateClass$12([crossPackageRef("@happyvertical/smrt-profiles:Profile")], User.prototype, "profileId", 2);
|
|
135
|
+
__decorateClass$12([crossPackageRef("@happyvertical/smrt-profiles:Profile", { unique: true })], User.prototype, "profileId", 2);
|
|
136
|
+
__decorateClass$12([field({
|
|
137
|
+
type: "text",
|
|
138
|
+
nullable: true,
|
|
139
|
+
unique: true,
|
|
140
|
+
readonly: true
|
|
141
|
+
})], User.prototype, "emailKey", 2);
|
|
125
142
|
__decorateClass$12([field({ type: "text" })], User.prototype, "status", 2);
|
|
126
143
|
User = __decorateClass$12([smrt({
|
|
127
144
|
api: { include: ["list", "get"] },
|
|
@@ -2546,9 +2563,64 @@ var TenantPermissionOverrideCollection = class extends SmrtCollection {
|
|
|
2546
2563
|
}
|
|
2547
2564
|
};
|
|
2548
2565
|
//#endregion
|
|
2566
|
+
//#region src/migrations/backfillUserEmailKeys.ts
|
|
2567
|
+
var USER_EMAIL_KEY_BACKFILL_NAME = "@happyvertical/smrt-users:user-email-keys:v1";
|
|
2568
|
+
var UserEmailKeyBackfillError = class extends Error {
|
|
2569
|
+
constructor(code, message, duplicates = []) {
|
|
2570
|
+
super(message);
|
|
2571
|
+
this.code = code;
|
|
2572
|
+
this.duplicates = duplicates;
|
|
2573
|
+
this.name = "UserEmailKeyBackfillError";
|
|
2574
|
+
}
|
|
2575
|
+
code;
|
|
2576
|
+
duplicates;
|
|
2577
|
+
};
|
|
2578
|
+
async function backfillUserEmailKeys(db) {
|
|
2579
|
+
if (!db.transaction) throw new UserEmailKeyBackfillError("transaction_required", "User email-key backfill requires a root database with transaction().");
|
|
2580
|
+
await new BackfillTracker({ db }).initialize();
|
|
2581
|
+
return db.transaction(async (tx) => {
|
|
2582
|
+
BackfillTracker.inheritInitialization(tx, db);
|
|
2583
|
+
const result = await tx.query("SELECT id, email, email_key FROM users ORDER BY id");
|
|
2584
|
+
const counts = /* @__PURE__ */ new Map();
|
|
2585
|
+
const updates = [];
|
|
2586
|
+
for (const row of result.rows) {
|
|
2587
|
+
const id = typeof row.id === "string" ? row.id : "";
|
|
2588
|
+
if (!id) throw new Error("User email-key backfill found a row without an id.");
|
|
2589
|
+
const email = typeof row.email === "string" ? row.email : "";
|
|
2590
|
+
const emailKey = email.trim() ? normalizeIdentityEmail(email) : null;
|
|
2591
|
+
if (emailKey) counts.set(emailKey, (counts.get(emailKey) ?? 0) + 1);
|
|
2592
|
+
if ((typeof row.email_key === "string" ? row.email_key : null) !== emailKey) updates.push({
|
|
2593
|
+
emailKey,
|
|
2594
|
+
id
|
|
2595
|
+
});
|
|
2596
|
+
}
|
|
2597
|
+
const duplicates = [...counts.entries()].filter(([, userCount]) => userCount > 1).map(([emailKey, userCount]) => ({
|
|
2598
|
+
emailKey,
|
|
2599
|
+
userCount
|
|
2600
|
+
})).sort((left, right) => left.emailKey.localeCompare(right.emailKey));
|
|
2601
|
+
if (duplicates.length > 0) throw new UserEmailKeyBackfillError("duplicate_email", "Cannot backfill User.emailKey because legacy User emails contain normalized duplicates.", duplicates);
|
|
2602
|
+
for (const update of updates) await tx.query("UPDATE users SET email_key = NULL WHERE id = ?", update.id);
|
|
2603
|
+
for (const update of updates) await tx.query("UPDATE users SET email_key = ? WHERE id = ?", update.emailKey, update.id);
|
|
2604
|
+
await new BackfillTracker({ db: tx }).recordApplied(USER_EMAIL_KEY_BACKFILL_NAME, {
|
|
2605
|
+
description: "Canonical User email keys are current.",
|
|
2606
|
+
packageName: "@happyvertical/smrt-users"
|
|
2607
|
+
});
|
|
2608
|
+
return { updated: updates.length };
|
|
2609
|
+
});
|
|
2610
|
+
}
|
|
2611
|
+
//#endregion
|
|
2549
2612
|
//#region src/collections/UserCollection.ts
|
|
2550
|
-
var
|
|
2613
|
+
var OidcProvisioningError = class extends Error {
|
|
2614
|
+
constructor(code, message, options) {
|
|
2615
|
+
super(message, options);
|
|
2616
|
+
this.code = code;
|
|
2617
|
+
this.name = "OidcProvisioningError";
|
|
2618
|
+
}
|
|
2619
|
+
code;
|
|
2620
|
+
};
|
|
2621
|
+
var UserCollection = class UserCollection extends SmrtCollection {
|
|
2551
2622
|
static _itemClass = User;
|
|
2623
|
+
userEmailKeysReadyPromise = null;
|
|
2552
2624
|
/**
|
|
2553
2625
|
* Find user by email address
|
|
2554
2626
|
*/
|
|
@@ -2613,9 +2685,20 @@ var UserCollection = class extends SmrtCollection {
|
|
|
2613
2685
|
* 2. Link OidcIdentity to the Profile
|
|
2614
2686
|
* 3. Find or create User linked to the Profile
|
|
2615
2687
|
*
|
|
2616
|
-
*
|
|
2688
|
+
* Direct callers must supply claims from a trusted, already validated token
|
|
2689
|
+
* boundary. OidcLoginService performs discovery, token exchange, issuer and
|
|
2690
|
+
* subject validation, and verified-email source pairing before calling this
|
|
2691
|
+
* collection method.
|
|
2692
|
+
*
|
|
2693
|
+
* @param claims - Trusted OIDC token claims (sub, iss, email, name)
|
|
2617
2694
|
* @param provider - Provider name (e.g., 'kanidm', 'keycloak', 'google')
|
|
2618
|
-
* @param options -
|
|
2695
|
+
* @param options - Login recording, unverified-email compatibility, and an
|
|
2696
|
+
* application Profile resolver. The resolver runs inside the provisioning
|
|
2697
|
+
* transaction before provisioning returns, may be retried, and must be
|
|
2698
|
+
* idempotent. For a new identity, its returned Profile is still checked as
|
|
2699
|
+
* the unique, global, unowned Person for the verified normalized email. For
|
|
2700
|
+
* an exact existing identity, it may only confirm the already-linked Profile
|
|
2701
|
+
* and cannot rebind it.
|
|
2619
2702
|
* @returns User, Profile, OidcIdentity, and whether profile was created
|
|
2620
2703
|
*
|
|
2621
2704
|
* @example
|
|
@@ -2638,34 +2721,207 @@ var UserCollection = class extends SmrtCollection {
|
|
|
2638
2721
|
* ```
|
|
2639
2722
|
*/
|
|
2640
2723
|
async getOrCreateFromOidc(claims, provider, options) {
|
|
2641
|
-
const sub = claims?.sub
|
|
2642
|
-
const iss = claims?.iss
|
|
2643
|
-
if (
|
|
2644
|
-
|
|
2724
|
+
const sub = claims?.sub;
|
|
2725
|
+
const iss = claims?.iss;
|
|
2726
|
+
if (typeof sub !== "string" || sub.trim().length === 0 || typeof iss !== "string" || iss.trim().length === 0) throw new Error("Invalid OIDC claims: both \"sub\" and \"iss\" must be non-empty strings.");
|
|
2727
|
+
const suppliedEmail = claims.email;
|
|
2728
|
+
if (typeof suppliedEmail !== "string" || !suppliedEmail.trim()) throw new Error("OIDC claims missing required \"email\" for user creation.");
|
|
2729
|
+
const email = normalizeIdentityEmail(suppliedEmail);
|
|
2645
2730
|
const allowUnverified = options?.allowUnverifiedEmail === true;
|
|
2646
2731
|
if (claims.email_verified === false && !allowUnverified) throw new Error("OIDC claims report an unverified email; refusing to provision a user.");
|
|
2647
|
-
const
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
email: claims.email,
|
|
2653
|
-
...shouldRecordLogin ? { lastLoginAt: /* @__PURE__ */ new Date() } : {},
|
|
2654
|
-
profileId: profile.id,
|
|
2655
|
-
status: UserStatus.ACTIVE
|
|
2732
|
+
const normalizedClaims = Object.freeze({
|
|
2733
|
+
...claims,
|
|
2734
|
+
sub,
|
|
2735
|
+
iss,
|
|
2736
|
+
email
|
|
2656
2737
|
});
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2738
|
+
const db = this.requireProvisioningDatabase();
|
|
2739
|
+
return coordinateOidcProvisioning({
|
|
2740
|
+
db,
|
|
2741
|
+
lockKeys: [`identity:${OidcIdentity.buildIdentityKey(iss, sub)}`, `email:${email}`],
|
|
2742
|
+
isRaceConflict: isUserOidcRaceConflict,
|
|
2743
|
+
createTransactionError: (message, cause) => new OidcProvisioningError("transaction_required", message, { cause }),
|
|
2744
|
+
createConcurrencyError: (cause) => new OidcProvisioningError("concurrency_conflict", "Concurrent OIDC provisioning did not converge on one identity.", { cause }),
|
|
2745
|
+
rebindRootResult: (result, rootDb) => this.rebindOidcProvisioningResult(result, rootDb),
|
|
2746
|
+
provision: (tx) => withSystemContext(async () => {
|
|
2747
|
+
return (tx === db ? this : await UserCollection.create({ db: tx })).provisionOidcIdentity(normalizedClaims, provider, options, tx);
|
|
2748
|
+
})
|
|
2749
|
+
});
|
|
2750
|
+
}
|
|
2751
|
+
requireProvisioningDatabase() {
|
|
2752
|
+
const db = this.options.db;
|
|
2753
|
+
if (!db || typeof db !== "object" || !("query" in db)) throw new OidcProvisioningError("transaction_required", "OIDC provisioning requires an initialized database.");
|
|
2754
|
+
return db;
|
|
2755
|
+
}
|
|
2756
|
+
async provisionOidcIdentity(claims, provider, options, db) {
|
|
2757
|
+
const { ProfileCollection } = await import("@happyvertical/smrt-profiles");
|
|
2758
|
+
const profileCollection = await ProfileCollection.create({ db });
|
|
2759
|
+
const identityCollection = await OidcIdentityCollection.create({ db });
|
|
2760
|
+
const existingIdentity = await this.findUniqueOidcIdentity(identityCollection, claims);
|
|
2761
|
+
const resolvedProfile = options?.resolveProfile ? await options.resolveProfile({
|
|
2762
|
+
claims: Object.freeze({ ...claims }),
|
|
2763
|
+
db,
|
|
2764
|
+
provider,
|
|
2765
|
+
users: this
|
|
2766
|
+
}) : void 0;
|
|
2767
|
+
if (resolvedProfile === null) throw new OidcProvisioningError("rejected", "OIDC provisioning was rejected by the application resolver.");
|
|
2768
|
+
if (existingIdentity) {
|
|
2769
|
+
const profileId2 = requireId(existingIdentity.profileId, "OIDC identity Profile");
|
|
2770
|
+
if (resolvedProfile && requireId(resolvedProfile.id, "Resolved Profile") !== profileId2) throw new OidcProvisioningError("rejected", "An application resolver cannot rebind an existing OIDC identity.");
|
|
2771
|
+
const owners2 = await this.findProfileOwners(profileId2);
|
|
2772
|
+
if (owners2.length > 1) throw new OidcProvisioningError("profile_owned", `Profile ${profileId2} belongs to multiple Users.`);
|
|
2773
|
+
const profile2 = await profileCollection.reserveCanonicalIdentityEmail(profileId2, owners2[0] ? void 0 : claims.email);
|
|
2774
|
+
const user2 = await this.finishUserProvisioning(profile2, owners2[0], claims.email, options);
|
|
2775
|
+
existingIdentity.email = claims.email;
|
|
2776
|
+
existingIdentity.lastUsedAt = /* @__PURE__ */ new Date();
|
|
2777
|
+
await existingIdentity.save();
|
|
2778
|
+
return {
|
|
2779
|
+
user: user2,
|
|
2780
|
+
profile: profile2,
|
|
2781
|
+
oidcIdentity: existingIdentity,
|
|
2782
|
+
created: false
|
|
2783
|
+
};
|
|
2784
|
+
}
|
|
2785
|
+
let profile = resolvedProfile;
|
|
2786
|
+
let created = false;
|
|
2787
|
+
if (profile) {
|
|
2788
|
+
if (claims.email_verified !== true) throw new OidcProvisioningError("rejected", "An application resolver cannot reuse a Profile without a verified OIDC email.");
|
|
2789
|
+
profile = await profileCollection.reserveCanonicalIdentityEmail(requireId(profile.id, "Resolved Profile"), claims.email);
|
|
2790
|
+
} else if (claims.email_verified === true) {
|
|
2791
|
+
profile = await profileCollection.findUniqueGlobalPersonByEmail(claims.email);
|
|
2792
|
+
if (profile) profile = await profileCollection.reserveCanonicalIdentityEmail(requireId(profile.id, "Matched Profile"), claims.email);
|
|
2793
|
+
} else if (await profileCollection.findUniqueGlobalPersonByEmail(claims.email)) throw new OidcProvisioningError("rejected", `OIDC email ${claims.email} is not verified and already belongs to a Profile.`);
|
|
2794
|
+
if (!profile) {
|
|
2795
|
+
profile = await createOidcProvisioningPerson(db, {
|
|
2796
|
+
email: claims.email,
|
|
2797
|
+
name: claims.name,
|
|
2798
|
+
preferredUsername: claims.preferred_username,
|
|
2799
|
+
subject: claims.sub
|
|
2800
|
+
});
|
|
2801
|
+
created = true;
|
|
2802
|
+
}
|
|
2803
|
+
const profileId = requireId(profile.id, "OIDC Profile");
|
|
2804
|
+
const owners = await this.findProfileOwners(profileId);
|
|
2805
|
+
if (owners.length > 0) {
|
|
2806
|
+
const concurrentIdentity = await this.findUniqueOidcIdentity(identityCollection, claims);
|
|
2807
|
+
if (owners.length === 1 && concurrentIdentity?.profileId === profileId) {
|
|
2808
|
+
const user2 = await this.finishUserProvisioning(profile, owners[0], claims.email, options);
|
|
2809
|
+
concurrentIdentity.email = claims.email;
|
|
2810
|
+
concurrentIdentity.lastUsedAt = /* @__PURE__ */ new Date();
|
|
2811
|
+
await concurrentIdentity.save();
|
|
2812
|
+
return {
|
|
2813
|
+
user: user2,
|
|
2814
|
+
profile,
|
|
2815
|
+
oidcIdentity: concurrentIdentity,
|
|
2816
|
+
created: false
|
|
2817
|
+
};
|
|
2818
|
+
}
|
|
2819
|
+
throw new OidcProvisioningError("profile_owned", `Profile ${profileId} already belongs to another User.`);
|
|
2660
2820
|
}
|
|
2821
|
+
const oidcIdentity = await insertOidcProvisioningIdentity(db, {
|
|
2822
|
+
email: claims.email,
|
|
2823
|
+
issuer: claims.iss,
|
|
2824
|
+
profileId,
|
|
2825
|
+
provider,
|
|
2826
|
+
subject: claims.sub
|
|
2827
|
+
});
|
|
2661
2828
|
return {
|
|
2662
|
-
user,
|
|
2829
|
+
user: await this.finishUserProvisioning(profile, void 0, claims.email, options),
|
|
2663
2830
|
profile,
|
|
2664
2831
|
oidcIdentity,
|
|
2665
2832
|
created
|
|
2666
2833
|
};
|
|
2667
2834
|
}
|
|
2835
|
+
async findProfileOwners(profileId) {
|
|
2836
|
+
return this.list({
|
|
2837
|
+
where: { profileId },
|
|
2838
|
+
limit: 2
|
|
2839
|
+
});
|
|
2840
|
+
}
|
|
2841
|
+
async rebindOidcProvisioningResult(result, rootDb) {
|
|
2842
|
+
const profileId = requireId(result.profile.id, "OIDC Profile");
|
|
2843
|
+
const identityId = requireId(result.oidcIdentity.id, "OIDC identity");
|
|
2844
|
+
const userId = requireId(result.user.id, "OIDC User");
|
|
2845
|
+
return withSystemContext(async () => {
|
|
2846
|
+
const { ProfileCollection } = await import("@happyvertical/smrt-profiles");
|
|
2847
|
+
const users = await UserCollection.create({ db: rootDb });
|
|
2848
|
+
const profiles = await ProfileCollection.create({ db: rootDb });
|
|
2849
|
+
const identities = await OidcIdentityCollection.create({ db: rootDb });
|
|
2850
|
+
const [user, profile, oidcIdentity] = await Promise.all([
|
|
2851
|
+
users.get({ id: userId }),
|
|
2852
|
+
profiles.get({ id: profileId }),
|
|
2853
|
+
identities.get({ id: identityId })
|
|
2854
|
+
]);
|
|
2855
|
+
if (!user || !profile || !oidcIdentity) throw new OidcProvisioningError("concurrency_conflict", "Committed OIDC provisioning result was not found.");
|
|
2856
|
+
return {
|
|
2857
|
+
...result,
|
|
2858
|
+
user,
|
|
2859
|
+
profile,
|
|
2860
|
+
oidcIdentity
|
|
2861
|
+
};
|
|
2862
|
+
});
|
|
2863
|
+
}
|
|
2864
|
+
async findUniqueOidcIdentity(identities, claims) {
|
|
2865
|
+
try {
|
|
2866
|
+
return await identities.findBySubject(claims.iss, claims.sub) ?? void 0;
|
|
2867
|
+
} catch (error) {
|
|
2868
|
+
if (error instanceof AmbiguousOidcIdentityError) throw new OidcProvisioningError("ambiguous_identity", `Multiple OIDC identities exist for ${claims.iss} subject ${claims.sub}.`, { cause: error });
|
|
2869
|
+
throw error;
|
|
2870
|
+
}
|
|
2871
|
+
}
|
|
2872
|
+
async finishUserProvisioning(profile, existingOwner, email, options) {
|
|
2873
|
+
const shouldRecordLogin = options?.recordLogin !== false;
|
|
2874
|
+
if (existingOwner) {
|
|
2875
|
+
if (shouldRecordLogin) {
|
|
2876
|
+
existingOwner.recordLogin();
|
|
2877
|
+
await existingOwner.save();
|
|
2878
|
+
}
|
|
2879
|
+
return existingOwner;
|
|
2880
|
+
}
|
|
2881
|
+
if ((await this.findUsersByNormalizedEmail(email)).length > 0) throw new OidcProvisioningError("user_email_conflict", `A User already exists for ${email} without the selected Profile.`);
|
|
2882
|
+
return saveOidcRaceArbiter(() => this.create({
|
|
2883
|
+
email,
|
|
2884
|
+
...shouldRecordLogin ? { lastLoginAt: /* @__PURE__ */ new Date() } : {},
|
|
2885
|
+
profileId: requireId(profile.id, "OIDC Profile"),
|
|
2886
|
+
status: UserStatus.ACTIVE
|
|
2887
|
+
}));
|
|
2888
|
+
}
|
|
2889
|
+
async findUsersByNormalizedEmail(email) {
|
|
2890
|
+
const db = this.requireProvisioningDatabase();
|
|
2891
|
+
await this.ensureUserEmailKeysReady(db);
|
|
2892
|
+
const result = await db.query(`SELECT id, email, email_key
|
|
2893
|
+
FROM users
|
|
2894
|
+
WHERE email_key = ?
|
|
2895
|
+
ORDER BY created_at ASC, id ASC
|
|
2896
|
+
LIMIT 2`, email);
|
|
2897
|
+
for (const row of result.rows) this.assertUserEmailKeyCurrent(row, email);
|
|
2898
|
+
return (await Promise.all(result.rows.map((row) => typeof row.id === "string" ? this.get({ id: row.id }) : null))).filter((user) => user !== null);
|
|
2899
|
+
}
|
|
2900
|
+
/** Require the deploy-time backfill marker before indexed identity reads. */
|
|
2901
|
+
async ensureUserEmailKeysReady(db) {
|
|
2902
|
+
if (!this.userEmailKeysReadyPromise) this.userEmailKeysReadyPromise = this.checkUserEmailKeysReady(db).catch((error) => {
|
|
2903
|
+
this.userEmailKeysReadyPromise = null;
|
|
2904
|
+
throw error;
|
|
2905
|
+
});
|
|
2906
|
+
return this.userEmailKeysReadyPromise;
|
|
2907
|
+
}
|
|
2908
|
+
async checkUserEmailKeysReady(db) {
|
|
2909
|
+
if (await new BackfillTracker({ db }).isApplied("@happyvertical/smrt-users:user-email-keys:v1")) return;
|
|
2910
|
+
throw new OidcProvisioningError("user_email_backfill_required", "User email keys are not marked ready; run backfillUserEmailKeys() before OIDC provisioning.");
|
|
2911
|
+
}
|
|
2912
|
+
assertUserEmailKeyCurrent(row, normalizedEmail) {
|
|
2913
|
+
const storedEmail = typeof row.email === "string" ? row.email : "";
|
|
2914
|
+
const expectedKey = storedEmail.trim() ? normalizeIdentityEmail(storedEmail) : null;
|
|
2915
|
+
if ((typeof row.email_key === "string" ? row.email_key : null) !== expectedKey || normalizedEmail !== void 0 && expectedKey !== normalizedEmail) throw new OidcProvisioningError("user_email_backfill_required", `User ${String(row.id ?? "<unknown>")} has a missing or stale email key; run backfillUserEmailKeys() before OIDC provisioning.`);
|
|
2916
|
+
}
|
|
2668
2917
|
};
|
|
2918
|
+
function requireId(value, label) {
|
|
2919
|
+
if (typeof value !== "string" || !value) throw new Error(`${label} did not produce an id.`);
|
|
2920
|
+
return value;
|
|
2921
|
+
}
|
|
2922
|
+
function isUserOidcRaceConflict(error) {
|
|
2923
|
+
return isOidcProvisioningRaceConflict(error, { messagePatterns: [/users[._].*profile_id|users_profile_id/iu] });
|
|
2924
|
+
}
|
|
2669
2925
|
//#endregion
|
|
2670
2926
|
//#region ../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/buffer_utils.js
|
|
2671
2927
|
var encoder = new TextEncoder();
|
|
@@ -4168,10 +4424,11 @@ function normalizeClaims(payload, issuer, sourceName = "OIDC claims") {
|
|
|
4168
4424
|
}
|
|
4169
4425
|
function mergeClaims(idTokenClaims, userInfoClaims) {
|
|
4170
4426
|
if (userInfoClaims.sub !== idTokenClaims.sub) throw new OidcLoginError("OIDC userinfo subject does not match ID token.");
|
|
4427
|
+
const useIdTokenEmail = idTokenClaims.email !== void 0;
|
|
4171
4428
|
return {
|
|
4172
4429
|
...idTokenClaims,
|
|
4173
|
-
email: idTokenClaims.email
|
|
4174
|
-
email_verified: idTokenClaims.email_verified
|
|
4430
|
+
email: useIdTokenEmail ? idTokenClaims.email : userInfoClaims.email,
|
|
4431
|
+
email_verified: useIdTokenEmail ? idTokenClaims.email_verified : userInfoClaims.email_verified,
|
|
4175
4432
|
name: idTokenClaims.name ?? userInfoClaims.name,
|
|
4176
4433
|
preferred_username: idTokenClaims.preferred_username ?? userInfoClaims.preferred_username
|
|
4177
4434
|
};
|
|
@@ -4245,18 +4502,20 @@ var OidcLoginService = class {
|
|
|
4245
4502
|
clockTolerance;
|
|
4246
4503
|
fetchImpl;
|
|
4247
4504
|
metadataCacheTtlMs;
|
|
4505
|
+
resolveProfile;
|
|
4248
4506
|
metadataFetchedAt = 0;
|
|
4249
4507
|
metadataPromise;
|
|
4250
4508
|
remoteJwks;
|
|
4251
4509
|
provider;
|
|
4252
4510
|
providerName;
|
|
4253
4511
|
constructor(options) {
|
|
4254
|
-
const { clockTolerance, fetch: fetchOverride, metadataCacheTtlMs, provider, providerName, ...classOptions } = options;
|
|
4512
|
+
const { clockTolerance, fetch: fetchOverride, metadataCacheTtlMs, provider, providerName, resolveProfile, ...classOptions } = options;
|
|
4255
4513
|
if (!provider.redirectUri) throw new OidcLoginError(`OIDC provider "${providerName}" requires a redirectUri.`);
|
|
4256
4514
|
this.classOptions = classOptions;
|
|
4257
4515
|
this.clockTolerance = clockTolerance ?? DEFAULT_CLOCK_TOLERANCE_SECONDS;
|
|
4258
4516
|
this.fetchImpl = ensureFetch(fetchOverride);
|
|
4259
4517
|
this.metadataCacheTtlMs = metadataCacheTtlMs ?? DEFAULT_METADATA_CACHE_TTL_MS;
|
|
4518
|
+
this.resolveProfile = resolveProfile;
|
|
4260
4519
|
this.provider = {
|
|
4261
4520
|
...provider,
|
|
4262
4521
|
issuer: normalizeIssuer(provider.issuer)
|
|
@@ -4334,7 +4593,7 @@ var OidcLoginService = class {
|
|
|
4334
4593
|
async completeLogin(callbackUrl, transaction) {
|
|
4335
4594
|
const { claims, tokens } = await this.exchangeCallback(callbackUrl, transaction);
|
|
4336
4595
|
return {
|
|
4337
|
-
...await (await UserCollection.create(this.classOptions)).getOrCreateFromOidc(claims, this.providerName),
|
|
4596
|
+
...await (await UserCollection.create(this.classOptions)).getOrCreateFromOidc(claims, this.providerName, { resolveProfile: this.resolveProfile }),
|
|
4338
4597
|
claims,
|
|
4339
4598
|
tokens
|
|
4340
4599
|
};
|
|
@@ -5912,6 +6171,6 @@ var TerminalAuthRateLimitError = class extends TerminalAuthError {
|
|
|
5912
6171
|
}
|
|
5913
6172
|
};
|
|
5914
6173
|
//#endregion
|
|
5915
|
-
export {
|
|
6174
|
+
export { PermissionCollection as $, UserEmailKeyBackfillError as A, Session as B, decodeOidcTransaction as C, TenantPermissionEffect as Ct, webapi_exports as D, resolveOidcProviderConfig as E, TenantHierarchyError as F, deriveOperationPermissionCollectionName as G, DEFAULT_ROLE_PERMISSION_PATTERNS as H, MAX_TENANT_HIERARCHY_DEPTH as I, registerPermissionDefinitions as J, deriveOperationPermissionSlug as K, Tenant as L, TenantPermissionOverrideCollection as M, TenantPermissionOverride as N, OidcProvisioningError as O, TenantCollection as P, Role as Q, SessionCollection as R, OidcLoginService as S, SessionStatus as St, getUsersOidcConfig as T, UserStatus as Tt, RolePermissionCollection as U, generateSessionId as V, PermissionCatalogService as W, RolePermission as X, syncPermissionCatalog as Y, RoleCollection as Z, readMobileBearerToken as _, DEFAULT_ROLES as _t, TerminalAuthRateLimitError as a, GroupRoleCollection as at, PermissionResolver as b, MembershipStatus as bt, assertOperationPermission as c, GroupMember as ct, getCurrentSessionPermissionContext as d, UsersCliAuthRequestCollection as dt, Permission as et, getRequestScopedDatabase as f, UsersCliAuthRequest as ft, MobileAuthService as g, AccessRequestStatus as gt, MobileAuthError as h, normalizeEmail as ht, TerminalAuthError as i, Membership as it, backfillUserEmailKeys as j, UserCollection as k, checkOperationPermission as l, GroupCollection as lt, withSessionPermissionContext as m, isValidEmail as mt, DEFAULT_CLI_AUTH_REQUEST_TTL_SECONDS as n, MembershipOverride as nt, TerminalAuthService as o, GroupRole as ot, withPrincipalPermissionContext as p, User as pt, normalizeOperationPermissionAction as q, DEFAULT_CLI_SESSION_TTL_SECONDS as r, MembershipCollection as rt, OperationPermissionError as s, GroupMemberCollection as st, DEFAULT_CLI_AUTH_POLL_INTERVAL_SECONDS as t, MembershipOverrideCollection as tt, hasOperationPermission as u, Group as ut, validateMobileRedirectUri as v, DEFAULT_ROLE_SLUGS as vt, encodeOidcTransaction as w, TenantStatus as wt, OidcLoginError as x, OverrideEffect as xt, SessionService as y, DEFAULT_TENANT_POLICY as yt, DEFAULT_SESSION_TTL as z };
|
|
5916
6175
|
|
|
5917
|
-
//# sourceMappingURL=TerminalAuthService-
|
|
6176
|
+
//# sourceMappingURL=TerminalAuthService-CpLKHLl5.js.map
|