@topy-ai/maggie 0.7.38 → 0.7.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-zh-TW.md +82 -6
- package/README.md +99 -7
- package/bin/maggie.js +30 -3
- package/bundled-contracts/maggie-clone/interaction-state-v1.schema.json +26 -0
- package/bundled-contracts/maggie-content/provenance-v1.schema.json +20 -0
- package/bundled-contracts/maggie-design/brand-kit-v1.schema.json +18 -0
- package/bundled-contracts/maggie-design/browser-interactions-v1.schema.json +27 -0
- package/bundled-contracts/maggie-design/css-utility-evidence-v1.schema.json +10 -0
- package/bundled-contracts/maggie-design/dashboard-surface-v1.schema.json +11 -0
- package/bundled-contracts/maggie-design/progressive-enhancement-v1.schema.json +12 -0
- package/bundled-contracts/maggie-design/sample-surface-v1.schema.json +13 -0
- package/bundled-contracts/maggie-design/style-editing-v1.schema.json +35 -0
- package/bundled-contracts/maggie-media/image-generation-policy-v1.json +28 -0
- package/bundled-contracts/maggie-media/video-generation-policy-v1.json +40 -0
- package/bundled-contracts/maggie-media/video-job-v1.schema.json +20 -0
- package/bundled-contracts/maggie-media/video-playback-evidence-v1.schema.json +15 -0
- package/bundled-contracts/maggie-ops/npm11-preflight-v1.schema.json +17 -0
- package/bundled-contracts/maggie-scaffold/host-scaffold-v1.schema.json +25 -0
- package/bundled-contracts/maggie-seo/gsc-readiness-v1.schema.json +19 -0
- package/bundled-contracts/maggie-seo/privacy-origin-evidence-v1.schema.json +11 -0
- package/bundled-contracts/maggie-service-booking/delivery-provider-default-v1.json +8 -0
- package/bundled-contracts/maggie-service-booking/delivery-provider-v1.schema.json +16 -0
- package/bundled-contracts/maggiedash/booking-access-v1.json +5 -4
- package/bundled-contracts/maggiedash/booking-customer-surface-v1.json +12 -1
- package/bundled-contracts/maggiedash/booking-email-templates-v1.json +2 -0
- package/bundled-contracts/maggiedash/booking-host-adapter-v1.json +14 -2
- package/bundled-contracts/maggiedash/booking-runtime.v1.json +41 -0
- package/bundled-contracts/maggiedash/browser-session-v1.schema.json +18 -0
- package/bundled-contracts/maggiedash/content-overrides-v1.schema.json +19 -0
- package/bundled-contracts/maggiedash/execution-board.json +526 -26
- package/bundled-contracts/maggiedash/host-capabilities-v1.schema.json +10 -0
- package/bundled-contracts/maggiedash/public-session-cache-v1.schema.json +17 -0
- package/bundled-contracts/maggiedash/site-structure-v1.schema.json +13 -0
- package/bundled-references/browser-inspection.md +21 -0
- package/bundled-references/maggiedash-booking/ARCHITECTURE.md +218 -0
- package/bundled-references/maggiedash-booking/CURRENT-STATE.md +92 -0
- package/bundled-references/maggiedash-booking/DATA-FLOW.md +143 -0
- package/bundled-references/maggiedash-booking/DATA-MODEL.md +367 -0
- package/bundled-references/maggiedash-booking/DECISIONS.md +94 -0
- package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +2387 -0
- package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +314 -0
- package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +227 -0
- package/bundled-references/maggiedash-booking/PAYMENT-GATEWAY.md +267 -0
- package/bundled-references/maggiedash-booking/PRD.md +228 -0
- package/bundled-references/maggiedash-booking/PROGRESS.md +2434 -0
- package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +235 -0
- package/bundled-references/maggiedash-booking/README.md +271 -0
- package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +152 -0
- package/bundled-references/maggiedash-booking/SECURITY-COMPLIANCE.md +158 -0
- package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +542 -0
- package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +129 -0
- package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +107 -0
- package/bundled-references/maggiedash-booking/TASKS.md +137 -0
- package/bundled-references/maggiedash-booking/USER-JOURNEYS.md +224 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-dfd.excalidraw +1 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-dfd.mmd +16 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-dfd.png +0 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-dfd.svg +1 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.mmd +19 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.png +0 -0
- package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.svg +1 -0
- package/bundled-references/maggiedash-booking/diagrams/manager-journey.excalidraw +1 -0
- package/bundled-references/maggiedash-booking/diagrams/manager-journey.mmd +11 -0
- package/bundled-references/maggiedash-booking/diagrams/manager-journey.png +0 -0
- package/bundled-references/maggiedash-booking/diagrams/manager-journey.svg +1 -0
- package/bundled-references/maggiedash-booking/diagrams/payment-sequence.mmd +20 -0
- package/bundled-references/maggiedash-booking/diagrams/payment-sequence.png +0 -0
- package/bundled-references/maggiedash-booking/diagrams/payment-sequence.svg +1 -0
- package/bundled-references/maggiedash-booking/diagrams/system-context.excalidraw +1 -0
- package/bundled-references/maggiedash-booking/diagrams/system-context.mmd +10 -0
- package/bundled-references/maggiedash-booking/diagrams/system-context.png +0 -0
- package/bundled-references/maggiedash-booking/diagrams/system-context.svg +1 -0
- package/bundled-skills/maggie-blog/SKILL.md +12 -0
- package/bundled-skills/maggie-blog-bootstrap/SKILL.md +39 -0
- package/bundled-skills/maggie-booking/SKILL.md +112 -18
- package/bundled-skills/maggie-clone/SKILL.md +13 -0
- package/bundled-skills/maggie-deployment/SKILL.md +6 -0
- package/bundled-skills/maggie-design/SKILL.md +64 -3
- package/bundled-skills/maggie-ops/SKILL.md +12 -0
- package/bundled-skills/maggie-seo-geo/SKILL.md +45 -0
- package/bundled-skills/maggie-service-booking/SKILL.md +14 -0
- package/bundled-tools/clis/maggie_analytics.py +43 -1
- package/bundled-tools/clis/maggie_booking.py +161 -26
- package/bundled-tools/clis/maggie_browser_audit.py +99 -3
- package/bundled-tools/clis/maggie_clone.py +46 -1
- package/bundled-tools/clis/maggie_contracts.py +393 -0
- package/bundled-tools/clis/maggie_dash.py +22 -6
- package/bundled-tools/clis/maggie_design.py +84 -12
- package/bundled-tools/clis/maggie_service_booking.py +50 -1
- package/bundled-tools/clis/maggie_workflows.py +387 -0
- package/bundled-tools/clis/site_audit.py +77 -1
- package/bundled-tools/integrations/analytics.md +14 -0
- package/bundled-tools/runtime/site_baseline.py +3 -0
- package/package.json +1 -1
- package/references/browser-inspection.md +21 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-generation-policy-v1.json",
|
|
4
|
+
"title": "Maggie Gemini hero video generation policy v1",
|
|
5
|
+
"schemaVersion": "maggie-video-generation-policy.v1",
|
|
6
|
+
"provider": "google-gemini",
|
|
7
|
+
"model": "gemini-omni-1.1-flash",
|
|
8
|
+
"fallbackModel": "veo-3.1-generate-preview",
|
|
9
|
+
"endpointEnv": "GEMINI_API_ENDPOINT",
|
|
10
|
+
"apiKeyEnv": "GEMINI_API_KEY",
|
|
11
|
+
"billingMode": "host-managed-or-byok",
|
|
12
|
+
"costPolicy": {
|
|
13
|
+
"budgetRequired": true,
|
|
14
|
+
"maxAttemptsPerJob": 3,
|
|
15
|
+
"duplicateChargeProtection": "idempotency-key"
|
|
16
|
+
},
|
|
17
|
+
"rights": {
|
|
18
|
+
"inputRightsRequired": true,
|
|
19
|
+
"outputReviewRequired": true,
|
|
20
|
+
"audioRightsRequired": true
|
|
21
|
+
},
|
|
22
|
+
"moderation": {
|
|
23
|
+
"preflightRequired": true,
|
|
24
|
+
"postGenerationReviewRequired": true,
|
|
25
|
+
"blockedOutputPolicy": "discard-and-report"
|
|
26
|
+
},
|
|
27
|
+
"storage": {
|
|
28
|
+
"adapter": "host-owned-object-storage",
|
|
29
|
+
"publicUrlPolicy": "signed-or-approved-public-url",
|
|
30
|
+
"retentionDaysRequired": true,
|
|
31
|
+
"sourceAssetAndJobMetadataRequired": true
|
|
32
|
+
},
|
|
33
|
+
"playback": {
|
|
34
|
+
"posterRequired": true,
|
|
35
|
+
"reducedMotionFallbackRequired": true,
|
|
36
|
+
"saveDataFallbackRequired": true,
|
|
37
|
+
"mobileSafe": true
|
|
38
|
+
},
|
|
39
|
+
"provenance": ["provider", "model", "promptHash", "inputAssetHashes", "sourceRevision", "createdAt"]
|
|
40
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-job-v1.schema.json",
|
|
4
|
+
"title": "Maggie video generation job v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "jobId", "idempotencyKey", "state", "attempt", "sourceRevision", "provenance"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-video-job.v1"},
|
|
9
|
+
"jobId": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$"},
|
|
10
|
+
"idempotencyKey": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$"},
|
|
11
|
+
"state": {"enum": ["queued", "running", "retrying", "cancelled", "blocked", "completed", "failed", "dead-letter"]},
|
|
12
|
+
"attempt": {"type": "integer", "minimum": 0, "maximum": 3},
|
|
13
|
+
"sourceRevision": {"type": "object"},
|
|
14
|
+
"provenance": {"type": "object"},
|
|
15
|
+
"segments": {"type": "array", "items": {"type": "object"}},
|
|
16
|
+
"storage": {"type": "object"},
|
|
17
|
+
"errorClass": {"enum": ["provider-transient", "provider-permanent", "moderation", "rights", "validation", "cancelled", "cost-limit", "unknown"]}
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-media/video-playback-evidence-v1.schema.json",
|
|
4
|
+
"title": "Maggie video playback evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "jobId", "sourceRevision", "viewports", "rawProviderPayloadIncluded"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-video-playback-evidence.v1"},
|
|
9
|
+
"jobId": {"type": "string"},
|
|
10
|
+
"sourceRevision": {"type": "object"},
|
|
11
|
+
"viewports": {"type": "array", "minItems": 3, "items": {"type": "object", "required": ["viewport", "status", "posterVisible", "reducedMotionFallback", "saveDataFallback"], "properties": {"viewport": {"enum": ["desktop", "tablet", "mobile"]}, "status": {"const": "passed"}, "posterVisible": {"const": true}, "reducedMotionFallback": {"const": true}, "saveDataFallback": {"const": true}}, "additionalProperties": false}},
|
|
12
|
+
"rawProviderPayloadIncluded": {"const": false}
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-ops/npm11-preflight-v1.schema.json",
|
|
4
|
+
"title": "Maggie npm 11 install preflight v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "supportMatrix", "node", "npm", "installScriptPolicy", "lockfilePolicy", "smoke"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-npm11-preflight.v1"},
|
|
9
|
+
"supportMatrix": {"type": "array", "minItems": 4, "items": {"type": "object", "required": ["packageManager", "supportedVersions", "installCommand", "lockfile", "lifecyclePolicy"], "properties": {"packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]}, "supportedVersions": {"type": "array", "minItems": 1}, "installCommand": {"type": "string"}, "lockfile": {"type": "string"}, "lifecyclePolicy": {"const": "ignore-scripts-smoke-first"}}, "additionalProperties": false}},
|
|
10
|
+
"node": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
|
|
11
|
+
"npm": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
|
|
12
|
+
"installScriptPolicy": {"enum": ["audit-before-run", "ignore-scripts-smoke-first"]},
|
|
13
|
+
"lockfilePolicy": {"enum": ["package-lock-v3", "host-package-manager"]},
|
|
14
|
+
"smoke": {"type": "object", "required": ["ignoreScripts", "passed"], "properties": {"ignoreScripts": {"type": "boolean"}, "passed": {"type": "boolean"}}, "additionalProperties": false}
|
|
15
|
+
},
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-scaffold/host-scaffold-v1.schema.json",
|
|
4
|
+
"title": "Maggie empty-project host scaffold v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "framework", "language", "packageManager", "installPolicy", "hostHandoff"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-host-scaffold.v1"},
|
|
9
|
+
"framework": {"enum": ["astro", "nextjs", "sveltekit", "nuxt", "vite-react", "vite-vue"]},
|
|
10
|
+
"language": {"enum": ["typescript", "javascript"]},
|
|
11
|
+
"packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]},
|
|
12
|
+
"installPolicy": {"type": "object", "required": ["requiresConfirm", "secretsByDefault", "migrationsByDefault"], "properties": {
|
|
13
|
+
"requiresConfirm": {"const": true},
|
|
14
|
+
"secretsByDefault": {"const": "never"},
|
|
15
|
+
"migrationsByDefault": {"const": "never"},
|
|
16
|
+
"installDependencies": {"type": "boolean"}
|
|
17
|
+
}, "additionalProperties": false},
|
|
18
|
+
"hostHandoff": {"type": "object", "required": ["generatedFiles", "rollbackPlan", "nextCommands"], "properties": {
|
|
19
|
+
"generatedFiles": {"type": "array", "items": {"type": "string"}},
|
|
20
|
+
"rollbackPlan": {"type": "string", "minLength": 1},
|
|
21
|
+
"nextCommands": {"type": "array", "items": {"type": "string"}}
|
|
22
|
+
}, "additionalProperties": false}
|
|
23
|
+
},
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-seo/gsc-readiness-v1.schema.json",
|
|
4
|
+
"title": "Maggie Search Console readiness evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "property", "verification", "canonical", "robots", "sitemap", "authorization", "queryReadback", "productionSmoke"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-gsc-readiness.v1"},
|
|
9
|
+
"property": {"type": "object", "required": ["siteUrl", "type"], "properties": {"siteUrl": {"type": "string", "format": "uri"}, "type": {"enum": ["domain", "url-prefix"]}}, "additionalProperties": false},
|
|
10
|
+
"verification": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "method": {"enum": ["dns", "html", "meta"]}}, "additionalProperties": false},
|
|
11
|
+
"canonical": {"type": "object", "required": ["passed", "origin"], "properties": {"passed": {"const": true}, "origin": {"type": "string"}}, "additionalProperties": false},
|
|
12
|
+
"robots": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false},
|
|
13
|
+
"sitemap": {"type": "object", "required": ["passed", "url"], "properties": {"passed": {"const": true}, "url": {"type": "string", "format": "uri"}}, "additionalProperties": false},
|
|
14
|
+
"authorization": {"type": "object", "required": ["readOnly", "authorized"], "properties": {"readOnly": {"const": true}, "authorized": {"const": true}}, "additionalProperties": false},
|
|
15
|
+
"queryReadback": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "rows": {"type": "integer", "minimum": 0}}, "additionalProperties": false},
|
|
16
|
+
"productionSmoke": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false}
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "Maggie third-party privacy origin evidence",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["schemaVersion", "pages", "policyOrigins"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"schemaVersion": {"const": "maggie-privacy-origin-evidence.v1"},
|
|
8
|
+
"pages": {"type": "array"},
|
|
9
|
+
"policyOrigins": {"type": "array"}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "maggie-booking-delivery-provider.v1",
|
|
3
|
+
"email": {"provider": "resend", "channel": "email", "secretEnv": "RESEND_API_KEY"},
|
|
4
|
+
"sms": {"provider": "twilio", "channel": "sms", "secretEnv": "TWILIO_AUTH_TOKEN"},
|
|
5
|
+
"confirmationRule": "provider-acknowledged-only",
|
|
6
|
+
"retryPolicy": {"maxAttempts": 5, "backoff": "exponential-jitter", "idempotency": "booking-event-and-channel"},
|
|
7
|
+
"deadLetterPolicy": {"afterMaxAttempts": "dead-letter", "replayRequiresExplicitAction": true}
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-service-booking/delivery-provider-v1.schema.json",
|
|
4
|
+
"title": "Maggie booking notification delivery provider v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "email", "sms", "confirmationRule", "retryPolicy", "deadLetterPolicy"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-booking-delivery-provider.v1"},
|
|
9
|
+
"email": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["resend", "provider-neutral"]}, "channel": {"const": "email"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
|
|
10
|
+
"sms": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["twilio", "provider-neutral"]}, "channel": {"const": "sms"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
|
|
11
|
+
"confirmationRule": {"const": "provider-acknowledged-only"},
|
|
12
|
+
"retryPolicy": {"type": "object", "required": ["maxAttempts", "backoff", "idempotency"], "properties": {"maxAttempts": {"type": "integer", "minimum": 1, "maximum": 10}, "backoff": {"enum": ["exponential-jitter", "fixed"]}, "idempotency": {"const": "booking-event-and-channel"}}, "additionalProperties": false},
|
|
13
|
+
"deadLetterPolicy": {"type": "object", "required": ["afterMaxAttempts", "replayRequiresExplicitAction"], "properties": {"afterMaxAttempts": {"const": "dead-letter"}, "replayRequiresExplicitAction": {"const": true}}, "additionalProperties": false}
|
|
14
|
+
},
|
|
15
|
+
"additionalProperties": false
|
|
16
|
+
}
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
"roles": ["manager", "staff", "finance"],
|
|
9
9
|
"permissions": [
|
|
10
10
|
"calendar.read", "bookings.read", "bookings.manage", "customers.read",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
11
|
+
"waitlist.read", "waitlist.manage",
|
|
12
|
+
"catalog.read", "catalog.manage", "packages.read", "packages.manage", "staff.read", "staff.manage",
|
|
13
|
+
"resources.read", "resources.manage", "schedule.read", "schedule.manage", "locations.read", "locations.manage",
|
|
14
|
+
"payments.read", "payments.manage", "refunds.manage", "notifications.read", "notifications.manage",
|
|
15
|
+
"settings.read", "settings.manage", "reports.read", "audit.read"
|
|
15
16
|
],
|
|
16
17
|
"endpointIds": ["booking.access.read", "booking.access.create", "booking.access.update", "booking.access.revoke"],
|
|
17
18
|
"canonicalRoutes": {
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
"hostResponsibilities": ["tenant-binding", "origin-and-csrf", "rate-limit", "bot-protection", "opaque-payment-return-token", "sealed-customer-manage-token", "provider-and-notification-adapters"],
|
|
11
11
|
"endpointIds": [
|
|
12
12
|
"booking.public.catalog.read",
|
|
13
|
+
"booking.public.package-checkout.start",
|
|
14
|
+
"booking.public.package-payment-return.read",
|
|
13
15
|
"booking.public.availability.read",
|
|
14
16
|
"booking.public.waitlist.join",
|
|
15
17
|
"booking.public.hold.create",
|
|
@@ -21,7 +23,9 @@
|
|
|
21
23
|
],
|
|
22
24
|
"canonicalRoutes": {
|
|
23
25
|
"booking.public.catalog.read": "GET /catalog.json",
|
|
24
|
-
"booking.public.
|
|
26
|
+
"booking.public.package-checkout.start": "POST /package-checkout.json",
|
|
27
|
+
"booking.public.package-payment-return.read": "GET /package-payment-return.json?token={token}",
|
|
28
|
+
"booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&locationId={locationId}&date={date}",
|
|
25
29
|
"booking.public.waitlist.join": "POST /waitlist.json",
|
|
26
30
|
"booking.public.hold.create": "POST /holds.json",
|
|
27
31
|
"booking.public.checkout.start": "POST /checkout.json",
|
|
@@ -42,5 +46,12 @@
|
|
|
42
46
|
"paymentReturn": "short-lived",
|
|
43
47
|
"customerManage": "30-day-sealed",
|
|
44
48
|
"rawTokenStorage": false
|
|
49
|
+
},
|
|
50
|
+
"packageRedemption": {
|
|
51
|
+
"holdField": "packageEntitlementId",
|
|
52
|
+
"checkoutField": "packageEntitlementId",
|
|
53
|
+
"binding": "tenant-and-customer-email",
|
|
54
|
+
"fullyCoveredOnly": true,
|
|
55
|
+
"transaction": "lock-entitlement-and-items-create-booking-write-ledger"
|
|
45
56
|
}
|
|
46
57
|
}
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
{ "id": "booking.reminder", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
|
|
18
18
|
{ "id": "payment.action_required", "variables": ["customerName", "serviceName", "bookingId", "actionUrl", "siteName"] },
|
|
19
19
|
{ "id": "payment.refunded", "variables": ["customerName", "serviceName", "bookingId", "siteName"] },
|
|
20
|
+
{ "id": "package.purchase.confirmed", "variables": ["customerName", "packageName", "amount", "expiresAt", "siteName"] },
|
|
21
|
+
{ "id": "package.purchase.refunded", "variables": ["customerName", "packageName", "amount", "siteName"] },
|
|
20
22
|
{ "id": "booking.waitlist.available", "variables": ["customerName", "serviceName", "when", "locationName", "bookingUrl", "siteName"] }
|
|
21
23
|
],
|
|
22
24
|
"endpointIds": ["booking.email-templates.read", "booking.email-templates.draft", "booking.email-templates.publish", "booking.email-templates.rollback"],
|
|
@@ -5,11 +5,14 @@
|
|
|
5
5
|
"schemaVersion": "maggiedash-booking-host-adapter.v1",
|
|
6
6
|
"apiPrefix": "/api/maggie/booking",
|
|
7
7
|
"auth": { "managerSession": "host-session-cookie", "emailPassword": true, "passkeys": false },
|
|
8
|
-
"requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
|
|
8
|
+
"requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "treatmentPackages", "packagePurchasePayments", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
|
|
9
9
|
"endpointIds": [
|
|
10
|
-
"booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
|
|
10
|
+
"booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.no-show-fee", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.packages.read", "booking.package.write", "booking.customer-packages.read", "booking.customer-package.grant", "booking.package-purchases.read", "booking.package-purchase.refund", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
|
|
11
11
|
],
|
|
12
12
|
"canonicalRoutes": {
|
|
13
|
+
"booking.booking.no-show-fee": "POST /bookings/{id}/no-show-fee.json",
|
|
14
|
+
"booking.package-purchases.read": "GET /package-purchases.json?customerId={customerId}&status={status}",
|
|
15
|
+
"booking.package-purchase.refund": "POST /package-purchases/{purchaseId}/refund.json",
|
|
13
16
|
"booking.payment.start": "POST /payments/start.json",
|
|
14
17
|
"booking.refund.start": "POST /refunds.json",
|
|
15
18
|
"booking.notifications.read": "GET /notifications.json?status={status}",
|
|
@@ -26,6 +29,7 @@
|
|
|
26
29
|
"booking.booking.read": "readBooking",
|
|
27
30
|
"booking.booking.create": "createBooking",
|
|
28
31
|
"booking.booking.transition": "transitionBooking",
|
|
32
|
+
"booking.booking.no-show-fee": "chargeNoShowFee",
|
|
29
33
|
"booking.booking.reschedule": "rescheduleBooking",
|
|
30
34
|
"booking.availability.read": "readAvailability",
|
|
31
35
|
"booking.holds.create": "createHold",
|
|
@@ -36,6 +40,12 @@
|
|
|
36
40
|
"booking.waitlist.update": "updateWaitlist",
|
|
37
41
|
"booking.catalog.read": "readCatalog",
|
|
38
42
|
"booking.catalog.write": "updateCatalog",
|
|
43
|
+
"booking.packages.read": "listPackages",
|
|
44
|
+
"booking.package.write": "updatePackage",
|
|
45
|
+
"booking.customer-packages.read": "listCustomerPackages",
|
|
46
|
+
"booking.customer-package.grant": "grantCustomerPackage",
|
|
47
|
+
"booking.package-purchases.read": "listPackagePurchases",
|
|
48
|
+
"booking.package-purchase.refund": "startPackageRefund",
|
|
39
49
|
"booking.locations.read": "listLocations",
|
|
40
50
|
"booking.location.write": "updateLocation",
|
|
41
51
|
"booking.staff.read": "listStaff",
|
|
@@ -65,7 +75,9 @@
|
|
|
65
75
|
"readPublicAvailability",
|
|
66
76
|
"createCustomerHold",
|
|
67
77
|
"startCustomerCheckout",
|
|
78
|
+
"startCustomerPackageCheckout",
|
|
68
79
|
"readCustomerPaymentReturn",
|
|
80
|
+
"readCustomerPackagePaymentReturn",
|
|
69
81
|
"readCustomerManage",
|
|
70
82
|
"cancelCustomerBooking",
|
|
71
83
|
"rescheduleCustomerBooking",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "maggiedash-booking-runtime.v1",
|
|
3
|
+
"generatedAt": "2026-09-20T00:00:00Z",
|
|
4
|
+
"environment": "fixture",
|
|
5
|
+
"baseUrl": "https://booking.fixture.invalid",
|
|
6
|
+
"tenant": "dedicated-fixture-tenant",
|
|
7
|
+
"endpoints": [
|
|
8
|
+
{ "id": "booking.overview.read", "method": "GET", "route": "/api/maggie/booking/overview.json", "status": 200, "requiredFieldsPresent": true },
|
|
9
|
+
{ "id": "booking.calendar.read", "method": "GET", "route": "/api/maggie/booking/calendar.json?date={date}&view={view}", "status": 200, "requiredFieldsPresent": true },
|
|
10
|
+
{ "id": "booking.bookings.read", "method": "GET", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
|
|
11
|
+
{ "id": "booking.booking.read", "method": "GET", "route": "/api/maggie/booking/bookings/{id}.json", "status": 200, "requiredFieldsPresent": true },
|
|
12
|
+
{ "id": "booking.booking.create", "method": "POST", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
|
|
13
|
+
{ "id": "booking.booking.transition", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/transition.json", "status": 200, "requiredFieldsPresent": true },
|
|
14
|
+
{ "id": "booking.booking.reschedule", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/reschedule.json", "status": 200, "requiredFieldsPresent": true },
|
|
15
|
+
{ "id": "booking.availability.read", "method": "GET", "route": "/api/maggie/booking/availability.json", "status": 200, "requiredFieldsPresent": true },
|
|
16
|
+
{ "id": "booking.holds.create", "method": "POST", "route": "/api/maggie/booking/holds.json", "status": 200, "requiredFieldsPresent": true },
|
|
17
|
+
{ "id": "booking.holds.release", "method": "POST", "route": "/api/maggie/booking/holds/{id}/release.json", "status": 200, "requiredFieldsPresent": true },
|
|
18
|
+
{ "id": "booking.customers.read", "method": "GET", "route": "/api/maggie/booking/customers.json", "status": 200, "requiredFieldsPresent": true },
|
|
19
|
+
{ "id": "booking.customer.read", "method": "GET", "route": "/api/maggie/booking/customers/{id}.json", "status": 200, "requiredFieldsPresent": true },
|
|
20
|
+
{ "id": "booking.catalog.read", "method": "GET", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
|
|
21
|
+
{ "id": "booking.catalog.write", "method": "POST", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
|
|
22
|
+
{ "id": "booking.staff.read", "method": "GET", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
|
|
23
|
+
{ "id": "booking.staff.write", "method": "POST", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
|
|
24
|
+
{ "id": "booking.resources.read", "method": "GET", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
|
|
25
|
+
{ "id": "booking.resources.write", "method": "POST", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
|
|
26
|
+
{ "id": "booking.schedule.read", "method": "GET", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
|
|
27
|
+
{ "id": "booking.schedule.write", "method": "POST", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
|
|
28
|
+
{ "id": "booking.payments.read", "method": "GET", "route": "/api/maggie/booking/payments.json", "status": 200, "requiredFieldsPresent": true },
|
|
29
|
+
{ "id": "booking.payment.start", "method": "POST", "route": "/api/maggie/booking/payments/start.json", "status": 200, "requiredFieldsPresent": true },
|
|
30
|
+
{ "id": "booking.payment.reconcile", "method": "POST", "route": "/api/maggie/booking/payments/{id}/reconcile.json", "status": 200, "requiredFieldsPresent": true },
|
|
31
|
+
{ "id": "booking.refund.start", "method": "POST", "route": "/api/maggie/booking/refunds.json", "status": 200, "requiredFieldsPresent": true },
|
|
32
|
+
{ "id": "booking.health.read", "method": "GET", "route": "/api/maggie/booking/health.json", "status": 200, "requiredFieldsPresent": true },
|
|
33
|
+
{ "id": "booking.payment-health.read", "method": "GET", "route": "/api/maggie/booking/payment-health.json", "status": 200, "requiredFieldsPresent": true },
|
|
34
|
+
{ "id": "booking.settings.read", "method": "GET", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
|
|
35
|
+
{ "id": "booking.settings.update", "method": "PATCH", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
|
|
36
|
+
{ "id": "booking.audit.read", "method": "GET", "route": "/api/maggie/booking/audit.json", "status": 200, "requiredFieldsPresent": true },
|
|
37
|
+
{ "id": "booking.events.read", "method": "GET", "route": "/api/maggie/booking/events.json", "status": 200, "requiredFieldsPresent": true },
|
|
38
|
+
{ "id": "booking.runtime.read", "method": "GET", "route": "/api/maggie/booking/runtime.json", "status": 200, "requiredFieldsPresent": true },
|
|
39
|
+
{ "id": "booking.provider.webhook", "method": "POST", "route": "/api/maggie/booking/webhooks/{provider}", "status": 200, "requiredFieldsPresent": true }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.noblox.app/contracts/browser-session-v1.schema.json",
|
|
4
|
+
"title": "MaggieDash browser QA session contract v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "mintingBoundary", "passwordHandling", "ttlMinutes", "mintRoute", "revokeRoute"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-browser-session.v1"},
|
|
9
|
+
"mintingBoundary": {"const": "host-adapter"},
|
|
10
|
+
"passwordHandling": {"const": "never-exposed"},
|
|
11
|
+
"ttlMinutes": {"type": "integer", "minimum": 1, "maximum": 240},
|
|
12
|
+
"mintRoute": {"type": "string", "pattern": "^/"},
|
|
13
|
+
"revokeRoute": {"type": "string", "pattern": "^/"},
|
|
14
|
+
"cookie": {"type": "object", "additionalProperties": true},
|
|
15
|
+
"roles": {"type": "array", "items": {"type": "string"}}
|
|
16
|
+
},
|
|
17
|
+
"additionalProperties": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.noblox.app/contracts/content-overrides-v1.schema.json",
|
|
4
|
+
"title": "MaggieDash provider-neutral content overrides v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "readAtRequestTime", "sourceLiteralIsFallback", "writesCreateRevision", "conflictRequiresSourceRevision", "orphanPolicy", "protectedFields"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {"const": "maggie-content-overrides.v1"},
|
|
9
|
+
"readAtRequestTime": {"const": true},
|
|
10
|
+
"sourceLiteralIsFallback": {"const": true},
|
|
11
|
+
"writesCreateRevision": {"const": true},
|
|
12
|
+
"conflictRequiresSourceRevision": {"const": true},
|
|
13
|
+
"orphanPolicy": {"const": "report-and-never-publish"},
|
|
14
|
+
"protectedFields": {"type": "array", "minItems": 1, "items": {"type": "string"}},
|
|
15
|
+
"storage": {"type": "string"},
|
|
16
|
+
"transport": {"type": "string"}
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
}
|