@percher/core 0.4.14 → 0.4.16
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/dist/commands/data-oauth.d.ts +30 -0
- package/dist/commands/data-oauth.d.ts.map +1 -0
- package/dist/commands/data-oauth.js +55 -0
- package/dist/commands/data-oauth.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -32
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-from-repo.d.ts +22 -0
- package/dist/commands/publish-from-repo.d.ts.map +1 -0
- package/dist/commands/publish-from-repo.js +236 -0
- package/dist/commands/publish-from-repo.js.map +1 -0
- package/dist/commands/publish-inline.d.ts +4 -0
- package/dist/commands/publish-inline.d.ts.map +1 -1
- package/dist/commands/publish-inline.js +115 -43
- package/dist/commands/publish-inline.js.map +1 -1
- package/dist/detect.d.ts +19 -0
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +128 -39
- package/dist/detect.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/templates.d.ts +6 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +20 -0
- package/dist/templates.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Context } from "../context.js";
|
|
3
|
+
export declare const dataOauthInputSchema: z.ZodObject<{
|
|
4
|
+
app: z.ZodOptional<z.ZodString>;
|
|
5
|
+
provider: z.ZodDefault<z.ZodString>;
|
|
6
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
7
|
+
clientSecret: z.ZodOptional<z.ZodString>;
|
|
8
|
+
remove: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
json: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type DataOauthInput = z.infer<typeof dataOauthInputSchema>;
|
|
12
|
+
export interface DataOauthResult {
|
|
13
|
+
action: "set" | "removed" | "status";
|
|
14
|
+
provider: string;
|
|
15
|
+
/** Providers currently configured (status/after set) — names + client ids. */
|
|
16
|
+
providers?: Array<{
|
|
17
|
+
provider: string;
|
|
18
|
+
clientId: string;
|
|
19
|
+
}>;
|
|
20
|
+
redirectUri?: string;
|
|
21
|
+
note?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Configure (Tier A: bring-your-own client) / rotate / remove / inspect an
|
|
25
|
+
* OAuth2 provider on the app's capsule PocketBase. Sets the secret into PB +
|
|
26
|
+
* platform-only encrypted storage and prints the redirect URI the user must
|
|
27
|
+
* paste into the provider console — Tier A is NOT self-sufficient.
|
|
28
|
+
*/
|
|
29
|
+
export declare function dataOauth(ctx: Context, input?: DataOauthInput): Promise<DataOauthResult>;
|
|
30
|
+
//# sourceMappingURL=data-oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-oauth.d.ts","sourceRoot":"","sources":["../../src/commands/data-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,oBAAoB;;;;;;;iBAS/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,EACZ,KAAK,GAAE,cAAuC,GAC7C,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readPercherTomlAppName } from "../app-name.js";
|
|
3
|
+
import { PercherCoreError } from "../errors.js";
|
|
4
|
+
export const dataOauthInputSchema = z.object({
|
|
5
|
+
app: z.string().optional(),
|
|
6
|
+
/** Provider name; Google is the only Tier-A provider today. */
|
|
7
|
+
provider: z.string().default("google"),
|
|
8
|
+
clientId: z.string().optional(),
|
|
9
|
+
clientSecret: z.string().optional(),
|
|
10
|
+
/** Remove the provider instead of setting it. */
|
|
11
|
+
remove: z.boolean().optional(),
|
|
12
|
+
json: z.boolean().optional(),
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Configure (Tier A: bring-your-own client) / rotate / remove / inspect an
|
|
16
|
+
* OAuth2 provider on the app's capsule PocketBase. Sets the secret into PB +
|
|
17
|
+
* platform-only encrypted storage and prints the redirect URI the user must
|
|
18
|
+
* paste into the provider console — Tier A is NOT self-sufficient.
|
|
19
|
+
*/
|
|
20
|
+
export async function dataOauth(ctx, input = { provider: "google" }) {
|
|
21
|
+
const name = input.app ?? readPercherTomlAppName(ctx.cwd);
|
|
22
|
+
if (!name) {
|
|
23
|
+
throw new PercherCoreError("No app specified and no percher.toml found", {
|
|
24
|
+
code: "data.no-app",
|
|
25
|
+
hint: "Pass an app name or run from a directory with percher.toml.",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const provider = input.provider || "google";
|
|
29
|
+
if (input.remove) {
|
|
30
|
+
await ctx.client.data.removeOAuthProvider(name, provider);
|
|
31
|
+
return { action: "removed", provider };
|
|
32
|
+
}
|
|
33
|
+
if (input.clientId && input.clientSecret) {
|
|
34
|
+
const res = await ctx.client.data.setOAuthProvider(name, {
|
|
35
|
+
provider,
|
|
36
|
+
clientId: input.clientId,
|
|
37
|
+
clientSecret: input.clientSecret,
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
action: "set",
|
|
41
|
+
provider: res.provider,
|
|
42
|
+
redirectUri: res.redirectUri,
|
|
43
|
+
note: res.note,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// No credentials + not removing → show status.
|
|
47
|
+
const status = await ctx.client.data.getOAuthStatus(name);
|
|
48
|
+
return {
|
|
49
|
+
action: "status",
|
|
50
|
+
provider,
|
|
51
|
+
providers: status.providers,
|
|
52
|
+
redirectUri: status.redirectUri,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data-oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-oauth.js","sourceRoot":"","sources":["../../src/commands/data-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,iDAAiD;IACjD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAYH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAY,EACZ,QAAwB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAE9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,EAAE;YACvE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,6DAA6D;SACpE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAE5C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACvD,QAAQ;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;QACH,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAa,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAa,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAEL,KAAK,iBAAiB,EAGvB,MAAM,WAAW,CAAC;AAInB;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU1D;AAaD,eAAO,MAAM,eAAe;;;;;;;;;;iBAU1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAQD,wBAAsB,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAiGnF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { basename, join } from "node:path";
|
|
3
3
|
import { generateName, serialize } from "@percher/toml";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import { detectFramework, refineBunRuntime } from "../detect.js";
|
|
5
|
+
import { configFromDetection, detectFramework, refineBunRuntime, } from "../detect.js";
|
|
6
6
|
import { PercherCoreError } from "../errors.js";
|
|
7
7
|
import { renderStaticFrameworkCaddyfile, renderStaticFrameworkDockerfile } from "../static-docker.js";
|
|
8
8
|
/**
|
|
@@ -38,21 +38,6 @@ export function isSuspiciousAutoName(name) {
|
|
|
38
38
|
function detectInteractive() {
|
|
39
39
|
return process.stdin?.isTTY === true && process.stdout?.isTTY === true;
|
|
40
40
|
}
|
|
41
|
-
function buildDataConfig(mode) {
|
|
42
|
-
if (mode === "convex") {
|
|
43
|
-
return {
|
|
44
|
-
mode: "convex",
|
|
45
|
-
convex: { deployment_url: "https://your-project.convex.cloud" },
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (mode === "supabase") {
|
|
49
|
-
return {
|
|
50
|
-
mode: "supabase",
|
|
51
|
-
supabase: { url: "https://your-project.supabase.co" },
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return { mode: mode };
|
|
55
|
-
}
|
|
56
41
|
export const initInputSchema = z.object({
|
|
57
42
|
force: z.boolean().optional(),
|
|
58
43
|
name: z.string().optional(),
|
|
@@ -111,22 +96,7 @@ export async function init(ctx, input = {}) {
|
|
|
111
96
|
name = suggestion;
|
|
112
97
|
}
|
|
113
98
|
}
|
|
114
|
-
const config =
|
|
115
|
-
app: {
|
|
116
|
-
name,
|
|
117
|
-
runtime: detected?.runtime ?? "node",
|
|
118
|
-
...(detected?.framework
|
|
119
|
-
? { framework: detected.framework }
|
|
120
|
-
: {}),
|
|
121
|
-
},
|
|
122
|
-
...(detected?.build ? { build: detected.build } : {}),
|
|
123
|
-
...(detected?.web ? { web: detected.web } : {}),
|
|
124
|
-
...(detected?.data || input.dataMode
|
|
125
|
-
? {
|
|
126
|
-
data: buildDataConfig(input.dataMode ?? detected?.data?.mode ?? "none"),
|
|
127
|
-
}
|
|
128
|
-
: {}),
|
|
129
|
-
};
|
|
99
|
+
const config = configFromDetection(name, detected, input.dataMode);
|
|
130
100
|
const envVars = scanEnvVars(ctx.cwd);
|
|
131
101
|
if (Object.keys(envVars).length > 0) {
|
|
132
102
|
config.env = envVars;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Context } from "../context.js";
|
|
3
|
+
import type { PublishResult } from "./publish.js";
|
|
4
|
+
export declare const publishFromRepoInputSchema: z.ZodObject<{
|
|
5
|
+
url: z.ZodString;
|
|
6
|
+
name: z.ZodOptional<z.ZodString>;
|
|
7
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
8
|
+
note: z.ZodOptional<z.ZodString>;
|
|
9
|
+
waitForLive: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type PublishFromRepoInput = z.infer<typeof publishFromRepoInputSchema>;
|
|
12
|
+
/**
|
|
13
|
+
* Hosted "publish from a public repo URL" — one-shot clone + deploy of a PUBLIC
|
|
14
|
+
* repo, the URL counterpart to `publishInline`. The server clones the tracked
|
|
15
|
+
* branch HEAD once, reads the repo's percher.toml for the app name + runtime,
|
|
16
|
+
* creates-or-gets the app, and deploys — no persistent connection/webhook is
|
|
17
|
+
* set up (that stays the owner-only `import/*` path). Returns the same
|
|
18
|
+
* PublishResult shape + recovery contract as `publishInline` / `deployRepo`, so
|
|
19
|
+
* the `wait_deploy` chain works identically.
|
|
20
|
+
*/
|
|
21
|
+
export declare function publishFromRepo(ctx: Context, input: PublishFromRepoInput): Promise<PublishResult>;
|
|
22
|
+
//# sourceMappingURL=publish-from-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-from-repo.d.ts","sourceRoot":"","sources":["../../src/commands/publish-from-repo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,WAAW,CAAC;AAG7D,eAAO,MAAM,0BAA0B;;;;;;iBAmBrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAgMxB"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { PercherApiError } from "@percher/client";
|
|
2
|
+
import { TIMEOUTS } from "@percher/shared/timeouts";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { pollDeployment } from "../poll-deployment.js";
|
|
5
|
+
import { RECOVERY_NEEDS_LOGIN, RECOVERY_NONE, recoveryAsk, recoveryWait } from "../recovery.js";
|
|
6
|
+
import { classifyDeploymentFailure } from "./publish-failure.js";
|
|
7
|
+
export const publishFromRepoInputSchema = z.object({
|
|
8
|
+
url: z
|
|
9
|
+
.string()
|
|
10
|
+
.min(1)
|
|
11
|
+
.describe("Public https git repo URL to clone and deploy (one-shot — no webhook is created)."),
|
|
12
|
+
name: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe("App name. Overrides the repo's percher.toml [app].name; required if the repo omits it."),
|
|
16
|
+
branch: z.string().optional().describe("Branch to deploy. Defaults to main."),
|
|
17
|
+
note: z.string().optional().describe("Optional note recorded against the deploy."),
|
|
18
|
+
waitForLive: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("If false (default on the hosted connector), returns once the deploy is queued — resume with percher_wait_for_deploy. If true, block until live or failed."),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Hosted "publish from a public repo URL" — one-shot clone + deploy of a PUBLIC
|
|
25
|
+
* repo, the URL counterpart to `publishInline`. The server clones the tracked
|
|
26
|
+
* branch HEAD once, reads the repo's percher.toml for the app name + runtime,
|
|
27
|
+
* creates-or-gets the app, and deploys — no persistent connection/webhook is
|
|
28
|
+
* set up (that stays the owner-only `import/*` path). Returns the same
|
|
29
|
+
* PublishResult shape + recovery contract as `publishInline` / `deployRepo`, so
|
|
30
|
+
* the `wait_deploy` chain works identically.
|
|
31
|
+
*/
|
|
32
|
+
export async function publishFromRepo(ctx, input) {
|
|
33
|
+
const t0 = Date.now();
|
|
34
|
+
ctx.status(`Cloning ${input.url} ...`);
|
|
35
|
+
let initial;
|
|
36
|
+
try {
|
|
37
|
+
initial = await ctx.client.apps.publishFromGit({
|
|
38
|
+
url: input.url,
|
|
39
|
+
...(input.name ? { name: input.name } : {}),
|
|
40
|
+
...(input.branch ? { branch: input.branch } : {}),
|
|
41
|
+
...(input.note ? { note: input.note } : {}),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
if (err instanceof PercherApiError) {
|
|
46
|
+
if (err.status === 401) {
|
|
47
|
+
return {
|
|
48
|
+
status: "needs_login",
|
|
49
|
+
fileCount: 0,
|
|
50
|
+
bytes: 0,
|
|
51
|
+
recovery: RECOVERY_NEEDS_LOGIN,
|
|
52
|
+
summary: "Not logged in — run `bunx percher login` first.",
|
|
53
|
+
configPath: "",
|
|
54
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Per-user clone rate limit (publish-from-repo.ts) — retryable.
|
|
58
|
+
if (err.status === 429) {
|
|
59
|
+
const retryAfterSec = err.extra?.retryAfterSec ?? 60;
|
|
60
|
+
return {
|
|
61
|
+
status: "failed",
|
|
62
|
+
fileCount: 0,
|
|
63
|
+
bytes: 0,
|
|
64
|
+
error: {
|
|
65
|
+
title: "Repo-publish rate limit reached",
|
|
66
|
+
explanation: err.message,
|
|
67
|
+
suggestion: `Wait ${retryAfterSec}s and try again — this is a short-window per-account limit.`,
|
|
68
|
+
},
|
|
69
|
+
recovery: recoveryAsk({
|
|
70
|
+
prompt: `Repo-publish rate limit reached. Wait ${retryAfterSec}s and try again.`,
|
|
71
|
+
reasonCode: "infra_transient",
|
|
72
|
+
retryable: true,
|
|
73
|
+
}),
|
|
74
|
+
summary: `Repo-publish rate limit hit. Retry in ${retryAfterSec}s.`,
|
|
75
|
+
configPath: "",
|
|
76
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
switch (err.code) {
|
|
80
|
+
case "INVALID_REPO_URL":
|
|
81
|
+
case "DNS_DRIFT":
|
|
82
|
+
case "CLONE_FAILED":
|
|
83
|
+
case "CLONE_TIMEOUT":
|
|
84
|
+
case "IMPORT_TOO_LARGE":
|
|
85
|
+
case "TARBALL_FAILED":
|
|
86
|
+
case "REPO_MISSING_CONFIG":
|
|
87
|
+
case "REPO_INVALID_CONFIG":
|
|
88
|
+
case "NAME_BLOCKED":
|
|
89
|
+
case "VALIDATION_ERROR":
|
|
90
|
+
case "APP_LIMIT_REACHED":
|
|
91
|
+
case "ACCOUNT_SUSPENDED":
|
|
92
|
+
case "APP_SUSPENDED":
|
|
93
|
+
case "EMAIL_NOT_VERIFIED":
|
|
94
|
+
return failureResult({
|
|
95
|
+
title: err.message,
|
|
96
|
+
explanation: err.message,
|
|
97
|
+
suggestion: "Fix the issue described above (repo URL / percher.toml / plan limit), then re-run. Surface this to the user.",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
// Fetch the (possibly newly-created) app for the live URL + result shape.
|
|
104
|
+
// Best-effort: fall back to a minimal app synthesized from the deployment.
|
|
105
|
+
let app;
|
|
106
|
+
try {
|
|
107
|
+
app = await ctx.client.apps.get(initial.appId);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
app = {
|
|
111
|
+
id: initial.appId,
|
|
112
|
+
name: input.name ?? initial.appId,
|
|
113
|
+
url: initial.url ?? `https://${input.name ?? initial.appId}.percher.run`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Async opt-in: hand control back as soon as the deploy is queued so the
|
|
117
|
+
// agent can resume with percher_wait_for_deploy instead of blocking on the
|
|
118
|
+
// build. (The clone already happened server-side during publishFromGit.)
|
|
119
|
+
if (input.waitForLive === false) {
|
|
120
|
+
return {
|
|
121
|
+
status: "queued",
|
|
122
|
+
app,
|
|
123
|
+
deployment: initial,
|
|
124
|
+
fileCount: 0,
|
|
125
|
+
bytes: 0,
|
|
126
|
+
recovery: recoveryWait({
|
|
127
|
+
app: app.name,
|
|
128
|
+
deployId: initial.id,
|
|
129
|
+
reasonCode: "deploy_queued",
|
|
130
|
+
}),
|
|
131
|
+
summary: `${app.name} deploy ${initial.id} queued (cloned ${input.url}) — resume with percher_wait_for_deploy.`,
|
|
132
|
+
configPath: "",
|
|
133
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Synchronous: poll the new deployment to terminal status (mirror deployRepo).
|
|
137
|
+
const buildStart = Date.now();
|
|
138
|
+
const timeoutMs = TIMEOUTS.clientPublishPoll;
|
|
139
|
+
let lastStatus;
|
|
140
|
+
let nextHeartbeatMs = 15_000;
|
|
141
|
+
let deployment = initial;
|
|
142
|
+
let timedOut = null;
|
|
143
|
+
try {
|
|
144
|
+
deployment = await pollDeployment({
|
|
145
|
+
ctx,
|
|
146
|
+
appId: app.id,
|
|
147
|
+
initial,
|
|
148
|
+
intervalMs: 2000,
|
|
149
|
+
timeoutMs,
|
|
150
|
+
appName: app.name,
|
|
151
|
+
onTick: (d) => {
|
|
152
|
+
const elapsedMs = Date.now() - buildStart;
|
|
153
|
+
if (d.status !== lastStatus) {
|
|
154
|
+
ctx.status(`${d.status}...`);
|
|
155
|
+
lastStatus = d.status;
|
|
156
|
+
nextHeartbeatMs = elapsedMs + 15_000;
|
|
157
|
+
}
|
|
158
|
+
else if (elapsedMs >= nextHeartbeatMs) {
|
|
159
|
+
ctx.status(`${d.status}... (${Math.round(elapsedMs / 1000)}s elapsed)`);
|
|
160
|
+
nextHeartbeatMs = elapsedMs + 15_000;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
onTimeout: (d) => {
|
|
164
|
+
timedOut = { deployment: d };
|
|
165
|
+
throw new (class PollTimeoutSentinel extends Error {
|
|
166
|
+
})("__poll_timeout__");
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
if (!timedOut) {
|
|
172
|
+
return failureResult({
|
|
173
|
+
title: "Deploy did not complete",
|
|
174
|
+
explanation: err instanceof Error
|
|
175
|
+
? err.message
|
|
176
|
+
: "The deploy stopped responding before reaching a terminal state.",
|
|
177
|
+
suggestion: `Inspect with \`bunx percher deploys inspect ${initial.id}\`.`,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (timedOut) {
|
|
182
|
+
const stuck = timedOut.deployment;
|
|
183
|
+
return failureResult({
|
|
184
|
+
title: "Deploy timed out",
|
|
185
|
+
explanation: "The deploy did not complete within 5 minutes.",
|
|
186
|
+
suggestion: `Inspect with \`bunx percher deploys inspect ${stuck.id}\`.`,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
const totalSeconds = (Date.now() - t0) / 1000;
|
|
190
|
+
const url = deployment.previewUrl ?? deployment.url ?? app.url;
|
|
191
|
+
if (deployment.status === "failed") {
|
|
192
|
+
const { error, recovery, summary } = await classifyDeploymentFailure({ ctx, app, deployment });
|
|
193
|
+
return {
|
|
194
|
+
status: "failed",
|
|
195
|
+
app,
|
|
196
|
+
deployment,
|
|
197
|
+
fileCount: 0,
|
|
198
|
+
bytes: 0,
|
|
199
|
+
error,
|
|
200
|
+
recovery,
|
|
201
|
+
summary,
|
|
202
|
+
configPath: "",
|
|
203
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
ctx.status(`Live at ${url} (${totalSeconds.toFixed(0)}s)`);
|
|
207
|
+
return {
|
|
208
|
+
status: "live",
|
|
209
|
+
app,
|
|
210
|
+
deployment,
|
|
211
|
+
url,
|
|
212
|
+
timing: { totalSeconds, packageMs: 0, uploadMs: 0, buildMs: Date.now() - buildStart },
|
|
213
|
+
fileCount: 0,
|
|
214
|
+
bytes: 0,
|
|
215
|
+
recovery: RECOVERY_NONE,
|
|
216
|
+
summary: `${app.name} deployed from ${input.url} (${totalSeconds.toFixed(0)}s) → ${url}`,
|
|
217
|
+
configPath: "",
|
|
218
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function failureResult(error) {
|
|
222
|
+
return {
|
|
223
|
+
status: "failed",
|
|
224
|
+
fileCount: 0,
|
|
225
|
+
bytes: 0,
|
|
226
|
+
error,
|
|
227
|
+
recovery: recoveryAsk({
|
|
228
|
+
prompt: `${error.title}: ${error.explanation} ${error.suggestion}`.trim(),
|
|
229
|
+
reasonCode: "unknown",
|
|
230
|
+
}),
|
|
231
|
+
summary: error.title,
|
|
232
|
+
configPath: "",
|
|
233
|
+
bundle: { fileCount: 0, bytes: 0 },
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=publish-from-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-from-repo.js","sourceRoot":"","sources":["../../src/commands/publish-from-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export declare const publishInlineInputSchema: z.ZodObject<{
|
|
|
6
6
|
files: z.ZodArray<z.ZodObject<{
|
|
7
7
|
path: z.ZodString;
|
|
8
8
|
content: z.ZodString;
|
|
9
|
+
encoding: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
base64: "base64";
|
|
11
|
+
utf8: "utf8";
|
|
12
|
+
}>>;
|
|
9
13
|
}, z.core.$strip>>;
|
|
10
14
|
preview: z.ZodOptional<z.ZodBoolean>;
|
|
11
15
|
message: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-inline.d.ts","sourceRoot":"","sources":["../../src/commands/publish-inline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"publish-inline.d.ts","sourceRoot":"","sources":["../../src/commands/publish-inline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAW1C,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAwCnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA0B1E;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
|