@percher/shared 1.1.0 → 1.2.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/dist/data-filter.d.ts +27 -0
- package/dist/data-filter.d.ts.map +1 -0
- package/dist/data-filter.js +288 -0
- package/dist/data-filter.js.map +1 -0
- package/dist/data-records.d.ts +359 -0
- package/dist/data-records.d.ts.map +1 -0
- package/dist/data-records.js +124 -0
- package/dist/data-records.js.map +1 -0
- package/dist/disposable-email-domains.d.ts +11 -0
- package/dist/disposable-email-domains.d.ts.map +1 -0
- package/dist/disposable-email-domains.js +112 -0
- package/dist/disposable-email-domains.js.map +1 -0
- package/dist/email-budget.d.ts +60 -0
- package/dist/email-budget.d.ts.map +1 -0
- package/dist/email-budget.js +135 -0
- package/dist/email-budget.js.map +1 -0
- package/dist/image-rejection.d.ts +45 -0
- package/dist/image-rejection.d.ts.map +1 -0
- package/dist/image-rejection.js +27 -0
- package/dist/image-rejection.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/internal-sig.d.ts +2 -2
- package/dist/internal-sig.js +2 -2
- package/dist/legal-changes.d.ts +4 -2
- package/dist/legal-changes.d.ts.map +1 -1
- package/dist/legal-changes.js +124 -0
- package/dist/legal-changes.js.map +1 -1
- package/dist/legal.d.ts +14 -14
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +13 -13
- package/dist/legal.js.map +1 -1
- package/dist/oauth-scopes.d.ts +8 -0
- package/dist/oauth-scopes.d.ts.map +1 -1
- package/dist/oauth-scopes.js +11 -13
- package/dist/oauth-scopes.js.map +1 -1
- package/dist/platform.d.ts +2 -2
- package/dist/platform.js +2 -2
- package/dist/signup-capacity.d.ts +12 -0
- package/dist/signup-capacity.d.ts.map +1 -0
- package/dist/signup-capacity.js +29 -0
- package/dist/signup-capacity.js.map +1 -0
- package/dist/signup-day.d.ts +7 -0
- package/dist/signup-day.d.ts.map +1 -0
- package/dist/signup-day.js +42 -0
- package/dist/signup-day.js.map +1 -0
- package/dist/switches.d.ts.map +1 -1
- package/dist/switches.js +1 -0
- package/dist/switches.js.map +1 -1
- package/dist/waitlist-token.d.ts +49 -0
- package/dist/waitlist-token.d.ts.map +1 -0
- package/dist/waitlist-token.js +71 -0
- package/dist/waitlist-token.js.map +1 -0
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal-changes.js","sourceRoot":"","sources":["../src/legal-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"legal-changes.js","sourceRoot":"","sources":["../src/legal-changes.ts"],"names":[],"mappings":"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"}
|
package/dist/legal.d.ts
CHANGED
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
* re-acceptance.
|
|
13
13
|
*/
|
|
14
14
|
export declare const LEGAL_DOCUMENT_VERSIONS: {
|
|
15
|
-
readonly terms: "1.0.
|
|
15
|
+
readonly terms: "1.0.3";
|
|
16
16
|
readonly aup: "1.0.1";
|
|
17
|
-
readonly privacy: "1.0.
|
|
18
|
-
readonly cookies: "1.0.
|
|
19
|
-
readonly dpa: "1.
|
|
20
|
-
readonly subprocessors: "1.
|
|
21
|
-
readonly dataPortability: "1.0";
|
|
17
|
+
readonly privacy: "1.0.4";
|
|
18
|
+
readonly cookies: "1.0.4";
|
|
19
|
+
readonly dpa: "1.1";
|
|
20
|
+
readonly subprocessors: "1.2";
|
|
21
|
+
readonly dataPortability: "1.0.4";
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
24
|
* What each published document said at the version above.
|
|
@@ -39,18 +39,18 @@ export declare const LEGAL_DOCUMENT_VERSIONS: {
|
|
|
39
39
|
* belongs to.
|
|
40
40
|
*/
|
|
41
41
|
export declare const LEGAL_DOCUMENT_HASHES: {
|
|
42
|
-
readonly terms: "
|
|
42
|
+
readonly terms: "3c4dc48737355c08d5377a734822708498c6be804dcc26691ebef5b149f16529";
|
|
43
43
|
readonly aup: "355feaa5c38bc2fb84ef66de73f16f2c7fcd25216b30399c451c263aa5c16597";
|
|
44
|
-
readonly privacy: "
|
|
45
|
-
readonly cookies: "
|
|
46
|
-
readonly dpa: "
|
|
47
|
-
readonly subprocessors: "
|
|
48
|
-
readonly dataPortability: "
|
|
44
|
+
readonly privacy: "a2465b91198da6a8efe497670b78cd2d49cc8a80358e11dcf1b6cb3830a2746a";
|
|
45
|
+
readonly cookies: "a753071132bb9e29153a8dbf7be3ff267e518af6d1911095a878281f34e6bf07";
|
|
46
|
+
readonly dpa: "551ada1a43712a1a44b495dfd96be403162b8034a8f39b8537283c1976329ca4";
|
|
47
|
+
readonly subprocessors: "d795eef4af2bb8c2c182c748007b6d06c6a7c4dbf6babb4ca6c3758bf2e00d26";
|
|
48
|
+
readonly dataPortability: "76de68d4fe2cb09e2a597a1238b5e9d9299c4633d0ae70572fb7c5d02fbc2876";
|
|
49
49
|
};
|
|
50
50
|
/** Version of the canonical English Terms presented during account acceptance. */
|
|
51
|
-
export declare const CURRENT_TERMS_VERSION: "1.0.
|
|
51
|
+
export declare const CURRENT_TERMS_VERSION: "1.0.3";
|
|
52
52
|
/** The "Last updated" date shared by the current revision of the documents. */
|
|
53
|
-
export declare const LEGAL_DOCUMENT_LAST_UPDATED = "
|
|
53
|
+
export declare const LEGAL_DOCUMENT_LAST_UPDATED = "11 October 2026";
|
|
54
54
|
export interface TermsAcceptanceEvidence {
|
|
55
55
|
version?: string;
|
|
56
56
|
language?: "en" | "sv";
|
package/dist/legal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal.d.ts","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB;aAClC,KAAK,EAAE,OAAO;aACd,GAAG,EAAE,OAAO;aACZ,OAAO,EAAE,OAAO;aAChB,OAAO,EAAE,OAAO;aAChB,GAAG,EAAE,KAAK;aACV,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"legal.d.ts","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB;aAClC,KAAK,EAAE,OAAO;aACd,GAAG,EAAE,OAAO;aACZ,OAAO,EAAE,OAAO;aAChB,OAAO,EAAE,OAAO;aAChB,GAAG,EAAE,KAAK;aACV,aAAa,EAAE,KAAK;aACpB,eAAe,EAAE,OAAO;CAChB,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB;aAChC,KAAK,EAAE,kEAAkE;aACzE,GAAG,EAAE,kEAAkE;aACvE,OAAO,EAAE,kEAAkE;aAC3E,OAAO,EAAE,kEAAkE;aAC3E,GAAG,EAAE,kEAAkE;aACvE,aAAa,EAAE,kEAAkE;aACjF,eAAe,EAAE,kEAAkE;CAC3E,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,SAAgC,CAAC;AAEnE,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB"}
|
package/dist/legal.js
CHANGED
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
* re-acceptance.
|
|
13
13
|
*/
|
|
14
14
|
export const LEGAL_DOCUMENT_VERSIONS = {
|
|
15
|
-
terms: "1.0.
|
|
15
|
+
terms: "1.0.3",
|
|
16
16
|
aup: "1.0.1",
|
|
17
|
-
privacy: "1.0.
|
|
18
|
-
cookies: "1.0.
|
|
19
|
-
dpa: "1.
|
|
20
|
-
subprocessors: "1.
|
|
21
|
-
dataPortability: "1.0",
|
|
17
|
+
privacy: "1.0.4",
|
|
18
|
+
cookies: "1.0.4",
|
|
19
|
+
dpa: "1.1",
|
|
20
|
+
subprocessors: "1.2",
|
|
21
|
+
dataPortability: "1.0.4",
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
24
|
* What each published document said at the version above.
|
|
@@ -39,16 +39,16 @@ export const LEGAL_DOCUMENT_VERSIONS = {
|
|
|
39
39
|
* belongs to.
|
|
40
40
|
*/
|
|
41
41
|
export const LEGAL_DOCUMENT_HASHES = {
|
|
42
|
-
terms: "
|
|
42
|
+
terms: "3c4dc48737355c08d5377a734822708498c6be804dcc26691ebef5b149f16529",
|
|
43
43
|
aup: "355feaa5c38bc2fb84ef66de73f16f2c7fcd25216b30399c451c263aa5c16597",
|
|
44
|
-
privacy: "
|
|
45
|
-
cookies: "
|
|
46
|
-
dpa: "
|
|
47
|
-
subprocessors: "
|
|
48
|
-
dataPortability: "
|
|
44
|
+
privacy: "a2465b91198da6a8efe497670b78cd2d49cc8a80358e11dcf1b6cb3830a2746a",
|
|
45
|
+
cookies: "a753071132bb9e29153a8dbf7be3ff267e518af6d1911095a878281f34e6bf07",
|
|
46
|
+
dpa: "551ada1a43712a1a44b495dfd96be403162b8034a8f39b8537283c1976329ca4",
|
|
47
|
+
subprocessors: "d795eef4af2bb8c2c182c748007b6d06c6a7c4dbf6babb4ca6c3758bf2e00d26",
|
|
48
|
+
dataPortability: "76de68d4fe2cb09e2a597a1238b5e9d9299c4633d0ae70572fb7c5d02fbc2876",
|
|
49
49
|
};
|
|
50
50
|
/** Version of the canonical English Terms presented during account acceptance. */
|
|
51
51
|
export const CURRENT_TERMS_VERSION = LEGAL_DOCUMENT_VERSIONS.terms;
|
|
52
52
|
/** The "Last updated" date shared by the current revision of the documents. */
|
|
53
|
-
export const LEGAL_DOCUMENT_LAST_UPDATED = "
|
|
53
|
+
export const LEGAL_DOCUMENT_LAST_UPDATED = "11 October 2026";
|
|
54
54
|
//# sourceMappingURL=legal.js.map
|
package/dist/legal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal.js","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;IACZ,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,KAAK;IACV,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"legal.js","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;IACZ,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,KAAK;IACV,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,OAAO;CAChB,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,kEAAkE;IACzE,GAAG,EAAE,kEAAkE;IACvE,OAAO,EAAE,kEAAkE;IAC3E,OAAO,EAAE,kEAAkE;IAC3E,GAAG,EAAE,kEAAkE;IACvE,aAAa,EAAE,kEAAkE;IACjF,eAAe,EAAE,kEAAkE;CAC3E,CAAC;AAEX,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,KAAK,CAAC;AAEnE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC"}
|
package/dist/oauth-scopes.d.ts
CHANGED
|
@@ -11,7 +11,15 @@
|
|
|
11
11
|
* An unknown scope falls through to its raw token — nothing is ever silently
|
|
12
12
|
* hidden from the reader.
|
|
13
13
|
*/
|
|
14
|
+
import type { DataAccessMode } from "./data-records.js";
|
|
14
15
|
export declare const OAUTH_SCOPE_LABELS: Readonly<Record<string, string>>;
|
|
16
|
+
/**
|
|
17
|
+
* A grant's database-tool access, for the Connections editor and the
|
|
18
|
+
* security email. Not a scope: data access is a grant attribute, so these
|
|
19
|
+
* labels stay out of {@link OAUTH_SCOPE_LABELS}. Per-app identities have
|
|
20
|
+
* their own text (`DATA_IDENTITY_LABELS`, spec §10.7).
|
|
21
|
+
*/
|
|
22
|
+
export declare const DATA_ACCESS_MODE_LABELS: Readonly<Record<DataAccessMode, string>>;
|
|
15
23
|
/** Map a raw scope token to its human label, or the token itself if unknown. */
|
|
16
24
|
export declare function describeOAuthScope(scope: string): string;
|
|
17
25
|
/** Split a space-delimited OAuth scope string into individual tokens. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-scopes.d.ts","sourceRoot":"","sources":["../src/oauth-scopes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"oauth-scopes.d.ts","sourceRoot":"","sources":["../src/oauth-scopes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK/D,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAG5E,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD"}
|
package/dist/oauth-scopes.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hosted-MCP OAuth scope copy — the permission text a user reads on the
|
|
3
|
-
* consent screen, and again in the email telling them a client was connected.
|
|
4
|
-
*
|
|
5
|
-
* It lives here because those two surfaces must not drift: the email has to
|
|
6
|
-
* describe the access in the words the user actually consented to, and they
|
|
7
|
-
* are rendered by different processes (Next.js dashboard, API mailer). Two
|
|
8
|
-
* copies of security-relevant permission text is exactly the kind of drift
|
|
9
|
-
* that ends with an email under-describing what a grant can do.
|
|
10
|
-
*
|
|
11
|
-
* An unknown scope falls through to its raw token — nothing is ever silently
|
|
12
|
-
* hidden from the reader.
|
|
13
|
-
*/
|
|
14
1
|
export const OAUTH_SCOPE_LABELS = {
|
|
15
2
|
"mcp:apps": "View and operate your apps (deploy, env, domains, logs)",
|
|
16
3
|
"mcp:apps.read": "View your apps and their status",
|
|
17
4
|
"mcp:account": "View your account",
|
|
18
5
|
mcp: "Use the hosted Percher MCP tools",
|
|
19
6
|
};
|
|
7
|
+
const DATA_ACCESS_SUFFIX = "records in your apps' databases, including data your app's users entered. Every record the assistant reads is sent to it and may be processed by its provider under the provider's terms. Revoke in Settings → Connections; copies already sent are not recalled.";
|
|
8
|
+
/**
|
|
9
|
+
* A grant's database-tool access, for the Connections editor and the
|
|
10
|
+
* security email. Not a scope: data access is a grant attribute, so these
|
|
11
|
+
* labels stay out of {@link OAUTH_SCOPE_LABELS}. Per-app identities have
|
|
12
|
+
* their own text (`DATA_IDENTITY_LABELS`, spec §10.7).
|
|
13
|
+
*/
|
|
14
|
+
export const DATA_ACCESS_MODE_LABELS = {
|
|
15
|
+
readwrite: `Read, create, change and delete ${DATA_ACCESS_SUFFIX}`,
|
|
16
|
+
read: `Read ${DATA_ACCESS_SUFFIX}`,
|
|
17
|
+
};
|
|
20
18
|
/** Map a raw scope token to its human label, or the token itself if unknown. */
|
|
21
19
|
export function describeOAuthScope(scope) {
|
|
22
20
|
return OAUTH_SCOPE_LABELS[scope] ?? scope;
|
package/dist/oauth-scopes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-scopes.js","sourceRoot":"","sources":["../src/oauth-scopes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth-scopes.js","sourceRoot":"","sources":["../src/oauth-scopes.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,UAAU,EAAE,yDAAyD;IACrE,eAAe,EAAE,iCAAiC;IAClD,aAAa,EAAE,mBAAmB;IAClC,GAAG,EAAE,kCAAkC;CACxC,CAAC;AAEF,MAAM,kBAAkB,GACtB,mQAAmQ,CAAC;AAEtQ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA6C;IAC/E,SAAS,EAAE,mCAAmC,kBAAkB,EAAE;IAClE,IAAI,EAAE,QAAQ,kBAAkB,EAAE;CACnC,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC5C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK;SACT,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -26,6 +26,6 @@ export declare const DEFAULT_MCP_HTTP_PORT = 8787;
|
|
|
26
26
|
* drifted to three different values (51/52/53), and one shipped artifact
|
|
27
27
|
* disagreed with itself on two lines.
|
|
28
28
|
*/
|
|
29
|
-
export declare const MCP_TOOL_COUNT_LOCAL =
|
|
30
|
-
export declare const MCP_TOOL_COUNT_HOSTED =
|
|
29
|
+
export declare const MCP_TOOL_COUNT_LOCAL = 60;
|
|
30
|
+
export declare const MCP_TOOL_COUNT_HOSTED = 29;
|
|
31
31
|
//# sourceMappingURL=platform.d.ts.map
|
package/dist/platform.js
CHANGED
|
@@ -26,6 +26,6 @@ export const DEFAULT_MCP_HTTP_PORT = 8787;
|
|
|
26
26
|
* drifted to three different values (51/52/53), and one shipped artifact
|
|
27
27
|
* disagreed with itself on two lines.
|
|
28
28
|
*/
|
|
29
|
-
export const MCP_TOOL_COUNT_LOCAL =
|
|
30
|
-
export const MCP_TOOL_COUNT_HOSTED =
|
|
29
|
+
export const MCP_TOOL_COUNT_LOCAL = 60;
|
|
30
|
+
export const MCP_TOOL_COUNT_HOSTED = 29;
|
|
31
31
|
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const SIGNUP_CAPACITY_MAX_AGE_MS = 120000;
|
|
2
|
+
export declare const SIGNUP_CAPACITY_MESSAGE = "Sorry, registrations are temporarily paused until enough capacity is available. Visit the signup page to request an email when places are available.";
|
|
3
|
+
export type SignupCapacityReason = "ready" | "unknown" | "cpu" | "memory" | "disk" | "recovering";
|
|
4
|
+
export interface SignupCapacityState {
|
|
5
|
+
paused: boolean;
|
|
6
|
+
reason: SignupCapacityReason;
|
|
7
|
+
checkedAt: number;
|
|
8
|
+
healthySince: number | null;
|
|
9
|
+
}
|
|
10
|
+
/** Shared by both admission hops. A missing/malformed/stale sample is closed. */
|
|
11
|
+
export declare function parseSignupCapacity(raw: string | null | undefined, now?: number): SignupCapacityState;
|
|
12
|
+
//# sourceMappingURL=signup-capacity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup-capacity.d.ts","sourceRoot":"","sources":["../src/signup-capacity.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,uBAAuB,yJACoH,CAAC;AACzJ,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;AAClG,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9B,GAAG,SAAa,GACf,mBAAmB,CAyBrB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const SIGNUP_CAPACITY_MAX_AGE_MS = 120_000;
|
|
2
|
+
export const SIGNUP_CAPACITY_MESSAGE = "Sorry, registrations are temporarily paused until enough capacity is available. Visit the signup page to request an email when places are available.";
|
|
3
|
+
/** Shared by both admission hops. A missing/malformed/stale sample is closed. */
|
|
4
|
+
export function parseSignupCapacity(raw, now = Date.now()) {
|
|
5
|
+
const unknown = {
|
|
6
|
+
paused: true,
|
|
7
|
+
reason: "unknown",
|
|
8
|
+
checkedAt: 0,
|
|
9
|
+
healthySince: null,
|
|
10
|
+
};
|
|
11
|
+
try {
|
|
12
|
+
const value = JSON.parse(raw ?? "null");
|
|
13
|
+
if (!value ||
|
|
14
|
+
typeof value.paused !== "boolean" ||
|
|
15
|
+
!["ready", "unknown", "cpu", "memory", "disk", "recovering"].includes(value.reason) ||
|
|
16
|
+
value.paused !== (value.reason !== "ready") ||
|
|
17
|
+
!Number.isFinite(value.checkedAt) ||
|
|
18
|
+
value.checkedAt > now + 5000 ||
|
|
19
|
+
now - value.checkedAt > SIGNUP_CAPACITY_MAX_AGE_MS ||
|
|
20
|
+
(value.healthySince !== null &&
|
|
21
|
+
(!Number.isFinite(value.healthySince) || value.healthySince > now)))
|
|
22
|
+
return unknown;
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return unknown;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=signup-capacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup-capacity.js","sourceRoot":"","sources":["../src/signup-capacity.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAClC,sJAAsJ,CAAC;AASzJ,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CACjC,GAA8B,EAC9B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,MAAM,OAAO,GAAwB;QACnC,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;QACxC,IACE,CAAC,KAAK;YACN,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS;YACjC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACnF,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC;YAC3C,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;YACjC,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI;YAC5B,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,0BAA0B;YAClD,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI;gBAC1B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;YAErE,OAAO,OAAO,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup-day.d.ts","sourceRoot":"","sources":["../src/signup-day.ts"],"names":[],"mappings":"AAuCA,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAU1F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const stockholmDate = new Intl.DateTimeFormat("sv-SE", {
|
|
2
|
+
timeZone: "Europe/Stockholm",
|
|
3
|
+
year: "numeric",
|
|
4
|
+
month: "2-digit",
|
|
5
|
+
day: "2-digit",
|
|
6
|
+
});
|
|
7
|
+
const stockholmClock = new Intl.DateTimeFormat("en-GB", {
|
|
8
|
+
timeZone: "Europe/Stockholm",
|
|
9
|
+
year: "numeric",
|
|
10
|
+
month: "2-digit",
|
|
11
|
+
day: "2-digit",
|
|
12
|
+
hour: "2-digit",
|
|
13
|
+
minute: "2-digit",
|
|
14
|
+
second: "2-digit",
|
|
15
|
+
hourCycle: "h23",
|
|
16
|
+
});
|
|
17
|
+
/** Convert a local calendar midnight to UTC without assuming a fixed DST offset. */
|
|
18
|
+
function midnightUtc(localMidnight) {
|
|
19
|
+
let instant = localMidnight;
|
|
20
|
+
for (let i = 0; i < 3; i++) {
|
|
21
|
+
const parts = Object.fromEntries(stockholmClock.formatToParts(instant).map(({ type, value }) => [type, value]));
|
|
22
|
+
const represented = Date.UTC(Number(parts.year), Number(parts.month) - 1, Number(parts.day), Number(parts.hour), Number(parts.minute), Number(parts.second));
|
|
23
|
+
const correction = localMidnight - represented;
|
|
24
|
+
if (correction === 0)
|
|
25
|
+
return instant;
|
|
26
|
+
instant += correction;
|
|
27
|
+
}
|
|
28
|
+
return instant;
|
|
29
|
+
}
|
|
30
|
+
/** Registration quotas use the Stockholm calendar day, including 23/25-hour days. */
|
|
31
|
+
export function signupDayWindow(now) {
|
|
32
|
+
const day = stockholmDate.format(now);
|
|
33
|
+
const year = Number(day.slice(0, 4));
|
|
34
|
+
const month = Number(day.slice(5, 7));
|
|
35
|
+
const date = Number(day.slice(8, 10));
|
|
36
|
+
return {
|
|
37
|
+
day,
|
|
38
|
+
startMs: midnightUtc(Date.UTC(year, month - 1, date)),
|
|
39
|
+
endMs: midnightUtc(Date.UTC(year, month - 1, date + 1)),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=signup-day.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup-day.js","sourceRoot":"","sources":["../src/signup-day.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IACrD,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;CACf,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IACtD,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,KAAK;CACjB,CAAC,CAAC;AAEH,oFAAoF;AACpF,SAAS,WAAW,CAAC,aAAqB;IACxC,IAAI,OAAO,GAAG,aAAa,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAC9E,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAClB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EACvB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EACpB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CACrB,CAAC;QACF,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;QAC/C,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QACrC,OAAO,IAAI,UAAU,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,GAAS;IACvC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtC,OAAO;QACL,GAAG;QACH,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;KACxD,CAAC;AACJ,CAAC"}
|
package/dist/switches.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switches.d.ts","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,mDAAmD;IACnD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AA2BrE,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,SAAS,UAAU,
|
|
1
|
+
{"version":3,"file":"switches.d.ts","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,SAAS,CAAC;IAChB,mDAAmD;IACnD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AA2BrE,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,SAAS,UAAU,EAwPzC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAE1D,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAclF;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAW9C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAM7D;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAK1D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,CAAC;IACnB,kDAAkD;IAClD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,MAAM,CAAC,EAAE,YAAY,GACpB,YAAY,EAAE,CAiBhB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,MAAM,EAAE,YAAY,GACnB,IAAI,CAaN"}
|
package/dist/switches.js
CHANGED
|
@@ -112,6 +112,7 @@ export const SWITCHES = [
|
|
|
112
112
|
},
|
|
113
113
|
bool("PERCHER_ALLOW_NO_CAPTCHA", ["dashboard"], "allow production without Turnstile", ONE),
|
|
114
114
|
bool("PERCHER_ALLOW_UNVERIFIED_SIGNUP", ["dashboard"], "allow production without Resend", ONE),
|
|
115
|
+
bool("PERCHER_DASHBOARD_SECRET_BUILD", ["dashboard"], "allow an ephemeral BetterAuth key during `next build` only, never at runtime", ONE),
|
|
115
116
|
// Boot-guard opt-outs and topology
|
|
116
117
|
bool("PERCHER_ALLOW_NO_ALERTING", ["api"], "boot without an alert channel", ONE),
|
|
117
118
|
{
|
package/dist/switches.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switches.js","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"switches.js","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The personal "remove me" links for the two lists that hold an address
|
|
3
|
+
* until someone asks us to delete it: the pre-launch waitlist
|
|
4
|
+
* (`waitlist_signups`) and a closed tier's "tell me when it opens" list
|
|
5
|
+
* (`plan_interests`). A token names one row and proves the link came from
|
|
6
|
+
* Percher: `<rowId>.<mac>` for the waitlist, `plan.<rowId>.<mac>` for a plan
|
|
7
|
+
* interest. The mac is an HMAC of the row id under a key derived from the
|
|
8
|
+
* platform's internal secret with a fixed label per list, so the key is used
|
|
9
|
+
* for nothing else, no new secret has to be provisioned, and a token for one
|
|
10
|
+
* list never verifies for the other. The API builds the links (the waitlist
|
|
11
|
+
* export, the plan-interest emails) and the dashboard verifies them, so they
|
|
12
|
+
* live here once.
|
|
13
|
+
*
|
|
14
|
+
* A subpath export, never the barrel: `node:crypto` must not reach the
|
|
15
|
+
* dashboard's client bundle (see secure-compare.ts).
|
|
16
|
+
*/
|
|
17
|
+
declare const PURPOSES: {
|
|
18
|
+
readonly signup: {
|
|
19
|
+
readonly label: "percher-waitlist-removal-v1";
|
|
20
|
+
readonly prefix: "";
|
|
21
|
+
};
|
|
22
|
+
readonly plan_interest: {
|
|
23
|
+
readonly label: "percher-plan-interest-removal-v1";
|
|
24
|
+
readonly prefix: "plan.";
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export type RemovalPurpose = keyof typeof PURPOSES;
|
|
28
|
+
export declare function waitlistRemovalToken(secret: string, rowId: string): string;
|
|
29
|
+
export declare function planInterestRemovalToken(secret: string, rowId: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Which list and row a genuine token names, otherwise null. The prefix picks
|
|
32
|
+
* the label, and the label is part of the key, so moving a token to the other
|
|
33
|
+
* list by adding or dropping the prefix fails the mac.
|
|
34
|
+
*/
|
|
35
|
+
export declare function verifyRemovalToken(secret: string, token: string | null | undefined): {
|
|
36
|
+
purpose: RemovalPurpose;
|
|
37
|
+
rowId: string;
|
|
38
|
+
} | null;
|
|
39
|
+
/** The waitlist row id when the token is a genuine waitlist link, otherwise null. */
|
|
40
|
+
export declare function verifyWaitlistRemovalToken(secret: string, token: string | null | undefined): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* The public page a token opens; `origin` is the dashboard origin. Both lists
|
|
43
|
+
* use the same page. The query name is `token` because Caddy's access-log
|
|
44
|
+
* filter blanks that name in the URI and the Referer (infra/Caddyfile.prod);
|
|
45
|
+
* a new name would be logged.
|
|
46
|
+
*/
|
|
47
|
+
export declare function waitlistRemovalUrl(origin: string, token: string): string;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=waitlist-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitlist-token.d.ts","sourceRoot":"","sources":["../src/waitlist-token.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,QAAQ;aACZ,MAAM;iBAAI,KAAK,EAAE,6BAA6B;iBAAE,MAAM,EAAE,EAAE;;aAC1D,aAAa;iBAAI,KAAK,EAAE,kCAAkC;iBAAE,MAAM,EAAE,OAAO;;CACnE,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,QAAQ,CAAC;AAcnD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUnD;AAED,qFAAqF;AACrF,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,GAAG,IAAI,CAGf;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
import { secretEquals } from "./secure-compare.js";
|
|
3
|
+
/**
|
|
4
|
+
* The personal "remove me" links for the two lists that hold an address
|
|
5
|
+
* until someone asks us to delete it: the pre-launch waitlist
|
|
6
|
+
* (`waitlist_signups`) and a closed tier's "tell me when it opens" list
|
|
7
|
+
* (`plan_interests`). A token names one row and proves the link came from
|
|
8
|
+
* Percher: `<rowId>.<mac>` for the waitlist, `plan.<rowId>.<mac>` for a plan
|
|
9
|
+
* interest. The mac is an HMAC of the row id under a key derived from the
|
|
10
|
+
* platform's internal secret with a fixed label per list, so the key is used
|
|
11
|
+
* for nothing else, no new secret has to be provisioned, and a token for one
|
|
12
|
+
* list never verifies for the other. The API builds the links (the waitlist
|
|
13
|
+
* export, the plan-interest emails) and the dashboard verifies them, so they
|
|
14
|
+
* live here once.
|
|
15
|
+
*
|
|
16
|
+
* A subpath export, never the barrel: `node:crypto` must not reach the
|
|
17
|
+
* dashboard's client bundle (see secure-compare.ts).
|
|
18
|
+
*/
|
|
19
|
+
const PURPOSES = {
|
|
20
|
+
signup: { label: "percher-waitlist-removal-v1", prefix: "" },
|
|
21
|
+
plan_interest: { label: "percher-plan-interest-removal-v1", prefix: "plan." },
|
|
22
|
+
};
|
|
23
|
+
const MAC_CHARS = 32;
|
|
24
|
+
function mac(secret, purpose, rowId) {
|
|
25
|
+
const key = createHmac("sha256", secret).update(PURPOSES[purpose].label).digest();
|
|
26
|
+
return createHmac("sha256", key).update(rowId).digest("base64url").slice(0, MAC_CHARS);
|
|
27
|
+
}
|
|
28
|
+
function removalToken(secret, purpose, rowId) {
|
|
29
|
+
if (!secret)
|
|
30
|
+
throw new Error("A removal token needs the internal secret");
|
|
31
|
+
return `${PURPOSES[purpose].prefix}${rowId}.${mac(secret, purpose, rowId)}`;
|
|
32
|
+
}
|
|
33
|
+
export function waitlistRemovalToken(secret, rowId) {
|
|
34
|
+
return removalToken(secret, "signup", rowId);
|
|
35
|
+
}
|
|
36
|
+
export function planInterestRemovalToken(secret, rowId) {
|
|
37
|
+
return removalToken(secret, "plan_interest", rowId);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Which list and row a genuine token names, otherwise null. The prefix picks
|
|
41
|
+
* the label, and the label is part of the key, so moving a token to the other
|
|
42
|
+
* list by adding or dropping the prefix fails the mac.
|
|
43
|
+
*/
|
|
44
|
+
export function verifyRemovalToken(secret, token) {
|
|
45
|
+
if (!secret || !token || token.length > 200)
|
|
46
|
+
return null;
|
|
47
|
+
const purpose = token.startsWith(PURPOSES.plan_interest.prefix)
|
|
48
|
+
? "plan_interest"
|
|
49
|
+
: "signup";
|
|
50
|
+
const body = token.slice(PURPOSES[purpose].prefix.length);
|
|
51
|
+
const dot = body.lastIndexOf(".");
|
|
52
|
+
if (dot <= 0)
|
|
53
|
+
return null;
|
|
54
|
+
const rowId = body.slice(0, dot);
|
|
55
|
+
return secretEquals(body.slice(dot + 1), mac(secret, purpose, rowId)) ? { purpose, rowId } : null;
|
|
56
|
+
}
|
|
57
|
+
/** The waitlist row id when the token is a genuine waitlist link, otherwise null. */
|
|
58
|
+
export function verifyWaitlistRemovalToken(secret, token) {
|
|
59
|
+
const verified = verifyRemovalToken(secret, token);
|
|
60
|
+
return verified?.purpose === "signup" ? verified.rowId : null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The public page a token opens; `origin` is the dashboard origin. Both lists
|
|
64
|
+
* use the same page. The query name is `token` because Caddy's access-log
|
|
65
|
+
* filter blanks that name in the URI and the Referer (infra/Caddyfile.prod);
|
|
66
|
+
* a new name would be logged.
|
|
67
|
+
*/
|
|
68
|
+
export function waitlistRemovalUrl(origin, token) {
|
|
69
|
+
return `${origin.replace(/\/+$/, "")}/waitlist/leave?token=${encodeURIComponent(token)}`;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=waitlist-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitlist-token.js","sourceRoot":"","sources":["../src/waitlist-token.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@percher/shared",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Shared constants and contracts (timeouts, etc.) used across the Percher CLI, API, MCP, and worker. Internal — values change in lockstep across packages.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,6 +41,11 @@
|
|
|
41
41
|
"import": "./dist/secure-compare.js",
|
|
42
42
|
"default": "./dist/secure-compare.js"
|
|
43
43
|
},
|
|
44
|
+
"./waitlist-token": {
|
|
45
|
+
"types": "./dist/waitlist-token.d.ts",
|
|
46
|
+
"import": "./dist/waitlist-token.js",
|
|
47
|
+
"default": "./dist/waitlist-token.js"
|
|
48
|
+
},
|
|
44
49
|
"./signup-invite-hash": {
|
|
45
50
|
"types": "./dist/signup-invite-hash.d.ts",
|
|
46
51
|
"import": "./dist/signup-invite-hash.js",
|