@prosopo/env 3.2.28 → 3.5.7
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/.turbo/turbo-build$colon$cjs.log +11 -7
- package/.turbo/turbo-build$colon$tsc.log +59 -0
- package/.turbo/turbo-build.log +16 -8
- package/CHANGELOG.md +506 -0
- package/dist/cjs/env.cjs +23 -6
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/provider.cjs +25 -1
- package/dist/env.d.ts +29 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +23 -6
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -0
- package/dist/provider.d.ts +7 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +26 -2
- package/dist/provider.js.map +1 -0
- package/dist/tests/env.maintenance.unit.test.d.ts +2 -0
- package/dist/tests/env.maintenance.unit.test.d.ts.map +1 -0
- package/dist/tests/env.maintenance.unit.test.js +119 -0
- package/dist/tests/env.maintenance.unit.test.js.map +1 -0
- package/package.json +19 -11
- package/vite.cjs.config.ts +1 -1
- package/vite.esm.config.ts +1 -1
- package/vite.test.config.ts +2 -16
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/env@3.
|
|
2
|
+
> @prosopo/env@3.5.7 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -7,9 +7,11 @@ ViteCommonJSConfig: .
|
|
|
7
7
|
tsConfigPaths: [
|
|
8
8
|
'/home/runner/work/captcha/captcha/packages/common/tsconfig.json',
|
|
9
9
|
'/home/runner/work/captcha/captcha/packages/locale/tsconfig.json',
|
|
10
|
-
'/home/runner/work/captcha/captcha/packages/
|
|
10
|
+
'/home/runner/work/captcha/captcha/packages/logger/tsconfig.json',
|
|
11
11
|
'/home/runner/work/captcha/captcha/packages/util/tsconfig.json',
|
|
12
|
+
'/home/runner/work/captcha/captcha/packages/types/tsconfig.json',
|
|
12
13
|
'/home/runner/work/captcha/captcha/packages/util-crypto/tsconfig.json',
|
|
14
|
+
'/home/runner/work/captcha/captcha/packages/ipinfo/tsconfig.json',
|
|
13
15
|
'/home/runner/work/captcha/captcha/packages/database/tsconfig.json',
|
|
14
16
|
'/home/runner/work/captcha/captcha/packages/types-database/tsconfig.json',
|
|
15
17
|
'/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json',
|
|
@@ -24,9 +26,11 @@ ViteCommonJSConfig: .
|
|
|
24
26
|
externals: [
|
|
25
27
|
'@prosopo/common',
|
|
26
28
|
'@prosopo/locale',
|
|
27
|
-
'@prosopo/
|
|
29
|
+
'@prosopo/logger',
|
|
28
30
|
'@prosopo/util',
|
|
31
|
+
'@prosopo/types',
|
|
29
32
|
'@prosopo/util-crypto',
|
|
33
|
+
'@prosopo/ipinfo',
|
|
30
34
|
'@prosopo/database',
|
|
31
35
|
'@prosopo/types-database',
|
|
32
36
|
'@prosopo/user-access-policy',
|
|
@@ -43,7 +47,7 @@ transforming...
|
|
|
43
47
|
Build end
|
|
44
48
|
[32m✓[39m 3 modules transformed.
|
|
45
49
|
rendering chunks...
|
|
46
|
-
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m0.
|
|
47
|
-
[2mdist/cjs/[22m[36mprovider.cjs [39m[1m[
|
|
48
|
-
[2mdist/cjs/[22m[36menv.cjs [39m[1m[2m4.
|
|
49
|
-
[32m✓ built in
|
|
50
|
+
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m0.32 kB[22m[1m[22m
|
|
51
|
+
[2mdist/cjs/[22m[36mprovider.cjs [39m[1m[2m1.43 kB[22m[1m[22m
|
|
52
|
+
[2mdist/cjs/[22m[36menv.cjs [39m[1m[2m4.86 kB[22m[1m[22m
|
|
53
|
+
[32m✓ built in 114ms[39m
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
> @prosopo/env@3.5.7 build:tsc
|
|
3
|
+
> tsc --build --verbose
|
|
4
|
+
|
|
5
|
+
8:15:16 AM - Projects in this build:
|
|
6
|
+
* ../../dev/config/tsconfig.json
|
|
7
|
+
* ../locale/tsconfig.json
|
|
8
|
+
* ../util/tsconfig.json
|
|
9
|
+
* ../logger/tsconfig.json
|
|
10
|
+
* ../util-crypto/tsconfig.json
|
|
11
|
+
* ../types/tsconfig.json
|
|
12
|
+
* ../common/tsconfig.json
|
|
13
|
+
* ../ipinfo/tsconfig.json
|
|
14
|
+
* ../api-route/tsconfig.json
|
|
15
|
+
* ../redis-client/tsconfig.json
|
|
16
|
+
* ../api/tsconfig.json
|
|
17
|
+
* ../user-access-policy/tsconfig.json
|
|
18
|
+
* ../types-database/tsconfig.json
|
|
19
|
+
* ../database/tsconfig.json
|
|
20
|
+
* ../keyring/tsconfig.json
|
|
21
|
+
* ../types-env/tsconfig.json
|
|
22
|
+
* tsconfig.json
|
|
23
|
+
|
|
24
|
+
8:15:16 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
25
|
+
|
|
26
|
+
8:15:16 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
27
|
+
|
|
28
|
+
8:15:16 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
29
|
+
|
|
30
|
+
8:15:16 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
31
|
+
|
|
32
|
+
8:15:16 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
33
|
+
|
|
34
|
+
8:15:16 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/procaptcha/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
35
|
+
|
|
36
|
+
8:15:16 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
37
|
+
|
|
38
|
+
8:15:17 AM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
39
|
+
|
|
40
|
+
8:15:17 AM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
|
|
41
|
+
|
|
42
|
+
8:15:17 AM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
|
|
43
|
+
|
|
44
|
+
8:15:17 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
45
|
+
|
|
46
|
+
8:15:17 AM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
47
|
+
|
|
48
|
+
8:15:17 AM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/bannedDomain.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
|
|
49
|
+
|
|
50
|
+
8:15:17 AM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/integration/ipInfoPersistence.integration.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
|
|
51
|
+
|
|
52
|
+
8:15:17 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
53
|
+
|
|
54
|
+
8:15:17 AM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/index.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
|
|
55
|
+
|
|
56
|
+
8:15:17 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
57
|
+
|
|
58
|
+
8:15:17 AM - Building project '/home/runner/work/captcha/captcha/packages/env/tsconfig.json'...
|
|
59
|
+
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/env@3.
|
|
3
|
-
>
|
|
2
|
+
> @prosopo/env@3.5.7 build
|
|
3
|
+
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
> @prosopo/env@3.5.7 build:cross-env
|
|
7
|
+
> vite build --config vite.esm.config.ts --mode production
|
|
4
8
|
|
|
5
9
|
ViteEsmConfig: .
|
|
6
10
|
{
|
|
7
11
|
tsConfigPaths: [
|
|
8
12
|
'/home/runner/work/captcha/captcha/packages/common/tsconfig.json',
|
|
9
13
|
'/home/runner/work/captcha/captcha/packages/locale/tsconfig.json',
|
|
10
|
-
'/home/runner/work/captcha/captcha/packages/
|
|
14
|
+
'/home/runner/work/captcha/captcha/packages/logger/tsconfig.json',
|
|
11
15
|
'/home/runner/work/captcha/captcha/packages/util/tsconfig.json',
|
|
16
|
+
'/home/runner/work/captcha/captcha/packages/types/tsconfig.json',
|
|
12
17
|
'/home/runner/work/captcha/captcha/packages/util-crypto/tsconfig.json',
|
|
18
|
+
'/home/runner/work/captcha/captcha/packages/ipinfo/tsconfig.json',
|
|
13
19
|
'/home/runner/work/captcha/captcha/packages/database/tsconfig.json',
|
|
14
20
|
'/home/runner/work/captcha/captcha/packages/types-database/tsconfig.json',
|
|
15
21
|
'/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json',
|
|
@@ -24,9 +30,11 @@ ViteEsmConfig: .
|
|
|
24
30
|
externals: [
|
|
25
31
|
'@prosopo/common',
|
|
26
32
|
'@prosopo/locale',
|
|
27
|
-
'@prosopo/
|
|
33
|
+
'@prosopo/logger',
|
|
28
34
|
'@prosopo/util',
|
|
35
|
+
'@prosopo/types',
|
|
29
36
|
'@prosopo/util-crypto',
|
|
37
|
+
'@prosopo/ipinfo',
|
|
30
38
|
'@prosopo/database',
|
|
31
39
|
'@prosopo/types-database',
|
|
32
40
|
'@prosopo/user-access-policy',
|
|
@@ -43,7 +51,7 @@ transforming...
|
|
|
43
51
|
Build end
|
|
44
52
|
[32m✓[39m 3 modules transformed.
|
|
45
53
|
rendering chunks...
|
|
46
|
-
[2mdist/[22m[36mindex.js [39m[1m[2m0.
|
|
47
|
-
[2mdist/[22m[36mprovider.js [39m[1m[
|
|
48
|
-
[2mdist/[22m[36menv.js [39m[1m[
|
|
49
|
-
[32m✓ built in
|
|
54
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m0.18 kB[22m[1m[22m
|
|
55
|
+
[2mdist/[22m[36mprovider.js [39m[1m[2m1.35 kB[22m[1m[22m
|
|
56
|
+
[2mdist/[22m[36menv.js [39m[1m[2m4.68 kB[22m[1m[22m
|
|
57
|
+
[32m✓ built in 151ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,511 @@
|
|
|
1
1
|
# @prosopo/env
|
|
2
2
|
|
|
3
|
+
## 3.5.7
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [a1d60db]
|
|
7
|
+
- Updated dependencies [2392aaf]
|
|
8
|
+
- Updated dependencies [97cf7bd]
|
|
9
|
+
- Updated dependencies [6ca1125]
|
|
10
|
+
- Updated dependencies [32a591b]
|
|
11
|
+
- @prosopo/types@4.3.0
|
|
12
|
+
- @prosopo/logger@1.0.2
|
|
13
|
+
- @prosopo/common@3.1.38
|
|
14
|
+
- @prosopo/database@3.13.7
|
|
15
|
+
- @prosopo/ipinfo@0.2.14
|
|
16
|
+
- @prosopo/keyring@2.9.34
|
|
17
|
+
- @prosopo/types-env@2.9.16
|
|
18
|
+
|
|
19
|
+
## 3.5.6
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [6c26669]
|
|
23
|
+
- Updated dependencies [f7f9ec5]
|
|
24
|
+
- @prosopo/types@4.2.1
|
|
25
|
+
- @prosopo/database@3.13.6
|
|
26
|
+
- @prosopo/ipinfo@0.2.13
|
|
27
|
+
- @prosopo/keyring@2.9.33
|
|
28
|
+
- @prosopo/types-env@2.9.15
|
|
29
|
+
|
|
30
|
+
## 3.5.5
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- 0fd81af: Extract the logger into its own `@prosopo/logger` package, out of `@prosopo/common`. Consumers now import logger symbols from `@prosopo/logger`; `@prosopo/common` no longer re-exports them. Unused `@prosopo/common` dependencies pruned where the only usage was the logger.
|
|
34
|
+
- Updated dependencies [0fd81af]
|
|
35
|
+
- @prosopo/common@3.1.37
|
|
36
|
+
- @prosopo/database@3.13.5
|
|
37
|
+
- @prosopo/ipinfo@0.2.12
|
|
38
|
+
- @prosopo/logger@1.0.1
|
|
39
|
+
- @prosopo/types-env@2.9.14
|
|
40
|
+
- @prosopo/keyring@2.9.32
|
|
41
|
+
|
|
42
|
+
## 3.5.4
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- Updated dependencies [20cae63]
|
|
46
|
+
- Updated dependencies [b2e1a5d]
|
|
47
|
+
- Updated dependencies [4d9923e]
|
|
48
|
+
- @prosopo/types@4.2.0
|
|
49
|
+
- @prosopo/database@3.13.4
|
|
50
|
+
- @prosopo/types-env@2.9.13
|
|
51
|
+
- @prosopo/ipinfo@0.2.11
|
|
52
|
+
- @prosopo/keyring@2.9.31
|
|
53
|
+
|
|
54
|
+
## 3.5.3
|
|
55
|
+
### Patch Changes
|
|
56
|
+
|
|
57
|
+
- Updated dependencies [d351362]
|
|
58
|
+
- @prosopo/types@4.1.4
|
|
59
|
+
- @prosopo/database@3.13.3
|
|
60
|
+
- @prosopo/ipinfo@0.2.10
|
|
61
|
+
- @prosopo/keyring@2.9.30
|
|
62
|
+
- @prosopo/types-env@2.9.12
|
|
63
|
+
|
|
64
|
+
## 3.5.2
|
|
65
|
+
### Patch Changes
|
|
66
|
+
|
|
67
|
+
- Updated dependencies [e2711ae]
|
|
68
|
+
- Updated dependencies [5786629]
|
|
69
|
+
- @prosopo/types@4.1.3
|
|
70
|
+
- @prosopo/database@3.13.2
|
|
71
|
+
- @prosopo/keyring@2.9.29
|
|
72
|
+
- @prosopo/common@3.1.36
|
|
73
|
+
- @prosopo/ipinfo@0.2.9
|
|
74
|
+
- @prosopo/types-env@2.9.11
|
|
75
|
+
|
|
76
|
+
## 3.5.1
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- @prosopo/database@3.13.1
|
|
80
|
+
- @prosopo/keyring@2.9.28
|
|
81
|
+
- @prosopo/types@4.1.2
|
|
82
|
+
- @prosopo/types-env@2.9.10
|
|
83
|
+
- @prosopo/ipinfo@0.2.8
|
|
84
|
+
|
|
85
|
+
## 3.5.0
|
|
86
|
+
### Minor Changes
|
|
87
|
+
|
|
88
|
+
- 91958da: Puzzle captcha + maintenance mode hardening, plus a refactor of the
|
|
89
|
+
frictionless handler into focused modules.
|
|
90
|
+
|
|
91
|
+
- **Puzzle captcha now records checkbox-click coordinates like POW.** Adds an
|
|
92
|
+
optional `salt` field to `SubmitPuzzleCaptchaSolutionBody`; the puzzle
|
|
93
|
+
widget hashes the click coords into the salt and the server decodes them
|
|
94
|
+
into the puzzle record's `coords` field on submit. New `start(x, y)`
|
|
95
|
+
parameters on `procaptcha-puzzle` Manager + widget.
|
|
96
|
+
- **Fix puzzle "No session found" caused by stale Redis dedup.** The
|
|
97
|
+
`/frictionless` dedup path is now Mongo-authoritative — Redis is no
|
|
98
|
+
longer consulted as a session source. A concurrent `/captcha/{type}`
|
|
99
|
+
invalidation could previously race a fire-and-forget Redis repopulation
|
|
100
|
+
in the `/frictionless` dedup branch, leaving Redis pointing at a
|
|
101
|
+
Mongo-deleted session for the full 1-hour TTL. Stale pointers are now
|
|
102
|
+
evicted lazily.
|
|
103
|
+
- **Maintenance mode operates without MongoDB.** `/frictionless` and
|
|
104
|
+
`/captcha/{pow,puzzle}` short-circuit to dummy responses before any DB
|
|
105
|
+
call, and `Environment.isReady()` tolerates a Mongo connect failure when
|
|
106
|
+
`MAINTENANCE_MODE=true` so the provider can start with Mongo down.
|
|
107
|
+
- **Refactor `getFrictionlessCaptchaChallenge.ts` into focused modules** under
|
|
108
|
+
`getFrictionlessCaptchaChallenge/` (handler, sessionDedup, shortCircuit,
|
|
109
|
+
accessPolicy, decisionMachine, decryptSimdReadings, constants). Original
|
|
110
|
+
import path preserved via a re-export shim.
|
|
111
|
+
- **Move `RedisWriteQueue` from `@prosopo/provider` to `@prosopo/database`**
|
|
112
|
+
(where the Redis connection itself lives), and clear residual Redis
|
|
113
|
+
session keys at provider startup via `Environment.cleanup()` so a
|
|
114
|
+
previously-crashed run can't leak stale dedup pointers.
|
|
115
|
+
- Adds puzzle-type branch to access-policy handling in `/frictionless`.
|
|
116
|
+
|
|
117
|
+
### Patch Changes
|
|
118
|
+
|
|
119
|
+
- Updated dependencies [91958da]
|
|
120
|
+
- @prosopo/database@3.13.0
|
|
121
|
+
- @prosopo/types@4.1.1
|
|
122
|
+
- @prosopo/common@3.1.35
|
|
123
|
+
- @prosopo/ipinfo@0.2.7
|
|
124
|
+
- @prosopo/keyring@2.9.27
|
|
125
|
+
- @prosopo/types-env@2.9.9
|
|
126
|
+
|
|
127
|
+
## 3.4.9
|
|
128
|
+
### Patch Changes
|
|
129
|
+
|
|
130
|
+
- Updated dependencies [6a741ce]
|
|
131
|
+
- @prosopo/types@4.1.0
|
|
132
|
+
- @prosopo/database@3.12.1
|
|
133
|
+
- @prosopo/ipinfo@0.2.6
|
|
134
|
+
- @prosopo/keyring@2.9.26
|
|
135
|
+
- @prosopo/types-env@2.9.8
|
|
136
|
+
|
|
137
|
+
## 3.4.8
|
|
138
|
+
### Patch Changes
|
|
139
|
+
|
|
140
|
+
- Updated dependencies [f9ea09d]
|
|
141
|
+
- Updated dependencies [3c0be68]
|
|
142
|
+
- Updated dependencies [f9ea09d]
|
|
143
|
+
- Updated dependencies [d865319]
|
|
144
|
+
- Updated dependencies [753304b]
|
|
145
|
+
- Updated dependencies [8bb7286]
|
|
146
|
+
- Updated dependencies [f9ea09d]
|
|
147
|
+
- Updated dependencies [4aae4e6]
|
|
148
|
+
- Updated dependencies [4993813]
|
|
149
|
+
- @prosopo/database@3.12.0
|
|
150
|
+
- @prosopo/types@4.0.0
|
|
151
|
+
- @prosopo/keyring@2.9.25
|
|
152
|
+
- @prosopo/common@3.1.34
|
|
153
|
+
- @prosopo/ipinfo@0.2.5
|
|
154
|
+
- @prosopo/types-env@2.9.7
|
|
155
|
+
|
|
156
|
+
## 3.4.7
|
|
157
|
+
### Patch Changes
|
|
158
|
+
|
|
159
|
+
- Updated dependencies [819ed95]
|
|
160
|
+
- Updated dependencies [33a6c57]
|
|
161
|
+
- @prosopo/types@3.16.1
|
|
162
|
+
- @prosopo/database@3.11.0
|
|
163
|
+
- @prosopo/types-env@2.9.6
|
|
164
|
+
- @prosopo/ipinfo@0.2.4
|
|
165
|
+
- @prosopo/keyring@2.9.24
|
|
166
|
+
|
|
167
|
+
## 3.4.6
|
|
168
|
+
### Patch Changes
|
|
169
|
+
|
|
170
|
+
- @prosopo/database@3.10.2
|
|
171
|
+
- @prosopo/types-env@2.9.5
|
|
172
|
+
|
|
173
|
+
## 3.4.5
|
|
174
|
+
### Patch Changes
|
|
175
|
+
|
|
176
|
+
- Updated dependencies [942701b]
|
|
177
|
+
- @prosopo/database@3.10.1
|
|
178
|
+
|
|
179
|
+
## 3.4.4
|
|
180
|
+
### Patch Changes
|
|
181
|
+
|
|
182
|
+
- Updated dependencies [74092d0]
|
|
183
|
+
- @prosopo/database@3.10.0
|
|
184
|
+
- @prosopo/types-env@2.9.4
|
|
185
|
+
|
|
186
|
+
## 3.4.3
|
|
187
|
+
### Patch Changes
|
|
188
|
+
|
|
189
|
+
- Updated dependencies [f6a4402]
|
|
190
|
+
- Updated dependencies [99dfb44]
|
|
191
|
+
- @prosopo/database@3.9.18
|
|
192
|
+
- @prosopo/types@3.16.0
|
|
193
|
+
- @prosopo/types-env@2.9.3
|
|
194
|
+
- @prosopo/ipinfo@0.2.3
|
|
195
|
+
- @prosopo/keyring@2.9.23
|
|
196
|
+
|
|
197
|
+
## 3.4.2
|
|
198
|
+
### Patch Changes
|
|
199
|
+
|
|
200
|
+
- Updated dependencies [3e54c0a]
|
|
201
|
+
- @prosopo/types@3.15.0
|
|
202
|
+
- @prosopo/database@3.9.17
|
|
203
|
+
- @prosopo/ipinfo@0.2.2
|
|
204
|
+
- @prosopo/keyring@2.9.22
|
|
205
|
+
- @prosopo/types-env@2.9.2
|
|
206
|
+
|
|
207
|
+
## 3.4.1
|
|
208
|
+
### Patch Changes
|
|
209
|
+
|
|
210
|
+
- Updated dependencies [946a8ba]
|
|
211
|
+
- Updated dependencies [5614814]
|
|
212
|
+
- @prosopo/types@3.14.1
|
|
213
|
+
- @prosopo/database@3.9.16
|
|
214
|
+
- @prosopo/types-env@2.9.1
|
|
215
|
+
- @prosopo/common@3.1.33
|
|
216
|
+
- @prosopo/ipinfo@0.2.1
|
|
217
|
+
- @prosopo/keyring@2.9.21
|
|
218
|
+
|
|
219
|
+
## 3.4.0
|
|
220
|
+
### Minor Changes
|
|
221
|
+
|
|
222
|
+
- 42650db: Add better spam rules and move ipinfo service to local instead of external
|
|
223
|
+
|
|
224
|
+
### Patch Changes
|
|
225
|
+
|
|
226
|
+
- Updated dependencies [fc514dd]
|
|
227
|
+
- Updated dependencies [42650db]
|
|
228
|
+
- @prosopo/ipinfo@0.2.0
|
|
229
|
+
- @prosopo/types@3.14.0
|
|
230
|
+
- @prosopo/types-env@2.9.0
|
|
231
|
+
- @prosopo/database@3.9.15
|
|
232
|
+
- @prosopo/common@3.1.32
|
|
233
|
+
- @prosopo/keyring@2.9.20
|
|
234
|
+
|
|
235
|
+
## 3.3.15
|
|
236
|
+
### Patch Changes
|
|
237
|
+
|
|
238
|
+
- Updated dependencies [4a9c518]
|
|
239
|
+
- @prosopo/common@3.1.31
|
|
240
|
+
- @prosopo/database@3.9.14
|
|
241
|
+
- @prosopo/keyring@2.9.19
|
|
242
|
+
- @prosopo/types-env@2.8.15
|
|
243
|
+
|
|
244
|
+
## 3.3.14
|
|
245
|
+
### Patch Changes
|
|
246
|
+
|
|
247
|
+
- @prosopo/database@3.9.13
|
|
248
|
+
- @prosopo/keyring@2.9.18
|
|
249
|
+
- @prosopo/types@3.13.3
|
|
250
|
+
- @prosopo/types-env@2.8.14
|
|
251
|
+
|
|
252
|
+
## 3.3.13
|
|
253
|
+
### Patch Changes
|
|
254
|
+
|
|
255
|
+
- @prosopo/database@3.9.12
|
|
256
|
+
- @prosopo/keyring@2.9.17
|
|
257
|
+
- @prosopo/types@3.13.2
|
|
258
|
+
- @prosopo/types-env@2.8.13
|
|
259
|
+
|
|
260
|
+
## 3.3.12
|
|
261
|
+
### Patch Changes
|
|
262
|
+
|
|
263
|
+
- @prosopo/database@3.9.11
|
|
264
|
+
- @prosopo/keyring@2.9.16
|
|
265
|
+
- @prosopo/types@3.13.1
|
|
266
|
+
- @prosopo/types-env@2.8.12
|
|
267
|
+
|
|
268
|
+
## 3.3.11
|
|
269
|
+
### Patch Changes
|
|
270
|
+
|
|
271
|
+
- Updated dependencies [e6d9553]
|
|
272
|
+
- @prosopo/types@3.13.0
|
|
273
|
+
- @prosopo/database@3.9.10
|
|
274
|
+
- @prosopo/keyring@2.9.15
|
|
275
|
+
- @prosopo/types-env@2.8.11
|
|
276
|
+
|
|
277
|
+
## 3.3.10
|
|
278
|
+
### Patch Changes
|
|
279
|
+
|
|
280
|
+
- Updated dependencies [d5082a9]
|
|
281
|
+
- Updated dependencies [e1ea65f]
|
|
282
|
+
- Updated dependencies [c316257]
|
|
283
|
+
- @prosopo/types@3.12.3
|
|
284
|
+
- @prosopo/database@3.9.9
|
|
285
|
+
- @prosopo/keyring@2.9.14
|
|
286
|
+
- @prosopo/types-env@2.8.10
|
|
287
|
+
|
|
288
|
+
## 3.3.9
|
|
289
|
+
### Patch Changes
|
|
290
|
+
|
|
291
|
+
- Updated dependencies [adb89a6]
|
|
292
|
+
- @prosopo/database@3.9.8
|
|
293
|
+
- @prosopo/types@3.12.2
|
|
294
|
+
- @prosopo/types-env@2.8.9
|
|
295
|
+
- @prosopo/common@3.1.30
|
|
296
|
+
- @prosopo/keyring@2.9.13
|
|
297
|
+
|
|
298
|
+
## 3.3.8
|
|
299
|
+
### Patch Changes
|
|
300
|
+
|
|
301
|
+
- Updated dependencies [c5ee492]
|
|
302
|
+
- Updated dependencies [a90eb54]
|
|
303
|
+
- @prosopo/common@3.1.29
|
|
304
|
+
- @prosopo/types@3.12.1
|
|
305
|
+
- @prosopo/database@3.9.7
|
|
306
|
+
- @prosopo/keyring@2.9.12
|
|
307
|
+
- @prosopo/types-env@2.8.8
|
|
308
|
+
|
|
309
|
+
## 3.3.7
|
|
310
|
+
### Patch Changes
|
|
311
|
+
|
|
312
|
+
- Updated dependencies [676c5f2]
|
|
313
|
+
- Updated dependencies [feaca02]
|
|
314
|
+
- @prosopo/keyring@2.9.11
|
|
315
|
+
- @prosopo/types@3.12.0
|
|
316
|
+
- @prosopo/types-env@2.8.7
|
|
317
|
+
- @prosopo/database@3.9.6
|
|
318
|
+
|
|
319
|
+
## 3.3.6
|
|
320
|
+
### Patch Changes
|
|
321
|
+
|
|
322
|
+
- Updated dependencies [8148587]
|
|
323
|
+
- @prosopo/types@3.11.1
|
|
324
|
+
- @prosopo/database@3.9.5
|
|
325
|
+
- @prosopo/types-env@2.8.6
|
|
326
|
+
- @prosopo/keyring@2.9.10
|
|
327
|
+
|
|
328
|
+
## 3.3.5
|
|
329
|
+
### Patch Changes
|
|
330
|
+
|
|
331
|
+
- @prosopo/database@3.9.4
|
|
332
|
+
- @prosopo/types-env@2.8.5
|
|
333
|
+
|
|
334
|
+
## 3.3.4
|
|
335
|
+
### Patch Changes
|
|
336
|
+
|
|
337
|
+
- Updated dependencies [7f6ffc5]
|
|
338
|
+
- @prosopo/types@3.11.0
|
|
339
|
+
- @prosopo/database@3.9.3
|
|
340
|
+
- @prosopo/keyring@2.9.9
|
|
341
|
+
- @prosopo/types-env@2.8.4
|
|
342
|
+
|
|
343
|
+
## 3.3.3
|
|
344
|
+
### Patch Changes
|
|
345
|
+
|
|
346
|
+
- Updated dependencies [93fa086]
|
|
347
|
+
- @prosopo/database@3.9.2
|
|
348
|
+
- @prosopo/types@3.10.2
|
|
349
|
+
- @prosopo/types-env@2.8.3
|
|
350
|
+
- @prosopo/keyring@2.9.8
|
|
351
|
+
|
|
352
|
+
## 3.3.2
|
|
353
|
+
### Patch Changes
|
|
354
|
+
|
|
355
|
+
- Updated dependencies [cde7550]
|
|
356
|
+
- @prosopo/types@3.10.1
|
|
357
|
+
- @prosopo/database@3.9.1
|
|
358
|
+
- @prosopo/types-env@2.8.2
|
|
359
|
+
- @prosopo/keyring@2.9.7
|
|
360
|
+
|
|
361
|
+
## 3.3.1
|
|
362
|
+
### Patch Changes
|
|
363
|
+
|
|
364
|
+
- Updated dependencies [ad6d622]
|
|
365
|
+
- Updated dependencies [ced9f41]
|
|
366
|
+
- Updated dependencies [fa95c5f]
|
|
367
|
+
- @prosopo/database@3.9.0
|
|
368
|
+
- @prosopo/types@3.10.0
|
|
369
|
+
- @prosopo/types-env@2.8.1
|
|
370
|
+
- @prosopo/keyring@2.9.6
|
|
371
|
+
|
|
372
|
+
## 3.3.0
|
|
373
|
+
### Minor Changes
|
|
374
|
+
|
|
375
|
+
- ff58a70: Load the geolocation service at startup only
|
|
376
|
+
|
|
377
|
+
### Patch Changes
|
|
378
|
+
|
|
379
|
+
- Updated dependencies [ff58a70]
|
|
380
|
+
- Updated dependencies [d329e63]
|
|
381
|
+
- @prosopo/types-env@2.8.0
|
|
382
|
+
- @prosopo/types@3.9.0
|
|
383
|
+
- @prosopo/database@3.8.0
|
|
384
|
+
- @prosopo/keyring@2.9.5
|
|
385
|
+
|
|
386
|
+
## 3.2.42
|
|
387
|
+
### Patch Changes
|
|
388
|
+
|
|
389
|
+
- Updated dependencies [3feeea4]
|
|
390
|
+
- @prosopo/database@3.7.0
|
|
391
|
+
- @prosopo/types-env@2.7.66
|
|
392
|
+
|
|
393
|
+
## 3.2.41
|
|
394
|
+
### Patch Changes
|
|
395
|
+
|
|
396
|
+
- Updated dependencies [d2431cd]
|
|
397
|
+
- @prosopo/types@3.8.4
|
|
398
|
+
- @prosopo/database@3.6.12
|
|
399
|
+
- @prosopo/types-env@2.7.65
|
|
400
|
+
- @prosopo/keyring@2.9.4
|
|
401
|
+
|
|
402
|
+
## 3.2.40
|
|
403
|
+
### Patch Changes
|
|
404
|
+
|
|
405
|
+
- @prosopo/database@3.6.11
|
|
406
|
+
- @prosopo/types-env@2.7.64
|
|
407
|
+
|
|
408
|
+
## 3.2.39
|
|
409
|
+
### Patch Changes
|
|
410
|
+
|
|
411
|
+
- Updated dependencies [bd6995b]
|
|
412
|
+
- @prosopo/types@3.8.3
|
|
413
|
+
- @prosopo/database@3.6.10
|
|
414
|
+
- @prosopo/keyring@2.9.3
|
|
415
|
+
- @prosopo/types-env@2.7.63
|
|
416
|
+
|
|
417
|
+
## 3.2.38
|
|
418
|
+
### Patch Changes
|
|
419
|
+
|
|
420
|
+
- Updated dependencies [9633e58]
|
|
421
|
+
- @prosopo/types@3.8.2
|
|
422
|
+
- @prosopo/database@3.6.9
|
|
423
|
+
- @prosopo/types-env@2.7.62
|
|
424
|
+
- @prosopo/keyring@2.9.2
|
|
425
|
+
|
|
426
|
+
## 3.2.37
|
|
427
|
+
### Patch Changes
|
|
428
|
+
|
|
429
|
+
- Updated dependencies [f52a5c1]
|
|
430
|
+
- @prosopo/database@3.6.8
|
|
431
|
+
- @prosopo/types@3.8.1
|
|
432
|
+
- @prosopo/types-env@2.7.61
|
|
433
|
+
- @prosopo/keyring@2.9.1
|
|
434
|
+
|
|
435
|
+
## 3.2.36
|
|
436
|
+
### Patch Changes
|
|
437
|
+
|
|
438
|
+
- @prosopo/database@3.6.7
|
|
439
|
+
- @prosopo/types-env@2.7.60
|
|
440
|
+
|
|
441
|
+
## 3.2.35
|
|
442
|
+
### Patch Changes
|
|
443
|
+
|
|
444
|
+
- 0a38892: feat/cross-os-testing
|
|
445
|
+
- a8faa9a: bump license year
|
|
446
|
+
- 3acc333: Release 3.3.0
|
|
447
|
+
- Updated dependencies [3acc333]
|
|
448
|
+
- Updated dependencies [3acc333]
|
|
449
|
+
- Updated dependencies [0a38892]
|
|
450
|
+
- Updated dependencies [1ee3d80]
|
|
451
|
+
- Updated dependencies [a8faa9a]
|
|
452
|
+
- Updated dependencies [7543d17]
|
|
453
|
+
- Updated dependencies [3acc333]
|
|
454
|
+
- @prosopo/database@3.6.6
|
|
455
|
+
- @prosopo/util-crypto@13.5.29
|
|
456
|
+
- @prosopo/keyring@2.9.0
|
|
457
|
+
- @prosopo/types@3.8.0
|
|
458
|
+
- @prosopo/types-env@2.7.59
|
|
459
|
+
- @prosopo/common@3.1.28
|
|
460
|
+
|
|
461
|
+
## 3.2.34
|
|
462
|
+
### Patch Changes
|
|
463
|
+
|
|
464
|
+
- @prosopo/database@3.6.5
|
|
465
|
+
- @prosopo/types-env@2.7.58
|
|
466
|
+
|
|
467
|
+
## 3.2.33
|
|
468
|
+
### Patch Changes
|
|
469
|
+
|
|
470
|
+
- @prosopo/database@3.6.4
|
|
471
|
+
- @prosopo/types-env@2.7.57
|
|
472
|
+
|
|
473
|
+
## 3.2.32
|
|
474
|
+
### Patch Changes
|
|
475
|
+
|
|
476
|
+
- Updated dependencies [9ab5f11]
|
|
477
|
+
- @prosopo/database@3.6.3
|
|
478
|
+
|
|
479
|
+
## 3.2.31
|
|
480
|
+
### Patch Changes
|
|
481
|
+
|
|
482
|
+
- Updated dependencies [141e462]
|
|
483
|
+
- @prosopo/types@3.7.2
|
|
484
|
+
- @prosopo/database@3.6.2
|
|
485
|
+
- @prosopo/keyring@2.8.43
|
|
486
|
+
- @prosopo/types-env@2.7.56
|
|
487
|
+
|
|
488
|
+
## 3.2.30
|
|
489
|
+
### Patch Changes
|
|
490
|
+
|
|
491
|
+
- Updated dependencies [345b25b]
|
|
492
|
+
- @prosopo/database@3.6.1
|
|
493
|
+
- @prosopo/types@3.7.1
|
|
494
|
+
- @prosopo/types-env@2.7.55
|
|
495
|
+
- @prosopo/keyring@2.8.42
|
|
496
|
+
|
|
497
|
+
## 3.2.29
|
|
498
|
+
### Patch Changes
|
|
499
|
+
|
|
500
|
+
- Updated dependencies [ce70a2b]
|
|
501
|
+
- Updated dependencies [c2b940f]
|
|
502
|
+
- Updated dependencies [f6b5094]
|
|
503
|
+
- @prosopo/types@3.7.0
|
|
504
|
+
- @prosopo/database@3.6.0
|
|
505
|
+
- @prosopo/common@3.1.27
|
|
506
|
+
- @prosopo/keyring@2.8.41
|
|
507
|
+
- @prosopo/types-env@2.7.54
|
|
508
|
+
|
|
3
509
|
## 3.2.28
|
|
4
510
|
### Patch Changes
|
|
5
511
|
|
package/dist/cjs/env.cjs
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const common = require("@prosopo/common");
|
|
4
4
|
const database = require("@prosopo/database");
|
|
5
|
+
const ipinfo = require("@prosopo/ipinfo");
|
|
5
6
|
const keyring = require("@prosopo/keyring");
|
|
7
|
+
const logger = require("@prosopo/logger");
|
|
6
8
|
const utilCrypto = require("@prosopo/util-crypto");
|
|
7
9
|
class Environment {
|
|
8
10
|
constructor(config, pair, authAccount) {
|
|
@@ -11,8 +13,8 @@ class Environment {
|
|
|
11
13
|
this.defaultEnvironment = this.config.defaultEnvironment;
|
|
12
14
|
this.pair = pair || keyring.getPair(config.account.secret);
|
|
13
15
|
this.authAccount = authAccount;
|
|
14
|
-
this.logger =
|
|
15
|
-
|
|
16
|
+
this.logger = logger.getLogger(
|
|
17
|
+
logger.parseLogLevel(this.config.logLevel),
|
|
16
18
|
"ProsopoEnvironment"
|
|
17
19
|
);
|
|
18
20
|
this.keyring = new keyring.Keyring({
|
|
@@ -20,12 +22,20 @@ class Environment {
|
|
|
20
22
|
});
|
|
21
23
|
if (this.pair) this.keyring.addPair(this.pair);
|
|
22
24
|
this.envId = utilCrypto.randomAsHex(32).slice(0, 32);
|
|
25
|
+
this.ipInfoService = new ipinfo.IpInfoService({
|
|
26
|
+
maxmindCityDbPath: this.config.maxmindCityDbPath ?? this.config.maxmindDbPath,
|
|
27
|
+
maxmindAsnDbPath: this.config.maxmindAsnDbPath,
|
|
28
|
+
ipapiUrl: this.config.ipApi?.baseUrl,
|
|
29
|
+
ipapiKey: this.config.ipApi?.apiKey,
|
|
30
|
+
logger: this.logger
|
|
31
|
+
});
|
|
23
32
|
this.logger.info(() => ({
|
|
24
33
|
msg: "Environment initialized",
|
|
25
34
|
data: {
|
|
26
35
|
envId: this.envId,
|
|
27
36
|
defaultEnvironment: this.defaultEnvironment,
|
|
28
|
-
logLevel: this.config.logLevel
|
|
37
|
+
logLevel: this.config.logLevel,
|
|
38
|
+
maxmindDbPath: this.config.maxmindDbPath || "not configured"
|
|
29
39
|
}
|
|
30
40
|
}));
|
|
31
41
|
}
|
|
@@ -78,16 +88,21 @@ class Environment {
|
|
|
78
88
|
this.pair.unlock(this.config.account.password);
|
|
79
89
|
}
|
|
80
90
|
await this.getSigner();
|
|
81
|
-
|
|
91
|
+
const maintenanceMode = isMaintenanceMode();
|
|
92
|
+
if (maintenanceMode) {
|
|
93
|
+
this.logger.warn(() => ({
|
|
94
|
+
msg: "MAINTENANCE_MODE=true — skipping DB import on startup"
|
|
95
|
+
}));
|
|
96
|
+
} else if (!this.db) {
|
|
82
97
|
await this.importDatabase();
|
|
83
|
-
}
|
|
84
|
-
if (this.db && !this.db.connected) {
|
|
98
|
+
} else if (this.db && !this.db.connected) {
|
|
85
99
|
this.logger.warn(() => ({
|
|
86
100
|
msg: `Database connection is not ready (state: ${this.db?.connection?.readyState}), reconnecting...`
|
|
87
101
|
}));
|
|
88
102
|
await this.db.connect();
|
|
89
103
|
this.logger.info(() => ({ msg: "Connected to db" }));
|
|
90
104
|
}
|
|
105
|
+
await this.ipInfoService.initialize();
|
|
91
106
|
this.ready = true;
|
|
92
107
|
} catch (err) {
|
|
93
108
|
throw new common.ProsopoEnvError("GENERAL.ENVIRONMENT_NOT_READY", {
|
|
@@ -126,4 +141,6 @@ class Environment {
|
|
|
126
141
|
}
|
|
127
142
|
}
|
|
128
143
|
}
|
|
144
|
+
const isMaintenanceMode = () => process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
|
|
129
145
|
exports.Environment = Environment;
|
|
146
|
+
exports.isMaintenanceMode = isMaintenanceMode;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -3,4 +3,5 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const env = require("./env.cjs");
|
|
4
4
|
const provider = require("./provider.cjs");
|
|
5
5
|
exports.Environment = env.Environment;
|
|
6
|
+
exports.isMaintenanceMode = env.isMaintenanceMode;
|
|
6
7
|
exports.ProviderEnvironment = provider.ProviderEnvironment;
|
package/dist/cjs/provider.cjs
CHANGED
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const database = require("@prosopo/database");
|
|
3
4
|
const types = require("@prosopo/types");
|
|
4
5
|
const env = require("./env.cjs");
|
|
5
6
|
class ProviderEnvironment extends env.Environment {
|
|
6
7
|
cleanup() {
|
|
7
|
-
this.
|
|
8
|
+
const dbConnected = this.db?.connected ?? false;
|
|
9
|
+
if (!dbConnected || env.isMaintenanceMode()) {
|
|
10
|
+
this.logger.warn(() => ({
|
|
11
|
+
msg: "Skipping startup cleanup — DB not connected (maintenance mode or boot-time DB failure)"
|
|
12
|
+
}));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
this.db?.cleanupScheduledTaskStatus(types.ScheduledTaskStatus.Running).catch((err) => {
|
|
8
16
|
this.logger.error(() => ({
|
|
9
17
|
msg: "Failed to cleanup running scheduled tasks",
|
|
10
18
|
err,
|
|
11
19
|
data: { failedFuncName: this.cleanup.name }
|
|
12
20
|
}));
|
|
13
21
|
});
|
|
22
|
+
try {
|
|
23
|
+
const redisConnection = this.getDb().getRedisConnection();
|
|
24
|
+
const writeQueue = new database.RedisWriteQueue(redisConnection, this.logger);
|
|
25
|
+
writeQueue.clearAllSessionRecords().catch((err) => {
|
|
26
|
+
this.logger.error(() => ({
|
|
27
|
+
msg: "Failed to clear Redis session records at startup",
|
|
28
|
+
err,
|
|
29
|
+
data: { failedFuncName: this.cleanup.name }
|
|
30
|
+
}));
|
|
31
|
+
});
|
|
32
|
+
} catch (err) {
|
|
33
|
+
this.logger.warn(() => ({
|
|
34
|
+
msg: "Skipped Redis session cleanup — no Redis connection",
|
|
35
|
+
err
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
14
38
|
}
|
|
15
39
|
}
|
|
16
40
|
exports.ProviderEnvironment = ProviderEnvironment;
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ProviderDatabase } from "@prosopo/database";
|
|
2
|
+
import { Keyring } from "@prosopo/keyring";
|
|
3
|
+
import { type Logger } from "@prosopo/logger";
|
|
4
|
+
import type { KeyringPair } from "@prosopo/types";
|
|
5
|
+
import type { AssetsResolver, EnvironmentTypes } from "@prosopo/types";
|
|
6
|
+
import type { ProsopoConfigOutput } from "@prosopo/types";
|
|
7
|
+
import type { IIpInfoService, ProsopoEnvironment } from "@prosopo/types-env";
|
|
8
|
+
export declare class Environment implements ProsopoEnvironment {
|
|
9
|
+
config: ProsopoConfigOutput;
|
|
10
|
+
db: ProviderDatabase | undefined;
|
|
11
|
+
defaultEnvironment: EnvironmentTypes;
|
|
12
|
+
logger: Logger;
|
|
13
|
+
assetsResolver: AssetsResolver | undefined;
|
|
14
|
+
keyring: Keyring;
|
|
15
|
+
pair: KeyringPair | undefined;
|
|
16
|
+
authAccount: KeyringPair | undefined;
|
|
17
|
+
envId: string | undefined;
|
|
18
|
+
ipInfoService: IIpInfoService;
|
|
19
|
+
ready: boolean;
|
|
20
|
+
constructor(config: ProsopoConfigOutput, pair?: KeyringPair, authAccount?: KeyringPair);
|
|
21
|
+
getSigner(): Promise<KeyringPair>;
|
|
22
|
+
getDb(): ProviderDatabase;
|
|
23
|
+
getAssetsResolver(): AssetsResolver;
|
|
24
|
+
getPair(): KeyringPair;
|
|
25
|
+
isReady(): Promise<void>;
|
|
26
|
+
importDatabase(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export declare const isMaintenanceMode: () => boolean;
|
|
29
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAW,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7E,qBAAa,WAAY,YAAW,kBAAkB;IACrD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACjC,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,cAAc,CAAC;IAC9B,KAAK,UAAS;gBAGb,MAAM,EAAE,mBAAmB,EAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,WAAW,CAAC,EAAE,WAAW;IAsCpB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAkBvC,KAAK,IAAI,gBAAgB;IASzB,iBAAiB,IAAI,cAAc;IASnC,OAAO,IAAI,WAAW;IAShB,OAAO;IAwCP,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAiCrC;AAID,eAAO,MAAM,iBAAiB,QAAO,OACkB,CAAC"}
|
package/dist/env.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProsopoEnvError } from "@prosopo/common";
|
|
2
2
|
import { ProviderDatabase } from "@prosopo/database";
|
|
3
|
+
import { IpInfoService } from "@prosopo/ipinfo";
|
|
3
4
|
import { getPair, Keyring } from "@prosopo/keyring";
|
|
5
|
+
import { getLogger, parseLogLevel } from "@prosopo/logger";
|
|
4
6
|
import { randomAsHex } from "@prosopo/util-crypto";
|
|
5
7
|
class Environment {
|
|
6
8
|
constructor(config, pair, authAccount) {
|
|
@@ -18,12 +20,20 @@ class Environment {
|
|
|
18
20
|
});
|
|
19
21
|
if (this.pair) this.keyring.addPair(this.pair);
|
|
20
22
|
this.envId = randomAsHex(32).slice(0, 32);
|
|
23
|
+
this.ipInfoService = new IpInfoService({
|
|
24
|
+
maxmindCityDbPath: this.config.maxmindCityDbPath ?? this.config.maxmindDbPath,
|
|
25
|
+
maxmindAsnDbPath: this.config.maxmindAsnDbPath,
|
|
26
|
+
ipapiUrl: this.config.ipApi?.baseUrl,
|
|
27
|
+
ipapiKey: this.config.ipApi?.apiKey,
|
|
28
|
+
logger: this.logger
|
|
29
|
+
});
|
|
21
30
|
this.logger.info(() => ({
|
|
22
31
|
msg: "Environment initialized",
|
|
23
32
|
data: {
|
|
24
33
|
envId: this.envId,
|
|
25
34
|
defaultEnvironment: this.defaultEnvironment,
|
|
26
|
-
logLevel: this.config.logLevel
|
|
35
|
+
logLevel: this.config.logLevel,
|
|
36
|
+
maxmindDbPath: this.config.maxmindDbPath || "not configured"
|
|
27
37
|
}
|
|
28
38
|
}));
|
|
29
39
|
}
|
|
@@ -76,16 +86,21 @@ class Environment {
|
|
|
76
86
|
this.pair.unlock(this.config.account.password);
|
|
77
87
|
}
|
|
78
88
|
await this.getSigner();
|
|
79
|
-
|
|
89
|
+
const maintenanceMode = isMaintenanceMode();
|
|
90
|
+
if (maintenanceMode) {
|
|
91
|
+
this.logger.warn(() => ({
|
|
92
|
+
msg: "MAINTENANCE_MODE=true — skipping DB import on startup"
|
|
93
|
+
}));
|
|
94
|
+
} else if (!this.db) {
|
|
80
95
|
await this.importDatabase();
|
|
81
|
-
}
|
|
82
|
-
if (this.db && !this.db.connected) {
|
|
96
|
+
} else if (this.db && !this.db.connected) {
|
|
83
97
|
this.logger.warn(() => ({
|
|
84
98
|
msg: `Database connection is not ready (state: ${this.db?.connection?.readyState}), reconnecting...`
|
|
85
99
|
}));
|
|
86
100
|
await this.db.connect();
|
|
87
101
|
this.logger.info(() => ({ msg: "Connected to db" }));
|
|
88
102
|
}
|
|
103
|
+
await this.ipInfoService.initialize();
|
|
89
104
|
this.ready = true;
|
|
90
105
|
} catch (err) {
|
|
91
106
|
throw new ProsopoEnvError("GENERAL.ENVIRONMENT_NOT_READY", {
|
|
@@ -124,6 +139,8 @@ class Environment {
|
|
|
124
139
|
}
|
|
125
140
|
}
|
|
126
141
|
}
|
|
142
|
+
const isMaintenanceMode = () => process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
|
|
127
143
|
export {
|
|
128
|
-
Environment
|
|
144
|
+
Environment,
|
|
145
|
+
isMaintenanceMode
|
|
129
146
|
};
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAqB,MAAM,UAAU,CAAC;AAE1D,qBAAa,mBAAoB,SAAQ,WAAW;IAC3C,MAAM,EAAE,mBAAmB,CAAC;IAEpC,OAAO,IAAI,IAAI;CA2Cf"}
|
package/dist/provider.js
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
|
+
import { RedisWriteQueue } from "@prosopo/database";
|
|
1
2
|
import { ScheduledTaskStatus } from "@prosopo/types";
|
|
2
|
-
import { Environment } from "./env.js";
|
|
3
|
+
import { Environment, isMaintenanceMode } from "./env.js";
|
|
3
4
|
class ProviderEnvironment extends Environment {
|
|
4
5
|
cleanup() {
|
|
5
|
-
this.
|
|
6
|
+
const dbConnected = this.db?.connected ?? false;
|
|
7
|
+
if (!dbConnected || isMaintenanceMode()) {
|
|
8
|
+
this.logger.warn(() => ({
|
|
9
|
+
msg: "Skipping startup cleanup — DB not connected (maintenance mode or boot-time DB failure)"
|
|
10
|
+
}));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
this.db?.cleanupScheduledTaskStatus(ScheduledTaskStatus.Running).catch((err) => {
|
|
6
14
|
this.logger.error(() => ({
|
|
7
15
|
msg: "Failed to cleanup running scheduled tasks",
|
|
8
16
|
err,
|
|
9
17
|
data: { failedFuncName: this.cleanup.name }
|
|
10
18
|
}));
|
|
11
19
|
});
|
|
20
|
+
try {
|
|
21
|
+
const redisConnection = this.getDb().getRedisConnection();
|
|
22
|
+
const writeQueue = new RedisWriteQueue(redisConnection, this.logger);
|
|
23
|
+
writeQueue.clearAllSessionRecords().catch((err) => {
|
|
24
|
+
this.logger.error(() => ({
|
|
25
|
+
msg: "Failed to clear Redis session records at startup",
|
|
26
|
+
err,
|
|
27
|
+
data: { failedFuncName: this.cleanup.name }
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
} catch (err) {
|
|
31
|
+
this.logger.warn(() => ({
|
|
32
|
+
msg: "Skipped Redis session cleanup — no Redis connection",
|
|
33
|
+
err
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
12
36
|
}
|
|
13
37
|
}
|
|
14
38
|
export {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAA4B,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE1D,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAGnD,OAAO;QAIN,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,IAAI,KAAK,CAAC;QAChD,IAAI,CAAC,WAAW,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,GAAG,EAAE,wFAAwF;aAC7F,CAAC,CAAC,CAAC;YACJ,OAAO;QACR,CAAC;QAED,IAAI,CAAC,EAAE;YACN,EAAE,0BAA0B,CAAC,mBAAmB,CAAC,OAAO,CAAC;aACxD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,2CAA2C;gBAChD,GAAG;gBACH,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAMJ,IAAI,CAAC;YACJ,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,UAAU,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACxB,GAAG,EAAE,kDAAkD;oBACvD,GAAG;oBACH,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;iBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,GAAG,EAAE,qDAAqD;gBAC1D,GAAG;aACH,CAAC,CAAC,CAAC;QACL,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.maintenance.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/env.maintenance.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const { mockProviderDatabase, mockIpInfoInit } = vi.hoisted(() => ({
|
|
3
|
+
mockProviderDatabase: vi.fn(),
|
|
4
|
+
mockIpInfoInit: vi.fn().mockResolvedValue(undefined),
|
|
5
|
+
}));
|
|
6
|
+
vi.mock("@prosopo/database", () => ({
|
|
7
|
+
ProviderDatabase: mockProviderDatabase,
|
|
8
|
+
}));
|
|
9
|
+
vi.mock("@prosopo/ipinfo", () => ({
|
|
10
|
+
IpInfoService: vi.fn().mockImplementation(() => ({
|
|
11
|
+
initialize: mockIpInfoInit,
|
|
12
|
+
})),
|
|
13
|
+
}));
|
|
14
|
+
vi.mock("@prosopo/keyring", () => ({
|
|
15
|
+
Keyring: vi.fn().mockImplementation(() => ({
|
|
16
|
+
addPair: vi.fn((p) => p),
|
|
17
|
+
})),
|
|
18
|
+
getPair: vi.fn(() => ({
|
|
19
|
+
address: "addr",
|
|
20
|
+
isLocked: false,
|
|
21
|
+
unlock: vi.fn(),
|
|
22
|
+
})),
|
|
23
|
+
}));
|
|
24
|
+
import { Environment, isMaintenanceMode } from "../env.js";
|
|
25
|
+
const buildConfig = () => ({
|
|
26
|
+
defaultEnvironment: "test",
|
|
27
|
+
logLevel: "info",
|
|
28
|
+
account: { secret: "//Alice", password: undefined },
|
|
29
|
+
database: {
|
|
30
|
+
test: {
|
|
31
|
+
endpoint: "mongodb://127.0.0.1:27017",
|
|
32
|
+
dbname: "test",
|
|
33
|
+
authSource: "admin",
|
|
34
|
+
type: "mongo",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
redisConnection: { url: "redis://localhost", password: "" },
|
|
38
|
+
maxmindDbPath: undefined,
|
|
39
|
+
ipApi: undefined,
|
|
40
|
+
});
|
|
41
|
+
const buildEnv = () => {
|
|
42
|
+
const config = buildConfig();
|
|
43
|
+
const env = new Environment(config, {
|
|
44
|
+
address: "addr",
|
|
45
|
+
isLocked: false,
|
|
46
|
+
unlock: vi.fn(),
|
|
47
|
+
});
|
|
48
|
+
env.logger = {
|
|
49
|
+
debug: vi.fn(),
|
|
50
|
+
info: vi.fn(),
|
|
51
|
+
warn: vi.fn(),
|
|
52
|
+
error: vi.fn(),
|
|
53
|
+
};
|
|
54
|
+
return env;
|
|
55
|
+
};
|
|
56
|
+
describe("Environment.isReady — maintenance mode startup tolerance", () => {
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
mockProviderDatabase.mockReset();
|
|
59
|
+
mockIpInfoInit.mockClear();
|
|
60
|
+
process.env.MAINTENANCE_MODE = undefined;
|
|
61
|
+
});
|
|
62
|
+
afterEach(() => {
|
|
63
|
+
process.env.MAINTENANCE_MODE = undefined;
|
|
64
|
+
});
|
|
65
|
+
it("throws when DB connect fails and maintenance mode is off", async () => {
|
|
66
|
+
mockProviderDatabase.mockImplementation(() => ({
|
|
67
|
+
connect: vi.fn().mockRejectedValue(new Error("ECONNREFUSED")),
|
|
68
|
+
connected: false,
|
|
69
|
+
connection: { readyState: 0 },
|
|
70
|
+
}));
|
|
71
|
+
const env = buildEnv();
|
|
72
|
+
await expect(env.isReady()).rejects.toMatchObject({
|
|
73
|
+
translationKey: "GENERAL.ENVIRONMENT_NOT_READY",
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
it("skips DB import entirely when maintenance mode is on", async () => {
|
|
77
|
+
process.env.MAINTENANCE_MODE = "true";
|
|
78
|
+
const env = buildEnv();
|
|
79
|
+
await env.isReady();
|
|
80
|
+
expect(env.ready).toBe(true);
|
|
81
|
+
expect(mockProviderDatabase).not.toHaveBeenCalled();
|
|
82
|
+
expect(mockIpInfoInit).toHaveBeenCalled();
|
|
83
|
+
});
|
|
84
|
+
it("still completes the normal connect path when Mongo is up", async () => {
|
|
85
|
+
const connect = vi.fn().mockResolvedValue(undefined);
|
|
86
|
+
mockProviderDatabase.mockImplementation(() => ({
|
|
87
|
+
connect,
|
|
88
|
+
connected: true,
|
|
89
|
+
connection: { readyState: 1 },
|
|
90
|
+
}));
|
|
91
|
+
const env = buildEnv();
|
|
92
|
+
await env.isReady();
|
|
93
|
+
expect(env.ready).toBe(true);
|
|
94
|
+
expect(connect).toHaveBeenCalled();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("isMaintenanceMode", () => {
|
|
98
|
+
afterEach(() => {
|
|
99
|
+
process.env.MAINTENANCE_MODE = undefined;
|
|
100
|
+
});
|
|
101
|
+
it("returns true when MAINTENANCE_MODE=true", () => {
|
|
102
|
+
process.env.MAINTENANCE_MODE = "true";
|
|
103
|
+
expect(isMaintenanceMode()).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it("is case-insensitive", () => {
|
|
106
|
+
process.env.MAINTENANCE_MODE = "TRUE";
|
|
107
|
+
expect(isMaintenanceMode()).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
it("returns false when unset", () => {
|
|
110
|
+
expect(isMaintenanceMode()).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
it("returns false for any non-`true` value", () => {
|
|
113
|
+
process.env.MAINTENANCE_MODE = "false";
|
|
114
|
+
expect(isMaintenanceMode()).toBe(false);
|
|
115
|
+
process.env.MAINTENANCE_MODE = "1";
|
|
116
|
+
expect(isMaintenanceMode()).toBe(false);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=env.maintenance.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.maintenance.unit.test.js","sourceRoot":"","sources":["../../src/tests/env.maintenance.unit.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/env",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.7",
|
|
4
4
|
"description": "Path env prosopo environment",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,22 +18,25 @@
|
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
20
|
"clean": "del-cli --verbose dist tsconfig.tsbuildinfo",
|
|
21
|
-
"build": "
|
|
21
|
+
"build": "npm run build:cross-env -- --mode ${NODE_ENV:-development}",
|
|
22
|
+
"build:cross-env": "vite build --config vite.esm.config.ts",
|
|
22
23
|
"build:tsc": "tsc --build --verbose",
|
|
23
24
|
"build:cjs": "NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV",
|
|
25
|
+
"test": "NODE_ENV=${NODE_ENV:-test}; npx vitest run --config ./vite.test.config.ts --mode $NODE_ENV",
|
|
24
26
|
"typecheck": "tsc --project tsconfig.types.json"
|
|
25
27
|
},
|
|
26
28
|
"dependencies": {
|
|
27
|
-
"@prosopo/
|
|
28
|
-
"@prosopo/
|
|
29
|
-
"@prosopo/
|
|
30
|
-
"@prosopo/
|
|
31
|
-
"@prosopo/
|
|
32
|
-
"@prosopo/
|
|
33
|
-
"
|
|
29
|
+
"@prosopo/ipinfo": "0.2.14",
|
|
30
|
+
"@prosopo/common": "3.1.38",
|
|
31
|
+
"@prosopo/logger": "1.0.2",
|
|
32
|
+
"@prosopo/database": "3.13.7",
|
|
33
|
+
"@prosopo/keyring": "2.9.34",
|
|
34
|
+
"@prosopo/types": "4.3.0",
|
|
35
|
+
"@prosopo/types-env": "2.9.16",
|
|
36
|
+
"@prosopo/util-crypto": "13.5.29"
|
|
34
37
|
},
|
|
35
38
|
"devDependencies": {
|
|
36
|
-
"@prosopo/config": "3.1
|
|
39
|
+
"@prosopo/config": "3.3.1",
|
|
37
40
|
"@types/node": "22.10.2",
|
|
38
41
|
"@vitest/coverage-v8": "3.2.4",
|
|
39
42
|
"concurrently": "9.0.1",
|
|
@@ -47,5 +50,10 @@
|
|
|
47
50
|
},
|
|
48
51
|
"author": "Prosopo",
|
|
49
52
|
"license": "Apache-2.0",
|
|
50
|
-
"sideEffects": false
|
|
53
|
+
"sideEffects": false,
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git+https://github.com/prosopo/captcha.git",
|
|
57
|
+
"directory": "packages/env"
|
|
58
|
+
}
|
|
51
59
|
}
|
package/vite.cjs.config.ts
CHANGED
package/vite.esm.config.ts
CHANGED
package/vite.test.config.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
// Copyright 2021-2025 Prosopo (UK) Ltd.
|
|
1
|
+
// Copyright 2021-2026 Prosopo (UK) Ltd.
|
|
4
2
|
//
|
|
5
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -14,19 +12,7 @@ import path from "node:path";
|
|
|
14
12
|
// See the License for the specific language governing permissions and
|
|
15
13
|
// limitations under the License.
|
|
16
14
|
import { ViteTestConfig } from "@prosopo/config";
|
|
17
|
-
import dotenv from "dotenv";
|
|
18
|
-
process.env.NODE_ENV = "test";
|
|
19
|
-
// if .env.test exists at this level, use it, otherwise use the one at the root
|
|
20
|
-
const envFile = `.env.${process.env.NODE_ENV || "development"}`;
|
|
21
|
-
let envPath = envFile;
|
|
22
|
-
if (fs.existsSync(envFile)) {
|
|
23
|
-
envPath = path.resolve(envFile);
|
|
24
|
-
} else if (fs.existsSync(`../../${envFile}`)) {
|
|
25
|
-
envPath = path.resolve(`../../${envFile}`);
|
|
26
|
-
} else {
|
|
27
|
-
throw new Error(`No ${envFile} file found`);
|
|
28
|
-
}
|
|
29
15
|
|
|
30
|
-
|
|
16
|
+
process.env.NODE_ENV = "test";
|
|
31
17
|
|
|
32
18
|
export default ViteTestConfig();
|