@lssm/lib.identity-rbac 0.0.0-canary-20251217063201 → 0.0.0-canary-20251217072406

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.
Files changed (143) hide show
  1. package/dist/contracts/dist/capabilities/openbanking.js +88 -1
  2. package/dist/contracts/dist/client/index.js +5 -1
  3. package/dist/contracts/dist/client/react/feature-render.js +2 -1
  4. package/dist/contracts/dist/client/react/form-render.js +4 -1
  5. package/dist/contracts/dist/client/react/index.js +4 -1
  6. package/dist/contracts/dist/contract-registry/index.js +1 -1
  7. package/dist/contracts/dist/contract-registry/schemas.js +60 -1
  8. package/dist/contracts/dist/docs/PUBLISHING.docblock.js +16 -76
  9. package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +16 -350
  10. package/dist/contracts/dist/docs/index.js +29 -1
  11. package/dist/contracts/dist/docs/presentations.js +71 -1
  12. package/dist/contracts/dist/docs/registry.js +44 -1
  13. package/dist/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +16 -383
  14. package/dist/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +16 -68
  15. package/dist/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +16 -140
  16. package/dist/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +16 -86
  17. package/dist/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +16 -1
  18. package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +24 -2
  19. package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +21 -2
  20. package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +16 -213
  21. package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js +73 -5
  22. package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js +37 -1
  23. package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js +16 -1
  24. package/dist/contracts/dist/docs/tech/schema/README.docblock.js +20 -262
  25. package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js +48 -1
  26. package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +24 -2
  27. package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +23 -2
  28. package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +25 -16
  29. package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js +67 -1
  30. package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +22 -2
  31. package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js +40 -36
  32. package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +47 -1
  33. package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js +23 -2
  34. package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js +36 -3
  35. package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js +20 -1
  36. package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js +36 -3
  37. package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js +20 -1
  38. package/dist/contracts/dist/events.js +10 -1
  39. package/dist/contracts/dist/experiments/evaluator.js +1 -1
  40. package/dist/contracts/dist/index.js +71 -1
  41. package/dist/contracts/dist/install.js +2 -1
  42. package/dist/contracts/dist/integrations/contracts.js +377 -1
  43. package/dist/contracts/dist/integrations/index.js +18 -1
  44. package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +228 -1
  45. package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +159 -1
  46. package/dist/contracts/dist/integrations/openbanking/contracts/index.js +3 -1
  47. package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +210 -1
  48. package/dist/contracts/dist/integrations/openbanking/models.js +242 -1
  49. package/dist/contracts/dist/integrations/openbanking/telemetry.js +13 -1
  50. package/dist/contracts/dist/integrations/providers/elevenlabs.js +52 -1
  51. package/dist/contracts/dist/integrations/providers/gcs-storage.js +75 -1
  52. package/dist/contracts/dist/integrations/providers/gmail.js +87 -1
  53. package/dist/contracts/dist/integrations/providers/google-calendar.js +66 -1
  54. package/dist/contracts/dist/integrations/providers/index.js +11 -1
  55. package/dist/contracts/dist/integrations/providers/mistral.js +68 -1
  56. package/dist/contracts/dist/integrations/providers/postmark.js +68 -1
  57. package/dist/contracts/dist/integrations/providers/powens.js +116 -1
  58. package/dist/contracts/dist/integrations/providers/qdrant.js +73 -1
  59. package/dist/contracts/dist/integrations/providers/registry.js +10 -1
  60. package/dist/contracts/dist/integrations/providers/stripe.js +83 -1
  61. package/dist/contracts/dist/integrations/providers/twilio-sms.js +61 -1
  62. package/dist/contracts/dist/jsonschema.js +1 -1
  63. package/dist/contracts/dist/knowledge/contracts.js +306 -1
  64. package/dist/contracts/dist/knowledge/index.js +7 -1
  65. package/dist/contracts/dist/knowledge/spaces/email-threads.js +34 -1
  66. package/dist/contracts/dist/knowledge/spaces/financial-docs.js +34 -1
  67. package/dist/contracts/dist/knowledge/spaces/financial-overview.js +38 -1
  68. package/dist/contracts/dist/knowledge/spaces/index.js +6 -1
  69. package/dist/contracts/dist/knowledge/spaces/product-canon.js +34 -1
  70. package/dist/contracts/dist/knowledge/spaces/support-faq.js +37 -1
  71. package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +34 -1
  72. package/dist/contracts/dist/llm/exporters.js +19 -1
  73. package/dist/contracts/dist/llm/index.js +2 -1
  74. package/dist/contracts/dist/llm/prompts.js +1 -1
  75. package/dist/contracts/dist/onboarding-base.js +196 -1
  76. package/dist/contracts/dist/openapi.js +1 -1
  77. package/dist/contracts/dist/ownership.js +21 -1
  78. package/dist/contracts/dist/presentations.js +1 -1
  79. package/dist/contracts/dist/presentations.v2.js +11 -1
  80. package/dist/contracts/dist/prompt.js +1 -1
  81. package/dist/contracts/dist/promptRegistry.js +1 -1
  82. package/dist/contracts/dist/regenerator/index.js +1 -1
  83. package/dist/contracts/dist/regenerator/service.js +6 -1
  84. package/dist/contracts/dist/registry.js +2 -1
  85. package/dist/contracts/dist/resources.js +1 -1
  86. package/dist/contracts/dist/schema/dist/EnumType.js +2 -1
  87. package/dist/contracts/dist/schema/dist/FieldType.js +49 -1
  88. package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js +236 -1
  89. package/dist/contracts/dist/schema/dist/SchemaModel.js +34 -1
  90. package/dist/contracts/dist/schema/dist/entity/defineEntity.js +1 -1
  91. package/dist/contracts/dist/schema/dist/entity/index.js +2 -1
  92. package/dist/contracts/dist/schema/dist/entity/types.js +1 -1
  93. package/dist/contracts/dist/schema/dist/index.js +6 -1
  94. package/dist/contracts/dist/server/graphql-pothos.js +6 -1
  95. package/dist/contracts/dist/server/index.js +8 -1
  96. package/dist/contracts/dist/server/mcp/createMcpServer.js +4 -1
  97. package/dist/contracts/dist/server/mcp/registerPresentations.js +2 -1
  98. package/dist/contracts/dist/server/mcp/registerPrompts.js +1 -1
  99. package/dist/contracts/dist/server/mcp/registerResources.js +2 -1
  100. package/dist/contracts/dist/server/mcp/registerTools.js +1 -1
  101. package/dist/contracts/dist/server/provider-mcp.js +1 -1
  102. package/dist/contracts/dist/server/rest-elysia.js +1 -1
  103. package/dist/contracts/dist/server/rest-express.js +1 -1
  104. package/dist/contracts/dist/server/rest-generic.js +1 -1
  105. package/dist/contracts/dist/server/rest-next-app.js +1 -1
  106. package/dist/contracts/dist/server/rest-next-pages.js +1 -1
  107. package/dist/contracts/dist/spec.js +34 -1
  108. package/dist/contracts/dist/telemetry/index.js +1 -1
  109. package/dist/contracts/dist/telemetry/tracker.js +1 -1
  110. package/dist/contracts/dist/tests/index.js +1 -1
  111. package/dist/contracts/dist/tests/runner.js +2 -1
  112. package/dist/contracts/dist/workflow/index.js +1 -1
  113. package/dist/contracts/dist/workflow/runner.js +1 -1
  114. package/dist/contracts/index.js +5 -1
  115. package/dist/contracts/organization.d.ts +193 -193
  116. package/dist/contracts/organization.js +607 -1
  117. package/dist/contracts/rbac.d.ts +118 -118
  118. package/dist/contracts/rbac.js +487 -1
  119. package/dist/contracts/user.d.ts +139 -139
  120. package/dist/contracts/user.js +335 -1
  121. package/dist/entities/index.d.ts +160 -160
  122. package/dist/entities/index.js +35 -1
  123. package/dist/entities/organization.d.ts +59 -59
  124. package/dist/entities/organization.js +151 -1
  125. package/dist/entities/rbac.d.ts +63 -63
  126. package/dist/entities/rbac.js +138 -1
  127. package/dist/entities/user.d.ts +67 -67
  128. package/dist/entities/user.js +194 -1
  129. package/dist/events.d.ts +174 -174
  130. package/dist/events.js +543 -1
  131. package/dist/identity-rbac.feature.js +186 -1
  132. package/dist/index.js +14 -1
  133. package/dist/policies/engine.js +167 -1
  134. package/dist/policies/index.js +3 -1
  135. package/dist/schema/dist/EnumType.js +2 -1
  136. package/dist/schema/dist/FieldType.js +49 -1
  137. package/dist/schema/dist/ScalarTypeEnum.js +236 -1
  138. package/dist/schema/dist/SchemaModel.js +34 -1
  139. package/dist/schema/dist/entity/defineEntity.js +236 -1
  140. package/dist/schema/dist/entity/index.js +2 -1
  141. package/dist/schema/dist/entity/types.js +1 -1
  142. package/dist/schema/dist/index.js +6 -1
  143. package/package.json +5 -5
