sbacs-session-sdk 1.0.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/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # SBACS SDK
2
+
3
+ Session-Based Access Control System SDK for seamless website integration.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @sbacs/sdk
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ### Backend (Express.js)
14
+
15
+ ```javascript
16
+ const { SBACSServer } = require('@sbacs/sdk');
17
+
18
+ const sbacs = new SBACSServer({
19
+ apiKey: 'your-api-key',
20
+ secretKey: 'your-secret-key'
21
+ });
22
+
23
+ // Add middleware
24
+ app.use(sbacs.captureSession());
25
+ app.use('/api/sbacs', sbacs.routes());
26
+
27
+ // Shared access route
28
+ app.get('/shared/:token', sbacs.validateSharedAccess(), (req, res) => {
29
+ res.redirect(`/?token=${req.params.token}`);
30
+ });
31
+ ```
32
+
33
+ ### Frontend (React)
34
+
35
+ ```jsx
36
+ import { useSBACS } from '@sbacs/sdk/client';
37
+
38
+ function ShareButton() {
39
+ const { createShareLink } = useSBACS({ apiUrl: '/api/sbacs' });
40
+
41
+ const handleShare = async () => {
42
+ const link = await createShareLink({
43
+ duration: '2h',
44
+ permissions: ['read', 'write']
45
+ });
46
+
47
+ navigator.clipboard.writeText(link.shareUrl);
48
+ };
49
+
50
+ return <button onClick={handleShare}>Share Access</button>;
51
+ }
52
+ ```
53
+
54
+ ## Features
55
+
56
+ - 🔐 **Secure Token Generation** - JWT-based temporary access
57
+ - ⏰ **Automatic Expiration** - Configurable session duration
58
+ - 🎯 **Permission Control** - Granular access permissions
59
+ - 🔄 **Session Capture** - Seamless user session sharing
60
+ - 📱 **React Hooks** - Easy frontend integration
61
+ - 🛡️ **Middleware Support** - Express.js middleware included
62
+
63
+ ## API Reference
64
+
65
+ ### SBACSServer
66
+
67
+ #### Constructor
68
+ ```javascript
69
+ new SBACSServer({ apiKey, secretKey })
70
+ ```
71
+
72
+ #### Methods
73
+ - `captureSession()` - Middleware to capture user sessions
74
+ - `validateSharedAccess()` - Middleware to validate shared tokens
75
+ - `routes()` - Express router with SBACS endpoints
76
+
77
+ ### SBACSClient
78
+
79
+ #### Constructor
80
+ ```javascript
81
+ new SBACSClient({ apiUrl })
82
+ ```
83
+
84
+ #### Methods
85
+ - `createSession(options)` - Create temporary access token
86
+ - `validateToken(token)` - Validate access token
87
+ - `revokeToken(token)` - Revoke access token
88
+
89
+ ### React Hook
90
+
91
+ ```javascript
92
+ const { createShareLink, validateAccess } = useSBACS({ apiUrl });
93
+ ```
94
+
95
+ ## Integration Examples
96
+
97
+ See `INTEGRATION_EXAMPLE.md` for complete integration guide with fit-with-ai.
98
+
99
+ ## License
100
+
101
+ MIT
@@ -0,0 +1,23 @@
1
+ export interface SBACSClientConfig {
2
+ apiUrl: string;
3
+ apiKey?: string;
4
+ }
5
+ export interface CreateSessionOptions {
6
+ duration: string;
7
+ permissions: string[];
8
+ description?: string;
9
+ }
10
+ export declare class SBACSClient {
11
+ private config;
12
+ constructor(config: SBACSClientConfig);
13
+ createSession(options: CreateSessionOptions): Promise<any>;
14
+ validateToken(token: string): Promise<any>;
15
+ revokeToken(token: string): Promise<any>;
16
+ private getAuthToken;
17
+ }
18
+ export declare function useSBACS(config: SBACSClientConfig): {
19
+ createShareLink: (options: CreateSessionOptions) => Promise<any>;
20
+ validateAccess: (token: string) => Promise<any>;
21
+ client: SBACSClient;
22
+ };
23
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAK/B,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAsB3C,aAAa,CAAC,KAAK,EAAE,MAAM;IAM3B,WAAW,CAAC,KAAK,EAAE,MAAM;IAU/B,OAAO,CAAC,YAAY;CAIrB;AAGD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,iBAAiB;+BAGR,oBAAoB;4BAUvB,MAAM;;EAe5C"}
package/dist/client.js ADDED
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SBACSClient = void 0;
4
+ exports.useSBACS = useSBACS;
5
+ class SBACSClient {
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ // Create share session
10
+ async createSession(options) {
11
+ const response = await fetch(`${this.config.apiUrl}/create-session`, {
12
+ method: 'POST',
13
+ headers: {
14
+ 'Content-Type': 'application/json',
15
+ 'Authorization': `Bearer ${this.getAuthToken()}`
16
+ },
17
+ body: JSON.stringify({
18
+ duration: options.duration,
19
+ permissions: options.permissions,
20
+ baseUrl: window.location.origin
21
+ })
22
+ });
23
+ if (!response.ok) {
24
+ throw new Error('Failed to create session');
25
+ }
26
+ return await response.json();
27
+ }
28
+ // Validate token
29
+ async validateToken(token) {
30
+ const response = await fetch(`${this.config.apiUrl}/validate/${token}`);
31
+ return await response.json();
32
+ }
33
+ // Revoke token
34
+ async revokeToken(token) {
35
+ const response = await fetch(`${this.config.apiUrl}/revoke/${token}`, {
36
+ method: 'DELETE',
37
+ headers: {
38
+ 'Authorization': `Bearer ${this.getAuthToken()}`
39
+ }
40
+ });
41
+ return await response.json();
42
+ }
43
+ getAuthToken() {
44
+ // Get token from localStorage, cookies, or context
45
+ return localStorage.getItem('authToken') || '';
46
+ }
47
+ }
48
+ exports.SBACSClient = SBACSClient;
49
+ // React Hook for SBACS
50
+ function useSBACS(config) {
51
+ const client = new SBACSClient(config);
52
+ const createShareLink = async (options) => {
53
+ try {
54
+ const result = await client.createSession(options);
55
+ return result;
56
+ }
57
+ catch (error) {
58
+ console.error('Failed to create share link:', error);
59
+ throw error;
60
+ }
61
+ };
62
+ const validateAccess = async (token) => {
63
+ try {
64
+ const result = await client.validateToken(token);
65
+ return result;
66
+ }
67
+ catch (error) {
68
+ console.error('Failed to validate access:', error);
69
+ return { valid: false };
70
+ }
71
+ };
72
+ return {
73
+ createShareLink,
74
+ validateAccess,
75
+ client
76
+ };
77
+ }
78
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAgEA,4BA4BC;AAjFD,MAAa,WAAW;IAGtB,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,aAAa,CAAC,OAA6B;QAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,iBAAiB,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,YAAY,EAAE,EAAE;aACjD;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;aAChC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,aAAa,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,eAAe;IACf,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,WAAW,KAAK,EAAE,EAAE;YACpE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,YAAY,EAAE,EAAE;aACjD;SACF,CAAC,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEO,YAAY;QAClB,mDAAmD;QACnD,OAAO,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;CACF;AAlDD,kCAkDC;AAED,uBAAuB;AACvB,SAAgB,QAAQ,CAAC,MAAyB;IAChD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,eAAe,GAAG,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,eAAe;QACf,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { SBACSServer } from './server';
2
+ export type { SBACSConfig, SessionData } from './server';
3
+ export { SBACSClient, useSBACS } from './client';
4
+ export type { SBACSClientConfig, CreateSessionOptions } from './client';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSBACS = exports.SBACSClient = exports.SBACSServer = void 0;
4
+ // Server exports
5
+ var server_1 = require("./server");
6
+ Object.defineProperty(exports, "SBACSServer", { enumerable: true, get: function () { return server_1.SBACSServer; } });
7
+ // Client exports
8
+ var client_1 = require("./client");
9
+ Object.defineProperty(exports, "SBACSClient", { enumerable: true, get: function () { return client_1.SBACSClient; } });
10
+ Object.defineProperty(exports, "useSBACS", { enumerable: true, get: function () { return client_1.useSBACS; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAGpB,iBAAiB;AACjB,mCAAiD;AAAxC,qGAAA,WAAW,OAAA;AAAE,kGAAA,QAAQ,OAAA"}
@@ -0,0 +1,48 @@
1
+ import express, { Request, Response, NextFunction } from 'express';
2
+ declare global {
3
+ namespace Express {
4
+ interface Request {
5
+ user?: {
6
+ id: string;
7
+ sessionId: string;
8
+ email?: string;
9
+ };
10
+ sharedAccess?: {
11
+ userId: string;
12
+ sessionId: string;
13
+ permissions: string[];
14
+ isSharedAccess: boolean;
15
+ };
16
+ sbacs?: {
17
+ createShareLink: (options: any) => any;
18
+ getCurrentSession: () => any;
19
+ };
20
+ }
21
+ }
22
+ }
23
+ export interface SBACSConfig {
24
+ apiKey: string;
25
+ secretKey: string;
26
+ sessionStore?: any;
27
+ }
28
+ export interface SessionData {
29
+ userId: string;
30
+ sessionId: string;
31
+ permissions: string[];
32
+ expiresAt: Date;
33
+ }
34
+ export declare class SBACSServer {
35
+ private config;
36
+ private sessions;
37
+ constructor(config: SBACSConfig);
38
+ captureSession(): (req: Request, res: Response, next: NextFunction) => void;
39
+ createShareLink(user: any, options: any): {
40
+ token: string;
41
+ shareUrl: string;
42
+ expiresAt: Date;
43
+ };
44
+ validateSharedAccess(): (req: Request, res: Response, next: NextFunction) => express.Response<any, Record<string, any>> | undefined;
45
+ routes(): import("express-serve-static-core").Router;
46
+ private parseDuration;
47
+ }
48
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKnE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE;gBACL,EAAE,EAAE,MAAM,CAAC;gBACX,SAAS,EAAE,MAAM,CAAC;gBAClB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,YAAY,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC;gBACf,SAAS,EAAE,MAAM,CAAC;gBAClB,WAAW,EAAE,MAAM,EAAE,CAAC;gBACtB,cAAc,EAAE,OAAO,CAAC;aACzB,CAAC;YACF,KAAK,CAAC,EAAE;gBACN,eAAe,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;gBACvC,iBAAiB,EAAE,MAAM,GAAG,CAAC;aAC9B,CAAC;SACH;KACF;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAuC;gBAE3C,MAAM,EAAE,WAAW;IAK/B,cAAc,KACJ,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IAYzD,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG;;;;;IA2BvC,oBAAoB,KACV,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IA8BzD,MAAM;IAqCN,OAAO,CAAC,aAAa;CActB"}
package/dist/server.js ADDED
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SBACSServer = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
+ class SBACSServer {
10
+ constructor(config) {
11
+ this.sessions = new Map();
12
+ this.config = config;
13
+ }
14
+ // Middleware to capture current user session
15
+ captureSession() {
16
+ return (req, res, next) => {
17
+ if (req.user) {
18
+ req.sbacs = {
19
+ createShareLink: (options) => this.createShareLink(req.user, options),
20
+ getCurrentSession: () => req.user
21
+ };
22
+ }
23
+ next();
24
+ };
25
+ }
26
+ // Create temporary access token
27
+ createShareLink(user, options) {
28
+ const token = jsonwebtoken_1.default.sign({
29
+ userId: user.id,
30
+ sessionId: user.sessionId,
31
+ permissions: options.permissions || ['read'],
32
+ expiresAt: new Date(Date.now() + this.parseDuration(options.duration))
33
+ }, this.config.secretKey, { expiresIn: options.duration });
34
+ this.sessions.set(token, {
35
+ userId: user.id,
36
+ sessionId: user.sessionId,
37
+ permissions: options.permissions || ['read'],
38
+ expiresAt: new Date(Date.now() + this.parseDuration(options.duration))
39
+ });
40
+ return {
41
+ token,
42
+ shareUrl: `${options.baseUrl}/shared/${token}`,
43
+ expiresAt: new Date(Date.now() + this.parseDuration(options.duration))
44
+ };
45
+ }
46
+ // Middleware to validate shared access
47
+ validateSharedAccess() {
48
+ return (req, res, next) => {
49
+ const token = req.params.token || req.query.token;
50
+ if (!token) {
51
+ return res.status(401).json({ error: 'Access token required' });
52
+ }
53
+ try {
54
+ const decoded = jsonwebtoken_1.default.verify(token, this.config.secretKey);
55
+ const sessionData = this.sessions.get(token);
56
+ if (!sessionData || sessionData.expiresAt < new Date()) {
57
+ return res.status(401).json({ error: 'Token expired' });
58
+ }
59
+ req.sharedAccess = {
60
+ userId: decoded.userId,
61
+ sessionId: decoded.sessionId,
62
+ permissions: decoded.permissions,
63
+ isSharedAccess: true
64
+ };
65
+ next();
66
+ }
67
+ catch (error) {
68
+ return res.status(401).json({ error: 'Invalid token' });
69
+ }
70
+ };
71
+ }
72
+ // Express routes for SBACS
73
+ routes() {
74
+ const router = express_1.default.Router();
75
+ // Create share link
76
+ router.post('/create-session', (req, res) => {
77
+ if (!req.user) {
78
+ return res.status(401).json({ error: 'Authentication required' });
79
+ }
80
+ const shareLink = this.createShareLink(req.user, {
81
+ duration: req.body.duration || '1h',
82
+ permissions: req.body.permissions || ['read'],
83
+ baseUrl: req.body.baseUrl || req.get('origin')
84
+ });
85
+ res.json(shareLink);
86
+ });
87
+ // Validate token
88
+ router.get('/validate/:token', this.validateSharedAccess(), (req, res) => {
89
+ res.json({
90
+ valid: true,
91
+ userId: req.sharedAccess.userId,
92
+ permissions: req.sharedAccess.permissions
93
+ });
94
+ });
95
+ // Revoke token
96
+ router.delete('/revoke/:token', (req, res) => {
97
+ const token = req.params.token;
98
+ this.sessions.delete(token);
99
+ res.json({ success: true });
100
+ });
101
+ return router;
102
+ }
103
+ parseDuration(duration) {
104
+ const match = duration.match(/^(\d+)([hmd])$/);
105
+ if (!match)
106
+ return 3600000; // 1 hour default
107
+ const value = parseInt(match[1]);
108
+ const unit = match[2];
109
+ switch (unit) {
110
+ case 'h': return value * 60 * 60 * 1000;
111
+ case 'd': return value * 24 * 60 * 60 * 1000;
112
+ case 'm': return value * 60 * 1000;
113
+ default: return 3600000;
114
+ }
115
+ }
116
+ }
117
+ exports.SBACSServer = SBACSServer;
118
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "sbacs-session-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Session-Based Access Control System SDK for website integration",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/",
9
+ "client/",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "prepublish": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "session-sharing",
18
+ "access-control",
19
+ "authentication",
20
+ "sdk"
21
+ ],
22
+ "author": "SBACS Team",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "express": "^4.18.2",
26
+ "jsonwebtoken": "^9.0.2",
27
+ "crypto-js": "^4.2.0"
28
+ },
29
+ "devDependencies": {
30
+ "typescript": "^5.0.0",
31
+ "@types/express": "^4.17.21",
32
+ "@types/jsonwebtoken": "^9.0.5",
33
+ "@types/crypto-js": "^4.2.1"
34
+ }
35
+ }