@positronic/cloudflare 0.0.52 → 0.0.54
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/dist/src/api/brains.js +1003 -0
- package/dist/src/api/bundle.js +204 -0
- package/dist/src/api/index.js +149 -0
- package/dist/src/api/pages.js +681 -0
- package/dist/src/api/resources.js +778 -0
- package/dist/src/api/secrets.js +707 -0
- package/dist/src/api/types.js +1 -0
- package/dist/src/api/webhooks/coordination.js +267 -0
- package/dist/src/api/webhooks/index.js +277 -0
- package/dist/src/api/webhooks/system.js +248 -0
- package/dist/src/brain-runner-do.js +5 -5
- package/dist/src/dev-server.js +201 -9
- package/dist/src/index.js +2 -4
- package/dist/types/api/brains.d.ts +7 -0
- package/dist/types/api/brains.d.ts.map +1 -0
- package/dist/types/api/bundle.d.ts +7 -0
- package/dist/types/api/bundle.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +8 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/api/pages.d.ts +7 -0
- package/dist/types/api/pages.d.ts.map +1 -0
- package/dist/types/api/resources.d.ts +7 -0
- package/dist/types/api/resources.d.ts.map +1 -0
- package/dist/types/api/secrets.d.ts +7 -0
- package/dist/types/api/secrets.d.ts.map +1 -0
- package/dist/types/{api.d.ts → api/types.d.ts} +15 -9
- package/dist/types/api/types.d.ts.map +1 -0
- package/dist/types/api/webhooks/coordination.d.ts +32 -0
- package/dist/types/api/webhooks/coordination.d.ts.map +1 -0
- package/dist/types/api/webhooks/index.d.ts +7 -0
- package/dist/types/api/webhooks/index.d.ts.map +1 -0
- package/dist/types/api/webhooks/system.d.ts +7 -0
- package/dist/types/api/webhooks/system.d.ts.map +1 -0
- package/dist/types/dev-server.d.ts +5 -0
- package/dist/types/dev-server.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/src/api.js +0 -2839
- package/dist/types/api.d.ts.map +0 -1
|
@@ -0,0 +1,707 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
+
try {
|
|
3
|
+
var info = gen[key](arg);
|
|
4
|
+
var value = info.value;
|
|
5
|
+
} catch (error) {
|
|
6
|
+
reject(error);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (info.done) {
|
|
10
|
+
resolve(value);
|
|
11
|
+
} else {
|
|
12
|
+
Promise.resolve(value).then(_next, _throw);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _async_to_generator(fn) {
|
|
16
|
+
return function() {
|
|
17
|
+
var self = this, args = arguments;
|
|
18
|
+
return new Promise(function(resolve, reject) {
|
|
19
|
+
var gen = fn.apply(self, args);
|
|
20
|
+
function _next(value) {
|
|
21
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
+
}
|
|
23
|
+
function _throw(err) {
|
|
24
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
+
}
|
|
26
|
+
_next(undefined);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function _define_property(obj, key, value) {
|
|
31
|
+
if (key in obj) {
|
|
32
|
+
Object.defineProperty(obj, key, {
|
|
33
|
+
value: value,
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
obj[key] = value;
|
|
40
|
+
}
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
function _instanceof(left, right) {
|
|
44
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
45
|
+
return !!right[Symbol.hasInstance](left);
|
|
46
|
+
} else {
|
|
47
|
+
return left instanceof right;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function _object_spread(target) {
|
|
51
|
+
for(var i = 1; i < arguments.length; i++){
|
|
52
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
53
|
+
var ownKeys = Object.keys(source);
|
|
54
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
55
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
56
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
ownKeys.forEach(function(key) {
|
|
60
|
+
_define_property(target, key, source[key]);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return target;
|
|
64
|
+
}
|
|
65
|
+
function ownKeys(object, enumerableOnly) {
|
|
66
|
+
var keys = Object.keys(object);
|
|
67
|
+
if (Object.getOwnPropertySymbols) {
|
|
68
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
69
|
+
if (enumerableOnly) {
|
|
70
|
+
symbols = symbols.filter(function(sym) {
|
|
71
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
keys.push.apply(keys, symbols);
|
|
75
|
+
}
|
|
76
|
+
return keys;
|
|
77
|
+
}
|
|
78
|
+
function _object_spread_props(target, source) {
|
|
79
|
+
source = source != null ? source : {};
|
|
80
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
81
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
82
|
+
} else {
|
|
83
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
84
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return target;
|
|
88
|
+
}
|
|
89
|
+
function _ts_generator(thisArg, body) {
|
|
90
|
+
var f, y, t, _ = {
|
|
91
|
+
label: 0,
|
|
92
|
+
sent: function() {
|
|
93
|
+
if (t[0] & 1) throw t[1];
|
|
94
|
+
return t[1];
|
|
95
|
+
},
|
|
96
|
+
trys: [],
|
|
97
|
+
ops: []
|
|
98
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
99
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
100
|
+
return this;
|
|
101
|
+
}), g;
|
|
102
|
+
function verb(n) {
|
|
103
|
+
return function(v) {
|
|
104
|
+
return step([
|
|
105
|
+
n,
|
|
106
|
+
v
|
|
107
|
+
]);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function step(op) {
|
|
111
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
112
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
113
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
114
|
+
if (y = 0, t) op = [
|
|
115
|
+
op[0] & 2,
|
|
116
|
+
t.value
|
|
117
|
+
];
|
|
118
|
+
switch(op[0]){
|
|
119
|
+
case 0:
|
|
120
|
+
case 1:
|
|
121
|
+
t = op;
|
|
122
|
+
break;
|
|
123
|
+
case 4:
|
|
124
|
+
_.label++;
|
|
125
|
+
return {
|
|
126
|
+
value: op[1],
|
|
127
|
+
done: false
|
|
128
|
+
};
|
|
129
|
+
case 5:
|
|
130
|
+
_.label++;
|
|
131
|
+
y = op[1];
|
|
132
|
+
op = [
|
|
133
|
+
0
|
|
134
|
+
];
|
|
135
|
+
continue;
|
|
136
|
+
case 7:
|
|
137
|
+
op = _.ops.pop();
|
|
138
|
+
_.trys.pop();
|
|
139
|
+
continue;
|
|
140
|
+
default:
|
|
141
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
142
|
+
_ = 0;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
146
|
+
_.label = op[1];
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
150
|
+
_.label = t[1];
|
|
151
|
+
t = op;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
if (t && _.label < t[2]) {
|
|
155
|
+
_.label = t[2];
|
|
156
|
+
_.ops.push(op);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
if (t[2]) _.ops.pop();
|
|
160
|
+
_.trys.pop();
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
op = body.call(thisArg, _);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
op = [
|
|
166
|
+
6,
|
|
167
|
+
e
|
|
168
|
+
];
|
|
169
|
+
y = 0;
|
|
170
|
+
} finally{
|
|
171
|
+
f = t = 0;
|
|
172
|
+
}
|
|
173
|
+
if (op[0] & 5) throw op[1];
|
|
174
|
+
return {
|
|
175
|
+
value: op[0] ? op[1] : void 0,
|
|
176
|
+
done: true
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
import { Hono } from 'hono';
|
|
181
|
+
/**
|
|
182
|
+
* Helper to check if Cloudflare API credentials are configured
|
|
183
|
+
*/ function getSecretsApiConfig(env) {
|
|
184
|
+
var CLOUDFLARE_API_TOKEN = env.CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID = env.CLOUDFLARE_ACCOUNT_ID, CF_SCRIPT_NAME = env.CF_SCRIPT_NAME;
|
|
185
|
+
if (!CLOUDFLARE_API_TOKEN || !CLOUDFLARE_ACCOUNT_ID || !CF_SCRIPT_NAME) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
accountId: CLOUDFLARE_ACCOUNT_ID,
|
|
190
|
+
scriptName: CF_SCRIPT_NAME,
|
|
191
|
+
apiToken: CLOUDFLARE_API_TOKEN
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Helper to make Cloudflare API requests for secrets
|
|
196
|
+
*/ function cloudflareSecretsApi(_0, _1) {
|
|
197
|
+
return _async_to_generator(function(config, path) {
|
|
198
|
+
var options, baseUrl, url;
|
|
199
|
+
var _arguments = arguments;
|
|
200
|
+
return _ts_generator(this, function(_state) {
|
|
201
|
+
options = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
|
|
202
|
+
baseUrl = "https://api.cloudflare.com/client/v4/accounts/".concat(config.accountId, "/workers/scripts/").concat(config.scriptName, "/secrets");
|
|
203
|
+
url = path ? "".concat(baseUrl, "/").concat(path) : baseUrl;
|
|
204
|
+
return [
|
|
205
|
+
2,
|
|
206
|
+
fetch(url, _object_spread_props(_object_spread({}, options), {
|
|
207
|
+
headers: _object_spread({
|
|
208
|
+
'Authorization': "Bearer ".concat(config.apiToken),
|
|
209
|
+
'Content-Type': 'application/json'
|
|
210
|
+
}, options.headers)
|
|
211
|
+
}))
|
|
212
|
+
];
|
|
213
|
+
});
|
|
214
|
+
}).apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
var secrets = new Hono();
|
|
217
|
+
// List all secrets (names only, not values)
|
|
218
|
+
secrets.get('/', function(context) {
|
|
219
|
+
return _async_to_generator(function() {
|
|
220
|
+
var config, response, data, _data_errors_, _data_errors, errorMessage, now, secretList, error;
|
|
221
|
+
return _ts_generator(this, function(_state) {
|
|
222
|
+
switch(_state.label){
|
|
223
|
+
case 0:
|
|
224
|
+
config = getSecretsApiConfig(context.env);
|
|
225
|
+
if (!config) {
|
|
226
|
+
return [
|
|
227
|
+
2,
|
|
228
|
+
context.json({
|
|
229
|
+
error: 'Secrets management not configured. Please set CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CF_SCRIPT_NAME.'
|
|
230
|
+
}, 400)
|
|
231
|
+
];
|
|
232
|
+
}
|
|
233
|
+
_state.label = 1;
|
|
234
|
+
case 1:
|
|
235
|
+
_state.trys.push([
|
|
236
|
+
1,
|
|
237
|
+
4,
|
|
238
|
+
,
|
|
239
|
+
5
|
|
240
|
+
]);
|
|
241
|
+
return [
|
|
242
|
+
4,
|
|
243
|
+
cloudflareSecretsApi(config, '')
|
|
244
|
+
];
|
|
245
|
+
case 2:
|
|
246
|
+
response = _state.sent();
|
|
247
|
+
return [
|
|
248
|
+
4,
|
|
249
|
+
response.json()
|
|
250
|
+
];
|
|
251
|
+
case 3:
|
|
252
|
+
data = _state.sent();
|
|
253
|
+
if (!data.success) {
|
|
254
|
+
;
|
|
255
|
+
errorMessage = ((_data_errors = data.errors) === null || _data_errors === void 0 ? void 0 : (_data_errors_ = _data_errors[0]) === null || _data_errors_ === void 0 ? void 0 : _data_errors_.message) || 'Failed to list secrets';
|
|
256
|
+
return [
|
|
257
|
+
2,
|
|
258
|
+
context.json({
|
|
259
|
+
error: errorMessage
|
|
260
|
+
}, 500)
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
// Transform to match spec format - Cloudflare API doesn't return timestamps
|
|
264
|
+
// so we use placeholder values
|
|
265
|
+
now = new Date().toISOString();
|
|
266
|
+
secretList = data.result.map(function(secret) {
|
|
267
|
+
return {
|
|
268
|
+
name: secret.name,
|
|
269
|
+
createdAt: now,
|
|
270
|
+
updatedAt: now
|
|
271
|
+
};
|
|
272
|
+
});
|
|
273
|
+
return [
|
|
274
|
+
2,
|
|
275
|
+
context.json({
|
|
276
|
+
secrets: secretList,
|
|
277
|
+
count: secretList.length
|
|
278
|
+
})
|
|
279
|
+
];
|
|
280
|
+
case 4:
|
|
281
|
+
error = _state.sent();
|
|
282
|
+
console.error('Error listing secrets:', error);
|
|
283
|
+
return [
|
|
284
|
+
2,
|
|
285
|
+
context.json({
|
|
286
|
+
error: "Failed to list secrets: ".concat(_instanceof(error, Error) ? error.message : 'Unknown error')
|
|
287
|
+
}, 500)
|
|
288
|
+
];
|
|
289
|
+
case 5:
|
|
290
|
+
return [
|
|
291
|
+
2
|
|
292
|
+
];
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
})();
|
|
296
|
+
});
|
|
297
|
+
// Create or update a secret
|
|
298
|
+
secrets.post('/', function(context) {
|
|
299
|
+
return _async_to_generator(function() {
|
|
300
|
+
var config, body, name, value, response, data, _data_errors_, _data_errors, errorMessage, now, error;
|
|
301
|
+
return _ts_generator(this, function(_state) {
|
|
302
|
+
switch(_state.label){
|
|
303
|
+
case 0:
|
|
304
|
+
config = getSecretsApiConfig(context.env);
|
|
305
|
+
if (!config) {
|
|
306
|
+
return [
|
|
307
|
+
2,
|
|
308
|
+
context.json({
|
|
309
|
+
error: 'Secrets management not configured. Please set CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CF_SCRIPT_NAME.'
|
|
310
|
+
}, 400)
|
|
311
|
+
];
|
|
312
|
+
}
|
|
313
|
+
_state.label = 1;
|
|
314
|
+
case 1:
|
|
315
|
+
_state.trys.push([
|
|
316
|
+
1,
|
|
317
|
+
5,
|
|
318
|
+
,
|
|
319
|
+
6
|
|
320
|
+
]);
|
|
321
|
+
return [
|
|
322
|
+
4,
|
|
323
|
+
context.req.json()
|
|
324
|
+
];
|
|
325
|
+
case 2:
|
|
326
|
+
body = _state.sent();
|
|
327
|
+
name = body.name, value = body.value;
|
|
328
|
+
if (!name) {
|
|
329
|
+
return [
|
|
330
|
+
2,
|
|
331
|
+
context.json({
|
|
332
|
+
error: 'Missing required field "name"'
|
|
333
|
+
}, 400)
|
|
334
|
+
];
|
|
335
|
+
}
|
|
336
|
+
if (value === undefined) {
|
|
337
|
+
return [
|
|
338
|
+
2,
|
|
339
|
+
context.json({
|
|
340
|
+
error: 'Missing required field "value"'
|
|
341
|
+
}, 400)
|
|
342
|
+
];
|
|
343
|
+
}
|
|
344
|
+
return [
|
|
345
|
+
4,
|
|
346
|
+
cloudflareSecretsApi(config, '', {
|
|
347
|
+
method: 'PUT',
|
|
348
|
+
body: JSON.stringify({
|
|
349
|
+
name: name,
|
|
350
|
+
text: value,
|
|
351
|
+
type: 'secret_text'
|
|
352
|
+
})
|
|
353
|
+
})
|
|
354
|
+
];
|
|
355
|
+
case 3:
|
|
356
|
+
response = _state.sent();
|
|
357
|
+
return [
|
|
358
|
+
4,
|
|
359
|
+
response.json()
|
|
360
|
+
];
|
|
361
|
+
case 4:
|
|
362
|
+
data = _state.sent();
|
|
363
|
+
if (!data.success) {
|
|
364
|
+
;
|
|
365
|
+
errorMessage = ((_data_errors = data.errors) === null || _data_errors === void 0 ? void 0 : (_data_errors_ = _data_errors[0]) === null || _data_errors_ === void 0 ? void 0 : _data_errors_.message) || 'Failed to create secret';
|
|
366
|
+
return [
|
|
367
|
+
2,
|
|
368
|
+
context.json({
|
|
369
|
+
error: errorMessage
|
|
370
|
+
}, 500)
|
|
371
|
+
];
|
|
372
|
+
}
|
|
373
|
+
now = new Date().toISOString();
|
|
374
|
+
return [
|
|
375
|
+
2,
|
|
376
|
+
context.json({
|
|
377
|
+
name: name,
|
|
378
|
+
createdAt: now,
|
|
379
|
+
updatedAt: now
|
|
380
|
+
}, 201)
|
|
381
|
+
];
|
|
382
|
+
case 5:
|
|
383
|
+
error = _state.sent();
|
|
384
|
+
console.error('Error creating secret:', error);
|
|
385
|
+
return [
|
|
386
|
+
2,
|
|
387
|
+
context.json({
|
|
388
|
+
error: "Failed to create secret: ".concat(_instanceof(error, Error) ? error.message : 'Unknown error')
|
|
389
|
+
}, 500)
|
|
390
|
+
];
|
|
391
|
+
case 6:
|
|
392
|
+
return [
|
|
393
|
+
2
|
|
394
|
+
];
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
})();
|
|
398
|
+
});
|
|
399
|
+
// Delete a secret
|
|
400
|
+
secrets.delete('/:name', function(context) {
|
|
401
|
+
return _async_to_generator(function() {
|
|
402
|
+
var config, name, response, data, _data_errors_, _data_errors, errorMessage, error;
|
|
403
|
+
return _ts_generator(this, function(_state) {
|
|
404
|
+
switch(_state.label){
|
|
405
|
+
case 0:
|
|
406
|
+
config = getSecretsApiConfig(context.env);
|
|
407
|
+
if (!config) {
|
|
408
|
+
return [
|
|
409
|
+
2,
|
|
410
|
+
context.json({
|
|
411
|
+
error: 'Secrets management not configured. Please set CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CF_SCRIPT_NAME.'
|
|
412
|
+
}, 400)
|
|
413
|
+
];
|
|
414
|
+
}
|
|
415
|
+
name = decodeURIComponent(context.req.param('name'));
|
|
416
|
+
_state.label = 1;
|
|
417
|
+
case 1:
|
|
418
|
+
_state.trys.push([
|
|
419
|
+
1,
|
|
420
|
+
4,
|
|
421
|
+
,
|
|
422
|
+
5
|
|
423
|
+
]);
|
|
424
|
+
return [
|
|
425
|
+
4,
|
|
426
|
+
cloudflareSecretsApi(config, encodeURIComponent(name), {
|
|
427
|
+
method: 'DELETE'
|
|
428
|
+
})
|
|
429
|
+
];
|
|
430
|
+
case 2:
|
|
431
|
+
response = _state.sent();
|
|
432
|
+
return [
|
|
433
|
+
4,
|
|
434
|
+
response.json()
|
|
435
|
+
];
|
|
436
|
+
case 3:
|
|
437
|
+
data = _state.sent();
|
|
438
|
+
if (!data.success) {
|
|
439
|
+
;
|
|
440
|
+
errorMessage = ((_data_errors = data.errors) === null || _data_errors === void 0 ? void 0 : (_data_errors_ = _data_errors[0]) === null || _data_errors_ === void 0 ? void 0 : _data_errors_.message) || 'Failed to delete secret';
|
|
441
|
+
return [
|
|
442
|
+
2,
|
|
443
|
+
context.json({
|
|
444
|
+
error: errorMessage
|
|
445
|
+
}, 500)
|
|
446
|
+
];
|
|
447
|
+
}
|
|
448
|
+
return [
|
|
449
|
+
2,
|
|
450
|
+
new Response(null, {
|
|
451
|
+
status: 204
|
|
452
|
+
})
|
|
453
|
+
];
|
|
454
|
+
case 4:
|
|
455
|
+
error = _state.sent();
|
|
456
|
+
console.error("Error deleting secret ".concat(name, ":"), error);
|
|
457
|
+
return [
|
|
458
|
+
2,
|
|
459
|
+
context.json({
|
|
460
|
+
error: "Failed to delete secret: ".concat(_instanceof(error, Error) ? error.message : 'Unknown error')
|
|
461
|
+
}, 500)
|
|
462
|
+
];
|
|
463
|
+
case 5:
|
|
464
|
+
return [
|
|
465
|
+
2
|
|
466
|
+
];
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
})();
|
|
470
|
+
});
|
|
471
|
+
// Check if a secret exists
|
|
472
|
+
secrets.get('/:name/exists', function(context) {
|
|
473
|
+
return _async_to_generator(function() {
|
|
474
|
+
var config, name, response, data, _data_errors_, _data_errors, errorMessage, exists, error;
|
|
475
|
+
return _ts_generator(this, function(_state) {
|
|
476
|
+
switch(_state.label){
|
|
477
|
+
case 0:
|
|
478
|
+
config = getSecretsApiConfig(context.env);
|
|
479
|
+
if (!config) {
|
|
480
|
+
return [
|
|
481
|
+
2,
|
|
482
|
+
context.json({
|
|
483
|
+
error: 'Secrets management not configured. Please set CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CF_SCRIPT_NAME.'
|
|
484
|
+
}, 400)
|
|
485
|
+
];
|
|
486
|
+
}
|
|
487
|
+
name = decodeURIComponent(context.req.param('name'));
|
|
488
|
+
_state.label = 1;
|
|
489
|
+
case 1:
|
|
490
|
+
_state.trys.push([
|
|
491
|
+
1,
|
|
492
|
+
4,
|
|
493
|
+
,
|
|
494
|
+
5
|
|
495
|
+
]);
|
|
496
|
+
return [
|
|
497
|
+
4,
|
|
498
|
+
cloudflareSecretsApi(config, '')
|
|
499
|
+
];
|
|
500
|
+
case 2:
|
|
501
|
+
response = _state.sent();
|
|
502
|
+
return [
|
|
503
|
+
4,
|
|
504
|
+
response.json()
|
|
505
|
+
];
|
|
506
|
+
case 3:
|
|
507
|
+
data = _state.sent();
|
|
508
|
+
if (!data.success) {
|
|
509
|
+
;
|
|
510
|
+
errorMessage = ((_data_errors = data.errors) === null || _data_errors === void 0 ? void 0 : (_data_errors_ = _data_errors[0]) === null || _data_errors_ === void 0 ? void 0 : _data_errors_.message) || 'Failed to check secret';
|
|
511
|
+
return [
|
|
512
|
+
2,
|
|
513
|
+
context.json({
|
|
514
|
+
error: errorMessage
|
|
515
|
+
}, 500)
|
|
516
|
+
];
|
|
517
|
+
}
|
|
518
|
+
exists = data.result.some(function(secret) {
|
|
519
|
+
return secret.name === name;
|
|
520
|
+
});
|
|
521
|
+
return [
|
|
522
|
+
2,
|
|
523
|
+
context.json({
|
|
524
|
+
exists: exists
|
|
525
|
+
})
|
|
526
|
+
];
|
|
527
|
+
case 4:
|
|
528
|
+
error = _state.sent();
|
|
529
|
+
console.error("Error checking secret ".concat(name, ":"), error);
|
|
530
|
+
return [
|
|
531
|
+
2,
|
|
532
|
+
context.json({
|
|
533
|
+
error: "Failed to check secret: ".concat(_instanceof(error, Error) ? error.message : 'Unknown error')
|
|
534
|
+
}, 500)
|
|
535
|
+
];
|
|
536
|
+
case 5:
|
|
537
|
+
return [
|
|
538
|
+
2
|
|
539
|
+
];
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
})();
|
|
543
|
+
});
|
|
544
|
+
// Bulk create secrets
|
|
545
|
+
secrets.post('/bulk', function(context) {
|
|
546
|
+
return _async_to_generator(function() {
|
|
547
|
+
var config, body, secretsArray, listResponse, listData, existingNames, created, updated, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, secret, response, data, err, error;
|
|
548
|
+
return _ts_generator(this, function(_state) {
|
|
549
|
+
switch(_state.label){
|
|
550
|
+
case 0:
|
|
551
|
+
config = getSecretsApiConfig(context.env);
|
|
552
|
+
if (!config) {
|
|
553
|
+
return [
|
|
554
|
+
2,
|
|
555
|
+
context.json({
|
|
556
|
+
error: 'Secrets management not configured. Please set CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CF_SCRIPT_NAME.'
|
|
557
|
+
}, 400)
|
|
558
|
+
];
|
|
559
|
+
}
|
|
560
|
+
_state.label = 1;
|
|
561
|
+
case 1:
|
|
562
|
+
_state.trys.push([
|
|
563
|
+
1,
|
|
564
|
+
14,
|
|
565
|
+
,
|
|
566
|
+
15
|
|
567
|
+
]);
|
|
568
|
+
return [
|
|
569
|
+
4,
|
|
570
|
+
context.req.json()
|
|
571
|
+
];
|
|
572
|
+
case 2:
|
|
573
|
+
body = _state.sent();
|
|
574
|
+
secretsArray = body.secrets;
|
|
575
|
+
if (!secretsArray || !Array.isArray(secretsArray)) {
|
|
576
|
+
return [
|
|
577
|
+
2,
|
|
578
|
+
context.json({
|
|
579
|
+
error: 'Missing required field "secrets" (array)'
|
|
580
|
+
}, 400)
|
|
581
|
+
];
|
|
582
|
+
}
|
|
583
|
+
return [
|
|
584
|
+
4,
|
|
585
|
+
cloudflareSecretsApi(config, '')
|
|
586
|
+
];
|
|
587
|
+
case 3:
|
|
588
|
+
listResponse = _state.sent();
|
|
589
|
+
return [
|
|
590
|
+
4,
|
|
591
|
+
listResponse.json()
|
|
592
|
+
];
|
|
593
|
+
case 4:
|
|
594
|
+
listData = _state.sent();
|
|
595
|
+
existingNames = new Set(listData.success ? listData.result.map(function(s) {
|
|
596
|
+
return s.name;
|
|
597
|
+
}) : []);
|
|
598
|
+
created = 0;
|
|
599
|
+
updated = 0;
|
|
600
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
601
|
+
_state.label = 5;
|
|
602
|
+
case 5:
|
|
603
|
+
_state.trys.push([
|
|
604
|
+
5,
|
|
605
|
+
11,
|
|
606
|
+
12,
|
|
607
|
+
13
|
|
608
|
+
]);
|
|
609
|
+
_iterator = secretsArray[Symbol.iterator]();
|
|
610
|
+
_state.label = 6;
|
|
611
|
+
case 6:
|
|
612
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
613
|
+
3,
|
|
614
|
+
10
|
|
615
|
+
];
|
|
616
|
+
secret = _step.value;
|
|
617
|
+
if (!secret.name || secret.value === undefined) {
|
|
618
|
+
return [
|
|
619
|
+
3,
|
|
620
|
+
9
|
|
621
|
+
]; // Skip invalid entries
|
|
622
|
+
}
|
|
623
|
+
return [
|
|
624
|
+
4,
|
|
625
|
+
cloudflareSecretsApi(config, '', {
|
|
626
|
+
method: 'PUT',
|
|
627
|
+
body: JSON.stringify({
|
|
628
|
+
name: secret.name,
|
|
629
|
+
text: secret.value,
|
|
630
|
+
type: 'secret_text'
|
|
631
|
+
})
|
|
632
|
+
})
|
|
633
|
+
];
|
|
634
|
+
case 7:
|
|
635
|
+
response = _state.sent();
|
|
636
|
+
return [
|
|
637
|
+
4,
|
|
638
|
+
response.json()
|
|
639
|
+
];
|
|
640
|
+
case 8:
|
|
641
|
+
data = _state.sent();
|
|
642
|
+
if (data.success) {
|
|
643
|
+
if (existingNames.has(secret.name)) {
|
|
644
|
+
updated++;
|
|
645
|
+
} else {
|
|
646
|
+
created++;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
_state.label = 9;
|
|
650
|
+
case 9:
|
|
651
|
+
_iteratorNormalCompletion = true;
|
|
652
|
+
return [
|
|
653
|
+
3,
|
|
654
|
+
6
|
|
655
|
+
];
|
|
656
|
+
case 10:
|
|
657
|
+
return [
|
|
658
|
+
3,
|
|
659
|
+
13
|
|
660
|
+
];
|
|
661
|
+
case 11:
|
|
662
|
+
err = _state.sent();
|
|
663
|
+
_didIteratorError = true;
|
|
664
|
+
_iteratorError = err;
|
|
665
|
+
return [
|
|
666
|
+
3,
|
|
667
|
+
13
|
|
668
|
+
];
|
|
669
|
+
case 12:
|
|
670
|
+
try {
|
|
671
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
672
|
+
_iterator.return();
|
|
673
|
+
}
|
|
674
|
+
} finally{
|
|
675
|
+
if (_didIteratorError) {
|
|
676
|
+
throw _iteratorError;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
return [
|
|
680
|
+
7
|
|
681
|
+
];
|
|
682
|
+
case 13:
|
|
683
|
+
return [
|
|
684
|
+
2,
|
|
685
|
+
context.json({
|
|
686
|
+
created: created,
|
|
687
|
+
updated: updated
|
|
688
|
+
}, 201)
|
|
689
|
+
];
|
|
690
|
+
case 14:
|
|
691
|
+
error = _state.sent();
|
|
692
|
+
console.error('Error bulk creating secrets:', error);
|
|
693
|
+
return [
|
|
694
|
+
2,
|
|
695
|
+
context.json({
|
|
696
|
+
error: "Failed to bulk create secrets: ".concat(_instanceof(error, Error) ? error.message : 'Unknown error')
|
|
697
|
+
}, 500)
|
|
698
|
+
];
|
|
699
|
+
case 15:
|
|
700
|
+
return [
|
|
701
|
+
2
|
|
702
|
+
];
|
|
703
|
+
}
|
|
704
|
+
});
|
|
705
|
+
})();
|
|
706
|
+
});
|
|
707
|
+
export default secrets;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|