@percher/shared 1.1.0 → 1.3.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/deployment-security.d.ts +32 -0
- package/dist/deployment-security.d.ts.map +1 -0
- package/dist/deployment-security.js +146 -0
- package/dist/deployment-security.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/email-change.d.ts +11 -0
- package/dist/email-change.d.ts.map +1 -0
- package/dist/email-change.js +23 -0
- package/dist/email-change.js.map +1 -0
- package/dist/email-template.d.ts +19 -0
- package/dist/email-template.d.ts.map +1 -0
- package/dist/email-template.js +53 -0
- package/dist/email-template.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 +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/internal-sig.d.ts +2 -2
- package/dist/internal-sig.js +2 -2
- package/dist/ip-prefix.d.ts +43 -0
- package/dist/ip-prefix.d.ts.map +1 -0
- package/dist/ip-prefix.js +225 -0
- package/dist/ip-prefix.js.map +1 -0
- 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/limits.d.ts +11 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +11 -0
- package/dist/limits.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 +3 -3
- package/dist/platform.js +3 -3
- 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 +2 -1
- package/dist/switches.js.map +1 -1
- package/dist/verified-signup.d.ts +24 -0
- package/dist/verified-signup.d.ts.map +1 -0
- package/dist/verified-signup.js +58 -0
- package/dist/verified-signup.js.map +1 -0
- 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
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why a moderator turned down an owner-uploaded image. The API stores the
|
|
3
|
+
* stable `code`; the label is looked up when it is shown, so its wording
|
|
4
|
+
* can change without touching stored rows. Labels are written for the app
|
|
5
|
+
* owner, who reads them on their app's Settings page.
|
|
6
|
+
*/
|
|
7
|
+
export type ImageKind = "icon" | "preview";
|
|
8
|
+
export declare const IMAGE_REJECTION_REASONS: readonly [{
|
|
9
|
+
readonly code: "not_screenshot";
|
|
10
|
+
readonly label: "Not a screenshot of the app (logo or marketing image)";
|
|
11
|
+
readonly kinds: readonly ["preview"];
|
|
12
|
+
}, {
|
|
13
|
+
readonly code: "login_or_empty";
|
|
14
|
+
readonly label: "Shows only a login or empty screen";
|
|
15
|
+
readonly kinds: readonly ["preview"];
|
|
16
|
+
}, {
|
|
17
|
+
readonly code: "personal_data";
|
|
18
|
+
readonly label: "Contains personal data";
|
|
19
|
+
readonly kinds: readonly ["icon", "preview"];
|
|
20
|
+
}, {
|
|
21
|
+
readonly code: "unreadable";
|
|
22
|
+
readonly label: "Too small or unreadable";
|
|
23
|
+
readonly kinds: readonly ["icon", "preview"];
|
|
24
|
+
}, {
|
|
25
|
+
readonly code: "mismatch";
|
|
26
|
+
readonly label: "Does not match the app";
|
|
27
|
+
readonly kinds: readonly ["icon", "preview"];
|
|
28
|
+
}, {
|
|
29
|
+
readonly code: "aup";
|
|
30
|
+
readonly label: "Breaks the Acceptable Use Policy";
|
|
31
|
+
readonly kinds: readonly ["icon", "preview"];
|
|
32
|
+
}];
|
|
33
|
+
export type ImageRejectionCode = (typeof IMAGE_REJECTION_REASONS)[number]["code"];
|
|
34
|
+
/** The longest moderator note (or legacy free-text reason) the API stores. */
|
|
35
|
+
export declare const IMAGE_REJECTION_NOTE_MAX = 280;
|
|
36
|
+
/** The reasons a moderator may pick for this kind of image, in display order. */
|
|
37
|
+
export declare function imageRejectionReasons(kind: ImageKind): {
|
|
38
|
+
code: ImageRejectionCode;
|
|
39
|
+
label: string;
|
|
40
|
+
}[];
|
|
41
|
+
/** The owner-facing label for a stored code; null for an unknown or absent code. */
|
|
42
|
+
export declare function imageRejectionLabel(code: string | null | undefined): string | null;
|
|
43
|
+
/** True when `code` is a reason a moderator may pick for this kind of image. */
|
|
44
|
+
export declare function isImageRejectionCode(kind: ImageKind, code: unknown): code is ImageRejectionCode;
|
|
45
|
+
//# sourceMappingURL=image-rejection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-rejection.d.ts","sourceRoot":"","sources":["../src/image-rejection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3C,eAAO,MAAM,uBAAuB;mBAE1B,gBAAgB;oBACf,uDAAuD;;;mBAGxD,gBAAgB;oBAAS,oCAAoC;;;mBAC7D,eAAe;oBAAS,wBAAwB;;;mBAChD,YAAY;oBAAS,yBAAyB;;;mBAC9C,UAAU;oBAAS,wBAAwB;;;mBAC3C,KAAK;oBAAS,kCAAkC;;EACkC,CAAC;AAE7F,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,GACd;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAI/C;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAElF;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAE/F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const IMAGE_REJECTION_REASONS = [
|
|
2
|
+
{
|
|
3
|
+
code: "not_screenshot",
|
|
4
|
+
label: "Not a screenshot of the app (logo or marketing image)",
|
|
5
|
+
kinds: ["preview"],
|
|
6
|
+
},
|
|
7
|
+
{ code: "login_or_empty", label: "Shows only a login or empty screen", kinds: ["preview"] },
|
|
8
|
+
{ code: "personal_data", label: "Contains personal data", kinds: ["icon", "preview"] },
|
|
9
|
+
{ code: "unreadable", label: "Too small or unreadable", kinds: ["icon", "preview"] },
|
|
10
|
+
{ code: "mismatch", label: "Does not match the app", kinds: ["icon", "preview"] },
|
|
11
|
+
{ code: "aup", label: "Breaks the Acceptable Use Policy", kinds: ["icon", "preview"] },
|
|
12
|
+
];
|
|
13
|
+
/** The longest moderator note (or legacy free-text reason) the API stores. */
|
|
14
|
+
export const IMAGE_REJECTION_NOTE_MAX = 280;
|
|
15
|
+
/** The reasons a moderator may pick for this kind of image, in display order. */
|
|
16
|
+
export function imageRejectionReasons(kind) {
|
|
17
|
+
return IMAGE_REJECTION_REASONS.filter((r) => r.kinds.includes(kind)).map(({ code, label }) => ({ code, label }));
|
|
18
|
+
}
|
|
19
|
+
/** The owner-facing label for a stored code; null for an unknown or absent code. */
|
|
20
|
+
export function imageRejectionLabel(code) {
|
|
21
|
+
return IMAGE_REJECTION_REASONS.find((r) => r.code === code)?.label ?? null;
|
|
22
|
+
}
|
|
23
|
+
/** True when `code` is a reason a moderator may pick for this kind of image. */
|
|
24
|
+
export function isImageRejectionCode(kind, code) {
|
|
25
|
+
return imageRejectionReasons(kind).some((r) => r.code === code);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=image-rejection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-rejection.js","sourceRoot":"","sources":["../src/image-rejection.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,uDAAuD;QAC9D,KAAK,EAAE,CAAC,SAAS,CAAC;KACnB;IACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;IAC3F,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IACtF,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IACpF,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IACjF,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;CACI,CAAC;AAI7F,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CACnC,IAAe;IAEf,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,KAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjD,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,IAA+B;IACjE,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,IAAe,EAAE,IAAa;IACjE,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,22 +3,34 @@ export { BILLING_TEST_ACCOUNTS_ENV, isBillingTestAccount, parseBillingTestAccoun
|
|
|
3
3
|
export { BRAND, ICON_COLOURS, type IconColourKey, iconColourHex } from "./brand.js";
|
|
4
4
|
export { CLIENT_IP_ATTESTATION_MAX_SKEW_MS, CLIENT_IP_ATTESTATION_VERSION, CLIENT_IP_HEADER, CLIENT_IP_MAX_LENGTH, CLIENT_IP_PROOF_HEADER, type ClientIpAttestationParts, clientIpAttestationPayload, formatClientIpProof, parseClientIpProof, } from "./client-ip-attestation.js";
|
|
5
5
|
export { crashAssistantPrompt } from "./crash-prompt.js";
|
|
6
|
+
export { type DataExpressionErrorReason, type DataExpressionResult, type DataQueryInvalidExtra, type DataSchemaField, parseDataFields, parseDataFilter, parseDataSort, } from "./data-filter.js";
|
|
7
|
+
export { DATA_ACCESS_MODES, DATA_ACCESS_SCOPES, DATA_ACCESS_SETTER_ERROR_STATUS, DATA_ACT_AS_UNAVAILABLE_REASONS, DATA_ACTING_AS, DATA_COLLECTION_RE, DATA_IDENTITY_KINDS, DATA_IDENTITY_LABEL_FIELD_TYPES, DATA_IDENTITY_LABELS, DATA_LIMITS, DATA_NOT_RUNNING_REASONS, DATA_RATE_LIMIT_SOURCES, DATA_RECORD_ERROR_STATUS, DATA_RECORD_ID_RE, DATA_RULE_CLASSES, DATA_RULE_DENIED_REASONS, DATA_RULE_OPS, type DataAccess, type DataAccessMode, type DataAccessNoticePayload, type DataAccessScope, type DataAccessSet, type DataAccessSetterErrorCode, type DataAccessUpdate, type DataActAsUnavailableExtra, type DataActAsUnavailableReason, type DataActingAs, type DataCollectionAccess, type DataCollectionSummary, type DataConflictExtra, type DataCreateInput, type DataFieldSummary, type DataIdentity, type DataIdentityCandidatesRequest, type DataIdentityCandidatesResponse, type DataIdentityCollection, type DataIdentityLabelFieldType, type DataNotRunningReason, type DataPaginatedRecords, type DataQueryOptions, type DataRateLimitedExtra, type DataRateLimitSource, type DataRecord, type DataRecordErrorCode, type DataRuleClass, type DataRuleDeniedExtra, type DataRuleDeniedReason, type DataRuleOp, type DataSchemaResponse, type DataTokenAccessNoticePayload, type DataTokenAccessRow, type DataTokenAccessUpdate, type DataUpdateInput, type DataValidationFields, type OAuthGrantsDataTools, } from "./data-records.js";
|
|
8
|
+
export { type DeploymentSecurityAction, type DeploymentSecurityBlock, type DeploymentSecurityFinding, decodeDeploymentSecurityBlock, deploymentSecurityActionText, deploymentSecurityRecoveryPrompt, deploymentSecuritySummary, parseDeploymentSecurityBlock, type SecurityScanFailureCode, } from "./deployment-security.js";
|
|
9
|
+
export { disposableDomainCount, isDisposableEmailDomain } from "./disposable-email-domains.js";
|
|
6
10
|
export { DOMAIN_RE } from "./domain-name.js";
|
|
11
|
+
export { EMAIL_BUDGET_LIMITS, EMAIL_BUDGET_SCHEMA, EmailBudget, type EmailBudgetConnection, type EmailCategory, } from "./email-budget.js";
|
|
12
|
+
export { EMAIL_CHANGE_LINK_LIFETIME_SECONDS, EMAIL_CHANGE_SCHEMA } from "./email-change.js";
|
|
13
|
+
export { EMAIL_BRAND_HEADER, emailNotificationSettingsUrl, renderEmail } from "./email-template.js";
|
|
7
14
|
export { ENV_MASK, isMaskedEnvValue, maskEnvValue } from "./env-mask.js";
|
|
8
15
|
export { ENV_NAME_RE } from "./env-name.js";
|
|
9
16
|
export { escapeHtml } from "./escape-html.js";
|
|
17
|
+
export { IMAGE_REJECTION_NOTE_MAX, IMAGE_REJECTION_REASONS, type ImageKind, type ImageRejectionCode, imageRejectionLabel, imageRejectionReasons, isImageRejectionCode, } from "./image-rejection.js";
|
|
10
18
|
export { INTERNAL_SIG_HEADER, INTERNAL_SIG_MAX_SKEW_MS, INTERNAL_SIG_VERSION, INTERNAL_TS_HEADER, type InternalSigParts, internalSigPayload, } from "./internal-sig.js";
|
|
19
|
+
export { ipSubnetKey, parseIpAddress } from "./ip-prefix.js";
|
|
11
20
|
export { CURRENT_TERMS_VERSION, LEGAL_DOCUMENT_HASHES, LEGAL_DOCUMENT_LAST_UPDATED, LEGAL_DOCUMENT_VERSIONS, type TermsAcceptanceEvidence, } from "./legal.js";
|
|
12
21
|
export { canonicalLegalChangeJson, compareVersions, declaredVersion, LEGAL_CHANGE_ID_PATTERN, LEGAL_CHANGES, LEGAL_VERSION_PATTERN, type LegalChange, type LegalChangeDocument, type LegalChangeEnforcement, type LegalChangeReason, type LegalDocumentKey, MATERIAL_CHANGE_NOTICE_MS, openMaterialChanges, pendingAcknowledgement, SIGNUP_DISCLOSURE_HEADER, } from "./legal-changes.js";
|
|
13
|
-
export { MAX_ANON_TARBALL_BYTES, MAX_INLINE_PUBLISH_BYTES, MAX_OPEN_UPLOAD_SESSIONS_PER_USER, MAX_TARBALL_BYTES, MAX_UPLOAD_CHUNK_BYTES, MAX_UPLOAD_SESSION_FILES, MIN_UPLOAD_CHUNK_BYTES, UPLOAD_SESSION_MAX_LIFETIME_MS, UPLOAD_SESSION_TTL_MS, } from "./limits.js";
|
|
22
|
+
export { MAX_ANON_TARBALL_BYTES, MAX_INLINE_PUBLISH_BYTES, MAX_OPEN_UPLOAD_SESSIONS_PER_USER, MAX_TARBALL_BYTES, MAX_UPLOAD_CHUNK_BYTES, MAX_UPLOAD_SESSION_FILES, MFA_MANAGEMENT_SECONDS, MIN_UPLOAD_CHUNK_BYTES, STAFF_MFA_PROOF_SECONDS, UPLOAD_SESSION_MAX_LIFETIME_MS, UPLOAD_SESSION_TTL_MS, } from "./limits.js";
|
|
14
23
|
export { MAX_LOG_SEARCH_LENGTH } from "./logs.js";
|
|
15
24
|
export { MAX_OAUTH_CLIENT_NAME_DISPLAY_CODE_POINTS, normaliseOAuthClientName, } from "./oauth-client-name.js";
|
|
16
|
-
export { describeOAuthScope, OAUTH_SCOPE_LABELS, parseOAuthScopes } from "./oauth-scopes.js";
|
|
25
|
+
export { DATA_ACCESS_MODE_LABELS, describeOAuthScope, OAUTH_SCOPE_LABELS, parseOAuthScopes, } from "./oauth-scopes.js";
|
|
17
26
|
export { DEFAULT_DOMAIN_SUFFIX, DEFAULT_MCP_HTTP_PORT, DEFAULT_POCKETBASE_IMAGE, MCP_TOOL_COUNT_HOSTED, MCP_TOOL_COUNT_LOCAL, } from "./platform.js";
|
|
18
27
|
export { canonicalInjectedKey, isPercherInjected, PERCHER_INJECTED_ENV_KEYS, } from "./platform-env.js";
|
|
19
28
|
export { DEFAULT_NODE_VERSION_LABEL, DEFAULT_NODE_VERSION_MAJOR } from "./runtime.js";
|
|
29
|
+
export { parseSignupCapacity, SIGNUP_CAPACITY_MAX_AGE_MS, SIGNUP_CAPACITY_MESSAGE, type SignupCapacityReason, type SignupCapacityState, } from "./signup-capacity.js";
|
|
30
|
+
export { signupDayWindow } from "./signup-day.js";
|
|
20
31
|
export { normalizeSignupInviteCode, SIGNUP_INVITE_CODE_ALPHABET, SIGNUP_INVITE_CODE_LENGTH, SIGNUP_INVITE_CODE_PREFIX, SIGNUP_INVITE_HEADER, } from "./signup-invite.js";
|
|
21
32
|
export { assertValidSwitches, type BooleanSwitch, type EnumSwitch, type PresenceSwitch, reportSwitches, SWITCH_BY_NAME, SWITCHES, type SwitchReader, type SwitchReport, type SwitchSpec, type SwitchState, switchEnabled, switchState, switchValue, } from "./switches.js";
|
|
22
33
|
export { BUN_MAX_IDLE_TIMEOUT_SECONDS, HTTP_IDLE_TIMEOUT_SECONDS, type HttpIdleTimeoutSurface, TIMEOUTS, type TimeoutKey, } from "./timeouts.js";
|
|
34
|
+
export { chargeVerifiedSignup, initializeVerifiedSignupCutover, type SignupQuotaConnection, VerifiedSignupLimitError, verifiedSignupQuota, } from "./verified-signup.js";
|
|
23
35
|
export { WAITLIST_THROTTLE_WINDOW_MS } from "./waitlist.js";
|
|
24
36
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,iCAAiC,EACjC,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EACL,yCAAyC,EACzC,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,+BAA+B,EAC/B,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,+BAA+B,EAC/B,oBAAoB,EACpB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,iCAAiC,EACjC,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EACL,yCAAyC,EACzC,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,KAAK,sBAAsB,EAC3B,QAAQ,EACR,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,+BAA+B,EAC/B,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,22 +3,34 @@ export { BILLING_TEST_ACCOUNTS_ENV, isBillingTestAccount, parseBillingTestAccoun
|
|
|
3
3
|
export { BRAND, ICON_COLOURS, iconColourHex } from "./brand.js";
|
|
4
4
|
export { CLIENT_IP_ATTESTATION_MAX_SKEW_MS, CLIENT_IP_ATTESTATION_VERSION, CLIENT_IP_HEADER, CLIENT_IP_MAX_LENGTH, CLIENT_IP_PROOF_HEADER, clientIpAttestationPayload, formatClientIpProof, parseClientIpProof, } from "./client-ip-attestation.js";
|
|
5
5
|
export { crashAssistantPrompt } from "./crash-prompt.js";
|
|
6
|
+
export { parseDataFields, parseDataFilter, parseDataSort, } from "./data-filter.js";
|
|
7
|
+
export { DATA_ACCESS_MODES, DATA_ACCESS_SCOPES, DATA_ACCESS_SETTER_ERROR_STATUS, DATA_ACT_AS_UNAVAILABLE_REASONS, DATA_ACTING_AS, DATA_COLLECTION_RE, DATA_IDENTITY_KINDS, DATA_IDENTITY_LABEL_FIELD_TYPES, DATA_IDENTITY_LABELS, DATA_LIMITS, DATA_NOT_RUNNING_REASONS, DATA_RATE_LIMIT_SOURCES, DATA_RECORD_ERROR_STATUS, DATA_RECORD_ID_RE, DATA_RULE_CLASSES, DATA_RULE_DENIED_REASONS, DATA_RULE_OPS, } from "./data-records.js";
|
|
8
|
+
export { decodeDeploymentSecurityBlock, deploymentSecurityActionText, deploymentSecurityRecoveryPrompt, deploymentSecuritySummary, parseDeploymentSecurityBlock, } from "./deployment-security.js";
|
|
9
|
+
export { disposableDomainCount, isDisposableEmailDomain } from "./disposable-email-domains.js";
|
|
6
10
|
export { DOMAIN_RE } from "./domain-name.js";
|
|
11
|
+
export { EMAIL_BUDGET_LIMITS, EMAIL_BUDGET_SCHEMA, EmailBudget, } from "./email-budget.js";
|
|
12
|
+
export { EMAIL_CHANGE_LINK_LIFETIME_SECONDS, EMAIL_CHANGE_SCHEMA } from "./email-change.js";
|
|
13
|
+
export { EMAIL_BRAND_HEADER, emailNotificationSettingsUrl, renderEmail } from "./email-template.js";
|
|
7
14
|
export { ENV_MASK, isMaskedEnvValue, maskEnvValue } from "./env-mask.js";
|
|
8
15
|
export { ENV_NAME_RE } from "./env-name.js";
|
|
9
16
|
export { escapeHtml } from "./escape-html.js";
|
|
17
|
+
export { IMAGE_REJECTION_NOTE_MAX, IMAGE_REJECTION_REASONS, imageRejectionLabel, imageRejectionReasons, isImageRejectionCode, } from "./image-rejection.js";
|
|
10
18
|
export { INTERNAL_SIG_HEADER, INTERNAL_SIG_MAX_SKEW_MS, INTERNAL_SIG_VERSION, INTERNAL_TS_HEADER, internalSigPayload, } from "./internal-sig.js";
|
|
19
|
+
export { ipSubnetKey, parseIpAddress } from "./ip-prefix.js";
|
|
11
20
|
export { CURRENT_TERMS_VERSION, LEGAL_DOCUMENT_HASHES, LEGAL_DOCUMENT_LAST_UPDATED, LEGAL_DOCUMENT_VERSIONS, } from "./legal.js";
|
|
12
21
|
export { canonicalLegalChangeJson, compareVersions, declaredVersion, LEGAL_CHANGE_ID_PATTERN, LEGAL_CHANGES, LEGAL_VERSION_PATTERN, MATERIAL_CHANGE_NOTICE_MS, openMaterialChanges, pendingAcknowledgement, SIGNUP_DISCLOSURE_HEADER, } from "./legal-changes.js";
|
|
13
|
-
export { MAX_ANON_TARBALL_BYTES, MAX_INLINE_PUBLISH_BYTES, MAX_OPEN_UPLOAD_SESSIONS_PER_USER, MAX_TARBALL_BYTES, MAX_UPLOAD_CHUNK_BYTES, MAX_UPLOAD_SESSION_FILES, MIN_UPLOAD_CHUNK_BYTES, UPLOAD_SESSION_MAX_LIFETIME_MS, UPLOAD_SESSION_TTL_MS, } from "./limits.js";
|
|
22
|
+
export { MAX_ANON_TARBALL_BYTES, MAX_INLINE_PUBLISH_BYTES, MAX_OPEN_UPLOAD_SESSIONS_PER_USER, MAX_TARBALL_BYTES, MAX_UPLOAD_CHUNK_BYTES, MAX_UPLOAD_SESSION_FILES, MFA_MANAGEMENT_SECONDS, MIN_UPLOAD_CHUNK_BYTES, STAFF_MFA_PROOF_SECONDS, UPLOAD_SESSION_MAX_LIFETIME_MS, UPLOAD_SESSION_TTL_MS, } from "./limits.js";
|
|
14
23
|
export { MAX_LOG_SEARCH_LENGTH } from "./logs.js";
|
|
15
24
|
export { MAX_OAUTH_CLIENT_NAME_DISPLAY_CODE_POINTS, normaliseOAuthClientName, } from "./oauth-client-name.js";
|
|
16
|
-
export { describeOAuthScope, OAUTH_SCOPE_LABELS, parseOAuthScopes } from "./oauth-scopes.js";
|
|
25
|
+
export { DATA_ACCESS_MODE_LABELS, describeOAuthScope, OAUTH_SCOPE_LABELS, parseOAuthScopes, } from "./oauth-scopes.js";
|
|
17
26
|
export { DEFAULT_DOMAIN_SUFFIX, DEFAULT_MCP_HTTP_PORT, DEFAULT_POCKETBASE_IMAGE, MCP_TOOL_COUNT_HOSTED, MCP_TOOL_COUNT_LOCAL, } from "./platform.js";
|
|
18
27
|
export { canonicalInjectedKey, isPercherInjected, PERCHER_INJECTED_ENV_KEYS, } from "./platform-env.js";
|
|
19
28
|
export { DEFAULT_NODE_VERSION_LABEL, DEFAULT_NODE_VERSION_MAJOR } from "./runtime.js";
|
|
29
|
+
export { parseSignupCapacity, SIGNUP_CAPACITY_MAX_AGE_MS, SIGNUP_CAPACITY_MESSAGE, } from "./signup-capacity.js";
|
|
30
|
+
export { signupDayWindow } from "./signup-day.js";
|
|
20
31
|
export { normalizeSignupInviteCode, SIGNUP_INVITE_CODE_ALPHABET, SIGNUP_INVITE_CODE_LENGTH, SIGNUP_INVITE_CODE_PREFIX, SIGNUP_INVITE_HEADER, } from "./signup-invite.js";
|
|
21
32
|
export { assertValidSwitches, reportSwitches, SWITCH_BY_NAME, SWITCHES, switchEnabled, switchState, switchValue, } from "./switches.js";
|
|
22
33
|
export { BUN_MAX_IDLE_TIMEOUT_SECONDS, HTTP_IDLE_TIMEOUT_SECONDS, TIMEOUTS, } from "./timeouts.js";
|
|
34
|
+
export { chargeVerifiedSignup, initializeVerifiedSignupCutover, VerifiedSignupLimitError, verifiedSignupQuota, } from "./verified-signup.js";
|
|
23
35
|
export { WAITLIST_THROTTLE_WINDOW_MS } from "./waitlist.js";
|
|
24
36
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAsB,aAAa,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EAEtB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAElB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,GAExB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EAMrB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,iCAAiC,EACjC,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EACL,yCAAyC,EACzC,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/internal-sig.d.ts
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* window, and the raw secret never has to ride on the wire once enforce is on.
|
|
9
9
|
*
|
|
10
10
|
* This module is the single source of truth for the canonical string both sides
|
|
11
|
-
* HMAC, so the API verifier and every signer (the dashboard
|
|
12
|
-
*
|
|
11
|
+
* HMAC, so the API verifier and every signer (the dashboard and the external
|
|
12
|
+
* security runner, per the security-ingest contract in docs/integrations) can't drift. It
|
|
13
13
|
* is dependency-free on purpose — no crypto here — so it bundles cleanly into the
|
|
14
14
|
* dashboard (Node) as well as the API (Bun). Each side wraps it with its own
|
|
15
15
|
* `node:crypto` HMAC.
|
package/dist/internal-sig.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* window, and the raw secret never has to ride on the wire once enforce is on.
|
|
9
9
|
*
|
|
10
10
|
* This module is the single source of truth for the canonical string both sides
|
|
11
|
-
* HMAC, so the API verifier and every signer (the dashboard
|
|
12
|
-
*
|
|
11
|
+
* HMAC, so the API verifier and every signer (the dashboard and the external
|
|
12
|
+
* security runner, per the security-ingest contract in docs/integrations) can't drift. It
|
|
13
13
|
* is dependency-free on purpose — no crypto here — so it bundles cleanly into the
|
|
14
14
|
* dashboard (Node) as well as the API (Bun). Each side wraps it with its own
|
|
15
15
|
* `node:crypto` HMAC.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary IP parsing and subnet-prefix keying.
|
|
3
|
+
*
|
|
4
|
+
* Any limit keyed on "the network this request came from" needs the address
|
|
5
|
+
* reduced to a prefix, and that reduction has to happen on BYTES. The textual
|
|
6
|
+
* form of an IPv6 address is not positional: "2001:db8::1" and
|
|
7
|
+
* "2001:0db8:0000:0000:0000:0000:0000:0001" are the same address, and
|
|
8
|
+
* "2001::abcd:1" has its hextets in entirely different places than a naive
|
|
9
|
+
* split(":") suggests. Masking by slicing the text therefore puts one address
|
|
10
|
+
* in several buckets and unrelated addresses in one — which is exactly the
|
|
11
|
+
* evasion a subnet key exists to prevent.
|
|
12
|
+
*/
|
|
13
|
+
/** A parsed address as raw bytes: 4 for IPv4, 16 for IPv6. */
|
|
14
|
+
export type ParsedIp = {
|
|
15
|
+
family: 4;
|
|
16
|
+
bytes: Uint8Array;
|
|
17
|
+
} | {
|
|
18
|
+
family: 6;
|
|
19
|
+
bytes: Uint8Array;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Parse an address to bytes, or null if it is not one.
|
|
23
|
+
*
|
|
24
|
+
* An IPv6 zone id ("fe80::1%eth0") is dropped — it names a local interface,
|
|
25
|
+
* not a different host. An IPv4-mapped address ("::ffff:203.0.113.7") is
|
|
26
|
+
* returned as the IPv4 it carries, so one client cannot occupy two buckets by
|
|
27
|
+
* choosing a spelling, and so every mapped client does not collapse into one
|
|
28
|
+
* shared bucket.
|
|
29
|
+
*
|
|
30
|
+
* Brackets and zone ids belong to IPv6 alone, so "[1.2.3.4]" and
|
|
31
|
+
* "1.2.3.4%eth0" are rejected rather than quietly read as IPv4 — this decides
|
|
32
|
+
* whether a caller is refused or filed under a real network, and a spelling no
|
|
33
|
+
* address ever has means a caller we cannot key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseIpAddress(ip: string): ParsedIp | null;
|
|
36
|
+
/**
|
|
37
|
+
* Collapse an address to its subnet key, e.g. "203.0.113.0/24" or
|
|
38
|
+
* "2001:db8:1::/48". Returns null for anything that is not an address, so a
|
|
39
|
+
* caller that must not guess (an admission cap) can refuse, while one with a
|
|
40
|
+
* safe fallback (a rate limiter) can bucket the raw string instead.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ipSubnetKey(ip: string, v4Bits: number, v6Bits: number): string | null;
|
|
43
|
+
//# sourceMappingURL=ip-prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-prefix.d.ts","sourceRoot":"","sources":["../src/ip-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AA+F3F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAyB1D;AAmDD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrF"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary IP parsing and subnet-prefix keying.
|
|
3
|
+
*
|
|
4
|
+
* Any limit keyed on "the network this request came from" needs the address
|
|
5
|
+
* reduced to a prefix, and that reduction has to happen on BYTES. The textual
|
|
6
|
+
* form of an IPv6 address is not positional: "2001:db8::1" and
|
|
7
|
+
* "2001:0db8:0000:0000:0000:0000:0000:0001" are the same address, and
|
|
8
|
+
* "2001::abcd:1" has its hextets in entirely different places than a naive
|
|
9
|
+
* split(":") suggests. Masking by slicing the text therefore puts one address
|
|
10
|
+
* in several buckets and unrelated addresses in one — which is exactly the
|
|
11
|
+
* evasion a subnet key exists to prevent.
|
|
12
|
+
*/
|
|
13
|
+
const HEXTET_RE = /^[0-9a-fA-F]{1,4}$/;
|
|
14
|
+
const OCTET_RE = /^\d{1,3}$/;
|
|
15
|
+
/** Zone id characters we accept (RFC 4007 scope zones as they are actually
|
|
16
|
+
* written: an interface name or an index). Deliberately narrow — the zone is
|
|
17
|
+
* discarded, so anything unusual here is a spelling no address has — and this
|
|
18
|
+
* module's boundary is that such a caller is refused rather than filed under
|
|
19
|
+
* somebody's network. */
|
|
20
|
+
const ZONE_RE = /^[0-9A-Za-z._~-]+$/;
|
|
21
|
+
function parseIpv4Bytes(text) {
|
|
22
|
+
const parts = text.split(".");
|
|
23
|
+
if (parts.length !== 4)
|
|
24
|
+
return null;
|
|
25
|
+
const bytes = new Uint8Array(4);
|
|
26
|
+
for (let i = 0; i < 4; i++) {
|
|
27
|
+
const part = parts[i];
|
|
28
|
+
// Leading zeros are rejected rather than parsed: "010" is 8 in one
|
|
29
|
+
// reading and 10 in another, and two readings of one address are two
|
|
30
|
+
// buckets. Canonical spellings only, same as node's net.isIP.
|
|
31
|
+
if (!OCTET_RE.test(part) || (part.length > 1 && part.startsWith("0")))
|
|
32
|
+
return null;
|
|
33
|
+
const n = Number(part);
|
|
34
|
+
if (n > 255)
|
|
35
|
+
return null;
|
|
36
|
+
bytes[i] = n;
|
|
37
|
+
}
|
|
38
|
+
return bytes;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Read one side of a "::" split into 16-bit groups, or null if any token is
|
|
42
|
+
* not a legal hextet.
|
|
43
|
+
*
|
|
44
|
+
* `allowEmbeddedIpv4` is only true for the side that ends the whole address:
|
|
45
|
+
* an embedded dotted quad occupies the last 32 bits, so "192.0.2.1::" and
|
|
46
|
+
* "1:192.0.2.1::" are not addresses. Accepting them mapped them onto real
|
|
47
|
+
* prefixes ("192.0.2.1::" landed in c000:201::/56), which is worse than
|
|
48
|
+
* rejecting them — a caller that cannot be keyed must be refused, not filed
|
|
49
|
+
* under somebody else's network.
|
|
50
|
+
*/
|
|
51
|
+
function groupsFrom(part, allowEmbeddedIpv4) {
|
|
52
|
+
if (part === "")
|
|
53
|
+
return [];
|
|
54
|
+
const tokens = part.split(":");
|
|
55
|
+
const groups = [];
|
|
56
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
57
|
+
const token = tokens[i];
|
|
58
|
+
if (token.includes(".")) {
|
|
59
|
+
if (!allowEmbeddedIpv4 || i !== tokens.length - 1)
|
|
60
|
+
return null;
|
|
61
|
+
const v4 = parseIpv4Bytes(token);
|
|
62
|
+
if (!v4)
|
|
63
|
+
return null;
|
|
64
|
+
groups.push((v4[0] << 8) | v4[1]);
|
|
65
|
+
groups.push((v4[2] << 8) | v4[3]);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (!HEXTET_RE.test(token))
|
|
69
|
+
return null;
|
|
70
|
+
groups.push(Number.parseInt(token, 16));
|
|
71
|
+
}
|
|
72
|
+
return groups;
|
|
73
|
+
}
|
|
74
|
+
function parseIpv6Bytes(text) {
|
|
75
|
+
const halves = text.split("::");
|
|
76
|
+
if (halves.length > 2)
|
|
77
|
+
return null;
|
|
78
|
+
// With no "::" the single side ends the address; with one, the tail does —
|
|
79
|
+
// even when the tail is empty, which is what makes "192.0.2.1::" invalid.
|
|
80
|
+
const head = groupsFrom(halves[0], halves.length === 1);
|
|
81
|
+
if (!head)
|
|
82
|
+
return null;
|
|
83
|
+
let groups;
|
|
84
|
+
if (halves.length === 1) {
|
|
85
|
+
if (head.length !== 8)
|
|
86
|
+
return null;
|
|
87
|
+
groups = head;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const tail = groupsFrom(halves[1], true);
|
|
91
|
+
if (!tail)
|
|
92
|
+
return null;
|
|
93
|
+
// "::" must stand for at least one zero group, so a full 8 either side
|
|
94
|
+
// of it is not a valid spelling of an address.
|
|
95
|
+
const gap = 8 - head.length - tail.length;
|
|
96
|
+
if (gap < 1)
|
|
97
|
+
return null;
|
|
98
|
+
groups = [...head, ...new Array(gap).fill(0), ...tail];
|
|
99
|
+
}
|
|
100
|
+
const bytes = new Uint8Array(16);
|
|
101
|
+
for (let i = 0; i < 8; i++) {
|
|
102
|
+
const g = groups[i];
|
|
103
|
+
bytes[i * 2] = g >> 8;
|
|
104
|
+
bytes[i * 2 + 1] = g & 0xff;
|
|
105
|
+
}
|
|
106
|
+
return bytes;
|
|
107
|
+
}
|
|
108
|
+
function isIpv4Mapped(bytes) {
|
|
109
|
+
for (let i = 0; i < 10; i++)
|
|
110
|
+
if (bytes[i] !== 0)
|
|
111
|
+
return false;
|
|
112
|
+
return bytes[10] === 0xff && bytes[11] === 0xff;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Parse an address to bytes, or null if it is not one.
|
|
116
|
+
*
|
|
117
|
+
* An IPv6 zone id ("fe80::1%eth0") is dropped — it names a local interface,
|
|
118
|
+
* not a different host. An IPv4-mapped address ("::ffff:203.0.113.7") is
|
|
119
|
+
* returned as the IPv4 it carries, so one client cannot occupy two buckets by
|
|
120
|
+
* choosing a spelling, and so every mapped client does not collapse into one
|
|
121
|
+
* shared bucket.
|
|
122
|
+
*
|
|
123
|
+
* Brackets and zone ids belong to IPv6 alone, so "[1.2.3.4]" and
|
|
124
|
+
* "1.2.3.4%eth0" are rejected rather than quietly read as IPv4 — this decides
|
|
125
|
+
* whether a caller is refused or filed under a real network, and a spelling no
|
|
126
|
+
* address ever has means a caller we cannot key.
|
|
127
|
+
*/
|
|
128
|
+
export function parseIpAddress(ip) {
|
|
129
|
+
if (!ip)
|
|
130
|
+
return null;
|
|
131
|
+
let text = ip.trim();
|
|
132
|
+
const bracketed = text.startsWith("[") && text.endsWith("]");
|
|
133
|
+
if (bracketed)
|
|
134
|
+
text = text.slice(1, -1);
|
|
135
|
+
const zone = text.indexOf("%");
|
|
136
|
+
const zoned = zone !== -1;
|
|
137
|
+
if (zoned) {
|
|
138
|
+
// The zone is discarded, so it was previously taken on trust — which let
|
|
139
|
+
// "fe80::1%a%b", "fe80::1%a b" and a zone full of control characters all
|
|
140
|
+
// parse as fe80::1. They reach no wrong bucket, but they are not addresses.
|
|
141
|
+
if (!ZONE_RE.test(text.slice(zone + 1)))
|
|
142
|
+
return null;
|
|
143
|
+
text = text.slice(0, zone);
|
|
144
|
+
}
|
|
145
|
+
if (!text)
|
|
146
|
+
return null;
|
|
147
|
+
if (!text.includes(":")) {
|
|
148
|
+
if (bracketed || zoned)
|
|
149
|
+
return null;
|
|
150
|
+
const v4 = parseIpv4Bytes(text);
|
|
151
|
+
return v4 ? { family: 4, bytes: v4 } : null;
|
|
152
|
+
}
|
|
153
|
+
const v6 = parseIpv6Bytes(text);
|
|
154
|
+
if (!v6)
|
|
155
|
+
return null;
|
|
156
|
+
if (isIpv4Mapped(v6))
|
|
157
|
+
return { family: 4, bytes: v6.slice(12) };
|
|
158
|
+
return { family: 6, bytes: v6 };
|
|
159
|
+
}
|
|
160
|
+
function maskBytes(bytes, bits) {
|
|
161
|
+
const out = new Uint8Array(bytes.length);
|
|
162
|
+
const wholeBytes = bits >> 3;
|
|
163
|
+
out.set(bytes.subarray(0, wholeBytes));
|
|
164
|
+
const remainder = bits & 7;
|
|
165
|
+
if (remainder > 0 && wholeBytes < bytes.length) {
|
|
166
|
+
out[wholeBytes] = bytes[wholeBytes] & (0xff << (8 - remainder));
|
|
167
|
+
}
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
/** Render IPv6 bytes in the canonical RFC 5952 form: lowercase, no leading
|
|
171
|
+
* zeros, the longest run of zero groups (leftmost on a tie) compressed. */
|
|
172
|
+
function formatIpv6(bytes) {
|
|
173
|
+
const groups = [];
|
|
174
|
+
for (let i = 0; i < 16; i += 2) {
|
|
175
|
+
groups.push((bytes[i] << 8) | bytes[i + 1]);
|
|
176
|
+
}
|
|
177
|
+
let bestStart = -1;
|
|
178
|
+
let bestLen = 0;
|
|
179
|
+
let runStart = -1;
|
|
180
|
+
let runLen = 0;
|
|
181
|
+
for (let i = 0; i < 8; i++) {
|
|
182
|
+
if (groups[i] === 0) {
|
|
183
|
+
if (runStart < 0) {
|
|
184
|
+
runStart = i;
|
|
185
|
+
runLen = 0;
|
|
186
|
+
}
|
|
187
|
+
runLen++;
|
|
188
|
+
if (runLen > bestLen) {
|
|
189
|
+
bestLen = runLen;
|
|
190
|
+
bestStart = runStart;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
runStart = -1;
|
|
195
|
+
runLen = 0;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const hex = (g) => g.toString(16);
|
|
199
|
+
// A single zero group is written out; "::" stands for two or more.
|
|
200
|
+
if (bestLen < 2)
|
|
201
|
+
return groups.map(hex).join(":");
|
|
202
|
+
const head = groups.slice(0, bestStart).map(hex).join(":");
|
|
203
|
+
const tail = groups
|
|
204
|
+
.slice(bestStart + bestLen)
|
|
205
|
+
.map(hex)
|
|
206
|
+
.join(":");
|
|
207
|
+
return `${head}::${tail}`;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Collapse an address to its subnet key, e.g. "203.0.113.0/24" or
|
|
211
|
+
* "2001:db8:1::/48". Returns null for anything that is not an address, so a
|
|
212
|
+
* caller that must not guess (an admission cap) can refuse, while one with a
|
|
213
|
+
* safe fallback (a rate limiter) can bucket the raw string instead.
|
|
214
|
+
*/
|
|
215
|
+
export function ipSubnetKey(ip, v4Bits, v6Bits) {
|
|
216
|
+
const parsed = parseIpAddress(ip);
|
|
217
|
+
if (!parsed)
|
|
218
|
+
return null;
|
|
219
|
+
if (parsed.family === 4) {
|
|
220
|
+
const masked = maskBytes(parsed.bytes, v4Bits);
|
|
221
|
+
return `${masked.join(".")}/${v4Bits}`;
|
|
222
|
+
}
|
|
223
|
+
return `${formatIpv6(maskBytes(parsed.bytes, v6Bits))}/${v6Bits}`;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=ip-prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-prefix.js","sourceRoot":"","sources":["../src/ip-prefix.ts"],"names":[],"mappings":"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"}
|
package/dist/legal-changes.d.ts
CHANGED
|
@@ -46,9 +46,9 @@ export interface LegalChange {
|
|
|
46
46
|
materiality: "material" | "editorial";
|
|
47
47
|
reason: LegalChangeReason;
|
|
48
48
|
enforcement: LegalChangeEnforcement;
|
|
49
|
-
/** ISO instant, UTC.
|
|
49
|
+
/** ISO instant, UTC. First send instant of the notice batch. */
|
|
50
50
|
announceAt: string;
|
|
51
|
-
/** ISO instant, UTC.
|
|
51
|
+
/** ISO instant, UTC. Existing-account effect; material changes need 30 full days after the last send. */
|
|
52
52
|
effectiveAt: string;
|
|
53
53
|
/** Every document whose version header moves in this change. */
|
|
54
54
|
documents: readonly LegalChangeDocument[];
|
|
@@ -62,6 +62,8 @@ export interface LegalChange {
|
|
|
62
62
|
};
|
|
63
63
|
/** Set when the same change also modifies the Service itself (2019/770 Art. 19). */
|
|
64
64
|
modifiesService?: boolean;
|
|
65
|
+
/** This change governs new accounts from signup, before the existing-account date. */
|
|
66
|
+
appliesToNewAccountsFromSignup?: boolean;
|
|
65
67
|
}
|
|
66
68
|
/** Newest last. Editorial corrections record the published document history. */
|
|
67
69
|
export declare const LEGAL_CHANGES: readonly LegalChange[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal-changes.d.ts","sourceRoot":"","sources":["../src/legal-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AAEH,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAClB,UAAU,GACV,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;AAEjG,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kGAAkG;IAClG,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,WAAW,EAAE,UAAU,GAAG,WAAW,CAAC;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,sBAAsB,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"legal-changes.d.ts","sourceRoot":"","sources":["../src/legal-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AAEH,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,GAClB,UAAU,GACV,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;AAEjG,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,gBAAgB,CAAC;IACtB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kGAAkG;IAClG,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,WAAW,EAAE,UAAU,GAAG,WAAW,CAAC;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,sBAAsB,CAAC;IACpC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C;;;OAGG;IACH,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,oFAAoF;IACpF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sFAAsF;IACtF,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED,gFAAgF;AAChF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA0L/C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AAEtE,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,QAA2B,CAAC;AAElE,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAAiD,CAAC;AAEtF,2FAA2F;AAC3F,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAiBpE;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,SAAS,WAAW,EAAkB,GAC9C,WAAW,EAAE,CAIf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,SAAS,WAAW,EAAkB,GAC9C,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA6BnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,SAAS,WAAW,EAAkB,GAC9C,WAAW,GAAG,IAAI,CAiBpB"}
|