@arcote.tech/arc-host 0.1.3 → 0.1.5
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/auth/jwt.ts +42 -0
- package/dist/auth/jwt.d.ts +15 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/host.d.ts +23 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/index.js +2539 -2261
- package/host.ts +204 -34
- package/package.json +1 -1
package/auth/jwt.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import jwt from "jsonwebtoken";
|
|
2
|
+
|
|
3
|
+
// JWT secret key - in production, use environment variable
|
|
4
|
+
const JWT_SECRET =
|
|
5
|
+
process.env.JWT_SECRET ||
|
|
6
|
+
"your-super-secret-jwt-key-please-change-in-production";
|
|
7
|
+
|
|
8
|
+
// JWT expiration time
|
|
9
|
+
const JWT_EXPIRES_IN = process.env.JWT_EXPIRES_IN || "7d";
|
|
10
|
+
|
|
11
|
+
export interface TokenPayload {
|
|
12
|
+
userId: string;
|
|
13
|
+
email: string;
|
|
14
|
+
iat?: number;
|
|
15
|
+
exp?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generate a JWT token with user ID and email
|
|
20
|
+
*/
|
|
21
|
+
export function generateToken(userId: string, email: string): string {
|
|
22
|
+
const payload: TokenPayload = {
|
|
23
|
+
userId,
|
|
24
|
+
email,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return jwt.sign(payload, JWT_SECRET, {
|
|
28
|
+
expiresIn: JWT_EXPIRES_IN,
|
|
29
|
+
} as jwt.SignOptions);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Verify and decode a JWT token
|
|
34
|
+
*/
|
|
35
|
+
export function verifyToken(token: string): TokenPayload {
|
|
36
|
+
try {
|
|
37
|
+
const decoded = jwt.verify(token, JWT_SECRET) as TokenPayload;
|
|
38
|
+
return decoded;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
throw new Error("Invalid or expired token");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface TokenPayload {
|
|
2
|
+
userId: string;
|
|
3
|
+
email: string;
|
|
4
|
+
iat?: number;
|
|
5
|
+
exp?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate a JWT token with user ID and email
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateToken(userId: string, email: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Verify and decode a JWT token
|
|
13
|
+
*/
|
|
14
|
+
export declare function verifyToken(token: string): TokenPayload;
|
|
15
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../auth/jwt.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAOvD"}
|
package/dist/host.d.ts
CHANGED
|
@@ -3,16 +3,38 @@ declare class RTCHost implements RealTimeCommunicationAdapter {
|
|
|
3
3
|
private context;
|
|
4
4
|
private server;
|
|
5
5
|
private dataStore;
|
|
6
|
+
private model;
|
|
6
7
|
constructor(context: ArcContextAny, dbAdapter: Promise<DatabaseAdapter>);
|
|
7
8
|
commitChanges(changes: DataStorageChanges[]): void;
|
|
8
9
|
sync(progressCallback: ({ store, size, }: {
|
|
9
10
|
store: string;
|
|
10
11
|
size: number;
|
|
11
12
|
}) => void): Promise<void>;
|
|
12
|
-
private
|
|
13
|
+
private verifyAuthToken;
|
|
14
|
+
/**
|
|
15
|
+
* Convert JWT payload to AuthContext
|
|
16
|
+
*/
|
|
17
|
+
private tokenToAuthContext;
|
|
18
|
+
/**
|
|
19
|
+
* Extract client IP address from request headers
|
|
20
|
+
*/
|
|
21
|
+
private getClientIpAddress;
|
|
22
|
+
/**
|
|
23
|
+
* Get default auth context for anonymous users
|
|
24
|
+
*/
|
|
25
|
+
private getDefaultAuthContext;
|
|
26
|
+
/**
|
|
27
|
+
* Parse FormData back to an object structure
|
|
28
|
+
*/
|
|
29
|
+
private parseFormDataToObject;
|
|
30
|
+
/**
|
|
31
|
+
* Helper method to set nested properties from FormData keys like "user[profile][avatar]"
|
|
32
|
+
*/
|
|
33
|
+
private setNestedProperty;
|
|
13
34
|
private handleCommand;
|
|
14
35
|
private handleQuery;
|
|
15
36
|
private setupServer;
|
|
37
|
+
private isPublicEndpoint;
|
|
16
38
|
private handleSync;
|
|
17
39
|
private onMessage;
|
|
18
40
|
private publishMessage;
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../host.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../host.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAGvB,KAAK,4BAA4B,EAClC,MAAM,kBAAkB,CAAC;AAI1B,cAAM,OAAQ,YAAW,4BAA4B;IAMjD,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,KAAK,CAAuB;gBAG1B,OAAO,EAAE,aAAa,EAC9B,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC;IASrC,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAI5C,IAAI,CACR,gBAAgB,EAAE,CAAC,EACjB,KAAK,EACL,IAAI,GACL,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,GACT,OAAO,CAAC,IAAI,CAAC;YAIF,eAAe;IAS7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;YACW,qBAAqB;IAWnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;YAwCX,aAAa;YAoDb,WAAW;IAiEzB,OAAO,CAAC,WAAW;IA6DnB,OAAO,CAAC,gBAAgB;YAsBV,UAAU;YA+CV,SAAS;IAevB,OAAO,CAAC,cAAc;CAGvB;AAED,eAAO,MAAM,cAAc,YACf,aAAa,aAAa,OAAO,CAAC,eAAe,CAAC,kBAE3D,CAAC"}
|