@airdraft/cloud 0.1.1 → 0.1.5
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/CHANGELOG.md +19 -0
- package/dist/runtime.d.ts +7 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +116 -50
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.1.5](https://github.com/aevrHQ/airdraft/compare/cloud@v0.1.3...cloud@v0.1.5) (2026-05-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* enhance media input components and add scoped media adapter for project isolation ([e599cf2](https://github.com/aevrHQ/airdraft/commit/e599cf2c488cf73164d1cb7b1ce479d6005cf923))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* update cloud package version to 0.1.4 and enhance audit log persistence logic ([e1fb0e5](https://github.com/aevrHQ/airdraft/commit/e1fb0e5509c7f95c4e659495bcdbd1339da20cea))
|
|
16
|
+
|
|
17
|
+
### [0.1.3](https://github.com/aevrHQ/airdraft/compare/cloud@v0.1.1...cloud@v0.1.3) (2026-05-22)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* update package versions and enhance schema cache handling ([7f4f395](https://github.com/aevrHQ/airdraft/commit/7f4f39572168b4e75dd6f1d756ebd5ef2d7ddbe1))
|
|
23
|
+
|
|
5
24
|
### [0.1.1](https://github.com/aevrHQ/airdraft/compare/cloud@v0.1.0...cloud@v0.1.1) (2026-05-22)
|
|
6
25
|
|
|
7
26
|
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MediaAdapter } from '@airdraft/core';
|
|
1
2
|
import type { CloudAuthAdapter } from '@airdraft/cloud-auth';
|
|
2
3
|
import type { CloudDb, TokenCache } from './types.js';
|
|
3
4
|
/**
|
|
@@ -16,6 +17,12 @@ export interface CloudCmsOptions {
|
|
|
16
17
|
* sessions are accepted alongside ntk_* API keys.
|
|
17
18
|
*/
|
|
18
19
|
authAdapter?: CloudAuthAdapter;
|
|
20
|
+
/**
|
|
21
|
+
* Media adapter for file uploads / the media library.
|
|
22
|
+
* When provided, `withMedia` is included in every project handler so that
|
|
23
|
+
* `GET /media` and `POST /media` routes work in the cloud dashboard.
|
|
24
|
+
*/
|
|
25
|
+
mediaAdapter?: MediaAdapter;
|
|
19
26
|
}
|
|
20
27
|
interface RouteContext {
|
|
21
28
|
params: Promise<{
|
|
@@ -38,7 +45,6 @@ export interface CloudCmsHandler {
|
|
|
38
45
|
*
|
|
39
46
|
* ```ts
|
|
40
47
|
* const { GET, POST, PUT, DELETE } = createCloudCmsHandler({ db, schemaCache, githubAppId, githubAppPrivateKey })
|
|
41
|
-
* export { GET, POST, PUT, DELETE }
|
|
42
48
|
* ```
|
|
43
49
|
*
|
|
44
50
|
* URL pattern: `cms.airdraft.space/{projectSlug}/api/cms/{collection}/{slug?}`
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuC,YAAY,EAAE,MAAM,gBAAgB,CAAA;AASvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,YAAY,CAAA;AAejE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEvD;AAoFD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAA;IACX,mEAAmE;IACnE,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;CAC3D;AAED,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEvE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,SAAS,CAAA;IACd,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;CAClB;AA2LD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CA0D5E"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { GitHubAdapter } from '@airdraft/core';
|
|
2
2
|
import { createCmsHandler } from '@airdraft/next';
|
|
3
3
|
import { withAuth } from '@airdraft/plugin-auth';
|
|
4
|
-
import { withAuditLog } from '@airdraft/plugin-audit-log';
|
|
4
|
+
import { withAuditLog, consolePersister, compositePersister } from '@airdraft/plugin-audit-log';
|
|
5
|
+
import { withMedia } from '@airdraft/plugin-media';
|
|
5
6
|
import { withSchemaEditor } from '@airdraft/plugin-schema-editor';
|
|
6
7
|
import { hashApiKey } from '@airdraft/auth';
|
|
7
8
|
const _engineCache = new Map();
|
|
@@ -14,6 +15,39 @@ export function bustEngineCache(projectId) {
|
|
|
14
15
|
_engineCache.delete(projectId);
|
|
15
16
|
}
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
18
|
+
// scopedMediaAdapter — scopes all adapter operations to a project-level prefix
|
|
19
|
+
// so that each project's media is isolated within the shared bucket.
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function scopedMediaAdapter(adapter, projectId) {
|
|
22
|
+
const base = `projects/${projectId}`;
|
|
23
|
+
function addBase(key) {
|
|
24
|
+
return `${base}/${key}`;
|
|
25
|
+
}
|
|
26
|
+
function stripBase(key) {
|
|
27
|
+
return key.startsWith(`${base}/`) ? key.slice(base.length + 1) : key;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
async upload(key, body, options) {
|
|
31
|
+
const result = await adapter.upload(addBase(key), body, options);
|
|
32
|
+
return { ...result, key: stripBase(result.key) };
|
|
33
|
+
},
|
|
34
|
+
async url(key, options) {
|
|
35
|
+
return adapter.url(addBase(key), options);
|
|
36
|
+
},
|
|
37
|
+
async list(options) {
|
|
38
|
+
const scopedPrefix = options?.prefix ? addBase(options.prefix) : base;
|
|
39
|
+
const result = await adapter.list({ ...options, prefix: scopedPrefix });
|
|
40
|
+
return {
|
|
41
|
+
...result,
|
|
42
|
+
items: result.items.map(item => ({ ...item, key: stripBase(item.key) })),
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
async delete(key) {
|
|
46
|
+
return adapter.delete(addBase(key));
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
17
51
|
// GitHubSchemaAdapter — reads/writes airdraft.schema.json via GitHubAdapter
|
|
18
52
|
// ---------------------------------------------------------------------------
|
|
19
53
|
class GitHubSchemaAdapter {
|
|
@@ -77,7 +111,11 @@ async function buildProjectHandler(project, opts) {
|
|
|
77
111
|
const schemaCacheKey = `${SCHEMA_CACHE_PREFIX}${project._id.toString()}`;
|
|
78
112
|
let schemaJson = null;
|
|
79
113
|
if (opts.schemaCache) {
|
|
80
|
-
|
|
114
|
+
const cached = await opts.schemaCache.get(schemaCacheKey);
|
|
115
|
+
// Guard against stale cache poisoning (e.g. "[object Object]" from a broken write)
|
|
116
|
+
if (cached && cached !== '[object Object]') {
|
|
117
|
+
schemaJson = typeof cached === 'string' ? cached : JSON.stringify(cached);
|
|
118
|
+
}
|
|
81
119
|
}
|
|
82
120
|
if (!schemaJson) {
|
|
83
121
|
const file = await adapter.read('airdraft.schema.json');
|
|
@@ -95,41 +133,63 @@ async function buildProjectHandler(project, opts) {
|
|
|
95
133
|
const projectTeamId = project.teamId;
|
|
96
134
|
const db = opts.db;
|
|
97
135
|
const authAdapter = opts.authAdapter;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
// 2. Cloud session — Bearer JWT or httpOnly cookie via CloudAuthAdapter.
|
|
110
|
-
// Called regardless of Authorization header presence so that dashboard
|
|
111
|
-
// pages using same-origin cookie auth (no Bearer header) also pass.
|
|
112
|
-
if (authAdapter) {
|
|
113
|
-
const identity = await authAdapter.verifySession(req);
|
|
114
|
-
if (!identity)
|
|
115
|
-
return null;
|
|
116
|
-
const membership = await db.memberships.findOne({
|
|
117
|
-
teamId: projectTeamId,
|
|
118
|
-
userId: identity.userId,
|
|
119
|
-
});
|
|
120
|
-
if (!membership)
|
|
121
|
-
return null;
|
|
122
|
-
// Map cloud role to CMS role
|
|
123
|
-
const roleMap = {
|
|
124
|
-
owner: 'admin',
|
|
125
|
-
admin: 'admin',
|
|
126
|
-
editor: 'publisher',
|
|
127
|
-
viewer: 'editor',
|
|
128
|
-
};
|
|
129
|
-
const role = roleMap[membership.role] ?? 'editor';
|
|
130
|
-
return { id: identity.userId, email: identity.email, name: identity.name, role };
|
|
136
|
+
// Extracted so both verify and the /auth/me handler can call it.
|
|
137
|
+
async function verifyCloudSession(req) {
|
|
138
|
+
const authHeader = req.headers.get('Authorization') ?? '';
|
|
139
|
+
// 1. ntk_* API key — hash compare against stored hash
|
|
140
|
+
if (authHeader.startsWith('Bearer ntk_')) {
|
|
141
|
+
const key = authHeader.slice(7).trim();
|
|
142
|
+
if (projectApiKeyHash && hashApiKey(key) === projectApiKeyHash) {
|
|
143
|
+
return { id: 'api-key', email: 'api@key', name: 'API Key', role: 'admin' };
|
|
131
144
|
}
|
|
132
145
|
return null;
|
|
146
|
+
}
|
|
147
|
+
// 2. Cloud session — Bearer JWT or httpOnly cookie via CloudAuthAdapter.
|
|
148
|
+
// Called regardless of Authorization header presence so that dashboard
|
|
149
|
+
// pages using same-origin cookie auth (no Bearer header) also pass.
|
|
150
|
+
if (authAdapter) {
|
|
151
|
+
const identity = await authAdapter.verifySession(req);
|
|
152
|
+
if (!identity)
|
|
153
|
+
return null;
|
|
154
|
+
const membership = await db.memberships.findOne({
|
|
155
|
+
teamId: projectTeamId,
|
|
156
|
+
userId: identity.userId,
|
|
157
|
+
});
|
|
158
|
+
if (!membership)
|
|
159
|
+
return null;
|
|
160
|
+
// Map cloud role to CMS role
|
|
161
|
+
const roleMap = {
|
|
162
|
+
owner: 'admin',
|
|
163
|
+
admin: 'admin',
|
|
164
|
+
editor: 'publisher',
|
|
165
|
+
viewer: 'editor',
|
|
166
|
+
};
|
|
167
|
+
const role = roleMap[membership.role] ?? 'editor';
|
|
168
|
+
return { id: identity.userId, email: identity.email, name: identity.name, role };
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const authProvider = {
|
|
173
|
+
verify: verifyCloudSession,
|
|
174
|
+
handlers() {
|
|
175
|
+
return [
|
|
176
|
+
{
|
|
177
|
+
// /auth/me — returns the currently authenticated user (or 401).
|
|
178
|
+
// Marked public so the auth middleware doesn't reject unauthenticated requests;
|
|
179
|
+
// the handler itself returns 401 for unauthenticated callers.
|
|
180
|
+
path: '/auth/me',
|
|
181
|
+
public: true,
|
|
182
|
+
handler: async (req) => {
|
|
183
|
+
const user = await verifyCloudSession(req);
|
|
184
|
+
if (!user) {
|
|
185
|
+
return Response.json({ error: 'Not authenticated' }, { status: 401 });
|
|
186
|
+
}
|
|
187
|
+
return Response.json({
|
|
188
|
+
user: { id: user.id, email: user.email, name: user.name, role: user.role },
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
];
|
|
133
193
|
},
|
|
134
194
|
};
|
|
135
195
|
// Build CmsConfig — include MongoDB audit persister when auditEvents collection available
|
|
@@ -141,21 +201,28 @@ async function buildProjectHandler(project, opts) {
|
|
|
141
201
|
adapter: new GitHubSchemaAdapter(adapter, 'airdraft.schema.json', () => bustEngineCache(projectId)),
|
|
142
202
|
skipAdminKeyCheck: true,
|
|
143
203
|
}));
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
...event,
|
|
150
|
-
projectId,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
// audit log failures must never crash the CMS handler
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
}));
|
|
204
|
+
// Media library — only included when the caller supplies a mediaAdapter.
|
|
205
|
+
// Wrap with scopedMediaAdapter so uploads, listing, and deletes are all
|
|
206
|
+
// isolated to this project's prefix (projects/{projectId}/).
|
|
207
|
+
if (opts.mediaAdapter) {
|
|
208
|
+
plugins.push(withMedia({ adapter: scopedMediaAdapter(opts.mediaAdapter, projectId) }));
|
|
158
209
|
}
|
|
210
|
+
// Always log audit events to console; also persist to MongoDB when available
|
|
211
|
+
const mongoAuditPersist = opts.db.auditEvents
|
|
212
|
+
? async (event) => {
|
|
213
|
+
try {
|
|
214
|
+
await opts.db.auditEvents.insertOne({ ...event, projectId });
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// audit log failures must never crash the CMS handler
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
: null;
|
|
221
|
+
plugins.push(withAuditLog({
|
|
222
|
+
persist: mongoAuditPersist
|
|
223
|
+
? compositePersister(consolePersister, mongoAuditPersist)
|
|
224
|
+
: consolePersister,
|
|
225
|
+
}));
|
|
159
226
|
const config = {
|
|
160
227
|
adapter,
|
|
161
228
|
collections: schema.collections,
|
|
@@ -174,7 +241,6 @@ async function buildProjectHandler(project, opts) {
|
|
|
174
241
|
*
|
|
175
242
|
* ```ts
|
|
176
243
|
* const { GET, POST, PUT, DELETE } = createCloudCmsHandler({ db, schemaCache, githubAppId, githubAppPrivateKey })
|
|
177
|
-
* export { GET, POST, PUT, DELETE }
|
|
178
244
|
* ```
|
|
179
245
|
*
|
|
180
246
|
* URL pattern: `cms.airdraft.space/{projectSlug}/api/cms/{collection}/{slug?}`
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|