@1matrix/config-loader 0.1.1 → 0.1.3

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 (39) hide show
  1. package/README.md +228 -79
  2. package/dist/adapters/express-auth.d.ts +18 -0
  3. package/dist/adapters/express-auth.d.ts.map +1 -0
  4. package/dist/adapters/express-auth.js +32 -0
  5. package/dist/adapters/express-auth.js.map +1 -0
  6. package/dist/adapters/express-webhook.d.ts +6 -0
  7. package/dist/adapters/express-webhook.d.ts.map +1 -0
  8. package/dist/adapters/express-webhook.js +14 -0
  9. package/dist/adapters/express-webhook.js.map +1 -0
  10. package/dist/adapters/fastify-auth.d.ts +18 -0
  11. package/dist/adapters/fastify-auth.d.ts.map +1 -0
  12. package/dist/adapters/fastify-auth.js +32 -0
  13. package/dist/adapters/fastify-auth.js.map +1 -0
  14. package/dist/adapters/fastify-webhook.d.ts +13 -0
  15. package/dist/adapters/fastify-webhook.d.ts.map +1 -0
  16. package/dist/adapters/fastify-webhook.js +14 -0
  17. package/dist/adapters/fastify-webhook.js.map +1 -0
  18. package/dist/auth/api-key-verifier.d.ts +8 -0
  19. package/dist/auth/api-key-verifier.d.ts.map +1 -0
  20. package/dist/auth/api-key-verifier.js +30 -0
  21. package/dist/auth/api-key-verifier.js.map +1 -0
  22. package/dist/auth/hash-utils.d.ts +2 -0
  23. package/dist/auth/hash-utils.d.ts.map +1 -0
  24. package/dist/auth/hash-utils.js +9 -0
  25. package/dist/auth/hash-utils.js.map +1 -0
  26. package/dist/config-loader.d.ts +2 -0
  27. package/dist/config-loader.d.ts.map +1 -1
  28. package/dist/config-loader.js +6 -0
  29. package/dist/config-loader.js.map +1 -1
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +15 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/webhook/webhook-core.d.ts +20 -0
  36. package/dist/webhook/webhook-core.d.ts.map +1 -0
  37. package/dist/webhook/webhook-core.js +77 -0
  38. package/dist/webhook/webhook-core.js.map +1 -0
  39. package/package.json +3 -3
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @onematrix/config-loader
1
+ # @1matrix/config-loader
2
2
 
3
3
  Hot-reloadable public configuration management for Applications with GitHub webhook integration.
4
4
 
@@ -13,11 +13,13 @@ Hot-reloadable public configuration management for Applications with GitHub webh
13
13
  - ✅ **Fail-safe Caching**: Local cache fallback when GitHub is unavailable
14
14
  - ✅ **TypeScript**: Full TypeScript support with type definitions
15
15
  - ✅ **Event-Driven**: Listen to configuration changes with EventEmitter
16
+ - ✅ **Framework Adapters**: Built-in Express and Fastify support
17
+ - ✅ **API Key Auth**: Ready-to-use API key authentication middleware
16
18
 
17
19
  ## Installation
18
20
 
19
21
  ```bash
20
- pnpm add @onematrix/config-loader
22
+ pnpm add @1matrix/config-loader
21
23
  ```
22
24
 
23
25
  ## Quick Start
@@ -25,15 +27,15 @@ pnpm add @onematrix/config-loader
25
27
  ### 1. Initialize ConfigLoader
26
28
 
27
29
  ```typescript
28
- import { ConfigLoader } from '@onematrix/config-loader';
30
+ import { ConfigLoader } from "@1matrix/config-loader";
29
31
 
30
32
  const config = new ConfigLoader({
31
- repository: 'OneMatrixL1/public-configs',
32
- branch: 'main',
33
- githubToken: process.env.GITHUB_TOKEN,
34
- webhookSecret: process.env.GITHUB_WEBHOOK_SECRET,
35
- cacheFile: './config-cache.json',
36
- pollingInterval: 5 * 60 * 1000 // 5 minutes
33
+ repository: "OneMatrixL1/public-configs",
34
+ branch: "main",
35
+ githubToken: process.env.GITHUB_TOKEN,
36
+ webhookSecret: process.env.GITHUB_WEBHOOK_SECRET,
37
+ cacheFile: "./config-cache.json",
38
+ pollingInterval: 5 * 60 * 1000, // 5 minutes
37
39
  });
38
40
 
39
41
  await config.initialize();
@@ -43,14 +45,14 @@ await config.initialize();
43
45
 
44
46
  ```typescript
45
47
  // Get specific value
46
- const apiKeyName = config.get('api-keys.a129f786...');
48
+ const apiKeyName = config.get("api-keys.a129f786...");
47
49
 
48
50
  // Get with type inference
49
- const handlers = config.get<string[]>('intent-handlers', []);
51
+ const handlers = config.get<string[]>("intent-handlers", []);
50
52
 
51
53
  // Check if exists
