@contractspec/example.saas-boilerplate 1.44.1 → 1.45.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.
Files changed (46) hide show
  1. package/.turbo/turbo-build$colon$bundle.log +24 -24
  2. package/.turbo/turbo-build.log +24 -24
  3. package/CHANGELOG.md +31 -0
  4. package/dist/billing/billing.event.d.ts +21 -21
  5. package/dist/billing/billing.event.js +3 -3
  6. package/dist/billing/billing.event.js.map +1 -1
  7. package/dist/billing/billing.operations.d.ts +43 -43
  8. package/dist/billing/billing.operations.d.ts.map +1 -1
  9. package/dist/billing/billing.operations.js +5 -5
  10. package/dist/billing/billing.operations.js.map +1 -1
  11. package/dist/billing/billing.presentation.js +2 -2
  12. package/dist/billing/billing.presentation.js.map +1 -1
  13. package/dist/billing/billing.schema.d.ts +47 -47
  14. package/dist/dashboard/dashboard.presentation.js +2 -2
  15. package/dist/dashboard/dashboard.presentation.js.map +1 -1
  16. package/dist/example.d.ts +3 -33
  17. package/dist/example.d.ts.map +1 -1
  18. package/dist/example.js +16 -11
  19. package/dist/example.js.map +1 -1
  20. package/dist/project/project.entity.d.ts +24 -24
  21. package/dist/project/project.enum.d.ts +3 -3
  22. package/dist/project/project.event.d.ts +22 -22
  23. package/dist/project/project.event.js +4 -4
  24. package/dist/project/project.event.js.map +1 -1
  25. package/dist/project/project.operations.d.ts +106 -106
  26. package/dist/project/project.operations.d.ts.map +1 -1
  27. package/dist/project/project.operations.js +8 -8
  28. package/dist/project/project.operations.js.map +1 -1
  29. package/dist/project/project.presentation.js +2 -2
  30. package/dist/project/project.presentation.js.map +1 -1
  31. package/dist/project/project.schema.d.ts +54 -54
  32. package/dist/saas-boilerplate.feature.js +38 -38
  33. package/dist/saas-boilerplate.feature.js.map +1 -1
  34. package/dist/settings/settings.entity.d.ts +24 -24
  35. package/dist/settings/settings.enum.d.ts +2 -2
  36. package/package.json +10 -10
  37. package/src/billing/billing.event.ts +3 -3
  38. package/src/billing/billing.operations.ts +5 -5
  39. package/src/billing/billing.presentation.ts +2 -2
  40. package/src/dashboard/dashboard.presentation.ts +2 -2
  41. package/src/example.ts +16 -9
  42. package/src/project/project.event.ts +4 -4
  43. package/src/project/project.operations.ts +8 -8
  44. package/src/project/project.presentation.ts +2 -2
  45. package/src/saas-boilerplate.feature.ts +42 -38
  46. package/tsconfig.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.saas-boilerplate",
3
- "version": "1.44.1",
3
+ "version": "1.45.0",
4
4
  "description": "SaaS Boilerplate - Users, Orgs, Projects, Billing, Settings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -51,18 +51,18 @@
51
51
  "test": "bun run"
52
52
  },
53
53
  "dependencies": {
54
- "@contractspec/lib.schema": "1.44.1",
55
- "@contractspec/lib.contracts": "1.44.1",
56
- "@contractspec/lib.bus": "1.44.1",
57
- "@contractspec/lib.identity-rbac": "1.44.1",
58
- "@contractspec/lib.jobs": "1.44.1",
59
- "@contractspec/module.audit-trail": "1.44.1",
60
- "@contractspec/module.notifications": "1.44.1",
54
+ "@contractspec/lib.schema": "1.45.0",
55
+ "@contractspec/lib.contracts": "1.45.0",
56
+ "@contractspec/lib.bus": "1.45.0",
57
+ "@contractspec/lib.identity-rbac": "1.45.0",
58
+ "@contractspec/lib.jobs": "1.45.0",
59
+ "@contractspec/module.audit-trail": "1.45.0",
60
+ "@contractspec/module.notifications": "1.45.0",
61
61
  "zod": "^4.1.13"
62
62
  },
