dominus-sdk-nodejs-staging 1.2.4

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.
Files changed (75) hide show
  1. package/LLM-GUIDE.md +537 -0
  2. package/README.md +585 -0
  3. package/dist/index.d.ts +191 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +224 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/cache.d.ts +112 -0
  8. package/dist/lib/cache.d.ts.map +1 -0
  9. package/dist/lib/cache.js +237 -0
  10. package/dist/lib/cache.js.map +1 -0
  11. package/dist/lib/client.d.ts +38 -0
  12. package/dist/lib/client.d.ts.map +1 -0
  13. package/dist/lib/client.js +425 -0
  14. package/dist/lib/client.js.map +1 -0
  15. package/dist/lib/config.d.ts +20 -0
  16. package/dist/lib/config.d.ts.map +1 -0
  17. package/dist/lib/config.js +32 -0
  18. package/dist/lib/config.js.map +1 -0
  19. package/dist/lib/crypto.d.ts +70 -0
  20. package/dist/lib/crypto.d.ts.map +1 -0
  21. package/dist/lib/crypto.js +95 -0
  22. package/dist/lib/crypto.js.map +1 -0
  23. package/dist/lib/errors.d.ts +77 -0
  24. package/dist/lib/errors.d.ts.map +1 -0
  25. package/dist/lib/errors.js +134 -0
  26. package/dist/lib/errors.js.map +1 -0
  27. package/dist/namespaces/auth.d.ts +237 -0
  28. package/dist/namespaces/auth.d.ts.map +1 -0
  29. package/dist/namespaces/auth.js +785 -0
  30. package/dist/namespaces/auth.js.map +1 -0
  31. package/dist/namespaces/courier.d.ts +67 -0
  32. package/dist/namespaces/courier.d.ts.map +1 -0
  33. package/dist/namespaces/courier.js +90 -0
  34. package/dist/namespaces/courier.js.map +1 -0
  35. package/dist/namespaces/db.d.ts +117 -0
  36. package/dist/namespaces/db.d.ts.map +1 -0
  37. package/dist/namespaces/db.js +149 -0
  38. package/dist/namespaces/db.js.map +1 -0
  39. package/dist/namespaces/ddl.d.ts +84 -0
  40. package/dist/namespaces/ddl.d.ts.map +1 -0
  41. package/dist/namespaces/ddl.js +211 -0
  42. package/dist/namespaces/ddl.js.map +1 -0
  43. package/dist/namespaces/files.d.ts +107 -0
  44. package/dist/namespaces/files.d.ts.map +1 -0
  45. package/dist/namespaces/files.js +161 -0
  46. package/dist/namespaces/files.js.map +1 -0
  47. package/dist/namespaces/health.d.ts +30 -0
  48. package/dist/namespaces/health.d.ts.map +1 -0
  49. package/dist/namespaces/health.js +66 -0
  50. package/dist/namespaces/health.js.map +1 -0
  51. package/dist/namespaces/logs.d.ts +97 -0
  52. package/dist/namespaces/logs.d.ts.map +1 -0
  53. package/dist/namespaces/logs.js +194 -0
  54. package/dist/namespaces/logs.js.map +1 -0
  55. package/dist/namespaces/open.d.ts +27 -0
  56. package/dist/namespaces/open.d.ts.map +1 -0
  57. package/dist/namespaces/open.js +46 -0
  58. package/dist/namespaces/open.js.map +1 -0
  59. package/dist/namespaces/portal.d.ts +172 -0
  60. package/dist/namespaces/portal.d.ts.map +1 -0
  61. package/dist/namespaces/portal.js +332 -0
  62. package/dist/namespaces/portal.js.map +1 -0
  63. package/dist/namespaces/redis.d.ts +144 -0
  64. package/dist/namespaces/redis.d.ts.map +1 -0
  65. package/dist/namespaces/redis.js +218 -0
  66. package/dist/namespaces/redis.js.map +1 -0
  67. package/dist/namespaces/secrets.d.ts +50 -0
  68. package/dist/namespaces/secrets.d.ts.map +1 -0
  69. package/dist/namespaces/secrets.js +93 -0
  70. package/dist/namespaces/secrets.js.map +1 -0
  71. package/dist/namespaces/secure.d.ts +102 -0
  72. package/dist/namespaces/secure.d.ts.map +1 -0
  73. package/dist/namespaces/secure.js +151 -0
  74. package/dist/namespaces/secure.js.map +1 -0
  75. package/package.json +45 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * CB Dominus SDK for Node.js
