create-feltdb 0.7.4 → 0.8.1

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 (30) hide show
  1. package/dist/cli.js +10 -1
  2. package/dist/create.js +10 -12
  3. package/dist/managed-account.js +72 -7
  4. package/dist/package-versions.js +1 -1
  5. package/dist/server-source/crates/feltdb/src/application.rs +14 -0
  6. package/dist/server-source/crates/feltdb/src/lib.rs +20 -2
  7. package/dist/server-source/crates/feltdb-server/src/app_state.rs +12 -24
  8. package/dist/server-source/crates/feltdb-server/src/application_contract.rs +11 -3
  9. package/dist/server-source/crates/feltdb-server/src/authenticated_principal.rs +0 -1
  10. package/dist/server-source/crates/feltdb-server/src/certification_harness.rs +23 -22
  11. package/dist/server-source/crates/feltdb-server/src/connections.rs +14 -0
  12. package/dist/server-source/crates/feltdb-server/src/delegation_token.rs +5 -15
  13. package/dist/server-source/crates/feltdb-server/src/durable_operations.rs +13 -28
  14. package/dist/server-source/crates/feltdb-server/src/identity.rs +79 -14
  15. package/dist/server-source/crates/feltdb-server/src/key_management.rs +28 -7
  16. package/dist/server-source/crates/feltdb-server/src/lib.rs +5 -5
  17. package/dist/server-source/crates/feltdb-server/src/main.rs +1929 -261
  18. package/dist/server-source/crates/feltdb-server/src/managed_diagnostics.rs +10 -30
  19. package/dist/server-source/crates/feltdb-server/src/membership_policy.rs +12 -4
  20. package/dist/server-source/crates/feltdb-server/src/request_telemetry.rs +8 -6
  21. package/dist/server-source/crates/feltdb-server/src/snapshot_cursor.rs +10 -14
  22. package/dist/server-source/crates/feltdb-server/src/tenancy.rs +191 -22
  23. package/dist/server-source/crates/feltdb-server/src/tenant_policies.rs +9 -21
  24. package/dist/server-source/crates/feltdb-server/src/transaction_idempotency.rs +5 -3
  25. package/dist/server-source/crates/feltdb-server/src/transaction_recovery.rs +9 -8
  26. package/dist/server-source/crates/feltdb-server/tests/revision_recovery_integration_test.rs +1 -4
  27. package/dist/template/default-project/feltdb.flow +5 -0
  28. package/dist/template/default-project/src/context/AuthContext.tsx +9 -1
  29. package/dist/template/default-project/src/pages/SignUp.tsx +1 -1
  30. package/package.json +1 -1
@@ -124,10 +124,7 @@ mod revision_recovery_tests {
124
124
  });
125
125
 
126
126
  // Both requests should have the same recovery_id
127
- assert_eq!(
128
- request1.get("recoveryId"),
129
- request2.get("recoveryId")
130
- );
127
+ assert_eq!(request1.get("recoveryId"), request2.get("recoveryId"));
131
128
  }
132
129
 
133
130
  /// Test environment parameter handling
@@ -1,6 +1,11 @@
1
1
  flow_version 1
2
2
 
3
3
  app FeltDBStarter {
4
+ // Optional billing semantics. Uncomment to include the Stripe-compatible module:
5
+ // module stripe {
6
+ // provider stripe-compatible
7
+ // version 1.0.0
8
+ // }
4
9
  collection User {
5
10
  email: text
6
11
  name: text
@@ -17,7 +17,15 @@ export function AuthProvider({ children }: { children: ReactNode }) {
17
17
  const loading = sessionRecords.loading || userRecords.loading || membershipRecords.loading || organizationRecords.loading;
18
18
  const establish = (next: Session) => { sessionStorage.setItem(SESSION_KEY, next.id); setSessionId(next.id); };
19
19
  const value = useMemo<AuthValue>(() => ({ loading, authenticated: Boolean(session && user && membership && organization), session, user, membership, organization,
20
- signUp: async input => { await db.auth.signUp({ email: input.email, password: input.password, display_name: input.name }); establish(await createAccount(input)); },
20
+ signUp: async input => {
21
+ try {
22
+ await db.auth.signUp({ email: input.email, password: input.password, display_name: input.name });
23
+ } catch (error) {
24
+ if ((error as { code?: string }).code !== 'CONFLICT') throw error;
25
+ await db.auth.signIn({ email: input.email, password: input.password });
26
+ }
27
+ establish(await createAccount(input));
28
+ },
21
29
  signIn: async (email, password) => { await db.auth.signIn({ email, password }); establish(await createSession(email)); },
22
30
  signOut: async () => { if (session) await sessions.delete(session.id); await db.auth.signOut(); sessionStorage.removeItem(SESSION_KEY); setSessionId(null); },
23
31
  }), [loading, session, user, membership, organization]);
@@ -3,6 +3,6 @@ import { useAuth } from '../context/AuthContext';
3
3
 
4
4
  export function SignUp() {
5
5
  const { signUp } = useAuth(); const [error, setError] = useState(''); const [busy, setBusy] = useState(false);
6
- async function submit(event: FormEvent<HTMLFormElement>) { event.preventDefault(); setBusy(true); setError(''); const form = new FormData(event.currentTarget); try { await signUp({ name: String(form.get('name')), email: String(form.get('email')), password: String(form.get('password')), organization: String(form.get('organization')) }); } catch { setError('We could not create your account. Check the details and try again.'); setBusy(false); } }
6
+ async function submit(event: FormEvent<HTMLFormElement>) { event.preventDefault(); setBusy(true); setError(''); const form = new FormData(event.currentTarget); try { await signUp({ name: String(form.get('name')), email: String(form.get('email')), password: String(form.get('password')), organization: String(form.get('organization')) }); } catch (error) { setError(error instanceof Error ? error.message : 'We could not create your account. Check the details and try again.'); setBusy(false); } }
7
7
  return <><span className="eyebrow">Create your workspace</span><h2>Start with durable state.</h2><p className="muted">Your actor, account, and organization are established at the FeltDB boundary.</p><form onSubmit={submit}><label>Name<input name="name" autoComplete="name" required placeholder="Ada Lovelace" /></label><label>Work email<input name="email" type="email" autoComplete="email" required placeholder="ada@example.com" /></label><label>Password<input name="password" type="password" autoComplete="new-password" minLength={8} required /></label><label>Organization<input name="organization" required placeholder="Analytical Engines" /></label>{error && <p className="error">{error}</p>}<button disabled={busy}>{busy ? 'Creating…' : 'Create account'}</button></form><p className="switch">Already have an account? <a href="?view=signin">Sign in</a></p></>;
8
8
  }
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.4",
5
+ "version": "0.8.1",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "create-feltdb": "bin/create-feltdb.js"