63
63
  "devDependencies": {
64
- "@contractspec/tool.tsdown": "1.44.1",
65
- "@contractspec/tool.typescript": "1.44.1",
64
+ "@contractspec/tool.tsdown": "1.45.0",
65
+ "@contractspec/tool.typescript": "1.45.0",
66
66
  "tsdown": "^0.18.3",
67
67
  "typescript": "^5.9.3"
68
68
  },
@@ -68,7 +68,7 @@ const SubscriptionChangedPayload = defineSchemaModel({
68
68
  export const UsageRecordedEvent = defineEvent({
69
69
  meta: {
70
70
  key: 'billing.usage.recorded',
71
- version: 1,
71
+ version: '1.0.0',
72
72
  description: 'Feature usage has been recorded.',
73
73
  stability: 'stable',
74
74
  owners: ['@saas-team'],
@@ -83,7 +83,7 @@ export const UsageRecordedEvent = defineEvent({
83
83
  export const UsageLimitReachedEvent = defineEvent({
84
84
  meta: {
85
85
  key: 'billing.limit.reached',
86
- version: 1,
86
+ version: '1.0.0',
87
87
  description: 'Usage limit has been reached for a feature.',
88
88
  stability: 'stable',
89
89
  owners: ['@saas-team'],
@@ -98,7 +98,7 @@ export const UsageLimitReachedEvent = defineEvent({
98
98
  export const SubscriptionChangedEvent = defineEvent({
99
99
  meta: {
100
100
  key: 'billing.subscription.changed',
101
- version: 1,
101
+ version: '1.0.0',
102
102
  description: 'Subscription status has changed.',
103
103
  stability: 'stable',
104
104
  owners: ['@saas-team'],
@@ -18,7 +18,7 @@ const OWNERS = ['@example.saas-boilerplate'] as const;
18
18
  export const GetSubscriptionContract = defineQuery({
19
19
  meta: {
20
20
  key: 'saas.billing.subscription.get',
21
- version: 1,
21
+ version: '1.0.0',
22
22
  stability: 'stable',
23
23
  owners: [...OWNERS],
24
24
  tags: ['saas', 'billing', 'subscription'],
@@ -62,7 +62,7 @@ export const GetSubscriptionContract = defineQuery({
62
62
  export const RecordUsageContract = defineCommand({
63
63
  meta: {
64
64
  key: 'saas.billing.usage.record',
65
- version: 1,
65
+ version: '1.0.0',
66
66
  stability: 'stable',
67
67
  owners: [...OWNERS],
68
68
  tags: ['saas', 'billing', 'usage'],
@@ -81,7 +81,7 @@ export const RecordUsageContract = defineCommand({
81
81
  emits: [
82
82
  {
83
83
  key: 'billing.usage.recorded',
84
- version: 1,
84
+ version: '1.0.0',
85
85
  when: 'Usage is recorded',
86
86
  payload: UsageRecordedPayloadModel,
87
87
  },
@@ -112,7 +112,7 @@ export const RecordUsageContract = defineCommand({
112
112
  export const GetUsageSummaryContract = defineQuery({
113
113
  meta: {
114
114
  key: 'saas.billing.usage.summary',
115
- version: 1,
115
+ version: '1.0.0',
116
116
  stability: 'stable',
117
117
  owners: [...OWNERS],
118
118
  tags: ['saas', 'billing', 'usage'],
@@ -152,7 +152,7 @@ export const GetUsageSummaryContract = defineQuery({
152
152
  export const CheckFeatureAccessContract = defineQuery({
153
153
  meta: {
154
154
  key: 'saas.billing.feature.check',
155
- version: 1,
155
+ version: '1.0.0',
156
156
  stability: 'stable',
157
157
  owners: [...OWNERS],
158
158
  tags: ['saas', 'billing', 'feature'],
@@ -7,7 +7,7 @@ import { StabilityEnum } from '@contractspec/lib.contracts';
7
7
  export const SubscriptionPresentation: PresentationSpec = {
8
8
  meta: {
9
9
  key: 'saas.billing.subscription',
10
- version: 1,
10
+ version: '1.0.0',
11
11
  title: 'Subscription Status',
12
12
  description:
13
13
  'Subscription status with plan info, limits, and current usage',
@@ -35,7 +35,7 @@ export const SubscriptionPresentation: PresentationSpec = {
35
35
  export const UsageDashboardPresentation: PresentationSpec = {
36
36
  meta: {
37
37
  key: 'saas.billing.usage',
38
- version: 1,
38
+ version: '1.0.0',
39
39
  title: 'Usage Dashboard',
40
40
  description: 'Usage metrics and breakdown by resource type',
41
41
  domain: 'saas-boilerplate',
@@ -7,7 +7,7 @@ import { StabilityEnum } from '@contractspec/lib.contracts';
7
7
  export const SaasDashboardPresentation: PresentationSpec = {
8
8
  meta: {
9
9
  key: 'saas.dashboard',
10
- version: 1,
10
+ version: '1.0.0',
11
11
  title: 'SaaS Dashboard',
12
12
  description:
13
13
  'Main SaaS dashboard with project overview, usage stats, and quick actions',
@@ -35,7 +35,7 @@ export const SaasDashboardPresentation: PresentationSpec = {
35
35
  export const SettingsPanelPresentation: PresentationSpec = {
36
36
  meta: {
37
37
  key: 'saas.settings',
38
- version: 1,
38
+ version: '1.0.0',
39
39
  title: 'Settings Panel',
40
40
  description: 'Organization and user settings panel',
41
41
  domain: 'saas-boilerplate',
package/src/example.ts CHANGED
@@ -1,11 +1,18 @@
1
- const example = {
2
- id: 'saas-boilerplate',
3
- title: 'SaaS Boilerplate',
4
- summary:
5
- 'Multi-tenant SaaS foundation with orgs, projects, settings, billing usage, and RBAC.',
6
- tags: ['saas', 'multi-tenant', 'billing', 'rbac'],
7
- kind: 'template',
8
- visibility: 'public',
1
+ import type { ExampleSpec } from '@contractspec/lib.contracts';
2
+
3
+ const example: ExampleSpec = {
4
+ meta: {
5
+ key: 'saas-boilerplate',
6
+ version: '1.0.0',
7
+ title: 'SaaS Boilerplate',
8
+ description:
9
+ 'Multi-tenant SaaS foundation with orgs, projects, settings, billing usage, and RBAC.',
10
+ kind: 'template',
11
+ visibility: 'public',
12
+ stability: 'experimental',
13
+ owners: ['@platform.core'],
14
+ tags: ['saas', 'multi-tenant', 'billing', 'rbac'],
15
+ },
9
16
  docs: {
10
17
  rootDocId: 'docs.examples.saas-boilerplate',
11
18
  },
@@ -26,6 +33,6 @@ const example = {
26
33
  studio: { enabled: true, installable: true },
27
34
  mcp: { enabled: true },
28
35
  },
29
- } as const;
36
+ };
30
37
 
31
38
  export default example;
@@ -73,7 +73,7 @@ const ProjectArchivedPayload = defineSchemaModel({
73
73
  export const ProjectCreatedEvent = defineEvent({
74
74
  meta: {
75
75
  key: 'project.created',
76
- version: 1,
76
+ version: '1.0.0',
77
77
  description: 'A new project has been created.',
78
78
  stability: 'stable',
79
79
  owners: ['@saas-team'],
@@ -88,7 +88,7 @@ export const ProjectCreatedEvent = defineEvent({
88
88
  export const ProjectUpdatedEvent = defineEvent({
89
89
  meta: {
90
90
  key: 'project.updated',
91
- version: 1,
91
+ version: '1.0.0',
92
92
  description: 'A project has been updated.',
93
93
  stability: 'stable',
94
94
  owners: ['@saas-team'],
@@ -103,7 +103,7 @@ export const ProjectUpdatedEvent = defineEvent({
103
103
  export const ProjectDeletedEvent = defineEvent({
104
104
  meta: {
105
105
  key: 'project.deleted',
106
- version: 1,
106
+ version: '1.0.0',
107
107
  description: 'A project has been deleted.',
108
108
  stability: 'stable',
109
109
  owners: ['@saas-team'],
@@ -118,7 +118,7 @@ export const ProjectDeletedEvent = defineEvent({
118
118
  export const ProjectArchivedEvent = defineEvent({
119
119
  meta: {
120
120
  key: 'project.archived',
121
- version: 1,
121
+ version: '1.0.0',
122
122
  description: 'A project has been archived.',
123
123
  stability: 'stable',
124
124
  owners: ['@saas-team'],
@@ -22,7 +22,7 @@ const OWNERS = ['example.saas-boilerplate'] as const;
22
22
  export const CreateProjectContract = defineCommand({
23
23
  meta: {
24
24
  key: 'saas.project.create',
25
- version: 1,
25
+ version: '1.0.0',
26
26
  stability: 'stable',
27
27
  owners: [...OWNERS],
28
28
  tags: ['saas', 'project', 'create'],
@@ -55,7 +55,7 @@ export const CreateProjectContract = defineCommand({
55
55
  emits: [
56
56
  {
57
57
  key: 'project.created',
58
- version: 1,
58
+ version: '1.0.0',
59
59
  when: 'Project is created',
60
60
  payload: ProjectModel,
61
61
  },
@@ -87,7 +87,7 @@ export const CreateProjectContract = defineCommand({
87
87
  export const GetProjectContract = defineQuery({
88
88
  meta: {
89
89
  key: 'saas.project.get',
90
- version: 1,
90
+ version: '1.0.0',
91
91
  stability: 'stable',
92
92
  owners: [...OWNERS],
93
93
  tags: ['saas', 'project', 'get'],
@@ -135,7 +135,7 @@ export const GetProjectContract = defineQuery({
135
135
  export const UpdateProjectContract = defineCommand({
136
136
  meta: {
137
137
  key: 'saas.project.update',
138
- version: 1,
138
+ version: '1.0.0',
139
139
  stability: 'stable',
140
140
  owners: [...OWNERS],
141
141
  tags: ['saas', 'project', 'update'],
@@ -154,7 +154,7 @@ export const UpdateProjectContract = defineCommand({
154
154
  emits: [
155
155
  {
156
156
  key: 'project.updated',
157
- version: 1,
157
+ version: '1.0.0',
158
158
  when: 'Project is updated',
159
159
  payload: ProjectModel,
160
160
  },
@@ -186,7 +186,7 @@ export const UpdateProjectContract = defineCommand({
186
186
  export const DeleteProjectContract = defineCommand({
187
187
  meta: {
188
188
  key: 'saas.project.delete',
189
- version: 1,
189
+ version: '1.0.0',
190
190
  stability: 'stable',
191
191
  owners: [...OWNERS],
192
192
  tags: ['saas', 'project', 'delete'],
@@ -205,7 +205,7 @@ export const DeleteProjectContract = defineCommand({
205
205
  emits: [
206
206
  {
207
207
  key: 'project.deleted',
208
- version: 1,
208
+ version: '1.0.0',
209
209
  when: 'Project is deleted',
210
210
  payload: ProjectDeletedPayloadModel,
211
211
  },
@@ -237,7 +237,7 @@ export const DeleteProjectContract = defineCommand({
237
237
  export const ListProjectsContract = defineQuery({
238
238
  meta: {
239
239
  key: 'saas.project.list',
240
- version: 1,
240
+ version: '1.0.0',
241
241
  stability: 'stable',
242
242
  owners: [...OWNERS],
243
243
  tags: ['saas', 'project', 'list'],
@@ -8,7 +8,7 @@ import { ProjectModel } from './project.schema';
8
8
  export const ProjectListPresentation: PresentationSpec = {
9
9
  meta: {
10
10
  key: 'saas.project.list',
11
- version: 1,
11
+ version: '1.0.0',
12
12
  title: 'Project List',
13
13
  description:
14
14
  'List view of projects with status, tags, and last updated info',
@@ -37,7 +37,7 @@ export const ProjectListPresentation: PresentationSpec = {
37
37
  export const ProjectDetailPresentation: PresentationSpec = {
38
38
  meta: {
39
39
  key: 'saas.project.detail',
40
- version: 1,
40
+ version: '1.0.0',
41
41
  title: 'Project Details',
42
42
  description: 'Detailed view of a project with settings and activity',
43
43
  domain: 'saas-boilerplate',
@@ -19,91 +19,95 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
19
19
  owners: ['@saas-team'],
20
20
  tags: ['saas', 'projects', 'billing'],
21
21
  stability: 'experimental',
22
- version: 1,
22
+ version: '1.0.0',
23
23
  },
24
24
 
25
25
  // All contract operations included in this feature
26
26
  operations: [
27
27
  // Project operations
28
- { key: 'saas.project.create', version: 1 },
29
- { key: 'saas.project.get', version: 1 },
30
- { key: 'saas.project.update', version: 1 },
31
- { key: 'saas.project.delete', version: 1 },
32
- { key: 'saas.project.list', version: 1 },
28
+ { key: 'saas.project.create', version: '1.0.0' },
29
+ { key: 'saas.project.get', version: '1.0.0' },
30
+ { key: 'saas.project.update', version: '1.0.0' },
31
+ { key: 'saas.project.delete', version: '1.0.0' },
32
+ { key: 'saas.project.list', version: '1.0.0' },
33
33
 
34
34
  // Billing operations
35
- { key: 'saas.billing.subscription.get', version: 1 },
36
- { key: 'saas.billing.usage.record', version: 1 },
37
- { key: 'saas.billing.usage.summary', version: 1 },
38
- { key: 'saas.billing.feature.check', version: 1 },
35
+ { key: 'saas.billing.subscription.get', version: '1.0.0' },
36
+ { key: 'saas.billing.usage.record', version: '1.0.0' },
37
+ { key: 'saas.billing.usage.summary', version: '1.0.0' },
38
+ { key: 'saas.billing.feature.check', version: '1.0.0' },
39
39
  ],
40
40
 
41
41
  // Events emitted by this feature
42
42
  events: [
43
43
  // Project events
44
- { key: 'project.created', version: 1 },
45
- { key: 'project.updated', version: 1 },
46
- { key: 'project.deleted', version: 1 },
47
- { key: 'project.archived', version: 1 },
44
+ { key: 'project.created', version: '1.0.0' },
45
+ { key: 'project.updated', version: '1.0.0' },
46
+ { key: 'project.deleted', version: '1.0.0' },
47
+ { key: 'project.archived', version: '1.0.0' },
48
48
 
49
49
  // Billing events
50
- { key: 'billing.usage.recorded', version: 1 },
51
- { key: 'billing.subscription.changed', version: 1 },
52
- { key: 'billing.limit.reached', version: 1 },
50
+ { key: 'billing.usage.recorded', version: '1.0.0' },
51
+ { key: 'billing.subscription.changed', version: '1.0.0' },
52
+ { key: 'billing.limit.reached', version: '1.0.0' },
53
53
  ],
54
54
 
55
55
  // Presentations associated with this feature
56
56
  presentations: [
57
- { key: 'saas.dashboard', version: 1 },
58
- { key: 'saas.project.list', version: 1 },
59
- { key: 'saas.project.detail', version: 1 },
60
- { key: 'saas.billing.subscription', version: 1 },
61
- { key: 'saas.billing.usage', version: 1 },
62
- { key: 'saas.settings', version: 1 },
57
+ { key: 'saas.dashboard', version: '1.0.0' },
58
+ { key: 'saas.project.list', version: '1.0.0' },
59
+ { key: 'saas.project.detail', version: '1.0.0' },
60
+ { key: 'saas.billing.subscription', version: '1.0.0' },
61
+ { key: 'saas.billing.usage', version: '1.0.0' },
62
+ { key: 'saas.settings', version: '1.0.0' },
63
63
  ],
64
64
 
65
65
  // Link operations to their primary presentations
66
66
  opToPresentation: [
67
67
  {
68
- op: { key: 'saas.project.list', version: 1 },
69
- pres: { key: 'saas.project.list', version: 1 },
68
+ op: { key: 'saas.project.list', version: '1.0.0' },
69
+ pres: { key: 'saas.project.list', version: '1.0.0' },
70
70
  },
71
71
  {
72
- op: { key: 'saas.project.get', version: 1 },
73
- pres: { key: 'saas.project.detail', version: 1 },
72
+ op: { key: 'saas.project.get', version: '1.0.0' },
73
+ pres: { key: 'saas.project.detail', version: '1.0.0' },
74
74
  },
75
75
  {
76
- op: { key: 'saas.billing.subscription.get', version: 1 },
77
- pres: { key: 'saas.billing.subscription', version: 1 },
76
+ op: { key: 'saas.billing.subscription.get', version: '1.0.0' },
77
+ pres: { key: 'saas.billing.subscription', version: '1.0.0' },
78
78
  },
79
79
  {
80
- op: { key: 'saas.billing.usage.summary', version: 1 },
81
- pres: { key: 'saas.billing.usage', version: 1 },
80
+ op: { key: 'saas.billing.usage.summary', version: '1.0.0' },
81
+ pres: { key: 'saas.billing.usage', version: '1.0.0' },
82
82
  },
83
83
  ],
84
84
 
85
85
  // Target requirements for multi-surface rendering
86
86
  presentationsTargets: [
87
- { key: 'saas.dashboard', version: 1, targets: ['react', 'markdown'] },
87
+ { key: 'saas.dashboard', version: '1.0.0', targets: ['react', 'markdown'] },
88
88
  {
89
89
  key: 'saas.project.list',
90
- version: 1,
90
+ version: '1.0.0',
91
91
  targets: ['react', 'markdown', 'application/json'],
92
92
  },
93
93
  {
94
94
  key: 'saas.billing.subscription',
95
- version: 1,
95
+ version: '1.0.0',
96
+ targets: ['react', 'markdown'],
97
+ },
98
+ {
99
+ key: 'saas.billing.usage',
100
+ version: '1.0.0',
96
101
  targets: ['react', 'markdown'],
97
102
  },
98
- { key: 'saas.billing.usage', version: 1, targets: ['react', 'markdown'] },
99
103
  ],
100
104
 
101
105
  // Capability requirements
102
106
  capabilities: {
103
107
  requires: [
104
- { key: 'identity', version: 1 },
105
- { key: 'audit-trail', version: 1 },
106
- { key: 'notifications', version: 1 },
108
+ { key: 'identity', version: '1.0.0' },
109
+ { key: 'audit-trail', version: '1.0.0' },
110
+ { key: 'notifications', version: '1.0.0' },
107
111
  ],
108
112
  },
109
113
  };