3
+ *
4
+ * Ultra-flat async SDK for CareBridge Services.
5
+ *
6
+ * Usage:
7
+ * import { dominus } from 'dominus-sdk-nodejs';
8
+ *
9
+ * // Secrets (root-level shortcuts)
10
+ * const value = await dominus.get("DB_URL");
11
+ * await dominus.upsert("KEY", "value");
12
+ *
13
+ * // Database (root-level shortcuts)
14
+ * const tables = await dominus.listTables();
15
+ * const users = await dominus.queryTable("users", { filters: { status: "active" } });
16
+ * await dominus.insertRow("users", { name: "John" });
17
+ *
18
+ * // Secure table access (with audit logging)
19
+ * const patients = await dominus.secure.query("patients", {
20
+ * reason: "Reviewing chart for appointment #123",
21
+ * actor: userId
22
+ * });
23
+ *
24
+ * // Database (namespace)
25
+ * const tables = await dominus.db.tables();
26
+ * const users = await dominus.db.query("users", { filters: { status: "active" } });
27
+ *
28
+ * // Redis
29
+ * await dominus.redis.set("key", "value", { ttl: 3600 });
30
+ * const cached = await dominus.redis.get("key");
31
+ *
32
+ * // Files
33
+ * const result = await dominus.files.upload(buffer, "report.pdf", { category: "reports" });
34
+ * const download = await dominus.files.download({ id: result.id });
35
+ *
36
+ * // Auth
37
+ * const users = await dominus.auth.listUsers();
38
+ * await dominus.auth.createUser({ username: "john", email: "j@ex.com", password: "secret" });
39
+ *
40
+ * // DDL
41
+ * await dominus.ddl.createTable("orders", [{ name: "id", type: "UUID" }]);
42
+ *
43
+ * // Logs
44
+ * await dominus.logs.info("User logged in", { user_id: "123" });
45
+ *
46
+ * // Portal
47
+ * const session = await dominus.portal.login("user@example.com", "password", "tenant-id");
48
+ *
49
+ * // Courier
50
+ * await dominus.courier.sendWelcome("user@example.com", "noreply@app.com", { name: "John", productName: "MyApp" });
51
+ *
52
+ * // Open
53
+ * const dsn = await dominus.open.dsn();
54
+ *
55
+ * // Health
56
+ * const status = await dominus.health.check();
57
+ *
58
+ * // Crypto helpers
59
+ * import { hashPassword, hashPsk, generateToken } from 'dominus-sdk-nodejs';
60
+ * const hashed = hashPassword("secret");
61
+ *
62
+ * Configuration:
63
+ * Set DOMINUS_TOKEN environment variable with your PSK token.
64
+ */
65
+ import { SecretsNamespace } from './namespaces/secrets.js';
66
+ import { DbNamespace, QueryOptions, QueryResult } from './namespaces/db.js';
67
+ import { RedisNamespace } from './namespaces/redis.js';
68
+ import { FilesNamespace } from './namespaces/files.js';
69
+ import { AuthNamespace } from './namespaces/auth.js';
70
+ import { DdlNamespace, ColumnDefinition } from './namespaces/ddl.js';
71
+ import { LogsNamespace } from './namespaces/logs.js';
72
+ import { PortalNamespace } from './namespaces/portal.js';
73
+ import { CourierNamespace } from './namespaces/courier.js';
74
+ import { OpenNamespace } from './namespaces/open.js';
75
+ import { HealthNamespace } from './namespaces/health.js';
76
+ import { SecureNamespace } from './namespaces/secure.js';
77
+ export { DominusError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, ConflictError, ServiceError, ConnectionError, TimeoutError, SecureTableError, } from './lib/errors.js';
78
+ export { hashPassword, verifyPasswordLocal, hashPsk, verifyPskLocal, generatePskLocal, hashToken, generateToken, } from './lib/crypto.js';
79
+ export { CircuitBreaker, DominusCache, exponentialBackoffWithJitter, dominusCache, orchestratorCircuitBreaker, } from './lib/cache.js';
80
+ export type { DominusClient } from './lib/client.js';
81
+ export type { Secret, UpsertResult } from './namespaces/secrets.js';
82
+ export type { QueryOptions, QueryResult, TableInfo, ColumnInfo } from './namespaces/db.js';
83
+ export type { SetResult, GetResult, ListResult as RedisListResult, SetnxResult, IncrResult, HsetResult, HgetallResult } from './namespaces/redis.js';
84
+ export type { UploadResult, DownloadResult, FetchResult, ListResult, FileInfo } from './namespaces/files.js';
85
+ export type { ColumnDefinition } from './namespaces/ddl.js';
86
+ export type { LogContext, LogEntry, BatchResult } from './namespaces/logs.js';
87
+ export type { Session } from './namespaces/portal.js';
88
+ export type { SendResult } from './namespaces/courier.js';
89
+ export type { HealthStatus } from './namespaces/health.js';
90
+ export type { SecureQueryOptions, SecureAccessContext } from './namespaces/secure.js';
91
+ /**
92
+ * Main Dominus SDK class.
93
+ *
94
+ * Provides namespace-based access to all Dominus services,
95
+ * plus root-level shortcuts for common operations.
96
+ */
97
+ export declare class Dominus {
98
+ private _client;
99
+ /** Secrets management (Warden) */
100
+ readonly secrets: SecretsNamespace;
101
+ /** Database CRUD operations (Scribe) */
102
+ readonly db: DbNamespace;
103
+ /** Secure table operations with audit logging */
104
+ readonly secure: SecureNamespace;
105
+ /** Redis caching operations (Whisperer) */
106
+ readonly redis: RedisNamespace;
107
+ /** File storage operations (Archivist) */
108
+ readonly files: FilesNamespace;
109
+ /** Authentication & authorization (Guardian) */
110
+ readonly auth: AuthNamespace;
111
+ /** Schema DDL & migrations (Smith) */
112
+ readonly ddl: DdlNamespace;
113
+ /** Structured logging (Herald) */
114
+ readonly logs: LogsNamespace;
115
+ /** User authentication & sessions (Portal) */
116
+ readonly portal: PortalNamespace;
117
+ /** Email delivery (Courier) */
118
+ readonly courier: CourierNamespace;
119
+ /** Direct database access (Scribe Open) */
120
+ readonly open: OpenNamespace;
121
+ /** Health checks */
122
+ readonly health: HealthNamespace;
123
+ constructor();
124
+ /**
125
+ * Get a secret value (shortcut for dominus.secrets.get).
126
+ */
127
+ get(key: string): Promise<unknown>;
128
+ /**
129
+ * Create or update a secret (shortcut for dominus.secrets.upsert).
130
+ */
131
+ upsert(key: string, value: string, comment?: string): Promise<import("./namespaces/secrets.js").UpsertResult>;
132
+ /**
133
+ * List tables in a schema (shortcut for dominus.db.tables).
134
+ */
135
+ listTables(schema?: string): Promise<import("./namespaces/db.js").TableInfo[]>;
136
+ /**
137
+ * Query table data (shortcut for dominus.db.query).
138
+ */
139
+ queryTable(table: string, options?: QueryOptions): Promise<QueryResult>;
140
+ /**
141
+ * Insert a row (shortcut for dominus.db.insert).
142
+ */
143
+ insertRow(table: string, data: Record<string, unknown>, options?: {
144
+ schema?: string;
145
+ reason?: string;
146
+ actor?: string;
147
+ }): Promise<Record<string, unknown>>;
148
+ /**
149
+ * Update rows (shortcut for dominus.db.update).
150
+ */
151
+ updateRows(table: string, data: Record<string, unknown>, filters: Record<string, unknown>, options?: {
152
+ schema?: string;
153
+ reason?: string;
154
+ actor?: string;
155
+ }): Promise<{
156
+ affected_rows: number;
157
+ }>;
158
+ /**
159
+ * Delete rows (shortcut for dominus.db.delete).
160
+ */
161
+ deleteRows(table: string, filters: Record<string, unknown>, options?: {
162
+ schema?: string;
163
+ reason?: string;
164
+ actor?: string;
165
+ }): Promise<{
166
+ affected_rows: number;
167
+ }>;
168
+ /**
169
+ * List columns in a table (shortcut for dominus.db.columns).
170
+ */
171
+ listColumns(table: string, schema?: string): Promise<import("./namespaces/db.js").ColumnInfo[]>;
172
+ /**
173
+ * Create a table (shortcut for dominus.ddl.createTable).
174
+ */
175
+ addTable(tableName: string, columns: ColumnDefinition[], schema?: string): Promise<Record<string, unknown>>;
176
+ /**
177
+ * Drop a table (shortcut for dominus.ddl.dropTable).
178
+ */
179
+ deleteTable(tableName: string, schema?: string): Promise<Record<string, unknown>>;
180
+ /**
181
+ * Add a column to a table (shortcut for dominus.ddl.addColumn).
182
+ */
183
+ addColumn(tableName: string, column: ColumnDefinition, schema?: string): Promise<Record<string, unknown>>;
184
+ /**
185
+ * Drop a column from a table (shortcut for dominus.ddl.dropColumn).
186
+ */
187
+ deleteColumn(tableName: string, columnName: string, schema?: string): Promise<Record<string, unknown>>;
188
+ }
189
+ export declare const dominus: Dominus;
190
+ export default dominus;
191
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,224 @@
1
+ /**
2
+ * CB Dominus SDK for Node.js
3
+ *
4
+ * Ultra-flat async SDK for CareBridge Services.
5
+ *
6
+ * Usage:
7
+ * import { dominus } from 'dominus-sdk-nodejs';
8
+ *
9
+ * // Secrets (root-level shortcuts)
10
+ * const value = await dominus.get("DB_URL");
11
+ * await dominus.upsert("KEY", "value");
12
+ *
13
+ * // Database (root-level shortcuts)
14
+ * const tables = await dominus.listTables();
15
+ * const users = await dominus.queryTable("users", { filters: { status: "active" } });
16
+ * await dominus.insertRow("users", { name: "John" });
17
+ *
18
+ * // Secure table access (with audit logging)
19
+ * const patients = await dominus.secure.query("patients", {
20
+ * reason: "Reviewing chart for appointment #123",
21
+ * actor: userId
22
+ * });
23
+ *
24
+ * // Database (namespace)
25
+ * const tables = await dominus.db.tables();
26
+ * const users = await dominus.db.query("users", { filters: { status: "active" } });
27
+ *
28
+ * // Redis
29
+ * await dominus.redis.set("key", "value", { ttl: 3600 });
30
+ * const cached = await dominus.redis.get("key");
31
+ *
32
+ * // Files
33
+ * const result = await dominus.files.upload(buffer, "report.pdf", { category: "reports" });
34
+ * const download = await dominus.files.download({ id: result.id });
35
+ *
36
+ * // Auth
37
+ * const users = await dominus.auth.listUsers();
38
+ * await dominus.auth.createUser({ username: "john", email: "j@ex.com", password: "secret" });
39
+ *
40
+ * // DDL
41
+ * await dominus.ddl.createTable("orders", [{ name: "id", type: "UUID" }]);
42
+ *
43
+ * // Logs
44
+ * await dominus.logs.info("User logged in", { user_id: "123" });
45
+ *
46
+ * // Portal
47
+ * const session = await dominus.portal.login("user@example.com", "password", "tenant-id");
48
+ *
49
+ * // Courier
50
+ * await dominus.courier.sendWelcome("user@example.com", "noreply@app.com", { name: "John", productName: "MyApp" });
51
+ *
52
+ * // Open
53
+ * const dsn = await dominus.open.dsn();
54
+ *
55
+ * // Health
56
+ * const status = await dominus.health.check();
57
+ *
58
+ * // Crypto helpers
59
+ * import { hashPassword, hashPsk, generateToken } from 'dominus-sdk-nodejs';
60
+ * const hashed = hashPassword("secret");
61
+ *
62
+ * Configuration:
63
+ * Set DOMINUS_TOKEN environment variable with your PSK token.
64
+ */
65
+ import { getClient } from './lib/client.js';
66
+ import { SecretsNamespace } from './namespaces/secrets.js';
67
+ import { DbNamespace } from './namespaces/db.js';
68
+ import { RedisNamespace } from './namespaces/redis.js';
69
+ import { FilesNamespace } from './namespaces/files.js';
70
+ import { AuthNamespace } from './namespaces/auth.js';
71
+ import { DdlNamespace } from './namespaces/ddl.js';
72
+ import { LogsNamespace } from './namespaces/logs.js';
73
+ import { PortalNamespace } from './namespaces/portal.js';
74
+ import { CourierNamespace } from './namespaces/courier.js';
75
+ import { OpenNamespace } from './namespaces/open.js';
76
+ import { HealthNamespace } from './namespaces/health.js';
77
+ import { SecureNamespace } from './namespaces/secure.js';
78
+ // Initialize cache with token for encryption
79
+ import { dominusCache } from './lib/cache.js';
80
+ const token = process.env.DOMINUS_TOKEN;
81
+ if (token) {
82
+ dominusCache.setEncryptionKey(token);
83
+ }
84
+ // Re-export errors for consumers
85
+ export { DominusError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, ConflictError, ServiceError, ConnectionError, TimeoutError, SecureTableError, } from './lib/errors.js';
86
+ // Re-export crypto helpers for consumers
87
+ export { hashPassword, verifyPasswordLocal, hashPsk, verifyPskLocal, generatePskLocal, hashToken, generateToken, } from './lib/crypto.js';
88
+ // Re-export cache utilities (internal but useful)
89
+ export { CircuitBreaker, DominusCache, exponentialBackoffWithJitter, dominusCache, orchestratorCircuitBreaker, } from './lib/cache.js';
90
+ /**
91
+ * Main Dominus SDK class.
92
+ *
93
+ * Provides namespace-based access to all Dominus services,
94
+ * plus root-level shortcuts for common operations.
95
+ */
96
+ export class Dominus {
97
+ _client;
98
+ /** Secrets management (Warden) */
99
+ secrets;
100
+ /** Database CRUD operations (Scribe) */
101
+ db;
102
+ /** Secure table operations with audit logging */
103
+ secure;
104
+ /** Redis caching operations (Whisperer) */
105
+ redis;
106
+ /** File storage operations (Archivist) */
107
+ files;
108
+ /** Authentication & authorization (Guardian) */
109
+ auth;
110
+ /** Schema DDL & migrations (Smith) */
111
+ ddl;
112
+ /** Structured logging (Herald) */
113
+ logs;
114
+ /** User authentication & sessions (Portal) */
115
+ portal;
116
+ /** Email delivery (Courier) */
117
+ courier;
118
+ /** Direct database access (Scribe Open) */
119
+ open;
120
+ /** Health checks */
121
+ health;
122
+ constructor() {
123
+ this._client = getClient();
124
+ // Initialize all namespaces
125
+ this.secrets = new SecretsNamespace(this._client);
126
+ this.db = new DbNamespace(this._client);
127
+ this.secure = new SecureNamespace(this._client);
128
+ this.redis = new RedisNamespace(this._client);
129
+ this.files = new FilesNamespace(this._client);
130
+ this.auth = new AuthNamespace(this._client);
131
+ this.ddl = new DdlNamespace(this._client);
132
+ this.logs = new LogsNamespace(this._client);
133
+ this.portal = new PortalNamespace(this._client);
134
+ this.courier = new CourierNamespace(this._client);
135
+ this.open = new OpenNamespace(this._client);
136
+ this.health = new HealthNamespace(this._client);
137
+ }
138
+ // ========================================
139
+ // ROOT-LEVEL SHORTCUTS - SECRETS
140
+ // ========================================
141
+ /**
142
+ * Get a secret value (shortcut for dominus.secrets.get).
143
+ */
144
+ async get(key) {
145
+ return this.secrets.get(key);
146
+ }
147
+ /**
148
+ * Create or update a secret (shortcut for dominus.secrets.upsert).
149
+ */
150
+ async upsert(key, value, comment) {
151
+ return this.secrets.upsert(key, value, comment);
152
+ }
153
+ // ========================================
154
+ // ROOT-LEVEL SHORTCUTS - DATABASE
155
+ // ========================================
156
+ /**
157
+ * List tables in a schema (shortcut for dominus.db.tables).
158
+ */
159
+ async listTables(schema = 'public') {
160
+ return this.db.tables(schema);
161
+ }
162
+ /**
163
+ * Query table data (shortcut for dominus.db.query).
164
+ */
165
+ async queryTable(table, options) {
166
+ return this.db.query(table, options);
167
+ }
168
+ /**
169
+ * Insert a row (shortcut for dominus.db.insert).
170
+ */
171
+ async insertRow(table, data, options) {
172
+ return this.db.insert(table, data, options);
173
+ }
174
+ /**
175
+ * Update rows (shortcut for dominus.db.update).
176
+ */
177
+ async updateRows(table, data, filters, options) {
178
+ return this.db.update(table, data, filters, options);
179
+ }
180
+ /**
181
+ * Delete rows (shortcut for dominus.db.delete).
182
+ */
183
+ async deleteRows(table, filters, options) {
184
+ return this.db.delete(table, filters, options);
185
+ }
186
+ /**
187
+ * List columns in a table (shortcut for dominus.db.columns).
188
+ */
189
+ async listColumns(table, schema = 'public') {
190
+ return this.db.columns(table, schema);
191
+ }
192
+ // ========================================
193
+ // ROOT-LEVEL SHORTCUTS - DDL
194
+ // ========================================
195
+ /**
196
+ * Create a table (shortcut for dominus.ddl.createTable).
197
+ */
198
+ async addTable(tableName, columns, schema = 'public') {
199
+ return this.ddl.createTable(tableName, columns, schema);
200
+ }
201
+ /**
202
+ * Drop a table (shortcut for dominus.ddl.dropTable).
203
+ */
204
+ async deleteTable(tableName, schema = 'public') {
205
+ return this.ddl.dropTable(tableName, schema);
206
+ }
207
+ /**
208
+ * Add a column to a table (shortcut for dominus.ddl.addColumn).
209
+ */
210
+ async addColumn(tableName, column, schema = 'public') {
211
+ return this.ddl.addColumn(tableName, column, schema);
212
+ }
213
+ /**
214
+ * Drop a column from a table (shortcut for dominus.ddl.dropColumn).
215
+ */
216
+ async deleteColumn(tableName, columnName, schema = 'public') {
217
+ return this.ddl.dropColumn(tableName, columnName, schema);
218
+ }
219
+ }
220
+ // Create and export singleton instance
221
+ export const dominus = new Dominus();
222
+ // Default export for ESM compatibility
223
+ export default dominus;
224
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Internal cache with automatic encryption and circuit breaker.
3
+ *
4
+ * NOT exposed to SDK users - internal use only.
5
+ */
6
+ /**
7
+ * Circuit breaker states.
8
+ */
9
+ declare enum CircuitState {
10
+ CLOSED = "closed",
11
+ OPEN = "open",
12
+ HALF_OPEN = "half_open"
13
+ }
14
+ /**
15
+ * Simple circuit breaker to prevent runaway retries.
16
+ *
17
+ * States:
18
+ * - CLOSED: Normal operation, requests pass through
19
+ * - OPEN: Too many failures, requests blocked
20
+ * - HALF_OPEN: Testing if service recovered
21
+ *
22
+ * Prevents CPU/quota exhaustion from retry storms.
23
+ */
24
+ export declare class CircuitBreaker {
25
+ private failureThreshold;
26
+ private recoveryTimeout;
27
+ private halfOpenMaxCalls;
28
+ private failureCount;
29
+ private state;
30
+ private lastFailureTime;
31
+ private halfOpenCalls;
32
+ constructor(failureThreshold?: number, recoveryTimeout?: number, // 30 seconds in ms
33
+ halfOpenMaxCalls?: number);
34
+ /**
35
+ * Get current state, transitioning OPEN→HALF_OPEN if timeout elapsed.
36
+ */
37
+ getState(): CircuitState;
38
+ /**
39
+ * Check if a request can be executed.
40
+ */
41
+ canExecute(): boolean;
42
+ /**
43
+ * Record a successful call.
44
+ */
45
+ recordSuccess(): void;
46
+ /**
47
+ * Record a failed call.
48
+ */
49
+ recordFailure(): void;
50
+ /**
51
+ * Record a call attempt in HALF_OPEN state.
52
+ */
53
+ recordHalfOpenCall(): void;
54
+ /**
55
+ * Reset the circuit breaker.
56
+ */
57
+ reset(): void;
58
+ }
59
+ /**
60
+ * Calculate backoff delay with jitter to prevent thundering herd.
61
+ *
62
+ * @param attempt - Zero-based attempt number
63
+ * @param baseDelay - Base delay in milliseconds
64
+ * @param maxDelay - Maximum delay cap
65
+ * @param jitter - Jitter factor (0-1), adds randomness
66
+ * @returns Delay in milliseconds
67
+ */
68
+ export declare function exponentialBackoffWithJitter(attempt: number, baseDelay?: number, maxDelay?: number, jitter?: number): number;
69
+ /**
70
+ * Internal process-local cache with auto-encryption.
71
+ *
72
+ * Used by dominus services only:
73
+ * - Validation state
74
+ * - Service URLs
75
+ * - API responses
76
+ *
77
+ * NOT accessible by SDK users.
78
+ */
79
+ export declare class DominusCache {
80
+ private defaultTtl;
81
+ private store;
82
+ private cipher;
83
+ constructor(defaultTtl?: number);
84
+ /**
85
+ * Initialize encryption using auth token.
86
+ */
87
+ setEncryptionKey(token: string): void;
88
+ /**
89
+ * Get and decrypt, refresh TTL.
90
+ */
91
+ get<T = unknown>(key: string): T | null;
92
+ /**
93
+ * Encrypt and store.
94
+ */
95
+ set<T = unknown>(key: string, value: T, ttl?: number): void;
96
+ /**
97
+ * Delete key.
98
+ */
99
+ delete(key: string): boolean;
100
+ /**
101
+ * Clear all.
102
+ */
103
+ clear(): number;
104
+ /**
105
+ * Get cache size.
106
+ */
107
+ size(): number;
108
+ }
109
+ export declare const dominusCache: DominusCache;
110
+ export declare const orchestratorCircuitBreaker: CircuitBreaker;
111
+ export {};
112
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,aAAK,YAAY;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IAR1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAK;gBAGhB,gBAAgB,SAAI,EACpB,eAAe,SAAQ,EAAE,mBAAmB;IAC5C,gBAAgB,SAAI;IAG9B;;OAEG;IACH,QAAQ,IAAI,YAAY;IAUxB;;OAEG;IACH,UAAU,IAAI,OAAO;IAWrB;;OAEG;IACH,aAAa,IAAI,IAAI;IAQrB;;OAEG;IACH,aAAa,IAAI,IAAI;IAYrB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,SAAS,SAAO,EAChB,QAAQ,SAAQ,EAChB,MAAM,SAAM,GACX,MAAM,CAIR;AAOD;;;;;;;;;GASG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,UAAU;IAH9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAmD;gBAE7C,UAAU,SAAS;IAEvC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IA4CvC;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IA+B3D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,MAAM;IAMf;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAGD,eAAO,MAAM,YAAY,cAA2B,CAAC;AAGrD,eAAO,MAAM,0BAA0B,gBAItC,CAAC"}