@the-focus-ai/artifacts 1.0.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/README.md +83 -0
- package/dist/src/auth-clerk.d.ts +21 -0
- package/dist/src/auth-clerk.d.ts.map +1 -0
- package/dist/src/auth-clerk.js +97 -0
- package/dist/src/auth-clerk.js.map +1 -0
- package/dist/src/auth.d.ts +68 -0
- package/dist/src/auth.d.ts.map +1 -0
- package/dist/src/auth.js +141 -0
- package/dist/src/auth.js.map +1 -0
- package/dist/src/cli.d.ts +23 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +186 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/http.d.ts +6 -0
- package/dist/src/http.d.ts.map +1 -0
- package/dist/src/http.js +62 -0
- package/dist/src/http.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/local-config.d.ts +44 -0
- package/dist/src/local-config.d.ts.map +1 -0
- package/dist/src/local-config.js +123 -0
- package/dist/src/local-config.js.map +1 -0
- package/dist/src/login-flow.d.ts +12 -0
- package/dist/src/login-flow.d.ts.map +1 -0
- package/dist/src/login-flow.js +124 -0
- package/dist/src/login-flow.js.map +1 -0
- package/dist/src/publication.d.ts +142 -0
- package/dist/src/publication.d.ts.map +1 -0
- package/dist/src/publication.js +703 -0
- package/dist/src/publication.js.map +1 -0
- package/dist/src/storage/artifact-content.d.ts +50 -0
- package/dist/src/storage/artifact-content.d.ts.map +1 -0
- package/dist/src/storage/artifact-content.js +117 -0
- package/dist/src/storage/artifact-content.js.map +1 -0
- package/dist/src/storage/publication-metadata.d.ts +67 -0
- package/dist/src/storage/publication-metadata.d.ts.map +1 -0
- package/dist/src/storage/publication-metadata.js +201 -0
- package/dist/src/storage/publication-metadata.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAE9B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,gCAAgC,EAChC,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kCAAkC,GAEnC,MAAM,mCAAmC,CAAC;AAqB3C,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAc,EACd,eAAgC,EAAE;IAElC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACrD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,IACE,CAAC,OAAO;YACR,OAAO,KAAK,MAAM;YAClB,OAAO,KAAK,QAAQ;YACpB,OAAO,KAAK,IAAI,EAChB,CAAC;YACD,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,QAAQ,EAAE;gBAC5D,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC;gBAClC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC;gBAChC,GAAG;gBACH,SAAS;gBACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;gBACvC,oBAAoB,EAAE,OAAO,CAAC,MAAM;aACrC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CACV,GAAG,sBAAsB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC,IAAI,CAC/E,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GACX,YAAY,CAAC,cAAc;oBAC3B,CAAC,CAAC,cAAsB,EAAE,EAAE,CAC1B,cAAc,CACZ,cAAc,EACd,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EACnC,MAAM,CACP,CAAC,CAAC;gBACP,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBACrC,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GACV,YAAY,CAAC,iBAAiB;gBAC9B,CAAC,CAAC,cAAsB,EAAE,EAAE,CAC1B,gCAAgC,CAAC,cAAc,EAAE;oBAC/C,GAAG;oBACH,SAAS;iBACV,CAAC,CAAC,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,yBAAyB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBACrE,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,IAAI,CAAC,CAAC;gBACzD,OAAO,CAAC,CAAC;YACX,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,+BAA+B,CAAC;YACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CACV,wCAAwC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAChE,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,IAAI,oBAAoB,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;oBACxB,OAAO;oBACP,WAAW,EAAE,YAAY,CAAC,WAAW;iBACtC,CAAC,CAAC;gBACH,MAAM,yBAAyB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBACpE,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,IAAI,CAAC,CAAC;gBACzD,OAAO,CAAC,CAAC;YACX,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC9D,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,yBAAyB,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC;gBAC7C,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,YAAY,CAAC,UAAU,IAAI,6BAA6B,EAAE;aAClE,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC;gBACtD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,YAAY,CAAC,UAAU,IAAI,6BAA6B,EAAE;aAClE,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,CACzB,YAAY,CAAC,aAAa,IAAI,kCAAkC,EAAE,CACnE,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CACV,GAAG,qBAAqB,CAAC,YAAY,EAAE;gBACrC,aAAa,EACX,OAAO,CAAC,UAAU,CAAC;oBACnB,GAAG,CAAC,yBAAyB;oBAC7B,+BAA+B;aAClC,CAAC,IAAI,CACP,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAe;IACjC,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAEC,EACD,OAAkC;IAElC,MAAM,KAAK,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CACR,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,MAAM,CAAC,MAAM,CAClE,CAAC,CACF,IAAI,sBAAsB,CACzB,OAAO,CAAC,aAAa,EACrB,WAAW,CAAC,kBAAkB,CAC/B,EAAE,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,cAAsB,EACtB,KAAwB,EACxB,MAAyC;IAEzC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAA4B;KACrC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CACpC,UAAU,cAAc,oDAAoD,CAC7E,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAC/C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAyC;IAC3D,MAAM,CAAC,KAAK,CACV,8DAA8D;QAC5D,gEAAgE;QAChE,mKAAmK;QACnK,gDAAgD;QAChD,+DAA+D;QAC/D,sBAAsB;QACtB,sBAAsB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,KAAK,CAAC;AAEV,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import { type ServePublicationInput } from "./publication.js";
|
|
3
|
+
export declare function writeWebResponseToNodeResponse(webResponse: Response, nodeResponse: ServerResponse): Promise<void>;
|
|
4
|
+
export declare function servePublicationNodeRequest(nodeRequest: IncomingMessage, nodeResponse: ServerResponse, dependencies: Omit<ServePublicationInput, "request">): Promise<void>;
|
|
5
|
+
export declare function publicationRequestUrl(request: IncomingMessage): string;
|
|
6
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAE1B,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,QAAQ,EACrB,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,eAAe,EAC5B,YAAY,EAAE,cAAc,EAC5B,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAKtE"}
|
package/dist/src/http.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { servePublicationRequest, } from "./publication.js";
|
|
2
|
+
export async function writeWebResponseToNodeResponse(webResponse, nodeResponse) {
|
|
3
|
+
nodeResponse.statusCode = webResponse.status;
|
|
4
|
+
webResponse.headers.forEach((value, key) => {
|
|
5
|
+
nodeResponse.setHeader(key, value);
|
|
6
|
+
});
|
|
7
|
+
if (!webResponse.body) {
|
|
8
|
+
nodeResponse.end();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const body = Buffer.from(await webResponse.arrayBuffer());
|
|
12
|
+
nodeResponse.end(body);
|
|
13
|
+
}
|
|
14
|
+
export async function servePublicationNodeRequest(nodeRequest, nodeResponse, dependencies) {
|
|
15
|
+
const request = new Request(publicationRequestUrl(nodeRequest), {
|
|
16
|
+
method: nodeRequest.method,
|
|
17
|
+
});
|
|
18
|
+
const response = await servePublicationRequest({
|
|
19
|
+
request,
|
|
20
|
+
...dependencies,
|
|
21
|
+
});
|
|
22
|
+
await writeWebResponseToNodeResponse(response, nodeResponse);
|
|
23
|
+
}
|
|
24
|
+
export function publicationRequestUrl(request) {
|
|
25
|
+
const host = request.headers.host ?? "localhost";
|
|
26
|
+
const protocol = request.headers["x-forwarded-proto"] ?? "https";
|
|
27
|
+
const artifactPath = artifactPathFromVercelRequest(request);
|
|
28
|
+
return `${protocol}://${host}/a/${artifactPath}`;
|
|
29
|
+
}
|
|
30
|
+
function artifactPathFromVercelRequest(request) {
|
|
31
|
+
const queryOpaque = request.query?.opaque;
|
|
32
|
+
const queryPath = request.query?.path;
|
|
33
|
+
if (typeof queryOpaque === "string") {
|
|
34
|
+
return [queryOpaque, queryPathFromVercelCatchAll(queryPath)]
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.join("/");
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(queryOpaque) && typeof queryOpaque[0] === "string") {
|
|
39
|
+
return [queryOpaque[0], queryPathFromVercelCatchAll(queryPath)]
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.join("/");
|
|
42
|
+
}
|
|
43
|
+
const pathname = new URL(request.url ?? "/", "https://localhost").pathname;
|
|
44
|
+
const apiPrefix = "/api/a/";
|
|
45
|
+
if (pathname.startsWith(apiPrefix))
|
|
46
|
+
return pathname.slice(apiPrefix.length);
|
|
47
|
+
const publicPrefix = "/a/";
|
|
48
|
+
if (pathname.startsWith(publicPrefix))
|
|
49
|
+
return pathname.slice(publicPrefix.length);
|
|
50
|
+
return pathname.split("/").filter(Boolean).at(-1) ?? "";
|
|
51
|
+
}
|
|
52
|
+
function queryPathFromVercelCatchAll(path) {
|
|
53
|
+
if (Array.isArray(path))
|
|
54
|
+
return path.filter(isString).join("/");
|
|
55
|
+
if (typeof path === "string")
|
|
56
|
+
return path;
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
function isString(value) {
|
|
60
|
+
return typeof value === "string";
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./auth.js";
|
|
2
|
+
export * from "./local-config.js";
|
|
3
|
+
export * from "./publication.js";
|
|
4
|
+
export * from "./local-config.js";
|
|
5
|
+
export * from "./storage/artifact-content.js";
|
|
6
|
+
export * from "./storage/publication-metadata.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./auth.js";
|
|
2
|
+
export * from "./local-config.js";
|
|
3
|
+
export * from "./publication.js";
|
|
4
|
+
export * from "./local-config.js";
|
|
5
|
+
export * from "./storage/artifact-content.js";
|
|
6
|
+
export * from "./storage/publication-metadata.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface LocalPublisherConfig {
|
|
2
|
+
token: string;
|
|
3
|
+
}
|
|
4
|
+
export interface LocalPublicationState {
|
|
5
|
+
localSourcePath: string;
|
|
6
|
+
opaqueId: string;
|
|
7
|
+
publicationUrl: string;
|
|
8
|
+
revisionWindowExpiresAt: Date;
|
|
9
|
+
}
|
|
10
|
+
export interface PublicationStateStore {
|
|
11
|
+
get(localSourcePath: string): Promise<LocalPublicationState | null>;
|
|
12
|
+
set(state: LocalPublicationState): Promise<void>;
|
|
13
|
+
clear(localSourcePath: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface PublisherTokenLookupResult {
|
|
16
|
+
token: string | null;
|
|
17
|
+
source: "environment" | "local-config" | "missing";
|
|
18
|
+
}
|
|
19
|
+
export declare function defaultConfigDir(env?: NodeJS.ProcessEnv): string;
|
|
20
|
+
export declare function configFilePath(configDir?: string): string;
|
|
21
|
+
export declare function stateFilePath(configDir?: string): string;
|
|
22
|
+
export declare function readLocalPublisherConfig(configDir?: string): Promise<LocalPublisherConfig | null>;
|
|
23
|
+
export declare function writeLocalPublisherConfig(config: LocalPublisherConfig, configDir?: string): Promise<void>;
|
|
24
|
+
export declare function clearLocalPublisherConfig(configDir?: string): Promise<void>;
|
|
25
|
+
export declare function resolvePublisherToken(input?: {
|
|
26
|
+
env?: NodeJS.ProcessEnv;
|
|
27
|
+
configDir?: string;
|
|
28
|
+
}): Promise<PublisherTokenLookupResult>;
|
|
29
|
+
export declare class InMemoryPublicationStateStore implements PublicationStateStore {
|
|
30
|
+
private readonly rows;
|
|
31
|
+
get(localSourcePath: string): Promise<LocalPublicationState | null>;
|
|
32
|
+
set(state: LocalPublicationState): Promise<void>;
|
|
33
|
+
clear(localSourcePath: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare class FilePublicationStateStore implements PublicationStateStore {
|
|
36
|
+
private readonly configDir;
|
|
37
|
+
constructor(configDir?: string);
|
|
38
|
+
get(localSourcePath: string): Promise<LocalPublicationState | null>;
|
|
39
|
+
set(state: LocalPublicationState): Promise<void>;
|
|
40
|
+
clear(localSourcePath: string): Promise<void>;
|
|
41
|
+
private readStateFile;
|
|
42
|
+
private writeStateFile;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=local-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config.d.ts","sourceRoot":"","sources":["../../src/local-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IACpE,GAAG,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,CAAC;CACpD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAO7E;AAED,wBAAgB,cAAc,CAAC,SAAS,SAAqB,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,SAAS,SAAqB,GAAG,MAAM,CAEpE;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,SAAqB,GAC7B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAStC;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,oBAAoB,EAC5B,SAAS,SAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,SAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,qBAAqB,CACzC,KAAK,GAAE;IACL,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC,0BAA0B,CAAC,CAUrC;AAED,qBAAa,6BAA8B,YAAW,qBAAqB;IACzE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4C;IAE3D,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAKnE,GAAG,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpD;AAED,qBAAa,yBAA0B,YAAW,qBAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,SAAqB;IAErD,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAMnE,GAAG,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAMrC,aAAa;YAYb,cAAc;CAU7B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
export function defaultConfigDir(env = process.env) {
|
|
5
|
+
if (env.THEFOCUS_ARTIFACTS_CONFIG_DIR) {
|
|
6
|
+
return env.THEFOCUS_ARTIFACTS_CONFIG_DIR;
|
|
7
|
+
}
|
|
8
|
+
if (env.XDG_CONFIG_HOME)
|
|
9
|
+
return join(env.XDG_CONFIG_HOME, "thefocus-artifacts");
|
|
10
|
+
return join(env.HOME ?? homedir(), ".config", "thefocus-artifacts");
|
|
11
|
+
}
|
|
12
|
+
export function configFilePath(configDir = defaultConfigDir()) {
|
|
13
|
+
return join(configDir, "config.json");
|
|
14
|
+
}
|
|
15
|
+
export function stateFilePath(configDir = defaultConfigDir()) {
|
|
16
|
+
return join(configDir, "state.json");
|
|
17
|
+
}
|
|
18
|
+
export async function readLocalPublisherConfig(configDir = defaultConfigDir()) {
|
|
19
|
+
try {
|
|
20
|
+
const raw = await readFile(configFilePath(configDir), "utf8");
|
|
21
|
+
const parsed = JSON.parse(raw);
|
|
22
|
+
return typeof parsed.token === "string" ? { token: parsed.token } : null;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error.code === "ENOENT")
|
|
26
|
+
return null;
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export async function writeLocalPublisherConfig(config, configDir = defaultConfigDir()) {
|
|
31
|
+
const filePath = configFilePath(configDir);
|
|
32
|
+
await mkdir(dirname(filePath), { recursive: true, mode: 0o700 });
|
|
33
|
+
await writeFile(`${filePath}.tmp`, `${JSON.stringify(config, null, 2)}\n`, {
|
|
34
|
+
mode: 0o600,
|
|
35
|
+
});
|
|
36
|
+
await rename(`${filePath}.tmp`, filePath);
|
|
37
|
+
}
|
|
38
|
+
export async function clearLocalPublisherConfig(configDir = defaultConfigDir()) {
|
|
39
|
+
await rm(configFilePath(configDir), { force: true });
|
|
40
|
+
}
|
|
41
|
+
export async function resolvePublisherToken(input = {}) {
|
|
42
|
+
const env = input.env ?? process.env;
|
|
43
|
+
if (env.THEFOCUS_ARTIFACTS_TOKEN) {
|
|
44
|
+
return { token: env.THEFOCUS_ARTIFACTS_TOKEN, source: "environment" };
|
|
45
|
+
}
|
|
46
|
+
const config = await readLocalPublisherConfig(input.configDir ?? defaultConfigDir(env));
|
|
47
|
+
if (config?.token)
|
|
48
|
+
return { token: config.token, source: "local-config" };
|
|
49
|
+
return { token: null, source: "missing" };
|
|
50
|
+
}
|
|
51
|
+
export class InMemoryPublicationStateStore {
|
|
52
|
+
rows = new Map();
|
|
53
|
+
async get(localSourcePath) {
|
|
54
|
+
const row = this.rows.get(localSourcePath);
|
|
55
|
+
return row ? cloneLocalPublicationState(row) : null;
|
|
56
|
+
}
|
|
57
|
+
async set(state) {
|
|
58
|
+
this.rows.set(state.localSourcePath, cloneLocalPublicationState(state));
|
|
59
|
+
}
|
|
60
|
+
async clear(localSourcePath) {
|
|
61
|
+
this.rows.delete(localSourcePath);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class FilePublicationStateStore {
|
|
65
|
+
configDir;
|
|
66
|
+
constructor(configDir = defaultConfigDir()) {
|
|
67
|
+
this.configDir = configDir;
|
|
68
|
+
}
|
|
69
|
+
async get(localSourcePath) {
|
|
70
|
+
const state = await this.readStateFile();
|
|
71
|
+
const row = state[localSourcePath];
|
|
72
|
+
return row ? parseLocalPublicationState(row) : null;
|
|
73
|
+
}
|
|
74
|
+
async set(state) {
|
|
75
|
+
const rows = await this.readStateFile();
|
|
76
|
+
rows[state.localSourcePath] = {
|
|
77
|
+
localSourcePath: state.localSourcePath,
|
|
78
|
+
opaqueId: state.opaqueId,
|
|
79
|
+
publicationUrl: state.publicationUrl,
|
|
80
|
+
revisionWindowExpiresAt: state.revisionWindowExpiresAt.toISOString(),
|
|
81
|
+
};
|
|
82
|
+
await this.writeStateFile(rows);
|
|
83
|
+
}
|
|
84
|
+
async clear(localSourcePath) {
|
|
85
|
+
const rows = await this.readStateFile();
|
|
86
|
+
delete rows[localSourcePath];
|
|
87
|
+
await this.writeStateFile(rows);
|
|
88
|
+
}
|
|
89
|
+
async readStateFile() {
|
|
90
|
+
try {
|
|
91
|
+
const raw = await readFile(stateFilePath(this.configDir), "utf8");
|
|
92
|
+
return JSON.parse(raw);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.code === "ENOENT")
|
|
96
|
+
return {};
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async writeStateFile(rows) {
|
|
101
|
+
const filePath = stateFilePath(this.configDir);
|
|
102
|
+
await mkdir(dirname(filePath), { recursive: true, mode: 0o700 });
|
|
103
|
+
await writeFile(`${filePath}.tmp`, `${JSON.stringify(rows, null, 2)}\n`, {
|
|
104
|
+
mode: 0o600,
|
|
105
|
+
});
|
|
106
|
+
await rename(`${filePath}.tmp`, filePath);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function parseLocalPublicationState(state) {
|
|
110
|
+
return {
|
|
111
|
+
localSourcePath: state.localSourcePath,
|
|
112
|
+
opaqueId: state.opaqueId,
|
|
113
|
+
publicationUrl: state.publicationUrl,
|
|
114
|
+
revisionWindowExpiresAt: new Date(state.revisionWindowExpiresAt),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function cloneLocalPublicationState(state) {
|
|
118
|
+
return {
|
|
119
|
+
...state,
|
|
120
|
+
revisionWindowExpiresAt: new Date(state.revisionWindowExpiresAt),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=local-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-config.js","sourceRoot":"","sources":["../../src/local-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface BrowserLoginResult {
|
|
2
|
+
token: string;
|
|
3
|
+
}
|
|
4
|
+
export interface BrowserLoginError {
|
|
5
|
+
error: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LoginCallbackDependencies {
|
|
8
|
+
openBrowser?: (url: string) => Promise<void>;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loginWithBrowserFlow(deps?: LoginCallbackDependencies): Promise<BrowserLoginResult>;
|
|
12
|
+
//# sourceMappingURL=login-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-flow.d.ts","sourceRoot":"","sources":["../../src/login-flow.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,kBAAkB,CAAC,CA4D7B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
export async function loginWithBrowserFlow(deps = {}) {
|
|
3
|
+
const baseUrl = deps.baseUrl ?? "https://artifacts.thefocus.ai";
|
|
4
|
+
// Find a free port
|
|
5
|
+
const port = await findFreePort();
|
|
6
|
+
// Build the login URL
|
|
7
|
+
const loginUrl = new URL("/login", baseUrl);
|
|
8
|
+
loginUrl.searchParams.set("port", String(port));
|
|
9
|
+
const result = await new Promise((resolve, reject) => {
|
|
10
|
+
const server = createServer((req, res) => {
|
|
11
|
+
const url = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
12
|
+
if (req.method === "GET" && url.pathname === "/callback") {
|
|
13
|
+
const token = url.searchParams.get("token");
|
|
14
|
+
const error = url.searchParams.get("error");
|
|
15
|
+
if (token) {
|
|
16
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
17
|
+
res.end(callbackSuccessHtml());
|
|
18
|
+
server.close();
|
|
19
|
+
resolve({ token });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (error) {
|
|
23
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
24
|
+
res.end(callbackErrorHtml(error));
|
|
25
|
+
server.close();
|
|
26
|
+
reject(new Error(error));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
30
|
+
res.end("Bad request");
|
|
31
|
+
server.close();
|
|
32
|
+
reject(new Error("No token or error received from login callback"));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
36
|
+
res.end("Not found");
|
|
37
|
+
});
|
|
38
|
+
server.on("error", (err) => {
|
|
39
|
+
reject(new Error(`Login callback server failed: ${err.message}`));
|
|
40
|
+
});
|
|
41
|
+
server.listen(port, "127.0.0.1", () => {
|
|
42
|
+
// Open the browser
|
|
43
|
+
const openFn = deps.openBrowser ?? openDefaultBrowser;
|
|
44
|
+
openFn(loginUrl.toString()).catch(() => {
|
|
45
|
+
// If browser can't be opened, we still wait for the user to open the URL
|
|
46
|
+
// The user will see the URL in the CLI output
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
async function findFreePort() {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const server = createServer();
|
|
55
|
+
server.on("error", reject);
|
|
56
|
+
server.listen(0, "127.0.0.1", () => {
|
|
57
|
+
const port = server.address().port;
|
|
58
|
+
server.close(() => resolve(port));
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async function openDefaultBrowser(url) {
|
|
63
|
+
const { exec } = await import("node:child_process");
|
|
64
|
+
const command = process.platform === "darwin"
|
|
65
|
+
? `open "${url}"`
|
|
66
|
+
: process.platform === "win32"
|
|
67
|
+
? `start "" "${url}"`
|
|
68
|
+
: `xdg-open "${url}"`;
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
exec(command, (error) => {
|
|
71
|
+
if (error) {
|
|
72
|
+
// Fall back to printing the URL on failure
|
|
73
|
+
resolve();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
resolve();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function callbackSuccessHtml() {
|
|
81
|
+
return `<!doctype html>
|
|
82
|
+
<html lang="en">
|
|
83
|
+
<head><meta charset="utf-8"><title>Login Successful — Artifacts</title>
|
|
84
|
+
<style>
|
|
85
|
+
body { font-family: system-ui, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; background: #f5f5f5; }
|
|
86
|
+
.card { background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); text-align: center; max-width: 400px; }
|
|
87
|
+
h1 { color: #16a34a; margin: 0 0 0.5rem; }
|
|
88
|
+
p { color: #666; }
|
|
89
|
+
</style></head>
|
|
90
|
+
<body>
|
|
91
|
+
<div class="card">
|
|
92
|
+
<h1>✓ Login Successful</h1>
|
|
93
|
+
<p>Your Publisher Token has been stored. You can close this window.</p>
|
|
94
|
+
</div>
|
|
95
|
+
</body>
|
|
96
|
+
</html>`;
|
|
97
|
+
}
|
|
98
|
+
function callbackErrorHtml(error) {
|
|
99
|
+
return `<!doctype html>
|
|
100
|
+
<html lang="en">
|
|
101
|
+
<head><meta charset="utf-8"><title>Login Failed — Artifacts</title>
|
|
102
|
+
<style>
|
|
103
|
+
body { font-family: system-ui, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; background: #f5f5f5; }
|
|
104
|
+
.card { background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); text-align: center; max-width: 400px; }
|
|
105
|
+
h1 { color: #dc2626; margin: 0 0 0.5rem; }
|
|
106
|
+
p { color: #666; }
|
|
107
|
+
</style></head>
|
|
108
|
+
<body>
|
|
109
|
+
<div class="card">
|
|
110
|
+
<h1>✗ Login Failed</h1>
|
|
111
|
+
<p>${escapeHtml(error)}</p>
|
|
112
|
+
</div>
|
|
113
|
+
</body>
|
|
114
|
+
</html>`;
|
|
115
|
+
}
|
|
116
|
+
function escapeHtml(text) {
|
|
117
|
+
return text
|
|
118
|
+
.replaceAll("&", "&")
|
|
119
|
+
.replaceAll("<", "<")
|
|
120
|
+
.replaceAll(">", ">")
|
|
121
|
+
.replaceAll('"', """)
|
|
122
|
+
.replaceAll("'", "'");
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=login-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-flow.js","sourceRoot":"","sources":["../../src/login-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { type PublisherTokenStore } from "./auth.js";
|
|
2
|
+
import { type PublicationStateStore } from "./local-config.js";
|
|
3
|
+
import { type ArtifactContentStore } from "./storage/artifact-content.js";
|
|
4
|
+
import { type PublicationMetadataStore } from "./storage/publication-metadata.js";
|
|
5
|
+
export declare const singleFileEntryArtifactPath = "index.html";
|
|
6
|
+
export declare const defaultPublicBaseUrl = "https://artifacts.thefocus.ai";
|
|
7
|
+
export interface PublishSingleFileArtifactInput {
|
|
8
|
+
filePath: string;
|
|
9
|
+
publisherEmail: string;
|
|
10
|
+
publicBaseUrl: string;
|
|
11
|
+
metadataStore: PublicationMetadataStore;
|
|
12
|
+
contentStore: ArtifactContentStore;
|
|
13
|
+
opaqueId?: string;
|
|
14
|
+
manifestRef?: string;
|
|
15
|
+
now?: () => Date;
|
|
16
|
+
}
|
|
17
|
+
export interface PublishSingleFileArtifactResult {
|
|
18
|
+
opaqueId: string;
|
|
19
|
+
publicationUrlPath: string;
|
|
20
|
+
publicationUrl: string;
|
|
21
|
+
manifestRef: string;
|
|
22
|
+
artifactLocator: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function publishSingleFileArtifact(input: PublishSingleFileArtifactInput): Promise<PublishSingleFileArtifactResult>;
|
|
25
|
+
export interface PublishDirectoryArtifactInput {
|
|
26
|
+
directoryPath: string;
|
|
27
|
+
entryPage?: string;
|
|
28
|
+
publisherEmail: string;
|
|
29
|
+
publicBaseUrl: string;
|
|
30
|
+
metadataStore: PublicationMetadataStore;
|
|
31
|
+
contentStore: ArtifactContentStore;
|
|
32
|
+
opaqueId?: string;
|
|
33
|
+
manifestRef?: string;
|
|
34
|
+
now?: () => Date;
|
|
35
|
+
}
|
|
36
|
+
export interface PublishDirectoryArtifactResult {
|
|
37
|
+
opaqueId: string;
|
|
38
|
+
publicationUrlPath: string;
|
|
39
|
+
publicationUrl: string;
|
|
40
|
+
manifestRef: string;
|
|
41
|
+
manifestLocator: string;
|
|
42
|
+
entryArtifactPath: string;
|
|
43
|
+
artifactPaths: string[];
|
|
44
|
+
excludedArtifactPaths: string[];
|
|
45
|
+
}
|
|
46
|
+
export type PublishArtifactDecision = "created" | "updated" | "created-after-expiry" | "forced-new" | "explicit-update" | "created-after-removed-local-state";
|
|
47
|
+
export interface PublishArtifactInput {
|
|
48
|
+
sourcePath: string;
|
|
49
|
+
publisherEmail: string;
|
|
50
|
+
publicBaseUrl: string;
|
|
51
|
+
metadataStore: PublicationMetadataStore;
|
|
52
|
+
contentStore: ArtifactContentStore;
|
|
53
|
+
stateStore: PublicationStateStore;
|
|
54
|
+
entryPage?: string;
|
|
55
|
+
forceNew?: boolean;
|
|
56
|
+
updatePublicationUrl?: string;
|
|
57
|
+
opaqueIdFactory?: () => string;
|
|
58
|
+
manifestRefFactory?: (body: Buffer) => string;
|
|
59
|
+
now?: () => Date;
|
|
60
|
+
}
|
|
61
|
+
export interface PublishArtifactResult {
|
|
62
|
+
opaqueId: string;
|
|
63
|
+
publicationUrlPath: string;
|
|
64
|
+
publicationUrl: string;
|
|
65
|
+
manifestRef: string;
|
|
66
|
+
activeArtifactLocator: string;
|
|
67
|
+
revisionWindowExpiresAt: Date;
|
|
68
|
+
decision: PublishArtifactDecision;
|
|
69
|
+
artifactPaths: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface RemovePublicationInput {
|
|
72
|
+
publicationUrl: string;
|
|
73
|
+
publisherToken: string;
|
|
74
|
+
metadataStore: PublicationMetadataStore;
|
|
75
|
+
contentStore: ArtifactContentStore;
|
|
76
|
+
tokenStore: PublisherTokenStore;
|
|
77
|
+
stateStore: PublicationStateStore;
|
|
78
|
+
}
|
|
79
|
+
export interface RemovePublicationResult {
|
|
80
|
+
opaqueId: string;
|
|
81
|
+
publicationUrl: string;
|
|
82
|
+
status: "removed" | "not-found";
|
|
83
|
+
deletedLocators: string[];
|
|
84
|
+
clearedLocalSourcePath: string | null;
|
|
85
|
+
}
|
|
86
|
+
export declare function publishDirectoryArtifact(input: PublishDirectoryArtifactInput): Promise<PublishDirectoryArtifactResult>;
|
|
87
|
+
export declare function publishArtifact(input: PublishArtifactInput): Promise<PublishArtifactResult>;
|
|
88
|
+
export interface ServePublicationInput {
|
|
89
|
+
request: Request;
|
|
90
|
+
metadataStore: PublicationMetadataStore;
|
|
91
|
+
contentStore: ArtifactContentStore;
|
|
92
|
+
}
|
|
93
|
+
export declare function servePublicationRequest({ request, metadataStore, contentStore, }: ServePublicationInput): Promise<Response>;
|
|
94
|
+
export declare function publicationSafetyHeaders(headers?: HeadersInit): Headers;
|
|
95
|
+
export declare function opaqueIdFromPublicationUrl(url: string): string | null;
|
|
96
|
+
export declare function publicationRouteFromUrl(url: string): {
|
|
97
|
+
opaqueId: string;
|
|
98
|
+
artifactPath: string;
|
|
99
|
+
} | null;
|
|
100
|
+
export declare function absolutePublicationUrl(publicBaseUrl: string, publicationUrlPath: string): string;
|
|
101
|
+
export declare function createOpaqueId(): string;
|
|
102
|
+
export declare function publishSingleFileArtifactWithPublisherToken(input: {
|
|
103
|
+
filePath: string;
|
|
104
|
+
publisherToken: string;
|
|
105
|
+
publicBaseUrl: string;
|
|
106
|
+
metadataStore: PublicationMetadataStore;
|
|
107
|
+
contentStore: ArtifactContentStore;
|
|
108
|
+
tokenStore: PublisherTokenStore;
|
|
109
|
+
}): Promise<PublishSingleFileArtifactResult>;
|
|
110
|
+
export declare function publishArtifactFromEnvironment(sourcePath: string, options?: {
|
|
111
|
+
publicBaseUrl?: string;
|
|
112
|
+
entryPage?: string;
|
|
113
|
+
env?: NodeJS.ProcessEnv;
|
|
114
|
+
configDir?: string;
|
|
115
|
+
forceNew?: boolean;
|
|
116
|
+
updatePublicationUrl?: string;
|
|
117
|
+
}): Promise<PublishArtifactResult>;
|
|
118
|
+
export declare function publishSingleFileArtifactFromEnvironment(filePath: string, options?: {
|
|
119
|
+
publicBaseUrl?: string;
|
|
120
|
+
env?: NodeJS.ProcessEnv;
|
|
121
|
+
}): Promise<PublishSingleFileArtifactResult>;
|
|
122
|
+
export declare function removePublication(input: RemovePublicationInput): Promise<RemovePublicationResult>;
|
|
123
|
+
export declare function removePublicationFromEnvironment(publicationUrl: string, options?: {
|
|
124
|
+
env?: NodeJS.ProcessEnv;
|
|
125
|
+
configDir?: string;
|
|
126
|
+
}): Promise<RemovePublicationResult>;
|
|
127
|
+
export declare function removePublicationSummary(result: Pick<RemovePublicationResult, "publicationUrl" | "status">): string;
|
|
128
|
+
export declare function singleFilePublishSummary(result: Pick<PublishSingleFileArtifactResult, "publicationUrlPath" | "publicationUrl"> & {
|
|
129
|
+
revisionWindowExpiresAt?: Date;
|
|
130
|
+
decision?: PublishArtifactDecision;
|
|
131
|
+
excludedArtifactPaths?: string[];
|
|
132
|
+
}, options?: {
|
|
133
|
+
verbose?: boolean;
|
|
134
|
+
}): string;
|
|
135
|
+
export declare function publishArtifactSummary(result: Pick<PublishSingleFileArtifactResult, "publicationUrlPath" | "publicationUrl"> & {
|
|
136
|
+
revisionWindowExpiresAt?: Date;
|
|
137
|
+
decision?: PublishArtifactDecision;
|
|
138
|
+
excludedArtifactPaths?: string[];
|
|
139
|
+
}, options?: {
|
|
140
|
+
verbose?: boolean;
|
|
141
|
+
}): string;
|
|
142
|
+
//# sourceMappingURL=publication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication.d.ts","sourceRoot":"","sources":["../../src/publication.ts"],"names":[],"mappings":"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"}
|