@exulu/backend 3.5.1 → 3.6.0
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/index.cjs +78 -3
- package/dist/index.js +78 -3
- package/ee/python/requirements.txt +12 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -11452,6 +11452,52 @@ var usersSchema = {
|
|
|
11452
11452
|
// triggered by the key with project_id_ for LiteLLM cost attribution.
|
|
11453
11453
|
name: "project",
|
|
11454
11454
|
type: "uuid"
|
|
11455
|
+
},
|
|
11456
|
+
// ── Lead capture (see lead-capture spec §5) ─────────────────────────────
|
|
11457
|
+
// Consent must be *provable* under Art. 7(1) GDPR: who agreed, when, and
|
|
11458
|
+
// to which wording. Hence a timestamp per consent and a version string
|
|
11459
|
+
// pointing at the exact text that was shown.
|
|
11460
|
+
{
|
|
11461
|
+
// Current state of the optional marketing consent.
|
|
11462
|
+
name: "marketing_consent",
|
|
11463
|
+
type: "boolean",
|
|
11464
|
+
default: false
|
|
11465
|
+
},
|
|
11466
|
+
{
|
|
11467
|
+
// When marketing consent was GIVEN.
|
|
11468
|
+
name: "marketing_consent_at",
|
|
11469
|
+
type: "date"
|
|
11470
|
+
},
|
|
11471
|
+
{
|
|
11472
|
+
// When marketing consent was WITHDRAWN. Deliberately a separate column:
|
|
11473
|
+
// overwriting marketing_consent_at on withdrawal would destroy the grant
|
|
11474
|
+
// time, and with it the ability to prove the order of events if someone
|
|
11475
|
+
// later claims they were mailed after withdrawing.
|
|
11476
|
+
name: "marketing_consent_withdrawn_at",
|
|
11477
|
+
type: "date"
|
|
11478
|
+
},
|
|
11479
|
+
{
|
|
11480
|
+
// When the mandatory storage/processing consent was given.
|
|
11481
|
+
name: "processing_consent_at",
|
|
11482
|
+
type: "date"
|
|
11483
|
+
},
|
|
11484
|
+
{
|
|
11485
|
+
// When the user asked for erasure (Art. 17). The row survives so the
|
|
11486
|
+
// one-month deadline stays queryable even if the notification mail fails.
|
|
11487
|
+
name: "erasure_requested_at",
|
|
11488
|
+
type: "date"
|
|
11489
|
+
},
|
|
11490
|
+
{
|
|
11491
|
+
// Where the lead came from, e.g. "eu-ai-act-bot".
|
|
11492
|
+
name: "signup_source",
|
|
11493
|
+
type: "text"
|
|
11494
|
+
},
|
|
11495
|
+
{
|
|
11496
|
+
// Version of the consent wording that was actually displayed, e.g.
|
|
11497
|
+
// "2026-08-18". The wording itself lives in the frontend repo under
|
|
11498
|
+
// version control; this column points at it.
|
|
11499
|
+
name: "consent_version",
|
|
11500
|
+
type: "text"
|
|
11455
11501
|
}
|
|
11456
11502
|
]
|
|
11457
11503
|
};
|
|
@@ -11760,6 +11806,32 @@ var addCoreFields = (schema) => {
|
|
|
11760
11806
|
}
|
|
11761
11807
|
return schema;
|
|
11762
11808
|
};
|
|
11809
|
+
var otpSendAttemptsSchema = {
|
|
11810
|
+
type: "otp_send_attempts",
|
|
11811
|
+
name: {
|
|
11812
|
+
plural: "otp_send_attempts",
|
|
11813
|
+
singular: "otp_send_attempt"
|
|
11814
|
+
},
|
|
11815
|
+
fields: [
|
|
11816
|
+
{
|
|
11817
|
+
name: "key",
|
|
11818
|
+
type: "text",
|
|
11819
|
+
index: true,
|
|
11820
|
+
unique: true,
|
|
11821
|
+
required: true
|
|
11822
|
+
},
|
|
11823
|
+
{
|
|
11824
|
+
name: "count",
|
|
11825
|
+
type: "number",
|
|
11826
|
+
required: true
|
|
11827
|
+
},
|
|
11828
|
+
{
|
|
11829
|
+
name: "window_start",
|
|
11830
|
+
type: "date",
|
|
11831
|
+
required: true
|
|
11832
|
+
}
|
|
11833
|
+
]
|
|
11834
|
+
};
|
|
11763
11835
|
var coreSchemas = {
|
|
11764
11836
|
get: () => {
|
|
11765
11837
|
const license = checkLicense();
|
|
@@ -11780,7 +11852,8 @@ var coreSchemas = {
|
|
|
11780
11852
|
contextPresetsSchema: () => addCoreFields(contextPresetsSchema),
|
|
11781
11853
|
sharedArtifactsSchema: () => addCoreFields(sharedArtifactsSchema),
|
|
11782
11854
|
transcriptionJobsSchema: () => addCoreFields(transcriptionJobsSchema),
|
|
11783
|
-
imageGenerationsSchema: () => addCoreFields(imageGenerationsSchema)
|
|
11855
|
+
imageGenerationsSchema: () => addCoreFields(imageGenerationsSchema),
|
|
11856
|
+
otpSendAttemptsSchema: () => addCoreFields(otpSendAttemptsSchema)
|
|
11784
11857
|
};
|
|
11785
11858
|
if (license["agent-feedback"]) {
|
|
11786
11859
|
schemas.feedbackSchema = () => addCoreFields(feedbackSchema);
|
|
@@ -31560,7 +31633,8 @@ var {
|
|
|
31560
31633
|
promptFavoritesSchema: promptFavoritesSchema3,
|
|
31561
31634
|
transcriptionJobsSchema: transcriptionJobsSchema3,
|
|
31562
31635
|
imageGenerationsSchema: imageGenerationsSchema2,
|
|
31563
|
-
sharedArtifactsSchema: sharedArtifactsSchema2
|
|
31636
|
+
sharedArtifactsSchema: sharedArtifactsSchema2,
|
|
31637
|
+
otpSendAttemptsSchema: otpSendAttemptsSchema2
|
|
31564
31638
|
} = coreSchemas.get();
|
|
31565
31639
|
var addMissingFields = async (knex, tableName, fields, skipFields = []) => {
|
|
31566
31640
|
for (const field of fields) {
|
|
@@ -31631,7 +31705,8 @@ var up = async function(knex) {
|
|
|
31631
31705
|
variablesSchema3(),
|
|
31632
31706
|
skillsSchema3(),
|
|
31633
31707
|
workflowTemplatesSchema3(),
|
|
31634
|
-
workflowTriggersSchema2()
|
|
31708
|
+
workflowTriggersSchema2(),
|
|
31709
|
+
otpSendAttemptsSchema2()
|
|
31635
31710
|
];
|
|
31636
31711
|
const createTable = async (schema) => {
|
|
31637
31712
|
if (!await knex.schema.hasTable(schema.name.plural)) {
|
package/dist/index.js
CHANGED
|
@@ -2568,6 +2568,52 @@ var usersSchema = {
|
|
|
2568
2568
|
// triggered by the key with project_id_ for LiteLLM cost attribution.
|
|
2569
2569
|
name: "project",
|
|
2570
2570
|
type: "uuid"
|
|
2571
|
+
},
|
|
2572
|
+
// ── Lead capture (see lead-capture spec §5) ─────────────────────────────
|
|
2573
|
+
// Consent must be *provable* under Art. 7(1) GDPR: who agreed, when, and
|
|
2574
|
+
// to which wording. Hence a timestamp per consent and a version string
|
|
2575
|
+
// pointing at the exact text that was shown.
|
|
2576
|
+
{
|
|
2577
|
+
// Current state of the optional marketing consent.
|
|
2578
|
+
name: "marketing_consent",
|
|
2579
|
+
type: "boolean",
|
|
2580
|
+
default: false
|
|
2581
|
+
},
|
|
2582
|
+
{
|
|
2583
|
+
// When marketing consent was GIVEN.
|
|
2584
|
+
name: "marketing_consent_at",
|
|
2585
|
+
type: "date"
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
// When marketing consent was WITHDRAWN. Deliberately a separate column:
|
|
2589
|
+
// overwriting marketing_consent_at on withdrawal would destroy the grant
|
|
2590
|
+
// time, and with it the ability to prove the order of events if someone
|
|
2591
|
+
// later claims they were mailed after withdrawing.
|
|
2592
|
+
name: "marketing_consent_withdrawn_at",
|
|
2593
|
+
type: "date"
|
|
2594
|
+
},
|
|
2595
|
+
{
|
|
2596
|
+
// When the mandatory storage/processing consent was given.
|
|
2597
|
+
name: "processing_consent_at",
|
|
2598
|
+
type: "date"
|
|
2599
|
+
},
|
|
2600
|
+
{
|
|
2601
|
+
// When the user asked for erasure (Art. 17). The row survives so the
|
|
2602
|
+
// one-month deadline stays queryable even if the notification mail fails.
|
|
2603
|
+
name: "erasure_requested_at",
|
|
2604
|
+
type: "date"
|
|
2605
|
+
},
|
|
2606
|
+
{
|
|
2607
|
+
// Where the lead came from, e.g. "eu-ai-act-bot".
|
|
2608
|
+
name: "signup_source",
|
|
2609
|
+
type: "text"
|
|
2610
|
+
},
|
|
2611
|
+
{
|
|
2612
|
+
// Version of the consent wording that was actually displayed, e.g.
|
|
2613
|
+
// "2026-08-18". The wording itself lives in the frontend repo under
|
|
2614
|
+
// version control; this column points at it.
|
|
2615
|
+
name: "consent_version",
|
|
2616
|
+
type: "text"
|
|
2571
2617
|
}
|
|
2572
2618
|
]
|
|
2573
2619
|
};
|
|
@@ -2876,6 +2922,32 @@ var addCoreFields = (schema) => {
|
|
|
2876
2922
|
}
|
|
2877
2923
|
return schema;
|
|
2878
2924
|
};
|
|
2925
|
+
var otpSendAttemptsSchema = {
|
|
2926
|
+
type: "otp_send_attempts",
|
|
2927
|
+
name: {
|
|
2928
|
+
plural: "otp_send_attempts",
|
|
2929
|
+
singular: "otp_send_attempt"
|
|
2930
|
+
},
|
|
2931
|
+
fields: [
|
|
2932
|
+
{
|
|
2933
|
+
name: "key",
|
|
2934
|
+
type: "text",
|
|
2935
|
+
index: true,
|
|
2936
|
+
unique: true,
|
|
2937
|
+
required: true
|
|
2938
|
+
},
|
|
2939
|
+
{
|
|
2940
|
+
name: "count",
|
|
2941
|
+
type: "number",
|
|
2942
|
+
required: true
|
|
2943
|
+
},
|
|
2944
|
+
{
|
|
2945
|
+
name: "window_start",
|
|
2946
|
+
type: "date",
|
|
2947
|
+
required: true
|
|
2948
|
+
}
|
|
2949
|
+
]
|
|
2950
|
+
};
|
|
2879
2951
|
var coreSchemas = {
|
|
2880
2952
|
get: () => {
|
|
2881
2953
|
const license = checkLicense();
|
|
@@ -2896,7 +2968,8 @@ var coreSchemas = {
|
|
|
2896
2968
|
contextPresetsSchema: () => addCoreFields(contextPresetsSchema),
|
|
2897
2969
|
sharedArtifactsSchema: () => addCoreFields(sharedArtifactsSchema),
|
|
2898
2970
|
transcriptionJobsSchema: () => addCoreFields(transcriptionJobsSchema),
|
|
2899
|
-
imageGenerationsSchema: () => addCoreFields(imageGenerationsSchema)
|
|
2971
|
+
imageGenerationsSchema: () => addCoreFields(imageGenerationsSchema),
|
|
2972
|
+
otpSendAttemptsSchema: () => addCoreFields(otpSendAttemptsSchema)
|
|
2900
2973
|
};
|
|
2901
2974
|
if (license["agent-feedback"]) {
|
|
2902
2975
|
schemas.feedbackSchema = () => addCoreFields(feedbackSchema);
|
|
@@ -22174,7 +22247,8 @@ var {
|
|
|
22174
22247
|
promptFavoritesSchema: promptFavoritesSchema3,
|
|
22175
22248
|
transcriptionJobsSchema: transcriptionJobsSchema3,
|
|
22176
22249
|
imageGenerationsSchema: imageGenerationsSchema2,
|
|
22177
|
-
sharedArtifactsSchema: sharedArtifactsSchema2
|
|
22250
|
+
sharedArtifactsSchema: sharedArtifactsSchema2,
|
|
22251
|
+
otpSendAttemptsSchema: otpSendAttemptsSchema2
|
|
22178
22252
|
} = coreSchemas.get();
|
|
22179
22253
|
var addMissingFields = async (knex, tableName, fields, skipFields = []) => {
|
|
22180
22254
|
for (const field of fields) {
|
|
@@ -22245,7 +22319,8 @@ var up = async function(knex) {
|
|
|
22245
22319
|
variablesSchema3(),
|
|
22246
22320
|
skillsSchema3(),
|
|
22247
22321
|
workflowTemplatesSchema3(),
|
|
22248
|
-
workflowTriggersSchema2()
|
|
22322
|
+
workflowTriggersSchema2(),
|
|
22323
|
+
otpSendAttemptsSchema2()
|
|
22249
22324
|
];
|
|
22250
22325
|
const createTable = async (schema) => {
|
|
22251
22326
|
if (!await knex.schema.hasTable(schema.name.plural)) {
|
|
@@ -24,17 +24,26 @@ pyannote.audio>=3.3.0
|
|
|
24
24
|
# Belt-and-suspenders: keep huggingface_hub on the 0.x line so pyannote 3.x's
|
|
25
25
|
# `use_auth_token=` calls keep working (1.x removed that kwarg → diarization off).
|
|
26
26
|
huggingface_hub<1.0
|
|
27
|
-
fastapi
|
|
28
27
|
uvicorn
|
|
29
28
|
python-multipart
|
|
30
29
|
requests
|
|
31
30
|
# LiteLLM proxy — only used when EXULU_USE_LITELLM=true. Always installed so
|
|
32
31
|
# the dep is ready when the env var is flipped. Pinned to a tested version;
|
|
33
32
|
# upgrade deliberately.
|
|
34
|
-
litellm[proxy]==1.
|
|
33
|
+
litellm[proxy]==1.97.0
|
|
34
|
+
# FastAPI ceiling — NOT cosmetic. litellm 1.97.0 declares fastapi>=0.136.3,<1.0
|
|
35
|
+
# but imports the private `get_flat_dependant` from fastapi.dependencies.utils
|
|
36
|
+
# (proxy/management_endpoints/management_v1/common.py:7), which FastAPI deleted
|
|
37
|
+
# in 0.140.7. Any resolve that picks 0.140.7+ yields a proxy that cannot start:
|
|
38
|
+
# "ImportError: cannot import name 'get_flat_dependant'". 0.140.6 is the last
|
|
39
|
+
# version that still has it. NOTE: fastapi is also a first-party dependency of
|
|
40
|
+
# ee/python/transcription/server.py (not just a litellm transitive). Once
|
|
41
|
+
# litellm ships its own ceiling, replace this constrained pin with a bare
|
|
42
|
+
# `fastapi` line — do not delete it entirely.
|
|
43
|
+
fastapi>=0.136.3,<0.140.7 # to confirm this pin is still needed: grep -r get_flat_dependant $(pip show litellm | awk '/Location/{print $2}')/litellm/proxy/
|
|
35
44
|
# Prisma Python client — required by LiteLLM proxy whenever a `database_url`
|
|
36
45
|
# is set in config.litellm.yaml (used for user/budget tracking, key
|
|
37
|
-
# management, etc.). NOT included in litellm[proxy] in 1.
|
|
46
|
+
# management, etc.). NOT included in litellm[proxy] in 1.97.0, hence the
|
|
38
47
|
# separate pin. setup.sh runs `prisma generate` against LiteLLM's bundled
|
|
39
48
|
# schema after pip install so the Python client module is materialized.
|
|
40
49
|
prisma==0.15.0
|