@lssm/example.saas-boilerplate 0.0.0-canary-20251216033905 → 0.0.0-canary-20251216062412
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.log +5 -5
- package/CHANGELOG.md +8 -8
- package/dist/billing/billing.contracts.js +1 -1
- package/dist/billing/billing.presentation.js +1 -1
- package/dist/dashboard/dashboard.presentation.js +1 -1
- package/dist/index.js +1 -1
- package/dist/project/project.presentation.js +1 -1
- package/dist/saas-boilerplate.feature.js +1 -0
- package/package.json +3 -3
- package/src/billing/billing.contracts.ts +1 -1
- package/src/billing/billing.presentation.ts +2 -2
- package/src/dashboard/dashboard.presentation.ts +2 -2
- package/src/index.ts +1 -1
- package/src/project/project.presentation.ts +2 -2
- package/src/{saas.feature.ts → saas-boilerplate.feature.ts} +11 -10
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/saas.feature.js +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,18 +2,18 @@ $ bun build:bundle && bun build:types
|
|
|
2
2
|
$ tsdown
|
|
3
3
|
[34mℹ[39m tsdown [2mv0.17.4[22m powered by rolldown [2mv1.0.0-beta.53[22m
|
|
4
4
|
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/saas-boilerplate/tsdown.config.js[24m
|
|
5
|
-
[34mℹ[39m entry: [34msrc/example.ts, src/index.ts, src/saas.feature.ts, src/
|
|
5
|
+
[34mℹ[39m entry: [34msrc/example.ts, src/index.ts, src/saas-boilerplate.feature.ts, src/dashboard/dashboard.presentation.ts, src/dashboard/index.ts, src/docs/index.ts, src/docs/saas-boilerplate.docblock.ts, src/billing/billing.contracts.ts, src/billing/billing.entity.ts, src/billing/billing.enum.ts, src/billing/billing.event.ts, src/billing/billing.handler.ts, src/billing/billing.presentation.ts, src/billing/billing.schema.ts, src/billing/index.ts, src/handlers/index.ts, src/presentations/index.ts, src/project/index.ts, src/project/project.contracts.ts, src/project/project.entity.ts, src/project/project.enum.ts, src/project/project.event.ts, src/project/project.handler.ts, src/project/project.presentation.ts, src/project/project.schema.ts, src/settings/index.ts, src/settings/settings.entity.ts, src/settings/settings.enum.ts, src/shared/mock-data.ts[39m
|
|
6
6
|
[34mℹ[39m target: [34mesnext[39m
|
|
7
7
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
8
8
|
[34mℹ[39m Build start
|
|
9
|
-
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m5.
|
|
9
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m5.04 kB[22m [2m│ gzip: 1.28 kB[22m
|
|
10
10
|
[34mℹ[39m [2mdist/[22m[1mdocs/saas-boilerplate.docblock.js[22m [2m3.46 kB[22m [2m│ gzip: 1.38 kB[22m
|
|
11
11
|
[34mℹ[39m [2mdist/[22m[1mproject/project.contracts.js[22m [2m2.78 kB[22m [2m│ gzip: 0.94 kB[22m
|
|
12
12
|
[34mℹ[39m [2mdist/[22m[1mbilling/billing.schema.js[22m [2m2.73 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
13
13
|
[34mℹ[39m [2mdist/[22m[1mbilling/billing.entity.js[22m [2m2.57 kB[22m [2m│ gzip: 0.94 kB[22m
|
|
14
14
|
[34mℹ[39m [2mdist/[22m[1mproject/project.schema.js[22m [2m2.57 kB[22m [2m│ gzip: 0.59 kB[22m
|
|
15
15
|
[34mℹ[39m [2mdist/[22m[1mshared/mock-data.js[22m [2m2.06 kB[22m [2m│ gzip: 0.78 kB[22m
|
|
16
|
-
[34mℹ[39m [2mdist/[22m[1msaas.feature.js[22m
|
|
16
|
+
[34mℹ[39m [2mdist/[22m[1msaas-boilerplate.feature.js[22m [2m2.00 kB[22m [2m│ gzip: 0.52 kB[22m
|
|
17
17
|
[34mℹ[39m [2mdist/[22m[1mproject/index.js[22m [2m1.87 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
18
18
|
[34mℹ[39m [2mdist/[22m[1mbilling/index.js[22m [2m1.87 kB[22m [2m│ gzip: 0.51 kB[22m
|
|
19
19
|
[34mℹ[39m [2mdist/[22m[1mbilling/billing.contracts.js[22m [2m1.86 kB[22m [2m│ gzip: 0.69 kB[22m
|
|
@@ -35,6 +35,6 @@ $ tsdown
|
|
|
35
35
|
[34mℹ[39m [2mdist/[22m[1msettings/index.js[22m [2m0.21 kB[22m [2m│ gzip: 0.13 kB[22m
|
|
36
36
|
[34mℹ[39m [2mdist/[22m[1mdashboard/index.js[22m [2m0.17 kB[22m [2m│ gzip: 0.11 kB[22m
|
|
37
37
|
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m0.04 kB[22m [2m│ gzip: 0.06 kB[22m
|
|
38
|
-
[34mℹ[39m 29 files, total:
|
|
39
|
-
[32m✔[39m Build complete in [
|
|
38
|
+
[34mℹ[39m 29 files, total: 43.06 kB
|
|
39
|
+
[32m✔[39m Build complete in [32m96ms[39m
|
|
40
40
|
$ tsc --noEmit
|
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# @lssm/example.saas-boilerplate
|
|
2
2
|
|
|
3
|
-
## 0.0.0-canary-
|
|
3
|
+
## 0.0.0-canary-20251216062412
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
7
|
- 3086383: refactor: dependencies upgrade
|
|
8
8
|
- Updated dependencies [3086383]
|
|
9
|
-
- @lssm/lib.contracts@0.0.0-canary-
|
|
10
|
-
- @lssm/lib.schema@0.0.0-canary-
|
|
11
|
-
- @lssm/lib.jobs@0.0.0-canary-
|
|
12
|
-
- @lssm/lib.bus@0.0.0-canary-
|
|
13
|
-
- @lssm/lib.identity-rbac@0.0.0-canary-
|
|
14
|
-
- @lssm/module.audit-trail@0.0.0-canary-
|
|
15
|
-
- @lssm/module.notifications@0.0.0-canary-
|
|
9
|
+
- @lssm/lib.contracts@0.0.0-canary-20251216062412
|
|
10
|
+
- @lssm/lib.schema@0.0.0-canary-20251216062412
|
|
11
|
+
- @lssm/lib.jobs@0.0.0-canary-20251216062412
|
|
12
|
+
- @lssm/lib.bus@0.0.0-canary-20251216062412
|
|
13
|
+
- @lssm/lib.identity-rbac@0.0.0-canary-20251216062412
|
|
14
|
+
- @lssm/module.audit-trail@0.0.0-canary-20251216062412
|
|
15
|
+
- @lssm/module.notifications@0.0.0-canary-20251216062412
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CheckFeatureAccessInputModel as e,CheckFeatureAccessOutputModel as t,GetUsageSummaryInputModel as n,GetUsageSummaryOutputModel as r,RecordUsageInputModel as i,RecordUsageOutputModel as a,SubscriptionModel as o,UsageRecordedPayloadModel as s}from"./billing.schema.js";import{defineCommand as c,defineQuery as l}from"@lssm/lib.contracts";const u=[
|
|
1
|
+
import{CheckFeatureAccessInputModel as e,CheckFeatureAccessOutputModel as t,GetUsageSummaryInputModel as n,GetUsageSummaryOutputModel as r,RecordUsageInputModel as i,RecordUsageOutputModel as a,SubscriptionModel as o,UsageRecordedPayloadModel as s}from"./billing.schema.js";import{defineCommand as c,defineQuery as l}from"@lssm/lib.contracts";const u=[`@example.saas-boilerplate`],d=l({meta:{name:`saas.billing.subscription.get`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`subscription`],description:`Get organization subscription status.`,goal:`Show current plan and billing status.`,context:`Billing page, plan upgrade prompts.`},io:{input:null,output:o},policy:{auth:`user`}}),f=c({meta:{name:`saas.billing.usage.record`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Record usage of a metered feature.`,goal:`Track feature usage for billing.`,context:`Called by services when metered features are used.`},io:{input:i,output:a},policy:{auth:`user`},sideEffects:{emits:[{name:`billing.usage.recorded`,version:1,when:`Usage is recorded`,payload:s}]}}),p=l({meta:{name:`saas.billing.usage.summary`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Get usage summary for the current billing period.`,goal:`Show usage vs limits.`,context:`Billing page, usage dashboards.`},io:{input:n,output:r},policy:{auth:`user`}}),m=l({meta:{name:`saas.billing.feature.check`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`feature`],description:`Check if organization has access to a feature.`,goal:`Gate features based on plan/usage.`,context:`Feature access checks, upgrade prompts.`},io:{input:e,output:t},policy:{auth:`user`}});export{m as CheckFeatureAccessContract,d as GetSubscriptionContract,p as GetUsageSummaryContract,f as RecordUsageContract};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={meta:{name:`saas.billing.subscription`,version:1,description:`Subscription status with plan info, limits, and current usage`,domain:`saas-boilerplate`,owners:[
|
|
1
|
+
const e={meta:{name:`saas.billing.subscription`,version:1,description:`Subscription status with plan info, limits, and current usage`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`billing`,`subscription`]},source:{type:`component`,framework:`react`,componentKey:`SubscriptionView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}},t={meta:{name:`saas.billing.usage`,version:1,description:`Usage metrics and breakdown by resource type`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`billing`,`usage`,`metrics`]},source:{type:`component`,framework:`react`,componentKey:`UsageDashboardView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}};export{e as SubscriptionPresentation,t as UsageDashboardPresentation};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={meta:{name:`saas.dashboard`,version:1,description:`Main SaaS dashboard with project overview, usage stats, and quick actions`,domain:`saas-boilerplate`,owners:[
|
|
1
|
+
const e={meta:{name:`saas.dashboard`,version:1,description:`Main SaaS dashboard with project overview, usage stats, and quick actions`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`dashboard`,`overview`]},source:{type:`component`,framework:`react`,componentKey:`SaasDashboard`},targets:[`react`,`markdown`],policy:{flags:[`saas.enabled`]}},t={meta:{name:`saas.settings`,version:1,description:`Organization and user settings panel`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`settings`,`config`]},source:{type:`component`,framework:`react`,componentKey:`SettingsPanel`},targets:[`react`],policy:{flags:[`saas.enabled`]}};export{e as SaasDashboardPresentation,t as SettingsPanelPresentation};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"./example.js";import{FeatureAccessReasonEnum as t,SubscriptionStatusSchemaEnum as n}from"./billing/billing.enum.js";import{CheckFeatureAccessInputModel as r,CheckFeatureAccessOutputModel as i,GetUsageSummaryInputModel as a,GetUsageSummaryOutputModel as o,RecordUsageInputModel as s,RecordUsageOutputModel as c,SubscriptionModel as ee,UsageRecordedPayloadModel as te,UsageSummaryModel as ne}from"./billing/billing.schema.js";import{CheckFeatureAccessContract as re,GetSubscriptionContract as l,GetUsageSummaryContract as u,RecordUsageContract as d}from"./billing/billing.contracts.js";import{SubscriptionChangedEvent as f,UsageLimitReachedEvent as p,UsageRecordedEvent as m}from"./billing/billing.event.js";import{BillingUsageEntity as h,SubscriptionEntity as g,SubscriptionStatusEnum as _,UsageLimitEntity as v}from"./billing/billing.entity.js";import{SubscriptionPresentation as y,UsageDashboardPresentation as b}from"./billing/billing.presentation.js";import{mockCheckFeatureAccessHandler as x,mockGetSubscriptionHandler as S,mockGetUsageSummaryHandler as C,mockRecordUsageHandler as w}from"./billing/billing.handler.js";import"./billing/index.js";import{ProjectStatusFilterEnum as T,ProjectStatusSchemaEnum as E}from"./project/project.enum.js";import{CreateProjectInputModel as D,DeleteProjectInputModel as O,DeleteProjectOutputModel as k,GetProjectInputModel as A,ListProjectsInputModel as j,ListProjectsOutputModel as M,ProjectDeletedPayloadModel as N,ProjectModel as P,UpdateProjectInputModel as F}from"./project/project.schema.js";import{CreateProjectContract as ie,DeleteProjectContract as I,GetProjectContract as L,ListProjectsContract as R,UpdateProjectContract as z}from"./project/project.contracts.js";import{ProjectArchivedEvent as B,ProjectCreatedEvent as V,ProjectDeletedEvent as H,ProjectUpdatedEvent as U}from"./project/project.event.js";import{ProjectEntity as W,ProjectMemberEntity as G,ProjectStatusEnum as K}from"./project/project.entity.js";import{ProjectDetailPresentation as q,ProjectListPresentation as J}from"./project/project.presentation.js";import{mockCreateProjectHandler as Y,mockDeleteProjectHandler as ae,mockGetProjectHandler as oe,mockListProjectsHandler as se,mockUpdateProjectHandler as ce}from"./project/project.handler.js";import"./project/index.js";import{SettingsScopeEnum as X}from"./settings/settings.enum.js";import{FeatureFlagEntity as Z,SettingsEntity as Q}from"./settings/settings.entity.js";import"./settings/index.js";import{SaasDashboardPresentation as le,SettingsPanelPresentation as ue}from"./dashboard/dashboard.presentation.js";import{SaasBoilerplateFeature as de}from"./saas.feature.js";import"./docs/index.js";import{identityRbacSchemaContribution as fe}from"@lssm/lib.identity-rbac";import{jobsSchemaContribution as pe}from"@lssm/lib.jobs";import{auditTrailSchemaContribution as me}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as he}from"@lssm/module.notifications";const $={moduleId:`@lssm/example.saas-boilerplate`,entities:[W,G,Q,Z,g,h,v],enums:[K,X,_]},ge={modules:[fe,pe,me,he,$],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{h as BillingUsageEntity,re as CheckFeatureAccessContract,r as CheckFeatureAccessInputModel,i as CheckFeatureAccessOutputModel,ie as CreateProjectContract,D as CreateProjectInputModel,I as DeleteProjectContract,O as DeleteProjectInputModel,k as DeleteProjectOutputModel,t as FeatureAccessReasonEnum,Z as FeatureFlagEntity,L as GetProjectContract,A as GetProjectInputModel,l as GetSubscriptionContract,u as GetUsageSummaryContract,a as GetUsageSummaryInputModel,o as GetUsageSummaryOutputModel,R as ListProjectsContract,j as ListProjectsInputModel,M as ListProjectsOutputModel,B as ProjectArchivedEvent,V as ProjectCreatedEvent,H as ProjectDeletedEvent,N as ProjectDeletedPayloadModel,q as ProjectDetailPresentation,W as ProjectEntity,J as ProjectListPresentation,G as ProjectMemberEntity,P as ProjectModel,K as ProjectStatusEnum,T as ProjectStatusFilterEnum,E as ProjectStatusSchemaEnum,U as ProjectUpdatedEvent,d as RecordUsageContract,s as RecordUsageInputModel,c as RecordUsageOutputModel,de as SaasBoilerplateFeature,le as SaasDashboardPresentation,Q as SettingsEntity,ue as SettingsPanelPresentation,X as SettingsScopeEnum,f as SubscriptionChangedEvent,g as SubscriptionEntity,ee as SubscriptionModel,y as SubscriptionPresentation,_ as SubscriptionStatusEnum,n as SubscriptionStatusSchemaEnum,z as UpdateProjectContract,F as UpdateProjectInputModel,b as UsageDashboardPresentation,v as UsageLimitEntity,p as UsageLimitReachedEvent,m as UsageRecordedEvent,te as UsageRecordedPayloadModel,ne as UsageSummaryModel,e as example,x as mockCheckFeatureAccessHandler,Y as mockCreateProjectHandler,ae as mockDeleteProjectHandler,oe as mockGetProjectHandler,S as mockGetSubscriptionHandler,C as mockGetUsageSummaryHandler,se as mockListProjectsHandler,w as mockRecordUsageHandler,ce as mockUpdateProjectHandler,$ as saasBoilerplateSchemaContribution,ge as schemaComposition};
|
|
1
|
+
import e from"./example.js";import{FeatureAccessReasonEnum as t,SubscriptionStatusSchemaEnum as n}from"./billing/billing.enum.js";import{CheckFeatureAccessInputModel as r,CheckFeatureAccessOutputModel as i,GetUsageSummaryInputModel as a,GetUsageSummaryOutputModel as o,RecordUsageInputModel as s,RecordUsageOutputModel as c,SubscriptionModel as ee,UsageRecordedPayloadModel as te,UsageSummaryModel as ne}from"./billing/billing.schema.js";import{CheckFeatureAccessContract as re,GetSubscriptionContract as l,GetUsageSummaryContract as u,RecordUsageContract as d}from"./billing/billing.contracts.js";import{SubscriptionChangedEvent as f,UsageLimitReachedEvent as p,UsageRecordedEvent as m}from"./billing/billing.event.js";import{BillingUsageEntity as h,SubscriptionEntity as g,SubscriptionStatusEnum as _,UsageLimitEntity as v}from"./billing/billing.entity.js";import{SubscriptionPresentation as y,UsageDashboardPresentation as b}from"./billing/billing.presentation.js";import{mockCheckFeatureAccessHandler as x,mockGetSubscriptionHandler as S,mockGetUsageSummaryHandler as C,mockRecordUsageHandler as w}from"./billing/billing.handler.js";import"./billing/index.js";import{ProjectStatusFilterEnum as T,ProjectStatusSchemaEnum as E}from"./project/project.enum.js";import{CreateProjectInputModel as D,DeleteProjectInputModel as O,DeleteProjectOutputModel as k,GetProjectInputModel as A,ListProjectsInputModel as j,ListProjectsOutputModel as M,ProjectDeletedPayloadModel as N,ProjectModel as P,UpdateProjectInputModel as F}from"./project/project.schema.js";import{CreateProjectContract as ie,DeleteProjectContract as I,GetProjectContract as L,ListProjectsContract as R,UpdateProjectContract as z}from"./project/project.contracts.js";import{ProjectArchivedEvent as B,ProjectCreatedEvent as V,ProjectDeletedEvent as H,ProjectUpdatedEvent as U}from"./project/project.event.js";import{ProjectEntity as W,ProjectMemberEntity as G,ProjectStatusEnum as K}from"./project/project.entity.js";import{ProjectDetailPresentation as q,ProjectListPresentation as J}from"./project/project.presentation.js";import{mockCreateProjectHandler as Y,mockDeleteProjectHandler as ae,mockGetProjectHandler as oe,mockListProjectsHandler as se,mockUpdateProjectHandler as ce}from"./project/project.handler.js";import"./project/index.js";import{SettingsScopeEnum as X}from"./settings/settings.enum.js";import{FeatureFlagEntity as Z,SettingsEntity as Q}from"./settings/settings.entity.js";import"./settings/index.js";import{SaasDashboardPresentation as le,SettingsPanelPresentation as ue}from"./dashboard/dashboard.presentation.js";import{SaasBoilerplateFeature as de}from"./saas-boilerplate.feature.js";import"./docs/index.js";import{identityRbacSchemaContribution as fe}from"@lssm/lib.identity-rbac";import{jobsSchemaContribution as pe}from"@lssm/lib.jobs";import{auditTrailSchemaContribution as me}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as he}from"@lssm/module.notifications";const $={moduleId:`@lssm/example.saas-boilerplate`,entities:[W,G,Q,Z,g,h,v],enums:[K,X,_]},ge={modules:[fe,pe,me,he,$],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{h as BillingUsageEntity,re as CheckFeatureAccessContract,r as CheckFeatureAccessInputModel,i as CheckFeatureAccessOutputModel,ie as CreateProjectContract,D as CreateProjectInputModel,I as DeleteProjectContract,O as DeleteProjectInputModel,k as DeleteProjectOutputModel,t as FeatureAccessReasonEnum,Z as FeatureFlagEntity,L as GetProjectContract,A as GetProjectInputModel,l as GetSubscriptionContract,u as GetUsageSummaryContract,a as GetUsageSummaryInputModel,o as GetUsageSummaryOutputModel,R as ListProjectsContract,j as ListProjectsInputModel,M as ListProjectsOutputModel,B as ProjectArchivedEvent,V as ProjectCreatedEvent,H as ProjectDeletedEvent,N as ProjectDeletedPayloadModel,q as ProjectDetailPresentation,W as ProjectEntity,J as ProjectListPresentation,G as ProjectMemberEntity,P as ProjectModel,K as ProjectStatusEnum,T as ProjectStatusFilterEnum,E as ProjectStatusSchemaEnum,U as ProjectUpdatedEvent,d as RecordUsageContract,s as RecordUsageInputModel,c as RecordUsageOutputModel,de as SaasBoilerplateFeature,le as SaasDashboardPresentation,Q as SettingsEntity,ue as SettingsPanelPresentation,X as SettingsScopeEnum,f as SubscriptionChangedEvent,g as SubscriptionEntity,ee as SubscriptionModel,y as SubscriptionPresentation,_ as SubscriptionStatusEnum,n as SubscriptionStatusSchemaEnum,z as UpdateProjectContract,F as UpdateProjectInputModel,b as UsageDashboardPresentation,v as UsageLimitEntity,p as UsageLimitReachedEvent,m as UsageRecordedEvent,te as UsageRecordedPayloadModel,ne as UsageSummaryModel,e as example,x as mockCheckFeatureAccessHandler,Y as mockCreateProjectHandler,ae as mockDeleteProjectHandler,oe as mockGetProjectHandler,S as mockGetSubscriptionHandler,C as mockGetUsageSummaryHandler,se as mockListProjectsHandler,w as mockRecordUsageHandler,ce as mockUpdateProjectHandler,$ as saasBoilerplateSchemaContribution,ge as schemaComposition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ProjectModel as e}from"./project.schema.js";const t={meta:{name:`saas.project.list`,version:1,description:`List view of projects with status, tags, and last updated info`,domain:`saas-boilerplate`,owners:[
|
|
1
|
+
import{ProjectModel as e}from"./project.schema.js";const t={meta:{name:`saas.project.list`,version:1,description:`List view of projects with status, tags, and last updated info`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`project`,`list`,`dashboard`]},source:{type:`component`,framework:`react`,componentKey:`ProjectListView`,props:e},targets:[`react`,`markdown`,`application/json`],policy:{flags:[`saas.projects.enabled`]}},n={meta:{name:`saas.project.detail`,version:1,description:`Detailed view of a project with settings and activity`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`project`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`ProjectDetailView`},targets:[`react`,`markdown`],policy:{flags:[`saas.projects.enabled`]}};export{n as ProjectDetailPresentation,t as ProjectListPresentation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={meta:{key:`saas-boilerplate`,title:`SaaS Boilerplate`,description:`SaaS application foundation with projects, billing, and settings`,domain:`saas`,owners:[`@saas-team`],tags:[`saas`,`projects`,`billing`],stability:`experimental`},operations:[{name:`saas.project.create`,version:1},{name:`saas.project.get`,version:1},{name:`saas.project.update`,version:1},{name:`saas.project.delete`,version:1},{name:`saas.project.list`,version:1},{name:`saas.billing.subscription.get`,version:1},{name:`saas.billing.usage.record`,version:1},{name:`saas.billing.usage.summary`,version:1},{name:`saas.billing.feature.check`,version:1}],events:[{name:`project.created`,version:1},{name:`project.updated`,version:1},{name:`project.deleted`,version:1},{name:`project.archived`,version:1},{name:`billing.usage.recorded`,version:1},{name:`billing.subscription.changed`,version:1},{name:`billing.limit.reached`,version:1}],presentations:[{name:`saas.dashboard`,version:1},{name:`saas.project.list`,version:1},{name:`saas.project.detail`,version:1},{name:`saas.billing.subscription`,version:1},{name:`saas.billing.usage`,version:1},{name:`saas.settings`,version:1}],opToPresentation:[{op:{name:`saas.project.list`,version:1},pres:{name:`saas.project.list`,version:1}},{op:{name:`saas.project.get`,version:1},pres:{name:`saas.project.detail`,version:1}},{op:{name:`saas.billing.subscription.get`,version:1},pres:{name:`saas.billing.subscription`,version:1}},{op:{name:`saas.billing.usage.summary`,version:1},pres:{name:`saas.billing.usage`,version:1}}],presentationsTargets:[{name:`saas.dashboard`,version:1,targets:[`react`,`markdown`]},{name:`saas.project.list`,version:1,targets:[`react`,`markdown`,`application/json`]},{name:`saas.billing.subscription`,version:1,targets:[`react`,`markdown`]},{name:`saas.billing.usage`,version:1,targets:[`react`,`markdown`]}],capabilities:{requires:[{key:`identity`,version:1},{key:`audit-trail`,version:1},{key:`notifications`,version:1}]}};export{e as SaasBoilerplateFeature};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/example.saas-boilerplate",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251216062412",
|
|
4
4
|
"description": "SaaS Boilerplate - Users, Orgs, Projects, Billing, Settings",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"./project/project.handler": "./src/project/project.handler.ts",
|
|
31
31
|
"./project/project.presentation": "./src/project/project.presentation.ts",
|
|
32
32
|
"./project/project.schema": "./src/project/project.schema.ts",
|
|
33
|
-
"./saas.feature": "./src/saas.feature.ts",
|
|
33
|
+
"./saas-boilerplate.feature": "./src/saas-boilerplate.feature.ts",
|
|
34
34
|
"./settings": "./src/settings/index.ts",
|
|
35
35
|
"./settings/settings.entity": "./src/settings/settings.entity.ts",
|
|
36
36
|
"./settings/settings.enum": "./src/settings/settings.enum.ts",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"./project/project.handler": "./dist/project/project.handler.js",
|
|
92
92
|
"./project/project.presentation": "./dist/project/project.presentation.js",
|
|
93
93
|
"./project/project.schema": "./dist/project/project.schema.js",
|
|
94
|
-
"./saas.feature": "./dist/saas.feature.js",
|
|
94
|
+
"./saas-boilerplate.feature": "./dist/saas-boilerplate.feature.js",
|
|
95
95
|
"./settings": "./dist/settings/index.js",
|
|
96
96
|
"./settings/settings.entity": "./dist/settings/settings.entity.js",
|
|
97
97
|
"./settings/settings.enum": "./dist/settings/settings.enum.js",
|
|
@@ -10,7 +10,7 @@ export const SubscriptionPresentation: PresentationDescriptorV2 = {
|
|
|
10
10
|
description:
|
|
11
11
|
'Subscription status with plan info, limits, and current usage',
|
|
12
12
|
domain: 'saas-boilerplate',
|
|
13
|
-
owners: ['saas-team'],
|
|
13
|
+
owners: ['@saas-team'],
|
|
14
14
|
tags: ['billing', 'subscription'],
|
|
15
15
|
},
|
|
16
16
|
source: {
|
|
@@ -33,7 +33,7 @@ export const UsageDashboardPresentation: PresentationDescriptorV2 = {
|
|
|
33
33
|
version: 1,
|
|
34
34
|
description: 'Usage metrics and breakdown by resource type',
|
|
35
35
|
domain: 'saas-boilerplate',
|
|
36
|
-
owners: ['saas-team'],
|
|
36
|
+
owners: ['@saas-team'],
|
|
37
37
|
tags: ['billing', 'usage', 'metrics'],
|
|
38
38
|
},
|
|
39
39
|
source: {
|
|
@@ -10,7 +10,7 @@ export const SaasDashboardPresentation: PresentationDescriptorV2 = {
|
|
|
10
10
|
description:
|
|
11
11
|
'Main SaaS dashboard with project overview, usage stats, and quick actions',
|
|
12
12
|
domain: 'saas-boilerplate',
|
|
13
|
-
owners: ['saas-team'],
|
|
13
|
+
owners: ['@saas-team'],
|
|
14
14
|
tags: ['dashboard', 'overview'],
|
|
15
15
|
},
|
|
16
16
|
source: {
|
|
@@ -33,7 +33,7 @@ export const SettingsPanelPresentation: PresentationDescriptorV2 = {
|
|
|
33
33
|
version: 1,
|
|
34
34
|
description: 'Organization and user settings panel',
|
|
35
35
|
domain: 'saas-boilerplate',
|
|
36
|
-
owners: ['saas-team'],
|
|
36
|
+
owners: ['@saas-team'],
|
|
37
37
|
tags: ['settings', 'config'],
|
|
38
38
|
},
|
|
39
39
|
source: {
|
package/src/index.ts
CHANGED
|
@@ -8,7 +8,7 @@ export * from './settings';
|
|
|
8
8
|
export * from './dashboard';
|
|
9
9
|
|
|
10
10
|
// Export feature and example metadata
|
|
11
|
-
export * from './saas.feature';
|
|
11
|
+
export * from './saas-boilerplate.feature';
|
|
12
12
|
export { default as example } from './example';
|
|
13
13
|
|
|
14
14
|
// Import docs for registration
|
|
@@ -11,7 +11,7 @@ export const ProjectListPresentation: PresentationDescriptorV2 = {
|
|
|
11
11
|
description:
|
|
12
12
|
'List view of projects with status, tags, and last updated info',
|
|
13
13
|
domain: 'saas-boilerplate',
|
|
14
|
-
owners: ['saas-team'],
|
|
14
|
+
owners: ['@saas-team'],
|
|
15
15
|
tags: ['project', 'list', 'dashboard'],
|
|
16
16
|
},
|
|
17
17
|
source: {
|
|
@@ -35,7 +35,7 @@ export const ProjectDetailPresentation: PresentationDescriptorV2 = {
|
|
|
35
35
|
version: 1,
|
|
36
36
|
description: 'Detailed view of a project with settings and activity',
|
|
37
37
|
domain: 'saas-boilerplate',
|
|
38
|
-
owners: ['saas-team'],
|
|
38
|
+
owners: ['@saas-team'],
|
|
39
39
|
tags: ['project', 'detail'],
|
|
40
40
|
},
|
|
41
41
|
source: {
|
|
@@ -16,7 +16,7 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
|
|
|
16
16
|
description:
|
|
17
17
|
'SaaS application foundation with projects, billing, and settings',
|
|
18
18
|
domain: 'saas',
|
|
19
|
-
owners: ['saas-team'],
|
|
19
|
+
owners: ['@saas-team'],
|
|
20
20
|
tags: ['saas', 'projects', 'billing'],
|
|
21
21
|
stability: 'experimental',
|
|
22
22
|
},
|
|
@@ -31,10 +31,10 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
|
|
|
31
31
|
{ name: 'saas.project.list', version: 1 },
|
|
32
32
|
|
|
33
33
|
// Billing operations
|
|
34
|
-
{ name: 'saas.billing.
|
|
35
|
-
{ name: 'saas.billing.
|
|
36
|
-
{ name: 'saas.billing.
|
|
37
|
-
{ name: 'saas.billing.
|
|
34
|
+
{ name: 'saas.billing.subscription.get', version: 1 },
|
|
35
|
+
{ name: 'saas.billing.usage.record', version: 1 },
|
|
36
|
+
{ name: 'saas.billing.usage.summary', version: 1 },
|
|
37
|
+
{ name: 'saas.billing.feature.check', version: 1 },
|
|
38
38
|
],
|
|
39
39
|
|
|
40
40
|
// Events emitted by this feature
|
|
@@ -43,11 +43,12 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
|
|
|
43
43
|
{ name: 'project.created', version: 1 },
|
|
44
44
|
{ name: 'project.updated', version: 1 },
|
|
45
45
|
{ name: 'project.deleted', version: 1 },
|
|
46
|
+
{ name: 'project.archived', version: 1 },
|
|
46
47
|
|
|
47
48
|
// Billing events
|
|
48
|
-
{ name: 'usage.recorded', version: 1 },
|
|
49
|
-
{ name: 'subscription.
|
|
50
|
-
{ name: 'limit.
|
|
49
|
+
{ name: 'billing.usage.recorded', version: 1 },
|
|
50
|
+
{ name: 'billing.subscription.changed', version: 1 },
|
|
51
|
+
{ name: 'billing.limit.reached', version: 1 },
|
|
51
52
|
],
|
|
52
53
|
|
|
53
54
|
// Presentations associated with this feature
|
|
@@ -71,11 +72,11 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
|
|
|
71
72
|
pres: { name: 'saas.project.detail', version: 1 },
|
|
72
73
|
},
|
|
73
74
|
{
|
|
74
|
-
op: { name: 'saas.billing.
|
|
75
|
+
op: { name: 'saas.billing.subscription.get', version: 1 },
|
|
75
76
|
pres: { name: 'saas.billing.subscription', version: 1 },
|
|
76
77
|
},
|
|
77
78
|
{
|
|
78
|
-
op: { name: 'saas.billing.
|
|
79
|
+
op: { name: 'saas.billing.usage.summary', version: 1 },
|
|
79
80
|
pres: { name: 'saas.billing.usage', version: 1 },
|
|
80
81
|
},
|
|
81
82
|
],
|