52
- if (config.has('api-keys.some-hash')) {
53
- // ...
54
+ if (config.has("api-keys.some-hash")) {
55
+ // ...
54
56
  }
55
57
 
56
58
  // Get all configs
@@ -61,38 +63,92 @@ const allConfigs = config.getAll();
61
63
 
62
64
  ```typescript
63
65
  // Listen to all updates
64
- config.on('update', (newConfigs, changedKeys) => {
65
- console.log('Updated configs:', changedKeys);
66
+ config.on("update", (newConfigs, changedKeys) => {
67
+ console.log("Updated configs:", changedKeys);
66
68
  });
67
69
 
68
70
  // Listen to specific config updates
69
- config.on('update:api-keys', (newApiKeys) => {
70
- console.log('API keys changed');
71
+ config.on("update:api-keys", (newApiKeys) => {
72
+ console.log("API keys changed");
71
73
  });
72
74
 
73
75
  // Listen to validation errors
74
- config.on('validation-error', (configName, errors) => {
75
- console.error('Validation failed:', configName, errors);
76
+ config.on("validation-error", (configName, errors) => {
77
+ console.error("Validation failed:", configName, errors);
76
78
  });
77
79
  ```
78
80
 
79
- ### 4. Set Up Webhook (Express)
81
+ ### 4. Set Up Webhook
82
+
83
+ **Express:**
80
84
 
81
85
  ```typescript
82
- import express from 'express';
86
+ import express from "express";
87
+ import { createExpressWebhook } from "@1matrix/config-loader";
83
88
 
84
89
  const app = express();
85
90
 
86
91
  app.post(
87
- '/webhook/config-update',
88
- express.json(),
89
- config.createWebhookHandler({
90
- onUpdate: (configs) => console.log('Updated via webhook'),
91
- onError: (err) => console.error(err)
92
- })
92
+ "/webhook/config",
93
+ express.json(),
94
+ createExpressWebhook(config, {
95
+ onUpdate: (configs) => console.log("Updated via webhook"),
96
+ onError: (err) => console.error(err),
97
+ })
93
98
  );
94
99
  ```
95
100
 
101
+ **Fastify:**
102
+
103
+ ```typescript
104
+ import Fastify from "fastify";
105
+ import { createFastifyWebhook } from "@1matrix/config-loader";
106
+
107
+ const fastify = Fastify();
108
+
109
+ fastify.post("/webhook/config", createFastifyWebhook(config, {
110
+ onUpdate: (configs) => console.log("Updated via webhook"),
111
+ onError: (err) => console.error(err),
112
+ }));
113
+ ```
114
+
115
+ ### 5. Protect Routes with API Key Authentication
116
+
117
+ **Express:**
118
+
119
+ ```typescript
120
+ import { createExpressApiKeyAuth } from "@1matrix/config-loader";
121
+
122
+ // Default: uses Keccak256 hashing (most common)
123
+ app.use("/api", createExpressApiKeyAuth(config));
124
+
125
+ // If clients send pre-hashed keys (disable hashing)
126
+ app.use("/api", createExpressApiKeyAuth(config, { hashFn: null }));
127
+
128
+ app.get("/api/protected", (req, res) => {
129
+ res.json({ authenticatedAs: req.apiKeyName });
130
+ });
131
+ ```
132
+
133
+ **Fastify:**
134
+
135
+ ```typescript
136
+ import { createFastifyApiKeyAuth } from "@1matrix/config-loader";
137
+
138
+ // Default: uses Keccak256 hashing (most common)
139
+ fastify.addHook("preHandler", createFastifyApiKeyAuth(config));
140
+
141
+ // If clients send pre-hashed keys (disable hashing)
142
+ fastify.addHook("preHandler", createFastifyApiKeyAuth(config, { hashFn: null }));
143
+
144
+ // Or apply to specific routes
145
+ fastify.get("/api/protected", {
146
+ preHandler: createFastifyApiKeyAuth(config)
147
+ }, async (request) => {
148
+ return { authenticatedAs: request.apiKeyName };
149
+ });
150
+ ```
151
+
96
152
  ## Configuration Repository Structure
97
153
 
98
154
  Your GitHub configuration repository should follow this structure:
@@ -115,130 +171,223 @@ public-configs/
115
171
 
116
172
  ### Example Configurations
117
173
 
118
- **`dev/api-keys.json`**
174
+ **`api/keys-dev.json`**
175
+
119
176
  ```json
120
177
  {
121
- "a129f7860d47c0630e6d06c153fe36711f25a31bfb4304dc6d2a79e609da0e96": "VNIDC",
122
- "b234c8971e58d1741f7e17d264gf47822g36b42cgc5415ed7e3b8a710eb1fa07": "SERVICE_2"
178
+ "a129f7860d47c0630e6d06c153fe36711f25a31bfb4304dc6d2a79e609da0e96": "VNIDC",
179
+ "b234c8971e58d1741f7e17d264gf47822g36b42cgc5415ed7e3b8a710eb1fa07": "SERVICE_2"
123
180
  }
124
181
  ```
125
182
 
126
- **`dev/roles.json`**
183
+ **`rabc/roles-dev.json`**
184
+
127
185
  ```json
128
186
  {
129
- "explorer.viewer": [
130
- "0xE61383556642AF1Bd7c5756b13f19A63Dc8601df",
131
- "0x7d5538fEe2CE89dA936ec29cC48386b6E7548FaB"
132
- ],
133
- "admin": [
134
- "0x194f5b1755562966302Ef0BbF4349c842c60FC42"
135
- ]
187
+ "explorer.viewer": [
188
+ "0xE61383556642AF1Bd7c5756b13f19A63Dc8601df",
189
+ "0x7d5538fEe2CE89dA936ec29cC48386b6E7548FaB"
190
+ ],
191
+ "admin": ["0x194f5b1755562966302Ef0BbF4349c842c60FC42"]
136
192
  }
137
193
  ```
138
194
 
139
- **`dev/intent-handlers.json`**
195
+ **`intent/handlers-dev.json`**
196
+
140
197
  ```json
141
198
  [
142
- "0x84f915BcbD5C1134BCb93a0f50D9D36E6D3b508c",
143
- "0x626b1E2458A9307E73A570c291bCd467216cc1D7"
199
+ "0x84f915BcbD5C1134BCb93a0f50D9D36E6D3b508c",
200
+ "0x626b1E2458A9307E73A570c291bCd467216cc1D7"
144
201
  ]
145
202
  ```
146
203
 
147
204
  ### Example Schemas
148
205
 
149
206
  **`schemas/api-keys.schema.json`**
207
+
150
208
  ```json
151
209
  {
152
- "$schema": "http://json-schema.org/draft-07/schema#",
153
- "type": "object",
154
- "patternProperties": {
155
- "^[a-f0-9]{64}$": {
156
- "type": "string",
157
- "minLength": 1
158
- }
159
- },
160
- "additionalProperties": false
210
+ "$schema": "http://json-schema.org/draft-07/schema#",
211
+ "type": "object",
212
+ "patternProperties": {
213
+ "^[a-f0-9]{64}$": {
214
+ "type": "string",
215
+ "minLength": 1
216
+ }
217
+ },
218
+ "additionalProperties": false
161
219
  }
162
220
  ```
163
221
 
164
222
  ## API Reference
165
223
 
224
+ ### Framework Adapters
225
+
226
+ #### `createExpressWebhook(configLoader, options?)`
227
+
228
+ Create Express middleware for handling GitHub webhook requests.
229
+
230
+ **Parameters:**
231
+ - `configLoader: ConfigLoader` - ConfigLoader instance
232
+ - `options?: WebhookCoreOptions` - Optional webhook handler options
233
+ - `onUpdate?: (configs) => void` - Called when configs are updated
234
+ - `onError?: (error) => void` - Called on errors
235
+
236
+ **Returns:** Express middleware function
237
+
238
+ #### `createFastifyWebhook(configLoader, options?)`
239
+
240
+ Create Fastify route handler for GitHub webhook requests.
241
+
242
+ **Parameters:** Same as `createExpressWebhook`
243
+
244
+ **Returns:** Fastify route handler function
245
+
246
+ #### `createExpressApiKeyAuth(configLoader, options?)`
247
+
248
+ Create Express middleware for API key authentication.
249
+
250
+ **Parameters:**
251
+ - `configLoader: ConfigLoader` - ConfigLoader instance
252
+ - `options?: ExpressApiKeyAuthOptions`
253
+ - `headerName?: string` - Header to extract API key from (default: `x-api-key`)
254
+ - `hashFn?: (raw: string) => string` - Function to hash raw API keys
255
+ - `onError?: (req, res, error) => void` - Custom error handler
256
+ - `onSuccess?: (req, res, name) => void` - Custom success handler
257
+
258
+ **Returns:** Express middleware function
259
+
260
+ **Note:** Attaches `apiKeyName` to `req` object when authentication succeeds.
261
+
262
+ #### `createFastifyApiKeyAuth(configLoader, options?)`
263
+
264
+ Create Fastify preHandler hook for API key authentication.
265
+
266
+ **Parameters:**
267
+ - `configLoader: ConfigLoader` - ConfigLoader instance
268
+ - `options?: FastifyApiKeyAuthOptions`
269
+ - `headerName?: string` - Header to extract API key from (default: `x-api-key`)
270
+ - `hashFn?: (raw: string) => string` - Function to hash raw API keys
271
+ - `onError?: (request, reply, error) => void` - Custom error handler
272
+ - `onSuccess?: (request, reply, name) => void` - Custom success handler
273
+
274
+ **Returns:** Fastify preHandler hook function
275
+
276
+ **Note:** Attaches `apiKeyName` to `request` object when authentication succeeds.
277
+
278
+ #### `verifyApiKey(configLoader, hashedKey)`
279
+
280
+ Low-level API key verification utility (used internally by auth adapters).
281
+
282
+ **Parameters:**
283
+ - `configLoader: ConfigLoader` - ConfigLoader instance
284
+ - `hashedKey: string | undefined` - Pre-hashed API key
285
+
286
+ **Returns:** `ApiKeyVerificationResult`
287
+ ```typescript
288
+ {
289
+ valid: boolean;
290
+ name?: string; // API key name if valid
291
+ error?: string; // Error message if invalid
292
+ }
293
+ ```
294
+
166
295
  ### ConfigLoader Options
167
296
 
168
297
  ```typescript
169
298
  interface ConfigLoaderOptions {
170
- repository: string; // GitHub repository (owner/repo)
171
- branch: string; // Branch to fetch from
172
- githubToken?: string; // GitHub personal access token
173
- webhookSecret?: string; // GitHub webhook secret
174
- envMappings?: Record<string, string>; // NODE_ENV to directory mappings
175
- defaultEnv?: string; // Default environment (default: 'dev')
176
- pollingInterval?: number; // Polling interval in ms (default: 300000)
177
- cacheFile?: string; // Cache file path (default: './config-cache.json')
178
- usePackageSchemas?: boolean; // Use built-in schemas (default: true)
299
+ repository: string; // GitHub repository (owner/repo)
300
+ branch: string; // Branch to fetch from
301
+ githubToken?: string; // GitHub personal access token
302
+ webhookSecret?: string; // GitHub webhook secret
303
+ envMappings?: Record<string, string>; // NODE_ENV to directory mappings
304
+ defaultEnv?: string; // Default environment (default: 'dev')
305
+ pollingInterval?: number; // Polling interval in ms (default: 300000)
306
+ cacheFile?: string; // Cache file path (default: './config-cache.json')
307
+ usePackageSchemas?: boolean; // Use built-in schemas (default: true)
179
308
  }
180
309
  ```
181
310
 
182
311
  ### Methods
183
312
 
184
313
  #### `async initialize(): Promise<void>`
314
+
185
315
  Initialize the config loader. Attempts to load from GitHub, falls back to cache if unavailable.
186
316
 
187
317
  #### `async refresh(): Promise<void>`
318
+
188
319
  Manually refresh configurations from GitHub.
189
320
 
190
321
  #### `get<T>(path: string, defaultValue?: T): T | undefined`
322
+
191
323
  Get a configuration value by dot-notation path.
192
324
 
193
325
  #### `has(path: string): boolean`
326
+
194
327
  Check if a configuration path exists.
195
328
 
196
329
  #### `getAll(): Record<string, any>`
330
+
197
331
  Get all configurations.
198
332
 
199
333
  #### `getCurrentEnvironment(): string`
334
+
200
335
  Get the current environment name.
201
336
 
202
337
  #### `getConfigNames(): string[]`
338
+
203
339
  Get names of all loaded configurations.
204
340
 
205
341
  #### `createWebhookHandler(options?: WebhookHandlerOptions): ExpressMiddleware`
342
+
206
343
  Create an Express middleware for handling GitHub webhooks.
207
344
 
208
345
  #### `destroy(): void`
346
+
209
347
  Clean up resources (stop polling, remove listeners).
210
348
 
211
349
  ### Events
212
350
 
213
351
  #### `'update'`
352
+
214
353
  Emitted when configurations are updated.
354
+
215
355
  ```typescript
216
- config.on('update', (newConfigs: Record<string, any>, changedKeys: string[]) => {
217
- // Handle update
218
- });
356
+ config.on(
357
+ "update",
358
+ (newConfigs: Record<string, any>, changedKeys: string[]) => {
359
+ // Handle update
360
+ }
361
+ );
219
362
  ```
220
363
 
221
364
  #### `'update:${configName}'`
365
+
222
366
  Emitted when a specific configuration is updated.
367
+
223
368
  ```typescript
224
- config.on('update:api-keys', (newApiKeys: any) => {
225
- // Handle API keys update
369
+ config.on("update:api-keys", (newApiKeys: any) => {
370
+ // Handle API keys update
226
371
  });
227
372
  ```
228
373
 
229
374
  #### `'validation-error'`
375
+
230
376
  Emitted when configuration validation fails.
377
+
231
378
  ```typescript
232
- config.on('validation-error', (configName: string, errors: any[]) => {
233
- // Handle validation error
379
+ config.on("validation-error", (configName: string, errors: any[]) => {
380
+ // Handle validation error
234
381
  });
235
382
  ```
236
383
 
237
384
  #### `'error'`
385
+
238
386
  Emitted when an error occurs.
387
+
239
388
  ```typescript
240
- config.on('error', (error: Error) => {
241
- // Handle error
389
+ config.on("error", (error: Error) => {
390
+ // Handle error
242
391
  });
243
392
  ```
244
393
 
@@ -277,17 +426,17 @@ Map `NODE_ENV` values to configuration directories:
277
426
 
278
427
  ```typescript
279
428
  const config = new ConfigLoader({
280
- // ...
281
- envMappings: {
282
- 'dev': 'dev',
283
- 'development': 'dev',
284
- 'develop': 'develop',
285
- 'stg': 'stg',
286
- 'staging': 'staging',
287
- 'prod': 'prod',
288
- 'production': 'production'
289
- },
290
- defaultEnv: 'dev'
429
+ // ...
430
+ envMappings: {
431
+ dev: "dev",
432
+ development: "dev",
433
+ develop: "develop",
434
+ stg: "stg",
435
+ staging: "staging",
436
+ prod: "prod",
437
+ production: "production",
438
+ },
439
+ defaultEnv: "dev",
291
440
  });
292
441
  ```
293
442
 
@@ -0,0 +1,18 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import { ConfigLoader } from '../config-loader';
3
+ export interface ExpressApiKeyAuthOptions {
4
+ headerName?: string;
5
+ hashFn?: ((rawKey: string) => string) | null;
6
+ onError?: (req: Request, res: Response, error: string) => void;
7
+ onSuccess?: (req: Request, res: Response, name: string) => void;
8
+ }
9
+ declare global {
10
+ namespace Express {
11
+ interface Request {
12
+ apiKeyName?: string;
13
+ }
14
+ }
15
+ }
16
+ export type ExpressApiKeyMiddleware = (req: Request, res: Response, next: NextFunction) => void;
17
+ export declare function createExpressApiKeyAuth(configLoader: ConfigLoader, options?: ExpressApiKeyAuthOptions): ExpressApiKeyMiddleware;
18
+ //# sourceMappingURL=express-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-auth.d.ts","sourceRoot":"","sources":["../../src/adapters/express-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IAKvC,UAAU,CAAC,EAAE,MAAM,CAAC;IAuBpB,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC;IAM7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAM/D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB;KACF;CACF;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,IAAI,CAAC;AAiCV,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAoCzB"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExpressApiKeyAuth = createExpressApiKeyAuth;
4
+ const api_key_verifier_1 = require("../auth/api-key-verifier");
5
+ const hash_utils_1 = require("../auth/hash-utils");
6
+ function createExpressApiKeyAuth(configLoader, options = {}) {
7
+ const headerName = options.headerName || 'x-api-key';
8
+ const hashFn = options.hashFn === undefined ? hash_utils_1.defaultHashFn : options.hashFn;
9
+ const onError = options.onError || ((_req, res, error) => {
10
+ res.status(401).json({
11
+ error: 'Unauthorized',
12
+ message: error
13
+ });
14
+ });
15
+ const onSuccess = options.onSuccess || ((req, _res, name) => {
16
+ req.apiKeyName = name;
17
+ });
18
+ return (req, res, next) => {
19
+ let rawKey = req.headers[headerName.toLowerCase()];
20
+ if (Array.isArray(rawKey)) {
21
+ rawKey = rawKey[0];
22
+ }
23
+ const hashedKey = rawKey && hashFn ? hashFn(rawKey) : rawKey;
24
+ const result = (0, api_key_verifier_1.verifyApiKey)(configLoader, hashedKey);
25
+ if (!result.valid) {
26
+ return onError(req, res, result.error || 'Invalid API key');
27
+ }
28
+ onSuccess(req, res, result.name);
29
+ next();
30
+ };
31
+ }
32
+ //# sourceMappingURL=express-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-auth.js","sourceRoot":"","sources":["../../src/adapters/express-auth.ts"],"names":[],"mappings":";;AA8FA,0DAuCC;AAnID,+DAAwD;AACxD,mDAAmD;AA2FnD,SAAgB,uBAAuB,CACrC,YAA0B,EAC1B,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,0BAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1D,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAEzD,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAuB,CAAC;QAEzE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAG7D,MAAM,MAAM,GAAG,IAAA,+BAAY,EAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC;QAC9D,CAAC;QAGD,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,IAAK,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Request, Response } from 'express';
2
+ import { ConfigLoader } from '../config-loader';
3
+ import { WebhookCoreOptions } from '../webhook/webhook-core';
4
+ export type ExpressWebhookMiddleware = (req: Request, res: Response) => Promise<void | Response>;
5
+ export declare function createExpressWebhook(configLoader: ConfigLoader, options?: WebhookCoreOptions): ExpressWebhookMiddleware;
6
+ //# sourceMappingURL=express-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-webhook.d.ts","sourceRoot":"","sources":["../../src/adapters/express-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAwB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;AAsBjG,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,wBAAwB,CAa1B"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExpressWebhook = createExpressWebhook;
4
+ const webhook_core_1 = require("../webhook/webhook-core");
5
+ function createExpressWebhook(configLoader, options = {}) {
6
+ return async (req, res) => {
7
+ const response = await (0, webhook_core_1.handleWebhookRequest)(configLoader, {
8
+ body: req.body,
9
+ headers: req.headers
10
+ }, options);
11
+ return res.status(response.status).json(response.body);
12
+ };
13
+ }
14
+ //# sourceMappingURL=express-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-webhook.js","sourceRoot":"","sources":["../../src/adapters/express-webhook.ts"],"names":[],"mappings":";;AA0BA,oDAgBC;AAxCD,0DAAmF;AAwBnF,SAAgB,oBAAoB,CAClC,YAA0B,EAC1B,UAA8B,EAAE;IAEhC,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,mCAAoB,EACzC,YAAY,EACZ;YACE,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAwD;SACtE,EACD,OAAO,CACR,CAAC;QAEF,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { ConfigLoader } from '../config-loader';
2
+ export interface FastifyRequest {
3
+ headers: Record<string, string | string[] | undefined>;
4
+ apiKeyName?: string;
5
+ }
6
+ export interface FastifyReply {
7
+ code(statusCode: number): FastifyReply;
8
+ send(payload: any): FastifyReply;
9
+ }
10
+ export interface FastifyApiKeyAuthOptions {
11
+ headerName?: string;
12
+ hashFn?: ((rawKey: string) => string) | null;
13
+ onError?: (request: FastifyRequest, reply: FastifyReply, error: string) => void;
14
+ onSuccess?: (request: FastifyRequest, reply: FastifyReply, name: string) => void;
15
+ }
16
+ export type FastifyApiKeyHook = (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
17
+ export declare function createFastifyApiKeyAuth(configLoader: ConfigLoader, options?: FastifyApiKeyAuthOptions): FastifyApiKeyHook;
18
+ //# sourceMappingURL=fastify-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify-auth.d.ts","sourceRoot":"","sources":["../../src/adapters/fastify-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,YAAY,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IAKvC,UAAU,CAAC,EAAE,MAAM,CAAC;IAuBpB,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC;IAM7C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAMhF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAiCnB,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAoCnB"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFastifyApiKeyAuth = createFastifyApiKeyAuth;
4
+ const api_key_verifier_1 = require("../auth/api-key-verifier");
5
+ const hash_utils_1 = require("../auth/hash-utils");
6
+ function createFastifyApiKeyAuth(configLoader, options = {}) {
7
+ const headerName = options.headerName || 'x-api-key';
8
+ const hashFn = options.hashFn === undefined ? hash_utils_1.defaultHashFn : options.hashFn;
9
+ const onError = options.onError || ((_request, reply, error) => {
10
+ reply.code(401).send({
11
+ error: 'Unauthorized',
12
+ message: error
13
+ });
14
+ });
15
+ const onSuccess = options.onSuccess || ((request, _reply, name) => {
16
+ request.apiKeyName = name;
17
+ });
18
+ return async (request, reply) => {
19
+ let rawKey = request.headers[headerName.toLowerCase()];
20
+ if (Array.isArray(rawKey)) {
21
+ rawKey = rawKey[0];
22
+ }
23
+ const hashedKey = rawKey && hashFn ? hashFn(rawKey) : rawKey;
24
+ const result = (0, api_key_verifier_1.verifyApiKey)(configLoader, hashedKey);
25
+ if (!result.valid) {
26
+ onError(request, reply, result.error || 'Invalid API key');
27
+ return;
28
+ }
29
+ onSuccess(request, reply, result.name);
30
+ };
31
+ }
32
+ //# sourceMappingURL=fastify-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify-auth.js","sourceRoot":"","sources":["../../src/adapters/fastify-auth.ts"],"names":[],"mappings":";;AA8FA,0DAuCC;AApID,+DAAwD;AACxD,mDAAmD;AA4FnD,SAAgB,uBAAuB,CACrC,YAA0B,EAC1B,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,0BAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAChE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;QAE5D,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAEvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAG7D,MAAM,MAAM,GAAG,IAAA,+BAAY,EAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAGD,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAK,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { ConfigLoader } from '../config-loader';
2
+ import { WebhookCoreOptions } from '../webhook/webhook-core';
3
+ export interface FastifyRequest {
4
+ body: any;
5
+ headers: Record<string, string | string[] | undefined>;
6
+ }
7
+ export interface FastifyReply {
8
+ code(statusCode: number): FastifyReply;
9
+ send(payload: any): FastifyReply;
10
+ }
11
+ export type FastifyWebhookHandler = (request: FastifyRequest, reply: FastifyReply) => Promise<void | FastifyReply>;
12
+ export declare function createFastifyWebhook(configLoader: ConfigLoader, options?: WebhookCoreOptions): FastifyWebhookHandler;
13
+ //# sourceMappingURL=fastify-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify-webhook.d.ts","sourceRoot":"","sources":["../../src/adapters/fastify-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAwB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGnF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,YAAY,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,KAChB,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;AAsBlC,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,qBAAqB,CAavB"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFastifyWebhook = createFastifyWebhook;
4
+ const webhook_core_1 = require("../webhook/webhook-core");
5
+ function createFastifyWebhook(configLoader, options = {}) {
6
+ return async (request, reply) => {
7
+ const response = await (0, webhook_core_1.handleWebhookRequest)(configLoader, {
8
+ body: request.body,
9
+ headers: request.headers
10
+ }, options);
11
+ return reply.code(response.status).send(response.body);
12
+ };
13
+ }
14
+ //# sourceMappingURL=fastify-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify-webhook.js","sourceRoot":"","sources":["../../src/adapters/fastify-webhook.ts"],"names":[],"mappings":";;AAuCA,oDAgBC;AAtDD,0DAAmF;AAsCnF,SAAgB,oBAAoB,CAClC,YAA0B,EAC1B,UAA8B,EAAE;IAEhC,OAAO,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,MAAM,IAAA,mCAAoB,EACzC,YAAY,EACZ;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,EACD,OAAO,CACR,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ConfigLoader } from '../config-loader';
2
+ export interface ApiKeyVerificationResult {
3
+ valid: boolean;
4
+ name?: string;
5
+ error?: string;
6
+ }
7
+ export declare function verifyApiKey(configLoader: ConfigLoader, hashedKey: string | undefined): ApiKeyVerificationResult;
8
+ //# sourceMappingURL=api-key-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-verifier.d.ts","sourceRoot":"","sources":["../../src/auth/api-key-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwBD,wBAAgB,YAAY,CAC1B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,wBAAwB,CAgC1B"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyApiKey = verifyApiKey;
4
+ function verifyApiKey(configLoader, hashedKey) {
5
+ if (!hashedKey) {
6
+ return {
7
+ valid: false,
8
+ error: 'No API key provided'
9
+ };
10
+ }
11
+ const apiKeys = configLoader.get('api-keys');
12
+ if (!apiKeys || typeof apiKeys !== 'object') {
13
+ return {
14
+ valid: false,
15
+ error: 'API keys configuration not loaded'
16
+ };
17
+ }
18
+ const name = apiKeys[hashedKey];
19
+ if (!name) {
20
+ return {
21
+ valid: false,
22
+ error: 'Invalid API key'
23
+ };
24
+ }
25
+ return {
26
+ valid: true,
27
+ name
28
+ };
29
+ }
30
+ //# sourceMappingURL=api-key-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-verifier.js","sourceRoot":"","sources":["../../src/auth/api-key-verifier.ts"],"names":[],"mappings":";;AA8BA,oCAmCC;AAnCD,SAAgB,YAAY,CAC1B,YAA0B,EAC1B,SAA6B;IAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qBAAqB;SAC7B,CAAC;IACJ,CAAC;IAGD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAyB,UAAU,CAAC,CAAC;IAErE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,mCAAmC;SAC3C,CAAC;IACJ,CAAC;IAGD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,iBAAiB;SACzB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function defaultHashFn(rawKey: string): string;
2
+ //# sourceMappingURL=hash-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-utils.d.ts","sourceRoot":"","sources":["../../src/auth/hash-utils.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultHashFn = defaultHashFn;
4
+ const keccak256_1 = require("@ethersproject/keccak256");
5
+ const strings_1 = require("@ethersproject/strings");
6
+ function defaultHashFn(rawKey) {
7
+ return (0, keccak256_1.keccak256)((0, strings_1.toUtf8Bytes)(rawKey)).slice(2);
8
+ }
9
+ //# sourceMappingURL=hash-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-utils.js","sourceRoot":"","sources":["../../src/auth/hash-utils.ts"],"names":[],"mappings":";;AAgBA,sCAEC;AAlBD,wDAAqD;AACrD,oDAAqD;AAerD,SAAgB,aAAa,CAAC,MAAc;IAC1C,OAAO,IAAA,qBAAS,EAAC,IAAA,qBAAW,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import EventEmitter from 'eventemitter3';
2
2
  import { ConfigLoaderOptions, WebhookHandlerOptions, ExpressMiddleware } from './types';
3
+ import { WebhookCoreOptions } from './webhook/webhook-core';
3
4
  export declare class ConfigLoader extends EventEmitter {
4
5
  readonly options: ConfigLoaderOptions;
5
6
  private readonly logger;
@@ -19,6 +20,7 @@ export declare class ConfigLoader extends EventEmitter {
19
20
  getCurrentEnvironment(): string;
20
21
  getConfigNames(): string[];
21
22
  createWebhookHandler(options?: WebhookHandlerOptions): ExpressMiddleware;
23
+ registerFastifyWebhook(app: any, path?: string, options?: WebhookCoreOptions): void;
22
24
  reload(): Promise<void>;
23
25
  private detectChanges;
24
26
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAUzC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAMxF,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAsB;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAK9B,OAAO,EAAE,mBAAmB;IAoDlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE9B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAS3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAQ7B,qBAAqB,IAAI,MAAM;IAQ/B,cAAc,IAAI,MAAM,EAAE;IAS1B,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,iBAAiB;IAQtE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAU7B,OAAO,CAAC,aAAa;IA0BrB,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAUzC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAgB,OAAO,EAAE,mBAAmB,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAsB;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAK9B,OAAO,EAAE,mBAAmB;IAoDlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE9B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAS3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAQ7B,qBAAqB,IAAI,MAAM;IAQ/B,cAAc,IAAI,MAAM,EAAE;IAU1B,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,iBAAiB;IAyB5E,sBAAsB,CACpB,GAAG,EAAE,GAAG,EACR,IAAI,GAAE,MAA0B,EAChC,OAAO,GAAE,kBAAuB,GAC/B,IAAI;IASD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAU7B,OAAO,CAAC,aAAa;IA0BrB,OAAO,IAAI,IAAI;CAOhB"}
@@ -14,6 +14,7 @@ const env_mapper_1 = require("./utils/env-mapper");
14
14
  const deep_get_1 = require("./utils/deep-get");
15
15
  const default_schemas_1 = require("./validator/default-schemas");
16
16
  const logger_1 = require("./utils/logger");
17
+ const fastify_webhook_1 = require("./adapters/fastify-webhook");
17
18
  class ConfigLoader extends eventemitter3_1.default {
18
19
  constructor(options) {
19
20
  super();
@@ -143,6 +144,11 @@ class ConfigLoader extends eventemitter3_1.default {
143
144
  const handler = new webhook_handler_1.WebhookHandler(this, options);
144
145
  return handler.createMiddleware();
145
146
  }
147
+ registerFastifyWebhook(app, path = '/webhook/config', options = {}) {
148
+ const handler = (0, fastify_webhook_1.createFastifyWebhook)(this, options);
149
+ app.post(path, handler);
150
+ this.logger.info(`Fastify webhook registered at POST ${path}`);
151
+ }
146
152
  async reload() {
147
153
  await this.refresh();
148
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,17 @@ export { ConfigLoader } from "./config-loader";
2
2
  export * from "./types";
3
3
  export { EnvMapper } from "./utils/env-mapper";
4
4
  export { deepGet } from "./utils/deep-get";
5
+ export { createExpressWebhook } from "./adapters/express-webhook";
6
+ export type { ExpressWebhookMiddleware } from "./adapters/express-webhook";
7
+ export { createFastifyWebhook } from "./adapters/fastify-webhook";
8
+ export type { FastifyWebhookHandler, FastifyRequest, FastifyReply } from "./adapters/fastify-webhook";
9
+ export { createExpressApiKeyAuth } from "./adapters/express-auth";
10
+ export type { ExpressApiKeyAuthOptions, ExpressApiKeyMiddleware } from "./adapters/express-auth";
11
+ export { createFastifyApiKeyAuth } from "./adapters/fastify-auth";
12
+ export type { FastifyApiKeyAuthOptions, FastifyApiKeyHook } from "./adapters/fastify-auth";
13
+ export { verifyApiKey } from "./auth/api-key-verifier";
14
+ export type { ApiKeyVerificationResult } from "./auth/api-key-verifier";
15
+ export { defaultHashFn } from "./auth/hash-utils";
16
+ export { handleWebhookRequest } from "./webhook/webhook-core";
17
+ export type { WebhookRequest, WebhookResponse, WebhookCoreOptions } from "./webhook/webhook-core";
5
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG3F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.deepGet = exports.EnvMapper = exports.ConfigLoader = void 0;
17
+ exports.handleWebhookRequest = exports.defaultHashFn = exports.verifyApiKey = exports.createFastifyApiKeyAuth = exports.createExpressApiKeyAuth = exports.createFastifyWebhook = exports.createExpressWebhook = exports.deepGet = exports.EnvMapper = exports.ConfigLoader = void 0;
18
18
  var config_loader_1 = require("./config-loader");
19
19
  Object.defineProperty(exports, "ConfigLoader", { enumerable: true, get: function () { return config_loader_1.ConfigLoader; } });
20
20
  __exportStar(require("./types"), exports);
@@ -22,4 +22,18 @@ var env_mapper_1 = require("./utils/env-mapper");
22
22
  Object.defineProperty(exports, "EnvMapper", { enumerable: true, get: function () { return env_mapper_1.EnvMapper; } });
23
23
  var deep_get_1 = require("./utils/deep-get");
24
24
  Object.defineProperty(exports, "deepGet", { enumerable: true, get: function () { return deep_get_1.deepGet; } });
25
+ var express_webhook_1 = require("./adapters/express-webhook");
26
+ Object.defineProperty(exports, "createExpressWebhook", { enumerable: true, get: function () { return express_webhook_1.createExpressWebhook; } });
27
+ var fastify_webhook_1 = require("./adapters/fastify-webhook");
28
+ Object.defineProperty(exports, "createFastifyWebhook", { enumerable: true, get: function () { return fastify_webhook_1.createFastifyWebhook; } });
29
+ var express_auth_1 = require("./adapters/express-auth");
30
+ Object.defineProperty(exports, "createExpressApiKeyAuth", { enumerable: true, get: function () { return express_auth_1.createExpressApiKeyAuth; } });
31
+ var fastify_auth_1 = require("./adapters/fastify-auth");
32
+ Object.defineProperty(exports, "createFastifyApiKeyAuth", { enumerable: true, get: function () { return fastify_auth_1.createFastifyApiKeyAuth; } });
33
+ var api_key_verifier_1 = require("./auth/api-key-verifier");
34
+ Object.defineProperty(exports, "verifyApiKey", { enumerable: true, get: function () { return api_key_verifier_1.verifyApiKey; } });
35
+ var hash_utils_1 = require("./auth/hash-utils");
36
+ Object.defineProperty(exports, "defaultHashFn", { enumerable: true, get: function () { return hash_utils_1.defaultHashFn; } });
37
+ var webhook_core_1 = require("./webhook/webhook-core");
38
+ Object.defineProperty(exports, "handleWebhookRequest", { enumerable: true, get: function () { return webhook_core_1.handleWebhookRequest; } });
25
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,0CAAwB;AACxB,iDAA+C;AAAtC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,mGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,0CAAwB;AACxB,iDAA+C;AAAtC,uGAAA,SAAS,OAAA;AAClB,6CAA2C;AAAlC,mGAAA,OAAO,OAAA;AAGhB,8DAAkE;AAAzD,uHAAA,oBAAoB,OAAA;AAE7B,8DAAkE;AAAzD,uHAAA,oBAAoB,OAAA;AAI7B,wDAAkE;AAAzD,uHAAA,uBAAuB,OAAA;AAEhC,wDAAkE;AAAzD,uHAAA,uBAAuB,OAAA;AAIhC,4DAAuD;AAA9C,gHAAA,YAAY,OAAA;AAErB,gDAAkD;AAAzC,2GAAA,aAAa,OAAA;AACtB,uDAA8D;AAArD,oHAAA,oBAAoB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;AAE1F,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;AAE1F,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
@@ -0,0 +1,20 @@
1
+ import { ConfigLoader } from '../config-loader';
2
+ export interface WebhookRequest {
3
+ body: any;
4
+ headers: Record<string, string | string[] | undefined>;
5
+ }
6
+ export interface WebhookResponse {
7
+ status: number;
8
+ body: {
9
+ success?: boolean;
10
+ error?: string;
11
+ message: string;
12
+ configs?: string[];
13
+ };
14
+ }
15
+ export interface WebhookCoreOptions {
16
+ onUpdate?: (configs: Record<string, any>) => void;
17
+ onError?: (error: Error) => void;
18
+ }
19
+ export declare function handleWebhookRequest(configLoader: ConfigLoader, request: WebhookRequest, options?: WebhookCoreOptions): Promise<WebhookResponse>;
20
+ //# sourceMappingURL=webhook-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-core.d.ts","sourceRoot":"","sources":["../../src/webhook/webhook-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAMD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAuF1B"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleWebhookRequest = handleWebhookRequest;
4
+ const signature_validator_1 = require("./signature-validator");
5
+ async function handleWebhookRequest(configLoader, request, options = {}) {
6
+ const onUpdate = options.onUpdate || (() => { });
7
+ const onError = options.onError || console.error;
8
+ try {
9
+ if (!configLoader.options.webhookSecret) {
10
+ return {
11
+ status: 500,
12
+ body: {
13
+ error: 'Configuration error',
14
+ message: 'webhookSecret is required for webhook handler'
15
+ }
16
+ };
17
+ }
18
+ const signatureValidator = new signature_validator_1.SignatureValidator(configLoader.options.webhookSecret);
19
+ const signature = Array.isArray(request.headers['x-hub-signature-256'])
20
+ ? request.headers['x-hub-signature-256'][0]
21
+ : request.headers['x-hub-signature-256'];
22
+ const payload = JSON.stringify(request.body);
23
+ if (!signatureValidator.validate(payload, signature)) {
24
+ return {
25
+ status: 401,
26
+ body: {
27
+ error: 'Invalid signature',
28
+ message: 'Webhook signature validation failed'
29
+ }
30
+ };
31
+ }
32
+ const event = Array.isArray(request.headers['x-github-event'])
33
+ ? request.headers['x-github-event'][0]
34
+ : request.headers['x-github-event'];
35
+ if (event !== 'push') {
36
+ return {
37
+ status: 200,
38
+ body: {
39
+ message: `Ignored: not a push event (received: ${event})`
40
+ }
41
+ };
42
+ }
43
+ const ref = request.body.ref;
44
+ const expectedRef = `refs/heads/${configLoader.options.branch}`;
45
+ if (ref !== expectedRef) {
46
+ return {
47
+ status: 200,
48
+ body: {
49
+ message: `Ignored: not target branch (expected: ${expectedRef}, got: ${ref})`
50
+ }
51
+ };
52
+ }
53
+ await configLoader.refresh();
54
+ const allConfigs = configLoader.getAll();
55
+ onUpdate(allConfigs);
56
+ return {
57
+ status: 200,
58
+ body: {
59
+ success: true,
60
+ message: 'Configurations updated successfully',
61
+ configs: Object.keys(allConfigs)
62
+ }
63
+ };
64
+ }
65
+ catch (error) {
66
+ const err = error;
67
+ onError(err);
68
+ return {
69
+ status: 500,
70
+ body: {
71
+ error: 'Internal server error',
72
+ message: err.message
73
+ }
74
+ };
75
+ }
76
+ }
77
+ //# sourceMappingURL=webhook-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-core.js","sourceRoot":"","sources":["../../src/webhook/webhook-core.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1matrix/config-loader",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Hot-reloadable public configuration management for Apps with GitHub webhook integration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -26,13 +26,13 @@
26
26
  "dist"
27
27
  ],
28
28
  "dependencies": {
29
+ "@ethersproject/keccak256": "^5.7.0",
30
+ "@ethersproject/strings": "^5.7.0",
29
31
  "@octokit/rest": "^18.12.0",
30
32
  "ajv": "^8.12.0",
31
33
  "eventemitter3": "^5.0.1"
32
34
  },
33
35
  "devDependencies": {
34
- "@ethersproject/keccak256": "^5.7.0",
35
- "@ethersproject/strings": "^5.7.0",
36
36
  "@types/express": "^4.17.21",
37
37
  "@types/jest": "^29.5.11",
38
38
  "@types/node": "^20.10.6",