@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.
- package/README.md +228 -79
- package/dist/adapters/express-auth.d.ts +18 -0
- package/dist/adapters/express-auth.d.ts.map +1 -0
- package/dist/adapters/express-auth.js +32 -0
- package/dist/adapters/express-auth.js.map +1 -0
- package/dist/adapters/express-webhook.d.ts +6 -0
- package/dist/adapters/express-webhook.d.ts.map +1 -0
- package/dist/adapters/express-webhook.js +14 -0
- package/dist/adapters/express-webhook.js.map +1 -0
- package/dist/adapters/fastify-auth.d.ts +18 -0
- package/dist/adapters/fastify-auth.d.ts.map +1 -0
- package/dist/adapters/fastify-auth.js +32 -0
- package/dist/adapters/fastify-auth.js.map +1 -0
- package/dist/adapters/fastify-webhook.d.ts +13 -0
- package/dist/adapters/fastify-webhook.d.ts.map +1 -0
- package/dist/adapters/fastify-webhook.js +14 -0
- package/dist/adapters/fastify-webhook.js.map +1 -0
- package/dist/auth/api-key-verifier.d.ts +8 -0
- package/dist/auth/api-key-verifier.d.ts.map +1 -0
- package/dist/auth/api-key-verifier.js +30 -0
- package/dist/auth/api-key-verifier.js.map +1 -0
- package/dist/auth/hash-utils.d.ts +2 -0
- package/dist/auth/hash-utils.d.ts.map +1 -0
- package/dist/auth/hash-utils.js +9 -0
- package/dist/auth/hash-utils.js.map +1 -0
- package/dist/config-loader.d.ts +2 -0
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +6 -0
- package/dist/config-loader.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/webhook/webhook-core.d.ts +20 -0
- package/dist/webhook/webhook-core.d.ts.map +1 -0
- package/dist/webhook/webhook-core.js +77 -0
- package/dist/webhook/webhook-core.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
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 @
|
|
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
|
|
30
|
+
import { ConfigLoader } from "@1matrix/config-loader";
|
|
29
31
|
|
|
30
32
|
const config = new ConfigLoader({
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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(
|
|
48
|
+
const apiKeyName = config.get("api-keys.a129f786...");
|
|
47
49
|
|
|
48
50
|
// Get with type inference
|
|
49
|
-
const handlers = config.get<string[]>(
|
|
51
|
+
const handlers = config.get<string[]>("intent-handlers", []);
|
|
50
52
|
|
|
51
53
|
// Check if exists
|
|
52
|
-
if (config.has(
|
|
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(
|
|
65
|
-
|
|
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(
|
|
70
|
-
|
|
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(
|
|
75
|
-
|
|
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
|
|
81
|
+
### 4. Set Up Webhook
|
|
82
|
+
|
|
83
|
+
**Express:**
|
|
80
84
|
|
|
81
85
|
```typescript
|
|
82
|
-
import express from
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
**`
|
|
174
|
+
**`api/keys-dev.json`**
|
|
175
|
+
|
|
119
176
|
```json
|
|
120
177
|
{
|
|
121
|
-
|
|
122
|
-
|
|
178
|
+
"a129f7860d47c0630e6d06c153fe36711f25a31bfb4304dc6d2a79e609da0e96": "VNIDC",
|
|
179
|
+
"b234c8971e58d1741f7e17d264gf47822g36b42cgc5415ed7e3b8a710eb1fa07": "SERVICE_2"
|
|
123
180
|
}
|
|
124
181
|
```
|
|
125
182
|
|
|
126
|
-
**`
|
|
183
|
+
**`rabc/roles-dev.json`**
|
|
184
|
+
|
|
127
185
|
```json
|
|
128
186
|
{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"0x194f5b1755562966302Ef0BbF4349c842c60FC42"
|
|
135
|
-
]
|
|
187
|
+
"explorer.viewer": [
|
|
188
|
+
"0xE61383556642AF1Bd7c5756b13f19A63Dc8601df",
|
|
189
|
+
"0x7d5538fEe2CE89dA936ec29cC48386b6E7548FaB"
|
|
190
|
+
],
|
|
191
|
+
"admin": ["0x194f5b1755562966302Ef0BbF4349c842c60FC42"]
|
|
136
192
|
}
|
|
137
193
|
```
|
|
138
194
|
|
|
139
|
-
**`
|
|
195
|
+
**`intent/handlers-dev.json`**
|
|
196
|
+
|
|
140
197
|
```json
|
|
141
198
|
[
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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(
|
|
217
|
-
|
|
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(
|
|
225
|
-
|
|
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(
|
|
233
|
-
|
|
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(
|
|
241
|
-
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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 @@
|
|
|
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"}
|
package/dist/config-loader.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/config-loader.js
CHANGED
|
@@ -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":";;;;;;AAAA,kEAAyC;AACzC,6DAAyD;AACzD,qEAAgE;AAChE,mEAA+D;AAC/D,+DAA2D;AAC3D,0DAAsD;AACtD,mDAA+C;AAC/C,+CAA2C;AAC3C,iEAA6D;AAC7D,2CAAwC;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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",
|