create-feltdb 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cli.js +11 -2
  2. package/dist/create.js +38 -16
  3. package/dist/managed-account.js +82 -11
  4. package/dist/package-versions.js +1 -1
  5. package/dist/server-source/crates/feltdb/src/application.rs +41 -1
  6. package/dist/server-source/crates/feltdb/src/authority_failover.rs +84 -6
  7. package/dist/server-source/crates/feltdb/src/bin/feltdb_node.rs +126 -38
  8. package/dist/server-source/crates/feltdb/src/distributed_transactions.rs +72 -34
  9. package/dist/server-source/crates/feltdb/src/lib.rs +20 -2
  10. package/dist/server-source/crates/feltdb-server/src/app_state.rs +12 -24
  11. package/dist/server-source/crates/feltdb-server/src/application_contract.rs +11 -3
  12. package/dist/server-source/crates/feltdb-server/src/authenticated_principal.rs +0 -1
  13. package/dist/server-source/crates/feltdb-server/src/certification_harness.rs +23 -22
  14. package/dist/server-source/crates/feltdb-server/src/delegation_token.rs +5 -15
  15. package/dist/server-source/crates/feltdb-server/src/durable_operations.rs +13 -28
  16. package/dist/server-source/crates/feltdb-server/src/identity.rs +111 -3
  17. package/dist/server-source/crates/feltdb-server/src/key_management.rs +28 -7
  18. package/dist/server-source/crates/feltdb-server/src/lib.rs +5 -5
  19. package/dist/server-source/crates/feltdb-server/src/main.rs +1960 -143
  20. package/dist/server-source/crates/feltdb-server/src/managed_diagnostics.rs +10 -30
  21. package/dist/server-source/crates/feltdb-server/src/membership_policy.rs +12 -4
  22. package/dist/server-source/crates/feltdb-server/src/request_telemetry.rs +8 -6
  23. package/dist/server-source/crates/feltdb-server/src/snapshot_cursor.rs +10 -14
  24. package/dist/server-source/crates/feltdb-server/src/tenancy.rs +195 -13
  25. package/dist/server-source/crates/feltdb-server/src/tenant_policies.rs +9 -21
  26. package/dist/server-source/crates/feltdb-server/src/transaction_idempotency.rs +5 -3
  27. package/dist/server-source/crates/feltdb-server/src/transaction_recovery.rs +9 -8
  28. package/dist/server-source/crates/feltdb-server/tests/revision_recovery_integration_test.rs +1 -4
  29. package/dist/template/default-project/README.md +57 -0
  30. package/dist/template/default-project/agents/activity-assistant.ts +18 -0
  31. package/dist/template/default-project/agents/project-assistant.ts +19 -0
  32. package/dist/template/default-project/capabilities/activity-summary.ts +14 -0
  33. package/dist/template/default-project/capabilities/project-search.ts +16 -0
  34. package/dist/template/default-project/capabilities/project-summary.ts +15 -0
  35. package/dist/template/default-project/feltdb.flow +174 -0
  36. package/dist/template/default-project/src/App.tsx +20 -0
  37. package/dist/template/default-project/src/context/AuthContext.tsx +27 -0
  38. package/dist/template/default-project/src/feltdb.ts +87 -0
  39. package/dist/template/default-project/src/index.tsx +14 -0
  40. package/dist/template/default-project/src/pages/Activity.tsx +7 -0
  41. package/dist/template/default-project/src/pages/Agents.tsx +15 -0
  42. package/dist/template/default-project/src/pages/Dashboard.tsx +17 -0
  43. package/dist/template/default-project/src/pages/Invitations.tsx +11 -0
  44. package/dist/template/default-project/src/pages/Projects.tsx +11 -0
  45. package/dist/template/default-project/src/pages/SignIn.tsx +8 -0
  46. package/dist/template/default-project/src/pages/SignUp.tsx +8 -0
  47. package/dist/template/default-project/src/styles-application.css +21 -0
  48. package/dist/template/default-project/src/styles.css +1 -0
  49. package/dist/template/default-project/workflows/agent-assisted-summary.ts +1 -0
  50. package/dist/template/default-project/workflows/invitation.ts +30 -0
  51. package/dist/template/default-project/workflows/project-created.ts +2 -0
  52. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ import { auditEvents, db, invitations, memberships, users, type AuditEvent, type Invitation, type Membership } from '../src/feltdb';
2
+
3
+ const makeId = (prefix: string) => `${prefix}_${crypto.randomUUID()}`;
4
+
5
+ export async function runInviteMemberWorkflow(input: { organization: string; actor: string; email: string; role: string }) {
6
+ const invited = (await users.find({ email: input.email.trim().toLowerCase() }))[0];
7
+ if (!invited) throw new Error('Invite an existing application user in this starter.');
8
+ const now = new Date().toISOString();
9
+ const invitation: Invitation = { id: makeId('invitation'), organization: input.organization, user: invited.id, email: invited.email, role: input.role, status: 'pending', created_at: now, updated_at: now };
10
+ const event: AuditEvent = { id: makeId('event'), organization: input.organization, user: input.actor, action: 'invitation.created', resource_type: 'Invitation', resource_id: invitation.id, details: invited.email, created_at: now };
11
+ await db.transaction(async transaction => {
12
+ transaction.collection<Invitation>('Invitation').insert(invitation, invitation.id, { requireAbsent: true });
13
+ transaction.collection<AuditEvent>('AuditEvent').insert(event, event.id, { requireAbsent: true });
14
+ });
15
+ return invitation;
16
+ }
17
+
18
+ export async function runAcceptInvitationWorkflow(invitation: Invitation, userId: string) {
19
+ if (invitation.user !== userId || invitation.status !== 'pending') throw new Error('This invitation cannot be accepted by the current identity.');
20
+ const now = new Date().toISOString();
21
+ const membership: Membership = { id: makeId('membership'), user: userId, organization: invitation.organization, role: invitation.role as Membership['role'], created_at: now };
22
+ const accepted = { ...invitation, status: 'accepted', updated_at: now };
23
+ const event: AuditEvent = { id: makeId('event'), organization: invitation.organization, user: userId, action: 'invitation.accepted', resource_type: 'Invitation', resource_id: invitation.id, details: membership.role, created_at: now };
24
+ await db.transaction(async transaction => {
25
+ transaction.collection<Invitation>('Invitation').insert(accepted, invitation.id);
26
+ transaction.collection<Membership>('Membership').insert(membership, membership.id, { requireAbsent: true });
27
+ transaction.collection<AuditEvent>('AuditEvent').insert(event, event.id, { requireAbsent: true });
28
+ });
29
+ return membership;
30
+ }
@@ -0,0 +1,2 @@
1
+ // Project and AuditEvent are committed atomically by the canonical operation.
2
+ export { createProject as runProjectCreatedWorkflow } from '../src/feltdb';
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "create-feltdb",
3
3
  "private": false,
4
4
  "description": "Create a new FeltDB application with one command",
5
- "version": "0.7.3",
5
+ "version": "0.8.0",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "create-feltdb": "bin/create-feltdb.js"