@sekuire/sdk 0.1.10 → 0.1.11

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.
@@ -10,11 +10,18 @@ export interface MemoryStorage {
10
10
  clear(sessionId: string): Promise<void>;
11
11
  delete(sessionId: string): Promise<void>;
12
12
  exists(sessionId: string): Promise<boolean>;
13
+ connect?(): Promise<void>;
14
+ disconnect?(): Promise<void>;
15
+ isConnected?(): boolean;
13
16
  }
14
17
  export declare abstract class BaseMemoryStorage implements MemoryStorage {
18
+ protected _connected: boolean;
15
19
  abstract add(sessionId: string, message: MemoryMessage): Promise<void>;
16
20
  abstract get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
17
21
  abstract clear(sessionId: string): Promise<void>;
18
22
  abstract delete(sessionId: string): Promise<void>;
19
23
  abstract exists(sessionId: string): Promise<boolean>;
24
+ connect(): Promise<void>;
25
+ disconnect(): Promise<void>;
26
+ isConnected(): boolean;
20
27
  }
@@ -0,0 +1,24 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface CloudflareD1Config {
3
+ binding?: any;
4
+ accountId?: string;
5
+ databaseId?: string;
6
+ apiToken?: string;
7
+ tableName?: string;
8
+ }
9
+ export declare class CloudflareD1Storage extends BaseMemoryStorage {
10
+ private binding;
11
+ private config;
12
+ private tableName;
13
+ private useRestApi;
14
+ private tableInitialized;
15
+ constructor(config: CloudflareD1Config);
16
+ private executeQuery;
17
+ private ensureTableExists;
18
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
19
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
20
+ clear(sessionId: string): Promise<void>;
21
+ delete(sessionId: string): Promise<void>;
22
+ exists(sessionId: string): Promise<boolean>;
23
+ disconnect(): Promise<void>;
24
+ }
@@ -0,0 +1,25 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface CloudflareKVConfig {
3
+ binding?: any;
4
+ accountId?: string;
5
+ namespaceId?: string;
6
+ apiToken?: string;
7
+ keyPrefix?: string;
8
+ }
9
+ export declare class CloudflareKVStorage extends BaseMemoryStorage {
10
+ private binding;
11
+ private config;
12
+ private keyPrefix;
13
+ private useRestApi;
14
+ constructor(config: CloudflareKVConfig);
15
+ private getKey;
16
+ private kvGet;
17
+ private kvPut;
18
+ private kvDelete;
19
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
20
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
21
+ clear(sessionId: string): Promise<void>;
22
+ delete(sessionId: string): Promise<void>;
23
+ exists(sessionId: string): Promise<boolean>;
24
+ disconnect(): Promise<void>;
25
+ }
@@ -0,0 +1,21 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface ConvexConfig {
3
+ url: string;
4
+ adminKey?: string;
5
+ }
6
+ export declare class ConvexStorage extends BaseMemoryStorage {
7
+ private client;
8
+ private config;
9
+ private connectionPromise;
10
+ constructor(config: ConvexConfig);
11
+ connect(): Promise<void>;
12
+ private ensureConnected;
13
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
14
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
15
+ clear(sessionId: string): Promise<void>;
16
+ delete(sessionId: string): Promise<void>;
17
+ exists(sessionId: string): Promise<boolean>;
18
+ disconnect(): Promise<void>;
19
+ }
20
+ export declare const CONVEX_SCHEMA_TEMPLATE = "\n// convex/schema.ts\nimport { defineSchema, defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\n\nexport default defineSchema({\n sekuireMemory: defineTable({\n sessionId: v.string(),\n role: v.union(v.literal(\"user\"), v.literal(\"assistant\"), v.literal(\"system\")),\n content: v.string(),\n timestamp: v.number(),\n metadata: v.optional(v.any()),\n }).index(\"by_session\", [\"sessionId\", \"timestamp\"]),\n});\n";
21
+ export declare const CONVEX_FUNCTIONS_TEMPLATE = "\n// convex/sekuireMemory.ts\nimport { mutation, query } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const add = mutation({\n args: {\n sessionId: v.string(),\n role: v.union(v.literal(\"user\"), v.literal(\"assistant\"), v.literal(\"system\")),\n content: v.string(),\n timestamp: v.number(),\n metadata: v.optional(v.any()),\n },\n handler: async (ctx, args) => {\n await ctx.db.insert(\"sekuireMemory\", args);\n },\n});\n\nexport const get = query({\n args: {\n sessionId: v.string(),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n let query = ctx.db\n .query(\"sekuireMemory\")\n .withIndex(\"by_session\", (q) => q.eq(\"sessionId\", args.sessionId))\n .order(\"asc\");\n\n const messages = await query.collect();\n\n if (args.limit) {\n return messages.slice(-args.limit);\n }\n return messages;\n },\n});\n\nexport const clear = mutation({\n args: {\n sessionId: v.string(),\n },\n handler: async (ctx, args) => {\n const messages = await ctx.db\n .query(\"sekuireMemory\")\n .withIndex(\"by_session\", (q) => q.eq(\"sessionId\", args.sessionId))\n .collect();\n\n for (const message of messages) {\n await ctx.db.delete(message._id);\n }\n },\n});\n\nexport const exists = query({\n args: {\n sessionId: v.string(),\n },\n handler: async (ctx, args) => {\n const message = await ctx.db\n .query(\"sekuireMemory\")\n .withIndex(\"by_session\", (q) => q.eq(\"sessionId\", args.sessionId))\n .first();\n return message !== null;\n },\n});\n";
@@ -0,0 +1,28 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface DynamoDBConfig {
3
+ tableName: string;
4
+ region?: string;
5
+ endpoint?: string;
6
+ credentials?: {
7
+ accessKeyId: string;
8
+ secretAccessKey: string;
9
+ };
10
+ createTable?: boolean;
11
+ }
12
+ export declare class DynamoDBStorage extends BaseMemoryStorage {
13
+ private client;
14
+ private docClient;
15
+ private config;
16
+ private connectionPromise;
17
+ private tableReady;
18
+ constructor(config: DynamoDBConfig);
19
+ connect(): Promise<void>;
20
+ private ensureTableExists;
21
+ private ensureConnected;
22
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
23
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
24
+ clear(sessionId: string): Promise<void>;
25
+ delete(sessionId: string): Promise<void>;
26
+ exists(sessionId: string): Promise<boolean>;
27
+ disconnect(): Promise<void>;
28
+ }
@@ -1,6 +1,7 @@
1
1
  import { BaseMemoryStorage, type MemoryMessage } from './base';
