@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saasicat/cli",
3
- "version": "1.0.0-rc.2",
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.2",
34
- "@saasicat/spec": "^1.0.0-rc.2",
35
- "@saasicat/core": "^1.0.0-rc.2"
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 — see docs/quickstart.md.
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: '__PROJECT_KEY__.tenants',
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/migrating-an-existing-app.md. Left out on purpose otherwise:
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/migrating-an-existing-app.md. Left out on purpose otherwise:
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
  });