engram-sdk 0.5.4 → 0.5.6
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/BADGE.md +47 -0
- package/README.md +13 -1
- package/assets/BADGE-USAGE.md +39 -0
- package/assets/badge-made-with-engram.svg +23 -0
- package/dist/accounts.d.ts +32 -2
- package/dist/accounts.d.ts.map +1 -1
- package/dist/accounts.js +157 -6
- package/dist/accounts.js.map +1 -1
- package/dist/cli.js +270 -13
- package/dist/cli.js.map +1 -1
- package/dist/hosted-client.d.ts +71 -0
- package/dist/hosted-client.d.ts.map +1 -0
- package/dist/hosted-client.js +154 -0
- package/dist/hosted-client.js.map +1 -0
- package/dist/hosted.d.ts.map +1 -1
- package/dist/hosted.js +442 -38
- package/dist/hosted.js.map +1 -1
- package/dist/magic-link.d.ts +22 -0
- package/dist/magic-link.d.ts.map +1 -0
- package/dist/magic-link.js +99 -0
- package/dist/magic-link.js.map +1 -0
- package/dist/mcp.js +140 -19
- package/dist/mcp.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -2
- package/dist/server.js.map +1 -1
- package/dist/store.d.ts +3 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +23 -4
- package/dist/store.js.map +1 -1
- package/dist/stripe.d.ts +9 -2
- package/dist/stripe.d.ts.map +1 -1
- package/dist/stripe.js +45 -14
- package/dist/stripe.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -3
- package/dist/types.js.map +1 -1
- package/dist/vault.d.ts +4 -1
- package/dist/vault.d.ts.map +1 -1
- package/dist/vault.js +8 -3
- package/dist/vault.js.map +1 -1
- package/eval-rescore-judge.mjs +158 -0
- package/package.json +1 -1
package/BADGE.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# "Made with Engram" Badge
|
|
2
|
+
|
|
3
|
+
## Badge URLs (via shields.io)
|
|
4
|
+
|
|
5
|
+
### Dark badge (recommended)
|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
### Flat badge
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
### For-the-badge (large)
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
## Markdown (copy-paste for READMEs)
|
|
15
|
+
|
|
16
|
+
### Recommended (links to repo)
|
|
17
|
+
```markdown
|
|
18
|
+
[](https://github.com/tstockham96/engram)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Simple (no custom icon)
|
|
22
|
+
```markdown
|
|
23
|
+
[](https://github.com/tstockham96/engram)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### HTML (for websites)
|
|
27
|
+
```html
|
|
28
|
+
<a href="https://github.com/tstockham96/engram">
|
|
29
|
+
<img src="https://img.shields.io/badge/memory-Engram-8B5CF6?style=flat&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJ3aGl0ZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiIG9wYWNpdHk9IjAuMyIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjYiIG9wYWNpdHk9IjAuNiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjIuNSIvPjwvc3ZnPg==" alt="Made with Engram" />
|
|
30
|
+
</a>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Adding to Engram's README
|
|
34
|
+
|
|
35
|
+
Add this section to the README:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
## Badge
|
|
39
|
+
|
|
40
|
+
Using Engram in your project? Add the badge to your README:
|
|
41
|
+
|
|
42
|
+
[](https://github.com/tstockham96/engram)
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
[](https://github.com/tstockham96/engram)
|
|
46
|
+
`` `
|
|
47
|
+
```
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Universal memory layer for AI agents**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/engram-sdk)
|
|
6
|
-
[](./LICENSE)
|
|
7
7
|
[](https://github.com/tstockham96/engram)
|
|
8
8
|
|
|
9
9
|
Engram gives AI agents knowledge graphs, consolidation, and spreading activation. Not storage. Understanding.
|
|
@@ -336,6 +336,18 @@ If you're making heavy use of Engram (frequent remembers + recalls in quick succ
|
|
|
336
336
|
|
|
337
337
|
---
|
|
338
338
|
|
|
339
|
+
## Badge
|
|
340
|
+
|
|
341
|
+
Using Engram in your project? Add the badge to your README:
|
|
342
|
+
|
|
343
|
+
[](https://github.com/tstockham96/engram)
|
|
344
|
+
|
|
345
|
+
```markdown
|
|
346
|
+
[](https://github.com/tstockham96/engram)
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
339
351
|
## License
|
|
340
352
|
|
|
341
353
|
[Business Source License 1.1](./LICENSE)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# "Made with Engram" Badge
|
|
2
|
+
|
|
3
|
+
Add this to your README to show your agent uses Engram for memory.
|
|
4
|
+
|
|
5
|
+
## Markdown
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
[](https://github.com/tstockham96/engram)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Shields.io (recommended — no hosted SVG needed)
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
[](https://github.com/tstockham96/engram)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## HTML
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<a href="https://github.com/tstockham96/engram">
|
|
21
|
+
<img src="https://img.shields.io/badge/🧠_memory-engram-7c3aed?style=for-the-badge" alt="Memory: Engram" />
|
|
22
|
+
</a>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Preview
|
|
26
|
+
|
|
27
|
+
The badge renders as a purple shield badge: `🧠 memory | engram`
|
|
28
|
+
|
|
29
|
+
## Variations
|
|
30
|
+
|
|
31
|
+
**Flat style:**
|
|
32
|
+
```markdown
|
|
33
|
+
[](https://github.com/tstockham96/engram)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**For-the-badge (larger):**
|
|
37
|
+
```markdown
|
|
38
|
+
[](https://github.com/tstockham96/engram)
|
|
39
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="180" height="28" role="img" aria-label="memory: engram">
|
|
2
|
+
<title>memory: engram</title>
|
|
3
|
+
<linearGradient id="s" x2="0" y2="100%">
|
|
4
|
+
<stop offset="0" stop-color="#fff" stop-opacity=".7"/>
|
|
5
|
+
<stop offset=".1" stop-color="#aaa" stop-opacity=".1"/>
|
|
6
|
+
<stop offset=".9" stop-color="#000" stop-opacity=".3"/>
|
|
7
|
+
<stop offset="1" stop-color="#000" stop-opacity=".5"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<clipPath id="r">
|
|
10
|
+
<rect width="180" height="28" rx="5" fill="#fff"/>
|
|
11
|
+
</clipPath>
|
|
12
|
+
<g clip-path="url(#r)">
|
|
13
|
+
<rect width="90" height="28" fill="#555"/>
|
|
14
|
+
<rect x="90" width="90" height="28" fill="#7c3aed"/>
|
|
15
|
+
<rect width="180" height="28" fill="url(#s)"/>
|
|
16
|
+
</g>
|
|
17
|
+
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
|
|
18
|
+
<text x="45" y="19.5" fill="#010101" fill-opacity=".3">🧠 memory</text>
|
|
19
|
+
<text x="45" y="19">🧠 memory</text>
|
|
20
|
+
<text x="135" y="19.5" fill="#010101" fill-opacity=".3">engram</text>
|
|
21
|
+
<text x="135" y="19">engram</text>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|
package/dist/accounts.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export type Plan = 'free' | 'developer' | 'team' | 'business' | 'enterprise';
|
|
1
|
+
export type Plan = 'free' | 'developer' | 'team' | 'business' | 'enterprise' | 'enterprise_trial';
|
|
2
|
+
export type OrgRole = 'admin' | 'member' | 'readonly';
|
|
2
3
|
export interface Account {
|
|
3
4
|
id: string;
|
|
4
5
|
email: string;
|
|
@@ -11,18 +12,33 @@ export interface Account {
|
|
|
11
12
|
usageResetAt: string;
|
|
12
13
|
stripeCustomerId: string | null;
|
|
13
14
|
stripeSubscriptionId: string | null;
|
|
15
|
+
orgId?: string;
|
|
16
|
+
role?: OrgRole;
|
|
17
|
+
}
|
|
18
|
+
export interface Organization {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
plan: Plan;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
trialExpiresAt: string | null;
|
|
24
|
+
allowedDomain: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface CreateOrgOptions {
|
|
27
|
+
trialDays?: number;
|
|
28
|
+
allowedDomain?: string;
|
|
14
29
|
}
|
|
15
30
|
export declare const PLAN_LIMITS: Record<Plan, {
|
|
16
31
|
memories: number;
|
|
17
32
|
recalls: number;
|
|
18
33
|
consolidations: number;
|
|
19
|
-
agents: number;
|
|
20
34
|
price: number;
|
|
21
35
|
}>;
|
|
22
36
|
export type UsageType = 'memory' | 'recall' | 'consolidation';
|
|
37
|
+
export declare function isValidEmail(email: string): boolean;
|
|
23
38
|
export declare class AccountStore {
|
|
24
39
|
private db;
|
|
25
40
|
constructor(dbPath: string);
|
|
41
|
+
private migrate;
|
|
26
42
|
generateApiKey(): string;
|
|
27
43
|
private nextResetDate;
|
|
28
44
|
createAccount(email: string, plan?: Plan): Account;
|
|
@@ -41,6 +57,20 @@ export declare class AccountStore {
|
|
|
41
57
|
getAccountByStripeCustomerId(customerId: string): Account | null;
|
|
42
58
|
updatePlan(accountId: string, plan: Plan, stripeSubscriptionId?: string): void;
|
|
43
59
|
updateStripeIds(accountId: string, customerId: string, subscriptionId: string): void;
|
|
60
|
+
createOrg(name: string, adminEmail: string, plan: Plan, options?: CreateOrgOptions): {
|
|
61
|
+
org: Organization;
|
|
62
|
+
owner: Account;
|
|
63
|
+
};
|
|
64
|
+
addOrgMember(orgId: string, email: string, role?: OrgRole): Account;
|
|
65
|
+
getOrgById(orgId: string): Organization | null;
|
|
66
|
+
getOrgByAccount(accountId: string): Organization | null;
|
|
67
|
+
getOrgMembers(orgId: string): Account[];
|
|
68
|
+
getVaultId(accountId: string): string;
|
|
69
|
+
isTrialExpired(orgId: string): boolean;
|
|
70
|
+
setTrialExpiry(orgId: string, expiresAt: string): void;
|
|
71
|
+
extendTrial(orgId: string, additionalDays: number): void;
|
|
72
|
+
listOrgs(): Organization[];
|
|
73
|
+
private rowToOrg;
|
|
44
74
|
close(): void;
|
|
45
75
|
private rowToAccount;
|
|
46
76
|
}
|
package/dist/accounts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAElG,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEtD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAOlH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AAK9D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAe;gBAEb,MAAM,EAAE,MAAM;IAwB1B,OAAO,CAAC,OAAO;IAoCf,cAAc,IAAI,MAAM;IAIxB,OAAO,CAAC,aAAa;IAMrB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAa,GAAG,OAAO;IAc1D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAiB/C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAM1C,YAAY,IAAI,OAAO,EAAE;IAKzB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAcpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAkBjH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAMhD,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAMhE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI;IAS9E,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IASpF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,gBAAqB,GAAG;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAqC9H,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,OAAkB,GAAG,OAAO;IAuB7E,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAM9C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAMvD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAKvC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAMrC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOtC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKtD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAQxD,QAAQ,IAAI,YAAY,EAAE;IAK1B,OAAO,CAAC,QAAQ;IAWhB,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,YAAY;CAkBrB"}
|
package/dist/accounts.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import { DatabaseSync } from 'node:sqlite';
|
|
2
2
|
import { randomBytes, randomUUID } from 'node:crypto';
|
|
3
3
|
export const PLAN_LIMITS = {
|
|
4
|
-
free: { memories: 1000, recalls: 500, consolidations: 5,
|
|
5
|
-
developer: { memories: 10000, recalls: 5000, consolidations: 20,
|
|
6
|
-
team: { memories: 50000, recalls: 25000, consolidations: 100,
|
|
7
|
-
business: { memories: -1, recalls: -1, consolidations: -1,
|
|
8
|
-
enterprise: { memories: -1, recalls: -1, consolidations: -1,
|
|
4
|
+
free: { memories: 1000, recalls: 500, consolidations: 5, price: 0 },
|
|
5
|
+
developer: { memories: 10000, recalls: 5000, consolidations: 20, price: 29 },
|
|
6
|
+
team: { memories: 50000, recalls: 25000, consolidations: 100, price: 99 },
|
|
7
|
+
business: { memories: -1, recalls: -1, consolidations: -1, price: 499 },
|
|
8
|
+
enterprise: { memories: -1, recalls: -1, consolidations: -1, price: -1 },
|
|
9
|
+
enterprise_trial: { memories: -1, recalls: -1, consolidations: -1, price: 0 },
|
|
9
10
|
};
|
|
11
|
+
// Basic email format validation (not exhaustive, but catches obvious junk)
|
|
12
|
+
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
13
|
+
export function isValidEmail(email) {
|
|
14
|
+
return typeof email === 'string' && email.length <= 254 && EMAIL_RE.test(email);
|
|
15
|
+
}
|
|
10
16
|
export class AccountStore {
|
|
11
17
|
db;
|
|
12
18
|
constructor(dbPath) {
|
|
13
19
|
this.db = new DatabaseSync(dbPath);
|
|
14
20
|
this.db.exec('PRAGMA journal_mode = WAL');
|
|
21
|
+
// Create base table (without Stripe columns for compat with existing DBs)
|
|
15
22
|
this.db.exec(`
|
|
16
23
|
CREATE TABLE IF NOT EXISTS accounts (
|
|
17
24
|
id TEXT PRIMARY KEY,
|
|
@@ -25,6 +32,39 @@ export class AccountStore {
|
|
|
25
32
|
usage_reset_at TEXT NOT NULL
|
|
26
33
|
);
|
|
27
34
|
CREATE INDEX IF NOT EXISTS idx_accounts_api_key ON accounts(api_key);
|
|
35
|
+
`);
|
|
36
|
+
// Migration: add Stripe columns if missing, then create index
|
|
37
|
+
this.migrate();
|
|
38
|
+
}
|
|
39
|
+
migrate() {
|
|
40
|
+
const cols = this.db.prepare(`PRAGMA table_info(accounts)`).all();
|
|
41
|
+
const colNames = new Set(cols.map((c) => c.name));
|
|
42
|
+
if (!colNames.has('stripe_customer_id')) {
|
|
43
|
+
this.db.exec(`ALTER TABLE accounts ADD COLUMN stripe_customer_id TEXT`);
|
|
44
|
+
}
|
|
45
|
+
if (!colNames.has('stripe_subscription_id')) {
|
|
46
|
+
this.db.exec(`ALTER TABLE accounts ADD COLUMN stripe_subscription_id TEXT`);
|
|
47
|
+
}
|
|
48
|
+
// Org membership columns
|
|
49
|
+
if (!colNames.has('org_id')) {
|
|
50
|
+
this.db.exec(`ALTER TABLE accounts ADD COLUMN org_id TEXT`);
|
|
51
|
+
}
|
|
52
|
+
if (!colNames.has('role')) {
|
|
53
|
+
this.db.exec(`ALTER TABLE accounts ADD COLUMN role TEXT`);
|
|
54
|
+
}
|
|
55
|
+
// Index on stripe_customer_id (only safe after column exists)
|
|
56
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_accounts_stripe_customer ON accounts(stripe_customer_id)`);
|
|
57
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_accounts_org_id ON accounts(org_id)`);
|
|
58
|
+
// Organizations table
|
|
59
|
+
this.db.exec(`
|
|
60
|
+
CREATE TABLE IF NOT EXISTS organizations (
|
|
61
|
+
id TEXT PRIMARY KEY,
|
|
62
|
+
name TEXT NOT NULL,
|
|
63
|
+
plan TEXT NOT NULL DEFAULT 'enterprise',
|
|
64
|
+
created_at TEXT NOT NULL,
|
|
65
|
+
trial_expires_at TEXT,
|
|
66
|
+
allowed_domain TEXT
|
|
67
|
+
)
|
|
28
68
|
`);
|
|
29
69
|
}
|
|
30
70
|
generateApiKey() {
|
|
@@ -129,11 +169,117 @@ export class AccountStore {
|
|
|
129
169
|
this.db.prepare('UPDATE accounts SET stripe_customer_id = ?, stripe_subscription_id = ? WHERE id = ?')
|
|
130
170
|
.run(customerId, subscriptionId, accountId);
|
|
131
171
|
}
|
|
172
|
+
// ============================================================
|
|
173
|
+
// Organization Management
|
|
174
|
+
// ============================================================
|
|
175
|
+
createOrg(name, adminEmail, plan, options = {}) {
|
|
176
|
+
const orgId = randomUUID();
|
|
177
|
+
const now = new Date().toISOString();
|
|
178
|
+
let trialExpiresAt = null;
|
|
179
|
+
if (plan === 'enterprise_trial' && options.trialDays !== undefined) {
|
|
180
|
+
const expiry = new Date(Date.now() + options.trialDays * 24 * 60 * 60 * 1000);
|
|
181
|
+
trialExpiresAt = expiry.toISOString();
|
|
182
|
+
}
|
|
183
|
+
const allowedDomain = options.allowedDomain ?? null;
|
|
184
|
+
// Create the org
|
|
185
|
+
this.db.prepare(`
|
|
186
|
+
INSERT INTO organizations (id, name, plan, created_at, trial_expires_at, allowed_domain)
|
|
187
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
188
|
+
`).run(orgId, name, plan, now, trialExpiresAt, allowedDomain);
|
|
189
|
+
// Create the admin account linked to this org
|
|
190
|
+
const owner = this.createAccount(adminEmail, plan);
|
|
191
|
+
// Link account to org
|
|
192
|
+
this.db.prepare('UPDATE accounts SET org_id = ?, role = ? WHERE id = ?')
|
|
193
|
+
.run(orgId, 'admin', owner.id);
|
|
194
|
+
const org = {
|
|
195
|
+
id: orgId,
|
|
196
|
+
name,
|
|
197
|
+
plan,
|
|
198
|
+
createdAt: now,
|
|
199
|
+
trialExpiresAt,
|
|
200
|
+
allowedDomain,
|
|
201
|
+
};
|
|
202
|
+
return { org, owner: { ...owner, orgId, role: 'admin' } };
|
|
203
|
+
}
|
|
204
|
+
addOrgMember(orgId, email, role = 'member') {
|
|
205
|
+
// Verify org exists
|
|
206
|
+
const org = this.getOrgById(orgId);
|
|
207
|
+
if (!org)
|
|
208
|
+
throw new Error(`Organization ${orgId} not found`);
|
|
209
|
+
// Check domain restriction
|
|
210
|
+
if (org.allowedDomain) {
|
|
211
|
+
const emailDomain = email.split('@')[1]?.toLowerCase();
|
|
212
|
+
if (emailDomain !== org.allowedDomain.toLowerCase()) {
|
|
213
|
+
throw new Error(`Email domain must be @${org.allowedDomain}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Create account with org's plan
|
|
217
|
+
const account = this.createAccount(email, org.plan);
|
|
218
|
+
// Link to org
|
|
219
|
+
this.db.prepare('UPDATE accounts SET org_id = ?, role = ? WHERE id = ?')
|
|
220
|
+
.run(orgId, role, account.id);
|
|
221
|
+
return { ...account, orgId, role };
|
|
222
|
+
}
|
|
223
|
+
getOrgById(orgId) {
|
|
224
|
+
const row = this.db.prepare('SELECT * FROM organizations WHERE id = ?').get(orgId);
|
|
225
|
+
if (!row)
|
|
226
|
+
return null;
|
|
227
|
+
return this.rowToOrg(row);
|
|
228
|
+
}
|
|
229
|
+
getOrgByAccount(accountId) {
|
|
230
|
+
const account = this.getAccountById(accountId);
|
|
231
|
+
if (!account?.orgId)
|
|
232
|
+
return null;
|
|
233
|
+
return this.getOrgById(account.orgId);
|
|
234
|
+
}
|
|
235
|
+
getOrgMembers(orgId) {
|
|
236
|
+
const rows = this.db.prepare('SELECT * FROM accounts WHERE org_id = ? ORDER BY created_at').all(orgId);
|
|
237
|
+
return rows.map(r => this.rowToAccount(r));
|
|
238
|
+
}
|
|
239
|
+
getVaultId(accountId) {
|
|
240
|
+
const row = this.db.prepare('SELECT org_id FROM accounts WHERE id = ?').get(accountId);
|
|
241
|
+
// If account belongs to an org, use org ID as vault key; otherwise use account ID
|
|
242
|
+
return row?.org_id ?? accountId;
|
|
243
|
+
}
|
|
244
|
+
isTrialExpired(orgId) {
|
|
245
|
+
const org = this.getOrgById(orgId);
|
|
246
|
+
if (!org)
|
|
247
|
+
return false;
|
|
248
|
+
if (!org.trialExpiresAt)
|
|
249
|
+
return false; // Paid plans never expire
|
|
250
|
+
return new Date(org.trialExpiresAt) < new Date();
|
|
251
|
+
}
|
|
252
|
+
setTrialExpiry(orgId, expiresAt) {
|
|
253
|
+
this.db.prepare('UPDATE organizations SET trial_expires_at = ? WHERE id = ?')
|
|
254
|
+
.run(expiresAt, orgId);
|
|
255
|
+
}
|
|
256
|
+
extendTrial(orgId, additionalDays) {
|
|
257
|
+
const org = this.getOrgById(orgId);
|
|
258
|
+
if (!org)
|
|
259
|
+
throw new Error(`Organization ${orgId} not found`);
|
|
260
|
+
const currentExpiry = org.trialExpiresAt ? new Date(org.trialExpiresAt) : new Date();
|
|
261
|
+
const newExpiry = new Date(currentExpiry.getTime() + additionalDays * 24 * 60 * 60 * 1000);
|
|
262
|
+
this.setTrialExpiry(orgId, newExpiry.toISOString());
|
|
263
|
+
}
|
|
264
|
+
listOrgs() {
|
|
265
|
+
const rows = this.db.prepare('SELECT * FROM organizations ORDER BY created_at DESC').all();
|
|
266
|
+
return rows.map(r => this.rowToOrg(r));
|
|
267
|
+
}
|
|
268
|
+
rowToOrg(row) {
|
|
269
|
+
return {
|
|
270
|
+
id: row.id,
|
|
271
|
+
name: row.name,
|
|
272
|
+
plan: row.plan,
|
|
273
|
+
createdAt: row.created_at,
|
|
274
|
+
trialExpiresAt: row.trial_expires_at ?? null,
|
|
275
|
+
allowedDomain: row.allowed_domain ?? null,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
132
278
|
close() {
|
|
133
279
|
this.db.close();
|
|
134
280
|
}
|
|
135
281
|
rowToAccount(row) {
|
|
136
|
-
|
|
282
|
+
const account = {
|
|
137
283
|
id: row.id,
|
|
138
284
|
email: row.email,
|
|
139
285
|
apiKey: row.api_key,
|
|
@@ -146,6 +292,11 @@ export class AccountStore {
|
|
|
146
292
|
stripeCustomerId: row.stripe_customer_id ?? null,
|
|
147
293
|
stripeSubscriptionId: row.stripe_subscription_id ?? null,
|
|
148
294
|
};
|
|
295
|
+
if (row.org_id)
|
|
296
|
+
account.orgId = row.org_id;
|
|
297
|
+
if (row.role)
|
|
298
|
+
account.role = row.role;
|
|
299
|
+
return account;
|
|
149
300
|
}
|
|
150
301
|
}
|
|
151
302
|
//# sourceMappingURL=accounts.js.map
|
package/dist/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
|