@tenantscale/sdk 0.1.0 → 0.2.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.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { type Tenant, type TenantUser, type TenantScaleOptions, type TenantResolver, type AuditEvent, type FeatureCheck, type ImpersonationSession, type PlanTier, type TenantSettings, TenantScaleError, PlanLimitError, UnauthorizedError, } from './types.js';
2
+ export { TenantScale } from './tenant-scale.js';
2
3
  export { TenantClient } from './tenant.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -2,5 +2,6 @@
2
2
  // @tenantscale/sdk — Barrel exports
3
3
  // ──────────────────────────────────────────────────────
4
4
  export { TenantScaleError, PlanLimitError, UnauthorizedError, } from './types.js';
5
+ export { TenantScale } from './tenant-scale.js';
5
6
  export { TenantClient } from './tenant.js';
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AACpC,yDAAyD;AAEzD,OAAO,EAUL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AACpC,yDAAyD;AAEzD,OAAO,EAUL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { TenantClient } from './tenant.js';
2
+ import { type Tenant, type TenantScaleOptions, type AuditEvent } from './types.js';
3
+ import type { Context, MiddlewareHandler } from 'hono';
4
+ declare module 'hono' {
5
+ interface ContextVariableMap {
6
+ tenant: Tenant;
7
+ tenantClient: TenantClient;
8
+ }
9
+ }
10
+ export declare class TenantScale {
11
+ private client;
12
+ private apiKey;
13
+ constructor(options: TenantScaleOptions & {
14
+ apiKey?: string;
15
+ });
16
+ /**
17
+ * Create a new instance with a different API key.
18
+ * Useful when you need to switch tenants.
19
+ */
20
+ withApiKey(apiKey: string): TenantScale;
21
+ /**
22
+ * Enforces tenant isolation — extracts the API key from the
23
+ * Authorization header and attaches tenant context to the request.
24
+ *
25
+ * Usage:
26
+ * app.use('/api/*', ts.protect())
27
+ */
28
+ protect(): MiddlewareHandler;
29
+ /**
30
+ * Logs every request to the audit trail.
31
+ * Place after protect() so tenant context is available.
32
+ *
33
+ * Usage:
34
+ * app.use('/api/*', ts.audit())
35
+ */
36
+ audit(): MiddlewareHandler;
37
+ /**
38
+ * Requires an admin API key. Use on admin routes.
39
+ *
40
+ * Usage:
41
+ * app.use('/admin/*', ts.requireAdmin())
42
+ */
43
+ requireAdmin(): MiddlewareHandler;
44
+ /**
45
+ * Get the current tenant context from a Hono context.
46
+ * Works after protect() middleware has run.
47
+ */
48
+ getTenant(c: Context): Tenant | undefined;
49
+ /**
50
+ * Get the current user context.
51
+ * (Placeholder — user resolution depends on your auth setup.)
52
+ */
53
+ getUser(c: Context): {
54
+ id: string;
55
+ email?: string;
56
+ role?: string;
57
+ } | undefined;
58
+ /**
59
+ * Log a custom audit event from within a route handler.
60
+ *
61
+ * Usage:
62
+ * app.post('/api/orders', async (c) => {
63
+ * await ts.logAudit(c, { action: 'order.created', resource: 'order:123' })
64
+ * })
65
+ */
66
+ logAudit(c: Context, event: {
67
+ action: string;
68
+ resource: string;
69
+ details?: Record<string, unknown>;
70
+ }): Promise<void>;
71
+ /**
72
+ * List all tenants (admin only).
73
+ */
74
+ listTenants(): Promise<Tenant[]>;
75
+ /**
76
+ * Get paginated audit log (admin only).
77
+ */
78
+ getAuditLog(c: Context, opts: {
79
+ tenantId?: string;
80
+ limit?: number;
81
+ }): Promise<AuditEvent[]>;
82
+ }
83
+ //# sourceMappingURL=tenant-scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-scale.d.ts","sourceRoot":"","sources":["../src/tenant-scale.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAkB,MAAM,YAAY,CAAA;AAClG,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAUtD,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,MAAM,EAAE,MAAM,CAAA;QACd,YAAY,EAAE,YAAY,CAAA;KAC3B;CACF;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,kBAAkB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAK7D;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAMvC;;;;;;OAMG;IACH,OAAO,IAAI,iBAAiB;IAwB5B;;;;;;OAMG;IACH,KAAK,IAAI,iBAAiB;IAsB1B;;;;;OAKG;IACH,YAAY,IAAI,iBAAiB;IAwBjC;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAIzC;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAO9E;;;;;;;OAOG;IACG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzH;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtC;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAGlG"}
@@ -0,0 +1,162 @@
1
+ // ──────────────────────────────────────────────────────
2
+ // TenantScale — Unified SDK Class
3
+ // Combines tenant context, middleware, audit, and admin
4
+ // into the single `TenantScale` import the docs promise.
5
+ //
6
+ // Usage:
7
+ // import { TenantScale } from '@tenantscale/sdk'
8
+ // const ts = new TenantScale({ apiKey: '...' })
9
+ // app.use('*', ts.protect())
10
+ // ──────────────────────────────────────────────────────
11
+ import { TenantClient } from './tenant.js';
12
+ import { PlanLimitError } from './types.js';
13
+ export class TenantScale {
14
+ client;
15
+ apiKey;
16
+ constructor(options) {
17
+ this.client = new TenantClient(options);
18
+ this.apiKey = options.apiKey ?? '';
19
+ }
20
+ /**
21
+ * Create a new instance with a different API key.
22
+ * Useful when you need to switch tenants.
23
+ */
24
+ withApiKey(apiKey) {
25
+ return new TenantScale({ ...this.client.getOptions(), apiKey });
26
+ }
27
+ // ── Middleware ──
28
+ /**
29
+ * Enforces tenant isolation — extracts the API key from the
30
+ * Authorization header and attaches tenant context to the request.
31
+ *
32
+ * Usage:
33
+ * app.use('/api/*', ts.protect())
34
+ */
35
+ protect() {
36
+ return async (c, next) => {
37
+ const authHeader = c.req.header('Authorization');
38
+ if (!authHeader?.startsWith('Bearer ')) {
39
+ return c.json({ error: 'Missing or invalid Authorization header' }, 401);
40
+ }
41
+ const apiKey = authHeader.slice(7);
42
+ try {
43
+ const tenant = await this.client.resolveTenant(apiKey);
44
+ c.set('tenant', tenant);
45
+ c.set('tenantClient', this.client);
46
+ c.__tenantscale_apiKey = apiKey;
47
+ await next();
48
+ }
49
+ catch (err) {
50
+ if (err instanceof PlanLimitError) {
51
+ return c.json({ error: err.message, code: err.code }, err.status);
52
+ }
53
+ return c.json({ error: 'Failed to resolve tenant' }, 401);
54
+ }
55
+ };
56
+ }
57
+ /**
58
+ * Logs every request to the audit trail.
59
+ * Place after protect() so tenant context is available.
60
+ *
61
+ * Usage:
62
+ * app.use('/api/*', ts.audit())
63
+ */
64
+ audit() {
65
+ return async (c, next) => {
66
+ await next();
67
+ const tenant = c.get('tenant');
68
+ if (!tenant)
69
+ return;
70
+ const apiKey = c.__tenantscale_apiKey || '';
71
+ const method = c.req.method;
72
+ const path = c.req.path;
73
+ const status = c.res.status;
74
+ this.client.logAudit(apiKey, {
75
+ action: `${method} ${path}`,
76
+ resource: path,
77
+ actor_id: tenant.id,
78
+ details: { status_code: status },
79
+ }).catch(() => {
80
+ // Fire and forget — audit failures shouldn't crash the app
81
+ });
82
+ };
83
+ }
84
+ /**
85
+ * Requires an admin API key. Use on admin routes.
86
+ *
87
+ * Usage:
88
+ * app.use('/admin/*', ts.requireAdmin())
89
+ */
90
+ requireAdmin() {
91
+ return async (c, next) => {
92
+ const authHeader = c.req.header('Authorization');
93
+ if (!authHeader?.startsWith('Bearer ')) {
94
+ return c.json({ error: 'Missing Authorization header' }, 401);
95
+ }
96
+ const apiKey = authHeader.slice(7);
97
+ // Admin keys start with a special prefix — check via the API
98
+ try {
99
+ const tenant = await this.client.resolveTenant(apiKey);
100
+ // The resolveTenant call succeeds for admin keys too
101
+ // but we flag it differently here
102
+ c.set('tenant', tenant);
103
+ c.set('tenantClient', this.client);
104
+ await next();
105
+ }
106
+ catch {
107
+ return c.json({ error: 'Invalid admin key' }, 401);
108
+ }
109
+ };
110
+ }
111
+ // ── Route Helpers ──
112
+ /**
113
+ * Get the current tenant context from a Hono context.
114
+ * Works after protect() middleware has run.
115
+ */
116
+ getTenant(c) {
117
+ return c.get('tenant');
118
+ }
119
+ /**
120
+ * Get the current user context.
121
+ * (Placeholder — user resolution depends on your auth setup.)
122
+ */
123
+ getUser(c) {
124
+ const tenant = c.get('tenant');
125
+ if (!tenant)
126
+ return undefined;
127
+ // For now, return the tenant's admin user as the current user
128
+ return { id: tenant.id, email: tenant.email, role: 'admin' };
129
+ }
130
+ /**
131
+ * Log a custom audit event from within a route handler.
132
+ *
133
+ * Usage:
134
+ * app.post('/api/orders', async (c) => {
135
+ * await ts.logAudit(c, { action: 'order.created', resource: 'order:123' })
136
+ * })
137
+ */
138
+ async logAudit(c, event) {
139
+ const tenant = c.get('tenant');
140
+ await this.client.logAudit(this.apiKey, {
141
+ action: event.action,
142
+ resource: event.resource,
143
+ actor_id: tenant?.id ?? 'unknown',
144
+ details: event.details,
145
+ });
146
+ }
147
+ // ── Admin Helpers ──
148
+ /**
149
+ * List all tenants (admin only).
150
+ */
151
+ async listTenants() {
152
+ // This would call the admin API endpoint
153
+ throw new Error('listTenants() requires the hosted API — coming soon');
154
+ }
155
+ /**
156
+ * Get paginated audit log (admin only).
157
+ */
158
+ async getAuditLog(c, opts) {
159
+ throw new Error('getAuditLog() requires the hosted API — coming soon');
160
+ }
161
+ }
162
+ //# sourceMappingURL=tenant-scale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-scale.js","sourceRoot":"","sources":["../src/tenant-scale.ts"],"names":[],"mappings":"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"}
package/dist/tenant.d.ts CHANGED
@@ -4,6 +4,8 @@ export declare class TenantClient {
4
4
  private cache;
5
5
  private cacheTtlMs;
6
6
  constructor(options: TenantScaleOptions);
7
+ /** Access the current options */
8
+ getOptions(): TenantScaleOptions;
7
9
  /**
8
10
  * Fetch a tenant by API key.
9
11
  * Results are cached for `cacheTtlMs` to avoid hammering the API on every request.
@@ -1 +1 @@
1
- {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../src/tenant.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAOnF,qBAAa,YAAY;IAIX,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAS;gBAEP,OAAO,EAAE,kBAAkB;IAE/C;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsCpD,yDAAyD;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE,uCAAuC;IACjC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QACtC,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACrC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjB,yBAAyB;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QACpC,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajB,wEAAwE;IACxE,eAAe,CAAC,MAAM,EAAE,MAAM;CAG/B"}
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../src/tenant.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAOnF,qBAAa,YAAY;IAIX,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAS;gBAEP,OAAO,EAAE,kBAAkB;IAE/C,iCAAiC;IACjC,UAAU,IAAI,kBAAkB;IAEhC;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsCpD,yDAAyD;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE,uCAAuC;IACjC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QACtC,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACrC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjB,yBAAyB;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QACpC,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajB,wEAAwE;IACxE,eAAe,CAAC,MAAM,EAAE,MAAM;CAG/B"}
package/dist/tenant.js CHANGED
@@ -9,6 +9,8 @@ export class TenantClient {
9
9
  constructor(options) {
10
10
  this.options = options;
11
11
  }
12
+ /** Access the current options */
13
+ getOptions() { return this.options; }
12
14
  /**
13
15
  * Fetch a tenant by API key.
14
16
  * Results are cached for `cacheTtlMs` to avoid hammering the API on every request.
@@ -1 +1 @@
1
- {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../src/tenant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../src/tenant.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tenantscale/sdk",
3
- "version": "0.1.0",
4
- "description": "Multi-tenant middleware SDK for B2B SaaS",
3
+ "version": "0.2.0",
4
+ "description": "Multi-tenant middleware SDK for B2B SaaS — tenant isolation, audit logging, admin tools",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",