2
2
  export declare class InMemoryStorage extends BaseMemoryStorage {
3
3
  private storage;
4
+ constructor();
4
5
  add(sessionId: string, message: MemoryMessage): Promise<void>;
5
6
  get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
6
7
  clear(sessionId: string): Promise<void>;
@@ -2,13 +2,40 @@ export * from './base';
2
2
  export * from './in-memory';
3
3
  export * from './postgres';
4
4
  export * from './redis';
5
+ export * from './sqlite';
6
+ export * from './upstash';
7
+ export * from './cloudflare-kv';
8
+ export * from './cloudflare-d1';
9
+ export * from './dynamodb';
10
+ export * from './turso';
11
+ export * from './convex';
12
+ export * from './registry';
5
13
  import type { MemoryStorage } from './base';
6
14
  import { type PostgresConfig } from './postgres';
7
15
  import { type RedisConfig } from './redis';
8
- export type MemoryType = 'in-memory' | 'redis' | 'postgres' | 'buffer';
16
+ import { type SQLiteConfig } from './sqlite';
17
+ import { type UpstashConfig } from './upstash';
18
+ import { type CloudflareKVConfig } from './cloudflare-kv';
19
+ import { type CloudflareD1Config } from './cloudflare-d1';
20
+ import { type DynamoDBConfig } from './dynamodb';
21
+ import { type TursoConfig } from './turso';
22
+ import { type ConvexConfig } from './convex';
23
+ import { registerStorage, hasStorage, listStorageTypes, getStorageInfo } from './registry';
24
+ export type BuiltInMemoryType = 'in-memory' | 'buffer' | 'redis' | 'postgres' | 'sqlite' | 'upstash' | 'cloudflare-kv' | 'cloudflare-d1' | 'dynamodb' | 'turso' | 'convex';
25
+ export type MemoryType = BuiltInMemoryType | string;
9
26
  export interface MemoryFactoryConfig {
10
27
  type: MemoryType;
11
28
  redis?: RedisConfig;
12
29
  postgres?: PostgresConfig;
30
+ sqlite?: SQLiteConfig;
31
+ upstash?: UpstashConfig;
32
+ cloudflareKV?: CloudflareKVConfig;
33
+ cloudflareD1?: CloudflareD1Config;
34
+ dynamodb?: DynamoDBConfig;
35
+ turso?: TursoConfig;
36
+ convex?: ConvexConfig;
37
+ options?: Record<string, unknown>;
38
+ instance?: MemoryStorage;
13
39
  }
14
40
  export declare function createMemoryStorage(config: MemoryFactoryConfig): MemoryStorage;
41
+ export { registerStorage, hasStorage, listStorageTypes, getStorageInfo, };
@@ -7,13 +7,17 @@ export interface PostgresConfig {
7
7
  user?: string;
8
8
  password?: string;
9
9
  tableName?: string;
10
+ lazyConnect?: boolean;
10
11
  }
11
12
  export declare class PostgresStorage extends BaseMemoryStorage {
12
13
  private pool;
13
14
  private tableName;
14
- private initialized;
15
+ private config;
16
+ private connectionPromise;
15
17
  constructor(config: PostgresConfig);
18
+ connect(): Promise<void>;
16
19
  private initPool;
20
+ private ensureConnected;
17
21
  private createTableIfNotExists;
18
22
  add(sessionId: string, message: MemoryMessage): Promise<void>;
19
23
  get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
@@ -6,13 +6,17 @@ export interface RedisConfig {
6
6
  db?: number;
7
7
  url?: string;
8
8
  keyPrefix?: string;
9
+ lazyConnect?: boolean;
9
10
  }
10
11
  export declare class RedisStorage extends BaseMemoryStorage {
11
12
  private client;
12
13
  private keyPrefix;
13
- private connected;
14
+ private config;
15
+ private connectionPromise;
14
16
  constructor(config: RedisConfig);
17
+ connect(): Promise<void>;
15
18
  private initClient;
19
+ private ensureConnected;
16
20
  private getKey;
17
21
  add(sessionId: string, message: MemoryMessage): Promise<void>;
18
22
  get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
@@ -0,0 +1,12 @@
1
+ import type { MemoryStorage } from './base';
2
+ export type StorageFactory = (config: any) => MemoryStorage;
3
+ export declare function registerStorage(type: string, factory: StorageFactory, description?: string): void;
4
+ export declare function getStorageFactory(type: string): StorageFactory | undefined;
5
+ export declare function hasStorage(type: string): boolean;
6
+ export declare function listStorageTypes(): string[];
7
+ export declare function getStorageInfo(): Array<{
8
+ type: string;
9
+ description?: string;
10
+ }>;
11
+ export declare function unregisterStorage(type: string): boolean;
12
+ export declare function clearRegistry(): void;
@@ -0,0 +1,22 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface SQLiteConfig {
3
+ filename: string;
4
+ tableName?: string;
5
+ readonly?: boolean;
6
+ }
7
+ export declare class SQLiteStorage extends BaseMemoryStorage {
8
+ private db;
9
+ private config;
10
+ private tableName;
11
+ private connectionPromise;
12
+ constructor(config: SQLiteConfig);
13
+ connect(): Promise<void>;
14
+ private ensureTableExists;
15
+ private ensureConnected;
16
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
17
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
18
+ clear(sessionId: string): Promise<void>;
19
+ delete(sessionId: string): Promise<void>;
20
+ exists(sessionId: string): Promise<boolean>;
21
+ disconnect(): Promise<void>;
22
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface TursoConfig {
3
+ url: string;
4
+ authToken?: string;
5
+ tableName?: string;
6
+ }
7
+ export declare class TursoStorage extends BaseMemoryStorage {
8
+ private client;
9
+ private config;
10
+ private tableName;
11
+ private connectionPromise;
12
+ private tableInitialized;
13
+ constructor(config: TursoConfig);
14
+ connect(): Promise<void>;
15
+ private ensureTableExists;
16
+ private ensureConnected;
17
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
18
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
19
+ clear(sessionId: string): Promise<void>;
20
+ delete(sessionId: string): Promise<void>;
21
+ exists(sessionId: string): Promise<boolean>;
22
+ disconnect(): Promise<void>;
23
+ }
@@ -0,0 +1,22 @@
1
+ import { BaseMemoryStorage, type MemoryMessage } from './base';
2
+ export interface UpstashConfig {
3
+ url: string;
4
+ token: string;
5
+ keyPrefix?: string;
6
+ }
7
+ export declare class UpstashStorage extends BaseMemoryStorage {
8
+ private client;
9
+ private keyPrefix;
10
+ private config;
11
+ private connectionPromise;
12
+ constructor(config: UpstashConfig);
13
+ connect(): Promise<void>;
14
+ private ensureConnected;
15
+ private getKey;
16
+ add(sessionId: string, message: MemoryMessage): Promise<void>;
17
+ get(sessionId: string, limit?: number): Promise<MemoryMessage[]>;
18
+ clear(sessionId: string): Promise<void>;
19
+ delete(sessionId: string): Promise<void>;
20
+ exists(sessionId: string): Promise<boolean>;
21
+ disconnect(): Promise<void>;
22
+ }
package/dist/sdk.d.ts CHANGED
@@ -13,11 +13,16 @@ export interface SekuireSDKConfig {
13
13
  agentName?: string;
14
14
  apiUrl?: string;
15
15
  apiKey?: string;
16
+ /** Install token from dashboard (preferred for BYOC deployments) */
17
+ installToken?: string;
16
18
  workspaceId?: string;
17
19
  environment?: string;
18
20
  autoHeartbeat?: boolean;
19
- heartbeatInterval?: number;
21
+ /** Heartbeat interval in seconds (default: 60) */
22
+ heartbeatIntervalSeconds?: number;
20
23
  loggingEnabled?: boolean;
24
+ /** Capabilities this agent provides */
25
+ capabilities?: string[];
21
26
  }
22
27
  export declare class SekuireSDK {
23
28
  private config;
@@ -32,10 +37,11 @@ export declare class SekuireSDK {
32
37
  *
33
38
  * Required env vars:
34
39
  * SEKUIRE_AGENT_ID - The agent's sekuire_id
40
+ * SEKUIRE_INSTALL_TOKEN - Install token from dashboard (required for heartbeat)
35
41
  *
36
42
  * Optional env vars:
37
43
  * SEKUIRE_API_KEY - API key for authentication (X-API-Key header)
38
- * SEKUIRE_PRIVATE_KEY - Private key for signing (required for heartbeat)
44
+ * SEKUIRE_PRIVATE_KEY - Private key for signing
39
45
  * SEKUIRE_AGENT_NAME - Human-readable agent name
40
46
  * SEKUIRE_API_URL - API base URL (default: https://api.sekuire.ai)
41
47
  * SEKUIRE_WORKSPACE_ID - Workspace ID for policy enforcement
@@ -48,19 +54,18 @@ export declare class SekuireSDK {
48
54
  /**
49
55
  * Start the SDK.
50
56
  *
51
- * - Sends initial heartbeat
57
+ * - Bootstraps with Sekuire using the install token
52
58
  * - Starts auto-heartbeat loop if enabled
59
+ *
60
+ * Requires SEKUIRE_INSTALL_TOKEN to be set (from dashboard or CLI).
53
61
  */
54
62
  start(): Promise<void>;
55
63
  /**
56
- * Send a signed heartbeat to the registry.
57
- *
58
- * The heartbeat proves the agent is running and has access to the private key.
64
+ * Check if the beacon is connected and sending heartbeats.
59
65
  *
60
- * @param url Optional public URL where the agent can be reached
61
- * @returns True if heartbeat was acknowledged, False otherwise
66
+ * @returns True if the beacon has successfully bootstrapped
62
67
  */
63
- heartbeat(url?: string): Promise<boolean>;
68
+ isConnected(): boolean;
64
69
  /**
65
70
  * Log an event to Sekuire.
66
71
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sekuire/sdk",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "Sekuire Identity Protocol SDK for TypeScript/JavaScript",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -73,7 +73,12 @@
73
73
  "zod": "^3.22.4"
74
74
  },
75
75
  "devDependencies": {
76
+ "@aws-sdk/client-dynamodb": "^3.700.0",
77
+ "@aws-sdk/lib-dynamodb": "^3.700.0",
76
78
  "@biomejs/biome": "^1.9.4",
79
+ "@libsql/client": "^0.14.0",
80
+ "@types/better-sqlite3": "^7.6.0",
81
+ "better-sqlite3": "^11.0.0",
77
82
  "@rollup/plugin-commonjs": "^25.0.8",
78
83
  "@rollup/plugin-json": "^6.1.0",
79
84
  "@rollup/plugin-node-resolve": "^15.3.1",
@@ -82,7 +87,9 @@
82
87
  "@types/js-yaml": "^4.0.9",
83
88
  "@types/node": "^20.19.27",
84
89
  "@types/uuid": "^9.0.8",
90
+ "@upstash/redis": "^1.34.0",
85
91
  "@vitest/coverage-v8": "^1.6.1",
92
+ "convex": "^1.17.0",
86
93
  "jsdom": "^23.2.0",
87
94
  "rollup": "^4.54.0",
88
95
  "rollup-plugin-dts": "^6.3.0",
@@ -93,7 +100,13 @@
93
100
  "peerDependencies": {
94
101
  "node-fetch": "^2.6.0",
95
102
  "pg": "^8.11.0",
96
- "redis": "^4.6.0"
103
+ "redis": "^4.6.0",
104
+ "better-sqlite3": "^11.0.0",
105
+ "@upstash/redis": "^1.28.0",
106
+ "@aws-sdk/client-dynamodb": "^3.500.0",
107
+ "@aws-sdk/lib-dynamodb": "^3.500.0",
108
+ "@libsql/client": "^0.5.0",
109
+ "convex": "^1.10.0"
97
110
  },
98
111
  "peerDependenciesMeta": {
99
112
  "node-fetch": {
@@ -104,6 +117,24 @@
104
117
  },
105
118
  "pg": {
106
119
  "optional": true
120
+ },
121
+ "better-sqlite3": {
122
+ "optional": true
123
+ },
124
+ "@upstash/redis": {
125
+ "optional": true
126
+ },
127
+ "@aws-sdk/client-dynamodb": {
128
+ "optional": true
129
+ },
130
+ "@aws-sdk/lib-dynamodb": {
131
+ "optional": true
132
+ },
133
+ "@libsql/client": {
134
+ "optional": true
135
+ },
136
+ "convex": {
137
+ "optional": true
107
138
  }
108
139
  },
109
140
  "optionalDependencies": {