@saasicat/cli 1.0.0-rc.2 → 1.0.0-rc.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -1
- package/bin/saasicat.js +267 -21
- package/dist/.build-stamp +1 -1
- package/dist/index.cjs +623 -148
- package/dist/index.d.cts +222 -15
- package/dist/index.d.ts +222 -15
- package/dist/index.js +610 -147
- package/package.json +4 -4
- package/templates/init/config/saas.yaml.tpl +40 -2
- package/templates/init/src/saas/admin-manifest.contribution.ts.tpl +1 -1
- package/templates/init/src/saas/persistence-without-hasher.ts.tpl +1 -1
- package/templates/init/src/saas/persistence.ts.tpl +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saasicat/cli",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.20",
|
|
4
4
|
"description": "CLI helpers for SaaS platform consumers. Provides CliContextService (identity, MFA, production confirm, audit tag).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"qrcode-terminal": "^0.12.0",
|
|
33
|
-
"@saasicat/nest": "^1.0.0-rc.
|
|
34
|
-
"@saasicat/spec": "^1.0.0-rc.
|
|
35
|
-
"@saasicat/core": "^1.0.0-rc.
|
|
33
|
+
"@saasicat/nest": "^1.0.0-rc.20",
|
|
34
|
+
"@saasicat/spec": "^1.0.0-rc.20",
|
|
35
|
+
"@saasicat/core": "^1.0.0-rc.20"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@nestjs/common": "^11.0.0",
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
schemaVersion: 1
|
|
2
|
-
projectKey: __PROJECT_KEY__
|
|
3
2
|
|
|
4
3
|
app:
|
|
5
4
|
name: __APP_LABEL__
|
|
@@ -8,12 +7,51 @@ app:
|
|
|
8
7
|
currency: EUR
|
|
9
8
|
vatRate: 19.0
|
|
10
9
|
|
|
10
|
+
# What the tenant self-service routes may do, and on what terms. These live
|
|
11
|
+
# here and nowhere else — an operator reading this file has to be reading the
|
|
12
|
+
# values that are running, with no "unless somebody passed it in code"
|
|
13
|
+
# attached. The file is read at boot, so an edit lands on the next restart.
|
|
14
|
+
tenantBilling:
|
|
15
|
+
# How many days before the term ends a cancellation is still in time.
|
|
16
|
+
# Zero means there is no door to be shut out of: a cancellation on the last
|
|
17
|
+
# day still lands at the term end. Raise it and the cut is hard — a
|
|
18
|
+
# declaration made after the window lands one full period later, which on a
|
|
19
|
+
# yearly cycle is a year.
|
|
20
|
+
#
|
|
21
|
+
# Two rhythms, two numbers, and both are required. A month and a year
|
|
22
|
+
# cannot share a notice period, and a rhythm left out would read as zero:
|
|
23
|
+
# a commercial decision nobody made.
|
|
24
|
+
#
|
|
25
|
+
# Any value here may name an environment variable, `monthly: ${NOTICE_DAYS}`
|
|
26
|
+
# or with a default `${NOTICE_DAYS:-0}`, so one file serves every
|
|
27
|
+
# environment. It is resolved before the schema checks it, so the rules
|
|
28
|
+
# above still hold; a variable nobody set stops the boot and names itself.
|
|
29
|
+
cancellationNoticeDays:
|
|
30
|
+
monthly: 0
|
|
31
|
+
yearly: 0
|
|
32
|
+
# Plans a tenant may not reach or leave on its own — typically a plan that
|
|
33
|
+
# only a special contract activates. Empty is a statement, not an omission:
|
|
34
|
+
# it says self-service reaches every plan.
|
|
35
|
+
selfServiceBlockedPlans:
|
|
36
|
+
asTarget: []
|
|
37
|
+
asSource: []
|
|
38
|
+
|
|
11
39
|
marketing:
|
|
12
40
|
availableLocales: [en]
|
|
13
41
|
|
|
42
|
+
# Who is mailed when a start finds the settings above changed since the previous
|
|
43
|
+
# start. The change is recorded in the administration either way; mail needs an
|
|
44
|
+
# email port bound as `adapters.email`, and without one the boot log says once
|
|
45
|
+
# that the addresses reach nobody. Nobody is named here on purpose: this example
|
|
46
|
+
# binds no mail, and an installation of one operator needs nothing else.
|
|
47
|
+
#
|
|
48
|
+
# notifications:
|
|
49
|
+
# settingsChanged: [ops@example.com]
|
|
50
|
+
|
|
14
51
|
# The quickstart path: plans live here, and `loadPlanCatalogFromFile` reads
|
|
15
52
|
# them at boot. Apps that let operators manage plans in the SuperAdmin UI drop
|
|
16
|
-
# this block and pass `dbCatalog` instead —
|
|
53
|
+
# this block and pass `dbCatalog: { path: 'config/saas.yaml' }` instead — the
|
|
54
|
+
# settings above stay here either way. See docs/quickstart.md.
|
|
17
55
|
plans:
|
|
18
56
|
- id: STARTER
|
|
19
57
|
name: Starter
|
|
@@ -19,7 +19,7 @@ export const __MANIFEST_CONST__: ManifestContribution = {
|
|
|
19
19
|
dashboard: {
|
|
20
20
|
kpiCards: [
|
|
21
21
|
{
|
|
22
|
-
id: '
|
|
22
|
+
id: '__APP_KEY__.tenants',
|
|
23
23
|
label: 'Tenants',
|
|
24
24
|
// Served by your own controller — the platform does not know
|
|
25
25
|
// what your KPIs count.
|
|
@@ -18,7 +18,7 @@ export const persistence = prismaPersistence({
|
|
|
18
18
|
// If your models are called something else, map them here:
|
|
19
19
|
// `adminResources: { delegates: { tenant: 'organization' },
|
|
20
20
|
// fields: { tenant: { users: 'members' } } }`
|
|
21
|
-
// — see docs/
|
|
21
|
+
// — see docs/guides/integrate-into-an-existing-app.md. Left out on purpose otherwise:
|
|
22
22
|
// the tenant row counter defaults to whatever the mapping says the users
|
|
23
23
|
// relation is called, and naming it here would hardcode `users` past that.
|
|
24
24
|
});
|
|
@@ -16,7 +16,7 @@ export const persistence = prismaPersistence({
|
|
|
16
16
|
// If your models are called something else, map them here:
|
|
17
17
|
// `adminResources: { delegates: { tenant: 'organization' },
|
|
18
18
|
// fields: { tenant: { users: 'members' } } }`
|
|
19
|
-
// — see docs/
|
|
19
|
+
// — see docs/guides/integrate-into-an-existing-app.md. Left out on purpose otherwise:
|
|
20
20
|
// the tenant row counter defaults to whatever the mapping says the users
|
|
21
21
|
// relation is called, and naming it here would hardcode `users` past that.
|
|
22
22
|
});
|