@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.
- package/.turbo/turbo-build$colon$bundle.log +24 -24
- package/.turbo/turbo-build.log +24 -24
- package/CHANGELOG.md +31 -0
- package/dist/billing/billing.event.d.ts +21 -21
- package/dist/billing/billing.event.js +3 -3
- package/dist/billing/billing.event.js.map +1 -1
- package/dist/billing/billing.operations.d.ts +43 -43
- package/dist/billing/billing.operations.d.ts.map +1 -1
- package/dist/billing/billing.operations.js +5 -5
- package/dist/billing/billing.operations.js.map +1 -1
- package/dist/billing/billing.presentation.js +2 -2
- package/dist/billing/billing.presentation.js.map +1 -1
- package/dist/billing/billing.schema.d.ts +47 -47
- package/dist/dashboard/dashboard.presentation.js +2 -2
- package/dist/dashboard/dashboard.presentation.js.map +1 -1
- package/dist/example.d.ts +3 -33
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +16 -11
- package/dist/example.js.map +1 -1
- package/dist/project/project.entity.d.ts +24 -24
- package/dist/project/project.enum.d.ts +3 -3
- package/dist/project/project.event.d.ts +22 -22
- package/dist/project/project.event.js +4 -4
- package/dist/project/project.event.js.map +1 -1
- package/dist/project/project.operations.d.ts +106 -106
- package/dist/project/project.operations.d.ts.map +1 -1
- package/dist/project/project.operations.js +8 -8
- package/dist/project/project.operations.js.map +1 -1
- package/dist/project/project.presentation.js +2 -2
- package/dist/project/project.presentation.js.map +1 -1
- package/dist/project/project.schema.d.ts +54 -54
- package/dist/saas-boilerplate.feature.js +38 -38
- package/dist/saas-boilerplate.feature.js.map +1 -1
- package/dist/settings/settings.entity.d.ts +24 -24
- package/dist/settings/settings.enum.d.ts +2 -2
- package/package.json +10 -10
- package/src/billing/billing.event.ts +3 -3
- package/src/billing/billing.operations.ts +5 -5
- package/src/billing/billing.presentation.ts +2 -2
- package/src/dashboard/dashboard.presentation.ts +2 -2
- package/src/example.ts +16 -9
- package/src/project/project.event.ts +4 -4
- package/src/project/project.operations.ts +8 -8
- package/src/project/project.presentation.ts +2 -2
- package/src/saas-boilerplate.feature.ts +42 -38
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.operations.d.ts","names":[],"sources":["../../src/billing/billing.operations.ts"],"sourcesContent":[],"mappings":";;;;;;;cAiBa,yBAAuB,
|
|
1
|
+
{"version":3,"file":"billing.operations.d.ts","names":[],"sources":["../../src/billing/billing.operations.ts"],"sourcesContent":[],"mappings":";;;;;;;cAiBa,yBAAuB,4BAAA,CAAA,cAuClC,0BAAA,CAvCkC,cAAA,6BAAA;EAAvB,EAAA,EAAA;IAuCX,IAAA,EAvCkC,0BAAA,CAAA,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;;;EAAA,CAAA;EAAA,MAAA,EAAA;IA4CvB,IAAA,qCA6CX,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,CAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;8CA7C8B,KAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;EAAA,CAAA;AAkDhC,CAAA,CAAA,EAAa,SAAA,CAAA;;;;cAlDA,kDAAmB,yCAAA;;UA6C9B,0BAAA,CAAA;;;;;;EAKkC,CAAA;EAwCvB,QAAA,EAAA;IAmCX,IAAA,sCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;EAnCqC,CAAA;;;;;EAAA,QAAA,EAAA;;;;;;UA1FP,0BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkDnB,sDAAuB,yCAAA;;UAmClC,0BAAA,CAAA;;;;;UAnCkC,0BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwCvB,yDAA0B,yCAAA;;UAmCrC,0BAAA,CAAA;;;;;UAnCqC,0BAAA,CAAA"}
|
|
@@ -9,7 +9,7 @@ const OWNERS = ["@example.saas-boilerplate"];
|
|
|
9
9
|
const GetSubscriptionContract = defineQuery({
|
|
10
10
|
meta: {
|
|
11
11
|
key: "saas.billing.subscription.get",
|
|
12
|
-
version: 1,
|
|
12
|
+
version: "1.0.0",
|
|
13
13
|
stability: "stable",
|
|
14
14
|
owners: [...OWNERS],
|
|
15
15
|
tags: [
|
|
@@ -50,7 +50,7 @@ const GetSubscriptionContract = defineQuery({
|
|
|
50
50
|
const RecordUsageContract = defineCommand({
|
|
51
51
|
meta: {
|
|
52
52
|
key: "saas.billing.usage.record",
|
|
53
|
-
version: 1,
|
|
53
|
+
version: "1.0.0",
|
|
54
54
|
stability: "stable",
|
|
55
55
|
owners: [...OWNERS],
|
|
56
56
|
tags: [
|
|
@@ -69,7 +69,7 @@ const RecordUsageContract = defineCommand({
|
|
|
69
69
|
policy: { auth: "user" },
|
|
70
70
|
sideEffects: { emits: [{
|
|
71
71
|
key: "billing.usage.recorded",
|
|
72
|
-
version: 1,
|
|
72
|
+
version: "1.0.0",
|
|
73
73
|
when: "Usage is recorded",
|
|
74
74
|
payload: UsageRecordedPayloadModel
|
|
75
75
|
}] },
|
|
@@ -100,7 +100,7 @@ const RecordUsageContract = defineCommand({
|
|
|
100
100
|
const GetUsageSummaryContract = defineQuery({
|
|
101
101
|
meta: {
|
|
102
102
|
key: "saas.billing.usage.summary",
|
|
103
|
-
version: 1,
|
|
103
|
+
version: "1.0.0",
|
|
104
104
|
stability: "stable",
|
|
105
105
|
owners: [...OWNERS],
|
|
106
106
|
tags: [
|
|
@@ -141,7 +141,7 @@ const GetUsageSummaryContract = defineQuery({
|
|
|
141
141
|
const CheckFeatureAccessContract = defineQuery({
|
|
142
142
|
meta: {
|
|
143
143
|
key: "saas.billing.feature.check",
|
|
144
|
-
version: 1,
|
|
144
|
+
version: "1.0.0",
|
|
145
145
|
stability: "stable",
|
|
146
146
|
owners: [...OWNERS],
|
|
147
147
|
tags: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.operations.js","names":[],"sources":["../../src/billing/billing.operations.ts"],"sourcesContent":["import { defineCommand, defineQuery } from '@contractspec/lib.contracts';\nimport {\n CheckFeatureAccessInputModel,\n CheckFeatureAccessOutputModel,\n GetUsageSummaryInputModel,\n GetUsageSummaryOutputModel,\n RecordUsageInputModel,\n RecordUsageOutputModel,\n SubscriptionModel,\n UsageRecordedPayloadModel,\n} from './billing.schema';\n\nconst OWNERS = ['@example.saas-boilerplate'] as const;\n\n/**\n * Get subscription status.\n */\nexport const GetSubscriptionContract = defineQuery({\n meta: {\n key: 'saas.billing.subscription.get',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'subscription'],\n description: 'Get organization subscription status.',\n goal: 'Show current plan and billing status.',\n context: 'Billing page, plan upgrade prompts.',\n },\n io: {\n input: null,\n output: SubscriptionModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'get-subscription-happy-path',\n given: ['Organization has active subscription'],\n when: ['User requests subscription status'],\n then: ['Subscription details are returned'],\n },\n ],\n examples: [\n {\n key: 'get-basic',\n input: null,\n output: {\n plan: 'pro',\n status: 'active',\n currentPeriodEnd: '2025-02-01T00:00:00Z',\n },\n },\n ],\n },\n});\n\n/**\n * Record feature usage.\n */\nexport const RecordUsageContract = defineCommand({\n meta: {\n key: 'saas.billing.usage.record',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'usage'],\n description: 'Record usage of a metered feature.',\n goal: 'Track feature usage for billing.',\n context: 'Called by services when metered features are used.',\n },\n io: {\n input: RecordUsageInputModel,\n output: RecordUsageOutputModel,\n },\n policy: {\n auth: 'user',\n },\n sideEffects: {\n emits: [\n {\n key: 'billing.usage.recorded',\n version: 1,\n when: 'Usage is recorded',\n payload: UsageRecordedPayloadModel,\n },\n ],\n },\n acceptance: {\n scenarios: [\n {\n key: 'record-usage-happy-path',\n given: ['Organization exists'],\n when: ['System records feature usage'],\n then: ['Usage is recorded'],\n },\n ],\n examples: [\n {\n key: 'record-api-call',\n input: { feature: 'api_calls', quantity: 1, idempotencyKey: 'abc-123' },\n output: { recorded: true, currentUsage: 100 },\n },\n ],\n },\n});\n\n/**\n * Get usage summary.\n */\nexport const GetUsageSummaryContract = defineQuery({\n meta: {\n key: 'saas.billing.usage.summary',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'usage'],\n description: 'Get usage summary for the current billing period.',\n goal: 'Show usage vs limits.',\n context: 'Billing page, usage dashboards.',\n },\n io: {\n input: GetUsageSummaryInputModel,\n output: GetUsageSummaryOutputModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'get-usage-happy-path',\n given: ['Organization has usage history'],\n when: ['User requests usage summary'],\n then: ['Usage metrics are returned'],\n },\n ],\n examples: [\n {\n key: 'get-current-usage',\n input: { period: 'current' },\n output: { features: [{ name: 'api_calls', used: 100, limit: 1000 }] },\n },\n ],\n },\n});\n\n/**\n * Check feature access.\n */\nexport const CheckFeatureAccessContract = defineQuery({\n meta: {\n key: 'saas.billing.feature.check',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'feature'],\n description: 'Check if organization has access to a feature.',\n goal: 'Gate features based on plan/usage.',\n context: 'Feature access checks, upgrade prompts.',\n },\n io: {\n input: CheckFeatureAccessInputModel,\n output: CheckFeatureAccessOutputModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'check-access-granted',\n given: ['Organization is on Pro plan'],\n when: ['User checks access to Pro feature'],\n then: ['Access is granted'],\n },\n ],\n examples: [\n {\n key: 'check-advanced-reports',\n input: { feature: 'advanced_reports' },\n output: { hasAccess: true, reason: 'Included in Pro plan' },\n },\n ],\n },\n});\n"],"mappings":";;;;AAYA,MAAM,SAAS,CAAC,4BAA4B;;;;AAK5C,MAAa,0BAA0B,YAAY;CACjD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAe;EACzC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,uCAAuC;GAC/C,MAAM,CAAC,oCAAoC;GAC3C,MAAM,CAAC,oCAAoC;GAC5C,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO;GACP,QAAQ;IACN,MAAM;IACN,QAAQ;IACR,kBAAkB;IACnB;GACF,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,sBAAsB,cAAc;CAC/C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAQ;EAClC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,aAAa,EACX,OAAO,CACL;EACE,KAAK;EACL,SAAS;EACT,MAAM;EACN,SAAS;EACV,CACF,EACF;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,sBAAsB;GAC9B,MAAM,CAAC,+BAA+B;GACtC,MAAM,CAAC,oBAAoB;GAC5B,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO;IAAE,SAAS;IAAa,UAAU;IAAG,gBAAgB;IAAW;GACvE,QAAQ;IAAE,UAAU;IAAM,cAAc;IAAK;GAC9C,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,0BAA0B,YAAY;CACjD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAQ;EAClC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,iCAAiC;GACzC,MAAM,CAAC,8BAA8B;GACrC,MAAM,CAAC,6BAA6B;GACrC,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO,EAAE,QAAQ,WAAW;GAC5B,QAAQ,EAAE,UAAU,CAAC;IAAE,MAAM;IAAa,MAAM;IAAK,OAAO;IAAM,CAAC,EAAE;GACtE,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,6BAA6B,YAAY;CACpD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAU;EACpC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,8BAA8B;GACtC,MAAM,CAAC,oCAAoC;GAC3C,MAAM,CAAC,oBAAoB;GAC5B,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO,EAAE,SAAS,oBAAoB;GACtC,QAAQ;IAAE,WAAW;IAAM,QAAQ;IAAwB;GAC5D,CACF;EACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"billing.operations.js","names":[],"sources":["../../src/billing/billing.operations.ts"],"sourcesContent":["import { defineCommand, defineQuery } from '@contractspec/lib.contracts';\nimport {\n CheckFeatureAccessInputModel,\n CheckFeatureAccessOutputModel,\n GetUsageSummaryInputModel,\n GetUsageSummaryOutputModel,\n RecordUsageInputModel,\n RecordUsageOutputModel,\n SubscriptionModel,\n UsageRecordedPayloadModel,\n} from './billing.schema';\n\nconst OWNERS = ['@example.saas-boilerplate'] as const;\n\n/**\n * Get subscription status.\n */\nexport const GetSubscriptionContract = defineQuery({\n meta: {\n key: 'saas.billing.subscription.get',\n version: '1.0.0',\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'subscription'],\n description: 'Get organization subscription status.',\n goal: 'Show current plan and billing status.',\n context: 'Billing page, plan upgrade prompts.',\n },\n io: {\n input: null,\n output: SubscriptionModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'get-subscription-happy-path',\n given: ['Organization has active subscription'],\n when: ['User requests subscription status'],\n then: ['Subscription details are returned'],\n },\n ],\n examples: [\n {\n key: 'get-basic',\n input: null,\n output: {\n plan: 'pro',\n status: 'active',\n currentPeriodEnd: '2025-02-01T00:00:00Z',\n },\n },\n ],\n },\n});\n\n/**\n * Record feature usage.\n */\nexport const RecordUsageContract = defineCommand({\n meta: {\n key: 'saas.billing.usage.record',\n version: '1.0.0',\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'usage'],\n description: 'Record usage of a metered feature.',\n goal: 'Track feature usage for billing.',\n context: 'Called by services when metered features are used.',\n },\n io: {\n input: RecordUsageInputModel,\n output: RecordUsageOutputModel,\n },\n policy: {\n auth: 'user',\n },\n sideEffects: {\n emits: [\n {\n key: 'billing.usage.recorded',\n version: '1.0.0',\n when: 'Usage is recorded',\n payload: UsageRecordedPayloadModel,\n },\n ],\n },\n acceptance: {\n scenarios: [\n {\n key: 'record-usage-happy-path',\n given: ['Organization exists'],\n when: ['System records feature usage'],\n then: ['Usage is recorded'],\n },\n ],\n examples: [\n {\n key: 'record-api-call',\n input: { feature: 'api_calls', quantity: 1, idempotencyKey: 'abc-123' },\n output: { recorded: true, currentUsage: 100 },\n },\n ],\n },\n});\n\n/**\n * Get usage summary.\n */\nexport const GetUsageSummaryContract = defineQuery({\n meta: {\n key: 'saas.billing.usage.summary',\n version: '1.0.0',\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'usage'],\n description: 'Get usage summary for the current billing period.',\n goal: 'Show usage vs limits.',\n context: 'Billing page, usage dashboards.',\n },\n io: {\n input: GetUsageSummaryInputModel,\n output: GetUsageSummaryOutputModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'get-usage-happy-path',\n given: ['Organization has usage history'],\n when: ['User requests usage summary'],\n then: ['Usage metrics are returned'],\n },\n ],\n examples: [\n {\n key: 'get-current-usage',\n input: { period: 'current' },\n output: { features: [{ name: 'api_calls', used: 100, limit: 1000 }] },\n },\n ],\n },\n});\n\n/**\n * Check feature access.\n */\nexport const CheckFeatureAccessContract = defineQuery({\n meta: {\n key: 'saas.billing.feature.check',\n version: '1.0.0',\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'billing', 'feature'],\n description: 'Check if organization has access to a feature.',\n goal: 'Gate features based on plan/usage.',\n context: 'Feature access checks, upgrade prompts.',\n },\n io: {\n input: CheckFeatureAccessInputModel,\n output: CheckFeatureAccessOutputModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'check-access-granted',\n given: ['Organization is on Pro plan'],\n when: ['User checks access to Pro feature'],\n then: ['Access is granted'],\n },\n ],\n examples: [\n {\n key: 'check-advanced-reports',\n input: { feature: 'advanced_reports' },\n output: { hasAccess: true, reason: 'Included in Pro plan' },\n },\n ],\n },\n});\n"],"mappings":";;;;AAYA,MAAM,SAAS,CAAC,4BAA4B;;;;AAK5C,MAAa,0BAA0B,YAAY;CACjD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAe;EACzC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,uCAAuC;GAC/C,MAAM,CAAC,oCAAoC;GAC3C,MAAM,CAAC,oCAAoC;GAC5C,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO;GACP,QAAQ;IACN,MAAM;IACN,QAAQ;IACR,kBAAkB;IACnB;GACF,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,sBAAsB,cAAc;CAC/C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAQ;EAClC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,aAAa,EACX,OAAO,CACL;EACE,KAAK;EACL,SAAS;EACT,MAAM;EACN,SAAS;EACV,CACF,EACF;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,sBAAsB;GAC9B,MAAM,CAAC,+BAA+B;GACtC,MAAM,CAAC,oBAAoB;GAC5B,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO;IAAE,SAAS;IAAa,UAAU;IAAG,gBAAgB;IAAW;GACvE,QAAQ;IAAE,UAAU;IAAM,cAAc;IAAK;GAC9C,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,0BAA0B,YAAY;CACjD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAQ;EAClC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,iCAAiC;GACzC,MAAM,CAAC,8BAA8B;GACrC,MAAM,CAAC,6BAA6B;GACrC,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO,EAAE,QAAQ,WAAW;GAC5B,QAAQ,EAAE,UAAU,CAAC;IAAE,MAAM;IAAa,MAAM;IAAK,OAAO;IAAM,CAAC,EAAE;GACtE,CACF;EACF;CACF,CAAC;;;;AAKF,MAAa,6BAA6B,YAAY;CACpD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAQ;GAAW;GAAU;EACpC,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EACN,MAAM,QACP;CACD,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,8BAA8B;GACtC,MAAM,CAAC,oCAAoC;GAC3C,MAAM,CAAC,oBAAoB;GAC5B,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO,EAAE,SAAS,oBAAoB;GACtC,QAAQ;IAAE,WAAW;IAAM,QAAQ;IAAwB;GAC5D,CACF;EACF;CACF,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { StabilityEnum } from "@contractspec/lib.contracts";
|
|
|
7
7
|
const SubscriptionPresentation = {
|
|
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: "Subscription status with plan info, limits, and current usage",
|
|
13
13
|
domain: "saas-boilerplate",
|
|
@@ -31,7 +31,7 @@ const SubscriptionPresentation = {
|
|
|
31
31
|
const UsageDashboardPresentation = {
|
|
32
32
|
meta: {
|
|
33
33
|
key: "saas.billing.usage",
|
|
34
|
-
version: 1,
|
|
34
|
+
version: "1.0.0",
|
|
35
35
|
title: "Usage Dashboard",
|
|
36
36
|
description: "Usage metrics and breakdown by resource type",
|
|
37
37
|
domain: "saas-boilerplate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.presentation.js","names":["SubscriptionPresentation: PresentationSpec","UsageDashboardPresentation: PresentationSpec"],"sources":["../../src/billing/billing.presentation.ts"],"sourcesContent":["import type { PresentationSpec } from '@contractspec/lib.contracts';\nimport { StabilityEnum } from '@contractspec/lib.contracts';\n\n/**\n * Presentation for subscription overview.\n */\nexport const SubscriptionPresentation: PresentationSpec = {\n meta: {\n key: 'saas.billing.subscription',\n version: 1,\n title: 'Subscription Status',\n description:\n 'Subscription status with plan info, limits, and current usage',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['billing', 'subscription'],\n stability: StabilityEnum.Beta,\n goal: 'View subscription plan and status',\n context: 'Billing section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SubscriptionView',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.billing.enabled'],\n },\n};\n\n/**\n * Presentation for usage dashboard.\n */\nexport const UsageDashboardPresentation: PresentationSpec = {\n meta: {\n key: 'saas.billing.usage',\n version: 1,\n title: 'Usage Dashboard',\n description: 'Usage metrics and breakdown by resource type',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['billing', 'usage', 'metrics'],\n stability: StabilityEnum.Beta,\n goal: 'Monitor feature usage and limits',\n context: 'Billing section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'UsageDashboardView',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.billing.enabled'],\n },\n};\n"],"mappings":";;;;;;AAMA,MAAaA,2BAA6C;CACxD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,eAAe;EACjC,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,uBAAuB,EAChC;CACF;;;;AAKD,MAAaC,6BAA+C;CAC1D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM;GAAC;GAAW;GAAS;GAAU;EACrC,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,uBAAuB,EAChC;CACF"}
|
|
1
|
+
{"version":3,"file":"billing.presentation.js","names":["SubscriptionPresentation: PresentationSpec","UsageDashboardPresentation: PresentationSpec"],"sources":["../../src/billing/billing.presentation.ts"],"sourcesContent":["import type { PresentationSpec } from '@contractspec/lib.contracts';\nimport { StabilityEnum } from '@contractspec/lib.contracts';\n\n/**\n * Presentation for subscription overview.\n */\nexport const SubscriptionPresentation: PresentationSpec = {\n meta: {\n key: 'saas.billing.subscription',\n version: '1.0.0',\n title: 'Subscription Status',\n description:\n 'Subscription status with plan info, limits, and current usage',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['billing', 'subscription'],\n stability: StabilityEnum.Beta,\n goal: 'View subscription plan and status',\n context: 'Billing section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SubscriptionView',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.billing.enabled'],\n },\n};\n\n/**\n * Presentation for usage dashboard.\n */\nexport const UsageDashboardPresentation: PresentationSpec = {\n meta: {\n key: 'saas.billing.usage',\n version: '1.0.0',\n title: 'Usage Dashboard',\n description: 'Usage metrics and breakdown by resource type',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['billing', 'usage', 'metrics'],\n stability: StabilityEnum.Beta,\n goal: 'Monitor feature usage and limits',\n context: 'Billing section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'UsageDashboardView',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.billing.enabled'],\n },\n};\n"],"mappings":";;;;;;AAMA,MAAaA,2BAA6C;CACxD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,eAAe;EACjC,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,uBAAuB,EAChC;CACF;;;;AAKD,MAAaC,6BAA+C;CAC1D,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM;GAAC;GAAW;GAAS;GAAU;EACrC,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,uBAAuB,EAChC;CACF"}
|
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_schema101 from "@contractspec/lib.schema";
|
|
2
2
|
|
|
3
3
|
//#region src/billing/billing.schema.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Organization subscription details schema.
|
|
6
6
|
*/
|
|
7
|
-
declare const SubscriptionModel:
|
|
7
|
+
declare const SubscriptionModel: _contractspec_lib_schema101.SchemaModel<{
|
|
8
8
|
id: {
|
|
9
|
-
type:
|
|
9
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
10
10
|
isOptional: false;
|
|
11
11
|
};
|
|
12
12
|
organizationId: {
|
|
13
|
-
type:
|
|
13
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
14
14
|
isOptional: false;
|
|
15
15
|
};
|
|
16
16
|
planId: {
|
|
17
|
-
type:
|
|
17
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
18
18
|
isOptional: false;
|
|
19
19
|
};
|
|
20
20
|
planName: {
|
|
21
|
-
type:
|
|
21
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
22
22
|
isOptional: false;
|
|
23
23
|
};
|
|
24
24
|
status: {
|
|
25
|
-
type:
|
|
25
|
+
type: _contractspec_lib_schema101.EnumType<[string, string, string, string, string]>;
|
|
26
26
|
isOptional: false;
|
|
27
27
|
};
|
|
28
28
|
currentPeriodStart: {
|
|
29
|
-
type:
|
|
29
|
+
type: _contractspec_lib_schema101.FieldType<Date, string>;
|
|
30
30
|
isOptional: false;
|
|
31
31
|
};
|
|
32
32
|
currentPeriodEnd: {
|
|
33
|
-
type:
|
|
33
|
+
type: _contractspec_lib_schema101.FieldType<Date, string>;
|
|
34
34
|
isOptional: false;
|
|
35
35
|
};
|
|
36
36
|
trialEndsAt: {
|
|
37
|
-
type:
|
|
37
|
+
type: _contractspec_lib_schema101.FieldType<Date, string>;
|
|
38
38
|
isOptional: true;
|
|
39
39
|
};
|
|
40
40
|
cancelAtPeriodEnd: {
|
|
41
|
-
type:
|
|
41
|
+
type: _contractspec_lib_schema101.FieldType<boolean, boolean>;
|
|
42
42
|
isOptional: false;
|
|
43
43
|
};
|
|
44
44
|
}>;
|
|
45
45
|
/**
|
|
46
46
|
* Usage summary for a feature schema.
|
|
47
47
|
*/
|
|
48
|
-
declare const UsageSummaryModel:
|
|
48
|
+
declare const UsageSummaryModel: _contractspec_lib_schema101.SchemaModel<{
|
|
49
49
|
feature: {
|
|
50
|
-
type:
|
|
50
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
51
51
|
isOptional: false;
|
|
52
52
|
};
|
|
53
53
|
used: {
|
|
54
|
-
type:
|
|
54
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
55
55
|
isOptional: false;
|
|
56
56
|
};
|
|
57
57
|
limit: {
|
|
58
|
-
type:
|
|
58
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
59
59
|
isOptional: true;
|
|
60
60
|
};
|
|
61
61
|
unit: {
|
|
62
|
-
type:
|
|
62
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
63
63
|
isOptional: true;
|
|
64
64
|
};
|
|
65
65
|
percentage: {
|
|
66
|
-
type:
|
|
66
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
67
67
|
isOptional: true;
|
|
68
68
|
};
|
|
69
69
|
}>;
|
|
70
70
|
/**
|
|
71
71
|
* Input for recording feature usage.
|
|
72
72
|
*/
|
|
73
|
-
declare const RecordUsageInputModel:
|
|
73
|
+
declare const RecordUsageInputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
74
74
|
feature: {
|
|
75
|
-
type:
|
|
75
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
76
76
|
isOptional: false;
|
|
77
77
|
};
|
|
78
78
|
quantity: {
|
|
79
|
-
type:
|
|
79
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
80
80
|
isOptional: false;
|
|
81
81
|
};
|
|
82
82
|
sourceId: {
|
|
83
|
-
type:
|
|
83
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
84
84
|
isOptional: true;
|
|
85
85
|
};
|
|
86
86
|
sourceType: {
|
|
87
|
-
type:
|
|
87
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
88
88
|
isOptional: true;
|
|
89
89
|
};
|
|
90
90
|
metadata: {
|
|
91
|
-
type:
|
|
91
|
+
type: _contractspec_lib_schema101.FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
92
92
|
isOptional: true;
|
|
93
93
|
};
|
|
94
94
|
}>;
|
|
95
95
|
/**
|
|
96
96
|
* Output for recording feature usage.
|
|
97
97
|
*/
|
|
98
|
-
declare const RecordUsageOutputModel:
|
|
98
|
+
declare const RecordUsageOutputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
99
99
|
recorded: {
|
|
100
|
-
type:
|
|
100
|
+
type: _contractspec_lib_schema101.FieldType<boolean, boolean>;
|
|
101
101
|
isOptional: false;
|
|
102
102
|
};
|
|
103
103
|
currentUsage: {
|
|
104
|
-
type:
|
|
104
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
105
105
|
isOptional: false;
|
|
106
106
|
};
|
|
107
107
|
limit: {
|
|
108
|
-
type:
|
|
108
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
109
109
|
isOptional: true;
|
|
110
110
|
};
|
|
111
111
|
limitReached: {
|
|
112
|
-
type:
|
|
112
|
+
type: _contractspec_lib_schema101.FieldType<boolean, boolean>;
|
|
113
113
|
isOptional: false;
|
|
114
114
|
};
|
|
115
115
|
}>;
|
|
116
116
|
/**
|
|
117
117
|
* Payload for usage.recorded event.
|
|
118
118
|
*/
|
|
119
|
-
declare const UsageRecordedPayloadModel:
|
|
119
|
+
declare const UsageRecordedPayloadModel: _contractspec_lib_schema101.SchemaModel<{
|
|
120
120
|
feature: {
|
|
121
|
-
type:
|
|
121
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
122
122
|
isOptional: false;
|
|
123
123
|
};
|
|
124
124
|
quantity: {
|
|
125
|
-
type:
|
|
125
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
126
126
|
isOptional: false;
|
|
127
127
|
};
|
|
128
128
|
}>;
|
|
129
129
|
/**
|
|
130
130
|
* Input for getting usage summary.
|
|
131
131
|
*/
|
|
132
|
-
declare const GetUsageSummaryInputModel:
|
|
132
|
+
declare const GetUsageSummaryInputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
133
133
|
billingPeriod: {
|
|
134
|
-
type:
|
|
134
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
135
135
|
isOptional: true;
|
|
136
136
|
};
|
|
137
137
|
}>;
|
|
138
138
|
/**
|
|
139
139
|
* Output for usage summary.
|
|
140
140
|
*/
|
|
141
|
-
declare const GetUsageSummaryOutputModel:
|
|
141
|
+
declare const GetUsageSummaryOutputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
142
142
|
billingPeriod: {
|
|
143
|
-
type:
|
|
143
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
144
144
|
isOptional: false;
|
|
145
145
|
};
|
|
146
146
|
usage: {
|
|
147
|
-
type:
|
|
147
|
+
type: _contractspec_lib_schema101.SchemaModel<{
|
|
148
148
|
feature: {
|
|
149
|
-
type:
|
|
149
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
150
150
|
isOptional: false;
|
|
151
151
|
};
|
|
152
152
|
used: {
|
|
153
|
-
type:
|
|
153
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
154
154
|
isOptional: false;
|
|
155
155
|
};
|
|
156
156
|
limit: {
|
|
157
|
-
type:
|
|
157
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
158
158
|
isOptional: true;
|
|
159
159
|
};
|
|
160
160
|
unit: {
|
|
161
|
-
type:
|
|
161
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
162
162
|
isOptional: true;
|
|
163
163
|
};
|
|
164
164
|
percentage: {
|
|
165
|
-
type:
|
|
165
|
+
type: _contractspec_lib_schema101.FieldType<number, number>;
|
|
166
166
|
isOptional: true;
|
|
167
167
|
};
|
|
168
168
|
}>;
|
|
@@ -173,26 +173,26 @@ declare const GetUsageSummaryOutputModel: _contractspec_lib_schema206.SchemaMode
|
|
|
173
173
|
/**
|
|
174
174
|
* Input for checking feature access.
|
|
175
175
|
*/
|
|
176
|
-
declare const CheckFeatureAccessInputModel:
|
|
176
|
+
declare const CheckFeatureAccessInputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
177
177
|
feature: {
|
|
178
|
-
type:
|
|
178
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
179
179
|
isOptional: false;
|
|
180
180
|
};
|
|
181
181
|
}>;
|
|
182
182
|
/**
|
|
183
183
|
* Output for feature access check.
|
|
184
184
|
*/
|
|
185
|
-
declare const CheckFeatureAccessOutputModel:
|
|
185
|
+
declare const CheckFeatureAccessOutputModel: _contractspec_lib_schema101.SchemaModel<{
|
|
186
186
|
hasAccess: {
|
|
187
|
-
type:
|
|
187
|
+
type: _contractspec_lib_schema101.FieldType<boolean, boolean>;
|
|
188
188
|
isOptional: false;
|
|
189
189
|
};
|
|
190
190
|
reason: {
|
|
191
|
-
type:
|
|
191
|
+
type: _contractspec_lib_schema101.EnumType<[string, string, string, string]>;
|
|
192
192
|
isOptional: true;
|
|
193
193
|
};
|
|
194
194
|
upgradeUrl: {
|
|
195
|
-
type:
|
|
195
|
+
type: _contractspec_lib_schema101.FieldType<string, string>;
|
|
196
196
|
isOptional: true;
|
|
197
197
|
};
|
|
198
198
|
}>;
|
|
@@ -7,7 +7,7 @@ import { StabilityEnum } from "@contractspec/lib.contracts";
|
|
|
7
7
|
const SaasDashboardPresentation = {
|
|
8
8
|
meta: {
|
|
9
9
|
key: "saas.dashboard",
|
|
10
|
-
version: 1,
|
|
10
|
+
version: "1.0.0",
|
|
11
11
|
title: "SaaS Dashboard",
|
|
12
12
|
description: "Main SaaS dashboard with project overview, usage stats, and quick actions",
|
|
13
13
|
domain: "saas-boilerplate",
|
|
@@ -31,7 +31,7 @@ const SaasDashboardPresentation = {
|
|
|
31
31
|
const SettingsPanelPresentation = {
|
|
32
32
|
meta: {
|
|
33
33
|
key: "saas.settings",
|
|
34
|
-
version: 1,
|
|
34
|
+
version: "1.0.0",
|
|
35
35
|
title: "Settings Panel",
|
|
36
36
|
description: "Organization and user settings panel",
|
|
37
37
|
domain: "saas-boilerplate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.presentation.js","names":["SaasDashboardPresentation: PresentationSpec","SettingsPanelPresentation: PresentationSpec"],"sources":["../../src/dashboard/dashboard.presentation.ts"],"sourcesContent":["import type { PresentationSpec } from '@contractspec/lib.contracts';\nimport { StabilityEnum } from '@contractspec/lib.contracts';\n\n/**\n * Main dashboard presentation for the SaaS application.\n */\nexport const SaasDashboardPresentation: PresentationSpec = {\n meta: {\n key: 'saas.dashboard',\n version: 1,\n title: 'SaaS Dashboard',\n description:\n 'Main SaaS dashboard with project overview, usage stats, and quick actions',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['dashboard', 'overview'],\n stability: StabilityEnum.Beta,\n goal: 'Overview of SaaS activity and metrics',\n context: 'Main dashboard',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SaasDashboard',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.enabled'],\n },\n};\n\n/**\n * Settings panel presentation.\n */\nexport const SettingsPanelPresentation: PresentationSpec = {\n meta: {\n key: 'saas.settings',\n version: 1,\n title: 'Settings Panel',\n description: 'Organization and user settings panel',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['settings', 'config'],\n stability: StabilityEnum.Beta,\n goal: 'Configure organization and user settings',\n context: 'Settings section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SettingsPanel',\n },\n targets: ['react'],\n policy: {\n flags: ['saas.enabled'],\n },\n};\n"],"mappings":";;;;;;AAMA,MAAaA,4BAA8C;CACzD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,aAAa,WAAW;EAC/B,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,eAAe,EACxB;CACF;;;;AAKD,MAAaC,4BAA8C;CACzD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,YAAY,SAAS;EAC5B,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,QAAQ;CAClB,QAAQ,EACN,OAAO,CAAC,eAAe,EACxB;CACF"}
|
|
1
|
+
{"version":3,"file":"dashboard.presentation.js","names":["SaasDashboardPresentation: PresentationSpec","SettingsPanelPresentation: PresentationSpec"],"sources":["../../src/dashboard/dashboard.presentation.ts"],"sourcesContent":["import type { PresentationSpec } from '@contractspec/lib.contracts';\nimport { StabilityEnum } from '@contractspec/lib.contracts';\n\n/**\n * Main dashboard presentation for the SaaS application.\n */\nexport const SaasDashboardPresentation: PresentationSpec = {\n meta: {\n key: 'saas.dashboard',\n version: '1.0.0',\n title: 'SaaS Dashboard',\n description:\n 'Main SaaS dashboard with project overview, usage stats, and quick actions',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['dashboard', 'overview'],\n stability: StabilityEnum.Beta,\n goal: 'Overview of SaaS activity and metrics',\n context: 'Main dashboard',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SaasDashboard',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.enabled'],\n },\n};\n\n/**\n * Settings panel presentation.\n */\nexport const SettingsPanelPresentation: PresentationSpec = {\n meta: {\n key: 'saas.settings',\n version: '1.0.0',\n title: 'Settings Panel',\n description: 'Organization and user settings panel',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['settings', 'config'],\n stability: StabilityEnum.Beta,\n goal: 'Configure organization and user settings',\n context: 'Settings section',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'SettingsPanel',\n },\n targets: ['react'],\n policy: {\n flags: ['saas.enabled'],\n },\n};\n"],"mappings":";;;;;;AAMA,MAAaA,4BAA8C;CACzD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,aAAa,WAAW;EAC/B,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,eAAe,EACxB;CACF;;;;AAKD,MAAaC,4BAA8C;CACzD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,YAAY,SAAS;EAC5B,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,QAAQ;CAClB,QAAQ,EACN,OAAO,CAAC,eAAe,EACxB;CACF"}
|
package/dist/example.d.ts
CHANGED
|
@@ -1,37 +1,7 @@
|
|
|
1
|
+
import { ExampleSpec } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
1
3
|
//#region src/example.d.ts
|
|
2
|
-
declare const example:
|
|
3
|
-
readonly id: "saas-boilerplate";
|
|
4
|
-
readonly title: "SaaS Boilerplate";
|
|
5
|
-
readonly summary: "Multi-tenant SaaS foundation with orgs, projects, settings, billing usage, and RBAC.";
|
|
6
|
-
readonly tags: readonly ["saas", "multi-tenant", "billing", "rbac"];
|
|
7
|
-
readonly kind: "template";
|
|
8
|
-
readonly visibility: "public";
|
|
9
|
-
readonly docs: {
|
|
10
|
-
readonly rootDocId: "docs.examples.saas-boilerplate";
|
|
11
|
-
};
|
|
12
|
-
readonly entrypoints: {
|
|
13
|
-
readonly packageName: "@contractspec/example.saas-boilerplate";
|
|
14
|
-
readonly feature: "./feature";
|
|
15
|
-
readonly contracts: "./contracts";
|
|
16
|
-
readonly presentations: "./presentations";
|
|
17
|
-
readonly handlers: "./handlers";
|
|
18
|
-
readonly docs: "./docs";
|
|
19
|
-
};
|
|
20
|
-
readonly surfaces: {
|
|
21
|
-
readonly templates: true;
|
|
22
|
-
readonly sandbox: {
|
|
23
|
-
readonly enabled: true;
|
|
24
|
-
readonly modes: readonly ["playground", "specs", "builder", "markdown", "evolution"];
|
|
25
|
-
};
|
|
26
|
-
readonly studio: {
|
|
27
|
-
readonly enabled: true;
|
|
28
|
-
readonly installable: true;
|
|
29
|
-
};
|
|
30
|
-
readonly mcp: {
|
|
31
|
-
readonly enabled: true;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
};
|
|
4
|
+
declare const example: ExampleSpec;
|
|
35
5
|
//#endregion
|
|
36
6
|
export { example as default };
|
|
37
7
|
//# sourceMappingURL=example.d.ts.map
|
package/dist/example.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SAAS"}
|
package/dist/example.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
//#region src/example.ts
|
|
2
2
|
const example = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
meta: {
|
|
4
|
+
key: "saas-boilerplate",
|
|
5
|
+
version: "1.0.0",
|
|
6
|
+
title: "SaaS Boilerplate",
|
|
7
|
+
description: "Multi-tenant SaaS foundation with orgs, projects, settings, billing usage, and RBAC.",
|
|
8
|
+
kind: "template",
|
|
9
|
+
visibility: "public",
|
|
10
|
+
stability: "experimental",
|
|
11
|
+
owners: ["@platform.core"],
|
|
12
|
+
tags: [
|
|
13
|
+
"saas",
|
|
14
|
+
"multi-tenant",
|
|
15
|
+
"billing",
|
|
16
|
+
"rbac"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
14
19
|
docs: { rootDocId: "docs.examples.saas-boilerplate" },
|
|
15
20
|
entrypoints: {
|
|
16
21
|
packageName: "@contractspec/example.saas-boilerplate",
|
package/dist/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"example.js","names":["example: ExampleSpec"],"sources":["../src/example.ts"],"sourcesContent":["import type { ExampleSpec } from '@contractspec/lib.contracts';\n\nconst example: ExampleSpec = {\n meta: {\n key: 'saas-boilerplate',\n version: '1.0.0',\n title: 'SaaS Boilerplate',\n description:\n 'Multi-tenant SaaS foundation with orgs, projects, settings, billing usage, and RBAC.',\n kind: 'template',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['saas', 'multi-tenant', 'billing', 'rbac'],\n },\n docs: {\n rootDocId: 'docs.examples.saas-boilerplate',\n },\n entrypoints: {\n packageName: '@contractspec/example.saas-boilerplate',\n feature: './feature',\n contracts: './contracts',\n presentations: './presentations',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: {\n enabled: true,\n modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],\n },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n};\n\nexport default example;\n"],"mappings":";AAEA,MAAMA,UAAuB;CAC3B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAQ;GAAgB;GAAW;GAAO;EAClD;CACD,MAAM,EACJ,WAAW,kCACZ;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,eAAe;EACf,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GACP,SAAS;GACT,OAAO;IAAC;IAAc;IAAS;IAAW;IAAY;IAAY;GACnE;EACD,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF;AAED,sBAAe"}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_schema147 from "@contractspec/lib.schema";
|
|
2
2
|
|
|
3
3
|
//#region src/project/project.entity.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Project status enum for entities.
|
|
6
6
|
*/
|
|
7
|
-
declare const ProjectStatusEnum:
|
|
7
|
+
declare const ProjectStatusEnum: _contractspec_lib_schema147.EntityEnumDef;
|
|
8
8
|
/**
|
|
9
9
|
* Project entity - team-scoped work container.
|
|
10
10
|
*/
|
|
11
|
-
declare const ProjectEntity:
|
|
12
|
-
id:
|
|
13
|
-
name:
|
|
14
|
-
description:
|
|
15
|
-
slug:
|
|
16
|
-
organizationId:
|
|
17
|
-
createdBy:
|
|
18
|
-
status:
|
|
19
|
-
isPublic:
|
|
20
|
-
settings:
|
|
21
|
-
tags:
|
|
22
|
-
metadata:
|
|
23
|
-
createdAt:
|
|
24
|
-
updatedAt:
|
|
25
|
-
archivedAt:
|
|
11
|
+
declare const ProjectEntity: _contractspec_lib_schema147.EntitySpec<{
|
|
12
|
+
id: _contractspec_lib_schema147.EntityScalarField;
|
|
13
|
+
name: _contractspec_lib_schema147.EntityScalarField;
|
|
14
|
+
description: _contractspec_lib_schema147.EntityScalarField;
|
|
15
|
+
slug: _contractspec_lib_schema147.EntityScalarField;
|
|
16
|
+
organizationId: _contractspec_lib_schema147.EntityScalarField;
|
|
17
|
+
createdBy: _contractspec_lib_schema147.EntityScalarField;
|
|
18
|
+
status: _contractspec_lib_schema147.EntityEnumField;
|
|
19
|
+
isPublic: _contractspec_lib_schema147.EntityScalarField;
|
|
20
|
+
settings: _contractspec_lib_schema147.EntityScalarField;
|
|
21
|
+
tags: _contractspec_lib_schema147.EntityScalarField;
|
|
22
|
+
metadata: _contractspec_lib_schema147.EntityScalarField;
|
|
23
|
+
createdAt: _contractspec_lib_schema147.EntityScalarField;
|
|
24
|
+
updatedAt: _contractspec_lib_schema147.EntityScalarField;
|
|
25
|
+
archivedAt: _contractspec_lib_schema147.EntityScalarField;
|
|
26
26
|
}>;
|
|
27
27
|
/**
|
|
28
28
|
* ProjectMember entity - project-level access.
|
|
29
29
|
*/
|
|
30
|
-
declare const ProjectMemberEntity:
|
|
31
|
-
id:
|
|
32
|
-
projectId:
|
|
33
|
-
userId:
|
|
34
|
-
role:
|
|
35
|
-
addedBy:
|
|
36
|
-
createdAt:
|
|
30
|
+
declare const ProjectMemberEntity: _contractspec_lib_schema147.EntitySpec<{
|
|
31
|
+
id: _contractspec_lib_schema147.EntityScalarField;
|
|
32
|
+
projectId: _contractspec_lib_schema147.EntityScalarField;
|
|
33
|
+
userId: _contractspec_lib_schema147.EntityScalarField;
|
|
34
|
+
role: _contractspec_lib_schema147.EntityScalarField;
|
|
35
|
+
addedBy: _contractspec_lib_schema147.EntityScalarField;
|
|
36
|
+
createdAt: _contractspec_lib_schema147.EntityScalarField;
|
|
37
37
|
}>;
|
|
38
38
|
//#endregion
|
|
39
39
|
export { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_schema170 from "@contractspec/lib.schema";
|
|
2
2
|
|
|
3
3
|
//#region src/project/project.enum.d.ts
|
|
4
4
|
|
|
@@ -6,11 +6,11 @@ import * as _contractspec_lib_schema184 from "@contractspec/lib.schema";
|
|
|
6
6
|
* Project status enum for contract schemas.
|
|
7
7
|
* Note: Entity enum is defined separately in project.entity.ts
|
|
8
8
|
*/
|
|
9
|
-
declare const ProjectStatusSchemaEnum:
|
|
9
|
+
declare const ProjectStatusSchemaEnum: _contractspec_lib_schema170.EnumType<[string, string, string, string]>;
|
|
10
10
|
/**
|
|
11
11
|
* Project status filter enum (includes 'all' option).
|
|
12
12
|
*/
|
|
13
|
-
declare const ProjectStatusFilterEnum:
|
|
13
|
+
declare const ProjectStatusFilterEnum: _contractspec_lib_schema170.EnumType<[string, string, string, string]>;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { ProjectStatusFilterEnum, ProjectStatusSchemaEnum };
|
|
16
16
|
//# sourceMappingURL=project.enum.d.ts.map
|