@authhero/cloudflare-adapter 2.37.6 → 2.38.1
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/cloudflare-adapter.cjs +23 -23
- package/dist/cloudflare-adapter.d.ts +67 -4
- package/dist/cloudflare-adapter.mjs +379 -566
- package/dist/sync-defaults-errors-BlLZh6Gt.mjs +250 -0
- package/dist/sync-defaults-errors-Htp1NWTq.js +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/wfp-provisioner/index.d.ts +3 -0
- package/dist/types/wfp-provisioner/provisioner-steps.d.ts +54 -0
- package/dist/types/wfp-provisioner/provisioner.d.ts +4 -0
- package/dist/types/wfp-provisioner/sync-defaults-errors.d.ts +11 -0
- package/dist/types/wfp-provisioner/tenant-hook.d.ts +10 -2
- package/dist/types/workflows/enqueue-hook.d.ts +49 -0
- package/dist/types/workflows/entrypoint.example.d.ts +118 -0
- package/dist/types/workflows/executor.d.ts +17 -0
- package/dist/types/workflows/index.d.ts +20 -0
- package/dist/types/workflows/provision-operation.d.ts +56 -0
- package/dist/types/workflows/reconcile.d.ts +45 -0
- package/dist/types/workflows/types.d.ts +49 -0
- package/dist/types/workflows/verify.d.ts +35 -0
- package/dist/workflows.cjs +1 -0
- package/dist/workflows.d.ts +392 -0
- package/dist/workflows.mjs +279 -0
- package/package.json +10 -5
|
@@ -1,84 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { a as e, i as t, n, t as r } from "./sync-defaults-errors-BlLZh6Gt.mjs";
|
|
2
|
+
import { actionExecutionStatusSchema as i, verificationMethodsSchema as a } from "@authhero/adapter-interfaces";
|
|
3
|
+
import { z as o } from "@hono/zod-openapi";
|
|
4
|
+
import { HTTPException as s } from "hono/http-exception";
|
|
5
|
+
import c from "wretch";
|
|
6
|
+
import { dedupe as l, retry as u } from "wretch/middlewares";
|
|
6
7
|
//#region src/types/CustomDomain.ts
|
|
7
|
-
var
|
|
8
|
-
code:
|
|
9
|
-
message:
|
|
10
|
-
}),
|
|
11
|
-
emails:
|
|
12
|
-
http_body:
|
|
13
|
-
http_url:
|
|
14
|
-
txt_name:
|
|
15
|
-
txt_value:
|
|
16
|
-
}),
|
|
17
|
-
ciphers:
|
|
18
|
-
early_hints:
|
|
19
|
-
http2:
|
|
20
|
-
min_tls_version:
|
|
21
|
-
tls_1_3:
|
|
22
|
-
}),
|
|
23
|
-
id:
|
|
24
|
-
bundle_method:
|
|
25
|
-
certificate_authority:
|
|
26
|
-
custom_certificate:
|
|
27
|
-
custom_csr_id:
|
|
28
|
-
custom_key:
|
|
29
|
-
expires_on:
|
|
30
|
-
hosts:
|
|
31
|
-
issuer:
|
|
32
|
-
method:
|
|
33
|
-
serial_number:
|
|
34
|
-
settings:
|
|
35
|
-
signature:
|
|
36
|
-
type:
|
|
37
|
-
uploaded_on:
|
|
38
|
-
validation_errors:
|
|
39
|
-
validation_records:
|
|
40
|
-
wildcard:
|
|
41
|
-
}),
|
|
42
|
-
name:
|
|
43
|
-
type:
|
|
44
|
-
value:
|
|
45
|
-
}),
|
|
46
|
-
http_body:
|
|
47
|
-
http_url:
|
|
48
|
-
}),
|
|
49
|
-
id:
|
|
50
|
-
ssl:
|
|
51
|
-
hostname:
|
|
52
|
-
custom_metadata:
|
|
53
|
-
custom_origin_server:
|
|
54
|
-
custom_origin_sni:
|
|
55
|
-
ownership_verification:
|
|
56
|
-
ownership_verification_http:
|
|
57
|
-
status:
|
|
58
|
-
verification_errors:
|
|
59
|
-
created_at:
|
|
60
|
-
}),
|
|
61
|
-
errors:
|
|
62
|
-
messages:
|
|
63
|
-
success:
|
|
64
|
-
result:
|
|
8
|
+
var d = o.object({
|
|
9
|
+
code: o.number(),
|
|
10
|
+
message: o.string()
|
|
11
|
+
}), f = o.object({ message: o.string() }), p = o.object({
|
|
12
|
+
emails: o.array(o.string()).optional(),
|
|
13
|
+
http_body: o.string().optional(),
|
|
14
|
+
http_url: o.string().optional(),
|
|
15
|
+
txt_name: o.string().optional(),
|
|
16
|
+
txt_value: o.string().optional()
|
|
17
|
+
}), m = o.object({
|
|
18
|
+
ciphers: o.array(o.string()).optional(),
|
|
19
|
+
early_hints: o.string().optional(),
|
|
20
|
+
http2: o.string().optional(),
|
|
21
|
+
min_tls_version: o.string().optional(),
|
|
22
|
+
tls_1_3: o.string().optional()
|
|
23
|
+
}), h = o.object({
|
|
24
|
+
id: o.string(),
|
|
25
|
+
bundle_method: o.string().optional(),
|
|
26
|
+
certificate_authority: o.string(),
|
|
27
|
+
custom_certificate: o.string().optional(),
|
|
28
|
+
custom_csr_id: o.string().optional(),
|
|
29
|
+
custom_key: o.string().optional(),
|
|
30
|
+
expires_on: o.string().optional(),
|
|
31
|
+
hosts: o.array(o.string()).optional(),
|
|
32
|
+
issuer: o.string().optional(),
|
|
33
|
+
method: o.string(),
|
|
34
|
+
serial_number: o.string().optional(),
|
|
35
|
+
settings: m.optional(),
|
|
36
|
+
signature: o.string().optional(),
|
|
37
|
+
type: o.string(),
|
|
38
|
+
uploaded_on: o.string().optional(),
|
|
39
|
+
validation_errors: o.array(f).optional(),
|
|
40
|
+
validation_records: o.array(p).optional(),
|
|
41
|
+
wildcard: o.boolean()
|
|
42
|
+
}), g = o.object({
|
|
43
|
+
name: o.string(),
|
|
44
|
+
type: o.string(),
|
|
45
|
+
value: o.string()
|
|
46
|
+
}), _ = o.object({
|
|
47
|
+
http_body: o.string().optional(),
|
|
48
|
+
http_url: o.string().optional()
|
|
49
|
+
}), v = o.object({
|
|
50
|
+
id: o.string(),
|
|
51
|
+
ssl: h,
|
|
52
|
+
hostname: o.string(),
|
|
53
|
+
custom_metadata: o.record(o.string(), o.string()).optional(),
|
|
54
|
+
custom_origin_server: o.string().optional(),
|
|
55
|
+
custom_origin_sni: o.string().optional(),
|
|
56
|
+
ownership_verification: g.optional(),
|
|
57
|
+
ownership_verification_http: _.optional(),
|
|
58
|
+
status: o.string(),
|
|
59
|
+
verification_errors: o.array(o.string()).optional(),
|
|
60
|
+
created_at: o.string()
|
|
61
|
+
}), y = o.object({
|
|
62
|
+
errors: o.array(d),
|
|
63
|
+
messages: o.array(d),
|
|
64
|
+
success: o.boolean(),
|
|
65
|
+
result: v
|
|
65
66
|
});
|
|
66
|
-
|
|
67
|
-
errors:
|
|
68
|
-
messages:
|
|
69
|
-
success:
|
|
70
|
-
result:
|
|
67
|
+
o.object({
|
|
68
|
+
errors: o.array(d),
|
|
69
|
+
messages: o.array(d),
|
|
70
|
+
success: o.boolean(),
|
|
71
|
+
result: o.array(v)
|
|
71
72
|
});
|
|
72
73
|
//#endregion
|
|
73
74
|
//#region src/customDomains/index.ts
|
|
74
|
-
function
|
|
75
|
-
return
|
|
75
|
+
function b(e) {
|
|
76
|
+
return c(`https://api.cloudflare.com/client/v4/zones/${e.zoneId}`).headers({
|
|
76
77
|
"X-Auth-Email": e.authEmail,
|
|
77
78
|
"X-Auth-Key": e.authKey,
|
|
78
79
|
"Content-Type": "application/json"
|
|
79
|
-
}).middlewares([
|
|
80
|
+
}).middlewares([u(), l()]);
|
|
80
81
|
}
|
|
81
|
-
function
|
|
82
|
+
function x(e) {
|
|
82
83
|
let t = {}, n = {};
|
|
83
84
|
if (!e) return {
|
|
84
85
|
sslOverrides: t,
|
|
@@ -90,27 +91,27 @@ function _(e) {
|
|
|
90
91
|
rest: n
|
|
91
92
|
};
|
|
92
93
|
}
|
|
93
|
-
function
|
|
94
|
-
let
|
|
95
|
-
if (e.ssl.validation_records) for (let
|
|
94
|
+
function S(e) {
|
|
95
|
+
let t = [];
|
|
96
|
+
if (e.ssl.validation_records) for (let n of e.ssl.validation_records) n.txt_name && n.txt_value && t.push({
|
|
96
97
|
name: "txt",
|
|
97
|
-
record:
|
|
98
|
-
domain:
|
|
98
|
+
record: n.txt_value,
|
|
99
|
+
domain: n.txt_name
|
|
99
100
|
});
|
|
100
|
-
if (e.ownership_verification &&
|
|
101
|
+
if (e.ownership_verification && t.push({
|
|
101
102
|
name: "txt",
|
|
102
103
|
record: e.ownership_verification.value,
|
|
103
104
|
domain: e.ownership_verification.name
|
|
104
|
-
}), e.ownership_verification_http?.http_body && e.ownership_verification_http?.http_url &&
|
|
105
|
+
}), e.ownership_verification_http?.http_body && e.ownership_verification_http?.http_url && t.push({
|
|
105
106
|
name: "http",
|
|
106
107
|
http_body: e.ownership_verification_http.http_body,
|
|
107
108
|
http_url: e.ownership_verification_http.http_url
|
|
108
|
-
}), e.ssl.validation_records) for (let
|
|
109
|
+
}), e.ssl.validation_records) for (let n of e.ssl.validation_records) n.http_body && n.http_url && t.push({
|
|
109
110
|
name: "http",
|
|
110
|
-
http_body:
|
|
111
|
-
http_url:
|
|
111
|
+
http_body: n.http_body,
|
|
112
|
+
http_url: n.http_url
|
|
112
113
|
});
|
|
113
|
-
let
|
|
114
|
+
let n = {
|
|
114
115
|
...e.domain_metadata || {},
|
|
115
116
|
"ssl.method": e.ssl.method,
|
|
116
117
|
"ssl.type": e.ssl.type,
|
|
@@ -122,14 +123,14 @@ function v(e) {
|
|
|
122
123
|
primary: e.primary,
|
|
123
124
|
status: e.status === "active" ? "ready" : "pending",
|
|
124
125
|
type: e.type ?? "auth0_managed_certs",
|
|
125
|
-
verification: { methods:
|
|
126
|
-
domain_metadata:
|
|
126
|
+
verification: { methods: o.array(a).parse(t) },
|
|
127
|
+
domain_metadata: n
|
|
127
128
|
};
|
|
128
129
|
}
|
|
129
|
-
function
|
|
130
|
+
function ee(e) {
|
|
130
131
|
return {
|
|
131
132
|
create: async (t, n) => {
|
|
132
|
-
let { sslOverrides: r, rest: i } =
|
|
133
|
+
let { sslOverrides: r, rest: i } = x(n.domain_metadata), { result: a, errors: o, success: s } = y.parse(await b(e).post({
|
|
133
134
|
hostname: n.domain,
|
|
134
135
|
ssl: {
|
|
135
136
|
method: "txt",
|
|
@@ -139,7 +140,7 @@ function y(e) {
|
|
|
139
140
|
custom_metadata: e.enterprise ? { tenant_id: t } : void 0
|
|
140
141
|
}, "/custom_hostnames").json());
|
|
141
142
|
if (!s) throw Error(JSON.stringify(o));
|
|
142
|
-
let c =
|
|
143
|
+
let c = S({
|
|
143
144
|
...a,
|
|
144
145
|
primary: !1,
|
|
145
146
|
type: n.type,
|
|
@@ -157,31 +158,31 @@ function y(e) {
|
|
|
157
158
|
}), c;
|
|
158
159
|
},
|
|
159
160
|
get: async (t, n) => {
|
|
160
|
-
let
|
|
161
|
-
if (!
|
|
162
|
-
let
|
|
161
|
+
let r = await e.customDomainAdapter.get(t, n);
|
|
162
|
+
if (!r) throw new s(404);
|
|
163
|
+
let i;
|
|
163
164
|
try {
|
|
164
|
-
|
|
165
|
+
i = await b(e).get(`/custom_hostnames/${encodeURIComponent(n)}`).json();
|
|
165
166
|
} catch (e) {
|
|
166
|
-
return console.warn(`[custom-domains] CF fetch failed for ${n} (tenant=${t}); returning stale DB row:`, e instanceof Error ? e.message : e),
|
|
167
|
+
return console.warn(`[custom-domains] CF fetch failed for ${n} (tenant=${t}); returning stale DB row:`, e instanceof Error ? e.message : e), r;
|
|
167
168
|
}
|
|
168
|
-
let
|
|
169
|
-
if (!
|
|
170
|
-
zodIssues:
|
|
171
|
-
body:
|
|
172
|
-
}),
|
|
173
|
-
let { result:
|
|
174
|
-
if (e.enterprise &&
|
|
169
|
+
let a = y.safeParse(i);
|
|
170
|
+
if (!a.success || !a.data.success) return console.warn(`[custom-domains] CF response unparseable for ${n} (tenant=${t}); returning stale DB row.`, a.success ? { cfErrors: a.data.errors } : {
|
|
171
|
+
zodIssues: a.error.issues,
|
|
172
|
+
body: i
|
|
173
|
+
}), r;
|
|
174
|
+
let { result: o } = a.data;
|
|
175
|
+
if (e.enterprise && o.custom_metadata?.tenant_id !== t) throw new s(404);
|
|
175
176
|
let c;
|
|
176
177
|
try {
|
|
177
|
-
c =
|
|
178
|
-
...
|
|
179
|
-
...
|
|
178
|
+
c = S({
|
|
179
|
+
...r,
|
|
180
|
+
...o
|
|
180
181
|
});
|
|
181
182
|
} catch (e) {
|
|
182
|
-
return console.warn(`[custom-domains] mapCustomDomainResponse failed for ${n} (tenant=${t}); returning stale DB row.`, e instanceof Error ? e.message : e),
|
|
183
|
+
return console.warn(`[custom-domains] mapCustomDomainResponse failed for ${n} (tenant=${t}); returning stale DB row.`, e instanceof Error ? e.message : e), r;
|
|
183
184
|
}
|
|
184
|
-
if (c.status !==
|
|
185
|
+
if (c.status !== r.status || JSON.stringify(c.verification) !== JSON.stringify(r.verification)) try {
|
|
185
186
|
await e.customDomainAdapter.update(t, n, {
|
|
186
187
|
status: c.status,
|
|
187
188
|
verification: c.verification
|
|
@@ -195,49 +196,49 @@ function y(e) {
|
|
|
195
196
|
list: async (t) => e.customDomainAdapter.list(t),
|
|
196
197
|
remove: async (t, n) => {
|
|
197
198
|
if (e.enterprise) {
|
|
198
|
-
let { result:
|
|
199
|
-
if (!
|
|
199
|
+
let { result: r, success: i } = y.parse(await b(e).get(`/custom_hostnames/${encodeURIComponent(n)}`).json());
|
|
200
|
+
if (!i || r.custom_metadata?.tenant_id !== t) throw new s(404);
|
|
200
201
|
}
|
|
201
|
-
let
|
|
202
|
-
return
|
|
202
|
+
let r = await b(e).delete(`/custom_hostnames/${encodeURIComponent(n)}`).res();
|
|
203
|
+
return r.ok && await e.customDomainAdapter.remove(t, n), r.ok;
|
|
203
204
|
},
|
|
204
|
-
update: async (t, n,
|
|
205
|
-
let { sslOverrides:
|
|
206
|
-
if (Object.keys(
|
|
205
|
+
update: async (t, n, r) => {
|
|
206
|
+
let { sslOverrides: i } = x(r.domain_metadata), a = {};
|
|
207
|
+
if (Object.keys(i).length > 0) {
|
|
207
208
|
let t;
|
|
208
209
|
try {
|
|
209
|
-
t = await
|
|
210
|
+
t = await b(e).get(`/custom_hostnames/${encodeURIComponent(n)}`).json();
|
|
210
211
|
} catch (e) {
|
|
211
|
-
throw new
|
|
212
|
+
throw new s(503, { message: `Failed to fetch current custom hostname state: ${e instanceof Error ? e.message : String(e)}` });
|
|
212
213
|
}
|
|
213
|
-
let
|
|
214
|
-
if (!
|
|
215
|
-
|
|
216
|
-
method:
|
|
217
|
-
type:
|
|
218
|
-
certificate_authority:
|
|
219
|
-
...
|
|
214
|
+
let r = y.safeParse(t);
|
|
215
|
+
if (!r.success || !r.data.success) throw new s(503, { message: `Failed to parse current custom hostname state: ${JSON.stringify(r.success ? r.data.errors : r.error.issues)}` });
|
|
216
|
+
a.ssl = {
|
|
217
|
+
method: r.data.result.ssl.method,
|
|
218
|
+
type: r.data.result.ssl.type,
|
|
219
|
+
certificate_authority: r.data.result.ssl.certificate_authority,
|
|
220
|
+
...i
|
|
220
221
|
};
|
|
221
222
|
}
|
|
222
|
-
if (Object.keys(
|
|
223
|
-
let t = await
|
|
224
|
-
throw new
|
|
223
|
+
if (Object.keys(a).length > 0) {
|
|
224
|
+
let t = await b(e).patch(a, `/custom_hostnames/${encodeURIComponent(n)}`).res().catch((e) => {
|
|
225
|
+
throw new s(503, { message: `Failed to update custom hostname: ${e instanceof Error ? e.message : String(e)}` });
|
|
225
226
|
});
|
|
226
|
-
if (!t.ok) throw new
|
|
227
|
+
if (!t.ok) throw new s(503, { message: await t.text() });
|
|
227
228
|
}
|
|
228
|
-
return e.customDomainAdapter.update(t, n,
|
|
229
|
+
return e.customDomainAdapter.update(t, n, r);
|
|
229
230
|
},
|
|
230
|
-
uploadCertificate: async (t, n,
|
|
231
|
-
let
|
|
232
|
-
if (!
|
|
233
|
-
let
|
|
234
|
-
custom_certificate:
|
|
235
|
-
custom_key:
|
|
236
|
-
} }, `/custom_hostnames/${encodeURIComponent(n)}`).json(), { result:
|
|
237
|
-
if (!l) throw new
|
|
238
|
-
let u =
|
|
239
|
-
...
|
|
240
|
-
...
|
|
231
|
+
uploadCertificate: async (t, n, r) => {
|
|
232
|
+
let i = await e.customDomainAdapter.get(t, n);
|
|
233
|
+
if (!i) throw new s(404);
|
|
234
|
+
let a = await b(e).patch({ ssl: {
|
|
235
|
+
custom_certificate: r.certificate,
|
|
236
|
+
custom_key: r.private_key
|
|
237
|
+
} }, `/custom_hostnames/${encodeURIComponent(n)}`).json(), { result: o, errors: c, success: l } = y.parse(a);
|
|
238
|
+
if (!l) throw new s(503, { message: JSON.stringify(c) });
|
|
239
|
+
let u = S({
|
|
240
|
+
...i,
|
|
241
|
+
...o
|
|
241
242
|
});
|
|
242
243
|
return await e.customDomainAdapter.update(t, n, {
|
|
243
244
|
status: u.status,
|
|
@@ -248,7 +249,7 @@ function y(e) {
|
|
|
248
249
|
}
|
|
249
250
|
//#endregion
|
|
250
251
|
//#region src/cache/index.ts
|
|
251
|
-
var
|
|
252
|
+
var te = class {
|
|
252
253
|
config;
|
|
253
254
|
cache = null;
|
|
254
255
|
constructor(e) {
|
|
@@ -322,8 +323,8 @@ var ee = class {
|
|
|
322
323
|
console.warn("CloudflareCache.clear() is not implemented - Cloudflare Cache API does not support clearing all entries");
|
|
323
324
|
}
|
|
324
325
|
};
|
|
325
|
-
function
|
|
326
|
-
return new
|
|
326
|
+
function ne(e = {}) {
|
|
327
|
+
return new te({
|
|
327
328
|
defaultTtlSeconds: 300,
|
|
328
329
|
keyPrefix: "authhero",
|
|
329
330
|
getTimeoutMs: 200,
|
|
@@ -332,14 +333,14 @@ function te(e = {}) {
|
|
|
332
333
|
}
|
|
333
334
|
//#endregion
|
|
334
335
|
//#region ../../node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/url-alphabet/index.js
|
|
335
|
-
var
|
|
336
|
+
var re = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", C = (e = 21) => {
|
|
336
337
|
let t = "", n = crypto.getRandomValues(new Uint8Array(e |= 0));
|
|
337
|
-
for (; e--;) t +=
|
|
338
|
+
for (; e--;) t += re[n[e] & 63];
|
|
338
339
|
return t;
|
|
339
340
|
};
|
|
340
341
|
//#endregion
|
|
341
342
|
//#region src/r2-sql-logs/query.ts
|
|
342
|
-
async function
|
|
343
|
+
async function w(e, t) {
|
|
343
344
|
let n = e.timeout || 3e4, r = new AbortController(), i = setTimeout(() => r.abort(), n);
|
|
344
345
|
try {
|
|
345
346
|
let n = `https://api.sql.cloudflarestorage.com/api/v1/accounts/${e.accountId}/r2-sql/query/${e.warehouseName}`, i = await fetch(n, {
|
|
@@ -359,15 +360,15 @@ async function x(e, t) {
|
|
|
359
360
|
clearTimeout(i);
|
|
360
361
|
}
|
|
361
362
|
}
|
|
362
|
-
function
|
|
363
|
+
function T(e) {
|
|
363
364
|
return `'${e.replace(/'/g, "''")}'`;
|
|
364
365
|
}
|
|
365
|
-
function
|
|
366
|
+
function E(e) {
|
|
366
367
|
return `"${e.replace(/"/g, "\"\"")}"`;
|
|
367
368
|
}
|
|
368
369
|
//#endregion
|
|
369
370
|
//#region src/r2-sql-logs/logs.ts
|
|
370
|
-
function
|
|
371
|
+
function D(e) {
|
|
371
372
|
let t = (e) => {
|
|
372
373
|
if (!e) return "";
|
|
373
374
|
try {
|
|
@@ -407,16 +408,16 @@ function w(e) {
|
|
|
407
408
|
} : void 0
|
|
408
409
|
};
|
|
409
410
|
}
|
|
410
|
-
function
|
|
411
|
+
function ie(e) {
|
|
411
412
|
return async (t, n) => {
|
|
412
|
-
let r = n.log_id ||
|
|
413
|
+
let r = n.log_id || C(), i = {
|
|
413
414
|
...n,
|
|
414
415
|
log_id: r
|
|
415
416
|
};
|
|
416
|
-
return await
|
|
417
|
+
return await ae(e, t, i), i;
|
|
417
418
|
};
|
|
418
419
|
}
|
|
419
|
-
async function
|
|
420
|
+
async function ae(e, t, n) {
|
|
420
421
|
let r = (e) => e ? JSON.stringify(e) : void 0, i = {
|
|
421
422
|
id: n.log_id,
|
|
422
423
|
tenant_id: t,
|
|
@@ -467,22 +468,22 @@ async function ie(e, t, n) {
|
|
|
467
468
|
throw console.error("Failed to send log to Pipeline:", e), e;
|
|
468
469
|
}
|
|
469
470
|
}
|
|
470
|
-
function
|
|
471
|
+
function oe(e) {
|
|
471
472
|
return async (t, n) => {
|
|
472
|
-
let r = e.namespace || "default", i = e.tableName || "logs", a = await
|
|
473
|
-
SELECT * FROM ${
|
|
474
|
-
WHERE tenant_id = ${
|
|
475
|
-
AND id = ${
|
|
473
|
+
let r = e.namespace || "default", i = e.tableName || "logs", a = await w(e, `
|
|
474
|
+
SELECT * FROM ${E(r)}.${E(i)}
|
|
475
|
+
WHERE tenant_id = ${T(t)}
|
|
476
|
+
AND id = ${T(n)}
|
|
476
477
|
LIMIT 1
|
|
477
478
|
`);
|
|
478
479
|
if (a.length === 0) return null;
|
|
479
480
|
let o = a[0];
|
|
480
|
-
return o ?
|
|
481
|
+
return o ? D(o) : null;
|
|
481
482
|
};
|
|
482
483
|
}
|
|
483
484
|
//#endregion
|
|
484
485
|
//#region src/r2-sql-logs/list.ts
|
|
485
|
-
function
|
|
486
|
+
function O(e) {
|
|
486
487
|
let t = {}, n = /(\w+):(?:"([^"]*)"|(\S+))/g, r;
|
|
487
488
|
for (; (r = n.exec(e)) !== null;) {
|
|
488
489
|
let e = r[1], n = r[2] === void 0 ? r[3] : r[2];
|
|
@@ -490,40 +491,40 @@ function oe(e) {
|
|
|
490
491
|
}
|
|
491
492
|
return t;
|
|
492
493
|
}
|
|
493
|
-
function
|
|
494
|
+
function se(e) {
|
|
494
495
|
let t = [];
|
|
495
496
|
for (let [n, r] of Object.entries(e)) {
|
|
496
497
|
let e = n.replace(/[^a-zA-Z0-9_]/g, "");
|
|
497
|
-
e && r && t.push(`${
|
|
498
|
+
e && r && t.push(`${E(e)} = ${T(r)}`);
|
|
498
499
|
}
|
|
499
500
|
return t;
|
|
500
501
|
}
|
|
501
|
-
function
|
|
502
|
+
function ce(e) {
|
|
502
503
|
return async (t, n = {}) => {
|
|
503
|
-
let { page: r = 0, per_page: i = 50, include_totals: a = !1, sort: o, q: s } = n, c = e.namespace || "default", l = e.tableName || "logs", u = [`tenant_id = ${
|
|
504
|
+
let { page: r = 0, per_page: i = 50, include_totals: a = !1, sort: o, q: s } = n, c = e.namespace || "default", l = e.tableName || "logs", u = [`tenant_id = ${T(t)}`];
|
|
504
505
|
if (s) {
|
|
505
|
-
let e =
|
|
506
|
-
u.push(...
|
|
506
|
+
let e = O(s);
|
|
507
|
+
u.push(...se(e));
|
|
507
508
|
}
|
|
508
509
|
let d = u.join(" AND "), f = "ORDER BY date DESC";
|
|
509
510
|
if (o && o.sort_by) {
|
|
510
511
|
let e = o.sort_by.replace(/[^a-zA-Z0-9_]/g, ""), t = o.sort_order === "asc" ? "ASC" : "DESC";
|
|
511
|
-
f = `ORDER BY ${
|
|
512
|
+
f = `ORDER BY ${E(e)} ${t}`;
|
|
512
513
|
}
|
|
513
|
-
let p = r * i, m = `LIMIT ${i} OFFSET ${p}`, h = (await
|
|
514
|
-
SELECT * FROM ${
|
|
514
|
+
let p = r * i, m = `LIMIT ${i} OFFSET ${p}`, h = (await w(e, `
|
|
515
|
+
SELECT * FROM ${E(c)}.${E(l)}
|
|
515
516
|
WHERE ${d}
|
|
516
517
|
${f}
|
|
517
518
|
${m}
|
|
518
|
-
`)).map(
|
|
519
|
+
`)).map(D);
|
|
519
520
|
if (!a) return {
|
|
520
521
|
logs: h,
|
|
521
522
|
start: 0,
|
|
522
523
|
limit: 0,
|
|
523
524
|
length: 0
|
|
524
525
|
};
|
|
525
|
-
let g = (await
|
|
526
|
-
SELECT COUNT(*) as count FROM ${
|
|
526
|
+
let g = (await w(e, `
|
|
527
|
+
SELECT COUNT(*) as count FROM ${E(c)}.${E(l)}
|
|
527
528
|
WHERE ${d}
|
|
528
529
|
`))[0]?.count || 0;
|
|
529
530
|
return {
|
|
@@ -536,7 +537,7 @@ function E(e) {
|
|
|
536
537
|
}
|
|
537
538
|
//#endregion
|
|
538
539
|
//#region src/r2-sql-logs/stats.ts
|
|
539
|
-
function
|
|
540
|
+
function le() {
|
|
540
541
|
return {
|
|
541
542
|
async getDaily() {
|
|
542
543
|
throw Error("Stats queries are not supported by R2 SQL logs adapter. Use Analytics Engine or Kysely adapter instead.");
|
|
@@ -548,20 +549,20 @@ function se() {
|
|
|
548
549
|
}
|
|
549
550
|
//#endregion
|
|
550
551
|
//#region src/r2-sql-logs/index.ts
|
|
551
|
-
function
|
|
552
|
+
function k(e) {
|
|
552
553
|
let t = !!e.pipelineEndpoint, n = !!e.pipelineBinding;
|
|
553
554
|
if (!t && !n) throw Error("R2 SQL logs adapter requires one of: \"pipelineEndpoint\" or \"pipelineBinding\"");
|
|
554
555
|
if (!e.authToken) throw Error("R2 SQL logs adapter requires \"authToken\" configuration");
|
|
555
556
|
if (!e.warehouseName) throw Error("R2 SQL logs adapter requires \"warehouseName\" configuration");
|
|
556
557
|
return {
|
|
557
|
-
create:
|
|
558
|
-
list:
|
|
559
|
-
get:
|
|
558
|
+
create: ie(e),
|
|
559
|
+
list: ce(e),
|
|
560
|
+
get: oe(e)
|
|
560
561
|
};
|
|
561
562
|
}
|
|
562
563
|
//#endregion
|
|
563
564
|
//#region src/analytics-engine-logs/query.ts
|
|
564
|
-
async function
|
|
565
|
+
async function A(e, t) {
|
|
565
566
|
let n = e.timeout || 3e4, r = new AbortController(), i = setTimeout(() => r.abort(), n);
|
|
566
567
|
try {
|
|
567
568
|
let n = `https://api.cloudflare.com/client/v4/accounts/${e.accountId}/analytics_engine/sql`, i = await fetch(n, {
|
|
@@ -584,15 +585,15 @@ async function O(e, t) {
|
|
|
584
585
|
clearTimeout(i);
|
|
585
586
|
}
|
|
586
587
|
}
|
|
587
|
-
function
|
|
588
|
+
function j(e) {
|
|
588
589
|
return `'${e.replace(/'/g, "''").replace(/\\/g, "\\\\")}'`;
|
|
589
590
|
}
|
|
590
|
-
function
|
|
591
|
+
function M(e) {
|
|
591
592
|
return `"${e.replace(/"/g, "\"\"")}"`;
|
|
592
593
|
}
|
|
593
594
|
//#endregion
|
|
594
595
|
//#region src/analytics-engine-logs/logs.ts
|
|
595
|
-
function
|
|
596
|
+
function N(e) {
|
|
596
597
|
let t = (e) => {
|
|
597
598
|
if (e) try {
|
|
598
599
|
return JSON.parse(e);
|
|
@@ -624,16 +625,16 @@ function j(e) {
|
|
|
624
625
|
isMobile: e.double1 === 1
|
|
625
626
|
};
|
|
626
627
|
}
|
|
627
|
-
function
|
|
628
|
+
function ue(e) {
|
|
628
629
|
return async (t, n) => {
|
|
629
|
-
let r = n.log_id ||
|
|
630
|
+
let r = n.log_id || C(), i = {
|
|
630
631
|
...n,
|
|
631
632
|
log_id: r
|
|
632
633
|
};
|
|
633
|
-
return
|
|
634
|
+
return de(e, t, i), i;
|
|
634
635
|
};
|
|
635
636
|
}
|
|
636
|
-
function
|
|
637
|
+
function de(e, t, n) {
|
|
637
638
|
if (!e.analyticsEngineBinding) {
|
|
638
639
|
console.error("Analytics Engine binding not configured");
|
|
639
640
|
return;
|
|
@@ -670,24 +671,24 @@ function le(e, t, n) {
|
|
|
670
671
|
console.error("Failed to write log to Analytics Engine:", e);
|
|
671
672
|
}
|
|
672
673
|
}
|
|
673
|
-
function
|
|
674
|
+
function fe(e) {
|
|
674
675
|
return async (t, n) => {
|
|
675
|
-
let r = await
|
|
676
|
+
let r = await A(e, `
|
|
676
677
|
SELECT *
|
|
677
|
-
FROM ${
|
|
678
|
-
WHERE index1 = ${
|
|
679
|
-
AND blob1 = ${
|
|
678
|
+
FROM ${M(e.dataset || "authhero_logs")}
|
|
679
|
+
WHERE index1 = ${j(t)}
|
|
680
|
+
AND blob1 = ${j(n)}
|
|
680
681
|
LIMIT 1
|
|
681
682
|
`);
|
|
682
|
-
return r.length === 0 || !r[0] ? null :
|
|
683
|
+
return r.length === 0 || !r[0] ? null : N(r[0]);
|
|
683
684
|
};
|
|
684
685
|
}
|
|
685
686
|
//#endregion
|
|
686
687
|
//#region src/analytics-engine-logs/list.ts
|
|
687
|
-
function
|
|
688
|
+
function pe(e) {
|
|
688
689
|
return e.replace(/\\([\\"+\-!(){}[\]^~*?:/&|])/g, "$1");
|
|
689
690
|
}
|
|
690
|
-
function
|
|
691
|
+
function me(e) {
|
|
691
692
|
let t = [], n = "", r = !1;
|
|
692
693
|
for (let i = 0; i < e.length; i++) {
|
|
693
694
|
let a = e[i];
|
|
@@ -695,20 +696,20 @@ function fe(e) {
|
|
|
695
696
|
}
|
|
696
697
|
return n.trim() && t.push(n.trim()), t;
|
|
697
698
|
}
|
|
698
|
-
function
|
|
699
|
+
function P(e) {
|
|
699
700
|
let t = e;
|
|
700
|
-
return t.startsWith("\"") && t.endsWith("\"") && t.length > 1 && (t = t.slice(1, -1)),
|
|
701
|
+
return t.startsWith("\"") && t.endsWith("\"") && t.length > 1 && (t = t.slice(1, -1)), pe(t);
|
|
701
702
|
}
|
|
702
|
-
function
|
|
703
|
+
function F(e) {
|
|
703
704
|
let t = {}, n = [];
|
|
704
|
-
for (let r of
|
|
705
|
+
for (let r of me(e)) {
|
|
705
706
|
if (r === "OR" || r === "AND") continue;
|
|
706
707
|
let e = r.match(/^(\w+):([\s\S]*)$/);
|
|
707
708
|
if (e) {
|
|
708
|
-
let n = e[1], r =
|
|
709
|
+
let n = e[1], r = P(e[2]);
|
|
709
710
|
t[n] || (t[n] = []), t[n].push(r);
|
|
710
711
|
} else {
|
|
711
|
-
let e =
|
|
712
|
+
let e = P(r);
|
|
712
713
|
e && n.push(e);
|
|
713
714
|
}
|
|
714
715
|
}
|
|
@@ -717,7 +718,7 @@ function pe(e) {
|
|
|
717
718
|
terms: n
|
|
718
719
|
};
|
|
719
720
|
}
|
|
720
|
-
function
|
|
721
|
+
function I(e) {
|
|
721
722
|
return {
|
|
722
723
|
log_id: "blob1",
|
|
723
724
|
tenant_id: "blob2",
|
|
@@ -738,7 +739,7 @@ function N(e) {
|
|
|
738
739
|
hostname: "blob17"
|
|
739
740
|
}[e] || null;
|
|
740
741
|
}
|
|
741
|
-
function
|
|
742
|
+
function L(e) {
|
|
742
743
|
let t = [];
|
|
743
744
|
for (let [n, r] of Object.entries(e)) {
|
|
744
745
|
let e = r.filter((e) => e !== "");
|
|
@@ -749,41 +750,41 @@ function me(e) {
|
|
|
749
750
|
n.length > 0 && t.push(`(${n.join(" OR ")})`);
|
|
750
751
|
continue;
|
|
751
752
|
}
|
|
752
|
-
let i =
|
|
753
|
-
if (i) if (e.length === 1) t.push(`${i} = ${
|
|
753
|
+
let i = I(n);
|
|
754
|
+
if (i) if (e.length === 1) t.push(`${i} = ${j(e[0])}`);
|
|
754
755
|
else {
|
|
755
|
-
let n = e.map((e) =>
|
|
756
|
+
let n = e.map((e) => j(e)).join(", ");
|
|
756
757
|
t.push(`${i} IN (${n})`);
|
|
757
758
|
}
|
|
758
759
|
}
|
|
759
760
|
return t;
|
|
760
761
|
}
|
|
761
|
-
function
|
|
762
|
+
function R(e) {
|
|
762
763
|
return e.filter((e) => e !== "").map((e) => {
|
|
763
|
-
let t =
|
|
764
|
+
let t = j(e), n = j(`%${e}%`);
|
|
764
765
|
return `(blob7 = ${t} OR blob5 LIKE ${n} OR blob4 LIKE ${n})`;
|
|
765
766
|
});
|
|
766
767
|
}
|
|
767
|
-
function
|
|
768
|
-
return e === "date" ? "double2" :
|
|
768
|
+
function z(e) {
|
|
769
|
+
return e === "date" ? "double2" : I(e) || "timestamp";
|
|
769
770
|
}
|
|
770
|
-
function
|
|
771
|
+
function he(e) {
|
|
771
772
|
return async (t, n = {}) => {
|
|
772
|
-
let { page: r = 0, per_page: i = 50, include_totals: a = !1, sort: o, q: s, from_date: c, to_date: l } = n, u = e.dataset || "authhero_logs", d = [`index1 = ${
|
|
773
|
+
let { page: r = 0, per_page: i = 50, include_totals: a = !1, sort: o, q: s, from_date: c, to_date: l } = n, u = e.dataset || "authhero_logs", d = [`index1 = ${j(t)}`];
|
|
773
774
|
if (s) {
|
|
774
|
-
let { fields: e, terms: t } =
|
|
775
|
-
d.push(...
|
|
775
|
+
let { fields: e, terms: t } = F(s);
|
|
776
|
+
d.push(...L(e)), d.push(...R(t));
|
|
776
777
|
}
|
|
777
778
|
typeof c == "number" && Number.isFinite(c) && d.push(`double2 >= ${Math.floor(c) * 1e3}`), typeof l == "number" && Number.isFinite(l) && d.push(`double2 <= ${Math.floor(l) * 1e3}`);
|
|
778
779
|
let f = d.join(" AND "), p = "ORDER BY timestamp DESC";
|
|
779
|
-
o && o.sort_by && (p = `ORDER BY ${
|
|
780
|
-
let m = r * i, h = `LIMIT ${i} OFFSET ${m}`, g = (await
|
|
780
|
+
o && o.sort_by && (p = `ORDER BY ${z(o.sort_by)} ${o.sort_order === "asc" ? "ASC" : "DESC"}`);
|
|
781
|
+
let m = r * i, h = `LIMIT ${i} OFFSET ${m}`, g = (await A(e, `
|
|
781
782
|
SELECT *
|
|
782
|
-
FROM ${
|
|
783
|
+
FROM ${M(u)}
|
|
783
784
|
WHERE ${f}
|
|
784
785
|
${p}
|
|
785
786
|
${h}
|
|
786
|
-
`)).map(
|
|
787
|
+
`)).map(N);
|
|
787
788
|
if (!a) return {
|
|
788
789
|
logs: g,
|
|
789
790
|
start: 0,
|
|
@@ -792,11 +793,11 @@ function P(e) {
|
|
|
792
793
|
};
|
|
793
794
|
let _ = `
|
|
794
795
|
SELECT count() as count
|
|
795
|
-
FROM ${
|
|
796
|
+
FROM ${M(u)}
|
|
796
797
|
WHERE ${f}
|
|
797
798
|
`;
|
|
798
799
|
try {
|
|
799
|
-
let t = (await
|
|
800
|
+
let t = (await A(e, _))[0]?.count || 0;
|
|
800
801
|
return {
|
|
801
802
|
logs: g,
|
|
802
803
|
start: m,
|
|
@@ -815,11 +816,11 @@ function P(e) {
|
|
|
815
816
|
}
|
|
816
817
|
//#endregion
|
|
817
818
|
//#region src/analytics-engine-logs/stats.ts
|
|
818
|
-
var
|
|
819
|
-
function
|
|
819
|
+
var B = ["s"], ge = ["pwd_leak"];
|
|
820
|
+
function V(e) {
|
|
820
821
|
return `${e.slice(0, 4)}-${e.slice(4, 6)}-${e.slice(6, 8)}`;
|
|
821
822
|
}
|
|
822
|
-
function
|
|
823
|
+
function H(e) {
|
|
823
824
|
return e.toISOString().split("T")[0];
|
|
824
825
|
}
|
|
825
826
|
function _e(e) {
|
|
@@ -828,17 +829,17 @@ function _e(e) {
|
|
|
828
829
|
async getDaily(n, r = {}) {
|
|
829
830
|
let { from: i, to: a } = r, o = /* @__PURE__ */ new Date(), s = new Date(o);
|
|
830
831
|
s.setDate(s.getDate() - 30);
|
|
831
|
-
let c = i ?
|
|
832
|
-
return (await
|
|
832
|
+
let c = i ? V(i) : H(s), l = a ? V(a) : H(o), u = (/* @__PURE__ */ new Date(`${c}T00:00:00Z`)).getTime(), d = (/* @__PURE__ */ new Date(`${l}T23:59:59.999Z`)).getTime();
|
|
833
|
+
return (await A(e, `
|
|
833
834
|
SELECT
|
|
834
835
|
toDate(toDateTime(double2 / 1000)) AS date,
|
|
835
|
-
SUM(CASE WHEN blob3 IN (${
|
|
836
|
+
SUM(CASE WHEN blob3 IN (${B.map((e) => j(e)).join(", ")}) THEN 1 ELSE 0 END) AS logins,
|
|
836
837
|
SUM(CASE WHEN blob3 = 'ss' THEN 1 ELSE 0 END) AS signups,
|
|
837
|
-
SUM(CASE WHEN blob3 IN (${
|
|
838
|
+
SUM(CASE WHEN blob3 IN (${ge.map((e) => j(e)).join(", ")}) THEN 1 ELSE 0 END) AS leaked_passwords,
|
|
838
839
|
MIN(double2) AS first_event,
|
|
839
840
|
MAX(double2) AS last_event
|
|
840
841
|
FROM "${t}"
|
|
841
|
-
WHERE index1 = ${
|
|
842
|
+
WHERE index1 = ${j(n)}
|
|
842
843
|
AND double2 >= ${u}
|
|
843
844
|
AND double2 <= ${d}
|
|
844
845
|
GROUP BY date
|
|
@@ -855,10 +856,10 @@ function _e(e) {
|
|
|
855
856
|
async getActiveUsers(n) {
|
|
856
857
|
let r = /* @__PURE__ */ new Date();
|
|
857
858
|
r.setDate(r.getDate() - 30);
|
|
858
|
-
let i = r.getTime(), a =
|
|
859
|
+
let i = r.getTime(), a = B.map((e) => j(e)).join(", "), o = (await A(e, `
|
|
859
860
|
SELECT COUNT(DISTINCT blob7) AS count
|
|
860
861
|
FROM "${t}"
|
|
861
|
-
WHERE index1 = ${
|
|
862
|
+
WHERE index1 = ${j(n)}
|
|
862
863
|
AND double2 >= ${i}
|
|
863
864
|
AND blob3 IN (${a})
|
|
864
865
|
AND blob7 IS NOT NULL
|
|
@@ -887,6 +888,7 @@ var ve = {
|
|
|
887
888
|
"scpr",
|
|
888
889
|
"fcpr"
|
|
889
890
|
],
|
|
891
|
+
"password-migrations": ["spm"],
|
|
890
892
|
mfa: [
|
|
891
893
|
"gd_auth_succeed",
|
|
892
894
|
"gd_auth_failed",
|
|
@@ -945,6 +947,11 @@ var ve = {
|
|
|
945
947
|
alias: "password_changes",
|
|
946
948
|
type: "UInt64"
|
|
947
949
|
},
|
|
950
|
+
"password-migrations": {
|
|
951
|
+
expr: "count()",
|
|
952
|
+
alias: "password_migrations",
|
|
953
|
+
type: "UInt64"
|
|
954
|
+
},
|
|
948
955
|
mfa: {
|
|
949
956
|
expr: "count()",
|
|
950
957
|
alias: "mfa",
|
|
@@ -962,7 +969,7 @@ var ve = {
|
|
|
962
969
|
}
|
|
963
970
|
};
|
|
964
971
|
function Se(e, t) {
|
|
965
|
-
let n = `toDateTime(intDiv(double2, 1000), ${
|
|
972
|
+
let n = `toDateTime(intDiv(double2, 1000), ${j(t)})`;
|
|
966
973
|
switch (e) {
|
|
967
974
|
case "hour": return `toStartOfHour(${n})`;
|
|
968
975
|
case "week": return `toStartOfWeek(${n})`;
|
|
@@ -974,8 +981,8 @@ function Ce(e) {
|
|
|
974
981
|
return e === "hour" ? "DateTime" : "Date";
|
|
975
982
|
}
|
|
976
983
|
function we(e, t, n) {
|
|
977
|
-
let r = new Date(e.from).getTime(), i = new Date(e.to).getTime(), a = n.map((e) =>
|
|
978
|
-
`index1 = ${
|
|
984
|
+
let r = new Date(e.from).getTime(), i = new Date(e.to).getTime(), a = n.map((e) => j(e)).join(", "), o = [
|
|
985
|
+
`index1 = ${j(t)}`,
|
|
979
986
|
`double2 >= ${r}`,
|
|
980
987
|
`double2 < ${i}`,
|
|
981
988
|
`blob3 IN (${a})`
|
|
@@ -983,7 +990,7 @@ function we(e, t, n) {
|
|
|
983
990
|
for (let [t, n] of Object.entries(be)) {
|
|
984
991
|
let r = e.filters[t];
|
|
985
992
|
if (r && r.length > 0) {
|
|
986
|
-
let e = r.map((e) =>
|
|
993
|
+
let e = r.map((e) => j(e)).join(", ");
|
|
987
994
|
o.push(`${n} IN (${e})`);
|
|
988
995
|
}
|
|
989
996
|
}
|
|
@@ -992,23 +999,23 @@ function we(e, t, n) {
|
|
|
992
999
|
function Te(e, t, n) {
|
|
993
1000
|
if (e.order_by) {
|
|
994
1001
|
let t = e.order_by.startsWith("-");
|
|
995
|
-
return `${
|
|
1002
|
+
return `${M(t ? e.order_by.slice(1) : e.order_by)} ${t ? "DESC" : "ASC"}`;
|
|
996
1003
|
}
|
|
997
|
-
return t.length > 0 && t[0] === "time" ? `${
|
|
1004
|
+
return t.length > 0 && t[0] === "time" ? `${M("time")} ASC` : `${M(n)} DESC`;
|
|
998
1005
|
}
|
|
999
|
-
function
|
|
1006
|
+
function U(e) {
|
|
1000
1007
|
let t = e.dataset || "authhero_logs";
|
|
1001
1008
|
return { async query(n, r, i) {
|
|
1002
1009
|
let a = ve[r], o = xe[r], s = [], c = [];
|
|
1003
1010
|
for (let e of i.group_by) if (e === "time") {
|
|
1004
1011
|
let e = Se(i.interval, i.tz);
|
|
1005
|
-
s.push(`${e} AS ${
|
|
1012
|
+
s.push(`${e} AS ${M("time")}`), c.push({
|
|
1006
1013
|
name: "time",
|
|
1007
1014
|
type: Ce(i.interval)
|
|
1008
1015
|
});
|
|
1009
1016
|
} else {
|
|
1010
1017
|
let t = ye[e];
|
|
1011
|
-
s.push(`${t} AS ${
|
|
1018
|
+
s.push(`${t} AS ${M(e)}`), c.push({
|
|
1012
1019
|
name: e,
|
|
1013
1020
|
type: "String"
|
|
1014
1021
|
});
|
|
@@ -1017,9 +1024,9 @@ function z(e) {
|
|
|
1017
1024
|
name: o.alias,
|
|
1018
1025
|
type: o.type
|
|
1019
1026
|
});
|
|
1020
|
-
let l = [...s, `${o.expr} AS ${
|
|
1027
|
+
let l = [...s, `${o.expr} AS ${M(o.alias)}`], u = i.group_by.length ? `GROUP BY ${i.group_by.map((e) => M(e === "time" ? "time" : e)).join(", ")}` : "", d = Te(i, i.group_by.map((e) => e === "time" ? "time" : e), o.alias), f = `
|
|
1021
1028
|
SELECT ${l.join(", ")}
|
|
1022
|
-
FROM ${
|
|
1029
|
+
FROM ${M(t)}
|
|
1023
1030
|
WHERE ${we(i, n, a)}
|
|
1024
1031
|
${u}
|
|
1025
1032
|
ORDER BY ${d}
|
|
@@ -1057,47 +1064,47 @@ function z(e) {
|
|
|
1057
1064
|
}
|
|
1058
1065
|
//#endregion
|
|
1059
1066
|
//#region src/analytics-engine-logs/index.ts
|
|
1060
|
-
function
|
|
1067
|
+
function W(e) {
|
|
1061
1068
|
return e.analyticsEngineBinding || console.warn("Analytics Engine: No binding configured. Logs will not be written to Analytics Engine."), (!e.accountId || !e.apiToken) && console.warn("Analytics Engine: accountId and apiToken are required for querying logs via SQL API."), {
|
|
1062
|
-
create:
|
|
1063
|
-
list:
|
|
1064
|
-
get:
|
|
1069
|
+
create: ue(e),
|
|
1070
|
+
list: he(e),
|
|
1071
|
+
get: fe(e)
|
|
1065
1072
|
};
|
|
1066
1073
|
}
|
|
1067
1074
|
//#endregion
|
|
1068
1075
|
//#region src/analytics-engine-action-executions/actionExecutions.ts
|
|
1069
|
-
var Ee = "authhero_action_executions", De = 1024,
|
|
1070
|
-
function
|
|
1076
|
+
var Ee = "authhero_action_executions", De = 1024, G = "[truncated]";
|
|
1077
|
+
function K(e) {
|
|
1071
1078
|
if (!(typeof e != "string" || e.length === 0)) try {
|
|
1072
1079
|
return JSON.parse(e);
|
|
1073
1080
|
} catch {
|
|
1074
1081
|
return;
|
|
1075
1082
|
}
|
|
1076
1083
|
}
|
|
1077
|
-
function
|
|
1078
|
-
let
|
|
1079
|
-
return
|
|
1084
|
+
function Oe(e) {
|
|
1085
|
+
let t = i.safeParse(e);
|
|
1086
|
+
return t.success ? t.data : "unspecified";
|
|
1080
1087
|
}
|
|
1081
|
-
function
|
|
1082
|
-
return e.length <= t ? e : `${e.substring(0, t - 11)}${
|
|
1088
|
+
function q(e, t = De) {
|
|
1089
|
+
return e.length <= t ? e : `${e.substring(0, t - 11)}${G}`;
|
|
1083
1090
|
}
|
|
1084
|
-
function
|
|
1091
|
+
function J(e) {
|
|
1085
1092
|
return e == null ? "" : JSON.stringify(e);
|
|
1086
1093
|
}
|
|
1087
|
-
function
|
|
1094
|
+
function ke(e) {
|
|
1088
1095
|
let t = typeof e.blob6 == "string" && e.blob6.length > 0 ? e.blob6 : typeof e.double1 == "number" ? new Date(e.double1).toISOString() : "", n = typeof e.blob7 == "string" && e.blob7.length > 0 ? e.blob7 : t;
|
|
1089
1096
|
return {
|
|
1090
1097
|
id: typeof e.blob1 == "string" ? e.blob1 : "",
|
|
1091
1098
|
tenant_id: typeof e.index1 == "string" ? e.index1 : "",
|
|
1092
1099
|
trigger_id: typeof e.blob2 == "string" ? e.blob2 : "",
|
|
1093
|
-
status:
|
|
1094
|
-
results:
|
|
1095
|
-
logs:
|
|
1100
|
+
status: Oe(e.blob3),
|
|
1101
|
+
results: K(e.blob4) ?? [],
|
|
1102
|
+
logs: K(e.blob5),
|
|
1096
1103
|
created_at: t,
|
|
1097
1104
|
updated_at: n
|
|
1098
1105
|
};
|
|
1099
1106
|
}
|
|
1100
|
-
function
|
|
1107
|
+
function Ae(e) {
|
|
1101
1108
|
return async (t, n) => {
|
|
1102
1109
|
let r = Date.now(), i = new Date(r).toISOString(), a = {
|
|
1103
1110
|
id: n.id,
|
|
@@ -1109,10 +1116,10 @@ function je(e) {
|
|
|
1109
1116
|
created_at: i,
|
|
1110
1117
|
updated_at: i
|
|
1111
1118
|
};
|
|
1112
|
-
return
|
|
1119
|
+
return je(e, t, a, r), a;
|
|
1113
1120
|
};
|
|
1114
1121
|
}
|
|
1115
|
-
function
|
|
1122
|
+
function je(e, t, n, r) {
|
|
1116
1123
|
if (!e.analyticsEngineBinding) {
|
|
1117
1124
|
console.error("Analytics Engine action_executions binding not configured; skipping write");
|
|
1118
1125
|
return;
|
|
@@ -1120,13 +1127,13 @@ function Me(e, t, n, r) {
|
|
|
1120
1127
|
try {
|
|
1121
1128
|
e.analyticsEngineBinding.writeDataPoint({
|
|
1122
1129
|
blobs: [
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
+
q(n.id),
|
|
1131
|
+
q(n.trigger_id),
|
|
1132
|
+
q(n.status),
|
|
1133
|
+
q(J(n.results)),
|
|
1134
|
+
q(J(n.logs)),
|
|
1135
|
+
q(n.created_at),
|
|
1136
|
+
q(n.updated_at)
|
|
1130
1137
|
],
|
|
1131
1138
|
doubles: [r],
|
|
1132
1139
|
indexes: [t.substring(0, 96)]
|
|
@@ -1135,29 +1142,29 @@ function Me(e, t, n, r) {
|
|
|
1135
1142
|
console.error("Failed to write action_execution to Analytics Engine:", e);
|
|
1136
1143
|
}
|
|
1137
1144
|
}
|
|
1138
|
-
function
|
|
1145
|
+
function Me(e) {
|
|
1139
1146
|
return async (t, n) => {
|
|
1140
|
-
let r = await
|
|
1147
|
+
let r = await A(e, `
|
|
1141
1148
|
SELECT *
|
|
1142
|
-
FROM ${
|
|
1143
|
-
WHERE index1 = ${
|
|
1144
|
-
AND blob1 = ${
|
|
1149
|
+
FROM ${M(e.dataset || Ee)}
|
|
1150
|
+
WHERE index1 = ${j(t)}
|
|
1151
|
+
AND blob1 = ${j(n)}
|
|
1145
1152
|
LIMIT 1
|
|
1146
1153
|
`);
|
|
1147
|
-
return r.length === 0 || !r[0] ? null :
|
|
1154
|
+
return r.length === 0 || !r[0] ? null : ke(r[0]);
|
|
1148
1155
|
};
|
|
1149
1156
|
}
|
|
1150
1157
|
//#endregion
|
|
1151
1158
|
//#region src/analytics-engine-action-executions/index.ts
|
|
1152
|
-
function
|
|
1159
|
+
function Y(e) {
|
|
1153
1160
|
return e.analyticsEngineBinding || console.warn("Analytics Engine: No action_executions binding configured. Executions will not be written."), (!e.accountId || !e.apiToken) && console.warn("Analytics Engine: accountId and apiToken are required to read action_executions via the SQL API."), {
|
|
1154
|
-
create:
|
|
1155
|
-
get:
|
|
1161
|
+
create: Ae(e),
|
|
1162
|
+
get: Me(e)
|
|
1156
1163
|
};
|
|
1157
1164
|
}
|
|
1158
1165
|
//#endregion
|
|
1159
1166
|
//#region src/geo/index.ts
|
|
1160
|
-
function
|
|
1167
|
+
function Ne() {
|
|
1161
1168
|
return { async getGeoInfo(e) {
|
|
1162
1169
|
try {
|
|
1163
1170
|
let t = e["cf-ipcountry"], n = e["cf-ipcity"], r = e["cf-iplatitude"], i = e["cf-iplongitude"], a = e["cf-timezone"], o = e["cf-ipcontinent"];
|
|
@@ -1176,7 +1183,7 @@ function Pe() {
|
|
|
1176
1183
|
}
|
|
1177
1184
|
//#endregion
|
|
1178
1185
|
//#region src/rate-limit/index.ts
|
|
1179
|
-
var
|
|
1186
|
+
var Pe = class {
|
|
1180
1187
|
bindings;
|
|
1181
1188
|
constructor(e) {
|
|
1182
1189
|
this.bindings = e;
|
|
@@ -1192,12 +1199,12 @@ var Fe = class {
|
|
|
1192
1199
|
}
|
|
1193
1200
|
}
|
|
1194
1201
|
};
|
|
1195
|
-
function
|
|
1196
|
-
if (e && Object.keys(e).some((t) => e[t])) return new
|
|
1202
|
+
function X(e) {
|
|
1203
|
+
if (e && Object.keys(e).some((t) => e[t])) return new Pe(e);
|
|
1197
1204
|
}
|
|
1198
1205
|
//#endregion
|
|
1199
1206
|
//#region src/code-executor/worker-template.ts
|
|
1200
|
-
function
|
|
1207
|
+
function Z(e) {
|
|
1201
1208
|
return `// Auto-generated AuthHero code hook worker
|
|
1202
1209
|
|
|
1203
1210
|
const fnNames = {
|
|
@@ -1305,7 +1312,7 @@ export default {
|
|
|
1305
1312
|
}
|
|
1306
1313
|
//#endregion
|
|
1307
1314
|
//#region src/code-executor/index.ts
|
|
1308
|
-
var
|
|
1315
|
+
var Q = class {
|
|
1309
1316
|
config;
|
|
1310
1317
|
constructor(e) {
|
|
1311
1318
|
this.config = e;
|
|
@@ -1366,7 +1373,7 @@ var q = class {
|
|
|
1366
1373
|
}
|
|
1367
1374
|
}
|
|
1368
1375
|
async deploy(e, t) {
|
|
1369
|
-
let n = `hook-${e}`, r =
|
|
1376
|
+
let n = `hook-${e}`, r = Z(t), i = `https://api.cloudflare.com/client/v4/accounts/${this.config.accountId}/workers/dispatch/namespaces/${this.config.dispatchNamespace}/scripts/${n}`, a = JSON.stringify({
|
|
1370
1377
|
main_module: "index.js",
|
|
1371
1378
|
compatibility_date: this.config.compatibilityDate ?? "2024-11-20"
|
|
1372
1379
|
}), o = new FormData();
|
|
@@ -1391,12 +1398,12 @@ var q = class {
|
|
|
1391
1398
|
throw Error(`Failed to remove hook worker ${t}: ${r.status} ${e}`);
|
|
1392
1399
|
}
|
|
1393
1400
|
}
|
|
1394
|
-
},
|
|
1401
|
+
}, Fe = Q, Ie = {
|
|
1395
1402
|
"post-user-login": "onExecutePostLogin",
|
|
1396
1403
|
"credentials-exchange": "onExecuteCredentialsExchange",
|
|
1397
1404
|
"pre-user-registration": "onExecutePreUserRegistration",
|
|
1398
1405
|
"post-user-registration": "onExecutePostUserRegistration"
|
|
1399
|
-
},
|
|
1406
|
+
}, Le = {
|
|
1400
1407
|
"post-user-login": {
|
|
1401
1408
|
accessToken: ["setCustomClaim"],
|
|
1402
1409
|
idToken: ["setCustomClaim"],
|
|
@@ -1415,15 +1422,15 @@ var q = class {
|
|
|
1415
1422
|
},
|
|
1416
1423
|
"post-user-registration": {}
|
|
1417
1424
|
};
|
|
1418
|
-
async function
|
|
1425
|
+
async function Re(e) {
|
|
1419
1426
|
let t = new TextEncoder().encode(e), n = await crypto.subtle.digest("SHA-256", t), r = new Uint8Array(n), i = "";
|
|
1420
1427
|
for (let e of r) i += e.toString(16).padStart(2, "0");
|
|
1421
1428
|
return i;
|
|
1422
1429
|
}
|
|
1423
|
-
function
|
|
1430
|
+
function ze(e) {
|
|
1424
1431
|
return `
|
|
1425
|
-
const TRIGGER_FN_NAMES = ${JSON.stringify(
|
|
1426
|
-
const API_SHAPES = ${JSON.stringify(
|
|
1432
|
+
const TRIGGER_FN_NAMES = ${JSON.stringify(Ie)};
|
|
1433
|
+
const API_SHAPES = ${JSON.stringify(Le)};
|
|
1427
1434
|
const MAX_LOG_ENTRIES = 50;
|
|
1428
1435
|
const MAX_LOG_LENGTH = 500;
|
|
1429
1436
|
|
|
@@ -1523,7 +1530,7 @@ export default {
|
|
|
1523
1530
|
};
|
|
1524
1531
|
`;
|
|
1525
1532
|
}
|
|
1526
|
-
var
|
|
1533
|
+
var Be = class {
|
|
1527
1534
|
loader;
|
|
1528
1535
|
compatibilityDate;
|
|
1529
1536
|
constructor(e) {
|
|
@@ -1532,11 +1539,11 @@ var Ve = class {
|
|
|
1532
1539
|
async execute(e) {
|
|
1533
1540
|
let t = Date.now();
|
|
1534
1541
|
try {
|
|
1535
|
-
let t =
|
|
1542
|
+
let t = ze(e.code), n = {
|
|
1536
1543
|
compatibilityDate: this.compatibilityDate,
|
|
1537
1544
|
mainModule: "hook.js",
|
|
1538
1545
|
modules: { "hook.js": t }
|
|
1539
|
-
}, r = e.hookCodeId ? `${e.hookCodeId}-${await
|
|
1546
|
+
}, r = e.hookCodeId ? `${e.hookCodeId}-${await Re(e.code)}` : null;
|
|
1540
1547
|
return await (await (r ? this.loader.get(r, async () => n) : this.loader.load(n)).getEntrypoint().fetch(new Request("https://hook/execute", {
|
|
1541
1548
|
method: "POST",
|
|
1542
1549
|
headers: { "Content-Type": "application/json" },
|
|
@@ -1554,314 +1561,120 @@ var Ve = class {
|
|
|
1554
1561
|
};
|
|
1555
1562
|
}
|
|
1556
1563
|
}
|
|
1557
|
-
}, J = class extends Error {
|
|
1558
|
-
status;
|
|
1559
|
-
endpoint;
|
|
1560
|
-
errors;
|
|
1561
|
-
body;
|
|
1562
|
-
constructor(e, t, n, r = []) {
|
|
1563
|
-
super(`Cloudflare API ${e} ${t}: ${He(n, 256)}`), this.name = "CloudflareApiError", this.status = e, this.endpoint = t, this.body = n, this.errors = r;
|
|
1564
|
-
}
|
|
1565
1564
|
};
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
accountId;
|
|
1571
|
-
apiToken;
|
|
1572
|
-
fetchImpl;
|
|
1573
|
-
timeoutMs;
|
|
1574
|
-
baseUrl;
|
|
1575
|
-
constructor(e) {
|
|
1576
|
-
this.accountId = e.accountId, this.apiToken = e.apiToken, this.fetchImpl = e.fetch ?? ((...e) => fetch(...e)), this.timeoutMs = e.timeoutMs ?? 3e4, this.baseUrl = (e.baseUrl ?? "https://api.cloudflare.com/client/v4").replace(/\/+$/, "");
|
|
1577
|
-
}
|
|
1578
|
-
async createD1Database(e) {
|
|
1579
|
-
let t = `/accounts/${encodeURIComponent(this.accountId)}/d1/database`;
|
|
1580
|
-
return (await this.request("POST", t, { body: JSON.stringify({ name: e }) })).result;
|
|
1581
|
-
}
|
|
1582
|
-
async listD1Databases(e) {
|
|
1583
|
-
let t = e ? `?name=${encodeURIComponent(e)}` : "", n = `/accounts/${encodeURIComponent(this.accountId)}/d1/database${t}`;
|
|
1584
|
-
return (await this.request("GET", n)).result ?? [];
|
|
1585
|
-
}
|
|
1586
|
-
async deleteD1Database(e) {
|
|
1587
|
-
let t = `/accounts/${encodeURIComponent(this.accountId)}/d1/database/${encodeURIComponent(e)}`;
|
|
1588
|
-
await this.request("DELETE", t);
|
|
1589
|
-
}
|
|
1590
|
-
async execD1(e, t) {
|
|
1591
|
-
let n = `/accounts/${encodeURIComponent(this.accountId)}/d1/database/${encodeURIComponent(e)}/query`;
|
|
1592
|
-
return (await this.request("POST", n, { body: JSON.stringify({ sql: t }) })).result ?? [];
|
|
1593
|
-
}
|
|
1594
|
-
async uploadNamespacedScript(e, t, n) {
|
|
1595
|
-
let r = `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(e)}/scripts/${encodeURIComponent(t)}`, i = {
|
|
1596
|
-
main_module: n.mainModule,
|
|
1597
|
-
compatibility_date: n.compatibilityDate,
|
|
1598
|
-
compatibility_flags: n.compatibilityFlags ?? [],
|
|
1599
|
-
bindings: n.bindings ?? [],
|
|
1600
|
-
tags: n.tags
|
|
1601
|
-
}, a = new FormData();
|
|
1602
|
-
a.append("metadata", new Blob([JSON.stringify(i)], { type: "application/json" })), a.append(n.mainModule, new Blob([n.script], { type: "application/javascript+module" }), n.mainModule), await this.request("PUT", r, { body: a });
|
|
1603
|
-
}
|
|
1604
|
-
async deleteNamespacedScript(e, t) {
|
|
1605
|
-
let n = `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(e)}/scripts/${encodeURIComponent(t)}`;
|
|
1606
|
-
await this.request("DELETE", n);
|
|
1607
|
-
}
|
|
1608
|
-
async setNamespacedScriptSecret(e, t, n, r) {
|
|
1609
|
-
let i = `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(e)}/scripts/${encodeURIComponent(t)}/secrets`;
|
|
1610
|
-
await this.request("PUT", i, { body: JSON.stringify({
|
|
1611
|
-
name: n,
|
|
1612
|
-
text: r,
|
|
1613
|
-
type: "secret_text"
|
|
1614
|
-
}) });
|
|
1615
|
-
}
|
|
1616
|
-
async request(e, t, n) {
|
|
1617
|
-
let r = `${this.baseUrl}${t}`, i = new AbortController(), a = setTimeout(() => i.abort(), this.timeoutMs), o = {
|
|
1618
|
-
Authorization: `Bearer ${this.apiToken}`,
|
|
1619
|
-
...n?.headers ?? {}
|
|
1620
|
-
};
|
|
1621
|
-
n?.body && !(n.body instanceof FormData) && !o["Content-Type"] && (o["Content-Type"] = "application/json");
|
|
1622
|
-
let s;
|
|
1623
|
-
try {
|
|
1624
|
-
s = await this.fetchImpl(r, {
|
|
1625
|
-
method: e,
|
|
1626
|
-
headers: o,
|
|
1627
|
-
body: n?.body,
|
|
1628
|
-
signal: i.signal
|
|
1629
|
-
});
|
|
1630
|
-
} finally {
|
|
1631
|
-
clearTimeout(a);
|
|
1632
|
-
}
|
|
1633
|
-
let c = await s.text();
|
|
1634
|
-
if (!s.ok) {
|
|
1635
|
-
let e = [];
|
|
1636
|
-
try {
|
|
1637
|
-
let t = JSON.parse(c);
|
|
1638
|
-
Array.isArray(t.errors) && (e = t.errors);
|
|
1639
|
-
} catch {}
|
|
1640
|
-
throw new J(s.status, t, c, e);
|
|
1641
|
-
}
|
|
1642
|
-
if (!(c === "" || s.status === 204)) return JSON.parse(c);
|
|
1643
|
-
}
|
|
1644
|
-
}, Ue = "{tenant_id}", We = "tenant-{tenant_id}", X = "index.js", Ge = "2026-05-01", Z = 64;
|
|
1645
|
-
function Q(e, t) {
|
|
1646
|
-
return e.replace(/\{tenant_id\}/g, t);
|
|
1647
|
-
}
|
|
1648
|
-
function Ke(e) {
|
|
1649
|
-
if (!(e instanceof J)) return !1;
|
|
1650
|
-
let t = e.body.toLowerCase();
|
|
1651
|
-
return e.status === 409 || t.includes("already exists") || t.includes("name is already taken") || t.includes("already in use");
|
|
1652
|
-
}
|
|
1653
|
-
function $(e) {
|
|
1654
|
-
return e instanceof J ? e.status === 404 : !1;
|
|
1655
|
-
}
|
|
1656
|
-
function qe(e) {
|
|
1657
|
-
let t = new Y({
|
|
1658
|
-
accountId: e.accountId,
|
|
1659
|
-
apiToken: e.apiToken,
|
|
1660
|
-
fetch: e.fetch,
|
|
1661
|
-
timeoutMs: e.timeoutMs
|
|
1662
|
-
}), n = e.scriptNameTemplate ?? Ue, r = e.d1NameTemplate ?? We, i = e.scriptMetadata?.main_module ?? X, a = e.scriptMetadata?.compatibility_date ?? Ge, o = e.scriptMetadata?.compatibility_flags ?? ["nodejs_compat"], s = e.dispatchNamespace, c = e.logger;
|
|
1663
|
-
async function l(e) {
|
|
1664
|
-
let n = (await t.listD1Databases(e)).find((t) => t.name === e);
|
|
1665
|
-
if (n) return {
|
|
1666
|
-
id: n.uuid,
|
|
1667
|
-
created: !1
|
|
1668
|
-
};
|
|
1669
|
-
try {
|
|
1670
|
-
return {
|
|
1671
|
-
id: (await t.createD1Database(e)).uuid,
|
|
1672
|
-
created: !0
|
|
1673
|
-
};
|
|
1674
|
-
} catch (n) {
|
|
1675
|
-
if (!Ke(n)) throw n;
|
|
1676
|
-
let r = (await t.listD1Databases(e)).find((t) => t.name === e);
|
|
1677
|
-
if (r) return {
|
|
1678
|
-
id: r.uuid,
|
|
1679
|
-
created: !1
|
|
1680
|
-
};
|
|
1681
|
-
throw n;
|
|
1682
|
-
}
|
|
1683
|
-
}
|
|
1684
|
-
let u = "_authhero_provisioner_migrations";
|
|
1685
|
-
function d(e, t) {
|
|
1686
|
-
let n = [];
|
|
1687
|
-
for (let r of e) for (let e of r.results ?? []) if (e && typeof e == "object" && t in e) {
|
|
1688
|
-
let r = e[t];
|
|
1689
|
-
typeof r == "string" && n.push(r);
|
|
1690
|
-
}
|
|
1691
|
-
return n;
|
|
1692
|
-
}
|
|
1693
|
-
async function f(e) {
|
|
1694
|
-
return d(await t.execD1(e, `SELECT name FROM sqlite_master WHERE type='table' AND name='${u}';`), "name").length > 0;
|
|
1695
|
-
}
|
|
1696
|
-
async function p(e) {
|
|
1697
|
-
await t.execD1(e, `CREATE TABLE IF NOT EXISTS ${u} (name TEXT PRIMARY KEY, applied_at TEXT NOT NULL);`);
|
|
1698
|
-
}
|
|
1699
|
-
async function m(e) {
|
|
1700
|
-
let n = await t.execD1(e, `SELECT name FROM ${u};`);
|
|
1701
|
-
return new Set(d(n, "name"));
|
|
1702
|
-
}
|
|
1703
|
-
function h(e) {
|
|
1704
|
-
return e.replace(/'/g, "''");
|
|
1705
|
-
}
|
|
1706
|
-
async function g(e, n) {
|
|
1707
|
-
let r = (/* @__PURE__ */ new Date()).toISOString();
|
|
1708
|
-
await t.execD1(e, `INSERT OR IGNORE INTO ${u} (name, applied_at) VALUES ('${h(n)}', '${h(r)}');`);
|
|
1709
|
-
}
|
|
1710
|
-
async function _(n) {
|
|
1711
|
-
let r = await m(n);
|
|
1712
|
-
for (let i of e.migrations) if (!r.has(i.name)) {
|
|
1713
|
-
try {
|
|
1714
|
-
await t.execD1(n, i.sql);
|
|
1715
|
-
} catch (e) {
|
|
1716
|
-
throw e instanceof Error ? Error(`Failed to apply migration "${i.name}" to D1 ${n}: ${e.message}`, { cause: e }) : e;
|
|
1717
|
-
}
|
|
1718
|
-
await g(n, i.name);
|
|
1719
|
-
}
|
|
1720
|
-
}
|
|
1721
|
-
async function v(n, r) {
|
|
1722
|
-
let c = [
|
|
1723
|
-
{
|
|
1724
|
-
type: "d1",
|
|
1725
|
-
name: "AUTH_DB",
|
|
1726
|
-
id: r
|
|
1727
|
-
},
|
|
1728
|
-
{
|
|
1729
|
-
type: "plain_text",
|
|
1730
|
-
name: "CONTROL_PLANE_BASE_URL",
|
|
1731
|
-
text: e.controlPlaneBaseUrl
|
|
1732
|
-
},
|
|
1733
|
-
...e.extraBindings ?? []
|
|
1734
|
-
];
|
|
1735
|
-
await t.uploadNamespacedScript(s, n, {
|
|
1736
|
-
script: e.tenantWorkerScript,
|
|
1737
|
-
mainModule: i,
|
|
1738
|
-
compatibilityDate: a,
|
|
1739
|
-
compatibilityFlags: o,
|
|
1740
|
-
bindings: c,
|
|
1741
|
-
tags: ["authhero-tenant", `tenant:${n}`]
|
|
1742
|
-
});
|
|
1743
|
-
}
|
|
1744
|
-
async function y(n, r) {
|
|
1745
|
-
let i = await e.secrets(r);
|
|
1746
|
-
for (let [e, r] of Object.entries(i)) await t.setNamespacedScriptSecret(s, n, e, r);
|
|
1747
|
-
}
|
|
1565
|
+
//#endregion
|
|
1566
|
+
//#region src/wfp-provisioner/provisioner.ts
|
|
1567
|
+
function Ve(e) {
|
|
1568
|
+
let t = n(e);
|
|
1748
1569
|
return {
|
|
1749
|
-
async onProvision(
|
|
1750
|
-
let
|
|
1751
|
-
|
|
1752
|
-
let { id: s, created: u } = await l(a), d = u ? !1 : await f(s);
|
|
1753
|
-
if (u || d) await p(s), await _(s);
|
|
1754
|
-
else {
|
|
1755
|
-
c?.warn(`D1 "${a}" has no migration-tracking table — assuming it predates tracking and is fully migrated; backfilling the tracking table and skipping migrations.`), await p(s);
|
|
1756
|
-
for (let t of e.migrations) await g(s, t.name);
|
|
1757
|
-
}
|
|
1758
|
-
return await v(i, s), await y(i, t), {
|
|
1570
|
+
async onProvision(e) {
|
|
1571
|
+
let { scriptName: n, databaseName: r } = t.names(e), { databaseVersion: i, bundleConfiguration: a, workerVersion: o } = t.validate(), { id: s, created: c } = await t.findOrCreateDatabase(r);
|
|
1572
|
+
return await t.applyMigrations(s, c), await t.uploadScript(n, s), await t.uploadSecrets(n, e), {
|
|
1759
1573
|
d1DatabaseId: s,
|
|
1760
|
-
scriptName:
|
|
1761
|
-
d1Name:
|
|
1762
|
-
bundleConfiguration:
|
|
1763
|
-
workerVersion:
|
|
1764
|
-
databaseVersion:
|
|
1574
|
+
scriptName: n,
|
|
1575
|
+
d1Name: r,
|
|
1576
|
+
bundleConfiguration: a,
|
|
1577
|
+
workerVersion: o,
|
|
1578
|
+
databaseVersion: i
|
|
1765
1579
|
};
|
|
1766
1580
|
},
|
|
1767
1581
|
async onDeprovision(e) {
|
|
1768
|
-
|
|
1769
|
-
try {
|
|
1770
|
-
await t.deleteNamespacedScript(s, i);
|
|
1771
|
-
} catch (e) {
|
|
1772
|
-
$(e) || o.push(e);
|
|
1773
|
-
}
|
|
1774
|
-
try {
|
|
1775
|
-
let e = (await t.listD1Databases(a)).find((e) => e.name === a);
|
|
1776
|
-
if (e) try {
|
|
1777
|
-
await t.deleteD1Database(e.uuid);
|
|
1778
|
-
} catch (e) {
|
|
1779
|
-
$(e) || o.push(e);
|
|
1780
|
-
}
|
|
1781
|
-
} catch (e) {
|
|
1782
|
-
o.push(e);
|
|
1783
|
-
}
|
|
1784
|
-
if (o.length > 0) {
|
|
1785
|
-
let t = o.map((e) => e instanceof Error ? e.message : String(e)).join("; ");
|
|
1786
|
-
throw Error(`Deprovision of tenant "${e}" had ${o.length} failure(s): ${t}`, { cause: o[0] });
|
|
1787
|
-
}
|
|
1582
|
+
await t.deprovision(e);
|
|
1788
1583
|
}
|
|
1789
1584
|
};
|
|
1790
1585
|
}
|
|
1791
1586
|
//#endregion
|
|
1792
1587
|
//#region src/wfp-provisioner/tenant-hook.ts
|
|
1793
|
-
function
|
|
1588
|
+
function He(e) {
|
|
1794
1589
|
return e.deployment_type === "wfp";
|
|
1795
1590
|
}
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
let t
|
|
1799
|
-
|
|
1800
|
-
|
|
1591
|
+
var Ue = 2048;
|
|
1592
|
+
function $(e) {
|
|
1593
|
+
let t;
|
|
1594
|
+
if (e instanceof Error) t = e.message;
|
|
1595
|
+
else try {
|
|
1596
|
+
t = String(e);
|
|
1597
|
+
} catch {
|
|
1598
|
+
t = Object.prototype.toString.call(e);
|
|
1599
|
+
}
|
|
1600
|
+
return t.slice(0, Ue);
|
|
1801
1601
|
}
|
|
1802
|
-
function
|
|
1803
|
-
let { provisioner: t, tenants: n, syncDefaults:
|
|
1804
|
-
async function
|
|
1805
|
-
let r = t instanceof Error ? t.message : String(t);
|
|
1602
|
+
function We(e) {
|
|
1603
|
+
let { provisioner: t, tenants: n, syncDefaults: i } = e, a = e.shouldProvision ?? He, o = e.logger;
|
|
1604
|
+
async function s(e, t) {
|
|
1806
1605
|
try {
|
|
1807
1606
|
await n.update(e, {
|
|
1808
1607
|
provisioning_state: "failed",
|
|
1809
|
-
provisioning_error:
|
|
1608
|
+
provisioning_error: $(t),
|
|
1810
1609
|
provisioning_state_changed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1811
1610
|
});
|
|
1812
1611
|
} catch (t) {
|
|
1813
|
-
|
|
1612
|
+
o?.warn(`Failed to write provisioning_state="failed" for tenant ${e}:`, t);
|
|
1814
1613
|
}
|
|
1815
1614
|
}
|
|
1816
|
-
async function
|
|
1817
|
-
let
|
|
1615
|
+
async function c(e, a) {
|
|
1616
|
+
let c = async (t, n, r) => {
|
|
1617
|
+
if (a) try {
|
|
1618
|
+
await a(t, n, r);
|
|
1619
|
+
} catch (n) {
|
|
1620
|
+
o?.warn(`Failed to report provisioning step "${t}" for tenant ${e}:`, n);
|
|
1621
|
+
}
|
|
1622
|
+
};
|
|
1623
|
+
await c("provision-resources", "started");
|
|
1624
|
+
let l;
|
|
1818
1625
|
try {
|
|
1819
|
-
|
|
1626
|
+
l = await t.onProvision(e);
|
|
1820
1627
|
} catch (t) {
|
|
1821
|
-
throw await
|
|
1628
|
+
throw await c("provision-resources", "failed", { message: $(t) }), await s(e, t), t;
|
|
1822
1629
|
}
|
|
1823
|
-
let
|
|
1824
|
-
d1_database_id:
|
|
1825
|
-
worker_script_name:
|
|
1826
|
-
bundle_configuration:
|
|
1827
|
-
worker_version:
|
|
1828
|
-
database_version:
|
|
1630
|
+
let u = {
|
|
1631
|
+
d1_database_id: l.d1DatabaseId,
|
|
1632
|
+
worker_script_name: l.scriptName,
|
|
1633
|
+
bundle_configuration: l.bundleConfiguration,
|
|
1634
|
+
worker_version: l.workerVersion,
|
|
1635
|
+
database_version: l.databaseVersion
|
|
1829
1636
|
};
|
|
1637
|
+
await c("provision-resources", "succeeded", { ...u });
|
|
1830
1638
|
try {
|
|
1831
|
-
if (
|
|
1832
|
-
|
|
1833
|
-
|
|
1639
|
+
if (i) {
|
|
1640
|
+
await c("seed-defaults", "started");
|
|
1641
|
+
try {
|
|
1642
|
+
let t = r(await i(e));
|
|
1643
|
+
if (t.length > 0) throw Error(`sync-defaults seed reported ${t.length} error(s): ${t.join("; ")}`);
|
|
1644
|
+
await c("seed-defaults", "succeeded");
|
|
1645
|
+
} catch (e) {
|
|
1646
|
+
throw await c("seed-defaults", "failed", { message: $(e) }), e;
|
|
1647
|
+
}
|
|
1834
1648
|
}
|
|
1835
1649
|
await n.update(e, {
|
|
1836
|
-
...
|
|
1650
|
+
...u,
|
|
1837
1651
|
provisioning_state: "ready",
|
|
1838
1652
|
provisioning_error: void 0,
|
|
1839
1653
|
provisioning_state_changed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1840
1654
|
});
|
|
1841
1655
|
} catch (t) {
|
|
1842
|
-
let r = t instanceof Error ? t.message : String(t);
|
|
1843
1656
|
try {
|
|
1844
1657
|
await n.update(e, {
|
|
1845
|
-
...
|
|
1658
|
+
...u,
|
|
1846
1659
|
provisioning_state: "failed",
|
|
1847
|
-
provisioning_error:
|
|
1660
|
+
provisioning_error: $(t),
|
|
1848
1661
|
provisioning_state_changed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1849
1662
|
});
|
|
1850
1663
|
} catch (t) {
|
|
1851
|
-
|
|
1664
|
+
o?.warn(`Failed to write provisioning_state="failed" for tenant ${e}:`, t);
|
|
1852
1665
|
}
|
|
1853
1666
|
throw t;
|
|
1854
1667
|
}
|
|
1855
1668
|
}
|
|
1856
1669
|
return {
|
|
1857
|
-
async onProvision(e) {
|
|
1858
|
-
let
|
|
1859
|
-
|
|
1670
|
+
async onProvision(e, t) {
|
|
1671
|
+
let r = await n.get(e);
|
|
1672
|
+
r && a(r) && await c(e, t);
|
|
1860
1673
|
},
|
|
1861
|
-
async onUpgrade(e) {
|
|
1862
|
-
let
|
|
1863
|
-
if (!
|
|
1864
|
-
if (!
|
|
1674
|
+
async onUpgrade(e, t) {
|
|
1675
|
+
let r = await n.get(e);
|
|
1676
|
+
if (!r) throw Error(`Cannot upgrade tenant "${e}": not found.`);
|
|
1677
|
+
if (!a(r)) throw Error(`Cannot upgrade tenant "${e}": not a WFP-provisioned tenant.`);
|
|
1865
1678
|
try {
|
|
1866
1679
|
await n.update(e, {
|
|
1867
1680
|
provisioning_state: "pending",
|
|
@@ -1869,35 +1682,35 @@ function Xe(e) {
|
|
|
1869
1682
|
provisioning_state_changed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1870
1683
|
});
|
|
1871
1684
|
} catch (t) {
|
|
1872
|
-
|
|
1685
|
+
o?.warn(`Failed to write provisioning_state="pending" for tenant ${e}:`, t);
|
|
1873
1686
|
}
|
|
1874
|
-
await
|
|
1687
|
+
await c(e, t);
|
|
1875
1688
|
},
|
|
1876
1689
|
async onDeprovision(e) {
|
|
1877
1690
|
let r = await n.get(e);
|
|
1878
|
-
r && !
|
|
1691
|
+
r && !a(r) || await t.onDeprovision(e);
|
|
1879
1692
|
}
|
|
1880
1693
|
};
|
|
1881
1694
|
}
|
|
1882
1695
|
//#endregion
|
|
1883
1696
|
//#region src/wfp-provisioner/wfp-forward.ts
|
|
1884
|
-
var
|
|
1885
|
-
function
|
|
1697
|
+
var Ge = "DISPATCHER", Ke = "tenant-{tenant_id}-auth";
|
|
1698
|
+
function qe(e) {
|
|
1886
1699
|
return typeof e == "object" && !!e && "get" in e && typeof Reflect.get(e, "get") == "function";
|
|
1887
1700
|
}
|
|
1888
|
-
function
|
|
1701
|
+
function Je(e, t) {
|
|
1889
1702
|
return e.replace(/\{tenant_id\}/g, t);
|
|
1890
1703
|
}
|
|
1891
|
-
function
|
|
1892
|
-
let { tenants: t, controlPlaneTenantId: n, dispatcherBinding: r =
|
|
1704
|
+
function Ye(e) {
|
|
1705
|
+
let { tenants: t, controlPlaneTenantId: n, dispatcherBinding: r = Ge, scriptNameTemplate: i = Ke, resolveTenantId: a = (e) => e.req.header("tenant-id") } = e;
|
|
1893
1706
|
return async (e, o) => {
|
|
1894
1707
|
let s = await a(e);
|
|
1895
1708
|
if (!s || s === n) return o();
|
|
1896
1709
|
let c = await t.get(s);
|
|
1897
1710
|
if (!c || c.deployment_type !== "wfp" || c.provisioning_state && c.provisioning_state !== "ready") return o();
|
|
1898
1711
|
let l = Reflect.get(e.env ?? {}, r);
|
|
1899
|
-
if (
|
|
1900
|
-
let u =
|
|
1712
|
+
if (!qe(l)) return o();
|
|
1713
|
+
let u = Je(i, s), d;
|
|
1901
1714
|
try {
|
|
1902
1715
|
d = await l.get(u).fetch(e.req.raw);
|
|
1903
1716
|
} catch (t) {
|
|
@@ -1920,19 +1733,19 @@ function tt(e) {
|
|
|
1920
1733
|
}
|
|
1921
1734
|
//#endregion
|
|
1922
1735
|
//#region src/index.ts
|
|
1923
|
-
function
|
|
1736
|
+
function Xe(e) {
|
|
1924
1737
|
let t = {
|
|
1925
|
-
customDomains:
|
|
1926
|
-
cache:
|
|
1738
|
+
customDomains: ee(e),
|
|
1739
|
+
cache: ne({
|
|
1927
1740
|
...e.cacheName && { cacheName: e.cacheName },
|
|
1928
1741
|
...e.defaultTtlSeconds !== void 0 && { defaultTtlSeconds: e.defaultTtlSeconds },
|
|
1929
1742
|
...e.keyPrefix && { keyPrefix: e.keyPrefix }
|
|
1930
1743
|
}),
|
|
1931
|
-
geo:
|
|
1744
|
+
geo: Ne()
|
|
1932
1745
|
};
|
|
1933
|
-
e.r2SqlLogs ? t.logs =
|
|
1934
|
-
let n =
|
|
1746
|
+
e.r2SqlLogs ? t.logs = k(e.r2SqlLogs) : e.analyticsEngineLogs && (t.logs = W(e.analyticsEngineLogs)), e.analyticsEngineLogs && (t.analytics = U(e.analyticsEngineLogs)), e.analyticsEngineActionExecutions && (t.actionExecutions = Y(e.analyticsEngineActionExecutions));
|
|
1747
|
+
let n = X(e.rateLimitBindings);
|
|
1935
1748
|
return n && (t.rateLimit = n), t;
|
|
1936
1749
|
}
|
|
1937
1750
|
//#endregion
|
|
1938
|
-
export {
|
|
1751
|
+
export { t as CloudflareApiClient, e as CloudflareApiError, Fe as CloudflareCodeExecutor, Q as DispatchNamespaceCodeExecutor, Be as WorkerLoaderCodeExecutor, Y as createAnalyticsEngineActionExecutionsAdapter, U as createAnalyticsEngineAnalyticsAdapter, W as createAnalyticsEngineLogsAdapter, _e as createAnalyticsEngineStatsAdapter, X as createCloudflareRateLimitAdapter, Ve as createCloudflareWfpD1Provisioner, k as createR2SQLLogsAdapter, le as createR2SQLStatsAdapter, Ye as createWfpForwardMiddleware, n as createWfpProvisionerSteps, We as createWfpTenantProvisioningHook, Xe as default, Z as generateWorkerScript };
|