psadk 1.1.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/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/build/main/index.d.ts +6 -0
- package/build/main/index.js +23 -0
- package/build/main/lib/ILogger.d.ts +9 -0
- package/build/main/lib/ILogger.js +25 -0
- package/build/main/lib/PSAI.d.ts +29 -0
- package/build/main/lib/PSAI.js +383 -0
- package/build/main/lib/PSAgent.d.ts +215 -0
- package/build/main/lib/PSAgent.js +990 -0
- package/build/main/lib/PSAgentConfig.d.ts +23 -0
- package/build/main/lib/PSAgentConfig.js +3 -0
- package/build/main/lib/PSAgentLogger.d.ts +13 -0
- package/build/main/lib/PSAgentLogger.js +33 -0
- package/build/main/lib/PSAgentTask.d.ts +12 -0
- package/build/main/lib/PSAgentTask.js +30 -0
- package/build/main/lib/PSAgentTool.d.ts +56 -0
- package/build/main/lib/PSAgentTool.js +84 -0
- package/build/main/lib/ai.d.ts +11 -0
- package/build/main/lib/ai.js +127 -0
- package/build/main/lib/async.d.ts +20 -0
- package/build/main/lib/async.js +36 -0
- package/build/main/lib/getServiceToken.d.ts +1 -0
- package/build/main/lib/getServiceToken.js +3 -0
- package/build/main/lib/jwt.d.ts +41 -0
- package/build/main/lib/jwt.js +73 -0
- package/build/main/lib/number.d.ts +43 -0
- package/build/main/lib/number.js +56 -0
- package/build/main/lib/tools/PSAentTool.d.ts +7 -0
- package/build/main/lib/tools/PSAentTool.js +78 -0
- package/build/main/lib/tools/PSArtifactTool copy.d.ts +7 -0
- package/build/main/lib/tools/PSArtifactTool copy.js +78 -0
- package/build/main/lib/tools/PSArtifactTool.d.ts +7 -0
- package/build/main/lib/tools/PSArtifactTool.js +79 -0
- package/build/main/lib/tools/PSSubAgentTool.d.ts +20 -0
- package/build/main/lib/tools/PSSubAgentTool.js +163 -0
- package/build/module/index.d.ts +6 -0
- package/build/module/index.js +7 -0
- package/build/module/lib/PSAI.d.ts +25 -0
- package/build/module/lib/PSAI.js +314 -0
- package/build/module/lib/PSAgent.d.ts +215 -0
- package/build/module/lib/PSAgent.js +992 -0
- package/build/module/lib/async.d.ts +20 -0
- package/build/module/lib/async.js +32 -0
- package/build/module/lib/number.d.ts +43 -0
- package/build/module/lib/number.js +51 -0
- package/package.json +122 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { PSAgentTool } from "./PSAgentTool";
|
|
3
|
+
import { PSAgentTask } from "./PSAgentTask";
|
|
4
|
+
export interface PSAgentConfig {
|
|
5
|
+
agent_class?: "LlmAgent" | "LoopAgent" | "ParallelAgent" | "SequentialAgent";
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
instruction: string;
|
|
9
|
+
sub_agents?: PSAgentConfig[];
|
|
10
|
+
additional_properties?: Record<string, any>;
|
|
11
|
+
examples?: string[];
|
|
12
|
+
model?: string;
|
|
13
|
+
input_schema?: z.core.JSONSchema.BaseSchema;
|
|
14
|
+
output_schema?: z.core.JSONSchema.BaseSchema;
|
|
15
|
+
show_plan?: boolean;
|
|
16
|
+
hitl_for_plan?: boolean;
|
|
17
|
+
tools?: PSAgentTool[];
|
|
18
|
+
tasks?: PSAgentTask[];
|
|
19
|
+
token?: string;
|
|
20
|
+
getToken?: () => Promise<string>;
|
|
21
|
+
additional_headers?: Record<string, string>;
|
|
22
|
+
port?: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudENvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type AgentLoggerType = 'debug' | 'info' | 'error' | 'warn' | 'done';
|
|
2
|
+
export declare class PSAgentLogger {
|
|
3
|
+
private logFn;
|
|
4
|
+
constructor(options?: {
|
|
5
|
+
prefix?: string;
|
|
6
|
+
});
|
|
7
|
+
log(type: string, message: any, ...optionalParams: any[]): void;
|
|
8
|
+
debug(message: string, ...optionalParams: any[]): void;
|
|
9
|
+
info(message: string, ...optionalParams: any[]): void;
|
|
10
|
+
error(message: string, ...optionalParams: any[]): void;
|
|
11
|
+
warn(message: string, ...optionalParams: any[]): void;
|
|
12
|
+
done(message?: string, ...optionalParams: any[]): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSAgentLogger = void 0;
|
|
4
|
+
const debug = require('debug');
|
|
5
|
+
class PSAgentLogger {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.logFn = debug('PSAgent:');
|
|
8
|
+
if (options === null || options === void 0 ? void 0 : options.prefix) {
|
|
9
|
+
this.logFn = debug(options.prefix);
|
|
10
|
+
this.logFn.enabled = true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
log(type, message, ...optionalParams) {
|
|
14
|
+
console.log(`[${new Date().toISOString()}] [${type.toUpperCase()}] ${message}`, ...optionalParams);
|
|
15
|
+
}
|
|
16
|
+
debug(message, ...optionalParams) {
|
|
17
|
+
this.log('debug', message, ...optionalParams);
|
|
18
|
+
}
|
|
19
|
+
info(message, ...optionalParams) {
|
|
20
|
+
this.log('info', message, ...optionalParams);
|
|
21
|
+
}
|
|
22
|
+
error(message, ...optionalParams) {
|
|
23
|
+
this.log('error', message, ...optionalParams);
|
|
24
|
+
}
|
|
25
|
+
warn(message, ...optionalParams) {
|
|
26
|
+
this.log('warn', message, ...optionalParams);
|
|
27
|
+
}
|
|
28
|
+
done(message = '', ...optionalParams) {
|
|
29
|
+
this.log('done', message, ...optionalParams);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.PSAgentLogger = PSAgentLogger;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudExvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudExvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFHL0IsTUFBYSxhQUFhO0lBRXhCLFlBQVksT0FBMkI7UUFEL0IsVUFBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFXLEVBQUUsR0FBRyxjQUFvQjtRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDTSxJQUFJLENBQUMsT0FBZSxFQUFFLEdBQUcsY0FBb0I7UUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFvQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ00sSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQW9CO1FBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxFQUFFLEdBQUcsY0FBb0I7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBMUJELHNDQTBCQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class PSAgentTask {
|
|
2
|
+
private name;
|
|
3
|
+
private description;
|
|
4
|
+
private examples?;
|
|
5
|
+
constructor(name: string, description: string, examples?: string[]);
|
|
6
|
+
get Name(): string;
|
|
7
|
+
set Name(value: string);
|
|
8
|
+
get Description(): string;
|
|
9
|
+
set Description(value: string);
|
|
10
|
+
get Examples(): string[];
|
|
11
|
+
set Examples(value: string[]);
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSAgentTask = void 0;
|
|
4
|
+
class PSAgentTask {
|
|
5
|
+
constructor(name, description, examples) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.description = description;
|
|
8
|
+
this.examples = examples;
|
|
9
|
+
}
|
|
10
|
+
get Name() {
|
|
11
|
+
return this.name;
|
|
12
|
+
}
|
|
13
|
+
set Name(value) {
|
|
14
|
+
this.name = value;
|
|
15
|
+
}
|
|
16
|
+
get Description() {
|
|
17
|
+
return this.description;
|
|
18
|
+
}
|
|
19
|
+
set Description(value) {
|
|
20
|
+
this.description = value;
|
|
21
|
+
}
|
|
22
|
+
get Examples() {
|
|
23
|
+
return this.examples || [];
|
|
24
|
+
}
|
|
25
|
+
set Examples(value) {
|
|
26
|
+
this.examples = value || [];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.PSAgentTask = PSAgentTask;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudFRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL1BTQWdlbnRUYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsV0FBVztJQUl0QixZQUFZLElBQVksRUFBRSxXQUFtQixFQUFFLFFBQW1CO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsV0FBVyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFXLFFBQVEsQ0FBQyxLQUFlO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUEzQkQsa0NBMkJDIn0=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
import { PSAgentLogger } from "./PSAgentLogger";
|
|
3
|
+
export interface IPSAgentToolResult {
|
|
4
|
+
error: Error | null;
|
|
5
|
+
result?: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export interface IPSAgentToolInput {
|
|
8
|
+
url?: string;
|
|
9
|
+
method?: string;
|
|
10
|
+
requestBody: z.core.JSONSchema.BaseSchema;
|
|
11
|
+
}
|
|
12
|
+
export declare class PSAgentTool {
|
|
13
|
+
private name;
|
|
14
|
+
private description;
|
|
15
|
+
private type;
|
|
16
|
+
private local_execution;
|
|
17
|
+
private hitl;
|
|
18
|
+
private inputschema;
|
|
19
|
+
private runCallback?;
|
|
20
|
+
constructor({ name, description, type, local_execution, hitl, inputschema, runCallback }: {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
type?: string;
|
|
24
|
+
local_execution?: boolean;
|
|
25
|
+
hitl?: boolean;
|
|
26
|
+
inputschema: IPSAgentToolInput;
|
|
27
|
+
runCallback?: (input: Record<string, any>, log?: PSAgentLogger) => Promise<Record<string, any>>;
|
|
28
|
+
});
|
|
29
|
+
get Name(): string;
|
|
30
|
+
set Name(value: string);
|
|
31
|
+
get Description(): string;
|
|
32
|
+
set Description(value: string);
|
|
33
|
+
get Type(): string;
|
|
34
|
+
set Type(value: string);
|
|
35
|
+
get LocalExecution(): boolean;
|
|
36
|
+
set LocalExecution(value: boolean);
|
|
37
|
+
get HITL(): {
|
|
38
|
+
required: boolean;
|
|
39
|
+
interrupt: string;
|
|
40
|
+
level: number;
|
|
41
|
+
};
|
|
42
|
+
set HITL(value: {
|
|
43
|
+
required: boolean;
|
|
44
|
+
interrupt: string;
|
|
45
|
+
level: number;
|
|
46
|
+
});
|
|
47
|
+
get Inputs(): IPSAgentToolInput;
|
|
48
|
+
set Inputs(value: IPSAgentToolInput);
|
|
49
|
+
run(input: Record<string, any>, log?: PSAgentLogger): Promise<Record<string, any>>;
|
|
50
|
+
static LocalTool({ name, description, requestschema, runCallback }: {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
requestschema: z.core.JSONSchema.BaseSchema;
|
|
54
|
+
runCallback: (input: Record<string, any>, log?: PSAgentLogger) => Promise<Record<string, any>>;
|
|
55
|
+
}): PSAgentTool;
|
|
56
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PSAgentTool = void 0;
|
|
4
|
+
class PSAgentTool {
|
|
5
|
+
constructor({ name, description, type = "API", local_execution = true, hitl = true, inputschema, runCallback }) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.description = description;
|
|
8
|
+
this.type = type;
|
|
9
|
+
this.local_execution = local_execution;
|
|
10
|
+
this.hitl = {
|
|
11
|
+
required: hitl,
|
|
12
|
+
interrupt: "before",
|
|
13
|
+
level: 0
|
|
14
|
+
};
|
|
15
|
+
this.inputschema = inputschema;
|
|
16
|
+
if (runCallback) {
|
|
17
|
+
if (typeof runCallback !== "function") {
|
|
18
|
+
throw new Error("executionFn must be a function");
|
|
19
|
+
}
|
|
20
|
+
this.runCallback = runCallback;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
get Name() {
|
|
24
|
+
return this.name;
|
|
25
|
+
}
|
|
26
|
+
set Name(value) {
|
|
27
|
+
this.name = value;
|
|
28
|
+
}
|
|
29
|
+
get Description() {
|
|
30
|
+
return this.description;
|
|
31
|
+
}
|
|
32
|
+
set Description(value) {
|
|
33
|
+
this.description = value;
|
|
34
|
+
}
|
|
35
|
+
get Type() {
|
|
36
|
+
return this.type;
|
|
37
|
+
}
|
|
38
|
+
set Type(value) {
|
|
39
|
+
this.type = value;
|
|
40
|
+
}
|
|
41
|
+
get LocalExecution() {
|
|
42
|
+
return this.local_execution;
|
|
43
|
+
}
|
|
44
|
+
set LocalExecution(value) {
|
|
45
|
+
this.local_execution = value;
|
|
46
|
+
}
|
|
47
|
+
get HITL() {
|
|
48
|
+
return this.hitl;
|
|
49
|
+
}
|
|
50
|
+
set HITL(value) {
|
|
51
|
+
this.hitl = value;
|
|
52
|
+
}
|
|
53
|
+
get Inputs() {
|
|
54
|
+
return this.inputschema;
|
|
55
|
+
}
|
|
56
|
+
set Inputs(value) {
|
|
57
|
+
this.inputschema = value;
|
|
58
|
+
}
|
|
59
|
+
run(input, log) {
|
|
60
|
+
if (!this.runCallback) {
|
|
61
|
+
throw new Error("run callback function is not defined for this tool");
|
|
62
|
+
}
|
|
63
|
+
return this.runCallback(input, log);
|
|
64
|
+
}
|
|
65
|
+
static LocalTool({ name, description, requestschema, runCallback }) {
|
|
66
|
+
return new PSAgentTool({
|
|
67
|
+
name,
|
|
68
|
+
description,
|
|
69
|
+
type: "API",
|
|
70
|
+
local_execution: true,
|
|
71
|
+
hitl: true,
|
|
72
|
+
inputschema: {
|
|
73
|
+
//title: `${name}_inputs.`,
|
|
74
|
+
//description: `Inputs for ${name} tool.`,
|
|
75
|
+
url: `http://localhost/${name}`,
|
|
76
|
+
method: "POST",
|
|
77
|
+
requestBody: requestschema,
|
|
78
|
+
},
|
|
79
|
+
runCallback
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.PSAgentTool = PSAgentTool;
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudFRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL1BTQWdlbnRUb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtCQSxNQUFhLFdBQVc7SUFhdkIsWUFBWSxFQUNULElBQUksRUFDSixXQUFXLEVBQ1gsSUFBSSxHQUFDLEtBQUssRUFDVixlQUFlLEdBQUMsSUFBSSxFQUNwQixJQUFJLEdBQUMsSUFBSSxFQUNULFdBQVcsRUFDWCxXQUFXLEVBU2I7UUFDQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1gsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsUUFBUTtZQUNuQixLQUFLLEVBQUUsQ0FBQztTQUNSLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDRCxJQUFXLElBQUk7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQVcsV0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDekIsQ0FBQztJQUNELElBQVcsV0FBVyxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsSUFBSTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBVyxJQUFJLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBVyxjQUFjO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBVyxjQUFjLENBQUMsS0FBYztRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBVyxJQUFJO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFXLElBQUksQ0FBQyxLQUErRDtRQUM5RSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBVyxNQUFNLENBQUMsS0FBd0I7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVPLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEdBQW1CO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUtyRTtRQUVDLE9BQU8sSUFBSSxXQUFXLENBQUM7WUFDckIsSUFBSTtZQUNKLFdBQVc7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFHO2dCQUNaLDJCQUEyQjtnQkFDM0IsMENBQTBDO2dCQUMxQyxHQUFHLEVBQUUsb0JBQW9CLElBQUksRUFBRTtnQkFDL0IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLGFBQWE7YUFDM0I7WUFDRCxXQUFXO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbEhELGtDQWtIQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EmbeddingsInterface } from '@langchain/core/embeddings';
|
|
2
|
+
export default class AIHelper implements EmbeddingsInterface {
|
|
3
|
+
private readonly token;
|
|
4
|
+
private dimensions;
|
|
5
|
+
constructor(token: string);
|
|
6
|
+
getDimensions(embeddingModel?: string): number;
|
|
7
|
+
embedQuery(text: string, embeddingModel?: string): Promise<number[]>;
|
|
8
|
+
embedDocuments(text: string[], embeddingModel?: string): Promise<number[][]>;
|
|
9
|
+
getModels(): Promise<any>;
|
|
10
|
+
llm(prompt: string, model?: string, systemmsg?: string): Promise<any>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
7
|
+
const log = (0, logger_1.default)('sapi:ai:');
|
|
8
|
+
// fetch-retry can also wrap Node.js's native fetch API implementation:
|
|
9
|
+
const fetch = require('fetch-retry')(global.fetch);
|
|
10
|
+
class AIHelper {
|
|
11
|
+
constructor(token) {
|
|
12
|
+
this.token = token;
|
|
13
|
+
this.dimensions = 1536; // default to 1536 dimensions (for text-embedding-3-small)
|
|
14
|
+
}
|
|
15
|
+
getDimensions(embeddingModel = 'text-embedding-3-small') {
|
|
16
|
+
if (embeddingModel === 'text-embedding-3-small') {
|
|
17
|
+
return 1536;
|
|
18
|
+
}
|
|
19
|
+
else if (embeddingModel === 'text-embedding-3-large') {
|
|
20
|
+
return 3072;
|
|
21
|
+
}
|
|
22
|
+
else if (embeddingModel === 'text-embedding-ada-002') {
|
|
23
|
+
return 1536;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return this.dimensions;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async embedQuery(text, embeddingModel = 'text-embedding-3-small') {
|
|
30
|
+
//return this.model.embedQuery(text);
|
|
31
|
+
const response = await fetch(`${process.env.EAPI_BASE}/api/v1/vectors/embeddings`, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
'Authorization': `Bearer ${this.token}`,
|
|
36
|
+
'x-client-id': process.env.CLIENT_ID || '',
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify({
|
|
39
|
+
input: text,
|
|
40
|
+
model: embeddingModel,
|
|
41
|
+
"dimensions": this.getDimensions(embeddingModel),
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
console.error(`Failed to fetch embedding: ${response.status} ${response.statusText}`, data);
|
|
47
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
48
|
+
}
|
|
49
|
+
return data.data[0].embedding;
|
|
50
|
+
}
|
|
51
|
+
async embedDocuments(text, embeddingModel = 'text-embedding-3-small') {
|
|
52
|
+
const response = await fetch(`${process.env.EAPI_BASE}/api/v1/vectors/embeddings`, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
'Authorization': `Bearer ${this.token}`,
|
|
57
|
+
'x-client-id': process.env.CLIENT_ID || '',
|
|
58
|
+
},
|
|
59
|
+
body: JSON.stringify({
|
|
60
|
+
input: text,
|
|
61
|
+
model: embeddingModel,
|
|
62
|
+
"dimensions": this.getDimensions(embeddingModel),
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
const data = await response.json();
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
console.error(`Failed to fetch embedding: ${response.status} ${response.statusText}`, data);
|
|
68
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
69
|
+
}
|
|
70
|
+
return data.data.map((item) => item.embedding);
|
|
71
|
+
}
|
|
72
|
+
async getModels() {
|
|
73
|
+
const lres = await fetch(`${process.env.EAPI_BASE}/api/v1/llm/models`, {
|
|
74
|
+
headers: {
|
|
75
|
+
'Authorization': `Bearer ${this.token}`,
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
if (!lres.ok) {
|
|
79
|
+
console.error(`Failed to fetch LLM models: ${lres.status} ${lres.statusText}`);
|
|
80
|
+
}
|
|
81
|
+
const { data: models } = await lres.json();
|
|
82
|
+
return models;
|
|
83
|
+
}
|
|
84
|
+
async llm(prompt, model = "o3-mini", systemmsg = "You are a helpful assistant. Answer as concisely as possible.") {
|
|
85
|
+
try {
|
|
86
|
+
const res = await fetch(`${process.env.EAPI_BASE}/api/v1/llm/chat/completions`, {
|
|
87
|
+
method: "POST",
|
|
88
|
+
headers: {
|
|
89
|
+
"Content-Type": "application/json",
|
|
90
|
+
"Authorization": `Bearer ${this.token}`,
|
|
91
|
+
},
|
|
92
|
+
body: JSON.stringify({
|
|
93
|
+
model,
|
|
94
|
+
messages: [
|
|
95
|
+
{ role: "system", content: systemmsg },
|
|
96
|
+
{ role: "user", content: prompt }
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
retries: 3,
|
|
100
|
+
retryOn: function (attempt, error, response) {
|
|
101
|
+
// retry on any network error, or 4xx or 5xx status codes
|
|
102
|
+
if (error !== null || response.status >= 400 && attempt < 4) {
|
|
103
|
+
log.warn(`retrying execute agent, attempt number ${attempt + 1}`);
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
retryDelay: function (attempt, error, response) {
|
|
108
|
+
return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
if (!res.ok) {
|
|
112
|
+
log.debug(`Failed to fetch LLM completion: ${res.status} ${res.statusText}`);
|
|
113
|
+
const errorData = (await res.json());
|
|
114
|
+
log.debug(errorData);
|
|
115
|
+
throw new Error(`LLM call failed.\n\n status: ${res.status}, details: ${errorData}`);
|
|
116
|
+
}
|
|
117
|
+
const data = await res.json();
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
log.debug('Error in llm call:', error);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.default = AIHelper;
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsNkRBQXFDO0FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsQ0FBQztBQUUvQix1RUFBdUU7QUFDdkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRCxNQUFxQixRQUFRO0lBSTNCLFlBQVksS0FBYTtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLDBEQUEwRDtJQUNwRixDQUFDO0lBRU0sYUFBYSxDQUFDLGNBQWMsR0FBQyx3QkFBd0I7UUFDMUQsSUFBSSxjQUFjLEtBQUssd0JBQXdCLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLGNBQWMsS0FBSyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksY0FBYyxLQUFLLHdCQUF3QixFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQUssQ0FBQztZQUNMLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWSxFQUFFLGNBQWMsR0FBQyx3QkFBd0I7UUFDcEUscUNBQXFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLDRCQUE0QixFQUFFO1lBQ2pGLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLGVBQWUsRUFB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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A sample async function (to demo Typescript's es7 async/await down-leveling).
|
|
3
|
+
*
|
|
4
|
+
* ### Example (es imports)
|
|
5
|
+
* ```js
|
|
6
|
+
* import { asyncABC } from 'typescript-starter'
|
|
7
|
+
* console.log(await asyncABC())
|
|
8
|
+
* // => ['a','b','c']
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* ### Example (commonjs)
|
|
12
|
+
* ```js
|
|
13
|
+
* var double = require('typescript-starter').asyncABC;
|
|
14
|
+
* asyncABC().then(console.log);
|
|
15
|
+
* // => ['a','b','c']
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @returns a Promise which should contain `['a','b','c']`
|
|
19
|
+
*/
|
|
20
|
+
export declare const asyncABC: () => Promise<string[]>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asyncABC = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A sample async function (to demo Typescript's es7 async/await down-leveling).
|
|
6
|
+
*
|
|
7
|
+
* ### Example (es imports)
|
|
8
|
+
* ```js
|
|
9
|
+
* import { asyncABC } from 'typescript-starter'
|
|
10
|
+
* console.log(await asyncABC())
|
|
11
|
+
* // => ['a','b','c']
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* ### Example (commonjs)
|
|
15
|
+
* ```js
|
|
16
|
+
* var double = require('typescript-starter').asyncABC;
|
|
17
|
+
* asyncABC().then(console.log);
|
|
18
|
+
* // => ['a','b','c']
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @returns a Promise which should contain `['a','b','c']`
|
|
22
|
+
*/
|
|
23
|
+
const asyncABC = async () => {
|
|
24
|
+
const somethingSlow = (index) => {
|
|
25
|
+
const storage = 'abc'.charAt(index);
|
|
26
|
+
return new Promise((resolve) =>
|
|
27
|
+
// later...
|
|
28
|
+
resolve(storage));
|
|
29
|
+
};
|
|
30
|
+
const a = await somethingSlow(0);
|
|
31
|
+
const b = await somethingSlow(1);
|
|
32
|
+
const c = await somethingSlow(2);
|
|
33
|
+
return [a, b, c];
|
|
34
|
+
};
|
|
35
|
+
exports.asyncABC = asyncABC;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSSxNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRTtJQUNqQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWdCLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNyQyxXQUFXO1FBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUNqQixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBQ0YsTUFBTSxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBWlcsUUFBQSxRQUFRLFlBWW5CIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U2VydmljZVRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9nZXRTZXJ2aWNlVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import jwt, { JwtPayload } from 'jsonwebtoken';
|
|
2
|
+
export interface PSJwtPayload extends JwtPayload {
|
|
3
|
+
UserInfo: {
|
|
4
|
+
id: string;
|
|
5
|
+
email: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
clientId?: string;
|
|
9
|
+
exp: number;
|
|
10
|
+
iat?: number;
|
|
11
|
+
iss?: string;
|
|
12
|
+
idp?: string;
|
|
13
|
+
role?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare class JwtUtils {
|
|
16
|
+
/**
|
|
17
|
+
* Decodes a JWT token without verifying signature
|
|
18
|
+
* @param token - The JWT token to decode
|
|
19
|
+
* @returns Decoded token payload or null if invalid
|
|
20
|
+
*/
|
|
21
|
+
static decode(token: string): string | jwt.JwtPayload | null;
|
|
22
|
+
/**
|
|
23
|
+
* Decodes and verifies a JWT token
|
|
24
|
+
* @param token - The JWT token to verify
|
|
25
|
+
* @param secret - The secret key used to sign the token
|
|
26
|
+
* @returns Decoded and verified token payload or null if invalid
|
|
27
|
+
*/
|
|
28
|
+
static verify(token: string, secret: string): string | jwt.JwtPayload | null;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a token has expired
|
|
31
|
+
* @param token - The JWT token to check
|
|
32
|
+
* @returns boolean indicating if token is expired
|
|
33
|
+
*/
|
|
34
|
+
static isTokenExpired(token: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Extracts token from Authorization header
|
|
37
|
+
* @param authHeader - The Authorization header value
|
|
38
|
+
* @returns Clean token string or null
|
|
39
|
+
*/
|
|
40
|
+
static extractTokenFromHeader(authHeader?: string): string | null;
|
|
41
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
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.JwtUtils = void 0;
|
|
7
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
|
+
class JwtUtils {
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a JWT token without verifying signature
|
|
11
|
+
* @param token - The JWT token to decode
|
|
12
|
+
* @returns Decoded token payload or null if invalid
|
|
13
|
+
*/
|
|
14
|
+
static decode(token) {
|
|
15
|
+
try {
|
|
16
|
+
// Remove 'Bearer ' if present
|
|
17
|
+
const cleanToken = token.replace('Bearer ', '');
|
|
18
|
+
// Decode without verification
|
|
19
|
+
const payload = jsonwebtoken_1.default.decode(cleanToken);
|
|
20
|
+
const decoded = payload;
|
|
21
|
+
return decoded;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error('JWT Decode Error:', error);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decodes and verifies a JWT token
|
|
30
|
+
* @param token - The JWT token to verify
|
|
31
|
+
* @param secret - The secret key used to sign the token
|
|
32
|
+
* @returns Decoded and verified token payload or null if invalid
|
|
33
|
+
*/
|
|
34
|
+
static verify(token, secret) {
|
|
35
|
+
try {
|
|
36
|
+
const cleanToken = token.replace('Bearer ', '');
|
|
37
|
+
// Verify and decode
|
|
38
|
+
const decoded = jsonwebtoken_1.default.verify(cleanToken, secret);
|
|
39
|
+
return decoded;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('JWT Verification Error:', error);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Checks if a token has expired
|
|
48
|
+
* @param token - The JWT token to check
|
|
49
|
+
* @returns boolean indicating if token is expired
|
|
50
|
+
*/
|
|
51
|
+
static isTokenExpired(token) {
|
|
52
|
+
const decoded = this.decode(token);
|
|
53
|
+
if (!decoded || !decoded.exp)
|
|
54
|
+
return true;
|
|
55
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
56
|
+
return decoded.exp < currentTime;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extracts token from Authorization header
|
|
60
|
+
* @param authHeader - The Authorization header value
|
|
61
|
+
* @returns Clean token string or null
|
|
62
|
+
*/
|
|
63
|
+
static extractTokenFromHeader(authHeader) {
|
|
64
|
+
if (!authHeader)
|
|
65
|
+
return null;
|
|
66
|
+
const parts = authHeader.split(' ');
|
|
67
|
+
if (parts.length !== 2 || parts[0] !== 'Bearer')
|
|
68
|
+
return null;
|
|
69
|
+
return parts[1];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.JwtUtils = JwtUtils;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQStDO0FBaUIvQyxNQUFhLFFBQVE7SUFDbkI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUM7WUFDSCw4QkFBOEI7WUFDOUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFaEQsOEJBQThCO1lBQzlCLE1BQU0sT0FBTyxHQUFHLHNCQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN4QixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVoRCxvQkFBb0I7WUFDcEIsTUFBTSxPQUFPLEdBQUcsc0JBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBcUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQW1CO1FBQy9DLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFN0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFN0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBbEVELDRCQWtFQyJ9
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiplies a value by 2. (Also a full example of TypeDoc's functionality.)
|
|
3
|
+
*
|
|
4
|
+
* ### Example (es module)
|
|
5
|
+
* ```js
|
|
6
|
+
* import { double } from 'typescript-starter'
|
|
7
|
+
* console.log(double(4))
|
|
8
|
+
* // => 8
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* ### Example (commonjs)
|
|
12
|
+
* ```js
|
|
13
|
+
* var double = require('typescript-starter').double;
|
|
14
|
+
* console.log(double(4))
|
|
15
|
+
* // => 8
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @param value - Comment describing the `value` parameter.
|
|
19
|
+
* @returns Comment describing the return type.
|
|
20
|
+
* @anotherNote Some other value.
|
|
21
|
+
*/
|
|
22
|
+
export declare const double: (value: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* Raise the value of the first parameter to the power of the second using the
|
|
25
|
+
* es7 exponentiation operator (`**`).
|
|
26
|
+
*
|
|
27
|
+
* ### Example (es module)
|
|
28
|
+
* ```js
|
|
29
|
+
* import { power } from 'typescript-starter'
|
|
30
|
+
* console.log(power(2,3))
|
|
31
|
+
* // => 8
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* ### Example (commonjs)
|
|
35
|
+
* ```js
|
|
36
|
+
* var power = require('typescript-starter').power;
|
|
37
|
+
* console.log(power(2,3))
|
|
38
|
+
* // => 8
|
|
39
|
+
* ```
|
|
40
|
+
* @param base - the base to exponentiate
|
|
41
|
+
* @param exponent - the power to which to raise the base
|
|
42
|
+
*/
|
|
43
|
+
export declare const power: (base: number, exponent: number) => number;
|