@@ -1 +1,35 @@
1
- import{AccountEntity as e,SessionEntity as t,UserEntity as n,VerificationEntity as r}from"./user.js";import{InvitationEntity as i,MemberEntity as a,OrganizationEntity as o,OrganizationTypeEnum as s,TeamEntity as c,TeamMemberEntity as l}from"./organization.js";import{ApiKeyEntity as u,PasskeyEntity as d,PermissionEntity as f,PolicyBindingEntity as p,RoleEntity as m}from"./rbac.js";const h=[n,t,e,r,o,a,i,c,l,m,f,p,u,d],g={moduleId:`@lssm/lib.identity-rbac`,entities:h,enums:[s]};export{e as AccountEntity,u as ApiKeyEntity,i as InvitationEntity,a as MemberEntity,o as OrganizationEntity,s as OrganizationTypeEnum,d as PasskeyEntity,f as PermissionEntity,p as PolicyBindingEntity,m as RoleEntity,t as SessionEntity,c as TeamEntity,l as TeamMemberEntity,n as UserEntity,r as VerificationEntity,h as identityRbacEntities,g as identityRbacSchemaContribution};
1
+ import { AccountEntity, SessionEntity, UserEntity, VerificationEntity } from "./user.js";
2
+ import { InvitationEntity, MemberEntity, OrganizationEntity, OrganizationTypeEnum, TeamEntity, TeamMemberEntity } from "./organization.js";
3
+ import { ApiKeyEntity, PasskeyEntity, PermissionEntity, PolicyBindingEntity, RoleEntity } from "./rbac.js";
4
+
5
+ //#region src/entities/index.ts
6
+ /**
7
+ * All identity-rbac entities for schema composition.
8
+ */
9
+ const identityRbacEntities = [
10
+ UserEntity,
11
+ SessionEntity,
12
+ AccountEntity,
13
+ VerificationEntity,
14
+ OrganizationEntity,
15
+ MemberEntity,
16
+ InvitationEntity,
17
+ TeamEntity,
18
+ TeamMemberEntity,
19
+ RoleEntity,
20
+ PermissionEntity,
21
+ PolicyBindingEntity,
22
+ ApiKeyEntity,
23
+ PasskeyEntity
24
+ ];
25
+ /**
26
+ * Module schema contribution for identity-rbac.
27
+ */
28
+ const identityRbacSchemaContribution = {
29
+ moduleId: "@lssm/lib.identity-rbac",
30
+ entities: identityRbacEntities,
31
+ enums: [OrganizationTypeEnum]
32
+ };
33
+
34
+ //#endregion
35
+ export { AccountEntity, ApiKeyEntity, InvitationEntity, MemberEntity, OrganizationEntity, OrganizationTypeEnum, PasskeyEntity, PermissionEntity, PolicyBindingEntity, RoleEntity, SessionEntity, TeamEntity, TeamMemberEntity, UserEntity, VerificationEntity, identityRbacEntities, identityRbacSchemaContribution };
@@ -1,86 +1,86 @@
1
- import * as _lssm_lib_schema484 from "@lssm/lib.schema";
1
+ import * as _lssm_lib_schema734 from "@lssm/lib.schema";
2
2
 
3
3
  //#region src/entities/organization.d.ts
4
4
  /**
5
5
  * Organization type enum.
6
6
  */
7
- declare const OrganizationTypeEnum: _lssm_lib_schema484.EntityEnumDef;
7
+ declare const OrganizationTypeEnum: _lssm_lib_schema734.EntityEnumDef;
8
8
  /**
9
9
  * Organization entity - tenant/company grouping.
10
10
  */
