headroom-cms 0.1.9 → 0.1.11
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.md +11 -6
- package/admin/assets/{AdminsPage-Bt_ekZen.js → AdminsPage-BnzH9TL3.js} +1 -1
- package/admin/assets/AllContentPage-BtObN6oy.js +1 -0
- package/admin/assets/{ApiKeysPage-BfWCxGhC.js → ApiKeysPage-DEAa8eyC.js} +1 -1
- package/admin/assets/AuditPage-BN9yNsxh.js +1 -0
- package/admin/assets/BlockEditor-3wnisTOZ.js +176 -0
- package/admin/assets/BlockEditor-CQpF8tYb.css +1 -0
- package/admin/assets/BlockTypeEditPage-C2evAESK.js +1 -0
- package/admin/assets/BlockTypesPage-Dhkho6T_.js +1 -0
- package/admin/assets/{BulkActionBar-TRiXXLQd.js → BulkActionBar-BxdfUSrN.js} +1 -1
- package/admin/assets/CollectionEditPage-lOb4hEZy.js +1 -0
- package/admin/assets/{CollectionsPage-ClplrxNn.js → CollectionsPage-CgtOloa1.js} +1 -1
- package/admin/assets/{ContentCreatePage-DfYcEH1u.js → ContentCreatePage-LeQjahp_.js} +1 -1
- package/admin/assets/ContentEditPage-xczr4d_h.js +1 -0
- package/admin/assets/ContentField-pilCbdnA.js +1 -0
- package/admin/assets/ContentListPage-BAKDn1Xy.js +1 -0
- package/admin/assets/CustomBlockPreview-DNnTFM0z.js +479 -0
- package/admin/assets/FieldRenderer-DiOKvkWV.js +2 -0
- package/admin/assets/FilterBar-BZoa63zh.js +1 -0
- package/admin/assets/FloatingComposerController-D4uLQfUX-BMIvFCoE.js +1 -0
- package/admin/assets/IconPicker-CpIgiQTC.js +3 -0
- package/admin/assets/{LoginPage-DutieANA.js → LoginPage-D9ZsGLIi.js} +1 -1
- package/admin/assets/MediaField-CxccCFGQ.js +1 -0
- package/admin/assets/MediaPage-QvMaH2YJ.js +1 -0
- package/admin/assets/Pagination-Df9nQ7Z0.js +1 -0
- package/admin/assets/RelationshipPicker-B3Ftmqxp.js +1 -0
- package/admin/assets/{SiteSettingsPage-BtCC3RKc.js → SiteSettingsPage-6NvH7CiQ.js} +1 -1
- package/admin/assets/{SiteUserEditPage-ClHmp0T-.js → SiteUserEditPage-D5VaQ1Xq.js} +1 -1
- package/admin/assets/SiteUsersPage-BYVduiqs.js +1 -0
- package/admin/assets/{SitesPage-Bw_WBN6v.js → SitesPage-rfWWE0yK.js} +1 -1
- package/admin/assets/{SubmissionDetailPage-DS08LGxd.js → SubmissionDetailPage-BSUR685F.js} +1 -1
- package/admin/assets/SubmissionEditPage-DjLXHjWU.js +1 -0
- package/admin/assets/SubmissionListPage-DBxNEvde.js +1 -0
- package/admin/assets/{TagInput-BILCaC9b.js → TagInput-57c4DG1w.js} +1 -1
- package/admin/assets/{TagsPage-DdeZokow.js → TagsPage-BEO5AwCv.js} +1 -1
- package/admin/assets/{UsersPage-B0vLxjrg.js → UsersPage-BpIRorJ1.js} +1 -1
- package/admin/assets/{WebhookEditPage-SlJE4d3z.js → WebhookEditPage-D5xgi56h.js} +1 -1
- package/admin/assets/{WebhooksPage-C6lGZLpr.js → WebhooksPage-BY7AaiGr.js} +1 -1
- package/admin/assets/{card-hXVtlM0q.js → card-C9hfyHXf.js} +1 -1
- package/admin/assets/checkbox-DVJcwUt1.js +1 -0
- package/admin/assets/{collapsible-B414SspL.js → collapsible-D3d29uJp.js} +1 -1
- package/admin/assets/{command-fvBFHye4.js → command-Bfmj0MEL.js} +1 -1
- package/admin/assets/contentStatus-CkPi9Dh6.js +1 -0
- package/admin/assets/{core.esm-B_kcYf6n.js → core.esm-DdQHdRkd.js} +2 -2
- package/admin/assets/index-BB9Syqw2.css +1 -0
- package/admin/assets/index-Ce5pmRMj.js +18 -0
- package/admin/assets/media-url-DdCoIedP.js +1 -0
- package/admin/assets/popover-CzaQYEEP.js +1 -0
- package/admin/assets/radix-C5ZmWuuL.js +51 -0
- package/admin/assets/select-CrRhFGIi.js +1 -0
- package/admin/assets/serializeToText-2VrsuRUh.js +2 -0
- package/admin/assets/{sortable.esm-QyXA6fio.js → sortable.esm-qVEMoaTg.js} +1 -1
- package/admin/assets/{table-DLoIbCQ5.js → table-_3bMY0_z.js} +1 -1
- package/admin/assets/{textarea-vSXNxwTe.js → textarea-6fq0R6VV.js} +1 -1
- package/admin/assets/useAdminResolver-BJNPz3OG.js +1 -0
- package/admin/assets/useContent-Bs7nel7C.js +1 -0
- package/admin/assets/useContentSearch-B3aTjuCu.js +1 -0
- package/admin/assets/{useMedia-e3sqWm_t.js → useMedia-ae3s_ajC.js} +1 -1
- package/admin/assets/usePageTitle-C1r1-C00.js +1 -0
- package/admin/assets/useSiteUsers-DIaqgNSp.js +1 -0
- package/admin/assets/{useTags-f7AVSLuj.js → useTags-B-HgMVwo.js} +1 -1
- package/admin/assets/{useWebhooks-BH_r8-Mo.js → useWebhooks-BvZjUJkJ.js} +1 -1
- package/admin/assets/yjs-tXBm_srz.js +5 -0
- package/admin/favicon-16x16.png +0 -0
- package/admin/favicon-32x32.png +0 -0
- package/admin/icons/icon-180x180.png +0 -0
- package/admin/icons/icon-192x192.png +0 -0
- package/admin/icons/icon-512x512.png +0 -0
- package/admin/icons/maskable-icon-512x512.png +0 -0
- package/admin/index.html +3 -3
- package/admin/sw.js +1 -1
- package/dist/admin-site.d.ts +16 -2
- package/dist/admin-site.d.ts.map +1 -1
- package/dist/admin-site.js +10 -3
- package/dist/admin-site.js.map +1 -1
- package/dist/api.d.ts +7 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +8 -1
- package/dist/api.js.map +1 -1
- package/dist/cdn-api.d.ts +25 -0
- package/dist/cdn-api.d.ts.map +1 -0
- package/dist/{cdn.js → cdn-api.js} +7 -139
- package/dist/cdn-api.js.map +1 -0
- package/dist/cdn-media.d.ts +26 -0
- package/dist/cdn-media.d.ts.map +1 -0
- package/dist/cdn-media.js +202 -0
- package/dist/cdn-media.js.map +1 -0
- package/dist/collaboration.d.ts +55 -0
- package/dist/collaboration.d.ts.map +1 -0
- package/dist/collaboration.js +141 -0
- package/dist/collaboration.js.map +1 -0
- package/dist/index.d.ts +27 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -12
- package/dist/index.js.map +1 -1
- package/dist/storage.d.ts +2 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +33 -0
- package/dist/storage.js.map +1 -1
- package/lambda/api/bootstrap +0 -0
- package/lambda/image-lambda/node_modules/.package-lock.json +3 -3
- package/lambda/image-lambda/node_modules/semver/README.md +19 -4
- package/lambda/image-lambda/node_modules/semver/bin/semver.js +14 -10
- package/lambda/image-lambda/node_modules/semver/functions/truncate.js +48 -0
- package/lambda/image-lambda/node_modules/semver/index.js +2 -0
- package/lambda/image-lambda/node_modules/semver/internal/re.js +1 -1
- package/lambda/image-lambda/node_modules/semver/package.json +3 -3
- package/lambda/image-lambda/node_modules/semver/range.bnf +5 -4
- package/lambda/webhook-worker/bootstrap +0 -0
- package/package.json +1 -1
- package/src/admin-site.ts +26 -5
- package/src/api.ts +15 -1
- package/src/{cdn.ts → cdn-api.ts} +8 -161
- package/src/cdn-media.ts +250 -0
- package/src/collaboration.ts +187 -0
- package/src/index.ts +77 -14
- package/src/sst-env.d.ts +28 -0
- package/src/storage.ts +35 -0
- package/admin/assets/AllContentPage-CFqEMAl9.js +0 -1
- package/admin/assets/AuditPage-BE0XIUl2.js +0 -1
- package/admin/assets/BlockEditor-6wqsThJ7.js +0 -179
- package/admin/assets/BlockEditor-Cp_wZ2xN.css +0 -1
- package/admin/assets/BlockTypeEditPage-CuNJfZw0.js +0 -1
- package/admin/assets/BlockTypesPage-BIMBVxBs.js +0 -1
- package/admin/assets/CollectionEditPage-BqX_0cC2.js +0 -1
- package/admin/assets/ContentEditPage-D3Rvlktk.js +0 -2
- package/admin/assets/ContentListPage-zmO8Is4d.js +0 -1
- package/admin/assets/CustomBlockPreview-C6HqS4xv.js +0 -479
- package/admin/assets/FieldBuilder-36tfpSyM.js +0 -3
- package/admin/assets/FilterBar-DhRwTqFv.js +0 -1
- package/admin/assets/MediaField-J2TLG_fu.js +0 -1
- package/admin/assets/MediaPage-DZZKMGF4.js +0 -1
- package/admin/assets/RelationshipPicker-CDFs4TMW.js +0 -1
- package/admin/assets/SiteUsersPage-AyJvcVM7.js +0 -1
- package/admin/assets/SubmissionEditPage-Brf-DK2X.js +0 -1
- package/admin/assets/SubmissionListPage-DNMzQZHS.js +0 -1
- package/admin/assets/checkbox-WGrS3sUr.js +0 -1
- package/admin/assets/contentStatus-BmaiYVOm.js +0 -1
- package/admin/assets/index-Cir9tY_P.js +0 -18
- package/admin/assets/index-DACBYsKM.css +0 -1
- package/admin/assets/media-url-DIg_vSyf.js +0 -1
- package/admin/assets/popover-D5_HjjUC.js +0 -1
- package/admin/assets/radix-C1kb_NqW.js +0 -51
- package/admin/assets/select-_uJYxzeZ.js +0 -1
- package/admin/assets/serializeToText-DR_WnxiI.js +0 -2
- package/admin/assets/useAdminResolver-D-LlmquD.js +0 -1
- package/admin/assets/useContent-e8beBIuq.js +0 -1
- package/admin/assets/useContentSearch-DOjveB9t.js +0 -1
- package/admin/assets/useDebouncedValue-C-cQUcLG.js +0 -1
- package/admin/assets/usePageTitle-BNSba9_L.js +0 -1
- package/admin/assets/useSiteUsers-BdnvuM2E.js +0 -1
- package/dist/cdn.d.ts +0 -27
- package/dist/cdn.d.ts.map +0 -1
- package/dist/cdn.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collaboration.js","sourceRoot":"","sources":["../src/collaboration.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ export type { AuthResources } from "./auth.js";
|
|
|
9
9
|
export type { WebhookResources } from "./webhooks.js";
|
|
10
10
|
export type { ImageResources } from "./image.js";
|
|
11
11
|
export type { ApiResources } from "./api.js";
|
|
12
|
-
export type {
|
|
12
|
+
export type { ApiCdnResources } from "./cdn-api.js";
|
|
13
|
+
export type { MediaCdnResources } from "./cdn-media.js";
|
|
13
14
|
export type { SchedulerResources } from "./scheduler.js";
|
|
15
|
+
export type { CollaborationResources } from "./collaboration.js";
|
|
14
16
|
export type { AdminSiteResources } from "./admin-site.js";
|
|
15
17
|
export interface HeadroomCMSArgs {
|
|
16
18
|
/**
|
|
@@ -20,7 +22,7 @@ export interface HeadroomCMSArgs {
|
|
|
20
22
|
*/
|
|
21
23
|
senderEmail: string;
|
|
22
24
|
/**
|
|
23
|
-
* Custom domain for the CDN (
|
|
25
|
+
* Custom domain for the API CDN (`/v1/*` and `/health`).
|
|
24
26
|
* If not provided, uses the default CloudFront domain.
|
|
25
27
|
*/
|
|
26
28
|
domain?: {
|
|
@@ -28,6 +30,16 @@ export interface HeadroomCMSArgs {
|
|
|
28
30
|
/** ACM certificate ARN (must be in us-east-1 for CloudFront) */
|
|
29
31
|
certificateArn: string;
|
|
30
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Custom domain for the media CDN (S3 + image-Lambda origin, serves
|
|
35
|
+
* `/media/*` and `/img/*`). If not provided, uses the default CloudFront
|
|
36
|
+
* domain. The certificate must be in us-east-1, same as `domain`.
|
|
37
|
+
*/
|
|
38
|
+
mediaDomain?: {
|
|
39
|
+
name: string;
|
|
40
|
+
/** ACM certificate ARN (must be in us-east-1 for CloudFront) */
|
|
41
|
+
certificateArn: string;
|
|
42
|
+
};
|
|
31
43
|
/**
|
|
32
44
|
* Custom domain for the admin UI.
|
|
33
45
|
* If not provided, uses the default CloudFront domain.
|
|
@@ -74,14 +86,26 @@ export interface HeadroomCMSArgs {
|
|
|
74
86
|
adminPath: string;
|
|
75
87
|
/** Go source path for scheduler Lambda, e.g. "packages/scheduler" */
|
|
76
88
|
schedulerHandler?: string;
|
|
89
|
+
/** SST handler for collab Lambda, e.g. "packages/collab/src/index.handler" */
|
|
90
|
+
collabHandler?: string;
|
|
77
91
|
};
|
|
92
|
+
/**
|
|
93
|
+
* Build-time toggle for the collaboration feature in the admin UI.
|
|
94
|
+
* Defaults to `true`. Set `false` to keep the WebSocket / Collab table
|
|
95
|
+
* deployed but hide the "Collaborate" / "Request collaboration" buttons
|
|
96
|
+
* and refuse to open WebSockets — a kill-switch without teardown. Used
|
|
97
|
+
* to ship the feature to a stage before turning it on for editors.
|
|
98
|
+
*/
|
|
99
|
+
collabEnabled?: boolean;
|
|
78
100
|
}
|
|
79
101
|
export declare class HeadroomCMS {
|
|
80
102
|
readonly apiUrl: $util.Output<string>;
|
|
81
|
-
readonly
|
|
103
|
+
readonly apiCdnUrl: $util.Output<string>;
|
|
104
|
+
readonly mediaCdnUrl: $util.Output<string>;
|
|
82
105
|
readonly adminUrl: $util.Output<string>;
|
|
83
106
|
readonly userPoolId: $util.Output<string>;
|
|
84
107
|
readonly userPoolClientId: $util.Output<string>;
|
|
108
|
+
readonly collabWsUrl: $util.Output<string>;
|
|
85
109
|
readonly outputs: Record<string, $util.Output<string>>;
|
|
86
110
|
constructor(name: string, args: HeadroomCMSArgs);
|
|
87
111
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,10 @@ import { createAuth } from "./auth.js";
|
|
|
11
11
|
import { createWebhooks } from "./webhooks.js";
|
|
12
12
|
import { createImage } from "./image.js";
|
|
13
13
|
import { createApi } from "./api.js";
|
|
14
|
-
import {
|
|
14
|
+
import { createApiCdn } from "./cdn-api.js";
|
|
15
|
+
import { createMediaCdn } from "./cdn-media.js";
|
|
15
16
|
import { createScheduler } from "./scheduler.js";
|
|
17
|
+
import { createCollabTable, createCollabHandler } from "./collaboration.js";
|
|
16
18
|
import { createAdminSite } from "./admin-site.js";
|
|
17
19
|
/**
|
|
18
20
|
* Resolve the headroom-cms package root directory.
|
|
@@ -40,10 +42,12 @@ function resolvePkgRoot() {
|
|
|
40
42
|
}
|
|
41
43
|
export class HeadroomCMS {
|
|
42
44
|
apiUrl;
|
|
43
|
-
|
|
45
|
+
apiCdnUrl;
|
|
46
|
+
mediaCdnUrl;
|
|
44
47
|
adminUrl;
|
|
45
48
|
userPoolId;
|
|
46
49
|
userPoolClientId;
|
|
50
|
+
collabWsUrl;
|
|
47
51
|
outputs;
|
|
48
52
|
constructor(name, args) {
|
|
49
53
|
// Only need pkgRoot for package mode (pre-built artifacts)
|
|
@@ -75,19 +79,38 @@ export class HeadroomCMS {
|
|
|
75
79
|
? { handler: args.dev.imageLambdaHandler }
|
|
76
80
|
: undefined,
|
|
77
81
|
});
|
|
78
|
-
//
|
|
82
|
+
// 5a. Collaboration table (must exist before the API Lambda, which
|
|
83
|
+
// links it for ticket reads/writes).
|
|
84
|
+
const collabTable = createCollabTable(name);
|
|
85
|
+
// 6. API Lambda (Go handler with access to all resources)
|
|
79
86
|
const api = createApi(name, {
|
|
80
87
|
storage,
|
|
81
88
|
auth,
|
|
82
89
|
webhooks,
|
|
83
90
|
image,
|
|
91
|
+
collab: collabTable,
|
|
84
92
|
senderEmail: args.senderEmail,
|
|
85
93
|
pkgRoot,
|
|
86
94
|
dev: args.dev
|
|
87
95
|
? { handler: args.dev.apiHandler }
|
|
88
96
|
: undefined,
|
|
89
97
|
});
|
|
90
|
-
//
|
|
98
|
+
// 5b. Collaboration WebSocket handler (must be created AFTER the API
|
|
99
|
+
// because its Lambda environment includes API_URL = api.api.url, which
|
|
100
|
+
// `snapshotToDraft` uses to PUT the disconnect snapshot back to the
|
|
101
|
+
// Go draft endpoint).
|
|
102
|
+
const collabHandler = createCollabHandler(name, {
|
|
103
|
+
storage,
|
|
104
|
+
auth,
|
|
105
|
+
api,
|
|
106
|
+
collabTable: collabTable.collabTable,
|
|
107
|
+
pkgRoot,
|
|
108
|
+
dev: args.dev?.collabHandler
|
|
109
|
+
? { handler: args.dev.collabHandler }
|
|
110
|
+
: undefined,
|
|
111
|
+
});
|
|
112
|
+
const collab = { ...collabTable, ...collabHandler };
|
|
113
|
+
// 7. Scheduler (EventBridge cron + Go Lambda + lock table)
|
|
91
114
|
const schedulerResources = createScheduler(name, {
|
|
92
115
|
storage,
|
|
93
116
|
api,
|
|
@@ -96,39 +119,51 @@ export class HeadroomCMS {
|
|
|
96
119
|
? { handler: args.dev.schedulerHandler }
|
|
97
120
|
: undefined,
|
|
98
121
|
});
|
|
99
|
-
//
|
|
100
|
-
const
|
|
122
|
+
// 8a. API CDN (CloudFront distribution + edge auth, /v1/* and /health)
|
|
123
|
+
const apiCdn = createApiCdn(name, {
|
|
101
124
|
api,
|
|
102
|
-
image,
|
|
103
|
-
contentBucket: storage.contentBucket,
|
|
104
125
|
kvs: storage.kvs,
|
|
105
126
|
priceClass: args.priceClass,
|
|
106
127
|
apiCacheTtl: args.apiCacheTtl,
|
|
107
128
|
domain: args.domain,
|
|
108
129
|
});
|
|
109
|
-
//
|
|
130
|
+
// 8b. Media CDN (CloudFront distribution, /media/* and /img/* only)
|
|
131
|
+
const mediaCdn = createMediaCdn(name, {
|
|
132
|
+
image,
|
|
133
|
+
contentBucket: storage.contentBucket,
|
|
134
|
+
priceClass: args.priceClass,
|
|
135
|
+
domain: args.mediaDomain,
|
|
136
|
+
});
|
|
137
|
+
// 9. Admin UI (static site)
|
|
110
138
|
const admin = createAdminSite(name, {
|
|
111
139
|
api,
|
|
112
|
-
|
|
140
|
+
apiCdn,
|
|
141
|
+
mediaCdn,
|
|
113
142
|
auth,
|
|
143
|
+
collab,
|
|
114
144
|
pkgRoot,
|
|
115
145
|
dev: args.dev
|
|
116
146
|
? { adminPath: args.dev.adminPath }
|
|
117
147
|
: undefined,
|
|
118
148
|
domain: args.adminDomain,
|
|
149
|
+
collabEnabled: args.collabEnabled,
|
|
119
150
|
});
|
|
120
151
|
// Expose outputs
|
|
121
152
|
this.apiUrl = api.api.url;
|
|
122
|
-
this.
|
|
153
|
+
this.apiCdnUrl = apiCdn.url;
|
|
154
|
+
this.mediaCdnUrl = mediaCdn.url;
|
|
123
155
|
this.adminUrl = admin.url;
|
|
124
156
|
this.userPoolId = auth.userPool.id;
|
|
125
157
|
this.userPoolClientId = auth.userPoolClient.id;
|
|
158
|
+
this.collabWsUrl = collab.wsUrl;
|
|
126
159
|
this.outputs = {
|
|
127
160
|
api: api.api.url,
|
|
128
|
-
|
|
161
|
+
apiCdn: apiCdn.url,
|
|
162
|
+
mediaCdn: mediaCdn.url,
|
|
129
163
|
admin: admin.url,
|
|
130
164
|
userPoolId: auth.userPool.id,
|
|
131
165
|
userPoolClientId: auth.userPoolClient.id,
|
|
166
|
+
collabWs: collab.wsUrl,
|
|
132
167
|
};
|
|
133
168
|
}
|
|
134
169
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ export declare function createStorage(name: string): {
|
|
|
16
16
|
relationships: sst.aws.Dynamo;
|
|
17
17
|
siteUsers: sst.aws.Dynamo;
|
|
18
18
|
contentBucket: sst.aws.Bucket;
|
|
19
|
+
collabStateBucket: sst.aws.Bucket;
|
|
19
20
|
kvs: aws.cloudfront.KeyValueStore;
|
|
21
|
+
internalSecret: sst.Secret;
|
|
20
22
|
};
|
|
21
23
|
export type StorageResources = ReturnType<typeof createStorage>;
|
|
22
24
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;EAoLzC;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
package/dist/storage.js
CHANGED
|
@@ -119,10 +119,41 @@ export function createStorage(name) {
|
|
|
119
119
|
},
|
|
120
120
|
},
|
|
121
121
|
});
|
|
122
|
+
// Phase 7.1 "Large documents": YJS room state that exceeds DynamoDB's 400KB
|
|
123
|
+
// per-item cap is uploaded here instead of being inlined on the Collab
|
|
124
|
+
// item. Dedicated bucket (vs reusing `contentBucket`) for two reasons:
|
|
125
|
+
// 1. `contentBucket` is `access: "cloudfront"` for media delivery; YJS
|
|
126
|
+
// state must NOT be CDN-fronted (it's per-collaboration-session
|
|
127
|
+
// transient state, never publicly addressable).
|
|
128
|
+
// 2. Lifecycle expiration is much shorter — these objects are recovery
|
|
129
|
+
// fallback for an active collaboration session; the matching Collab
|
|
130
|
+
// table item carries a 24h DynamoDB TTL, so the S3 lifecycle rule
|
|
131
|
+
// cleans up overflow objects on a similar timeline.
|
|
132
|
+
const collabStateBucket = new sst.aws.Bucket(`${name}CollabStateBucket`, {
|
|
133
|
+
transform: {
|
|
134
|
+
bucket: (args) => {
|
|
135
|
+
args.lifecycleRules = [
|
|
136
|
+
{
|
|
137
|
+
id: "expire-collab-state",
|
|
138
|
+
enabled: true,
|
|
139
|
+
expiration: { days: 7 },
|
|
140
|
+
// Keep the matching Collab DynamoDB TTL (24h) as the primary
|
|
141
|
+
// cleanup mechanism; this is a long-stop safety net so orphaned
|
|
142
|
+
// S3 objects don't accumulate forever.
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
});
|
|
122
148
|
const kvs = new aws.cloudfront.KeyValueStore(`${name}KVS`, {
|
|
123
149
|
name: $interpolate `${$app.name}-${$app.stage}-kvs`,
|
|
124
150
|
comment: "Headroom CMS edge data: API keys and site versions",
|
|
125
151
|
});
|
|
152
|
+
// Shared secret for internal service-to-service auth between the collab
|
|
153
|
+
// Lambda and the Go API (`X-Headroom-Internal` header). Both Lambdas read
|
|
154
|
+
// this from their `INTERNAL_SECRET` environment variable. Set the value via
|
|
155
|
+
// `sst secret set HeadroomInternalSecret <value>` (or the namespaced equivalent).
|
|
156
|
+
const internalSecret = new sst.Secret(`${name}InternalSecret`);
|
|
126
157
|
return {
|
|
127
158
|
sites,
|
|
128
159
|
content,
|
|
@@ -135,7 +166,9 @@ export function createStorage(name) {
|
|
|
135
166
|
relationships,
|
|
136
167
|
siteUsers,
|
|
137
168
|
contentBucket,
|
|
169
|
+
collabStateBucket,
|
|
138
170
|
kvs,
|
|
171
|
+
internalSecret,
|
|
139
172
|
};
|
|
140
173
|
}
|
|
141
174
|
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/lambda/api/bootstrap
CHANGED
|
Binary file
|
|
@@ -97,9 +97,9 @@
|
|
|
97
97
|
"license": "MIT"
|
|
98
98
|
},
|
|
99
99
|
"node_modules/semver": {
|
|
100
|
-
"version": "7.
|
|
101
|
-
"resolved": "https://registry.npmjs.org/semver/-/semver-7.
|
|
102
|
-
"integrity": "sha512-
|
|
100
|
+
"version": "7.8.0",
|
|
101
|
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
|
|
102
|
+
"integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
|
|
103
103
|
"license": "ISC",
|
|
104
104
|
"bin": {
|
|
105
105
|
"semver": "bin/semver.js"
|
|
@@ -56,6 +56,7 @@ const semverCompareLoose = require('semver/functions/compare-loose')
|
|
|
56
56
|
const semverCompareBuild = require('semver/functions/compare-build')
|
|
57
57
|
const semverSort = require('semver/functions/sort')
|
|
58
58
|
const semverRsort = require('semver/functions/rsort')
|
|
59
|
+
const semverTruncate = require('semver/functions/truncate')
|
|
59
60
|
|
|
60
61
|
// low-level comparators between versions
|
|
61
62
|
const semverGt = require('semver/functions/gt')
|
|
@@ -399,12 +400,19 @@ nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
|
|
|
399
400
|
tilde ::= '~' partial
|
|
400
401
|
caret ::= '^' partial
|
|
401
402
|
qualifier ::= ( '-' pre )? ( '+' build )?
|
|
402
|
-
pre ::=
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
403
|
+
pre ::= prepart ( '.' prepart ) *
|
|
404
|
+
prepart ::= nr | alphanumid
|
|
405
|
+
build ::= buildid ( '.' buildid ) *
|
|
406
|
+
alphanumid ::= ( ['0'-'9'] ) * [-A-Za-z] [-0-9A-Za-z] *
|
|
407
|
+
buildid ::= [-0-9A-Za-z]+
|
|
406
408
|
```
|
|
407
409
|
|
|
410
|
+
Note: Prerelease identifiers (`pre`) use `nr` for numeric parts, which
|
|
411
|
+
disallows leading zeros (e.g., `1.2.3-00` is invalid). Build metadata
|
|
412
|
+
identifiers (`build`) allow any alphanumeric string including leading
|
|
413
|
+
zeros (e.g., `1.2.3+00` is valid). This matches the
|
|
414
|
+
[SemVer 2.0.0 specification](https://semver.org/#spec-item-9).
|
|
415
|
+
|
|
408
416
|
## Functions
|
|
409
417
|
|
|
410
418
|
All methods and classes take a final `options` object argument. All
|
|
@@ -449,6 +457,12 @@ strings that they parse.
|
|
|
449
457
|
or comparators intersect.
|
|
450
458
|
* `parse(v)`: Attempt to parse a string as a semantic version, returning either
|
|
451
459
|
a `SemVer` object or `null`.
|
|
460
|
+
* `truncate(v, releaseType)`: Return the version with components _lower_
|
|
461
|
+
than `releaseType` dropped off, e.g.:
|
|
462
|
+
* `major` removes build & prerelease info and sets minor & patch to 0.
|
|
463
|
+
* `minor` removes build & prerelease info, and sets patch to 0
|
|
464
|
+
* `patch` removes build & prerelease info
|
|
465
|
+
* All prerelease types remove build info only
|
|
452
466
|
|
|
453
467
|
### Comparison
|
|
454
468
|
|
|
@@ -650,6 +664,7 @@ The following modules are available:
|
|
|
650
664
|
* `require('semver/functions/rsort')`
|
|
651
665
|
* `require('semver/functions/satisfies')`
|
|
652
666
|
* `require('semver/functions/sort')`
|
|
667
|
+
* `require('semver/functions/truncate')`
|
|
653
668
|
* `require('semver/functions/valid')`
|
|
654
669
|
* `require('semver/ranges/gtr')`
|
|
655
670
|
* `require('semver/ranges/intersects')`
|
|
@@ -46,6 +46,7 @@ const main = () => {
|
|
|
46
46
|
a = a.slice(0, indexOfEqualSign)
|
|
47
47
|
argv.unshift(value)
|
|
48
48
|
}
|
|
49
|
+
|
|
49
50
|
switch (a) {
|
|
50
51
|
case '-rv': case '-rev': case '--rev': case '--reverse':
|
|
51
52
|
reverse = true
|
|
@@ -60,15 +61,10 @@ const main = () => {
|
|
|
60
61
|
versions.push(argv.shift())
|
|
61
62
|
break
|
|
62
63
|
case '-i': case '--inc': case '--increment':
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
inc = argv.shift()
|
|
68
|
-
break
|
|
69
|
-
default:
|
|
70
|
-
inc = 'patch'
|
|
71
|
-
break
|
|
64
|
+
if (semver.RELEASE_TYPES.includes(argv[0]) || (argv[0] === 'release')) {
|
|
65
|
+
inc = { value: argv.shift(), maybeErrantValue: null, option: a }
|
|
66
|
+
} else {
|
|
67
|
+
inc = { value: 'patch', maybeErrantValue: argv[0], option: a }
|
|
72
68
|
}
|
|
73
69
|
break
|
|
74
70
|
case '--preid':
|
|
@@ -102,6 +98,14 @@ const main = () => {
|
|
|
102
98
|
|
|
103
99
|
options = parseOptions({ loose, includePrerelease, rtl })
|
|
104
100
|
|
|
101
|
+
if (
|
|
102
|
+
inc &&
|
|
103
|
+
versions.includes(inc.maybeErrantValue) &&
|
|
104
|
+
!semver.valid(inc.maybeErrantValue, options)
|
|
105
|
+
) {
|
|
106
|
+
console.warn(`Invalid value for ${inc.option}; defaulting to 'patch'. This may become a failure in future major versions.`)
|
|
107
|
+
}
|
|
108
|
+
|
|
105
109
|
versions = versions.map((v) => {
|
|
106
110
|
return coerce ? (semver.coerce(v, options) || { version: v }).version : v
|
|
107
111
|
}).filter((v) => {
|
|
@@ -125,7 +129,7 @@ const main = () => {
|
|
|
125
129
|
versions
|
|
126
130
|
.sort((a, b) => semver[reverse ? 'rcompare' : 'compare'](a, b, options))
|
|
127
131
|
.map(v => semver.clean(v, options))
|
|
128
|
-
.map(v => inc ? semver.inc(v, inc, options, identifier, identifierBase) : v)
|
|
132
|
+
.map(v => inc ? semver.inc(v, inc.value, options, identifier, identifierBase) : v)
|
|
129
133
|
.forEach(v => console.log(v))
|
|
130
134
|
}
|
|
131
135
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const parse = require('./parse')
|
|
4
|
+
const constants = require('../internal/constants')
|
|
5
|
+
const SemVer = require('../classes/semver')
|
|
6
|
+
|
|
7
|
+
const truncate = (version, truncation, options) => {
|
|
8
|
+
if (!constants.RELEASE_TYPES.includes(truncation)) {
|
|
9
|
+
return null
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const clonedVersion = cloneInputVersion(version, options)
|
|
13
|
+
return clonedVersion && doTruncation(clonedVersion, truncation)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const cloneInputVersion = (version, options) => {
|
|
17
|
+
const versionStringToParse = (
|
|
18
|
+
version instanceof SemVer ? version.version : version
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return parse(versionStringToParse, options)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const doTruncation = (version, truncation) => {
|
|
25
|
+
if (isPrerelease(truncation)) {
|
|
26
|
+
return version.version
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
version.prerelease = []
|
|
30
|
+
|
|
31
|
+
switch (truncation) {
|
|
32
|
+
case 'major':
|
|
33
|
+
version.minor = 0
|
|
34
|
+
version.patch = 0
|
|
35
|
+
break
|
|
36
|
+
case 'minor':
|
|
37
|
+
version.patch = 0
|
|
38
|
+
break
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return version.format()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const isPrerelease = (type) => {
|
|
45
|
+
return type.startsWith('pre')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = truncate
|
|
@@ -28,6 +28,7 @@ const gte = require('./functions/gte')
|
|
|
28
28
|
const lte = require('./functions/lte')
|
|
29
29
|
const cmp = require('./functions/cmp')
|
|
30
30
|
const coerce = require('./functions/coerce')
|
|
31
|
+
const truncate = require('./functions/truncate')
|
|
31
32
|
const Comparator = require('./classes/comparator')
|
|
32
33
|
const Range = require('./classes/range')
|
|
33
34
|
const satisfies = require('./functions/satisfies')
|
|
@@ -66,6 +67,7 @@ module.exports = {
|
|
|
66
67
|
lte,
|
|
67
68
|
cmp,
|
|
68
69
|
coerce,
|
|
70
|
+
truncate,
|
|
69
71
|
Comparator,
|
|
70
72
|
Range,
|
|
71
73
|
satisfies,
|
|
@@ -136,7 +136,7 @@ createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
|
|
|
136
136
|
createToken('GTLT', '((?:<|>)?=?)')
|
|
137
137
|
|
|
138
138
|
// Something like "2.*" or "1.2.x".
|
|
139
|
-
// Note that "x.x" is a valid xRange
|
|
139
|
+
// Note that "x.x" is a valid xRange identifier, meaning "any version"
|
|
140
140
|
// Only the first item is strictly required.
|
|
141
141
|
createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
|
|
142
142
|
createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semver",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.8.0",
|
|
4
4
|
"description": "The semantic version parser used by npm.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@npmcli/eslint-config": "^6.0.0",
|
|
18
|
-
"@npmcli/template-oss": "
|
|
18
|
+
"@npmcli/template-oss": "5.0.0",
|
|
19
19
|
"benchmark": "^2.1.4",
|
|
20
20
|
"tap": "^16.0.0"
|
|
21
21
|
},
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"author": "GitHub Inc.",
|
|
53
53
|
"templateOSS": {
|
|
54
54
|
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
|
|
55
|
-
"version": "
|
|
55
|
+
"version": "5.0.0",
|
|
56
56
|
"engines": ">=10",
|
|
57
57
|
"distPaths": [
|
|
58
58
|
"classes/",
|
|
@@ -10,7 +10,8 @@ nr ::= '0' | [1-9] ( [0-9] ) *
|
|
|
10
10
|
tilde ::= '~' partial
|
|
11
11
|
caret ::= '^' partial
|
|
12
12
|
qualifier ::= ( '-' pre )? ( '+' build )?
|
|
13
|
-
pre ::=
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
pre ::= prepart ( '.' prepart ) *
|
|
14
|
+
prepart ::= nr | alphanumid
|
|
15
|
+
build ::= buildid ( '.' buildid ) *
|
|
16
|
+
alphanumid ::= ( [0-9] ) * [A-Za-z-] [-0-9A-Za-z] *
|
|
17
|
+
buildid ::= [-0-9A-Za-z]+
|
|
Binary file
|
package/package.json
CHANGED
package/src/admin-site.ts
CHANGED
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
import fs from "fs";
|
|
10
10
|
import path from "path";
|
|
11
11
|
import type { ApiResources } from "./api.js";
|
|
12
|
-
import type {
|
|
12
|
+
import type { ApiCdnResources } from "./cdn-api.js";
|
|
13
|
+
import type { MediaCdnResources } from "./cdn-media.js";
|
|
13
14
|
import type { AuthResources } from "./auth.js";
|
|
15
|
+
import type { CollaborationResources } from "./collaboration.js";
|
|
14
16
|
|
|
15
17
|
export interface AdminSiteArgs {
|
|
16
18
|
api: ApiResources;
|
|
17
|
-
|
|
19
|
+
apiCdn: ApiCdnResources;
|
|
20
|
+
mediaCdn: MediaCdnResources;
|
|
18
21
|
auth: AuthResources;
|
|
22
|
+
collab: CollaborationResources;
|
|
19
23
|
pkgRoot: string;
|
|
20
24
|
dev?: {
|
|
21
25
|
/** Path to admin UI source, e.g. "packages/admin" */
|
|
@@ -25,10 +29,23 @@ export interface AdminSiteArgs {
|
|
|
25
29
|
name: string;
|
|
26
30
|
certificateArn: string;
|
|
27
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* Build-time toggle for the entire collaboration UI. Defaults to `true`
|
|
34
|
+
* (collab is on whenever the WS infra is deployed). Set to `false` from
|
|
35
|
+
* the consuming SST config to keep the WebSocket / Collab DynamoDB table
|
|
36
|
+
* deployed but hide the "Collaborate" / "Request collaboration" buttons
|
|
37
|
+
* and refuse to open WebSockets — useful as a kill-switch without a full
|
|
38
|
+
* teardown. Plumbs to `VITE_COLLAB_ENABLED` in the admin Vite env; see
|
|
39
|
+
* `packages/admin/src/collab/featureFlag.ts` for the consumer.
|
|
40
|
+
*/
|
|
41
|
+
collabEnabled?: boolean;
|
|
28
42
|
}
|
|
29
43
|
|
|
30
44
|
export function createAdminSite(name: string, args: AdminSiteArgs) {
|
|
31
|
-
const { api,
|
|
45
|
+
const { api, mediaCdn, auth, collab } = args;
|
|
46
|
+
// Default ON for backward compat — only emit "false" when explicitly
|
|
47
|
+
// disabled so existing stages without the flag set don't change behaviour.
|
|
48
|
+
const collabEnabledStr = args.collabEnabled === false ? "false" : "true";
|
|
32
49
|
|
|
33
50
|
const domainConfig = args.domain
|
|
34
51
|
? {
|
|
@@ -50,10 +67,12 @@ export function createAdminSite(name: string, args: AdminSiteArgs) {
|
|
|
50
67
|
},
|
|
51
68
|
environment: {
|
|
52
69
|
VITE_API_URL: api.api.url,
|
|
53
|
-
|
|
70
|
+
VITE_MEDIA_URL: mediaCdn.url,
|
|
54
71
|
VITE_USER_POOL_ID: auth.userPool.id,
|
|
55
72
|
VITE_USER_POOL_CLIENT_ID: auth.userPoolClient.id,
|
|
56
73
|
VITE_AWS_REGION: aws.getRegionOutput().name,
|
|
74
|
+
VITE_COLLAB_WS_URL: collab.wsUrl,
|
|
75
|
+
VITE_COLLAB_ENABLED: collabEnabledStr,
|
|
57
76
|
},
|
|
58
77
|
domain: domainConfig,
|
|
59
78
|
});
|
|
@@ -80,10 +99,12 @@ export function createAdminSite(name: string, args: AdminSiteArgs) {
|
|
|
80
99
|
const path = require('path');
|
|
81
100
|
const replacements = {
|
|
82
101
|
'__HEADROOM_API_URL__': '${api.api.url}',
|
|
83
|
-
'
|
|
102
|
+
'__HEADROOM_MEDIA_URL__': '${mediaCdn.url}',
|
|
84
103
|
'__HEADROOM_USER_POOL_ID__': '${auth.userPool.id}',
|
|
85
104
|
'__HEADROOM_USER_POOL_CLIENT_ID__': '${auth.userPoolClient.id}',
|
|
86
105
|
'__HEADROOM_AWS_REGION__': '${aws.getRegionOutput().name}',
|
|
106
|
+
'__HEADROOM_COLLAB_WS_URL__': '${collab.wsUrl}',
|
|
107
|
+
'__HEADROOM_COLLAB_ENABLED__': '${collabEnabledStr}',
|
|
87
108
|
};
|
|
88
109
|
function walk(d) {
|
|
89
110
|
for (const f of fs.readdirSync(d)) {
|