11
- declare const OrganizationEntity: _lssm_lib_schema484.EntitySpec<{
12
- id: _lssm_lib_schema484.EntityScalarField;
13
- name: _lssm_lib_schema484.EntityScalarField;
14
- slug: _lssm_lib_schema484.EntityScalarField;
15
- logo: _lssm_lib_schema484.EntityScalarField;
16
- description: _lssm_lib_schema484.EntityScalarField;
17
- metadata: _lssm_lib_schema484.EntityScalarField;
18
- type: _lssm_lib_schema484.EntityEnumField;
19
- onboardingCompleted: _lssm_lib_schema484.EntityScalarField;
20
- onboardingStep: _lssm_lib_schema484.EntityScalarField;
21
- referralCode: _lssm_lib_schema484.EntityScalarField;
22
- referredBy: _lssm_lib_schema484.EntityScalarField;
23
- createdAt: _lssm_lib_schema484.EntityScalarField;
24
- updatedAt: _lssm_lib_schema484.EntityScalarField;
25
- members: _lssm_lib_schema484.EntityRelationField;
26
- invitations: _lssm_lib_schema484.EntityRelationField;
27
- teams: _lssm_lib_schema484.EntityRelationField;
28
- policyBindings: _lssm_lib_schema484.EntityRelationField;
11
+ declare const OrganizationEntity: _lssm_lib_schema734.EntitySpec<{
12
+ id: _lssm_lib_schema734.EntityScalarField;
13
+ name: _lssm_lib_schema734.EntityScalarField;
14
+ slug: _lssm_lib_schema734.EntityScalarField;
15
+ logo: _lssm_lib_schema734.EntityScalarField;
16
+ description: _lssm_lib_schema734.EntityScalarField;
17
+ metadata: _lssm_lib_schema734.EntityScalarField;
18
+ type: _lssm_lib_schema734.EntityEnumField;
19
+ onboardingCompleted: _lssm_lib_schema734.EntityScalarField;
20
+ onboardingStep: _lssm_lib_schema734.EntityScalarField;
21
+ referralCode: _lssm_lib_schema734.EntityScalarField;
22
+ referredBy: _lssm_lib_schema734.EntityScalarField;
23
+ createdAt: _lssm_lib_schema734.EntityScalarField;
24
+ updatedAt: _lssm_lib_schema734.EntityScalarField;
25
+ members: _lssm_lib_schema734.EntityRelationField;
26
+ invitations: _lssm_lib_schema734.EntityRelationField;
27
+ teams: _lssm_lib_schema734.EntityRelationField;
28
+ policyBindings: _lssm_lib_schema734.EntityRelationField;
29
29
  }>;
30
30
  /**
31
31
  * Member entity - user membership in an organization.
32
32
  */
33
- declare const MemberEntity: _lssm_lib_schema484.EntitySpec<{
34
- id: _lssm_lib_schema484.EntityScalarField;
35
- userId: _lssm_lib_schema484.EntityScalarField;
36
- organizationId: _lssm_lib_schema484.EntityScalarField;
37
- role: _lssm_lib_schema484.EntityScalarField;
38
- createdAt: _lssm_lib_schema484.EntityScalarField;
39
- user: _lssm_lib_schema484.EntityRelationField;
40
- organization: _lssm_lib_schema484.EntityRelationField;
33
+ declare const MemberEntity: _lssm_lib_schema734.EntitySpec<{
34
+ id: _lssm_lib_schema734.EntityScalarField;
35
+ userId: _lssm_lib_schema734.EntityScalarField;
36
+ organizationId: _lssm_lib_schema734.EntityScalarField;
37
+ role: _lssm_lib_schema734.EntityScalarField;
38
+ createdAt: _lssm_lib_schema734.EntityScalarField;
39
+ user: _lssm_lib_schema734.EntityRelationField;
40
+ organization: _lssm_lib_schema734.EntityRelationField;
41
41
  }>;
42
42
  /**
43
43
  * Invitation entity - pending organization invites.
44
44
  */
45
- declare const InvitationEntity: _lssm_lib_schema484.EntitySpec<{
46
- id: _lssm_lib_schema484.EntityScalarField;
47
- organizationId: _lssm_lib_schema484.EntityScalarField;
48
- email: _lssm_lib_schema484.EntityScalarField;
49
- role: _lssm_lib_schema484.EntityScalarField;
50
- status: _lssm_lib_schema484.EntityScalarField;
51
- acceptedAt: _lssm_lib_schema484.EntityScalarField;
52
- expiresAt: _lssm_lib_schema484.EntityScalarField;
53
- inviterId: _lssm_lib_schema484.EntityScalarField;
54
- teamId: _lssm_lib_schema484.EntityScalarField;
55
- createdAt: _lssm_lib_schema484.EntityScalarField;
56
- updatedAt: _lssm_lib_schema484.EntityScalarField;
57
- organization: _lssm_lib_schema484.EntityRelationField;
58
- inviter: _lssm_lib_schema484.EntityRelationField;
59
- team: _lssm_lib_schema484.EntityRelationField;
45
+ declare const InvitationEntity: _lssm_lib_schema734.EntitySpec<{
46
+ id: _lssm_lib_schema734.EntityScalarField;
47
+ organizationId: _lssm_lib_schema734.EntityScalarField;
48
+ email: _lssm_lib_schema734.EntityScalarField;
49
+ role: _lssm_lib_schema734.EntityScalarField;
50
+ status: _lssm_lib_schema734.EntityScalarField;
51
+ acceptedAt: _lssm_lib_schema734.EntityScalarField;
52
+ expiresAt: _lssm_lib_schema734.EntityScalarField;
53
+ inviterId: _lssm_lib_schema734.EntityScalarField;
54
+ teamId: _lssm_lib_schema734.EntityScalarField;
55
+ createdAt: _lssm_lib_schema734.EntityScalarField;
56
+ updatedAt: _lssm_lib_schema734.EntityScalarField;
57
+ organization: _lssm_lib_schema734.EntityRelationField;
58
+ inviter: _lssm_lib_schema734.EntityRelationField;
59
+ team: _lssm_lib_schema734.EntityRelationField;
60
60
  }>;
61
61
  /**
62
62
  * Team entity - team within an organization.
63
63
  */
64
- declare const TeamEntity: _lssm_lib_schema484.EntitySpec<{
65
- id: _lssm_lib_schema484.EntityScalarField;
66
- name: _lssm_lib_schema484.EntityScalarField;
67
- organizationId: _lssm_lib_schema484.EntityScalarField;
68
- createdAt: _lssm_lib_schema484.EntityScalarField;
69
- updatedAt: _lssm_lib_schema484.EntityScalarField;
70
- organization: _lssm_lib_schema484.EntityRelationField;
71
- members: _lssm_lib_schema484.EntityRelationField;
72
- invitations: _lssm_lib_schema484.EntityRelationField;
64
+ declare const TeamEntity: _lssm_lib_schema734.EntitySpec<{
65
+ id: _lssm_lib_schema734.EntityScalarField;
66
+ name: _lssm_lib_schema734.EntityScalarField;
67
+ organizationId: _lssm_lib_schema734.EntityScalarField;
68
+ createdAt: _lssm_lib_schema734.EntityScalarField;
69
+ updatedAt: _lssm_lib_schema734.EntityScalarField;
70
+ organization: _lssm_lib_schema734.EntityRelationField;
71
+ members: _lssm_lib_schema734.EntityRelationField;
72
+ invitations: _lssm_lib_schema734.EntityRelationField;
73
73
  }>;
74
74
  /**
75
75
  * TeamMember entity - user's team membership.
76
76
  */
77
- declare const TeamMemberEntity: _lssm_lib_schema484.EntitySpec<{
78
- id: _lssm_lib_schema484.EntityScalarField;
79
- teamId: _lssm_lib_schema484.EntityScalarField;
80
- userId: _lssm_lib_schema484.EntityScalarField;
81
- createdAt: _lssm_lib_schema484.EntityScalarField;
82
- team: _lssm_lib_schema484.EntityRelationField;
83
- user: _lssm_lib_schema484.EntityRelationField;
77
+ declare const TeamMemberEntity: _lssm_lib_schema734.EntitySpec<{
78
+ id: _lssm_lib_schema734.EntityScalarField;
79
+ teamId: _lssm_lib_schema734.EntityScalarField;
80
+ userId: _lssm_lib_schema734.EntityScalarField;
81
+ createdAt: _lssm_lib_schema734.EntityScalarField;
82
+ team: _lssm_lib_schema734.EntityRelationField;
83
+ user: _lssm_lib_schema734.EntityRelationField;
84
84
  }>;
85
85
  //#endregion
86
86
  export { InvitationEntity, MemberEntity, OrganizationEntity, OrganizationTypeEnum, TeamEntity, TeamMemberEntity };
@@ -1 +1,151 @@
1
- import{i as e,n as t,r as n,t as r}from"../schema/dist/entity/defineEntity.js";import"../schema/dist/index.js";const i=t({name:`OrganizationType`,values:[`PLATFORM_ADMIN`,`CONTRACT_SPEC_CUSTOMER`],schema:`lssm_sigil`,description:`Type of organization in the platform.`}),a=r({name:`Organization`,description:`An organization is a tenant boundary grouping users.`,schema:`lssm_sigil`,map:`organization`,fields:{id:n.id({description:`Unique organization identifier`}),name:n.string({description:`Organization display name`}),slug:n.string({isOptional:!0,isUnique:!0,description:`URL-friendly identifier`}),logo:n.url({isOptional:!0,description:`Organization logo URL`}),description:n.string({isOptional:!0,description:`Organization description`}),metadata:n.json({isOptional:!0,description:`Arbitrary organization metadata`}),type:n.enum(`OrganizationType`,{description:`Organization type`}),onboardingCompleted:n.boolean({default:!1}),onboardingStep:n.string({isOptional:!0}),referralCode:n.string({isOptional:!0,isUnique:!0,description:`Unique referral code`}),referredBy:n.string({isOptional:!0,description:`ID of referring user`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),members:n.hasMany(`Member`),invitations:n.hasMany(`Invitation`),teams:n.hasMany(`Team`),policyBindings:n.hasMany(`PolicyBinding`)},enums:[i]}),o=r({name:`Member`,description:`Membership of a user in an organization with a role.`,schema:`lssm_sigil`,map:`member`,fields:{id:n.id(),userId:n.foreignKey(),organizationId:n.foreignKey(),role:n.string({description:`Role in organization (owner, admin, member)`}),createdAt:n.createdAt(),user:n.belongsTo(`User`,[`userId`],[`id`],{onDelete:`Cascade`}),organization:n.belongsTo(`Organization`,[`organizationId`],[`id`],{onDelete:`Cascade`})},indexes:[e.unique([`userId`,`organizationId`])]}),s=r({name:`Invitation`,description:`An invitation to join an organization.`,schema:`lssm_sigil`,map:`invitation`,fields:{id:n.id(),organizationId:n.foreignKey(),email:n.email({description:`Invited email address`}),role:n.string({isOptional:!0,description:`Role to assign on acceptance`}),status:n.string({default:`"pending"`,description:`Invitation status`}),acceptedAt:n.dateTime({isOptional:!0}),expiresAt:n.dateTime({isOptional:!0}),inviterId:n.foreignKey({description:`User who sent the invitation`}),teamId:n.string({isOptional:!0}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),organization:n.belongsTo(`Organization`,[`organizationId`],[`id`],{onDelete:`Cascade`}),inviter:n.belongsTo(`User`,[`inviterId`],[`id`],{onDelete:`Cascade`}),team:n.belongsTo(`Team`,[`teamId`],[`id`],{onDelete:`Cascade`})}}),c=r({name:`Team`,description:`Team within an organization.`,schema:`lssm_sigil`,map:`team`,fields:{id:n.id(),name:n.string({description:`Team name`}),organizationId:n.foreignKey(),createdAt:n.createdAt(),updatedAt:n.updatedAt(),organization:n.belongsTo(`Organization`,[`organizationId`],[`id`],{onDelete:`Cascade`}),members:n.hasMany(`TeamMember`),invitations:n.hasMany(`Invitation`)}}),l=r({name:`TeamMember`,description:`Team membership for a user.`,schema:`lssm_sigil`,map:`team_member`,fields:{id:n.id(),teamId:n.foreignKey(),userId:n.foreignKey(),createdAt:n.createdAt(),team:n.belongsTo(`Team`,[`teamId`],[`id`],{onDelete:`Cascade`}),user:n.belongsTo(`User`,[`userId`],[`id`],{onDelete:`Cascade`})}});export{s as InvitationEntity,o as MemberEntity,a as OrganizationEntity,i as OrganizationTypeEnum,c as TeamEntity,l as TeamMemberEntity};
1
+ import { defineEntity, defineEntityEnum, field, index } from "../schema/dist/entity/defineEntity.js";
2
+ import "../schema/dist/index.js";
3
+
4
+ //#region src/entities/organization.ts
5
+ /**
6
+ * Organization type enum.
7
+ */
8
+ const OrganizationTypeEnum = defineEntityEnum({
9
+ name: "OrganizationType",
10
+ values: ["PLATFORM_ADMIN", "CONTRACT_SPEC_CUSTOMER"],
11
+ schema: "lssm_sigil",
12
+ description: "Type of organization in the platform."
13
+ });
14
+ /**
15
+ * Organization entity - tenant/company grouping.
16
+ */
17
+ const OrganizationEntity = defineEntity({
18
+ name: "Organization",
19
+ description: "An organization is a tenant boundary grouping users.",
20
+ schema: "lssm_sigil",
21
+ map: "organization",
22
+ fields: {
23
+ id: field.id({ description: "Unique organization identifier" }),
24
+ name: field.string({ description: "Organization display name" }),
25
+ slug: field.string({
26
+ isOptional: true,
27
+ isUnique: true,
28
+ description: "URL-friendly identifier"
29
+ }),
30
+ logo: field.url({
31
+ isOptional: true,
32
+ description: "Organization logo URL"
33
+ }),
34
+ description: field.string({
35
+ isOptional: true,
36
+ description: "Organization description"
37
+ }),
38
+ metadata: field.json({
39
+ isOptional: true,
40
+ description: "Arbitrary organization metadata"
41
+ }),
42
+ type: field.enum("OrganizationType", { description: "Organization type" }),
43
+ onboardingCompleted: field.boolean({ default: false }),
44
+ onboardingStep: field.string({ isOptional: true }),
45
+ referralCode: field.string({
46
+ isOptional: true,
47
+ isUnique: true,
48
+ description: "Unique referral code"
49
+ }),
50
+ referredBy: field.string({
51
+ isOptional: true,
52
+ description: "ID of referring user"
53
+ }),
54
+ createdAt: field.createdAt(),
55
+ updatedAt: field.updatedAt(),
56
+ members: field.hasMany("Member"),
57
+ invitations: field.hasMany("Invitation"),
58
+ teams: field.hasMany("Team"),
59
+ policyBindings: field.hasMany("PolicyBinding")
60
+ },
61
+ enums: [OrganizationTypeEnum]
62
+ });
63
+ /**
64
+ * Member entity - user membership in an organization.
65
+ */
66
+ const MemberEntity = defineEntity({
67
+ name: "Member",
68
+ description: "Membership of a user in an organization with a role.",
69
+ schema: "lssm_sigil",
70
+ map: "member",
71
+ fields: {
72
+ id: field.id(),
73
+ userId: field.foreignKey(),
74
+ organizationId: field.foreignKey(),
75
+ role: field.string({ description: "Role in organization (owner, admin, member)" }),
76
+ createdAt: field.createdAt(),
77
+ user: field.belongsTo("User", ["userId"], ["id"], { onDelete: "Cascade" }),
78
+ organization: field.belongsTo("Organization", ["organizationId"], ["id"], { onDelete: "Cascade" })
79
+ },
80
+ indexes: [index.unique(["userId", "organizationId"])]
81
+ });
82
+ /**
83
+ * Invitation entity - pending organization invites.
84
+ */
85
+ const InvitationEntity = defineEntity({
86
+ name: "Invitation",
87
+ description: "An invitation to join an organization.",
88
+ schema: "lssm_sigil",
89
+ map: "invitation",
90
+ fields: {
91
+ id: field.id(),
92
+ organizationId: field.foreignKey(),
93
+ email: field.email({ description: "Invited email address" }),
94
+ role: field.string({
95
+ isOptional: true,
96
+ description: "Role to assign on acceptance"
97
+ }),
98
+ status: field.string({
99
+ default: "\"pending\"",
100
+ description: "Invitation status"
101
+ }),
102
+ acceptedAt: field.dateTime({ isOptional: true }),
103
+ expiresAt: field.dateTime({ isOptional: true }),
104
+ inviterId: field.foreignKey({ description: "User who sent the invitation" }),
105
+ teamId: field.string({ isOptional: true }),
106
+ createdAt: field.createdAt(),
107
+ updatedAt: field.updatedAt(),
108
+ organization: field.belongsTo("Organization", ["organizationId"], ["id"], { onDelete: "Cascade" }),
109
+ inviter: field.belongsTo("User", ["inviterId"], ["id"], { onDelete: "Cascade" }),
110
+ team: field.belongsTo("Team", ["teamId"], ["id"], { onDelete: "Cascade" })
111
+ }
112
+ });
113
+ /**
114
+ * Team entity - team within an organization.
115
+ */
116
+ const TeamEntity = defineEntity({
117
+ name: "Team",
118
+ description: "Team within an organization.",
119
+ schema: "lssm_sigil",
120
+ map: "team",
121
+ fields: {
122
+ id: field.id(),
123
+ name: field.string({ description: "Team name" }),
124
+ organizationId: field.foreignKey(),
125
+ createdAt: field.createdAt(),
126
+ updatedAt: field.updatedAt(),
127
+ organization: field.belongsTo("Organization", ["organizationId"], ["id"], { onDelete: "Cascade" }),
128
+ members: field.hasMany("TeamMember"),
129
+ invitations: field.hasMany("Invitation")
130
+ }
131
+ });
132
+ /**
133
+ * TeamMember entity - user's team membership.
134
+ */
135
+ const TeamMemberEntity = defineEntity({
136
+ name: "TeamMember",
137
+ description: "Team membership for a user.",
138
+ schema: "lssm_sigil",
139
+ map: "team_member",
140
+ fields: {
141
+ id: field.id(),
142
+ teamId: field.foreignKey(),
143
+ userId: field.foreignKey(),
144
+ createdAt: field.createdAt(),
145
+ team: field.belongsTo("Team", ["teamId"], ["id"], { onDelete: "Cascade" }),
146
+ user: field.belongsTo("User", ["userId"], ["id"], { onDelete: "Cascade" })
147
+ }
148
+ });
149
+
150
+ //#endregion
151
+ export { InvitationEntity, MemberEntity, OrganizationEntity, OrganizationTypeEnum, TeamEntity, TeamMemberEntity };
@@ -1,87 +1,87 @@
1
- import * as _lssm_lib_schema608 from "@lssm/lib.schema";
1
+ import * as _lssm_lib_schema792 from "@lssm/lib.schema";
2
2
 
3
3
  //#region src/entities/rbac.d.ts
4
4
  /**
5
5
  * Role entity - named set of permissions.
6
6
  */
7
- declare const RoleEntity: _lssm_lib_schema608.EntitySpec<{
8
- id: _lssm_lib_schema608.EntityScalarField;
9
- name: _lssm_lib_schema608.EntityScalarField;
10
- description: _lssm_lib_schema608.EntityScalarField;
11
- permissions: _lssm_lib_schema608.EntityScalarField;
12
- createdAt: _lssm_lib_schema608.EntityScalarField;
13
- updatedAt: _lssm_lib_schema608.EntityScalarField;
14
- policyBindings: _lssm_lib_schema608.EntityRelationField;
7
+ declare const RoleEntity: _lssm_lib_schema792.EntitySpec<{
8
+ id: _lssm_lib_schema792.EntityScalarField;
9
+ name: _lssm_lib_schema792.EntityScalarField;
10
+ description: _lssm_lib_schema792.EntityScalarField;
11
+ permissions: _lssm_lib_schema792.EntityScalarField;
12
+ createdAt: _lssm_lib_schema792.EntityScalarField;
13
+ updatedAt: _lssm_lib_schema792.EntityScalarField;
14
+ policyBindings: _lssm_lib_schema792.EntityRelationField;
15
15
  }>;
16
16
  /**
17
17
  * Permission entity - atomic access right.
18
18
  */
19
- declare const PermissionEntity: _lssm_lib_schema608.EntitySpec<{
20
- id: _lssm_lib_schema608.EntityScalarField;
21
- name: _lssm_lib_schema608.EntityScalarField;
22
- description: _lssm_lib_schema608.EntityScalarField;
23
- createdAt: _lssm_lib_schema608.EntityScalarField;
24
- updatedAt: _lssm_lib_schema608.EntityScalarField;
19
+ declare const PermissionEntity: _lssm_lib_schema792.EntitySpec<{
20
+ id: _lssm_lib_schema792.EntityScalarField;
21
+ name: _lssm_lib_schema792.EntityScalarField;
22
+ description: _lssm_lib_schema792.EntityScalarField;
23
+ createdAt: _lssm_lib_schema792.EntityScalarField;
24
+ updatedAt: _lssm_lib_schema792.EntityScalarField;
25
25
  }>;
26
26
  /**
27
27
  * PolicyBinding entity - binds roles to principals.
28
28
  */
29
- declare const PolicyBindingEntity: _lssm_lib_schema608.EntitySpec<{
30
- id: _lssm_lib_schema608.EntityScalarField;
31
- roleId: _lssm_lib_schema608.EntityScalarField;
32
- targetType: _lssm_lib_schema608.EntityScalarField;
33
- targetId: _lssm_lib_schema608.EntityScalarField;
34
- expiresAt: _lssm_lib_schema608.EntityScalarField;
35
- createdAt: _lssm_lib_schema608.EntityScalarField;
36
- userId: _lssm_lib_schema608.EntityScalarField;
37
- organizationId: _lssm_lib_schema608.EntityScalarField;
38
- role: _lssm_lib_schema608.EntityRelationField;
39
- user: _lssm_lib_schema608.EntityRelationField;
40
- organization: _lssm_lib_schema608.EntityRelationField;
29
+ declare const PolicyBindingEntity: _lssm_lib_schema792.EntitySpec<{
30
+ id: _lssm_lib_schema792.EntityScalarField;
31
+ roleId: _lssm_lib_schema792.EntityScalarField;
32
+ targetType: _lssm_lib_schema792.EntityScalarField;
33
+ targetId: _lssm_lib_schema792.EntityScalarField;
34
+ expiresAt: _lssm_lib_schema792.EntityScalarField;
35
+ createdAt: _lssm_lib_schema792.EntityScalarField;
36
+ userId: _lssm_lib_schema792.EntityScalarField;
37
+ organizationId: _lssm_lib_schema792.EntityScalarField;
38
+ role: _lssm_lib_schema792.EntityRelationField;
39
+ user: _lssm_lib_schema792.EntityRelationField;
40
+ organization: _lssm_lib_schema792.EntityRelationField;
41
41
  }>;
42
42
  /**
43
43
  * ApiKey entity - API keys for programmatic access.
44
44
  */
45
- declare const ApiKeyEntity: _lssm_lib_schema608.EntitySpec<{
46
- id: _lssm_lib_schema608.EntityScalarField;
47
- name: _lssm_lib_schema608.EntityScalarField;
48
- start: _lssm_lib_schema608.EntityScalarField;
49
- prefix: _lssm_lib_schema608.EntityScalarField;
50
- key: _lssm_lib_schema608.EntityScalarField;
51
- userId: _lssm_lib_schema608.EntityScalarField;
52
- refillInterval: _lssm_lib_schema608.EntityScalarField;
53
- refillAmount: _lssm_lib_schema608.EntityScalarField;
54
- lastRefillAt: _lssm_lib_schema608.EntityScalarField;
55
- remaining: _lssm_lib_schema608.EntityScalarField;
56
- requestCount: _lssm_lib_schema608.EntityScalarField;
57
- lastRequest: _lssm_lib_schema608.EntityScalarField;
58
- enabled: _lssm_lib_schema608.EntityScalarField;
59
- rateLimitEnabled: _lssm_lib_schema608.EntityScalarField;
60
- rateLimitTimeWindow: _lssm_lib_schema608.EntityScalarField;
61
- rateLimitMax: _lssm_lib_schema608.EntityScalarField;
62
- expiresAt: _lssm_lib_schema608.EntityScalarField;
63
- permissions: _lssm_lib_schema608.EntityScalarField;
64
- metadata: _lssm_lib_schema608.EntityScalarField;
65
- createdAt: _lssm_lib_schema608.EntityScalarField;
66
- updatedAt: _lssm_lib_schema608.EntityScalarField;
67
- user: _lssm_lib_schema608.EntityRelationField;
45
+ declare const ApiKeyEntity: _lssm_lib_schema792.EntitySpec<{
46
+ id: _lssm_lib_schema792.EntityScalarField;
47
+ name: _lssm_lib_schema792.EntityScalarField;
48
+ start: _lssm_lib_schema792.EntityScalarField;
49
+ prefix: _lssm_lib_schema792.EntityScalarField;
50
+ key: _lssm_lib_schema792.EntityScalarField;
51
+ userId: _lssm_lib_schema792.EntityScalarField;
52
+ refillInterval: _lssm_lib_schema792.EntityScalarField;
53
+ refillAmount: _lssm_lib_schema792.EntityScalarField;
54
+ lastRefillAt: _lssm_lib_schema792.EntityScalarField;
55
+ remaining: _lssm_lib_schema792.EntityScalarField;
56
+ requestCount: _lssm_lib_schema792.EntityScalarField;
57
+ lastRequest: _lssm_lib_schema792.EntityScalarField;
58
+ enabled: _lssm_lib_schema792.EntityScalarField;
59
+ rateLimitEnabled: _lssm_lib_schema792.EntityScalarField;
60
+ rateLimitTimeWindow: _lssm_lib_schema792.EntityScalarField;
61
+ rateLimitMax: _lssm_lib_schema792.EntityScalarField;
62
+ expiresAt: _lssm_lib_schema792.EntityScalarField;
63
+ permissions: _lssm_lib_schema792.EntityScalarField;
64
+ metadata: _lssm_lib_schema792.EntityScalarField;
65
+ createdAt: _lssm_lib_schema792.EntityScalarField;
66
+ updatedAt: _lssm_lib_schema792.EntityScalarField;
67
+ user: _lssm_lib_schema792.EntityRelationField;
68
68
  }>;
69
69
  /**
70
70
  * Passkey entity - WebAuthn passkeys.
71
71
  */
72
- declare const PasskeyEntity: _lssm_lib_schema608.EntitySpec<{
73
- id: _lssm_lib_schema608.EntityScalarField;
74
- name: _lssm_lib_schema608.EntityScalarField;
75
- publicKey: _lssm_lib_schema608.EntityScalarField;
76
- userId: _lssm_lib_schema608.EntityScalarField;
77
- credentialID: _lssm_lib_schema608.EntityScalarField;
78
- counter: _lssm_lib_schema608.EntityScalarField;
79
- deviceType: _lssm_lib_schema608.EntityScalarField;
80
- backedUp: _lssm_lib_schema608.EntityScalarField;
81
- transports: _lssm_lib_schema608.EntityScalarField;
82
- aaguid: _lssm_lib_schema608.EntityScalarField;
83
- createdAt: _lssm_lib_schema608.EntityScalarField;
84
- user: _lssm_lib_schema608.EntityRelationField;
72
+ declare const PasskeyEntity: _lssm_lib_schema792.EntitySpec<{
73
+ id: _lssm_lib_schema792.EntityScalarField;
74
+ name: _lssm_lib_schema792.EntityScalarField;
75
+ publicKey: _lssm_lib_schema792.EntityScalarField;
76
+ userId: _lssm_lib_schema792.EntityScalarField;
77
+ credentialID: _lssm_lib_schema792.EntityScalarField;
78
+ counter: _lssm_lib_schema792.EntityScalarField;
79
+ deviceType: _lssm_lib_schema792.EntityScalarField;
80
+ backedUp: _lssm_lib_schema792.EntityScalarField;
81
+ transports: _lssm_lib_schema792.EntityScalarField;
82
+ aaguid: _lssm_lib_schema792.EntityScalarField;
83
+ createdAt: _lssm_lib_schema792.EntityScalarField;
84
+ user: _lssm_lib_schema792.EntityRelationField;
85
85
  }>;
86
86
  //#endregion
87
87
  export { ApiKeyEntity, PasskeyEntity, PermissionEntity, PolicyBindingEntity, RoleEntity };
@@ -1 +1,138 @@
1
- import{i as e,r as t,t as n}from"../schema/dist/entity/defineEntity.js";import"../schema/dist/index.js";const r=n({name:`Role`,description:`A role defines a named set of permissions.`,schema:`lssm_sigil`,map:`role`,fields:{id:t.id(),name:t.string({isUnique:!0,description:`Unique role name`}),description:t.string({isOptional:!0,description:`Role description`}),permissions:t.string({isArray:!0,description:`Array of permission names`}),createdAt:t.createdAt(),updatedAt:t.updatedAt(),policyBindings:t.hasMany(`PolicyBinding`)}}),i=n({name:`Permission`,description:`A permission represents an atomic access right.`,schema:`lssm_sigil`,map:`permission`,fields:{id:t.id(),name:t.string({isUnique:!0,description:`Unique permission name`}),description:t.string({isOptional:!0,description:`Permission description`}),createdAt:t.createdAt(),updatedAt:t.updatedAt()}}),a=n({name:`PolicyBinding`,description:`Binds roles to principals (users or organizations).`,schema:`lssm_sigil`,map:`policy_binding`,fields:{id:t.id(),roleId:t.foreignKey(),targetType:t.string({description:`"user" or "organization"`}),targetId:t.string({description:`ID of User or Organization`}),expiresAt:t.dateTime({isOptional:!0,description:`When binding expires`}),createdAt:t.createdAt(),userId:t.string({isOptional:!0}),organizationId:t.string({isOptional:!0}),role:t.belongsTo(`Role`,[`roleId`],[`id`],{onDelete:`Cascade`}),user:t.belongsTo(`User`,[`userId`],[`id`]),organization:t.belongsTo(`Organization`,[`organizationId`],[`id`])},indexes:[e.on([`targetType`,`targetId`])]}),o=n({name:`ApiKey`,description:`API keys for programmatic access.`,schema:`lssm_sigil`,map:`api_key`,fields:{id:t.id(),name:t.string({description:`API key name`}),start:t.string({description:`Starting characters for identification`}),prefix:t.string({description:`API key prefix`}),key:t.string({description:`Hashed API key`}),userId:t.foreignKey(),refillInterval:t.int({description:`Refill interval in ms`}),refillAmount:t.int({description:`Amount to refill`}),lastRefillAt:t.dateTime(),remaining:t.int({description:`Remaining requests`}),requestCount:t.int({description:`Total requests made`}),lastRequest:t.dateTime(),enabled:t.boolean({default:!0}),rateLimitEnabled:t.boolean({default:!0}),rateLimitTimeWindow:t.int({description:`Rate limit window in ms`}),rateLimitMax:t.int({description:`Max requests in window`}),expiresAt:t.dateTime(),permissions:t.string({isArray:!0}),metadata:t.json({isOptional:!0}),createdAt:t.createdAt(),updatedAt:t.updatedAt(),user:t.belongsTo(`User`,[`userId`],[`id`],{onDelete:`Cascade`})}}),s=n({name:`Passkey`,description:`WebAuthn passkeys for passwordless authentication.`,schema:`lssm_sigil`,map:`passkey`,fields:{id:t.id(),name:t.string({description:`Passkey name`}),publicKey:t.string({description:`Public key`}),userId:t.foreignKey(),credentialID:t.string({description:`Credential ID`}),counter:t.int({description:`Counter`}),deviceType:t.string({description:`Device type`}),backedUp:t.boolean({description:`Whether passkey is backed up`}),transports:t.string({description:`Transports`}),aaguid:t.string({description:`Authenticator GUID`}),createdAt:t.createdAt(),user:t.belongsTo(`User`,[`userId`],[`id`],{onDelete:`Cascade`})}});export{o as ApiKeyEntity,s as PasskeyEntity,i as PermissionEntity,a as PolicyBindingEntity,r as RoleEntity};
1
+ import { defineEntity, field, index } from "../schema/dist/entity/defineEntity.js";
2
+ import "../schema/dist/index.js";
3
+
4
+ //#region src/entities/rbac.ts
5
+ /**
6
+ * Role entity - named set of permissions.
7
+ */
8
+ const RoleEntity = defineEntity({
9
+ name: "Role",
10
+ description: "A role defines a named set of permissions.",
11
+ schema: "lssm_sigil",
12
+ map: "role",
13
+ fields: {
14
+ id: field.id(),
15
+ name: field.string({
16
+ isUnique: true,
17
+ description: "Unique role name"
18
+ }),
19
+ description: field.string({
20
+ isOptional: true,
21
+ description: "Role description"
22
+ }),
23
+ permissions: field.string({
24
+ isArray: true,
25
+ description: "Array of permission names"
26
+ }),
27
+ createdAt: field.createdAt(),
28
+ updatedAt: field.updatedAt(),
29
+ policyBindings: field.hasMany("PolicyBinding")
30
+ }
31
+ });
32
+ /**
33
+ * Permission entity - atomic access right.
34
+ */
35
+ const PermissionEntity = defineEntity({
36
+ name: "Permission",
37
+ description: "A permission represents an atomic access right.",
38
+ schema: "lssm_sigil",
39
+ map: "permission",
40
+ fields: {
41
+ id: field.id(),
42
+ name: field.string({
43
+ isUnique: true,
44
+ description: "Unique permission name"
45
+ }),
46
+ description: field.string({
47
+ isOptional: true,
48
+ description: "Permission description"
49
+ }),
50
+ createdAt: field.createdAt(),
51
+ updatedAt: field.updatedAt()
52
+ }
53
+ });
54
+ /**
55
+ * PolicyBinding entity - binds roles to principals.
56
+ */
57
+ const PolicyBindingEntity = defineEntity({
58
+ name: "PolicyBinding",
59
+ description: "Binds roles to principals (users or organizations).",
60
+ schema: "lssm_sigil",
61
+ map: "policy_binding",
62
+ fields: {
63
+ id: field.id(),
64
+ roleId: field.foreignKey(),
65
+ targetType: field.string({ description: "\"user\" or \"organization\"" }),
66
+ targetId: field.string({ description: "ID of User or Organization" }),
67
+ expiresAt: field.dateTime({
68
+ isOptional: true,
69
+ description: "When binding expires"
70
+ }),
71
+ createdAt: field.createdAt(),
72
+ userId: field.string({ isOptional: true }),
73
+ organizationId: field.string({ isOptional: true }),
74
+ role: field.belongsTo("Role", ["roleId"], ["id"], { onDelete: "Cascade" }),
75
+ user: field.belongsTo("User", ["userId"], ["id"]),
76
+ organization: field.belongsTo("Organization", ["organizationId"], ["id"])
77
+ },
78
+ indexes: [index.on(["targetType", "targetId"])]
79
+ });
80
+ /**
81
+ * ApiKey entity - API keys for programmatic access.
82
+ */
83
+ const ApiKeyEntity = defineEntity({
84
+ name: "ApiKey",
85
+ description: "API keys for programmatic access.",
86
+ schema: "lssm_sigil",
87
+ map: "api_key",
88
+ fields: {
89
+ id: field.id(),
90
+ name: field.string({ description: "API key name" }),
91
+ start: field.string({ description: "Starting characters for identification" }),
92
+ prefix: field.string({ description: "API key prefix" }),
93
+ key: field.string({ description: "Hashed API key" }),
94
+ userId: field.foreignKey(),
95
+ refillInterval: field.int({ description: "Refill interval in ms" }),
96
+ refillAmount: field.int({ description: "Amount to refill" }),
97
+ lastRefillAt: field.dateTime(),
98
+ remaining: field.int({ description: "Remaining requests" }),
99
+ requestCount: field.int({ description: "Total requests made" }),
100
+ lastRequest: field.dateTime(),
101
+ enabled: field.boolean({ default: true }),
102
+ rateLimitEnabled: field.boolean({ default: true }),
103
+ rateLimitTimeWindow: field.int({ description: "Rate limit window in ms" }),
104
+ rateLimitMax: field.int({ description: "Max requests in window" }),
105
+ expiresAt: field.dateTime(),
106
+ permissions: field.string({ isArray: true }),
107
+ metadata: field.json({ isOptional: true }),
108
+ createdAt: field.createdAt(),
109
+ updatedAt: field.updatedAt(),
110
+ user: field.belongsTo("User", ["userId"], ["id"], { onDelete: "Cascade" })
111
+ }
112
+ });
113
+ /**
114
+ * Passkey entity - WebAuthn passkeys.
115
+ */
116
+ const PasskeyEntity = defineEntity({
117
+ name: "Passkey",
118
+ description: "WebAuthn passkeys for passwordless authentication.",
119
+ schema: "lssm_sigil",
120
+ map: "passkey",
121
+ fields: {
122
+ id: field.id(),
123
+ name: field.string({ description: "Passkey name" }),
124
+ publicKey: field.string({ description: "Public key" }),
125
+ userId: field.foreignKey(),
126
+ credentialID: field.string({ description: "Credential ID" }),
127
+ counter: field.int({ description: "Counter" }),
128
+ deviceType: field.string({ description: "Device type" }),
129
+ backedUp: field.boolean({ description: "Whether passkey is backed up" }),
130
+ transports: field.string({ description: "Transports" }),
131
+ aaguid: field.string({ description: "Authenticator GUID" }),
132
+ createdAt: field.createdAt(),
133
+ user: field.belongsTo("User", ["userId"], ["id"], { onDelete: "Cascade" })
134
+ }
135
+ });
136
+
137
+ //#endregion
138
+ export { ApiKeyEntity, PasskeyEntity, PermissionEntity, PolicyBindingEntity, RoleEntity };