@keystrokehq/platform 0.0.121 → 0.0.122

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.
@@ -1 +1 @@
1
- {"version":3,"file":"start-CP-3N24R.cjs","names":["decodeBase64URL","jwk.isJWK","jwk.isSecretJWK","invalidKeyInput","jwk.isPrivateJWK","jwk.isPublicJWK","b64u","#jwks","#cached","jwksCache","#url","#timeoutDuration","#cooldownDuration","#cacheMaxAge","#headers","#customFetch","#cache","#jwksTimestamp","#local","#pendingFetch","authSessions","authAccounts","authVerifications","authDeviceCodes","authJwks","getDatabaseHandle","resolveResendApiKey","Resend","resend","envValue","normalizeUserEmail","selectUserByNormalizedEmail","parseStoredRouteManifest","fetchStoredRouteManifest","StoredProjectSourceManifestSchema","selectProjectById","selectProjectArtifactById","selectOrganizationById","updateProjectArtifactManifest","promoteProjectArtifact","runWithProjectDatabase","resolveOrgDatabaseUrl","runWithProjectScope","syncRegistryFromStoredManifest","syncSkillRegistry","selectEphemeralTriggerAttachments","webhookRouteFromEndpoint","extractWebhookRoutesFromManifest","ensureWebhookApiKeys","getPgBoss","updateProjectActive","updateProjectFailed","ErrorResponseSchema","ACTIVE_ORG_HEADER","ACTIVE_ORG_COOKIE","ErrorResponseSchema","selectUserOrganizationMembership","ErrorResponseSchema","selectProjectForOrganization","selectOrganizationById","runWithWorkspaceContext","mapProject","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithTenantScope","handler","selectUserOrganizations","ListOrganizationsResponseSchema","mapUserOrganization","resolveNewOrganizationIdentity","createOrganizationForUser","encryptCredentialPayload","seedOAuthAppsFromEnvForOrganization","isOrganizationStorageBucketInUse","OrganizationSlugTakenError","organizationSlugErrorCodeFromMessage","CreateOrganizationRequestSchema","ErrorResponseSchema","CreateOrganizationResponseSchema","mapUserOrganization","OrganizationSlugTakenError","ZodError","handler","SlugAvailabilityQuerySchema","ErrorResponseSchema","checkOrganizationSlugAvailability","SlugAvailabilityResponseSchema","handler","ActiveOrganizationResponseSchema","selectUserOrganizationMembership","mapUserOrganization","handler","SetActiveOrganizationRequestSchema","ErrorResponseSchema","selectUserOrganizationMembership","ActiveOrganizationResponseSchema","mapUserOrganization","handler","ActiveOrganizationResponseSchema","handler","UpdateOrganizationRequestSchema","ErrorResponseSchema","updateOrganizationSlug","ActiveOrganizationResponseSchema","mapUserOrganization","OrganizationSlugTakenError","ZodError","PLATFORM_RESOURCE_UNSUPPORTED_TEXT","AgentSummarySchema","handler","listActiveAgents","AgentSummaryListResponseSchema","handler","selectActiveAgentById","AgentSummaryDetailResponseSchema","WorkflowSummarySchema","handler","listActiveWorkflows","WorkflowSummaryListResponseSchema","handler","selectActiveWorkflowById","WorkflowSummaryDetailResponseSchema","SkillSummarySchema","handler","listActiveSkills","SkillSummaryListResponseSchema","handler","selectActiveSkillById","SkillSummaryDetailResponseSchema","handler","selectProjectsByOrganizationId","ListProjectsResponseSchema","mapProject","handler","CreateProjectRequestSchema","ErrorResponseSchema","createProjectForOrganization","CreateProjectResponseSchema","mapProject","handler","ProjectResponseSchema","handler","selectOrganizationById","projectArtifactKey","createOrgStorageClient","insertProjectArtifact","CreateProjectArtifactResponseSchema","mapProjectArtifact","handler","ErrorResponseSchema","selectProjectArtifactForProject","selectOrganizationById","createOrgStorageClient","completeProjectArtifact","CompleteProjectArtifactResponseSchema","mapProjectArtifact","mapProject","handler","ErrorResponseSchema","selectProjectArtifactForProject","PresignProjectSourceRequestSchema","selectOrganizationById","createOrgStorageClient","projectSourceBlobKey","PresignProjectSourceResponseSchema","handler","ErrorResponseSchema","selectProjectArtifactForProject","UploadProjectSourceManifestRequestSchema","StoredProjectSourceManifestSchema","projectFileId","updateProjectArtifactSourceManifest","UploadProjectSourceResponseSchema","handler","selectActiveArtifactSourceManifestForProject","ListProjectFilesResponseSchema","StoredProjectSourceManifestSchema","handler","ErrorResponseSchema","selectProjectArtifactForProject","StoredProjectSourceManifestSchema","selectOrganizationById","createOrgStorageClient","projectSourceBlobKey","ProjectReachabilityResponseSchema","pingProjectTarget","handler","selectOrganizationMembers","ListOrganizationMembersResponseSchema","mapOrganizationMember","organizationInvitationAcceptPath","resend","Resend","handler","InviteOrganizationMembersRequestSchema","ErrorResponseSchema","inviteOrganizationMembers","selectUserById","InviteOrganizationMembersResponseSchema","handler","UpdateOrganizationMemberRequestSchema","ErrorResponseSchema","updateOrganizationMemberRole","UpdateOrganizationMemberResponseSchema","mapOrganizationMember","CannotModifyOwnerError","OrganizationMemberNotFoundError","handler","ErrorResponseSchema","removeOrganizationMember","CannotModifyOwnerError","OrganizationMemberNotFoundError","handler","selectPendingInvitationsForUser","ListOrganizationInvitationsResponseSchema","mapOrganizationInvitation","handler","ErrorResponseSchema","acceptInvitation","AcceptOrganizationInvitationResponseSchema","mapUserOrganization","OrganizationInvitationNotFoundError","OrganizationInvitationForbiddenError","OrganizationInvitationExpiredError","ErrorResponseSchema","declineInvitation","DeclineOrganizationInvitationResponseSchema","OrganizationInvitationNotFoundError","OrganizationInvitationForbiddenError","Hono","listOrganizations","checkOrganizationSlugAvailability","getActiveOrganization","setActiveOrganization","updateActiveOrganization","clearActiveOrganization","listOrganizationInvitations","acceptOrganizationInvitation","declineOrganizationInvitation","listOrganizationMembers","inviteOrganizationMembers","updateOrganizationMember","removeOrganizationMember","listAgents","getAgent","listWorkflows","getWorkflow","listSkills","getSkill","listProjects","createProject","getProject","listProjectFiles","getProjectFileContent","createProjectArtifact","completeProjectArtifact","presignProjectArtifactSource","uploadProjectArtifactSourceManifest","z","Hono","selectProjectById","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","createCredentialMaterializeHandler","ensureWebhookApiKeyForRoute","buildWebhookUrl","selectOrganizationById","runWithOrganizationScope","runWithTenantScope","resolveOrgDatabaseUrl","resolveSchedulerPluginFromEnv","createScheduler","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","selectActiveArtifactManifestForProject","PromptInputSchema","selectAgentByKey","prepareAgentSession","enqueueAgentPrompt","ZodError","validationErrorResponse","findWorkflowManifestEntry","z","enqueueWorkflowRunByKey","ZodError","validationErrorResponse","listWebhookApiKeysForProject","createOAuthTokenRefreshRegistry","createOAuthTokenAdapterFromBackend","createLocalCredentialBackend","Hono","mountProjectIntegrations","listKnownIntegrationKeys","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithTenantScope","connectProvidersFromManifest","createAgentsListHandler","createGatewayAttachmentHandlers","agentSessionsListHandler","agentSessionDetailHandler","selectAgentByKey","selectActiveWorkflowByKey","workflowRunsListHandler","workflowRunDetailHandler","createTriggersListHandler","createTriggerGetHandler","triggerRunsListHandler","triggerRunDetailHandler","getProjectScopeId","createPgConnection","resolveOrgDatabaseUrl","createSlackGatewayIngress","runWithProjectScope","getOrCreateGatewayThreadSession","enqueueAgentPrompt","listOAuthInstallationsByAppKeyAndExternalId","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","getActiveOrgGatewayAttachmentByTeamAndChannel","listOAuthInstallationsByAppKeyAndExternalId","selectOrganizationById","buildSlackGatewaySetupUrl","postSlackChannelMessage","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","slackSignatureHeaders","getOAuthAppSigningSecretByKeyGlobal","verifySlackSignature","teamIdFromSlackEventPayload","channelIdFromSlackEventPayload","getGlobalOAuthAccessTokenByAppKeyAndExternalId","isSlackMentionEventPayload","Hono","ErrorResponseSchema","selectProjectById","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","selectActiveArtifactManifestForProject","loadWebhookAttachmentSchemasForRoute","matchWebhookPayload","enqueueWebhookIngress","webhookRouteFromEndpoint","resumeWorkflowHook","Hono","verifyWebhookApiKeyForRoute","Hono","ACTIVE_ORG_HEADER","listenPortFromPublicUrl","initDatabase","seedOAuthAppsFromEnvForAllOrganizations","startPgBoss","ensureProjectPgBossGrants","selectProjectById","selectProjectArtifactById","selectOrganizationById","createOrgContainerPresign","resolveProjectRuntimeDatabase"],"sources":["../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/buffer_utils.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/base64.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/util/base64url.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/crypto_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/invalid_key_input.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/util/errors.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/is_key_like.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/helpers.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/type_checks.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/signing.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/jwk_to_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/normalize_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/key/import.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/validate_crit.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/validate_algorithms.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/check_key_type.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jws/flattened/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jws/compact/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/jwt_claims_set.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwt/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwks/local.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwks/remote.js","../../../packages/auth/dist/jwt-BVJ7dVm9.mjs","../../../packages/platform-database/dist/schema/auth/index.mjs","../../../packages/auth/dist/index.mjs","../../../packages/projects/dist/index.mjs","../src/auth/mount.ts","../src/auth/require-org-admin.ts","../src/auth/resolve-org-id.ts","../src/auth/require-organization.ts","../src/auth/require-project.ts","../src/auth/require-session.ts","../src/middleware/with-organization-project-database.ts","../src/routes/account/organizations/GET.ts","../src/services/create-organization.ts","../src/routes/account/organizations/slug-errors.ts","../src/routes/account/organizations/POST.ts","../src/routes/account/organizations/slug-available/GET.ts","../src/routes/account/organizations/active/GET.ts","../src/routes/account/organizations/active/POST.ts","../src/routes/account/organizations/active/DELETE.ts","../src/routes/account/organizations/active/PATCH.ts","../src/routes/account/resources/common.ts","../src/routes/account/resources/agents.ts","../src/routes/account/agents/GET.ts","../src/routes/account/agents/[agentId]/GET.ts","../src/routes/account/resources/workflows.ts","../src/routes/account/workflows/GET.ts","../src/routes/account/workflows/[workflowId]/GET.ts","../src/routes/account/resources/skills.ts","../src/routes/account/skills/GET.ts","../src/routes/account/skills/[skillId]/GET.ts","../src/routes/account/projects/GET.ts","../src/routes/account/projects/POST.ts","../src/routes/account/projects/[projectId]/GET.ts","../src/routes/account/projects/[projectId]/artifacts/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/complete/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/source/presign/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/source/manifest/POST.ts","../src/routes/account/projects/[projectId]/files/GET.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/files/content/GET.ts","../src/routes/account/projects/[projectId]/reachability/GET.ts","../src/routes/account/members/GET.ts","../src/email/organization-invite-email.ts","../src/routes/account/members/invitations/POST.ts","../src/routes/account/members/[userId]/PATCH.ts","../src/routes/account/members/[userId]/DELETE.ts","../src/routes/account/invitations/GET.ts","../src/routes/account/invitations/[invitationId]/accept/POST.ts","../src/routes/account/invitations/[invitationId]/decline/POST.ts","../src/routes/account/mount.ts","../src/lib/platform-origin.ts","../src/middleware/require-worker-token.ts","../src/routes/internal/mount.ts","../src/middleware/with-organization-database.ts","../src/lib/project-scheduler.ts","../src/middleware/with-project-runtime.ts","../src/routes/runtime/handlers/agent-prompt.ts","../src/routes/runtime/handlers/workflow-run.ts","../src/routes/runtime/mount.ts","../src/lib/slack-gateway-ingress.ts","../src/lib/slack-gateway-routing.ts","../src/routes/gateways/slack-webhook.ts","../src/routes/gateways/mount.ts","../src/middleware/resolve-public-project.ts","../src/middleware/with-public-project-runtime.ts","../src/routes/runtime/handlers/webhook-ingress.ts","../src/routes/runtime/handlers/hook-resume.ts","../src/routes/webhooks/mount.ts","../src/app.ts","../src/start.ts"],"sourcesContent":["export const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function encode(string) {\n const bytes = new Uint8Array(string.length);\n for (let i = 0; i < string.length; i++) {\n const code = string.charCodeAt(i);\n if (code > 127) {\n throw new TypeError('non-ASCII string encountered in encode()');\n }\n bytes[i] = code;\n }\n return bytes;\n}\n","export function encodeBase64(input) {\n if (Uint8Array.prototype.toBase64) {\n return input.toBase64();\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < input.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n}\nexport function decodeBase64(encoded) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(encoded);\n }\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","import { encoder, decoder } from '../lib/buffer_utils.js';\nimport { encodeBase64, decodeBase64 } from '../lib/base64.js';\nexport function decode(input) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n alphabet: 'base64url',\n });\n }\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n}\nexport function encode(input) {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n if (Uint8Array.prototype.toBase64) {\n return unencoded.toBase64({ alphabet: 'base64url', omitPadding: true });\n }\n return encodeBase64(unencoded).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","const unusable = (name, prop = 'algorithm.name') => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\nconst isAlgorithm = (algorithm, name) => algorithm.name === name;\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction checkHashLength(algorithm, expected) {\n const actual = getHashLength(algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usage) {\n if (usage && !key.usages.includes(usage)) {\n throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n }\n}\nexport function checkSigCryptoKey(key, alg, usage) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'Ed25519':\n case 'EdDSA': {\n if (!isAlgorithm(key.algorithm, 'Ed25519'))\n throw unusable('Ed25519');\n break;\n }\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87': {\n if (!isAlgorithm(key.algorithm, alg))\n throw unusable(alg);\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usage);\n}\nexport function checkEncCryptoKey(key, alg, usage) {\n switch (alg) {\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM': {\n if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n throw unusable('AES-GCM');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (!isAlgorithm(key.algorithm, 'AES-KW'))\n throw unusable('AES-KW');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'ECDH': {\n switch (key.algorithm.name) {\n case 'ECDH':\n case 'X25519':\n break;\n default:\n throw unusable('ECDH or X25519');\n }\n break;\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n throw unusable('PBKDF2');\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n throw unusable('RSA-OAEP');\n checkHashLength(key.algorithm, parseInt(alg.slice(9), 10) || 1);\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usage);\n}\n","function message(msg, actual, ...types) {\n types = types.filter(Boolean);\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor?.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nexport const invalidKeyInput = (actual, ...types) => message('Key must be ', actual, ...types);\nexport const withAlg = (alg, actual, ...types) => message(`Key for the ${alg} algorithm must be `, actual, ...types);\n","export class JOSEError extends Error {\n static code = 'ERR_JOSE_GENERIC';\n code = 'ERR_JOSE_GENERIC';\n constructor(message, options) {\n super(message, options);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JWTExpired extends JOSEError {\n static code = 'ERR_JWT_EXPIRED';\n code = 'ERR_JWT_EXPIRED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n static code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n}\nexport class JOSENotSupported extends JOSEError {\n static code = 'ERR_JOSE_NOT_SUPPORTED';\n code = 'ERR_JOSE_NOT_SUPPORTED';\n}\nexport class JWEDecryptionFailed extends JOSEError {\n static code = 'ERR_JWE_DECRYPTION_FAILED';\n code = 'ERR_JWE_DECRYPTION_FAILED';\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n }\n}\nexport class JWEInvalid extends JOSEError {\n static code = 'ERR_JWE_INVALID';\n code = 'ERR_JWE_INVALID';\n}\nexport class JWSInvalid extends JOSEError {\n static code = 'ERR_JWS_INVALID';\n code = 'ERR_JWS_INVALID';\n}\nexport class JWTInvalid extends JOSEError {\n static code = 'ERR_JWT_INVALID';\n code = 'ERR_JWT_INVALID';\n}\nexport class JWKInvalid extends JOSEError {\n static code = 'ERR_JWK_INVALID';\n code = 'ERR_JWK_INVALID';\n}\nexport class JWKSInvalid extends JOSEError {\n static code = 'ERR_JWKS_INVALID';\n code = 'ERR_JWKS_INVALID';\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n static code = 'ERR_JWKS_NO_MATCHING_KEY';\n code = 'ERR_JWKS_NO_MATCHING_KEY';\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator];\n static code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSTimeout extends JOSEError {\n static code = 'ERR_JWKS_TIMEOUT';\n code = 'ERR_JWKS_TIMEOUT';\n constructor(message = 'request timed out', options) {\n super(message, options);\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n static code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n }\n}\n","export function assertCryptoKey(key) {\n if (!isCryptoKey(key)) {\n throw new Error('CryptoKey instance expected');\n }\n}\nexport const isCryptoKey = (key) => {\n if (key?.[Symbol.toStringTag] === 'CryptoKey')\n return true;\n try {\n return key instanceof CryptoKey;\n }\n catch {\n return false;\n }\n};\nexport const isKeyObject = (key) => key?.[Symbol.toStringTag] === 'KeyObject';\nexport const isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);\n","import { decode } from '../util/base64url.js';\nexport const unprotected = Symbol();\nexport function assertNotSet(value, name) {\n if (value) {\n throw new TypeError(`${name} can only be called once`);\n }\n}\nexport function decodeBase64url(value, label, ErrorClass) {\n try {\n return decode(value);\n }\n catch {\n throw new ErrorClass(`Failed to base64url decode the ${label}`);\n }\n}\nexport async function digest(algorithm, data) {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n}\n","const isObjectLike = (value) => typeof value === 'object' && value !== null;\nexport function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\nexport function isDisjoint(...headers) {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n}\nexport const isJWK = (key) => isObject(key) && typeof key.kty === 'string';\nexport const isPrivateJWK = (key) => key.kty !== 'oct' &&\n ((key.kty === 'AKP' && typeof key.priv === 'string') || typeof key.d === 'string');\nexport const isPublicJWK = (key) => key.kty !== 'oct' && key.d === undefined && key.priv === undefined;\nexport const isSecretJWK = (key) => key.kty === 'oct' && typeof key.k === 'string';\n","import { JOSENotSupported } from '../util/errors.js';\nimport { checkSigCryptoKey } from './crypto_key.js';\nimport { invalidKeyInput } from './invalid_key_input.js';\nexport function checkKeyLength(alg, key) {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n}\nfunction subtleAlgorithm(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: parseInt(alg.slice(-3), 10) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n case 'EdDSA':\n return { name: 'Ed25519' };\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87':\n return { name: alg };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\nasync function getSigKey(alg, key, usage) {\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));\n }\n return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n checkSigCryptoKey(key, alg, usage);\n return key;\n}\nexport async function sign(alg, key, data) {\n const cryptoKey = await getSigKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n}\nexport async function verify(alg, key, signature, data) {\n const cryptoKey = await getSigKey(alg, key, 'verify');\n checkKeyLength(alg, cryptoKey);\n const algorithm = subtleAlgorithm(alg, cryptoKey.algorithm);\n try {\n return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n }\n catch {\n return false;\n }\n}\n","import { JOSENotSupported } from '../util/errors.js';\nconst unsupportedAlg = 'Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value';\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'AKP': {\n switch (jwk.alg) {\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87':\n algorithm = { name: jwk.alg };\n keyUsages = jwk.priv ? ['sign'] : ['verify'];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n case 'ES384':\n case 'ES512':\n algorithm = {\n name: 'ECDSA',\n namedCurve: { ES256: 'P-256', ES384: 'P-384', ES512: 'P-521' }[jwk.alg],\n };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'OKP': {\n switch (jwk.alg) {\n case 'Ed25519':\n case 'EdDSA':\n algorithm = { name: 'Ed25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nexport async function jwkToKey(jwk) {\n if (!jwk.alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const keyData = { ...jwk };\n if (keyData.kty !== 'AKP') {\n delete keyData.alg;\n }\n delete keyData.use;\n return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? (jwk.d || jwk.priv ? false : true), jwk.key_ops ?? keyUsages);\n}\n","import { isJWK } from './type_checks.js';\nimport { decode } from '../util/base64url.js';\nimport { jwkToKey } from './jwk_to_key.js';\nimport { isCryptoKey, isKeyObject } from './is_key_like.js';\nconst unusableForAlg = 'given KeyObject instance cannot be used for this algorithm';\nlet cache;\nconst handleJWK = async (key, jwk, alg, freeze = false) => {\n cache ||= new WeakMap();\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await jwkToKey({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst handleKeyObject = (keyObject, alg) => {\n cache ||= new WeakMap();\n let cached = cache.get(keyObject);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const isPublic = keyObject.type === 'public';\n const extractable = isPublic ? true : false;\n let cryptoKey;\n if (keyObject.asymmetricKeyType === 'x25519') {\n switch (alg) {\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n break;\n default:\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : ['deriveBits']);\n }\n if (keyObject.asymmetricKeyType === 'ed25519') {\n if (alg !== 'EdDSA' && alg !== 'Ed25519') {\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [\n isPublic ? 'verify' : 'sign',\n ]);\n }\n switch (keyObject.asymmetricKeyType) {\n case 'ml-dsa-44':\n case 'ml-dsa-65':\n case 'ml-dsa-87': {\n if (alg !== keyObject.asymmetricKeyType.toUpperCase()) {\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [\n isPublic ? 'verify' : 'sign',\n ]);\n }\n }\n if (keyObject.asymmetricKeyType === 'rsa') {\n let hash;\n switch (alg) {\n case 'RSA-OAEP':\n hash = 'SHA-1';\n break;\n case 'RS256':\n case 'PS256':\n case 'RSA-OAEP-256':\n hash = 'SHA-256';\n break;\n case 'RS384':\n case 'PS384':\n case 'RSA-OAEP-384':\n hash = 'SHA-384';\n break;\n case 'RS512':\n case 'PS512':\n case 'RSA-OAEP-512':\n hash = 'SHA-512';\n break;\n default:\n throw new TypeError(unusableForAlg);\n }\n if (alg.startsWith('RSA-OAEP')) {\n return keyObject.toCryptoKey({\n name: 'RSA-OAEP',\n hash,\n }, extractable, isPublic ? ['encrypt'] : ['decrypt']);\n }\n cryptoKey = keyObject.toCryptoKey({\n name: alg.startsWith('PS') ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5',\n hash,\n }, extractable, [isPublic ? 'verify' : 'sign']);\n }\n if (keyObject.asymmetricKeyType === 'ec') {\n const nist = new Map([\n ['prime256v1', 'P-256'],\n ['secp384r1', 'P-384'],\n ['secp521r1', 'P-521'],\n ]);\n const namedCurve = nist.get(keyObject.asymmetricKeyDetails?.namedCurve);\n if (!namedCurve) {\n throw new TypeError(unusableForAlg);\n }\n const expectedCurve = { ES256: 'P-256', ES384: 'P-384', ES512: 'P-521' };\n if (expectedCurve[alg] && namedCurve === expectedCurve[alg]) {\n cryptoKey = keyObject.toCryptoKey({\n name: 'ECDSA',\n namedCurve,\n }, extractable, [isPublic ? 'verify' : 'sign']);\n }\n if (alg.startsWith('ECDH-ES')) {\n cryptoKey = keyObject.toCryptoKey({\n name: 'ECDH',\n namedCurve,\n }, extractable, isPublic ? [] : ['deriveBits']);\n }\n }\n if (!cryptoKey) {\n throw new TypeError(unusableForAlg);\n }\n if (!cached) {\n cache.set(keyObject, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nexport async function normalizeKey(key, alg) {\n if (key instanceof Uint8Array) {\n return key;\n }\n if (isCryptoKey(key)) {\n return key;\n }\n if (isKeyObject(key)) {\n if (key.type === 'secret') {\n return key.export();\n }\n if ('toCryptoKey' in key && typeof key.toCryptoKey === 'function') {\n try {\n return handleKeyObject(key, alg);\n }\n catch (err) {\n if (err instanceof TypeError) {\n throw err;\n }\n }\n }\n let jwk = key.export({ format: 'jwk' });\n return handleJWK(key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k) {\n return decode(key.k);\n }\n return handleJWK(key, key, alg, true);\n }\n throw new Error('unreachable');\n}\n","import { decode as decodeBase64URL } from '../util/base64url.js';\nimport { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';\nimport { jwkToKey } from '../lib/jwk_to_key.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nexport async function importSPKI(spki, alg, options) {\n if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n throw new TypeError('\"spki\" must be SPKI formatted string');\n }\n return fromSPKI(spki, alg, options);\n}\nexport async function importX509(x509, alg, options) {\n if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n throw new TypeError('\"x509\" must be X.509 formatted string');\n }\n return fromX509(x509, alg, options);\n}\nexport async function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n }\n return fromPKCS8(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg, options) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n let ext;\n alg ??= jwk.alg;\n ext ??= options?.extractable ?? jwk.ext;\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n if ('oth' in jwk && jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n return jwkToKey({ ...jwk, alg, ext });\n case 'AKP': {\n if (typeof jwk.alg !== 'string' || !jwk.alg) {\n throw new TypeError('missing \"alg\" (Algorithm) Parameter value');\n }\n if (alg !== undefined && alg !== jwk.alg) {\n throw new TypeError('JWK alg and alg option value mismatch');\n }\n return jwkToKey({ ...jwk, ext });\n }\n case 'EC':\n case 'OKP':\n return jwkToKey({ ...jwk, alg, ext });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n","import { JOSENotSupported, JWEInvalid, JWSInvalid } from '../util/errors.js';\nexport function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\n","export function validateAlgorithms(option, algorithms) {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n}\n","import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport { isKeyLike } from './is_key_like.js';\nimport * as jwk from './type_checks.js';\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n if (key.use !== undefined) {\n let expected;\n switch (usage) {\n case 'sign':\n case 'verify':\n expected = 'sig';\n break;\n case 'encrypt':\n case 'decrypt':\n expected = 'enc';\n break;\n }\n if (key.use !== expected) {\n throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n }\n }\n if (key.alg !== undefined && key.alg !== alg) {\n throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n }\n if (Array.isArray(key.key_ops)) {\n let expectedKeyOp;\n switch (true) {\n case usage === 'sign' || usage === 'verify':\n case alg === 'dir':\n case alg.includes('CBC-HS'):\n expectedKeyOp = usage;\n break;\n case alg.startsWith('PBES2'):\n expectedKeyOp = 'deriveBits';\n break;\n case /^A\\d{3}(?:GCM)?(?:KW)?$/.test(alg):\n if (!alg.includes('GCM') && alg.endsWith('KW')) {\n expectedKeyOp = usage === 'encrypt' ? 'wrapKey' : 'unwrapKey';\n }\n else {\n expectedKeyOp = usage;\n }\n break;\n case usage === 'encrypt' && alg.startsWith('RSA'):\n expectedKeyOp = 'wrapKey';\n break;\n case usage === 'decrypt':\n expectedKeyOp = alg.startsWith('RSA') ? 'unwrapKey' : 'deriveBits';\n break;\n }\n if (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) {\n throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n }\n }\n return true;\n};\nconst symmetricTypeCheck = (alg, key, usage) => {\n if (key instanceof Uint8Array)\n return;\n if (jwk.isJWK(key)) {\n if (jwk.isSecretJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n }\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array'));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n if (jwk.isJWK(key)) {\n switch (usage) {\n case 'decrypt':\n case 'sign':\n if (jwk.isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation must be a private JWK`);\n case 'encrypt':\n case 'verify':\n if (jwk.isPublicJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation must be a public JWK`);\n }\n }\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (key.type === 'public') {\n switch (usage) {\n case 'sign':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n case 'decrypt':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n }\n if (key.type === 'private') {\n switch (usage) {\n case 'verify':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n case 'encrypt':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n }\n};\nexport function checkKeyType(alg, key, usage) {\n switch (alg.substring(0, 2)) {\n case 'A1':\n case 'A2':\n case 'di':\n case 'HS':\n case 'PB':\n symmetricTypeCheck(alg, key, usage);\n break;\n default:\n asymmetricTypeCheck(alg, key, usage);\n }\n}\n","import { decode as b64u } from '../../util/base64url.js';\nimport { verify } from '../../lib/signing.js';\nimport { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';\nimport { concat, encoder, decoder, encode } from '../../lib/buffer_utils.js';\nimport { decodeBase64url } from '../../lib/helpers.js';\nimport { isDisjoint } from '../../lib/type_checks.js';\nimport { isObject } from '../../lib/type_checks.js';\nimport { checkKeyType } from '../../lib/check_key_type.js';\nimport { validateCrit } from '../../lib/validate_crit.js';\nimport { validateAlgorithms } from '../../lib/validate_algorithms.js';\nimport { normalizeKey } from '../../lib/normalize_key.js';\nexport async function flattenedVerify(jws, key, options) {\n if (!isObject(jws)) {\n throw new JWSInvalid('Flattened JWS must be an object');\n }\n if (jws.protected === undefined && jws.header === undefined) {\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n }\n if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n throw new JWSInvalid('JWS Protected Header incorrect type');\n }\n if (jws.payload === undefined) {\n throw new JWSInvalid('JWS Payload missing');\n }\n if (typeof jws.signature !== 'string') {\n throw new JWSInvalid('JWS Signature missing or incorrect type');\n }\n if (jws.header !== undefined && !isObject(jws.header)) {\n throw new JWSInvalid('JWS Unprotected Header incorrect type');\n }\n let parsedProt = {};\n if (jws.protected) {\n try {\n const protectedHeader = b64u(jws.protected);\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch {\n throw new JWSInvalid('JWS Protected Header is invalid');\n }\n }\n if (!isDisjoint(parsedProt, jws.header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jws.header,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, parsedProt, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const algorithms = options && validateAlgorithms('algorithms', options.algorithms);\n if (algorithms && !algorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n }\n if (b64) {\n if (typeof jws.payload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n }\n checkKeyType(alg, key, 'verify');\n const data = concat(jws.protected !== undefined ? encode(jws.protected) : new Uint8Array(), encode('.'), typeof jws.payload === 'string'\n ? b64\n ? encode(jws.payload)\n : encoder.encode(jws.payload)\n : jws.payload);\n const signature = decodeBase64url(jws.signature, 'signature', JWSInvalid);\n const k = await normalizeKey(key, alg);\n const verified = await verify(alg, k, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n payload = decodeBase64url(jws.payload, 'payload', JWSInvalid);\n }\n else if (typeof jws.payload === 'string') {\n payload = encoder.encode(jws.payload);\n }\n else {\n payload = jws.payload;\n }\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key: k };\n }\n return result;\n}\n","import { flattenedVerify } from '../flattened/verify.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { decoder } from '../../lib/buffer_utils.js';\nexport async function compactVerify(jws, key, options) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n const verified = await flattenedVerify({ payload, protected: protectedHeader, signature }, key, options);\n const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from '../util/errors.js';\nimport { encoder, decoder } from './buffer_utils.js';\nimport { isObject } from './type_checks.js';\nconst epoch = (date) => Math.floor(date.getTime() / 1000);\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nexport function secs(str) {\n const matched = REGEX.exec(str);\n if (!matched || (matched[4] && matched[1])) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[2]);\n const unit = matched[3].toLowerCase();\n let numericDate;\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n numericDate = Math.round(value);\n break;\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n numericDate = Math.round(value * minute);\n break;\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n numericDate = Math.round(value * hour);\n break;\n case 'day':\n case 'days':\n case 'd':\n numericDate = Math.round(value * day);\n break;\n case 'week':\n case 'weeks':\n case 'w':\n numericDate = Math.round(value * week);\n break;\n default:\n numericDate = Math.round(value * year);\n break;\n }\n if (matched[1] === '-' || matched[4] === 'ago') {\n return -numericDate;\n }\n return numericDate;\n}\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nconst normalizeTyp = (value) => {\n if (value.includes('/')) {\n return value.toLowerCase();\n }\n return `application/${value.toLowerCase()}`;\n};\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n }\n return false;\n};\nexport function validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n let payload;\n try {\n payload = JSON.parse(decoder.decode(encodedPayload));\n }\n catch {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, 'typ', 'check_failed');\n }\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n const presenceCheck = [...requiredClaims];\n if (maxTokenAge !== undefined)\n presenceCheck.push('iat');\n if (audience !== undefined)\n presenceCheck.push('aud');\n if (subject !== undefined)\n presenceCheck.push('sub');\n if (issuer !== undefined)\n presenceCheck.push('iss');\n for (const claim of new Set(presenceCheck.reverse())) {\n if (!(claim in payload)) {\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, 'missing');\n }\n }\n if (issuer &&\n !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n throw new JWTClaimValidationFailed('unexpected \"iss\" claim value', payload, 'iss', 'check_failed');\n }\n if (subject && payload.sub !== subject) {\n throw new JWTClaimValidationFailed('unexpected \"sub\" claim value', payload, 'sub', 'check_failed');\n }\n if (audience &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n throw new JWTClaimValidationFailed('unexpected \"aud\" claim value', payload, 'aud', 'check_failed');\n }\n let tolerance;\n switch (typeof options.clockTolerance) {\n case 'string':\n tolerance = secs(options.clockTolerance);\n break;\n case 'number':\n tolerance = options.clockTolerance;\n break;\n case 'undefined':\n tolerance = 0;\n break;\n default:\n throw new TypeError('Invalid clockTolerance option type');\n }\n const { currentDate } = options;\n const now = epoch(currentDate || new Date());\n if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n throw new JWTClaimValidationFailed('\"iat\" claim must be a number', payload, 'iat', 'invalid');\n }\n if (payload.nbf !== undefined) {\n if (typeof payload.nbf !== 'number') {\n throw new JWTClaimValidationFailed('\"nbf\" claim must be a number', payload, 'nbf', 'invalid');\n }\n if (payload.nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, 'nbf', 'check_failed');\n }\n }\n if (payload.exp !== undefined) {\n if (typeof payload.exp !== 'number') {\n throw new JWTClaimValidationFailed('\"exp\" claim must be a number', payload, 'exp', 'invalid');\n }\n if (payload.exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, 'exp', 'check_failed');\n }\n }\n if (maxTokenAge) {\n const age = now - payload.iat;\n const max = typeof maxTokenAge === 'number' ? maxTokenAge : secs(maxTokenAge);\n if (age - tolerance > max) {\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, 'iat', 'check_failed');\n }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, 'iat', 'check_failed');\n }\n }\n return payload;\n}\nexport class JWTClaimsBuilder {\n #payload;\n constructor(payload) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this.#payload = structuredClone(payload);\n }\n data() {\n return encoder.encode(JSON.stringify(this.#payload));\n }\n get iss() {\n return this.#payload.iss;\n }\n set iss(value) {\n this.#payload.iss = value;\n }\n get sub() {\n return this.#payload.sub;\n }\n set sub(value) {\n this.#payload.sub = value;\n }\n get aud() {\n return this.#payload.aud;\n }\n set aud(value) {\n this.#payload.aud = value;\n }\n set jti(value) {\n this.#payload.jti = value;\n }\n set nbf(value) {\n if (typeof value === 'number') {\n this.#payload.nbf = validateInput('setNotBefore', value);\n }\n else if (value instanceof Date) {\n this.#payload.nbf = validateInput('setNotBefore', epoch(value));\n }\n else {\n this.#payload.nbf = epoch(new Date()) + secs(value);\n }\n }\n set exp(value) {\n if (typeof value === 'number') {\n this.#payload.exp = validateInput('setExpirationTime', value);\n }\n else if (value instanceof Date) {\n this.#payload.exp = validateInput('setExpirationTime', epoch(value));\n }\n else {\n this.#payload.exp = epoch(new Date()) + secs(value);\n }\n }\n set iat(value) {\n if (value === undefined) {\n this.#payload.iat = epoch(new Date());\n }\n else if (value instanceof Date) {\n this.#payload.iat = validateInput('setIssuedAt', epoch(value));\n }\n else if (typeof value === 'string') {\n this.#payload.iat = validateInput('setIssuedAt', epoch(new Date()) + secs(value));\n }\n else {\n this.#payload.iat = validateInput('setIssuedAt', value);\n }\n }\n}\n","import { compactVerify } from '../jws/compact/verify.js';\nimport { validateClaimsSet } from '../lib/jwt_claims_set.js';\nimport { JWTInvalid } from '../util/errors.js';\nexport async function jwtVerify(jwt, key, options) {\n const verified = await compactVerify(jwt, key, options);\n if (verified.protectedHeader.crit?.includes('b64') && verified.protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = validateClaimsSet(verified.protectedHeader, verified.payload, options);\n const result = { payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { importJWK } from '../key/import.js';\nimport { JWKSInvalid, JOSENotSupported, JWKSNoMatchingKey, JWKSMultipleMatchingKeys, } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nfunction getKtyFromAlg(alg) {\n switch (typeof alg === 'string' && alg.slice(0, 2)) {\n case 'RS':\n case 'PS':\n return 'RSA';\n case 'ES':\n return 'EC';\n case 'Ed':\n return 'OKP';\n case 'ML':\n return 'AKP';\n default:\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n}\nfunction isJWKSLike(jwks) {\n return (jwks &&\n typeof jwks === 'object' &&\n Array.isArray(jwks.keys) &&\n jwks.keys.every(isJWKLike));\n}\nfunction isJWKLike(key) {\n return isObject(key);\n}\nclass LocalJWKSet {\n #jwks;\n #cached = new WeakMap();\n constructor(jwks) {\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this.#jwks = structuredClone(jwks);\n }\n jwks() {\n return this.#jwks;\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token?.header };\n const kty = getKtyFromAlg(alg);\n const candidates = this.#jwks.keys.filter((jwk) => {\n let candidate = kty === jwk.kty;\n if (candidate && typeof kid === 'string') {\n candidate = kid === jwk.kid;\n }\n if (candidate && (typeof jwk.alg === 'string' || kty === 'AKP')) {\n candidate = alg === jwk.alg;\n }\n if (candidate && typeof jwk.use === 'string') {\n candidate = jwk.use === 'sig';\n }\n if (candidate && Array.isArray(jwk.key_ops)) {\n candidate = jwk.key_ops.includes('verify');\n }\n if (candidate) {\n switch (alg) {\n case 'ES256':\n candidate = jwk.crv === 'P-256';\n break;\n case 'ES384':\n candidate = jwk.crv === 'P-384';\n break;\n case 'ES512':\n candidate = jwk.crv === 'P-521';\n break;\n case 'Ed25519':\n case 'EdDSA':\n candidate = jwk.crv === 'Ed25519';\n break;\n }\n }\n return candidate;\n });\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n if (length !== 1) {\n const error = new JWKSMultipleMatchingKeys();\n const _cached = this.#cached;\n error[Symbol.asyncIterator] = async function* () {\n for (const jwk of candidates) {\n try {\n yield await importWithAlgCache(_cached, jwk, alg);\n }\n catch { }\n }\n };\n throw error;\n }\n return importWithAlgCache(this.#cached, jwk, alg);\n }\n}\nasync function importWithAlgCache(cache, jwk, alg) {\n const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n if (cached[alg] === undefined) {\n const key = await importJWK({ ...jwk, ext: true }, alg);\n if (key instanceof Uint8Array || key.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[alg] = key;\n }\n return cached[alg];\n}\nexport function createLocalJWKSet(jwks) {\n const set = new LocalJWKSet(jwks);\n const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(localJWKSet, {\n jwks: {\n value: () => structuredClone(set.jwks()),\n enumerable: false,\n configurable: false,\n writable: false,\n },\n });\n return localJWKSet;\n}\n","import { JOSEError, JWKSNoMatchingKey, JWKSTimeout } from '../util/errors.js';\nimport { createLocalJWKSet } from './local.js';\nimport { isObject } from '../lib/type_checks.js';\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v6.2.3';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nexport const customFetch = Symbol();\nasync function fetchJwks(url, headers, signal, fetchImpl = fetch) {\n const response = await fetchImpl(url, {\n method: 'GET',\n signal,\n redirect: 'manual',\n headers,\n }).catch((err) => {\n if (err.name === 'TimeoutError') {\n throw new JWKSTimeout();\n }\n throw err;\n });\n if (response.status !== 200) {\n throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n }\n try {\n return await response.json();\n }\n catch {\n throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n }\n}\nexport const jwksCache = Symbol();\nfunction isFreshJwksCache(input, cacheMaxAge) {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n if (!('uat' in input) || typeof input.uat !== 'number' || Date.now() - input.uat >= cacheMaxAge) {\n return false;\n }\n if (!('jwks' in input) ||\n !isObject(input.jwks) ||\n !Array.isArray(input.jwks.keys) ||\n !Array.prototype.every.call(input.jwks.keys, isObject)) {\n return false;\n }\n return true;\n}\nclass RemoteJWKSet {\n #url;\n #timeoutDuration;\n #cooldownDuration;\n #cacheMaxAge;\n #jwksTimestamp;\n #pendingFetch;\n #headers;\n #customFetch;\n #local;\n #cache;\n constructor(url, options) {\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this.#url = new URL(url.href);\n this.#timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this.#cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this.#cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n this.#headers = new Headers(options?.headers);\n if (USER_AGENT && !this.#headers.has('User-Agent')) {\n this.#headers.set('User-Agent', USER_AGENT);\n }\n if (!this.#headers.has('accept')) {\n this.#headers.set('accept', 'application/json');\n this.#headers.append('accept', 'application/jwk-set+json');\n }\n this.#customFetch = options?.[customFetch];\n if (options?.[jwksCache] !== undefined) {\n this.#cache = options?.[jwksCache];\n if (isFreshJwksCache(options?.[jwksCache], this.#cacheMaxAge)) {\n this.#jwksTimestamp = this.#cache.uat;\n this.#local = createLocalJWKSet(this.#cache.jwks);\n }\n }\n }\n pendingFetch() {\n return !!this.#pendingFetch;\n }\n coolingDown() {\n return typeof this.#jwksTimestamp === 'number'\n ? Date.now() < this.#jwksTimestamp + this.#cooldownDuration\n : false;\n }\n fresh() {\n return typeof this.#jwksTimestamp === 'number'\n ? Date.now() < this.#jwksTimestamp + this.#cacheMaxAge\n : false;\n }\n jwks() {\n return this.#local?.jwks();\n }\n async getKey(protectedHeader, token) {\n if (!this.#local || !this.fresh()) {\n await this.reload();\n }\n try {\n return await this.#local(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return this.#local(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this.#pendingFetch && isCloudflareWorkers()) {\n this.#pendingFetch = undefined;\n }\n this.#pendingFetch ||= fetchJwks(this.#url.href, this.#headers, AbortSignal.timeout(this.#timeoutDuration), this.#customFetch)\n .then((json) => {\n this.#local = createLocalJWKSet(json);\n if (this.#cache) {\n this.#cache.uat = Date.now();\n this.#cache.jwks = json;\n }\n this.#jwksTimestamp = Date.now();\n this.#pendingFetch = undefined;\n })\n .catch((err) => {\n this.#pendingFetch = undefined;\n throw err;\n });\n await this.#pendingFetch;\n }\n}\nexport function createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n const remoteJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(remoteJWKSet, {\n coolingDown: {\n get: () => set.coolingDown(),\n enumerable: true,\n configurable: false,\n },\n fresh: {\n get: () => set.fresh(),\n enumerable: true,\n configurable: false,\n },\n reload: {\n value: () => set.reload(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n reloading: {\n get: () => set.pendingFetch(),\n enumerable: true,\n configurable: false,\n },\n jwks: {\n value: () => set.jwks(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return remoteJWKSet;\n}\n","import { createRemoteJWKSet, jwtVerify } from \"jose\";\n//#region src/constants.ts\n/** OAuth device-flow client id for `keystroke auth login`. */\nconst CLI_CLIENT_ID = \"keystroke-cli\";\n//#endregion\n//#region src/jwt.ts\nconst jwksCache = /* @__PURE__ */ new Map();\nfunction getRemoteJwks(jwksUrl) {\n\tconst cached = jwksCache.get(jwksUrl);\n\tif (cached) return cached;\n\tconst jwks = createRemoteJWKSet(new URL(jwksUrl));\n\tjwksCache.set(jwksUrl, jwks);\n\treturn jwks;\n}\nfunction payloadToUser(payload) {\n\tconst id = typeof payload.id === \"string\" ? payload.id : payload.sub;\n\tconst email = typeof payload.email === \"string\" ? payload.email : void 0;\n\tconst name = typeof payload.name === \"string\" && payload.name.length > 0 ? payload.name : email?.split(\"@\")[0];\n\tif (!id || !email || !name) return null;\n\treturn {\n\t\tid,\n\t\temail,\n\t\tname,\n\t\timage: typeof payload.image === \"string\" ? payload.image : null,\n\t\temailVerified: typeof payload.emailVerified === \"boolean\" ? payload.emailVerified : void 0\n\t};\n}\nfunction createJwtVerifier(options) {\n\tconst audience = options.audience ?? options.issuer;\n\tlet jwks;\n\treturn { verify: async (token) => {\n\t\ttry {\n\t\t\tjwks ??= getRemoteJwks(options.jwksUrl);\n\t\t\tconst { payload } = await jwtVerify(token, jwks, {\n\t\t\t\tissuer: options.issuer,\n\t\t\t\taudience\n\t\t\t});\n\t\t\treturn payloadToUser(payload);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t} };\n}\nfunction extractBearerToken(headers) {\n\tconst authorization = headers.get(\"authorization\");\n\tif (!authorization?.startsWith(\"Bearer \")) return null;\n\tconst token = authorization.slice(7).trim();\n\treturn token.length > 0 ? token : null;\n}\nfunction looksLikeJwt(token) {\n\treturn token.split(\".\").length === 3;\n}\nfunction userFromJwt(jwtUser) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\temail: jwtUser.email,\n\t\tname: jwtUser.name,\n\t\timage: jwtUser.image ?? null,\n\t\temailVerified: jwtUser.emailVerified ?? true,\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nfunction sessionFromJwt(jwtUser, token) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\tuserId: jwtUser.id,\n\t\ttoken,\n\t\texpiresAt: new Date(Date.now() + 900 * 1e3),\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nasync function resolveRequestAuth(jwtVerifier, headers) {\n\tconst bearerToken = extractBearerToken(headers);\n\tif (!bearerToken || !jwtVerifier || !looksLikeJwt(bearerToken)) return null;\n\tconst jwtUser = await jwtVerifier.verify(bearerToken);\n\tif (!jwtUser) return null;\n\treturn {\n\t\tuser: userFromJwt(jwtUser),\n\t\tsession: sessionFromJwt(jwtUser, bearerToken)\n\t};\n}\n/** Auth API origin for JWT verification — platform URL when auth is mounted there. */\nfunction resolveAuthApiBaseUrl() {\n\treturn (process.env.PUBLIC_PLATFORM_URL ?? process.env.PUBLIC_WEB_URL ?? \"\").replace(/\\/+$/, \"\");\n}\nfunction createDefaultAuthJwtVerifier() {\n\treturn createAuthJwtVerifier(resolveAuthApiBaseUrl());\n}\nfunction createAuthJwtVerifier(authBaseUrl) {\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tif (!normalizedBaseUrl) return;\n\treturn createJwtVerifier({\n\t\tissuer: normalizedBaseUrl,\n\t\taudience: normalizedBaseUrl,\n\t\tjwksUrl: `${normalizedBaseUrl}/api/auth/jwks`\n\t});\n}\nasync function fetchJwtWithSession(authBaseUrl, sessionCredential) {\n\tconst headers = new Headers();\n\tif (sessionCredential.cookie) headers.set(\"cookie\", sessionCredential.cookie);\n\tif (sessionCredential.bearerToken) headers.set(\"authorization\", `Bearer ${sessionCredential.bearerToken}`);\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tconst response = await fetch(`${normalizedBaseUrl}/api/auth/token`, { headers });\n\tif (!response.ok) return null;\n\tconst body = await response.json();\n\treturn typeof body.token === \"string\" ? body.token : null;\n}\n//#endregion\nexport { fetchJwtWithSession as a, CLI_CLIENT_ID as c, extractBearerToken as i, createDefaultAuthJwtVerifier as n, resolveAuthApiBaseUrl as o, createJwtVerifier as r, resolveRequestAuth as s, createAuthJwtVerifier as t };\n\n//# sourceMappingURL=jwt-BVJ7dVm9.mjs.map","import { a as authAccounts, i as authDeviceCodes, n as authSessions, o as users, r as authJwks, s as getDatabaseHandle, t as authVerifications } from \"../../auth-verifications-B2HtTck3.mjs\";\nimport { drizzleAdapter } from \"@better-auth/drizzle-adapter\";\n//#region src/schema/auth/options.ts\nfunction authSchemaFor() {\n\treturn {\n\t\tusers,\n\t\tsession: authSessions,\n\t\taccount: authAccounts,\n\t\tverification: authVerifications,\n\t\tdeviceCode: authDeviceCodes,\n\t\tjwks: authJwks\n\t};\n}\nfunction authDatabaseAdapterOptions() {\n\treturn {\n\t\tprovider: \"pg\",\n\t\tschema: authSchemaFor()\n\t};\n}\n//#endregion\n//#region src/schema/auth/adapter.ts\n/** Better Auth database adapter wired to the active Drizzle handle. */\nfunction createAuthDatabaseAdapter() {\n\tconst { db } = getDatabaseHandle();\n\tconst { provider, schema } = authDatabaseAdapterOptions();\n\treturn drizzleAdapter(db, {\n\t\tprovider,\n\t\tschema\n\t});\n}\n//#endregion\nexport { authAccounts, authDatabaseAdapterOptions, authSchemaFor, authSessions, authVerifications, createAuthDatabaseAdapter, users };\n\n//# sourceMappingURL=index.mjs.map","import { a as fetchJwtWithSession, c as CLI_CLIENT_ID, i as extractBearerToken, n as createDefaultAuthJwtVerifier, o as resolveAuthApiBaseUrl, r as createJwtVerifier, s as resolveRequestAuth, t as createAuthJwtVerifier } from \"./jwt-BVJ7dVm9.mjs\";\nimport { n as decodeJwtExpiryMs, t as createJwtTokenCache } from \"./jwt-cache-4YqHn3jM.mjs\";\nimport { createAuthDatabaseAdapter } from \"@keystrokehq/platform-database/auth-schema\";\nimport { betterAuth } from \"better-auth\";\nimport { bearer } from \"better-auth/plugins/bearer\";\nimport { deviceAuthorization } from \"better-auth/plugins/device-authorization\";\nimport { jwt, lastLoginMethod } from \"better-auth/plugins\";\nimport { magicLink } from \"better-auth/plugins/magic-link\";\nimport { Resend } from \"resend\";\nimport { normalizeUserEmail, selectUserByNormalizedEmail } from \"@keystrokehq/platform-database\";\n//#region src/magic-link-email.ts\nfunction envValue$1(name) {\n\treturn process.env[name]?.trim() || void 0;\n}\nfunction resolveAuthEmailFrom() {\n\treturn envValue$1(\"AUTH_EMAIL_FROM\") ?? \"Keystroke <signin@auth.keystroke.ai>\";\n}\nfunction isMagicLinkSignInConfigured() {\n\treturn envValue$1(\"RESEND_API_KEY\") !== void 0;\n}\nfunction resolveResendApiKey() {\n\tconst apiKey = envValue$1(\"RESEND_API_KEY\");\n\tif (!apiKey) throw new Error(\"[auth] RESEND_API_KEY is required for magic link sign-in. Add it to Infisical dev/prod.\");\n\treturn apiKey;\n}\nfunction buildMagicLinkEmailHtml(payload) {\n\treturn `<!DOCTYPE html>\n<html>\n <body style=\"font-family: system-ui, sans-serif; line-height: 1.5; color: #111;\">\n <p>Sign in to Keystroke as <strong>${payload.email.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\")}</strong>.</p>\n <p><a href=\"${payload.url}\" style=\"display: inline-block; padding: 10px 16px; background: #111; color: #fff; text-decoration: none; border-radius: 8px;\">Sign in</a></p>\n <p>Or enter this code on the sign-in page:</p>\n <p style=\"font-size: 20px; font-weight: 600; letter-spacing: 0.2em;\">${payload.token}</p>\n <p style=\"color: #666; font-size: 13px;\">This link and code expire in a few minutes. If you did not request this, you can ignore this email.</p>\n </body>\n</html>`;\n}\nasync function sendAuthMagicLinkEmail(payload, resend = new Resend(resolveResendApiKey())) {\n\tconst { error } = await resend.emails.send({\n\t\tfrom: resolveAuthEmailFrom(),\n\t\tto: payload.email,\n\t\tsubject: \"Sign in to Keystroke\",\n\t\thtml: buildMagicLinkEmailHtml(payload)\n\t});\n\tif (error) throw new Error(`[auth] Failed to send magic link email: ${error.message}`);\n}\n//#endregion\n//#region src/magic-link.ts\nfunction createMagicLinkPlugin() {\n\tif (!isMagicLinkSignInConfigured()) return null;\n\treturn magicLink({ sendMagicLink: async ({ email, url, token }) => {\n\t\tawait sendAuthMagicLinkEmail({\n\t\t\temail,\n\t\t\turl,\n\t\t\ttoken\n\t\t});\n\t} });\n}\n//#endregion\n//#region src/social-login.ts\nfunction envValue(name) {\n\treturn process.env[name]?.trim() || void 0;\n}\nfunction resolveLoginOAuthCredentials(config) {\n\tconst authClientId = envValue(config.authClientIdEnv);\n\tconst authClientSecret = envValue(config.authClientSecretEnv);\n\tif (authClientId && authClientSecret) return {\n\t\tclientId: authClientId,\n\t\tclientSecret: authClientSecret\n\t};\n\tconst clientId = envValue(config.fallbackClientIdEnv);\n\tconst clientSecret = envValue(config.fallbackClientSecretEnv);\n\tif (clientId && clientSecret) return {\n\t\tclientId,\n\t\tclientSecret\n\t};\n\tif (authClientId || authClientSecret) console.warn(`[auth] Incomplete ${config.providerLabel} login OAuth env — set both ${config.authClientIdEnv} and ${config.authClientSecretEnv}.`);\n}\nconst GOOGLE_LOGIN_OAUTH_ENV = {\n\tproviderLabel: \"Google\",\n\tauthClientIdEnv: \"GOOGLE_AUTH_CLIENT_ID\",\n\tauthClientSecretEnv: \"GOOGLE_AUTH_CLIENT_SECRET\",\n\tfallbackClientIdEnv: \"GOOGLE_CLIENT_ID\",\n\tfallbackClientSecretEnv: \"GOOGLE_CLIENT_SECRET\"\n};\nconst GITHUB_LOGIN_OAUTH_ENV = {\n\tproviderLabel: \"GitHub\",\n\tauthClientIdEnv: \"GITHUB_AUTH_CLIENT_ID\",\n\tauthClientSecretEnv: \"GITHUB_AUTH_CLIENT_SECRET\",\n\tfallbackClientIdEnv: \"GITHUB_CLIENT_ID\",\n\tfallbackClientSecretEnv: \"GITHUB_CLIENT_SECRET\"\n};\n/** True when Better Auth Google login OAuth is configured. */\nfunction isGoogleSignInConfigured() {\n\treturn resolveLoginOAuthCredentials(GOOGLE_LOGIN_OAUTH_ENV) !== void 0;\n}\n/** True when Better Auth GitHub login OAuth is configured. */\nfunction isGitHubSignInConfigured() {\n\treturn resolveLoginOAuthCredentials(GITHUB_LOGIN_OAUTH_ENV) !== void 0;\n}\nfunction resolveSocialProviders() {\n\tconst googleCredentials = resolveLoginOAuthCredentials(GOOGLE_LOGIN_OAUTH_ENV);\n\tconst githubCredentials = resolveLoginOAuthCredentials(GITHUB_LOGIN_OAUTH_ENV);\n\tconst providers = {};\n\tif (googleCredentials) providers.google = {\n\t\t...googleCredentials,\n\t\tprompt: \"select_account\"\n\t};\n\tif (githubCredentials) providers.github = githubCredentials;\n\treturn Object.keys(providers).length > 0 ? providers : void 0;\n}\n//#endregion\n//#region src/user-create-hook.ts\nasync function linkUserCreateBeforeHook(user) {\n\tconst email = normalizeUserEmail(user.email);\n\tconst existing = await selectUserByNormalizedEmail(email);\n\tif (existing) return {\n\t\tdata: {\n\t\t\t...user,\n\t\t\tid: existing.id,\n\t\t\temail: existing.email,\n\t\t\tname: user.name?.trim() ? user.name : existing.name,\n\t\t\temailVerified: existing.emailVerified || user.emailVerified\n\t\t},\n\t\tforceAllowId: true\n\t};\n\treturn { data: {\n\t\t...user,\n\t\temail\n\t} };\n}\n//#endregion\n//#region src/server.ts\nconst AUTH_API_PATH = \"/api/auth/*\";\nfunction createAuthInstance(options) {\n\tconst socialProviders = resolveSocialProviders();\n\tconst magicLinkPlugin = createMagicLinkPlugin();\n\treturn betterAuth({\n\t\tsecret: options.secret,\n\t\tbaseURL: options.baseURL,\n\t\ttrustedOrigins: options.trustedOrigins,\n\t\taccount: { accountLinking: {\n\t\t\tenabled: true,\n\t\t\ttrustedProviders: [\"google\", \"github\"],\n\t\t\trequireLocalEmailVerified: false\n\t\t} },\n\t\tdatabase: createAuthDatabaseAdapter(),\n\t\tdatabaseHooks: { user: { create: { before: linkUserCreateBeforeHook } } },\n\t\t...socialProviders ? { socialProviders } : {},\n\t\tuser: { modelName: \"users\" },\n\t\tplugins: [\n\t\t\t...magicLinkPlugin ? [magicLinkPlugin] : [],\n\t\t\tlastLoginMethod({ customResolveMethod: (ctx) => {\n\t\t\t\tif (ctx.path?.startsWith(\"/magic-link/verify\")) return \"email\";\n\t\t\t\treturn null;\n\t\t\t} }),\n\t\t\tdeviceAuthorization({\n\t\t\t\tverificationUri: options.verificationUri ?? \"/device\",\n\t\t\t\tvalidateClient: (clientId) => clientId === CLI_CLIENT_ID,\n\t\t\t\tinterval: \"1s\",\n\t\t\t\tschema: {}\n\t\t\t}),\n\t\t\tbearer(),\n\t\t\tjwt({ jwt: { definePayload: ({ user }) => ({\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\timage: user.image,\n\t\t\t\temailVerified: user.emailVerified\n\t\t\t}) } })\n\t\t]\n\t});\n}\n/** Returns undefined when no secret is configured (auth disabled). */\nfunction createAuth(options = {}) {\n\tconst secret = options.secret ?? process.env.BETTER_AUTH_SECRET;\n\tif (!secret) return;\n\tconst baseURL = options.baseURL ?? process.env.PUBLIC_PLATFORM_URL?.replace(/\\/+$/, \"\") ?? process.env.PUBLIC_WEB_URL;\n\tif (!baseURL) throw new Error(\"PUBLIC_PLATFORM_URL or PUBLIC_WEB_URL is required when auth is enabled\");\n\treturn createAuthInstance({\n\t\t...options,\n\t\tsecret,\n\t\tbaseURL\n\t});\n}\nfunction handleAuthRequest(auth, request) {\n\treturn auth.handler(request);\n}\n//#endregion\n//#region src/webhook-api-key.ts\nfunction extractWebhookApiKeyFromRequest(request) {\n\tconst url = new URL(request.url);\n\tconst queryToken = url.searchParams.get(\"token\") ?? url.searchParams.get(\"api_key\");\n\tif (queryToken?.trim()) return queryToken.trim();\n\tconst authorization = request.headers.get(\"authorization\");\n\tif (authorization?.startsWith(\"Bearer \")) {\n\t\tconst bearer = authorization.slice(7).trim();\n\t\tif (bearer) return bearer;\n\t}\n\treturn request.headers.get(\"x-api-key\")?.trim() || null;\n}\n//#endregion\nexport { AUTH_API_PATH, CLI_CLIENT_ID, createAuth, createAuthJwtVerifier, createDefaultAuthJwtVerifier, createJwtTokenCache, createJwtVerifier, decodeJwtExpiryMs, extractBearerToken, extractWebhookApiKeyFromRequest, fetchJwtWithSession, handleAuthRequest, isGitHubSignInConfigured, isGoogleSignInConfigured, isMagicLinkSignInConfigured, resolveAuthApiBaseUrl, resolveAuthEmailFrom, resolveRequestAuth };\n\n//# sourceMappingURL=index.mjs.map","import { runWithProjectDatabase, runWithProjectScope, selectEphemeralTriggerAttachments, syncSkillRegistry } from \"@keystrokehq/database\";\nimport { ensureWebhookApiKeys, promoteProjectArtifact, resolveOrgDatabaseUrl, selectOrganizationById, selectProjectArtifactById, selectProjectById, updateProjectActive, updateProjectArtifactManifest, updateProjectFailed } from \"@keystrokehq/platform-database\";\nimport { extractWebhookRoutesFromManifest, fetchStoredRouteManifest, syncRegistryFromStoredManifest, webhookRouteFromEndpoint } from \"@keystrokehq/server\";\nimport { StoredProjectSourceManifestSchema, parseStoredRouteManifest } from \"@keystrokehq/shared\";\nimport { getPgBoss } from \"@keystrokehq/scheduler\";\n//#region src/management/start-project.ts\nasync function startProject(input) {\n\ttry {\n\t\tconst result = await input.runtime.start({\n\t\t\tprojectId: input.projectId,\n\t\t\tname: input.name,\n\t\t\tartifactId: input.artifactId,\n\t\t\tartifactUrl: input.artifactUrl,\n\t\t\tdatabase: input.database\n\t\t});\n\t\tawait input.onSuccess(result);\n\t} catch (error) {\n\t\tawait input.onFailure(error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n//#endregion\n//#region src/promote-project-deploy.ts\nasync function resolveDeployManifest(input) {\n\tif (input.artifactManifest != null) return parseStoredRouteManifest(input.artifactManifest);\n\treturn fetchStoredRouteManifest(input.baseUrl);\n}\n/** Skills only exist in the source manifest (file tree), never the route manifest. */\nfunction skillRecordsFromSourceManifest(sourceManifestJson) {\n\tconst parsed = StoredProjectSourceManifestSchema.safeParse(sourceManifestJson);\n\tif (!parsed.success) return [];\n\treturn parsed.data.resources.skills.map((skill) => ({\n\t\tkey: skill.key,\n\t\tmoduleFile: skill.path\n\t}));\n}\n/** Cut over activeArtifactId, then sync org project registry from the runtime manifest. */\nasync function promoteProjectDeploy(input) {\n\tconst project = await selectProjectById(input.projectId);\n\tif (!project) throw new Error(`Project ${input.projectId} not found`);\n\tconst artifact = await selectProjectArtifactById(input.artifactId);\n\tif (!artifact || artifact.projectId !== input.projectId) throw new Error(`Artifact ${input.artifactId} not found for project ${input.projectId}`);\n\tconst organization = await selectOrganizationById(project.organizationId);\n\tif (!organization) throw new Error(`Organization not found for project ${input.projectId}`);\n\tconst manifest = await resolveDeployManifest({\n\t\tartifactManifest: artifact.manifestJson,\n\t\tbaseUrl: input.baseUrl\n\t});\n\tif (artifact.manifestJson == null) await updateProjectArtifactManifest({\n\t\tartifactId: input.artifactId,\n\t\tmanifestJson: manifest\n\t});\n\tif (project.pendingArtifactId === input.artifactId) await promoteProjectArtifact({\n\t\tprojectId: input.projectId,\n\t\tartifactId: input.artifactId\n\t});\n\telse if (project.activeArtifactId !== input.artifactId) throw new Error(`Artifact ${input.artifactId} is not the pending deploy for project ${input.projectId}`);\n\tconst ephemeralRoutes = [];\n\tawait runWithProjectDatabase({\n\t\turl: resolveOrgDatabaseUrl(organization),\n\t\tsearchPath: organization.dbSchema\n\t}, async () => runWithProjectScope(project.id, async () => {\n\t\tawait syncRegistryFromStoredManifest(manifest);\n\t\tawait syncSkillRegistry(skillRecordsFromSourceManifest(artifact.sourceManifestJson));\n\t\tconst byRoute = /* @__PURE__ */ new Map();\n\t\tfor (const row of await selectEphemeralTriggerAttachments()) {\n\t\t\tif (row.source.kind !== \"webhook\") continue;\n\t\t\tconst route = webhookRouteFromEndpoint(row.source.endpoint);\n\t\t\tbyRoute.set(route, [...byRoute.get(route) ?? [], row.key]);\n\t\t}\n\t\tfor (const [route, attachmentKeys] of byRoute) ephemeralRoutes.push({\n\t\t\troute,\n\t\t\tattachmentKeys\n\t\t});\n\t}));\n\tconst webhookRoutes = [...extractWebhookRoutesFromManifest(manifest), ...ephemeralRoutes];\n\tif (webhookRoutes.length > 0) await ensureWebhookApiKeys(project.id, webhookRoutes, project.id);\n}\n//#endregion\n//#region src/resolve-runtime-artifact.ts\n/** Decide whether a pg-boss job should start runtime, skip as stale, or fail. */\nfunction resolveRuntimeArtifact(project, jobArtifactId) {\n\tif (jobArtifactId && project.pendingArtifactId && jobArtifactId !== project.pendingArtifactId) return { action: \"skip\" };\n\tif (jobArtifactId && !project.pendingArtifactId && project.activeArtifactId && jobArtifactId !== project.activeArtifactId) return { action: \"skip\" };\n\tconst artifactId = jobArtifactId ?? project.pendingArtifactId ?? project.activeArtifactId ?? null;\n\tif (!artifactId) return {\n\t\taction: \"error\",\n\t\tmessage: `Project ${project.id} has no pending artifact`\n\t};\n\tif (!project.pendingArtifactId && project.activeArtifactId === artifactId && project.status === \"active\" && project.baseUrl && project.runtimeId) return { action: \"skip\" };\n\treturn {\n\t\taction: \"run\",\n\t\tartifactId\n\t};\n}\n//#endregion\n//#region src/runtime-jobs.ts\nconst PROJECT_RUNTIME_QUEUE = \"project.runtime\";\nconst PROJECT_RUNTIME_DLQ = \"project.runtime.dlq\";\nasync function ensureProjectRuntimeQueues(boss) {\n\tawait boss.createQueue(PROJECT_RUNTIME_DLQ);\n\tawait boss.createQueue(PROJECT_RUNTIME_QUEUE, {\n\t\tretryLimit: 5,\n\t\tretryDelay: 30,\n\t\tretryBackoff: true,\n\t\texpireInSeconds: 600,\n\t\tdeadLetter: PROJECT_RUNTIME_DLQ\n\t});\n}\nasync function enqueueProjectRuntime(job) {\n\treturn getPgBoss().send(PROJECT_RUNTIME_QUEUE, job, { singletonKey: job.projectId });\n}\nasync function destroyProjectRuntime(runtime, input, runtimeId) {\n\tif (!runtime.destroy) return;\n\ttry {\n\t\tawait runtime.destroy({\n\t\t\truntimeId,\n\t\t\thosting: input.hosting\n\t\t});\n\t} catch (destroyError) {\n\t\tconsole.error(`[project.runtime] failed to destroy runtime ${runtimeId}`, destroyError);\n\t}\n}\nfunction startProjectRuntimeWorker(runtime, options = {}) {\n\tconst boss = getPgBoss();\n\tconst resolveStartInput = options.resolveStartInput ?? (async (job) => {\n\t\tthrow new Error(`Project runtime for ${job.projectId} requires resolveStartInput with database credentials`);\n\t});\n\tboss.work(PROJECT_RUNTIME_QUEUE, async (jobs) => {\n\t\tfor (const job of jobs) try {\n\t\t\tconst project = await selectProjectById(job.data.projectId);\n\t\t\tif (!project) throw new Error(`Project ${job.data.projectId} not found`);\n\t\t\tconst resolved = resolveRuntimeArtifact(project, job.data.artifactId);\n\t\t\tif (resolved.action === \"skip\") continue;\n\t\t\tif (resolved.action === \"error\") throw new Error(resolved.message);\n\t\t\tconst input = await resolveStartInput({\n\t\t\t\t...job.data,\n\t\t\t\tartifactId: resolved.artifactId\n\t\t\t});\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await runtime.start(input);\n\t\t\t\tawait promoteProjectDeploy({\n\t\t\t\t\tprojectId: job.data.projectId,\n\t\t\t\t\tartifactId: resolved.artifactId,\n\t\t\t\t\tbaseUrl: result.baseUrl\n\t\t\t\t});\n\t\t\t\tawait updateProjectActive(job.data.projectId, result);\n\t\t\t\tif (input.previousRuntimeId) await destroyProjectRuntime(runtime, input, input.previousRuntimeId);\n\t\t\t} catch (error) {\n\t\t\t\tif (result) await destroyProjectRuntime(runtime, input, result.runtimeId);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`[project.runtime] ${job.data.projectId} failed`, error);\n\t\t\tthrow error;\n\t\t}\n\t});\n\tboss.work(PROJECT_RUNTIME_DLQ, async (jobs) => {\n\t\tfor (const job of jobs) await updateProjectFailed(job.data.projectId, \"Project runtime failed after retries\");\n\t});\n}\n//#endregion\nexport { enqueueProjectRuntime, ensureProjectRuntimeQueues, promoteProjectDeploy, resolveRuntimeArtifact, startProject, startProjectRuntimeWorker };\n\n//# sourceMappingURL=index.mjs.map","import { AUTH_API_PATH, handleAuthRequest, type Auth } from \"@keystrokehq/auth\";\nimport type { Env, Hono } from \"hono\";\n\nexport function mountAuth<E extends Env>(app: Hono<E>, auth: Auth): void {\n app.on([\"POST\", \"GET\"], AUTH_API_PATH, (c) => handleAuthRequest(auth, c.req.raw));\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"./types\";\n\nconst adminRoles = new Set([\"owner\", \"admin\"]);\n\nexport function requireOrgAdmin(): MiddlewareHandler<{ Variables: OrganizationVariables }> {\n return async (c, next) => {\n const { role } = c.get(\"organization\");\n\n if (!adminRoles.has(role)) {\n return c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403);\n }\n\n await next();\n };\n}\n","import { ACTIVE_ORG_COOKIE, ACTIVE_ORG_HEADER } from \"@keystrokehq/shared\";\nimport type { Context } from \"hono\";\nimport { getCookie } from \"hono/cookie\";\n\nexport function resolveActiveOrganizationId(c: Context): string | undefined {\n const header = c.req.header(ACTIVE_ORG_HEADER)?.trim();\n if (header) {\n return header;\n }\n\n const cookie = getCookie(c, ACTIVE_ORG_COOKIE)?.trim();\n return cookie || undefined;\n}\n\nexport function activeOrganizationCookie(organizationId: string): string {\n return `${ACTIVE_ORG_COOKIE}=${organizationId}; Path=/; HttpOnly; SameSite=Lax`;\n}\n\nexport function clearActiveOrganizationCookie(): string {\n return `${ACTIVE_ORG_COOKIE}=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax`;\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\nimport type { Context } from \"hono\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { resolveActiveOrganizationId } from \"./resolve-org-id\";\nimport type { OrganizationContext, OrganizationVariables } from \"./types\";\n\ntype OrganizationResolution =\n | { ok: true; organization: OrganizationContext }\n | { ok: false; response: Response };\n\nexport async function resolveOrganizationContext(c: Context): Promise<OrganizationResolution> {\n const organizationId = resolveActiveOrganizationId(c);\n\n if (!organizationId) {\n return {\n ok: false,\n response: c.json(\n ErrorResponseSchema.parse({\n error: \"Select an organization to continue\",\n code: \"needs_org_selection\",\n }),\n 409,\n ),\n };\n }\n\n const user = c.get(\"user\");\n const membership = await selectUserOrganizationMembership(user.id, organizationId);\n\n if (!membership) {\n return {\n ok: false,\n response: c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403),\n };\n }\n\n return {\n ok: true,\n organization: {\n organizationId: membership.organization.id,\n organizationName: membership.organization.name,\n role: membership.role,\n },\n };\n}\n\nexport function requireOrganization(): MiddlewareHandler<{ Variables: OrganizationVariables }> {\n return async (c, next) => {\n const resolved = await resolveOrganizationContext(c);\n if (!resolved.ok) {\n return resolved.response;\n }\n\n c.set(\"organization\", resolved.organization);\n await next();\n };\n}\n","import { ErrorResponseSchema, mapProject } from \"@keystrokehq/shared\";\nimport {\n runWithWorkspaceContext,\n selectOrganizationById,\n selectProjectForOrganization,\n} from \"@keystrokehq/platform-database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { ProjectRouteVariables } from \"./types\";\n\nexport function requireProject(): MiddlewareHandler<{ Variables: ProjectRouteVariables }> {\n return async (c, next) => {\n const organization = c.get(\"organization\");\n const projectId = c.req.param(\"projectId\")?.trim();\n\n if (!projectId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project id is required\" }), 400);\n }\n\n const [project, organizationRow] = await Promise.all([\n selectProjectForOrganization(organization.organizationId, projectId),\n selectOrganizationById(organization.organizationId),\n ]);\n\n if (!project) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project not found\" }), 404);\n }\n\n if (!organizationRow) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n c.set(\"project\", project);\n\n await runWithWorkspaceContext(\n {\n organizationId: organization.organizationId,\n role: organization.role,\n projectId: project.id,\n dbSchema: organizationRow.dbSchema,\n },\n () => next(),\n );\n };\n}\n\nexport function routeProject(project: ProjectRouteVariables[\"project\"]) {\n return mapProject(project);\n}\n","import {\n createDefaultAuthJwtVerifier,\n resolveRequestAuth,\n type JwtVerifier,\n} from \"@keystrokehq/auth\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { SessionVariables } from \"./types\";\n\nexport function requireSession(\n jwtVerifier?: JwtVerifier,\n): MiddlewareHandler<{ Variables: SessionVariables }> {\n const verifier = jwtVerifier ?? createDefaultAuthJwtVerifier();\n\n return async (c, next) => {\n const result = await resolveRequestAuth(verifier, c.req.raw.headers);\n\n if (!result) {\n return c.json({ error: \"Unauthorized\" }, 401);\n }\n\n c.set(\"user\", result.user);\n c.set(\"session\", result.session);\n await next();\n };\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { runWithProjectDatabase, runWithTenantScope } from \"@keystrokehq/database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"../auth/types\";\n\n/** Bind the org's shared Postgres schema (all projects in the org use this DB). */\nexport function withOrganizationProjectDatabase(): MiddlewareHandler<{\n Variables: OrganizationVariables;\n}> {\n return async (c, next) => {\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithTenantScope(organizationId, () => next()),\n ),\n );\n };\n}\n","import { ListOrganizationsResponseSchema, mapUserOrganization } from \"@keystrokehq/shared\";\nimport { selectUserOrganizations } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const memberships = await selectUserOrganizations(user.id);\n\n return c.json(\n ListOrganizationsResponseSchema.parse({\n organizations: memberships.map(mapUserOrganization),\n }),\n );\n};\n","import { seedOAuthAppsFromEnvForOrganization } from \"@keystrokehq/server\";\nimport type { HostingPlugin } from \"@keystrokehq/hosting\";\nimport type { OrganizationStorageResult, StoragePlugin } from \"@keystrokehq/storage\";\nimport {\n createOrganizationForUser,\n encryptCredentialPayload,\n isOrganizationStorageBucketInUse,\n OrganizationSlugTakenError,\n resolveNewOrganizationIdentity,\n type UserOrganizationMembership,\n} from \"@keystrokehq/platform-database\";\n\nexport type CreateOrganizationDependencies = {\n hosting: HostingPlugin;\n storage: StoragePlugin;\n};\n\nexport async function createOrganizationWithHosting(\n deps: CreateOrganizationDependencies,\n userId: string,\n name: string,\n preferredSlug?: string,\n): Promise<UserOrganizationMembership> {\n const { hosting, storage } = deps;\n const identity = await resolveNewOrganizationIdentity(name, preferredSlug);\n let hostedAppName: string | undefined;\n let provisionedStorage: OrganizationStorageResult | undefined;\n let organizationPersisted = false;\n\n try {\n if (hosting.provisionOrganization) {\n const hosted = await hosting.provisionOrganization({\n organizationId: identity.organizationId,\n name: name.trim(),\n slug: identity.slug,\n });\n hostedAppName = hosted.appName;\n }\n\n provisionedStorage = await storage.provisionOrganization({\n organizationId: identity.organizationId,\n name: name.trim(),\n slug: identity.slug,\n });\n\n const membership = await createOrganizationForUser(userId, name, preferredSlug, {\n organizationId: identity.organizationId,\n slug: identity.slug,\n hostingAppName: hostedAppName ?? null,\n storage: {\n bucket: provisionedStorage.bucket,\n endpoint: provisionedStorage.endpoint,\n accessKeyIdCiphertext: encryptCredentialPayload(provisionedStorage.accessKeyId),\n secretAccessKeyCiphertext: encryptCredentialPayload(provisionedStorage.secretAccessKey),\n region: provisionedStorage.region ?? null,\n forcePathStyle: provisionedStorage.forcePathStyle ?? null,\n },\n });\n organizationPersisted = true;\n await seedOAuthAppsFromEnvForOrganization(identity.organizationId);\n return membership;\n } catch (error) {\n if (provisionedStorage && !organizationPersisted) {\n const bucketInUse = await isOrganizationStorageBucketInUse(provisionedStorage.bucket);\n if (!bucketInUse) {\n await storage.deprovisionOrganization(provisionedStorage).catch(() => undefined);\n }\n }\n if (hostedAppName && hosting.deprovisionOrganization) {\n await hosting.deprovisionOrganization({ appName: hostedAppName }).catch(() => undefined);\n }\n\n throw error;\n }\n}\n\nexport { OrganizationSlugTakenError };\n","import { OrganizationSlugTakenError } from \"@keystrokehq/platform-database\";\nimport type { OrganizationSlugErrorCode } from \"@keystrokehq/shared\";\nimport { organizationSlugErrorCodeFromMessage } from \"@keystrokehq/shared\";\nimport { ZodError } from \"zod\";\n\nexport function organizationSlugErrorBody(error: OrganizationSlugTakenError | ZodError): {\n error: string;\n code: OrganizationSlugErrorCode;\n} {\n if (error instanceof OrganizationSlugTakenError) {\n return { error: error.message, code: \"slug_taken\" };\n }\n\n const message = error.issues[0]?.message ?? \"Invalid organization slug\";\n return {\n error: message,\n code: organizationSlugErrorCodeFromMessage(message),\n };\n}\n","import {\n CreateOrganizationRequestSchema,\n CreateOrganizationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport type { CreateOrganizationDependencies } from \"../../../services/create-organization\";\nimport { ZodError } from \"zod\";\n\nimport type { AccountRouteHandler } from \"../../types\";\nimport {\n createOrganizationWithHosting,\n OrganizationSlugTakenError,\n} from \"../../../services/create-organization\";\nimport { organizationSlugErrorBody } from \"./slug-errors\";\n\nexport function createOrganizationHandler(\n deps: CreateOrganizationDependencies,\n): AccountRouteHandler {\n return async (c) => {\n const user = c.get(\"user\");\n const body = await c.req.json().catch(() => null);\n const parsed = CreateOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid organization request\" }), 400);\n }\n\n try {\n const membership = await createOrganizationWithHosting(\n deps,\n user.id,\n parsed.data.name,\n parsed.data.slug,\n );\n\n return c.json(\n CreateOrganizationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n 201,\n );\n } catch (error) {\n if (error instanceof OrganizationSlugTakenError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 409);\n }\n\n if (error instanceof ZodError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 400);\n }\n\n throw error;\n }\n };\n}\n","import {\n ErrorResponseSchema,\n SlugAvailabilityQuerySchema,\n SlugAvailabilityResponseSchema,\n} from \"@keystrokehq/shared\";\nimport { checkOrganizationSlugAvailability } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const parsed = SlugAvailabilityQuerySchema.safeParse({\n slug: c.req.query(\"slug\"),\n excludeOrganizationId: c.req.query(\"excludeOrganizationId\"),\n });\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid slug query\" }), 400);\n }\n\n const availability = await checkOrganizationSlugAvailability(\n parsed.data.slug,\n parsed.data.excludeOrganizationId,\n );\n\n return c.json(SlugAvailabilityResponseSchema.parse(availability));\n};\n","import { ActiveOrganizationResponseSchema, mapUserOrganization } from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\n\nimport { resolveActiveOrganizationId } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const organizationId = resolveActiveOrganizationId(c);\n\n if (!organizationId) {\n return c.json(ActiveOrganizationResponseSchema.parse({ organization: null }));\n }\n\n const user = c.get(\"user\");\n const membership = await selectUserOrganizationMembership(user.id, organizationId);\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: membership ? mapUserOrganization(membership) : null,\n }),\n );\n};\n","import {\n ActiveOrganizationResponseSchema,\n ErrorResponseSchema,\n SetActiveOrganizationRequestSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\n\nimport { activeOrganizationCookie } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const body = await c.req.json().catch(() => null);\n const parsed = SetActiveOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization id is required\" }), 400);\n }\n\n const membership = await selectUserOrganizationMembership(user.id, parsed.data.organizationId);\n\n if (!membership) {\n return c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403);\n }\n\n c.header(\"Set-Cookie\", activeOrganizationCookie(membership.organization.id));\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n );\n};\n","import { ActiveOrganizationResponseSchema } from \"@keystrokehq/shared\";\n\nimport { clearActiveOrganizationCookie } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n c.header(\"Set-Cookie\", clearActiveOrganizationCookie());\n\n return c.json(ActiveOrganizationResponseSchema.parse({ organization: null }));\n};\n","import {\n ActiveOrganizationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n UpdateOrganizationRequestSchema,\n} from \"@keystrokehq/shared\";\nimport { OrganizationSlugTakenError, updateOrganizationSlug } from \"@keystrokehq/platform-database\";\nimport { ZodError } from \"zod\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { organizationSlugErrorBody } from \"../slug-errors\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = UpdateOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(parsed.error)), 400);\n }\n\n try {\n const updated = await updateOrganizationSlug(organization.organizationId, parsed.data.slug);\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: mapUserOrganization({\n organization: updated,\n role: organization.role,\n }),\n }),\n );\n } catch (error) {\n if (error instanceof OrganizationSlugTakenError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 409);\n }\n\n if (error instanceof ZodError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 400);\n }\n\n throw error;\n }\n};\n","import { PLATFORM_RESOURCE_UNSUPPORTED_TEXT } from \"@keystrokehq/shared\";\n\n/** Derive a human display name from a resource key (no `name` column exists yet). */\nexport function titleCaseKey(key: string): string {\n const normalized = key\n .split(/[/_-]+/)\n .filter(Boolean)\n .join(\" \");\n\n if (!normalized) {\n return PLATFORM_RESOURCE_UNSUPPORTED_TEXT;\n }\n\n return normalized.replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n","import { AgentSummarySchema, type AgentSummary } from \"@keystrokehq/shared\";\nimport type { AgentRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\n/** The route-manifest deploy sync seeds a placeholder model until the runtime registers the real one. */\nconst PENDING_MODEL = \"pending/pending\";\n\nfunction formatModel(model: AgentRow[\"model\"]): string | undefined {\n if (!model || model === PENDING_MODEL) {\n return undefined;\n }\n\n return model;\n}\n\nexport function toAgentSummary(row: AgentRow): AgentSummary {\n return AgentSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n model: formatModel(row.model),\n });\n}\n","import { AgentSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveAgents } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toAgentSummary } from \"../resources/agents\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveAgents();\n\n return c.json(AgentSummaryListResponseSchema.parse(rows.map(toAgentSummary)));\n};\n","import { AgentSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveAgentById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toAgentSummary } from \"../../resources/agents\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const agentId = c.req.param(\"agentId\") ?? \"\";\n const row = agentId ? await selectActiveAgentById(agentId) : undefined;\n\n return c.json(AgentSummaryDetailResponseSchema.parse(row ? toAgentSummary(row) : null));\n};\n","import { WorkflowSummarySchema, type WorkflowSummary } from \"@keystrokehq/shared\";\nimport type { WorkflowRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\nexport function toWorkflowSummary(row: WorkflowRow): WorkflowSummary {\n return WorkflowSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n });\n}\n","import { WorkflowSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveWorkflows } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toWorkflowSummary } from \"../resources/workflows\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveWorkflows();\n\n return c.json(WorkflowSummaryListResponseSchema.parse(rows.map(toWorkflowSummary)));\n};\n","import { WorkflowSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveWorkflowById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toWorkflowSummary } from \"../../resources/workflows\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const workflowId = c.req.param(\"workflowId\") ?? \"\";\n const row = workflowId ? await selectActiveWorkflowById(workflowId) : undefined;\n\n return c.json(WorkflowSummaryDetailResponseSchema.parse(row ? toWorkflowSummary(row) : null));\n};\n","import { SkillSummarySchema, type SkillSummary } from \"@keystrokehq/shared\";\nimport type { SkillRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\nexport function toSkillSummary(row: SkillRow): SkillSummary {\n return SkillSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n });\n}\n","import { SkillSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveSkills } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toSkillSummary } from \"../resources/skills\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveSkills();\n\n return c.json(SkillSummaryListResponseSchema.parse(rows.map(toSkillSummary)));\n};\n","import { SkillSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveSkillById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toSkillSummary } from \"../../resources/skills\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const skillId = c.req.param(\"skillId\") ?? \"\";\n const row = skillId ? await selectActiveSkillById(skillId) : undefined;\n\n return c.json(SkillSummaryDetailResponseSchema.parse(row ? toSkillSummary(row) : null));\n};\n","import { ListProjectsResponseSchema, mapProject } from \"@keystrokehq/shared\";\nimport { selectProjectsByOrganizationId } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const projects = await selectProjectsByOrganizationId(organization.organizationId);\n\n return c.json(\n ListProjectsResponseSchema.parse({\n projects: projects.map(mapProject),\n }),\n );\n};\n","import {\n CreateProjectRequestSchema,\n CreateProjectResponseSchema,\n ErrorResponseSchema,\n mapProject,\n} from \"@keystrokehq/shared\";\nimport { createProjectForOrganization } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = CreateProjectRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project name is required\" }), 400);\n }\n\n const project = await createProjectForOrganization(\n organization.organizationId,\n parsed.data.name,\n parsed.data.description,\n );\n\n return c.json(\n CreateProjectResponseSchema.parse({\n project: mapProject(project),\n }),\n 201,\n );\n};\n","import { ProjectResponseSchema } from \"@keystrokehq/shared\";\n\nimport { routeProject } from \"../../../../auth/require-project\";\nimport type { ProjectRouteHandler } from \"../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n return c.json(\n ProjectResponseSchema.parse({\n project: routeProject(c.get(\"project\")),\n }),\n );\n};\n","import { CreateProjectArtifactResponseSchema, mapProjectArtifact } from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n insertProjectArtifact,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { projectArtifactKey } from \"@keystrokehq/storage\";\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nconst DEFAULT_PRESIGN_TTL_SECONDS = 900;\nconst ARTIFACT_CONTENT_TYPE = \"application/gzip\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const artifactId = crypto.randomUUID();\n const storageKey = projectArtifactKey(project.id, artifactId);\n const storage = createOrgStorageClient(organization);\n\n const artifact = await insertProjectArtifact({\n id: artifactId,\n projectId: project.id,\n storageKey,\n });\n\n const uploadUrl = await storage.presignPut({\n key: storageKey,\n contentType: ARTIFACT_CONTENT_TYPE,\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n });\n\n return c.json(\n CreateProjectArtifactResponseSchema.parse({\n artifact: mapProjectArtifact(artifact),\n uploadUrl,\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n }),\n 201,\n );\n};\n","import {\n CompleteProjectArtifactResponseSchema,\n ErrorResponseSchema,\n mapProject,\n mapProjectArtifact,\n} from \"@keystrokehq/shared\";\nimport {\n completeProjectArtifact,\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { enqueueProjectRuntime } from \"@keystrokehq/projects\";\nimport type { ProjectRouteHandler } from \"../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const existing = await selectProjectArtifactForProject(artifactId, project.id);\n if (!existing) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n if (existing.status === \"ready\") {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact already completed\" }), 409);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n const head = await storage.headObject(existing.storageKey);\n if (!head || head.contentLength <= 0) {\n return c.json(\n ErrorResponseSchema.parse({ error: \"Artifact upload not found in storage\" }),\n 400,\n );\n }\n\n try {\n const artifactBytes = await storage.getObject(existing.storageKey);\n if (!artifactBytes || artifactBytes.byteLength <= 0) {\n return c.json(\n ErrorResponseSchema.parse({ error: \"Artifact upload not found in storage\" }),\n 400,\n );\n }\n\n const result = await completeProjectArtifact({\n artifactId,\n projectId: project.id,\n });\n\n await enqueueProjectRuntime({\n projectId: project.id,\n name: project.name,\n artifactId,\n });\n\n return c.json(\n CompleteProjectArtifactResponseSchema.parse({\n artifact: mapProjectArtifact(result.artifact),\n project: mapProject(result.project),\n }),\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to complete artifact\";\n return c.json(ErrorResponseSchema.parse({ error: message }), 400);\n }\n};\n","import {\n ErrorResponseSchema,\n PresignProjectSourceRequestSchema,\n PresignProjectSourceResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nconst SOURCE_BLOB_CONTENT_TYPE = \"text/plain; charset=utf-8\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n const parsed = PresignProjectSourceRequestSchema.safeParse(await c.req.json().catch(() => null));\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid blob list\" }), 400);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n\n // De-dupe requested hashes, then presign PUTs only for blobs not already\n // stored so unchanged files are never re-uploaded across deploys.\n const hashes = [...new Set(parsed.data.blobs.map((blob) => blob.hash))];\n const uploads = await Promise.all(\n hashes.map(async (hash) => {\n const key = projectSourceBlobKey(project.id, hash);\n const head = await storage.headObject(key);\n if (head && head.contentLength > 0) {\n return null;\n }\n const url = await storage.presignPut({ key, contentType: SOURCE_BLOB_CONTENT_TYPE });\n return { hash, url };\n }),\n );\n\n return c.json(\n PresignProjectSourceResponseSchema.parse({\n uploads: uploads.filter((upload): upload is { hash: string; url: string } => upload !== null),\n }),\n );\n};\n","import {\n ErrorResponseSchema,\n StoredProjectSourceManifestSchema,\n UploadProjectSourceManifestRequestSchema,\n UploadProjectSourceResponseSchema,\n projectFileId,\n} from \"@keystrokehq/shared\";\nimport {\n selectProjectArtifactForProject,\n updateProjectArtifactSourceManifest,\n} from \"@keystrokehq/platform-database\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n const parsed = UploadProjectSourceManifestRequestSchema.safeParse(\n await c.req.json().catch(() => null),\n );\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid source manifest\" }), 400);\n }\n\n const manifest = StoredProjectSourceManifestSchema.parse({\n files: parsed.data.files.map((file) => ({\n id: projectFileId(file.path),\n path: file.path,\n hash: file.hash,\n })),\n resources: parsed.data.resources,\n generatedAt: new Date().toISOString(),\n });\n\n await updateProjectArtifactSourceManifest({\n artifactId,\n projectId: project.id,\n sourceManifestJson: manifest,\n });\n\n return c.json(\n UploadProjectSourceResponseSchema.parse({ ok: true, fileCount: manifest.files.length }),\n 201,\n );\n};\n","import {\n ListProjectFilesResponseSchema,\n StoredProjectSourceManifestSchema,\n} from \"@keystrokehq/shared\";\nimport { selectActiveArtifactSourceManifestForProject } from \"@keystrokehq/platform-database\";\n\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const active = await selectActiveArtifactSourceManifestForProject(project.id);\n\n // No active deploy, or a deploy whose source upload never landed.\n if (!active || !active.sourceManifestJson) {\n return c.json(\n ListProjectFilesResponseSchema.parse({ artifactId: active?.artifactId ?? null, files: [] }),\n );\n }\n\n const manifest = StoredProjectSourceManifestSchema.parse(active.sourceManifestJson);\n\n return c.json(\n ListProjectFilesResponseSchema.parse({\n artifactId: active.artifactId,\n files: manifest.files.map((file) => ({ id: file.id, path: file.path, hash: file.hash })),\n resources: manifest.resources,\n }),\n );\n};\n","import { ErrorResponseSchema, StoredProjectSourceManifestSchema } from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const path = c.req.query(\"path\");\n if (!path) {\n return c.json(ErrorResponseSchema.parse({ error: \"File path is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact || !artifact.sourceManifestJson) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n // Resolve path -> hash via the manifest so we only ever serve files that\n // belong to this deploy (no arbitrary blob access).\n const manifest = StoredProjectSourceManifestSchema.parse(artifact.sourceManifestJson);\n const file = manifest.files.find((entry) => entry.path === path);\n if (!file) {\n return c.json(ErrorResponseSchema.parse({ error: \"File not found\" }), 404);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n let bytes: Uint8Array;\n try {\n bytes = await storage.getObject(projectSourceBlobKey(project.id, file.hash));\n } catch {\n return c.json(ErrorResponseSchema.parse({ error: \"File contents not found\" }), 404);\n }\n\n // Browser/CDN caching (immutable hash-addressed responses) is intentionally\n // deferred to a follow-up PR.\n c.header(\"Content-Type\", \"text/plain; charset=utf-8\");\n return c.body(new TextDecoder().decode(bytes));\n};\n","import { ProjectReachabilityResponseSchema } from \"@keystrokehq/shared\";\nimport { pingProjectTarget } from \"@keystrokehq/hosting\";\n\nimport type { HostingPlugin } from \"@keystrokehq/hosting\";\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nexport function createProjectReachabilityHandler(hosting: HostingPlugin): ProjectRouteHandler {\n return async (c) => {\n const project = c.get(\"project\");\n\n if (project.status !== \"active\") {\n return c.json(ProjectReachabilityResponseSchema.parse({ reachable: false }));\n }\n\n const reachable = await pingProjectTarget(\n {\n baseUrl: project.baseUrl,\n runtimeId: project.runtimeId,\n },\n { plugin: hosting },\n );\n\n return c.json(ProjectReachabilityResponseSchema.parse({ reachable }));\n };\n}\n","import { ListOrganizationMembersResponseSchema, mapOrganizationMember } from \"@keystrokehq/shared\";\nimport { selectOrganizationMembers } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const members = await selectOrganizationMembers(organizationId);\n\n return c.json(\n ListOrganizationMembersResponseSchema.parse({\n members: members.map(mapOrganizationMember),\n }),\n );\n};\n","import { resolveAuthEmailFrom } from \"@keystrokehq/auth\";\nimport { organizationInvitationAcceptPath } from \"@keystrokehq/shared\";\nimport { Resend } from \"resend\";\n\nexport type OrganizationInviteEmailPayload = {\n email: string;\n organizationName: string;\n invitationId: string;\n inviterName?: string;\n};\n\nfunction envValue(name: string): string | undefined {\n const value = process.env[name]?.trim();\n return value || undefined;\n}\n\nexport function resolveOrganizationInviteUrl(invitationId: string): string {\n const base = envValue(\"PUBLIC_WEB_URL\") ?? \"http://localhost:3000\";\n return `${base.replace(/\\/$/, \"\")}${organizationInvitationAcceptPath(invitationId)}`;\n}\n\nexport function isOrganizationInviteEmailConfigured(): boolean {\n return envValue(\"RESEND_API_KEY\") !== undefined;\n}\n\nfunction resolveResendApiKey(): string | undefined {\n return envValue(\"RESEND_API_KEY\");\n}\n\nfunction buildOrganizationInviteEmailHtml(payload: OrganizationInviteEmailPayload): string {\n const inviteUrl = resolveOrganizationInviteUrl(payload.invitationId);\n const escapedOrg = payload.organizationName.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\");\n const inviterLine = payload.inviterName\n ? `<p>${payload.inviterName.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\")} invited you to join <strong>${escapedOrg}</strong> on Keystroke.</p>`\n : `<p>You have been invited to join <strong>${escapedOrg}</strong> on Keystroke.</p>`;\n\n return `<!DOCTYPE html>\n<html>\n <body style=\"font-family: system-ui, sans-serif; line-height: 1.5; color: #111;\">\n ${inviterLine}\n <p><a href=\"${inviteUrl}\" style=\"display: inline-block; padding: 10px 16px; background: #111; color: #fff; text-decoration: none; border-radius: 8px;\">View invitation</a></p>\n <p style=\"color: #666; font-size: 13px;\">Sign in with this email address to accept the invitation.</p>\n </body>\n</html>`;\n}\n\nexport async function sendOrganizationInviteEmail(\n payload: OrganizationInviteEmailPayload,\n resend?: Resend,\n): Promise<boolean> {\n const apiKey = resolveResendApiKey();\n if (!apiKey) {\n console.warn(\"[platform] RESEND_API_KEY not set; organization invite email skipped\");\n return false;\n }\n\n const client = resend ?? new Resend(apiKey);\n const { error } = await client.emails.send({\n from: resolveAuthEmailFrom(),\n to: payload.email,\n subject: `Invitation to join ${payload.organizationName} on Keystroke`,\n html: buildOrganizationInviteEmailHtml(payload),\n });\n\n if (error) {\n console.warn(`[platform] Failed to send organization invite email: ${error.message}`);\n return false;\n }\n\n return true;\n}\n","import {\n ErrorResponseSchema,\n InviteOrganizationMembersRequestSchema,\n InviteOrganizationMembersResponseSchema,\n} from \"@keystrokehq/shared\";\nimport { inviteOrganizationMembers, selectUserById } from \"@keystrokehq/platform-database\";\n\nimport { sendOrganizationInviteEmail } from \"../../../../email/organization-invite-email\";\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = InviteOrganizationMembersRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid invite request\" }), 400);\n }\n\n const results = await inviteOrganizationMembers({\n organizationId: organization.organizationId,\n invitedByUserId: user.id,\n emails: parsed.data.emails,\n role: parsed.data.role,\n });\n\n const inviter = await selectUserById(user.id);\n for (const result of results) {\n if (!result.invitationId || (result.status !== \"sent\" && result.status !== \"pending\")) {\n continue;\n }\n\n await sendOrganizationInviteEmail({\n email: result.email,\n organizationName: organization.organizationName,\n invitationId: result.invitationId,\n inviterName: inviter?.name,\n });\n }\n\n return c.json(InviteOrganizationMembersResponseSchema.parse({ results }));\n};\n","import {\n ErrorResponseSchema,\n mapOrganizationMember,\n UpdateOrganizationMemberRequestSchema,\n UpdateOrganizationMemberResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n CannotModifyOwnerError,\n OrganizationMemberNotFoundError,\n updateOrganizationMemberRole,\n} from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const userId = c.req.param(\"userId\");\n const body = await c.req.json().catch(() => null);\n const parsed = UpdateOrganizationMemberRequestSchema.safeParse(body);\n\n if (!userId) {\n return c.json(ErrorResponseSchema.parse({ error: \"User id is required\" }), 400);\n }\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid member update request\" }), 400);\n }\n\n try {\n const member = await updateOrganizationMemberRole(organizationId, userId, parsed.data.role);\n\n return c.json(\n UpdateOrganizationMemberResponseSchema.parse({\n member: mapOrganizationMember(member),\n }),\n );\n } catch (error) {\n if (\n error instanceof CannotModifyOwnerError ||\n error instanceof OrganizationMemberNotFoundError\n ) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 400);\n }\n\n throw error;\n }\n};\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport {\n CannotModifyOwnerError,\n OrganizationMemberNotFoundError,\n removeOrganizationMember,\n} from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const userId = c.req.param(\"userId\");\n\n if (!userId) {\n return c.json(ErrorResponseSchema.parse({ error: \"User id is required\" }), 400);\n }\n\n try {\n await removeOrganizationMember(organizationId, userId);\n return c.body(null, 204);\n } catch (error) {\n if (\n error instanceof CannotModifyOwnerError ||\n error instanceof OrganizationMemberNotFoundError\n ) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 400);\n }\n\n throw error;\n }\n};\n","import {\n ListOrganizationInvitationsResponseSchema,\n mapOrganizationInvitation,\n} from \"@keystrokehq/shared\";\nimport { selectPendingInvitationsForUser } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitations = await selectPendingInvitationsForUser(user.id);\n\n return c.json(\n ListOrganizationInvitationsResponseSchema.parse({\n invitations: invitations.map(mapOrganizationInvitation),\n }),\n );\n};\n","import {\n AcceptOrganizationInvitationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport {\n acceptInvitation,\n OrganizationInvitationExpiredError,\n OrganizationInvitationForbiddenError,\n OrganizationInvitationNotFoundError,\n} from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitationId = c.req.param(\"invitationId\");\n\n if (!invitationId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invitation id is required\" }), 400);\n }\n\n try {\n const membership = await acceptInvitation(invitationId, user.id);\n\n return c.json(\n AcceptOrganizationInvitationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n );\n } catch (error) {\n if (error instanceof OrganizationInvitationNotFoundError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 404);\n }\n\n if (error instanceof OrganizationInvitationForbiddenError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 403);\n }\n\n if (error instanceof OrganizationInvitationExpiredError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 410);\n }\n\n throw error;\n }\n};\n","import {\n DeclineOrganizationInvitationResponseSchema,\n ErrorResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n declineInvitation,\n OrganizationInvitationForbiddenError,\n OrganizationInvitationNotFoundError,\n} from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitationId = c.req.param(\"invitationId\");\n\n if (!invitationId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invitation id is required\" }), 400);\n }\n\n try {\n await declineInvitation(invitationId, user.id);\n\n return c.json(DeclineOrganizationInvitationResponseSchema.parse({ success: true }));\n } catch (error) {\n if (error instanceof OrganizationInvitationNotFoundError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 404);\n }\n\n if (error instanceof OrganizationInvitationForbiddenError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 403);\n }\n\n throw error;\n }\n};\n","import { createDefaultAuthJwtVerifier } from \"@keystrokehq/auth\";\nimport type { CreateOrganizationDependencies } from \"../../services/create-organization\";\nimport { Hono } from \"hono\";\n\nimport { requireOrgAdmin } from \"../../auth/require-org-admin\";\nimport { requireOrganization } from \"../../auth/require-organization\";\nimport { requireProject } from \"../../auth/require-project\";\nimport { requireSession } from \"../../auth/require-session\";\nimport { withOrganizationProjectDatabase } from \"../../middleware/with-organization-project-database\";\nimport type {\n OrganizationVariables,\n ProjectRouteVariables,\n SessionVariables,\n} from \"../../auth/types\";\nimport { handler as listOrganizations } from \"./organizations/GET\";\nimport { createOrganizationHandler } from \"./organizations/POST\";\nimport { handler as checkOrganizationSlugAvailability } from \"./organizations/slug-available/GET\";\nimport { handler as getActiveOrganization } from \"./organizations/active/GET\";\nimport { handler as setActiveOrganization } from \"./organizations/active/POST\";\nimport { handler as clearActiveOrganization } from \"./organizations/active/DELETE\";\nimport { handler as updateActiveOrganization } from \"./organizations/active/PATCH\";\nimport { handler as listAgents } from \"./agents/GET\";\nimport { handler as getAgent } from \"./agents/[agentId]/GET\";\nimport { handler as listWorkflows } from \"./workflows/GET\";\nimport { handler as getWorkflow } from \"./workflows/[workflowId]/GET\";\nimport { handler as listSkills } from \"./skills/GET\";\nimport { handler as getSkill } from \"./skills/[skillId]/GET\";\nimport { handler as listProjects } from \"./projects/GET\";\nimport { handler as createProject } from \"./projects/POST\";\nimport { handler as getProject } from \"./projects/[projectId]/GET\";\nimport { handler as createProjectArtifact } from \"./projects/[projectId]/artifacts/POST\";\nimport { handler as completeProjectArtifact } from \"./projects/[projectId]/artifacts/[artifactId]/complete/POST\";\nimport { handler as presignProjectArtifactSource } from \"./projects/[projectId]/artifacts/[artifactId]/source/presign/POST\";\nimport { handler as uploadProjectArtifactSourceManifest } from \"./projects/[projectId]/artifacts/[artifactId]/source/manifest/POST\";\nimport { handler as listProjectFiles } from \"./projects/[projectId]/files/GET\";\nimport { handler as getProjectFileContent } from \"./projects/[projectId]/artifacts/[artifactId]/files/content/GET\";\nimport { createProjectReachabilityHandler } from \"./projects/[projectId]/reachability/GET\";\nimport { handler as listOrganizationMembers } from \"./members/GET\";\nimport { handler as inviteOrganizationMembers } from \"./members/invitations/POST\";\nimport { handler as updateOrganizationMember } from \"./members/[userId]/PATCH\";\nimport { handler as removeOrganizationMember } from \"./members/[userId]/DELETE\";\nimport { handler as listOrganizationInvitations } from \"./invitations/GET\";\nimport { handler as acceptOrganizationInvitation } from \"./invitations/[invitationId]/accept/POST\";\nimport { handler as declineOrganizationInvitation } from \"./invitations/[invitationId]/decline/POST\";\n\nexport function mountAccountRoutes(\n options: CreateOrganizationDependencies,\n): Hono<{ Variables: SessionVariables }> {\n const account = new Hono<{ Variables: SessionVariables }>();\n const orgScoped = new Hono<{ Variables: OrganizationVariables }>();\n const projectScoped = new Hono<{ Variables: ProjectRouteVariables }>();\n const jwtVerifier = createDefaultAuthJwtVerifier();\n const protect = requireSession(jwtVerifier);\n\n account.use(\"/*\", protect);\n orgScoped.use(\"/*\", protect);\n orgScoped.use(\"/*\", requireOrganization());\n projectScoped.use(\"/*\", protect);\n projectScoped.use(\"/*\", requireOrganization());\n\n account.get(\"/organizations\", listOrganizations);\n account.get(\"/organizations/slug-available\", checkOrganizationSlugAvailability);\n account.post(\"/organizations\", createOrganizationHandler(options));\n account.get(\"/organizations/active\", getActiveOrganization);\n account.post(\"/organizations/active\", setActiveOrganization);\n account.patch(\"/organizations/active\", requireOrganization(), updateActiveOrganization);\n account.delete(\"/organizations/active\", clearActiveOrganization);\n\n account.get(\"/invitations\", listOrganizationInvitations);\n account.post(\"/invitations/:invitationId/accept\", acceptOrganizationInvitation);\n account.post(\"/invitations/:invitationId/decline\", declineOrganizationInvitation);\n\n const orgAdmin = requireOrgAdmin();\n\n orgScoped.get(\"/members\", listOrganizationMembers);\n orgScoped.post(\"/members/invitations\", orgAdmin, inviteOrganizationMembers);\n orgScoped.patch(\"/members/:userId\", orgAdmin, updateOrganizationMember);\n orgScoped.delete(\"/members/:userId\", orgAdmin, removeOrganizationMember);\n\n const withOrgDb = withOrganizationProjectDatabase();\n\n orgScoped.get(\"/agents\", withOrgDb, listAgents);\n orgScoped.get(\"/agents/:agentId\", withOrgDb, getAgent);\n orgScoped.get(\"/workflows\", withOrgDb, listWorkflows);\n orgScoped.get(\"/workflows/:workflowId\", withOrgDb, getWorkflow);\n orgScoped.get(\"/skills\", withOrgDb, listSkills);\n orgScoped.get(\"/skills/:skillId\", withOrgDb, getSkill);\n\n orgScoped.get(\"/projects\", listProjects);\n orgScoped.post(\"/projects\", createProject);\n\n projectScoped.get(\"/:projectId\", requireProject(), getProject);\n projectScoped.get(\n \"/:projectId/reachability\",\n requireProject(),\n createProjectReachabilityHandler(options.hosting),\n );\n projectScoped.get(\"/:projectId/files\", requireProject(), listProjectFiles);\n projectScoped.get(\n \"/:projectId/artifacts/:artifactId/files/content\",\n requireProject(),\n getProjectFileContent,\n );\n projectScoped.post(\"/:projectId/artifacts\", requireProject(), createProjectArtifact);\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/complete\",\n requireProject(),\n completeProjectArtifact,\n );\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/source/presign\",\n requireProject(),\n presignProjectArtifactSource,\n );\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/source/manifest\",\n requireProject(),\n uploadProjectArtifactSourceManifest,\n );\n\n orgScoped.route(\"/projects\", projectScoped);\n account.route(\"/\", orgScoped);\n\n return account;\n}\n","const LOCAL_PLATFORM_ORIGIN = \"http://localhost:3002\";\n\n/** `PUBLIC_PLATFORM_URL` origin; falls back to localhost outside production. */\nexport function publicPlatformOrigin(): string | undefined {\n const fromEnv = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n if (fromEnv) {\n return fromEnv;\n }\n return process.env.NODE_ENV === \"production\" ? undefined : LOCAL_PLATFORM_ORIGIN;\n}\n\n/** Webhook intake origin for a project: `<platform>/api/projects/<id>`. */\nexport function platformWebhookOrigin(\n projectId: string,\n platformOrigin: string | undefined,\n): string | undefined {\n if (!platformOrigin) {\n return undefined;\n }\n return `${platformOrigin}/api/projects/${encodeURIComponent(projectId)}`;\n}\n","import type { Context, MiddlewareHandler } from \"hono\";\n\n/** Worker auth from Bearer or x-api-key (Anthropic SDK uses the latter). */\nexport function readWorkerTokenFromRequest(c: Context): string | undefined {\n const authorization = c.req.header(\"authorization\");\n if (authorization?.startsWith(\"Bearer \")) {\n return authorization.slice(\"Bearer \".length).trim();\n }\n\n const apiKey = c.req.header(\"x-api-key\")?.trim();\n if (apiKey) {\n return apiKey;\n }\n\n return undefined;\n}\n\nexport function requireWorkerToken(expectedToken: string | undefined): MiddlewareHandler {\n return async (c, next) => {\n if (!expectedToken) {\n return c.json(\n { error: \"worker_auth_unconfigured\", message: \"Worker auth is not configured.\" },\n 503,\n );\n }\n\n const token = readWorkerTokenFromRequest(c);\n if (!token || token !== expectedToken) {\n return c.json({ error: \"unauthorized\", message: \"Invalid worker token.\" }, 401);\n }\n\n await next();\n };\n}\n","import { Hono } from \"hono\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport {\n ensureWebhookApiKeyForRoute,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n selectProjectById,\n} from \"@keystrokehq/platform-database\";\nimport { buildWebhookUrl, createCredentialMaterializeHandler } from \"@keystrokehq/server\";\nimport { z } from \"zod\";\n\nimport type { LlmProxyPlugin } from \"../../llm-proxy-plugin\";\nimport { platformWebhookOrigin, publicPlatformOrigin } from \"../../lib/platform-origin\";\nimport { requireWorkerToken } from \"../../middleware/require-worker-token\";\n\nconst EnsureWebhookRouteBodySchema = z.object({\n route: z.string().trim().min(1),\n attachmentKeys: z.array(z.string().trim().min(1)).min(1),\n});\n\nexport function mountInternalRoutes(\n workerToken: string | undefined,\n llmProxy?: LlmProxyPlugin,\n): Hono {\n const internal = new Hono();\n const protect = requireWorkerToken(workerToken);\n\n internal.use(\"/*\", protect);\n\n internal.post(\"/projects/:projectId/credentials/materialize\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n let response: Response | undefined;\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithProjectScope(project.id, () =>\n runWithTenantScope(project.organizationId, async () => {\n response = await createCredentialMaterializeHandler()(c);\n }),\n ),\n ),\n );\n\n return (\n response ??\n c.json({ error: \"internal_error\", message: \"Failed to materialize credential.\" }, 500)\n );\n });\n\n if (llmProxy) {\n internal.all(\"/projects/:projectId/llm/:path{.+}\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n let response: Response | undefined;\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithProjectScope(project.id, () =>\n runWithTenantScope(project.organizationId, async () => {\n response = await llmProxy.handler(c, {\n organizationId: project.organizationId,\n projectId: project.id,\n pathSuffix: `/${c.req.param(\"path\")}`,\n });\n }),\n ),\n ),\n );\n\n return (\n response ??\n c.json({ error: \"internal_error\", message: \"Failed to proxy LLM request.\" }, 500)\n );\n });\n }\n\n internal.post(\"/projects/:projectId/webhooks/ensure\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const parsed = EnsureWebhookRouteBodySchema.safeParse(await c.req.json().catch(() => null));\n if (!parsed.success) {\n return c.json({ error: \"Invalid request body\", details: parsed.error.flatten() }, 400);\n }\n\n const origin = platformWebhookOrigin(projectId, publicPlatformOrigin());\n if (!origin) {\n return c.json({ error: \"PUBLIC_PLATFORM_URL is not configured\" }, 500);\n }\n\n try {\n const token = await ensureWebhookApiKeyForRoute(\n projectId,\n parsed.data.route,\n parsed.data.attachmentKeys,\n );\n\n return c.json({\n webhookUrl: buildWebhookUrl(origin, parsed.data.route, token),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to ensure webhook API key.\";\n return c.json({ error: \"webhook_provisioning_failed\", message }, 500);\n }\n });\n\n return internal;\n}\n","import { runWithOrganizationScope, selectOrganizationById } from \"@keystrokehq/platform-database\";\nimport { runWithTenantScope } from \"@keystrokehq/database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"../auth/types\";\n\n/** Bind platform credential partition for org-scoped integration routes. */\nexport function withOrganizationDatabase(): MiddlewareHandler<{\n Variables: OrganizationVariables;\n}> {\n return async (c, next) => {\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n await runWithOrganizationScope(organizationId, () =>\n runWithTenantScope(organizationId, () => next()),\n );\n };\n}\n","import type { OrganizationRow } from \"@keystrokehq/platform-database\";\nimport { resolveOrgDatabaseUrl } from \"@keystrokehq/platform-database\";\nimport {\n createScheduler,\n resolveSchedulerPluginFromEnv,\n type Scheduler,\n} from \"@keystrokehq/scheduler\";\n\nconst schedulerByKey = new Map<string, Promise<Scheduler>>();\n\nexport async function getProjectScheduler(\n organization: OrganizationRow,\n projectId: string,\n): Promise<Scheduler> {\n const url = resolveOrgDatabaseUrl(organization);\n // Projects in one org share the same org Postgres URL but get their own\n // per-project queue, so the scheduler must be cached per (url, projectId).\n const key = `${url}::${projectId}`;\n let pending = schedulerByKey.get(key);\n if (!pending) {\n // The producer's queue backend is selected from the same env the platform\n // forwards to the container worker (KEYSTROKE_SCHEDULER_MODULE), so producer\n // and consumer never diverge. Falls back to the dialect default when unset.\n pending = (async () => {\n const plugin = await resolveSchedulerPluginFromEnv(process.env);\n return createScheduler({\n url,\n scope: \"project\",\n projectId,\n organizationId: organization.id,\n plugin,\n });\n })();\n schedulerByKey.set(key, pending);\n }\n\n return pending;\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectActiveArtifactManifestForProject,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport type { StoredRouteManifest } from \"@keystrokehq/server\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { ProjectRuntimeVariables } from \"../auth/types\";\nimport { getProjectScheduler } from \"../lib/project-scheduler\";\n\nexport function withProjectRuntime(): MiddlewareHandler<{ Variables: ProjectRuntimeVariables }> {\n return async (c, next) => {\n const project = c.get(\"project\");\n const organization = await selectOrganizationById(project.organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () =>\n runWithProjectScope(project.id, async () =>\n runWithTenantScope(project.organizationId, async () => {\n const manifestRaw = await selectActiveArtifactManifestForProject(project.id);\n if (!manifestRaw || typeof manifestRaw !== \"object\") {\n return c.json({ error: \"Project runtime manifest is not available\" }, 503);\n }\n\n const scheduler = await getProjectScheduler(organization, project.id);\n c.set(\"jobQueue\", scheduler);\n c.set(\"scheduler\", scheduler);\n c.set(\"manifest\", manifestRaw as StoredRouteManifest);\n await next();\n }),\n ),\n ),\n );\n };\n}\n","import { prepareAgentSession } from \"@keystrokehq/agent\";\nimport { selectAgentByKey } from \"@keystrokehq/database\";\nimport type { JobQueue } from \"@keystrokehq/scheduler\";\nimport { PromptInputSchema, validationErrorResponse } from \"@keystrokehq/shared\";\nimport type { Context } from \"hono\";\nimport { ZodError } from \"zod\";\n\nimport { enqueueAgentPrompt } from \"@keystrokehq/server\";\n\nexport function createPlatformAgentPromptHandler(agentKey: string, jobQueue: JobQueue) {\n return async (c: Context): Promise<Response> => {\n const contentType = c.req.header(\"content-type\") ?? \"\";\n let payload: unknown = {};\n\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n } else if (contentType.includes(\"text/plain\")) {\n payload = { message: await c.req.text() };\n }\n\n try {\n const input = PromptInputSchema.parse(payload);\n const agent = await selectAgentByKey(agentKey);\n if (!agent) {\n return c.json({ error: \"Agent not found\" }, 404);\n }\n\n const { sessionId } = await prepareAgentSession(agent.id, input.sessionId);\n const runId = crypto.randomUUID();\n\n await enqueueAgentPrompt({\n agentId: agent.id,\n runId,\n sessionId,\n message: input.message,\n context: input.context,\n thinkingLevel: input.thinkingLevel,\n jobQueue,\n });\n\n return c.json({ sessionId, runId }, 202);\n } catch (error) {\n if (error instanceof ZodError) {\n return c.json(validationErrorResponse(error, \"Invalid agent prompt input\"), 400);\n }\n throw error;\n }\n };\n}\n","import type { JobQueue } from \"@keystrokehq/scheduler\";\nimport { validationErrorResponse } from \"@keystrokehq/shared\";\nimport {\n enqueueWorkflowRunByKey,\n findWorkflowManifestEntry,\n type StoredRouteManifest,\n} from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\nimport { z, ZodError } from \"zod\";\n\nfunction parseInputFromManifest(\n manifest: StoredRouteManifest,\n workflowKey: string,\n input: unknown,\n): unknown {\n const entry = findWorkflowManifestEntry(manifest, workflowKey);\n if (!entry) {\n throw new Error(`Workflow not found: ${workflowKey}`);\n }\n\n if (typeof z.fromJSONSchema === \"function\") {\n const schema = z.fromJSONSchema(entry.requestSchema as Parameters<typeof z.fromJSONSchema>[0]);\n return schema.parse(input ?? {});\n }\n\n return z.record(z.string(), z.unknown()).parse(input ?? {});\n}\n\nexport function createPlatformWorkflowRunHandler(\n workflowKey: string,\n manifest: StoredRouteManifest,\n jobQueue: JobQueue,\n) {\n return async (c: Context): Promise<Response> => {\n const contentType = c.req.header(\"content-type\") ?? \"\";\n let payload: unknown = {};\n\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n }\n\n try {\n const runId = await enqueueWorkflowRunByKey({\n workflowKey,\n input: payload,\n jobQueue,\n parseInput: (value) => parseInputFromManifest(manifest, workflowKey, value),\n });\n\n return c.json({ runId }, 202);\n } catch (error) {\n if (error instanceof ZodError) {\n return c.json(validationErrorResponse(error, \"Invalid workflow input\"), 400);\n }\n\n if (error instanceof Error && error.message.startsWith(\"Workflow not found:\")) {\n return c.json({ error: error.message }, 404);\n }\n\n throw error;\n }\n };\n}\n","import { createDefaultAuthJwtVerifier, resolveRequestAuth } from \"@keystrokehq/auth\";\nimport {\n agentSessionDetailHandler,\n agentSessionsListHandler,\n connectProvidersFromManifest,\n createAgentsListHandler,\n createGatewayAttachmentHandlers,\n createTriggerGetHandler,\n createTriggersListHandler,\n createLocalCredentialBackend,\n createOAuthTokenAdapterFromBackend,\n createOAuthTokenRefreshRegistry,\n listKnownIntegrationKeys,\n mountCredentialInstanceRoutes,\n mountProjectIntegrations,\n mountWorkflowCredentialRoutes,\n triggerRunDetailHandler,\n triggerRunsListHandler,\n workflowRunDetailHandler,\n workflowRunsListHandler,\n type StoredRouteManifest,\n} from \"@keystrokehq/server\";\nimport {\n listWebhookApiKeysForProject,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithTenantScope,\n selectActiveWorkflowByKey,\n selectAgentByKey,\n getProjectScopeId,\n} from \"@keystrokehq/database\";\nimport type { TriggerListItem } from \"@keystrokehq/shared\";\nimport { type Context, Hono } from \"hono\";\n\nimport { platformWebhookOrigin } from \"../../lib/platform-origin\";\nimport { requireOrganization } from \"../../auth/require-organization\";\nimport { requireProject } from \"../../auth/require-project\";\nimport { requireSession } from \"../../auth/require-session\";\nimport type {\n OrganizationVariables,\n ProjectRuntimeVariables,\n SessionVariables,\n} from \"../../auth/types\";\nimport { withOrganizationDatabase } from \"../../middleware/with-organization-database\";\nimport { withOrganizationProjectDatabase } from \"../../middleware/with-organization-project-database\";\nimport { withProjectRuntime } from \"../../middleware/with-project-runtime\";\nimport { createPlatformAgentPromptHandler } from \"./handlers/agent-prompt\";\nimport { createPlatformWorkflowRunHandler } from \"./handlers/workflow-run\";\n\nfunction manifestAgentEntries(manifest: StoredRouteManifest) {\n return manifest.entries\n .filter((entry) => entry.kind === \"agent\")\n .map((entry) => ({\n key: entry.path.replace(/^\\/agents\\//, \"\"),\n route: entry.path,\n }));\n}\n\nasync function webhookTokensByProjectId(projectId: string): Promise<Map<string, string>> {\n const keys = await listWebhookApiKeysForProject(projectId);\n return new Map(keys.map((key) => [key.route, key.token]));\n}\n\nfunction platformApiOrigin(platformOrigin: string | undefined): string | undefined {\n if (!platformOrigin) {\n return undefined;\n }\n return `${platformOrigin}/api`;\n}\n\nfunction agentKeysFromManifest(manifest: StoredRouteManifest): Set<string> {\n const keys = new Set<string>();\n for (const entry of manifest.entries) {\n if (entry.kind !== \"agent\") {\n continue;\n }\n keys.add(entry.path.replace(/^\\/agents\\//, \"\"));\n }\n return keys;\n}\n\nfunction targetFromAttachmentId(\n manifest: StoredRouteManifest,\n attachmentId: string,\n): Pick<TriggerListItem, \"targetKind\" | \"workflowKey\" | \"agentKey\"> {\n const targetKey = attachmentId.split(\":\")[1] ?? attachmentId;\n if (agentKeysFromManifest(manifest).has(targetKey)) {\n return { targetKind: \"agent\", agentKey: targetKey };\n }\n return { targetKind: \"workflow\", workflowKey: targetKey };\n}\n\nfunction manifestTriggerEntries(manifest: StoredRouteManifest): TriggerListItem[] {\n const entries: TriggerListItem[] = [];\n\n for (const entry of manifest.entries) {\n if (entry.kind === \"trigger-webhook\") {\n for (const attachmentId of entry.attachmentIds) {\n entries.push({\n key: attachmentId,\n type: \"webhook\",\n route: entry.path,\n ...targetFromAttachmentId(manifest, attachmentId),\n });\n }\n continue;\n }\n\n if (entry.kind === \"trigger-poll\") {\n entries.push({\n key: entry.attachmentId,\n type: \"poll\",\n route: entry.path,\n ...targetFromAttachmentId(manifest, entry.attachmentId),\n });\n continue;\n }\n\n if (entry.kind === \"cron-schedule\") {\n entries.push({\n key: entry.attachmentId,\n type: \"cron\",\n ...targetFromAttachmentId(manifest, entry.attachmentId),\n });\n }\n }\n\n return entries;\n}\n\nfunction createIntegrationServices(platformOrigin: string | undefined) {\n const tokenRefresh = createOAuthTokenRefreshRegistry();\n const credentialBackend = createLocalCredentialBackend({ tokenRefresh });\n const oauthAdapter = createOAuthTokenAdapterFromBackend(credentialBackend);\n const oauthRedirectOrigin = platformApiOrigin(platformOrigin);\n const jwtVerifier = createDefaultAuthJwtVerifier();\n\n return {\n tokenRefresh,\n oauthAdapter,\n jwtVerifier,\n services: {\n agents: { byKey: new Map(), idByKey: new Map() },\n oauthAdapter,\n tokenRefresh,\n runPrompt: () => ({ oauthAdapter }),\n getAuthenticatedUser: async (headers: Headers) => {\n const result = await resolveRequestAuth(jwtVerifier, headers);\n return result ? { id: result.user.id } : null;\n },\n resolvePublicServerUrl: () => oauthRedirectOrigin,\n resolveStateContext: (c: Context) => {\n const user = c.get(\"user\") as { id: string } | undefined;\n const organization = c.get(\"organization\") as { organizationId: string } | undefined;\n return { userId: user?.id, orgId: organization?.organizationId };\n },\n },\n };\n}\n\n/**\n * Public (unauthenticated) OAuth callback routes.\n *\n * OAuth providers redirect a bare browser here with `code` + signed `state`; there is no session,\n * Bearer token, or active-org cookie. We therefore mount the callback outside the session/org\n * middleware and re-establish the org persistence scope from the verified state's `orgId`\n * (`runInStateContext`). On completion redirects the browser to `PUBLIC_WEB_URL`.\n */\nexport async function mountOAuthCallbacks(): Promise<Hono> {\n const platformOrigin = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n const { tokenRefresh, services: baseServices } = createIntegrationServices(platformOrigin);\n\n const callbacks = new Hono();\n const manifest: Extract<StoredRouteManifest[\"entries\"][number], { kind: \"plugin\" }>[] = [];\n\n await mountProjectIntegrations({\n app: callbacks,\n integrationKeys: listKnownIntegrationKeys(),\n manifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeGateway: false,\n oauthMountMode: \"callback\",\n runInStateContext: async (ctx, fn) => {\n const orgId = ctx.orgId;\n if (!orgId) {\n throw new Error(\"OAuth callback state is missing an organization id\");\n }\n const organization = await selectOrganizationById(orgId);\n if (!organization) {\n throw new Error(`Organization ${orgId} not found for OAuth callback`);\n }\n const url = resolveOrgDatabaseUrl(organization);\n return runWithOrganizationScope(orgId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithTenantScope(orgId, fn),\n ),\n );\n },\n },\n });\n\n return callbacks;\n}\n\nexport async function mountRuntimeRoutes(): Promise<Hono<{ Variables: SessionVariables }>> {\n const api = new Hono<{ Variables: ProjectRuntimeVariables }>();\n const platformOrigin = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n const {\n tokenRefresh,\n jwtVerifier,\n services: baseServices,\n } = createIntegrationServices(platformOrigin);\n const protect = requireSession(jwtVerifier);\n\n api.use(\"/*\", protect);\n api.use(\"/*\", requireOrganization());\n\n const org = new Hono<{ Variables: OrganizationVariables }>();\n org.use(\"/*\", withOrganizationDatabase());\n org.use(\"/*\", withOrganizationProjectDatabase());\n\n const orgIntegrationManifest: Extract<\n StoredRouteManifest[\"entries\"][number],\n { kind: \"plugin\" }\n >[] = [];\n\n // Org mount handles OAuth *initiation* only (start + authorize-url), behind JWT + org auth.\n // The unauthenticated callback is mounted separately by `mountOAuthCallbacks`.\n await mountProjectIntegrations({\n app: org as unknown as import(\"hono\").Hono,\n integrationKeys: listKnownIntegrationKeys(),\n manifest: orgIntegrationManifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeGateway: false,\n oauthMountMode: \"initiate\",\n },\n });\n\n org.get(\"/health\", (c) => c.json({ ok: true }));\n org.get(\"/connect/providers\", (c) =>\n c.json({ providers: connectProvidersFromManifest(orgIntegrationManifest as never) }),\n );\n mountCredentialInstanceRoutes(org, null);\n\n api.route(\"/\", org);\n\n const project = new Hono<{ Variables: ProjectRuntimeVariables }>();\n project.use(\"/*\", requireProject());\n project.use(\"/*\", withProjectRuntime());\n\n const projectIntegrationManifest: Extract<\n StoredRouteManifest[\"entries\"][number],\n { kind: \"plugin\" }\n >[] = [];\n\n project.get(\"/health\", (c) => c.json({ ok: true }));\n\n project.get(\"/agents\", (c) => {\n const manifest = c.get(\"manifest\");\n return createAgentsListHandler(manifestAgentEntries(manifest))(c);\n });\n\n const slackGatewayAttachmentHandlers = (c: Context) =>\n createGatewayAttachmentHandlers({\n agentKeys: agentKeysFromManifest(c.get(\"manifest\")),\n });\n\n project.get(\"/gateways/slack/attachments\", (c) =>\n slackGatewayAttachmentHandlers(c).listSlackAttachments(c),\n );\n project.get(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).getSlackAttachment(c),\n );\n project.put(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).putSlackAttachment(c),\n );\n project.delete(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).deleteSlackAttachment(c),\n );\n\n project.get(\"/agents/:key/sessions\", (c) => agentSessionsListHandler(c.req.param(\"key\"))(c));\n project.get(\"/agents/:key/sessions/:sessionId\", (c) =>\n agentSessionDetailHandler(c.req.param(\"key\"))(c),\n );\n\n project.post(\"/agents/:key\", async (c) => {\n const key = c.req.param(\"key\");\n const agent = await selectAgentByKey(key);\n if (!agent) {\n return c.json({ error: \"Agent not found\" }, 404);\n }\n\n return createPlatformAgentPromptHandler(key, c.get(\"jobQueue\"))(c);\n });\n\n project.post(\"/workflows/:key\", async (c) => {\n const key = c.req.param(\"key\");\n const workflow = await selectActiveWorkflowByKey(key);\n if (!workflow) {\n return c.json({ error: \"Workflow not found\" }, 404);\n }\n\n return createPlatformWorkflowRunHandler(key, c.get(\"manifest\"), c.get(\"jobQueue\"))(c);\n });\n\n project.get(\"/workflows/:key/runs\", (c) => workflowRunsListHandler(c.req.param(\"key\"))(c));\n project.get(\"/workflows/:key/runs/:runId\", (c) =>\n workflowRunDetailHandler(c.req.param(\"key\"))(c),\n );\n\n project.get(\"/triggers\", async (c) => {\n const manifest = c.get(\"manifest\");\n const projectId = c.get(\"project\").id;\n const tokens = await webhookTokensByProjectId(projectId);\n return createTriggersListHandler({\n entries: manifestTriggerEntries(manifest),\n webhookTokensByRoute: tokens,\n resolveOrigin: () => platformWebhookOrigin(projectId, platformOrigin) ?? \"\",\n })(c);\n });\n\n project.get(\"/triggers/:id\", async (c) => {\n const manifest = c.get(\"manifest\");\n const projectId = c.get(\"project\").id;\n const tokens = await webhookTokensByProjectId(projectId);\n return createTriggerGetHandler({\n entries: manifestTriggerEntries(manifest),\n webhookTokensByRoute: tokens,\n resolveOrigin: () => platformWebhookOrigin(projectId, platformOrigin) ?? \"\",\n })(c);\n });\n\n project.get(\"/triggers/:id/runs\", (c) => triggerRunsListHandler(c.req.param(\"id\"))(c));\n project.get(\"/triggers/:id/runs/:runId\", (c) => triggerRunDetailHandler(c.req.param(\"id\"))(c));\n\n project.get(\"/openapi.json\", (c) => {\n const manifest = c.get(\"manifest\");\n return c.json({\n openapi: \"3.0.0\",\n info: { title: \"Keystroke Project API\", version: \"1.0.0\" },\n paths: Object.fromEntries(\n manifest.entries\n .filter((entry) => \"method\" in entry && \"path\" in entry)\n .map((entry) => [entry.path, {}]),\n ),\n \"x-keystroke\": { manifest },\n });\n });\n\n mountWorkflowCredentialRoutes(project, null);\n\n await mountProjectIntegrations({\n app: project as unknown as import(\"hono\").Hono,\n integrationKeys: [\"slack\"],\n manifest: projectIntegrationManifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeOAuth: false,\n includeGateway: false,\n resolvePublicServerUrl: () => {\n const apiOrigin = platformApiOrigin(platformOrigin);\n return apiOrigin ? `${apiOrigin}/projects/${getProjectScopeId()}` : undefined;\n },\n },\n });\n\n api.route(\"/projects/:projectId\", project);\n\n return api as unknown as Hono<{ Variables: SessionVariables }>;\n}\n","import {\n createPgConnection,\n getOrCreateGatewayThreadSession,\n runWithProjectScope,\n} from \"@keystrokehq/database\";\nimport { resolveOrgDatabaseUrl, type OrganizationRow } from \"@keystrokehq/platform-database\";\nimport { enqueueAgentPrompt } from \"@keystrokehq/server\";\nimport { createSlackGatewayIngress, type SlackGatewayRuntime } from \"@keystrokehq/slack\";\n\nimport { getProjectScheduler } from \"./project-scheduler\";\n\ntype CachedIngress = {\n signingSecret: string;\n pending: Promise<SlackGatewayRuntime>;\n};\n\nconst ingressByOrg = new Map<string, CachedIngress>();\n\nexport function getOrgSlackIngressRuntime(\n organization: OrganizationRow,\n signingSecret: string,\n): Promise<SlackGatewayRuntime> {\n const cached = ingressByOrg.get(organization.id);\n if (cached && cached.signingSecret === signingSecret) {\n return cached.pending;\n }\n\n let pending!: Promise<SlackGatewayRuntime>;\n pending = buildOrgSlackIngressRuntime(organization, signingSecret).catch((error) => {\n const current = ingressByOrg.get(organization.id);\n if (current?.pending === pending) {\n ingressByOrg.delete(organization.id);\n }\n throw error;\n });\n\n ingressByOrg.set(organization.id, { signingSecret, pending });\n return pending;\n}\n\nfunction buildOrgSlackIngressRuntime(\n organization: OrganizationRow,\n signingSecret: string,\n): Promise<SlackGatewayRuntime> {\n // Dedicated long-lived connection for chat-adapter state (dedupe + subscriptions). The\n // per-request org DB handle is closed after each request, so a cached runtime needs its own.\n const url = resolveOrgDatabaseUrl(organization);\n const handle = createPgConnection({ url, searchPath: organization.dbSchema });\n const pgPool = handle.dialect === \"postgres\" ? handle.pool : undefined;\n\n return createSlackGatewayIngress({\n signingSecret,\n organizationSlug: organization.slug,\n pgPool,\n dispatch: async ({ attachment, threadId, channelId, teamId, message }) => {\n const projectId = attachment.projectId;\n if (!projectId) {\n return;\n }\n\n await runWithProjectScope(projectId, async () => {\n const sessionId = await getOrCreateGatewayThreadSession({\n threadId,\n agentId: attachment.agentId,\n attachmentId: attachment.attachmentId,\n });\n\n const scheduler = await getProjectScheduler(organization, projectId);\n\n await enqueueAgentPrompt({\n agentId: attachment.agentId,\n runId: crypto.randomUUID(),\n sessionId,\n message,\n jobQueue: scheduler,\n gatewayReply: {\n platform: \"slack\",\n threadId,\n channelId,\n teamId,\n agentName: attachment.agentKey,\n attachmentId: attachment.attachmentId,\n attachmentKey: attachment.key,\n },\n });\n });\n },\n });\n}\n","import {\n getActiveOrgGatewayAttachmentByTeamAndChannel,\n runWithProjectDatabase,\n} from \"@keystrokehq/database\";\nimport {\n listOAuthInstallationsByAppKeyAndExternalId,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n type ResolvedOAuthInstallation,\n} from \"@keystrokehq/platform-database\";\n\nexport type SlackOrgRoutingResult =\n | { kind: \"none\" }\n | { kind: \"single\"; installation: ResolvedOAuthInstallation }\n | { kind: \"bound\"; installation: ResolvedOAuthInstallation }\n | { kind: \"unbound\"; installations: ResolvedOAuthInstallation[] }\n | { kind: \"conflict\"; organizationIds: string[] };\n\nexport async function routeSlackEventToOrganization(options: {\n appKey: string;\n teamId: string;\n channelId?: string;\n}): Promise<SlackOrgRoutingResult> {\n const installations = await listOAuthInstallationsByAppKeyAndExternalId(\n options.appKey,\n options.teamId,\n );\n\n if (installations.length === 0) {\n return { kind: \"none\" };\n }\n\n if (installations.length === 1) {\n return { kind: \"single\", installation: installations[0]! };\n }\n\n if (!options.channelId) {\n return { kind: \"none\" };\n }\n\n const boundOrgIds: string[] = [];\n\n for (const installation of installations) {\n const organization = await selectOrganizationById(installation.organizationId);\n if (!organization) {\n continue;\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n const binding = await runWithOrganizationScope(organization.id, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n getActiveOrgGatewayAttachmentByTeamAndChannel(\"slack\", options.teamId, options.channelId!),\n ),\n );\n\n if (binding) {\n boundOrgIds.push(organization.id);\n }\n }\n\n if (boundOrgIds.length === 1) {\n const installation = installations.find((entry) => entry.organizationId === boundOrgIds[0]!);\n if (installation) {\n return { kind: \"bound\", installation };\n }\n }\n\n if (boundOrgIds.length > 1) {\n return { kind: \"conflict\", organizationIds: boundOrgIds };\n }\n\n return { kind: \"unbound\", installations };\n}\n","import { runWithProjectDatabase } from \"@keystrokehq/database\";\nimport {\n buildSlackGatewaySetupUrl,\n channelIdFromSlackEventPayload,\n isSlackMentionEventPayload,\n postSlackChannelMessage,\n slackSignatureHeaders,\n teamIdFromSlackEventPayload,\n verifySlackSignature,\n} from \"@keystrokehq/slack\";\nimport {\n getGlobalOAuthAccessTokenByAppKeyAndExternalId,\n getOAuthAppSigningSecretByKeyGlobal,\n listOAuthInstallationsByAppKeyAndExternalId,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport type { Context } from \"hono\";\n\nimport { getOrgSlackIngressRuntime } from \"../../lib/slack-gateway-ingress\";\nimport { routeSlackEventToOrganization } from \"../../lib/slack-gateway-routing\";\n\nconst SLACK_OAUTH_APP_KEY = \"slack\";\n\nfunction slackNotConfiguredResponse() {\n return {\n error: \"slack_not_configured\" as const,\n message: \"Slack OAuth is not configured. Install via the UI or seed oauth_apps.\",\n };\n}\n\nasync function postMultiOrgUnboundMessage(options: {\n teamId: string;\n channelId: string;\n token: string;\n}): Promise<void> {\n const webOrigin = process.env.PUBLIC_WEB_URL?.replace(/\\/$/, \"\");\n const installations = await listOAuthInstallationsByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n options.teamId,\n );\n const links: string[] = [];\n\n for (const installation of installations) {\n const organization = await selectOrganizationById(installation.organizationId);\n if (!organization) {\n continue;\n }\n\n const url = buildSlackGatewaySetupUrl(\n webOrigin,\n organization.slug,\n options.channelId,\n options.teamId,\n );\n if (url) {\n links.push(`<${url}|${organization.name ?? organization.slug}>`);\n }\n }\n\n if (links.length === 0) {\n return;\n }\n\n const text = `No agent is configured for this channel. Choose an agent: ${links.join(\" · \")}`;\n await postSlackChannelMessage({\n token: options.token,\n channelId: options.channelId,\n text,\n });\n}\n\nasync function handleSlackEventForOrganization(options: {\n organizationId: string;\n signingSecret: string;\n body: string;\n request: Request;\n teamId: string;\n}): Promise<Response> {\n const organization = await selectOrganizationById(options.organizationId);\n if (!organization) {\n console.warn(\"[gateway:slack] organization missing for installation\", {\n organizationId: options.organizationId,\n teamId: options.teamId,\n });\n return new Response(JSON.stringify({ ok: true, skipped: true }), {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n });\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n return runWithOrganizationScope(organization.id, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () => {\n const runtime = await getOrgSlackIngressRuntime(organization, options.signingSecret);\n\n const pending: Promise<unknown>[] = [];\n const verifyRequest = new Request(options.request.url, {\n method: \"POST\",\n headers: options.request.headers,\n body: options.body,\n });\n\n const response = await runtime.webhookHandler(verifyRequest, {\n waitUntil: (promise: Promise<unknown>) => pending.push(promise),\n });\n\n const results = await Promise.allSettled(pending);\n for (const result of results) {\n if (result.status === \"rejected\") {\n console.error(\"[gateway:slack] handler failed\", {\n teamId: options.teamId,\n organizationId: options.organizationId,\n error: result.reason,\n });\n }\n }\n\n return response;\n }),\n );\n}\n\n/**\n * Single shared Slack gateway webhook for all orgs/projects.\n */\nexport function createPlatformSlackGatewayHandler() {\n return async (c: Context): Promise<Response> => {\n const body = await c.req.text();\n const { timestamp, signature } = slackSignatureHeaders(c.req.raw.headers);\n\n let payload: unknown;\n try {\n payload = JSON.parse(body);\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n if (\n payload &&\n typeof payload === \"object\" &&\n (payload as Record<string, unknown>).type === \"url_verification\"\n ) {\n const challenge = (payload as Record<string, unknown>).challenge;\n if (typeof challenge !== \"string\") {\n return c.json({ error: \"Missing url_verification challenge\" }, 400);\n }\n return c.json({ challenge });\n }\n\n const signingSecret = await getOAuthAppSigningSecretByKeyGlobal(SLACK_OAUTH_APP_KEY);\n if (!signingSecret) {\n return c.json(slackNotConfiguredResponse(), 503);\n }\n\n if (\n !verifySlackSignature({\n signingSecret,\n rawBody: body,\n timestamp,\n signature,\n })\n ) {\n return c.json({ error: \"Invalid signature\" }, 401);\n }\n\n const teamId = teamIdFromSlackEventPayload(payload);\n const channelId = channelIdFromSlackEventPayload(payload);\n\n console.info(\"[gateway:slack] webhook received\", {\n payloadType: (payload as Record<string, unknown>).type,\n eventType: (payload as { event?: { type?: string } }).event?.type,\n teamId,\n channelId,\n });\n\n if (!teamId) {\n console.warn(\"[gateway:slack] skipped: missing team_id\");\n return c.json({ ok: true, skipped: true });\n }\n\n const routing = await routeSlackEventToOrganization({\n appKey: SLACK_OAUTH_APP_KEY,\n teamId,\n channelId,\n });\n\n if (routing.kind === \"none\") {\n console.warn(\"[gateway:slack] skipped: no installation for team\", { teamId });\n return c.json({ ok: true, skipped: true });\n }\n\n if (routing.kind === \"conflict\") {\n console.error(\"[gateway:slack] channel bound in multiple organizations\", {\n teamId,\n channelId,\n organizationIds: routing.organizationIds,\n });\n\n const token = await getGlobalOAuthAccessTokenByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n teamId,\n );\n if (token && channelId) {\n await postSlackChannelMessage({\n token,\n channelId,\n text: \"This channel is connected to more than one Keystroke organization. Remove one of the bindings to continue.\",\n });\n }\n\n return c.json({ ok: true, skipped: true });\n }\n\n if (routing.kind === \"unbound\") {\n if (channelId && isSlackMentionEventPayload(payload)) {\n const token = await getGlobalOAuthAccessTokenByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n teamId,\n );\n if (token) {\n await postMultiOrgUnboundMessage({ teamId, channelId, token });\n } else {\n console.warn(\"[gateway:slack] cannot post unbound links: missing bot token\", {\n teamId,\n });\n }\n } else {\n console.warn(\"[gateway:slack] skipped: multiple orgs, no channel binding\", {\n teamId,\n channelId,\n });\n }\n return c.json({ ok: true, skipped: true });\n }\n\n const installation =\n routing.kind === \"single\" || routing.kind === \"bound\" ? routing.installation : undefined;\n\n if (!installation) {\n return c.json({ ok: true, skipped: true });\n }\n\n return handleSlackEventForOrganization({\n organizationId: installation.organizationId,\n signingSecret,\n body,\n request: c.req.raw,\n teamId,\n });\n };\n}\n","import { Hono } from \"hono\";\n\nimport { createPlatformSlackGatewayHandler } from \"./slack-webhook\";\n\nconst SLACK_GATEWAY_PATH = \"/gateways/slack\";\n\nexport function mountSlackGatewayRoutes(): Hono {\n const gateways = new Hono();\n gateways.post(SLACK_GATEWAY_PATH, createPlatformSlackGatewayHandler());\n return gateways;\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport { selectProjectById } from \"@keystrokehq/platform-database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../auth/types\";\n\nexport function resolvePublicProject(): MiddlewareHandler<{\n Variables: PublicProjectRuntimeVariables;\n}> {\n return async (c, next) => {\n const projectId = c.req.param(\"projectId\")?.trim();\n if (!projectId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project id is required\" }), 400);\n }\n\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project not found\" }), 404);\n }\n\n c.set(\"project\", project);\n await next();\n };\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectActiveArtifactManifestForProject,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport type { StoredRouteManifest } from \"@keystrokehq/server\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../auth/types\";\nimport { getProjectScheduler } from \"../lib/project-scheduler\";\n\nexport function withPublicProjectRuntime(): MiddlewareHandler<{\n Variables: PublicProjectRuntimeVariables;\n}> {\n return async (c, next) => {\n const project = c.get(\"project\");\n\n if (project.status !== \"active\") {\n return c.json({ error: \"Project is not active\" }, 503);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () =>\n runWithProjectScope(project.id, async () =>\n runWithTenantScope(project.organizationId, async () => {\n const manifestRaw = await selectActiveArtifactManifestForProject(project.id);\n if (!manifestRaw || typeof manifestRaw !== \"object\") {\n return c.json({ error: \"Project runtime manifest is not available\" }, 503);\n }\n\n const scheduler = await getProjectScheduler(organization, project.id);\n c.set(\"jobQueue\", scheduler);\n c.set(\"scheduler\", scheduler);\n c.set(\"manifest\", manifestRaw as StoredRouteManifest);\n await next();\n }),\n ),\n ),\n );\n };\n}\n","import {\n enqueueWebhookIngress,\n loadWebhookAttachmentSchemasForRoute,\n matchWebhookPayload,\n webhookRouteFromEndpoint,\n} from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\n\nexport function createPlatformWebhookIngressHandler(route: string) {\n return async (c: Context): Promise<Response> => {\n const schemas = await loadWebhookAttachmentSchemasForRoute(route);\n if (schemas.length === 0) {\n return c.json({ error: \"Webhook route not found\" }, 404);\n }\n\n let payload: unknown;\n\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const matches = matchWebhookPayload(payload, schemas);\n if (matches.length === 0) {\n return c.json({ ok: true, skipped: true });\n }\n\n const runId = await enqueueWebhookIngress({\n route,\n matches,\n jobQueue: c.get(\"jobQueue\"),\n });\n\n return c.json({ runId }, 202);\n };\n}\n\nexport function webhookRouteFromRequestPath(endpointSuffix: string): string {\n return webhookRouteFromEndpoint(endpointSuffix);\n}\n","import { resumeWorkflowHook } from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\n\n/**\n * In-process hook resume (PR1): resolves the token against the org DB, appends\n * hook_resumed, and enqueues the run's advance job on the per-project queue.\n * PR4 will replace this with a proxy to the project container.\n */\nexport function createPlatformHookResumeHandler() {\n return async (c: Context): Promise<Response> => {\n const token = c.req.param(\"token\")?.trim();\n if (!token) {\n return c.json({ error: \"Hook token is required\" }, 400);\n }\n\n let payload: unknown = {};\n const contentType = c.req.header(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n }\n\n const result = await resumeWorkflowHook(token, payload, { jobQueue: c.get(\"jobQueue\") });\n if (!result.ok) {\n return c.json({ error: result.error }, result.status);\n }\n return c.json({ runId: result.runId }, 202);\n };\n}\n","import { extractWebhookApiKeyFromRequest } from \"@keystrokehq/auth\";\nimport { verifyWebhookApiKeyForRoute } from \"@keystrokehq/platform-database\";\nimport { Hono } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../../auth/types\";\nimport { resolvePublicProject } from \"../../middleware/resolve-public-project\";\nimport { withPublicProjectRuntime } from \"../../middleware/with-public-project-runtime\";\nimport {\n createPlatformWebhookIngressHandler,\n webhookRouteFromRequestPath,\n} from \"../runtime/handlers/webhook-ingress\";\nimport { createPlatformHookResumeHandler } from \"../runtime/handlers/hook-resume\";\n\nexport function mountWebhookRoutes(): Hono<{ Variables: PublicProjectRuntimeVariables }> {\n const webhooks = new Hono<{ Variables: PublicProjectRuntimeVariables }>();\n\n webhooks.use(\"/:projectId/triggers/:endpoint{.+}\", resolvePublicProject());\n webhooks.use(\"/:projectId/triggers/:endpoint{.+}\", withPublicProjectRuntime());\n\n webhooks.use(\"/:projectId/hooks/:token/resume\", resolvePublicProject());\n webhooks.use(\"/:projectId/hooks/:token/resume\", withPublicProjectRuntime());\n webhooks.post(\"/:projectId/hooks/:token/resume\", createPlatformHookResumeHandler());\n\n webhooks.post(\"/:projectId/triggers/:endpoint{.+}\", async (c) => {\n const suffix = c.req.param(\"endpoint\")?.trim() ?? \"\";\n if (!suffix) {\n return c.json({ error: \"Webhook endpoint is required\" }, 400);\n }\n\n const route = webhookRouteFromRequestPath(suffix);\n const secret = extractWebhookApiKeyFromRequest(c.req.raw);\n if (!secret) {\n return c.json({ error: \"Webhook API key is required\" }, 401);\n }\n\n const projectRow = c.get(\"project\");\n const valid = await verifyWebhookApiKeyForRoute(projectRow.id, route, secret);\n if (!valid) {\n return c.json({ error: \"Invalid webhook API key\" }, 401);\n }\n\n return createPlatformWebhookIngressHandler(route)(c);\n });\n\n return webhooks;\n}\n","import type { Auth } from \"@keystrokehq/auth\";\nimport type { PlatformConfig } from \"./config\";\nimport { ACTIVE_ORG_HEADER } from \"@keystrokehq/shared\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\n\nimport { mountAuth } from \"./auth/mount\";\nimport type { SessionVariables } from \"./auth/types\";\nimport { mountAccountRoutes } from \"./routes/account/mount\";\nimport { mountInternalRoutes } from \"./routes/internal/mount\";\nimport { mountOAuthCallbacks, mountRuntimeRoutes } from \"./routes/runtime/mount\";\nimport { mountSlackGatewayRoutes } from \"./routes/gateways/mount\";\nimport { mountWebhookRoutes } from \"./routes/webhooks/mount\";\n\nexport type CreateAppOptions = {\n /** Browser origin allowed for credentialed cross-origin requests (e.g. http://localhost:3000). */\n webOrigin?: string;\n hosting: PlatformConfig[\"hosting\"];\n storage: PlatformConfig[\"storage\"];\n llmProxy?: PlatformConfig[\"llmProxy\"];\n};\n\nexport async function createApp(\n auth: Auth,\n options: CreateAppOptions,\n): Promise<Hono<{ Variables: SessionVariables }>> {\n const app = new Hono<{ Variables: SessionVariables }>();\n\n if (options.webOrigin) {\n app.use(\n \"*\",\n cors({\n origin: options.webOrigin,\n credentials: true,\n allowHeaders: [\"Content-Type\", \"Authorization\", ACTIVE_ORG_HEADER],\n }),\n );\n }\n\n mountAuth(app, auth);\n app.route(\"/api/projects\", mountWebhookRoutes());\n app.route(\"/api\", mountSlackGatewayRoutes());\n // OAuth callbacks must mount before account/runtime routes — account requires a JWT\n // bearer on `/*`; a bare browser redirect from Google carries no Authorization header.\n app.route(\"/api\", await mountOAuthCallbacks());\n app.route(\n \"/api\",\n mountAccountRoutes({\n hosting: options.hosting,\n storage: options.storage,\n }),\n );\n app.route(\"/api\", await mountRuntimeRoutes());\n app.route(\n \"/internal\",\n mountInternalRoutes(options.hosting.workerRuntime.workerToken, options.llmProxy),\n );\n\n app.get(\"/health\", (c) => c.json({ ok: true }));\n\n app.get(\"/\", (c) =>\n c.json({\n service: \"keystroke-cloud-platform\",\n }),\n );\n\n return app;\n}\n","import { serve } from \"@hono/node-server\";\nimport { createAuth } from \"@keystrokehq/auth\";\nimport { listenPortFromPublicUrl } from \"@keystrokehq/shared\";\nimport {\n ensureProjectPgBossGrants,\n initDatabase,\n resolveProjectRuntimeDatabase,\n selectProjectArtifactById,\n selectProjectById,\n createOrgContainerPresign,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { seedOAuthAppsFromEnvForAllOrganizations } from \"@keystrokehq/server\";\nimport type { PlatformConfig } from \"./config\";\nimport {\n ensureProjectRuntimeQueues,\n resolveRuntimeArtifact,\n startProjectRuntimeWorker,\n} from \"@keystrokehq/projects\";\nimport { configureSharedScheduler, startPgBoss } from \"@keystrokehq/scheduler\";\nimport type { Hono } from \"hono\";\n\nimport { createApp } from \"./app\";\nimport type { SessionVariables } from \"./auth/types\";\n\nexport type StartPlatformServerHooks = {\n afterCreateApp?: (app: Hono<{ Variables: SessionVariables }>) => void | Promise<void>;\n};\n\n/** Fly `internal_port` — not the public HTTPS URL port. */\nconst PRODUCTION_PLATFORM_LISTEN_PORT = 8080;\nconst LOCAL_PLATFORM_PORT = 3002;\n\nfunction resolvePlatformListenPort(): number {\n if (process.env.NODE_ENV === \"production\") {\n return PRODUCTION_PLATFORM_LISTEN_PORT;\n }\n\n return listenPortFromPublicUrl(process.env.PUBLIC_PLATFORM_URL, LOCAL_PLATFORM_PORT);\n}\n\nexport async function startPlatformServer(\n platformConfig: PlatformConfig,\n hooks: StartPlatformServerHooks = {},\n): Promise<void> {\n const runtime = platformConfig.hosting.createRuntime();\n\n await initDatabase();\n process.env.KEYSTROKE_SECRETS_MODE = \"platform\";\n await seedOAuthAppsFromEnvForAllOrganizations();\n\n if (platformConfig.scheduler) {\n configureSharedScheduler(platformConfig.scheduler);\n }\n\n const boss = await startPgBoss();\n await ensureProjectRuntimeQueues(boss);\n await ensureProjectPgBossGrants();\n startProjectRuntimeWorker(runtime, {\n resolveStartInput: async (job) => {\n const project = await selectProjectById(job.projectId);\n if (!project) {\n throw new Error(`Project ${job.projectId} not found`);\n }\n\n const resolved = resolveRuntimeArtifact(project, job.artifactId);\n if (resolved.action === \"error\") {\n throw new Error(resolved.message);\n }\n if (resolved.action === \"skip\") {\n throw new Error(`Project ${job.projectId} has no deploy artifact to start`);\n }\n\n const artifact = await selectProjectArtifactById(resolved.artifactId);\n if (!artifact || artifact.status !== \"ready\") {\n throw new Error(`Project ${job.projectId} pending artifact is not ready`);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n throw new Error(`Organization not found for project ${job.projectId}`);\n }\n\n const containerPresign = createOrgContainerPresign(organization);\n const artifactUrl = await containerPresign.presignGet({ key: artifact.storageKey });\n\n const workerRuntime = platformConfig.hosting.workerRuntime;\n\n return {\n projectId: job.projectId,\n name: job.name,\n artifactId: resolved.artifactId,\n artifactUrl,\n database: await resolveProjectRuntimeDatabase({\n organizationId: project.organizationId,\n projectId: project.id,\n }),\n env: platformConfig.llmProxy?.workerEnv({\n platformUrl: workerRuntime.platformUrl,\n workerToken: workerRuntime.workerToken,\n projectId: project.id,\n }),\n hosting: organization.hostingAppName ? { appName: organization.hostingAppName } : undefined,\n previousRuntimeId: project.runtimeId,\n };\n },\n });\n\n const webUrl = process.env.PUBLIC_WEB_URL;\n if (!webUrl) {\n throw new Error(\"PUBLIC_WEB_URL is required for the platform server\");\n }\n\n const platformUrl = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/+$/, \"\");\n if (!platformUrl) {\n throw new Error(\"PUBLIC_PLATFORM_URL is required for the platform server\");\n }\n\n const auth = createAuth({\n baseURL: platformUrl,\n verificationUri: `${webUrl.replace(/\\/+$/, \"\")}/device`,\n trustedOrigins: [webUrl],\n });\n if (!auth) {\n throw new Error(\"BETTER_AUTH_SECRET is required for the platform server\");\n }\n\n const app = await createApp(auth, {\n webOrigin: webUrl,\n hosting: platformConfig.hosting,\n storage: platformConfig.storage,\n llmProxy: platformConfig.llmProxy,\n });\n await hooks.afterCreateApp?.(app);\n const port = resolvePlatformListenPort();\n\n serve({ fetch: app.fetch, port }, (info) => {\n console.log(`Platform API listening on http://localhost:${info.port}`);\n });\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"mappings":"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"}
1
+ {"version":3,"file":"start-B7tYhvDm.cjs","names":["decodeBase64URL","jwk.isJWK","jwk.isSecretJWK","invalidKeyInput","jwk.isPrivateJWK","jwk.isPublicJWK","b64u","#jwks","#cached","jwksCache","#url","#timeoutDuration","#cooldownDuration","#cacheMaxAge","#headers","#customFetch","#cache","#jwksTimestamp","#local","#pendingFetch","authSessions","authAccounts","authVerifications","authDeviceCodes","authJwks","getDatabaseHandle","resolveResendApiKey","Resend","resend","envValue","normalizeUserEmail","selectUserByNormalizedEmail","parseStoredRouteManifest","fetchStoredRouteManifest","StoredProjectSourceManifestSchema","selectProjectById","selectProjectArtifactById","selectOrganizationById","updateProjectArtifactManifest","promoteProjectArtifact","runWithProjectDatabase","resolveOrgDatabaseUrl","runWithProjectScope","syncRegistryFromStoredManifest","syncSkillRegistry","selectEphemeralTriggerAttachments","webhookRouteFromEndpoint","extractWebhookRoutesFromManifest","ensureWebhookApiKeys","getPgBoss","updateProjectActive","updateProjectFailed","ErrorResponseSchema","ACTIVE_ORG_HEADER","ACTIVE_ORG_COOKIE","ErrorResponseSchema","selectUserOrganizationMembership","ErrorResponseSchema","selectProjectForOrganization","selectOrganizationById","runWithWorkspaceContext","mapProject","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithTenantScope","handler","selectUserOrganizations","ListOrganizationsResponseSchema","mapUserOrganization","resolveNewOrganizationIdentity","createOrganizationForUser","encryptCredentialPayload","seedOAuthAppsFromEnvForOrganization","isOrganizationStorageBucketInUse","OrganizationSlugTakenError","organizationSlugErrorCodeFromMessage","CreateOrganizationRequestSchema","ErrorResponseSchema","CreateOrganizationResponseSchema","mapUserOrganization","OrganizationSlugTakenError","ZodError","handler","SlugAvailabilityQuerySchema","ErrorResponseSchema","checkOrganizationSlugAvailability","SlugAvailabilityResponseSchema","handler","ActiveOrganizationResponseSchema","selectUserOrganizationMembership","mapUserOrganization","handler","SetActiveOrganizationRequestSchema","ErrorResponseSchema","selectUserOrganizationMembership","ActiveOrganizationResponseSchema","mapUserOrganization","handler","ActiveOrganizationResponseSchema","handler","UpdateOrganizationRequestSchema","ErrorResponseSchema","updateOrganizationSlug","ActiveOrganizationResponseSchema","mapUserOrganization","OrganizationSlugTakenError","ZodError","PLATFORM_RESOURCE_UNSUPPORTED_TEXT","AgentSummarySchema","handler","listActiveAgents","AgentSummaryListResponseSchema","handler","selectActiveAgentById","AgentSummaryDetailResponseSchema","WorkflowSummarySchema","handler","listActiveWorkflows","WorkflowSummaryListResponseSchema","handler","selectActiveWorkflowById","WorkflowSummaryDetailResponseSchema","SkillSummarySchema","handler","listActiveSkills","SkillSummaryListResponseSchema","handler","selectActiveSkillById","SkillSummaryDetailResponseSchema","handler","selectProjectsByOrganizationId","ListProjectsResponseSchema","mapProject","handler","CreateProjectRequestSchema","ErrorResponseSchema","createProjectForOrganization","CreateProjectResponseSchema","mapProject","handler","ProjectResponseSchema","handler","selectOrganizationById","projectArtifactKey","createOrgStorageClient","insertProjectArtifact","CreateProjectArtifactResponseSchema","mapProjectArtifact","handler","ErrorResponseSchema","selectProjectArtifactForProject","selectOrganizationById","createOrgStorageClient","completeProjectArtifact","CompleteProjectArtifactResponseSchema","mapProjectArtifact","mapProject","handler","ErrorResponseSchema","selectProjectArtifactForProject","PresignProjectSourceRequestSchema","selectOrganizationById","createOrgStorageClient","projectSourceBlobKey","PresignProjectSourceResponseSchema","handler","ErrorResponseSchema","selectProjectArtifactForProject","UploadProjectSourceManifestRequestSchema","StoredProjectSourceManifestSchema","projectFileId","updateProjectArtifactSourceManifest","UploadProjectSourceResponseSchema","handler","selectActiveArtifactSourceManifestForProject","ListProjectFilesResponseSchema","StoredProjectSourceManifestSchema","handler","ErrorResponseSchema","selectProjectArtifactForProject","StoredProjectSourceManifestSchema","selectOrganizationById","createOrgStorageClient","projectSourceBlobKey","ProjectReachabilityResponseSchema","pingProjectTarget","handler","selectOrganizationMembers","ListOrganizationMembersResponseSchema","mapOrganizationMember","organizationInvitationAcceptPath","resend","Resend","handler","InviteOrganizationMembersRequestSchema","ErrorResponseSchema","inviteOrganizationMembers","selectUserById","InviteOrganizationMembersResponseSchema","handler","UpdateOrganizationMemberRequestSchema","ErrorResponseSchema","updateOrganizationMemberRole","UpdateOrganizationMemberResponseSchema","mapOrganizationMember","CannotModifyOwnerError","OrganizationMemberNotFoundError","handler","ErrorResponseSchema","removeOrganizationMember","CannotModifyOwnerError","OrganizationMemberNotFoundError","handler","selectPendingInvitationsForUser","ListOrganizationInvitationsResponseSchema","mapOrganizationInvitation","handler","ErrorResponseSchema","acceptInvitation","AcceptOrganizationInvitationResponseSchema","mapUserOrganization","OrganizationInvitationNotFoundError","OrganizationInvitationForbiddenError","OrganizationInvitationExpiredError","ErrorResponseSchema","declineInvitation","DeclineOrganizationInvitationResponseSchema","OrganizationInvitationNotFoundError","OrganizationInvitationForbiddenError","Hono","listOrganizations","checkOrganizationSlugAvailability","getActiveOrganization","setActiveOrganization","updateActiveOrganization","clearActiveOrganization","listOrganizationInvitations","acceptOrganizationInvitation","declineOrganizationInvitation","listOrganizationMembers","inviteOrganizationMembers","updateOrganizationMember","removeOrganizationMember","listAgents","getAgent","listWorkflows","getWorkflow","listSkills","getSkill","listProjects","createProject","getProject","listProjectFiles","getProjectFileContent","createProjectArtifact","completeProjectArtifact","presignProjectArtifactSource","uploadProjectArtifactSourceManifest","z","Hono","selectProjectById","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","createCredentialMaterializeHandler","ensureWebhookApiKeyForRoute","buildWebhookUrl","selectOrganizationById","runWithOrganizationScope","runWithTenantScope","resolveOrgDatabaseUrl","resolveSchedulerPluginFromEnv","createScheduler","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","selectActiveArtifactManifestForProject","PromptInputSchema","selectAgentByKey","prepareAgentSession","enqueueAgentPrompt","ZodError","validationErrorResponse","findWorkflowManifestEntry","z","enqueueWorkflowRunByKey","ZodError","validationErrorResponse","listWebhookApiKeysForProject","createOAuthTokenRefreshRegistry","createOAuthTokenAdapterFromBackend","createLocalCredentialBackend","Hono","mountProjectIntegrations","listKnownIntegrationKeys","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithTenantScope","connectProvidersFromManifest","createAgentsListHandler","createGatewayAttachmentHandlers","agentSessionsListHandler","agentSessionDetailHandler","selectAgentByKey","selectActiveWorkflowByKey","workflowRunsListHandler","workflowRunDetailHandler","createTriggersListHandler","createTriggerGetHandler","triggerRunsListHandler","triggerRunDetailHandler","getProjectScopeId","createPgConnection","resolveOrgDatabaseUrl","createSlackGatewayIngress","runWithProjectScope","getOrCreateGatewayThreadSession","enqueueAgentPrompt","listOAuthInstallationsByAppKeyAndExternalId","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","getActiveOrgGatewayAttachmentByTeamAndChannel","listOAuthInstallationsByAppKeyAndExternalId","selectOrganizationById","buildSlackGatewaySetupUrl","postSlackChannelMessage","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","slackSignatureHeaders","getOAuthAppSigningSecretByKeyGlobal","verifySlackSignature","teamIdFromSlackEventPayload","channelIdFromSlackEventPayload","getGlobalOAuthAccessTokenByAppKeyAndExternalId","isSlackMentionEventPayload","Hono","ErrorResponseSchema","selectProjectById","selectOrganizationById","resolveOrgDatabaseUrl","runWithOrganizationScope","runWithProjectDatabase","runWithProjectScope","runWithTenantScope","selectActiveArtifactManifestForProject","loadWebhookAttachmentSchemasForRoute","matchWebhookPayload","enqueueWebhookIngress","webhookRouteFromEndpoint","resumeWorkflowHook","Hono","verifyWebhookApiKeyForRoute","Hono","ACTIVE_ORG_HEADER","listenPortFromPublicUrl","initDatabase","seedOAuthAppsFromEnvForAllOrganizations","startPgBoss","ensureProjectPgBossGrants","selectProjectById","selectProjectArtifactById","selectOrganizationById","createOrgContainerPresign","resolveProjectRuntimeDatabase"],"sources":["../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/buffer_utils.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/base64.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/util/base64url.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/crypto_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/invalid_key_input.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/util/errors.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/is_key_like.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/helpers.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/type_checks.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/signing.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/jwk_to_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/normalize_key.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/key/import.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/validate_crit.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/validate_algorithms.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/check_key_type.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jws/flattened/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jws/compact/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/lib/jwt_claims_set.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwt/verify.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwks/local.js","../../../node_modules/.pnpm/jose@6.2.3/node_modules/jose/dist/webapi/jwks/remote.js","../../../packages/auth/dist/jwt-BVJ7dVm9.mjs","../../../packages/platform-database/dist/schema/auth/index.mjs","../../../packages/auth/dist/index.mjs","../../../packages/projects/dist/index.mjs","../src/auth/mount.ts","../src/auth/require-org-admin.ts","../src/auth/resolve-org-id.ts","../src/auth/require-organization.ts","../src/auth/require-project.ts","../src/auth/require-session.ts","../src/middleware/with-organization-project-database.ts","../src/routes/account/organizations/GET.ts","../src/services/create-organization.ts","../src/routes/account/organizations/slug-errors.ts","../src/routes/account/organizations/POST.ts","../src/routes/account/organizations/slug-available/GET.ts","../src/routes/account/organizations/active/GET.ts","../src/routes/account/organizations/active/POST.ts","../src/routes/account/organizations/active/DELETE.ts","../src/routes/account/organizations/active/PATCH.ts","../src/routes/account/resources/common.ts","../src/routes/account/resources/agents.ts","../src/routes/account/agents/GET.ts","../src/routes/account/agents/[agentId]/GET.ts","../src/routes/account/resources/workflows.ts","../src/routes/account/workflows/GET.ts","../src/routes/account/workflows/[workflowId]/GET.ts","../src/routes/account/resources/skills.ts","../src/routes/account/skills/GET.ts","../src/routes/account/skills/[skillId]/GET.ts","../src/routes/account/projects/GET.ts","../src/routes/account/projects/POST.ts","../src/routes/account/projects/[projectId]/GET.ts","../src/routes/account/projects/[projectId]/artifacts/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/complete/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/source/presign/POST.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/source/manifest/POST.ts","../src/routes/account/projects/[projectId]/files/GET.ts","../src/routes/account/projects/[projectId]/artifacts/[artifactId]/files/content/GET.ts","../src/routes/account/projects/[projectId]/reachability/GET.ts","../src/routes/account/members/GET.ts","../src/email/organization-invite-email.ts","../src/routes/account/members/invitations/POST.ts","../src/routes/account/members/[userId]/PATCH.ts","../src/routes/account/members/[userId]/DELETE.ts","../src/routes/account/invitations/GET.ts","../src/routes/account/invitations/[invitationId]/accept/POST.ts","../src/routes/account/invitations/[invitationId]/decline/POST.ts","../src/routes/account/mount.ts","../src/lib/platform-origin.ts","../src/middleware/require-worker-token.ts","../src/routes/internal/mount.ts","../src/middleware/with-organization-database.ts","../src/lib/project-scheduler.ts","../src/middleware/with-project-runtime.ts","../src/routes/runtime/handlers/agent-prompt.ts","../src/routes/runtime/handlers/workflow-run.ts","../src/routes/runtime/mount.ts","../src/lib/slack-gateway-ingress.ts","../src/lib/slack-gateway-routing.ts","../src/routes/gateways/slack-webhook.ts","../src/routes/gateways/mount.ts","../src/middleware/resolve-public-project.ts","../src/middleware/with-public-project-runtime.ts","../src/routes/runtime/handlers/webhook-ingress.ts","../src/routes/runtime/handlers/hook-resume.ts","../src/routes/webhooks/mount.ts","../src/app.ts","../src/start.ts"],"sourcesContent":["export const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function encode(string) {\n const bytes = new Uint8Array(string.length);\n for (let i = 0; i < string.length; i++) {\n const code = string.charCodeAt(i);\n if (code > 127) {\n throw new TypeError('non-ASCII string encountered in encode()');\n }\n bytes[i] = code;\n }\n return bytes;\n}\n","export function encodeBase64(input) {\n if (Uint8Array.prototype.toBase64) {\n return input.toBase64();\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < input.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n}\nexport function decodeBase64(encoded) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(encoded);\n }\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","import { encoder, decoder } from '../lib/buffer_utils.js';\nimport { encodeBase64, decodeBase64 } from '../lib/base64.js';\nexport function decode(input) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n alphabet: 'base64url',\n });\n }\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n}\nexport function encode(input) {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n if (Uint8Array.prototype.toBase64) {\n return unencoded.toBase64({ alphabet: 'base64url', omitPadding: true });\n }\n return encodeBase64(unencoded).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","const unusable = (name, prop = 'algorithm.name') => new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\nconst isAlgorithm = (algorithm, name) => algorithm.name === name;\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction checkHashLength(algorithm, expected) {\n const actual = getHashLength(algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usage) {\n if (usage && !key.usages.includes(usage)) {\n throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n }\n}\nexport function checkSigCryptoKey(key, alg, usage) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));\n break;\n }\n case 'Ed25519':\n case 'EdDSA': {\n if (!isAlgorithm(key.algorithm, 'Ed25519'))\n throw unusable('Ed25519');\n break;\n }\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87': {\n if (!isAlgorithm(key.algorithm, alg))\n throw unusable(alg);\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usage);\n}\nexport function checkEncCryptoKey(key, alg, usage) {\n switch (alg) {\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM': {\n if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n throw unusable('AES-GCM');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (!isAlgorithm(key.algorithm, 'AES-KW'))\n throw unusable('AES-KW');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'ECDH': {\n switch (key.algorithm.name) {\n case 'ECDH':\n case 'X25519':\n break;\n default:\n throw unusable('ECDH or X25519');\n }\n break;\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n throw unusable('PBKDF2');\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n throw unusable('RSA-OAEP');\n checkHashLength(key.algorithm, parseInt(alg.slice(9), 10) || 1);\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usage);\n}\n","function message(msg, actual, ...types) {\n types = types.filter(Boolean);\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor?.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nexport const invalidKeyInput = (actual, ...types) => message('Key must be ', actual, ...types);\nexport const withAlg = (alg, actual, ...types) => message(`Key for the ${alg} algorithm must be `, actual, ...types);\n","export class JOSEError extends Error {\n static code = 'ERR_JOSE_GENERIC';\n code = 'ERR_JOSE_GENERIC';\n constructor(message, options) {\n super(message, options);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JWTExpired extends JOSEError {\n static code = 'ERR_JWT_EXPIRED';\n code = 'ERR_JWT_EXPIRED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n static code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n}\nexport class JOSENotSupported extends JOSEError {\n static code = 'ERR_JOSE_NOT_SUPPORTED';\n code = 'ERR_JOSE_NOT_SUPPORTED';\n}\nexport class JWEDecryptionFailed extends JOSEError {\n static code = 'ERR_JWE_DECRYPTION_FAILED';\n code = 'ERR_JWE_DECRYPTION_FAILED';\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n }\n}\nexport class JWEInvalid extends JOSEError {\n static code = 'ERR_JWE_INVALID';\n code = 'ERR_JWE_INVALID';\n}\nexport class JWSInvalid extends JOSEError {\n static code = 'ERR_JWS_INVALID';\n code = 'ERR_JWS_INVALID';\n}\nexport class JWTInvalid extends JOSEError {\n static code = 'ERR_JWT_INVALID';\n code = 'ERR_JWT_INVALID';\n}\nexport class JWKInvalid extends JOSEError {\n static code = 'ERR_JWK_INVALID';\n code = 'ERR_JWK_INVALID';\n}\nexport class JWKSInvalid extends JOSEError {\n static code = 'ERR_JWKS_INVALID';\n code = 'ERR_JWKS_INVALID';\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n static code = 'ERR_JWKS_NO_MATCHING_KEY';\n code = 'ERR_JWKS_NO_MATCHING_KEY';\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator];\n static code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSTimeout extends JOSEError {\n static code = 'ERR_JWKS_TIMEOUT';\n code = 'ERR_JWKS_TIMEOUT';\n constructor(message = 'request timed out', options) {\n super(message, options);\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n static code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n }\n}\n","export function assertCryptoKey(key) {\n if (!isCryptoKey(key)) {\n throw new Error('CryptoKey instance expected');\n }\n}\nexport const isCryptoKey = (key) => {\n if (key?.[Symbol.toStringTag] === 'CryptoKey')\n return true;\n try {\n return key instanceof CryptoKey;\n }\n catch {\n return false;\n }\n};\nexport const isKeyObject = (key) => key?.[Symbol.toStringTag] === 'KeyObject';\nexport const isKeyLike = (key) => isCryptoKey(key) || isKeyObject(key);\n","import { decode } from '../util/base64url.js';\nexport const unprotected = Symbol();\nexport function assertNotSet(value, name) {\n if (value) {\n throw new TypeError(`${name} can only be called once`);\n }\n}\nexport function decodeBase64url(value, label, ErrorClass) {\n try {\n return decode(value);\n }\n catch {\n throw new ErrorClass(`Failed to base64url decode the ${label}`);\n }\n}\nexport async function digest(algorithm, data) {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));\n}\n","const isObjectLike = (value) => typeof value === 'object' && value !== null;\nexport function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\nexport function isDisjoint(...headers) {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n}\nexport const isJWK = (key) => isObject(key) && typeof key.kty === 'string';\nexport const isPrivateJWK = (key) => key.kty !== 'oct' &&\n ((key.kty === 'AKP' && typeof key.priv === 'string') || typeof key.d === 'string');\nexport const isPublicJWK = (key) => key.kty !== 'oct' && key.d === undefined && key.priv === undefined;\nexport const isSecretJWK = (key) => key.kty === 'oct' && typeof key.k === 'string';\n","import { JOSENotSupported } from '../util/errors.js';\nimport { checkSigCryptoKey } from './crypto_key.js';\nimport { invalidKeyInput } from './invalid_key_input.js';\nexport function checkKeyLength(alg, key) {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n}\nfunction subtleAlgorithm(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: parseInt(alg.slice(-3), 10) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n case 'EdDSA':\n return { name: 'Ed25519' };\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87':\n return { name: alg };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\nasync function getSigKey(alg, key, usage) {\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));\n }\n return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n checkSigCryptoKey(key, alg, usage);\n return key;\n}\nexport async function sign(alg, key, data) {\n const cryptoKey = await getSigKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n}\nexport async function verify(alg, key, signature, data) {\n const cryptoKey = await getSigKey(alg, key, 'verify');\n checkKeyLength(alg, cryptoKey);\n const algorithm = subtleAlgorithm(alg, cryptoKey.algorithm);\n try {\n return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n }\n catch {\n return false;\n }\n}\n","import { JOSENotSupported } from '../util/errors.js';\nconst unsupportedAlg = 'Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value';\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'AKP': {\n switch (jwk.alg) {\n case 'ML-DSA-44':\n case 'ML-DSA-65':\n case 'ML-DSA-87':\n algorithm = { name: jwk.alg };\n keyUsages = jwk.priv ? ['sign'] : ['verify'];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n case 'ES384':\n case 'ES512':\n algorithm = {\n name: 'ECDSA',\n namedCurve: { ES256: 'P-256', ES384: 'P-384', ES512: 'P-521' }[jwk.alg],\n };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n case 'OKP': {\n switch (jwk.alg) {\n case 'Ed25519':\n case 'EdDSA':\n algorithm = { name: 'Ed25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported(unsupportedAlg);\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nexport async function jwkToKey(jwk) {\n if (!jwk.alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const keyData = { ...jwk };\n if (keyData.kty !== 'AKP') {\n delete keyData.alg;\n }\n delete keyData.use;\n return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? (jwk.d || jwk.priv ? false : true), jwk.key_ops ?? keyUsages);\n}\n","import { isJWK } from './type_checks.js';\nimport { decode } from '../util/base64url.js';\nimport { jwkToKey } from './jwk_to_key.js';\nimport { isCryptoKey, isKeyObject } from './is_key_like.js';\nconst unusableForAlg = 'given KeyObject instance cannot be used for this algorithm';\nlet cache;\nconst handleJWK = async (key, jwk, alg, freeze = false) => {\n cache ||= new WeakMap();\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await jwkToKey({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst handleKeyObject = (keyObject, alg) => {\n cache ||= new WeakMap();\n let cached = cache.get(keyObject);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const isPublic = keyObject.type === 'public';\n const extractable = isPublic ? true : false;\n let cryptoKey;\n if (keyObject.asymmetricKeyType === 'x25519') {\n switch (alg) {\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n break;\n default:\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : ['deriveBits']);\n }\n if (keyObject.asymmetricKeyType === 'ed25519') {\n if (alg !== 'EdDSA' && alg !== 'Ed25519') {\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [\n isPublic ? 'verify' : 'sign',\n ]);\n }\n switch (keyObject.asymmetricKeyType) {\n case 'ml-dsa-44':\n case 'ml-dsa-65':\n case 'ml-dsa-87': {\n if (alg !== keyObject.asymmetricKeyType.toUpperCase()) {\n throw new TypeError(unusableForAlg);\n }\n cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [\n isPublic ? 'verify' : 'sign',\n ]);\n }\n }\n if (keyObject.asymmetricKeyType === 'rsa') {\n let hash;\n switch (alg) {\n case 'RSA-OAEP':\n hash = 'SHA-1';\n break;\n case 'RS256':\n case 'PS256':\n case 'RSA-OAEP-256':\n hash = 'SHA-256';\n break;\n case 'RS384':\n case 'PS384':\n case 'RSA-OAEP-384':\n hash = 'SHA-384';\n break;\n case 'RS512':\n case 'PS512':\n case 'RSA-OAEP-512':\n hash = 'SHA-512';\n break;\n default:\n throw new TypeError(unusableForAlg);\n }\n if (alg.startsWith('RSA-OAEP')) {\n return keyObject.toCryptoKey({\n name: 'RSA-OAEP',\n hash,\n }, extractable, isPublic ? ['encrypt'] : ['decrypt']);\n }\n cryptoKey = keyObject.toCryptoKey({\n name: alg.startsWith('PS') ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5',\n hash,\n }, extractable, [isPublic ? 'verify' : 'sign']);\n }\n if (keyObject.asymmetricKeyType === 'ec') {\n const nist = new Map([\n ['prime256v1', 'P-256'],\n ['secp384r1', 'P-384'],\n ['secp521r1', 'P-521'],\n ]);\n const namedCurve = nist.get(keyObject.asymmetricKeyDetails?.namedCurve);\n if (!namedCurve) {\n throw new TypeError(unusableForAlg);\n }\n const expectedCurve = { ES256: 'P-256', ES384: 'P-384', ES512: 'P-521' };\n if (expectedCurve[alg] && namedCurve === expectedCurve[alg]) {\n cryptoKey = keyObject.toCryptoKey({\n name: 'ECDSA',\n namedCurve,\n }, extractable, [isPublic ? 'verify' : 'sign']);\n }\n if (alg.startsWith('ECDH-ES')) {\n cryptoKey = keyObject.toCryptoKey({\n name: 'ECDH',\n namedCurve,\n }, extractable, isPublic ? [] : ['deriveBits']);\n }\n }\n if (!cryptoKey) {\n throw new TypeError(unusableForAlg);\n }\n if (!cached) {\n cache.set(keyObject, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nexport async function normalizeKey(key, alg) {\n if (key instanceof Uint8Array) {\n return key;\n }\n if (isCryptoKey(key)) {\n return key;\n }\n if (isKeyObject(key)) {\n if (key.type === 'secret') {\n return key.export();\n }\n if ('toCryptoKey' in key && typeof key.toCryptoKey === 'function') {\n try {\n return handleKeyObject(key, alg);\n }\n catch (err) {\n if (err instanceof TypeError) {\n throw err;\n }\n }\n }\n let jwk = key.export({ format: 'jwk' });\n return handleJWK(key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k) {\n return decode(key.k);\n }\n return handleJWK(key, key, alg, true);\n }\n throw new Error('unreachable');\n}\n","import { decode as decodeBase64URL } from '../util/base64url.js';\nimport { fromSPKI, fromPKCS8, fromX509 } from '../lib/asn1.js';\nimport { jwkToKey } from '../lib/jwk_to_key.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nexport async function importSPKI(spki, alg, options) {\n if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n throw new TypeError('\"spki\" must be SPKI formatted string');\n }\n return fromSPKI(spki, alg, options);\n}\nexport async function importX509(x509, alg, options) {\n if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n throw new TypeError('\"x509\" must be X.509 formatted string');\n }\n return fromX509(x509, alg, options);\n}\nexport async function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n }\n return fromPKCS8(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg, options) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n let ext;\n alg ??= jwk.alg;\n ext ??= options?.extractable ?? jwk.ext;\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n if ('oth' in jwk && jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n return jwkToKey({ ...jwk, alg, ext });\n case 'AKP': {\n if (typeof jwk.alg !== 'string' || !jwk.alg) {\n throw new TypeError('missing \"alg\" (Algorithm) Parameter value');\n }\n if (alg !== undefined && alg !== jwk.alg) {\n throw new TypeError('JWK alg and alg option value mismatch');\n }\n return jwkToKey({ ...jwk, ext });\n }\n case 'EC':\n case 'OKP':\n return jwkToKey({ ...jwk, alg, ext });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n","import { JOSENotSupported, JWEInvalid, JWSInvalid } from '../util/errors.js';\nexport function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\n","export function validateAlgorithms(option, algorithms) {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n}\n","import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport { isKeyLike } from './is_key_like.js';\nimport * as jwk from './type_checks.js';\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n if (key.use !== undefined) {\n let expected;\n switch (usage) {\n case 'sign':\n case 'verify':\n expected = 'sig';\n break;\n case 'encrypt':\n case 'decrypt':\n expected = 'enc';\n break;\n }\n if (key.use !== expected) {\n throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n }\n }\n if (key.alg !== undefined && key.alg !== alg) {\n throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n }\n if (Array.isArray(key.key_ops)) {\n let expectedKeyOp;\n switch (true) {\n case usage === 'sign' || usage === 'verify':\n case alg === 'dir':\n case alg.includes('CBC-HS'):\n expectedKeyOp = usage;\n break;\n case alg.startsWith('PBES2'):\n expectedKeyOp = 'deriveBits';\n break;\n case /^A\\d{3}(?:GCM)?(?:KW)?$/.test(alg):\n if (!alg.includes('GCM') && alg.endsWith('KW')) {\n expectedKeyOp = usage === 'encrypt' ? 'wrapKey' : 'unwrapKey';\n }\n else {\n expectedKeyOp = usage;\n }\n break;\n case usage === 'encrypt' && alg.startsWith('RSA'):\n expectedKeyOp = 'wrapKey';\n break;\n case usage === 'decrypt':\n expectedKeyOp = alg.startsWith('RSA') ? 'unwrapKey' : 'deriveBits';\n break;\n }\n if (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) {\n throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n }\n }\n return true;\n};\nconst symmetricTypeCheck = (alg, key, usage) => {\n if (key instanceof Uint8Array)\n return;\n if (jwk.isJWK(key)) {\n if (jwk.isSecretJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n }\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array'));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n if (jwk.isJWK(key)) {\n switch (usage) {\n case 'decrypt':\n case 'sign':\n if (jwk.isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation must be a private JWK`);\n case 'encrypt':\n case 'verify':\n if (jwk.isPublicJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation must be a public JWK`);\n }\n }\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (key.type === 'public') {\n switch (usage) {\n case 'sign':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n case 'decrypt':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n }\n if (key.type === 'private') {\n switch (usage) {\n case 'verify':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n case 'encrypt':\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n }\n};\nexport function checkKeyType(alg, key, usage) {\n switch (alg.substring(0, 2)) {\n case 'A1':\n case 'A2':\n case 'di':\n case 'HS':\n case 'PB':\n symmetricTypeCheck(alg, key, usage);\n break;\n default:\n asymmetricTypeCheck(alg, key, usage);\n }\n}\n","import { decode as b64u } from '../../util/base64url.js';\nimport { verify } from '../../lib/signing.js';\nimport { JOSEAlgNotAllowed, JWSInvalid, JWSSignatureVerificationFailed } from '../../util/errors.js';\nimport { concat, encoder, decoder, encode } from '../../lib/buffer_utils.js';\nimport { decodeBase64url } from '../../lib/helpers.js';\nimport { isDisjoint } from '../../lib/type_checks.js';\nimport { isObject } from '../../lib/type_checks.js';\nimport { checkKeyType } from '../../lib/check_key_type.js';\nimport { validateCrit } from '../../lib/validate_crit.js';\nimport { validateAlgorithms } from '../../lib/validate_algorithms.js';\nimport { normalizeKey } from '../../lib/normalize_key.js';\nexport async function flattenedVerify(jws, key, options) {\n if (!isObject(jws)) {\n throw new JWSInvalid('Flattened JWS must be an object');\n }\n if (jws.protected === undefined && jws.header === undefined) {\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n }\n if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n throw new JWSInvalid('JWS Protected Header incorrect type');\n }\n if (jws.payload === undefined) {\n throw new JWSInvalid('JWS Payload missing');\n }\n if (typeof jws.signature !== 'string') {\n throw new JWSInvalid('JWS Signature missing or incorrect type');\n }\n if (jws.header !== undefined && !isObject(jws.header)) {\n throw new JWSInvalid('JWS Unprotected Header incorrect type');\n }\n let parsedProt = {};\n if (jws.protected) {\n try {\n const protectedHeader = b64u(jws.protected);\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch {\n throw new JWSInvalid('JWS Protected Header is invalid');\n }\n }\n if (!isDisjoint(parsedProt, jws.header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jws.header,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, parsedProt, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const algorithms = options && validateAlgorithms('algorithms', options.algorithms);\n if (algorithms && !algorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n }\n if (b64) {\n if (typeof jws.payload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n }\n checkKeyType(alg, key, 'verify');\n const data = concat(jws.protected !== undefined ? encode(jws.protected) : new Uint8Array(), encode('.'), typeof jws.payload === 'string'\n ? b64\n ? encode(jws.payload)\n : encoder.encode(jws.payload)\n : jws.payload);\n const signature = decodeBase64url(jws.signature, 'signature', JWSInvalid);\n const k = await normalizeKey(key, alg);\n const verified = await verify(alg, k, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n payload = decodeBase64url(jws.payload, 'payload', JWSInvalid);\n }\n else if (typeof jws.payload === 'string') {\n payload = encoder.encode(jws.payload);\n }\n else {\n payload = jws.payload;\n }\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key: k };\n }\n return result;\n}\n","import { flattenedVerify } from '../flattened/verify.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { decoder } from '../../lib/buffer_utils.js';\nexport async function compactVerify(jws, key, options) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n const verified = await flattenedVerify({ payload, protected: protectedHeader, signature }, key, options);\n const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { JWTClaimValidationFailed, JWTExpired, JWTInvalid } from '../util/errors.js';\nimport { encoder, decoder } from './buffer_utils.js';\nimport { isObject } from './type_checks.js';\nconst epoch = (date) => Math.floor(date.getTime() / 1000);\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nexport function secs(str) {\n const matched = REGEX.exec(str);\n if (!matched || (matched[4] && matched[1])) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[2]);\n const unit = matched[3].toLowerCase();\n let numericDate;\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n numericDate = Math.round(value);\n break;\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n numericDate = Math.round(value * minute);\n break;\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n numericDate = Math.round(value * hour);\n break;\n case 'day':\n case 'days':\n case 'd':\n numericDate = Math.round(value * day);\n break;\n case 'week':\n case 'weeks':\n case 'w':\n numericDate = Math.round(value * week);\n break;\n default:\n numericDate = Math.round(value * year);\n break;\n }\n if (matched[1] === '-' || matched[4] === 'ago') {\n return -numericDate;\n }\n return numericDate;\n}\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nconst normalizeTyp = (value) => {\n if (value.includes('/')) {\n return value.toLowerCase();\n }\n return `application/${value.toLowerCase()}`;\n};\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n }\n return false;\n};\nexport function validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n let payload;\n try {\n payload = JSON.parse(decoder.decode(encodedPayload));\n }\n catch {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, 'typ', 'check_failed');\n }\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n const presenceCheck = [...requiredClaims];\n if (maxTokenAge !== undefined)\n presenceCheck.push('iat');\n if (audience !== undefined)\n presenceCheck.push('aud');\n if (subject !== undefined)\n presenceCheck.push('sub');\n if (issuer !== undefined)\n presenceCheck.push('iss');\n for (const claim of new Set(presenceCheck.reverse())) {\n if (!(claim in payload)) {\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, 'missing');\n }\n }\n if (issuer &&\n !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n throw new JWTClaimValidationFailed('unexpected \"iss\" claim value', payload, 'iss', 'check_failed');\n }\n if (subject && payload.sub !== subject) {\n throw new JWTClaimValidationFailed('unexpected \"sub\" claim value', payload, 'sub', 'check_failed');\n }\n if (audience &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n throw new JWTClaimValidationFailed('unexpected \"aud\" claim value', payload, 'aud', 'check_failed');\n }\n let tolerance;\n switch (typeof options.clockTolerance) {\n case 'string':\n tolerance = secs(options.clockTolerance);\n break;\n case 'number':\n tolerance = options.clockTolerance;\n break;\n case 'undefined':\n tolerance = 0;\n break;\n default:\n throw new TypeError('Invalid clockTolerance option type');\n }\n const { currentDate } = options;\n const now = epoch(currentDate || new Date());\n if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n throw new JWTClaimValidationFailed('\"iat\" claim must be a number', payload, 'iat', 'invalid');\n }\n if (payload.nbf !== undefined) {\n if (typeof payload.nbf !== 'number') {\n throw new JWTClaimValidationFailed('\"nbf\" claim must be a number', payload, 'nbf', 'invalid');\n }\n if (payload.nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, 'nbf', 'check_failed');\n }\n }\n if (payload.exp !== undefined) {\n if (typeof payload.exp !== 'number') {\n throw new JWTClaimValidationFailed('\"exp\" claim must be a number', payload, 'exp', 'invalid');\n }\n if (payload.exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, 'exp', 'check_failed');\n }\n }\n if (maxTokenAge) {\n const age = now - payload.iat;\n const max = typeof maxTokenAge === 'number' ? maxTokenAge : secs(maxTokenAge);\n if (age - tolerance > max) {\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, 'iat', 'check_failed');\n }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, 'iat', 'check_failed');\n }\n }\n return payload;\n}\nexport class JWTClaimsBuilder {\n #payload;\n constructor(payload) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this.#payload = structuredClone(payload);\n }\n data() {\n return encoder.encode(JSON.stringify(this.#payload));\n }\n get iss() {\n return this.#payload.iss;\n }\n set iss(value) {\n this.#payload.iss = value;\n }\n get sub() {\n return this.#payload.sub;\n }\n set sub(value) {\n this.#payload.sub = value;\n }\n get aud() {\n return this.#payload.aud;\n }\n set aud(value) {\n this.#payload.aud = value;\n }\n set jti(value) {\n this.#payload.jti = value;\n }\n set nbf(value) {\n if (typeof value === 'number') {\n this.#payload.nbf = validateInput('setNotBefore', value);\n }\n else if (value instanceof Date) {\n this.#payload.nbf = validateInput('setNotBefore', epoch(value));\n }\n else {\n this.#payload.nbf = epoch(new Date()) + secs(value);\n }\n }\n set exp(value) {\n if (typeof value === 'number') {\n this.#payload.exp = validateInput('setExpirationTime', value);\n }\n else if (value instanceof Date) {\n this.#payload.exp = validateInput('setExpirationTime', epoch(value));\n }\n else {\n this.#payload.exp = epoch(new Date()) + secs(value);\n }\n }\n set iat(value) {\n if (value === undefined) {\n this.#payload.iat = epoch(new Date());\n }\n else if (value instanceof Date) {\n this.#payload.iat = validateInput('setIssuedAt', epoch(value));\n }\n else if (typeof value === 'string') {\n this.#payload.iat = validateInput('setIssuedAt', epoch(new Date()) + secs(value));\n }\n else {\n this.#payload.iat = validateInput('setIssuedAt', value);\n }\n }\n}\n","import { compactVerify } from '../jws/compact/verify.js';\nimport { validateClaimsSet } from '../lib/jwt_claims_set.js';\nimport { JWTInvalid } from '../util/errors.js';\nexport async function jwtVerify(jwt, key, options) {\n const verified = await compactVerify(jwt, key, options);\n if (verified.protectedHeader.crit?.includes('b64') && verified.protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = validateClaimsSet(verified.protectedHeader, verified.payload, options);\n const result = { payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n","import { importJWK } from '../key/import.js';\nimport { JWKSInvalid, JOSENotSupported, JWKSNoMatchingKey, JWKSMultipleMatchingKeys, } from '../util/errors.js';\nimport { isObject } from '../lib/type_checks.js';\nfunction getKtyFromAlg(alg) {\n switch (typeof alg === 'string' && alg.slice(0, 2)) {\n case 'RS':\n case 'PS':\n return 'RSA';\n case 'ES':\n return 'EC';\n case 'Ed':\n return 'OKP';\n case 'ML':\n return 'AKP';\n default:\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n}\nfunction isJWKSLike(jwks) {\n return (jwks &&\n typeof jwks === 'object' &&\n Array.isArray(jwks.keys) &&\n jwks.keys.every(isJWKLike));\n}\nfunction isJWKLike(key) {\n return isObject(key);\n}\nclass LocalJWKSet {\n #jwks;\n #cached = new WeakMap();\n constructor(jwks) {\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this.#jwks = structuredClone(jwks);\n }\n jwks() {\n return this.#jwks;\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token?.header };\n const kty = getKtyFromAlg(alg);\n const candidates = this.#jwks.keys.filter((jwk) => {\n let candidate = kty === jwk.kty;\n if (candidate && typeof kid === 'string') {\n candidate = kid === jwk.kid;\n }\n if (candidate && (typeof jwk.alg === 'string' || kty === 'AKP')) {\n candidate = alg === jwk.alg;\n }\n if (candidate && typeof jwk.use === 'string') {\n candidate = jwk.use === 'sig';\n }\n if (candidate && Array.isArray(jwk.key_ops)) {\n candidate = jwk.key_ops.includes('verify');\n }\n if (candidate) {\n switch (alg) {\n case 'ES256':\n candidate = jwk.crv === 'P-256';\n break;\n case 'ES384':\n candidate = jwk.crv === 'P-384';\n break;\n case 'ES512':\n candidate = jwk.crv === 'P-521';\n break;\n case 'Ed25519':\n case 'EdDSA':\n candidate = jwk.crv === 'Ed25519';\n break;\n }\n }\n return candidate;\n });\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n if (length !== 1) {\n const error = new JWKSMultipleMatchingKeys();\n const _cached = this.#cached;\n error[Symbol.asyncIterator] = async function* () {\n for (const jwk of candidates) {\n try {\n yield await importWithAlgCache(_cached, jwk, alg);\n }\n catch { }\n }\n };\n throw error;\n }\n return importWithAlgCache(this.#cached, jwk, alg);\n }\n}\nasync function importWithAlgCache(cache, jwk, alg) {\n const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n if (cached[alg] === undefined) {\n const key = await importJWK({ ...jwk, ext: true }, alg);\n if (key instanceof Uint8Array || key.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[alg] = key;\n }\n return cached[alg];\n}\nexport function createLocalJWKSet(jwks) {\n const set = new LocalJWKSet(jwks);\n const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(localJWKSet, {\n jwks: {\n value: () => structuredClone(set.jwks()),\n enumerable: false,\n configurable: false,\n writable: false,\n },\n });\n return localJWKSet;\n}\n","import { JOSEError, JWKSNoMatchingKey, JWKSTimeout } from '../util/errors.js';\nimport { createLocalJWKSet } from './local.js';\nimport { isObject } from '../lib/type_checks.js';\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v6.2.3';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nexport const customFetch = Symbol();\nasync function fetchJwks(url, headers, signal, fetchImpl = fetch) {\n const response = await fetchImpl(url, {\n method: 'GET',\n signal,\n redirect: 'manual',\n headers,\n }).catch((err) => {\n if (err.name === 'TimeoutError') {\n throw new JWKSTimeout();\n }\n throw err;\n });\n if (response.status !== 200) {\n throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n }\n try {\n return await response.json();\n }\n catch {\n throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n }\n}\nexport const jwksCache = Symbol();\nfunction isFreshJwksCache(input, cacheMaxAge) {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n if (!('uat' in input) || typeof input.uat !== 'number' || Date.now() - input.uat >= cacheMaxAge) {\n return false;\n }\n if (!('jwks' in input) ||\n !isObject(input.jwks) ||\n !Array.isArray(input.jwks.keys) ||\n !Array.prototype.every.call(input.jwks.keys, isObject)) {\n return false;\n }\n return true;\n}\nclass RemoteJWKSet {\n #url;\n #timeoutDuration;\n #cooldownDuration;\n #cacheMaxAge;\n #jwksTimestamp;\n #pendingFetch;\n #headers;\n #customFetch;\n #local;\n #cache;\n constructor(url, options) {\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this.#url = new URL(url.href);\n this.#timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this.#cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this.#cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n this.#headers = new Headers(options?.headers);\n if (USER_AGENT && !this.#headers.has('User-Agent')) {\n this.#headers.set('User-Agent', USER_AGENT);\n }\n if (!this.#headers.has('accept')) {\n this.#headers.set('accept', 'application/json');\n this.#headers.append('accept', 'application/jwk-set+json');\n }\n this.#customFetch = options?.[customFetch];\n if (options?.[jwksCache] !== undefined) {\n this.#cache = options?.[jwksCache];\n if (isFreshJwksCache(options?.[jwksCache], this.#cacheMaxAge)) {\n this.#jwksTimestamp = this.#cache.uat;\n this.#local = createLocalJWKSet(this.#cache.jwks);\n }\n }\n }\n pendingFetch() {\n return !!this.#pendingFetch;\n }\n coolingDown() {\n return typeof this.#jwksTimestamp === 'number'\n ? Date.now() < this.#jwksTimestamp + this.#cooldownDuration\n : false;\n }\n fresh() {\n return typeof this.#jwksTimestamp === 'number'\n ? Date.now() < this.#jwksTimestamp + this.#cacheMaxAge\n : false;\n }\n jwks() {\n return this.#local?.jwks();\n }\n async getKey(protectedHeader, token) {\n if (!this.#local || !this.fresh()) {\n await this.reload();\n }\n try {\n return await this.#local(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return this.#local(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this.#pendingFetch && isCloudflareWorkers()) {\n this.#pendingFetch = undefined;\n }\n this.#pendingFetch ||= fetchJwks(this.#url.href, this.#headers, AbortSignal.timeout(this.#timeoutDuration), this.#customFetch)\n .then((json) => {\n this.#local = createLocalJWKSet(json);\n if (this.#cache) {\n this.#cache.uat = Date.now();\n this.#cache.jwks = json;\n }\n this.#jwksTimestamp = Date.now();\n this.#pendingFetch = undefined;\n })\n .catch((err) => {\n this.#pendingFetch = undefined;\n throw err;\n });\n await this.#pendingFetch;\n }\n}\nexport function createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n const remoteJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(remoteJWKSet, {\n coolingDown: {\n get: () => set.coolingDown(),\n enumerable: true,\n configurable: false,\n },\n fresh: {\n get: () => set.fresh(),\n enumerable: true,\n configurable: false,\n },\n reload: {\n value: () => set.reload(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n reloading: {\n get: () => set.pendingFetch(),\n enumerable: true,\n configurable: false,\n },\n jwks: {\n value: () => set.jwks(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return remoteJWKSet;\n}\n","import { createRemoteJWKSet, jwtVerify } from \"jose\";\n//#region src/constants.ts\n/** OAuth device-flow client id for `keystroke auth login`. */\nconst CLI_CLIENT_ID = \"keystroke-cli\";\n//#endregion\n//#region src/jwt.ts\nconst jwksCache = /* @__PURE__ */ new Map();\nfunction getRemoteJwks(jwksUrl) {\n\tconst cached = jwksCache.get(jwksUrl);\n\tif (cached) return cached;\n\tconst jwks = createRemoteJWKSet(new URL(jwksUrl));\n\tjwksCache.set(jwksUrl, jwks);\n\treturn jwks;\n}\nfunction payloadToUser(payload) {\n\tconst id = typeof payload.id === \"string\" ? payload.id : payload.sub;\n\tconst email = typeof payload.email === \"string\" ? payload.email : void 0;\n\tconst name = typeof payload.name === \"string\" && payload.name.length > 0 ? payload.name : email?.split(\"@\")[0];\n\tif (!id || !email || !name) return null;\n\treturn {\n\t\tid,\n\t\temail,\n\t\tname,\n\t\timage: typeof payload.image === \"string\" ? payload.image : null,\n\t\temailVerified: typeof payload.emailVerified === \"boolean\" ? payload.emailVerified : void 0\n\t};\n}\nfunction createJwtVerifier(options) {\n\tconst audience = options.audience ?? options.issuer;\n\tlet jwks;\n\treturn { verify: async (token) => {\n\t\ttry {\n\t\t\tjwks ??= getRemoteJwks(options.jwksUrl);\n\t\t\tconst { payload } = await jwtVerify(token, jwks, {\n\t\t\t\tissuer: options.issuer,\n\t\t\t\taudience\n\t\t\t});\n\t\t\treturn payloadToUser(payload);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t} };\n}\nfunction extractBearerToken(headers) {\n\tconst authorization = headers.get(\"authorization\");\n\tif (!authorization?.startsWith(\"Bearer \")) return null;\n\tconst token = authorization.slice(7).trim();\n\treturn token.length > 0 ? token : null;\n}\nfunction looksLikeJwt(token) {\n\treturn token.split(\".\").length === 3;\n}\nfunction userFromJwt(jwtUser) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\temail: jwtUser.email,\n\t\tname: jwtUser.name,\n\t\timage: jwtUser.image ?? null,\n\t\temailVerified: jwtUser.emailVerified ?? true,\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nfunction sessionFromJwt(jwtUser, token) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\tuserId: jwtUser.id,\n\t\ttoken,\n\t\texpiresAt: new Date(Date.now() + 900 * 1e3),\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nasync function resolveRequestAuth(jwtVerifier, headers) {\n\tconst bearerToken = extractBearerToken(headers);\n\tif (!bearerToken || !jwtVerifier || !looksLikeJwt(bearerToken)) return null;\n\tconst jwtUser = await jwtVerifier.verify(bearerToken);\n\tif (!jwtUser) return null;\n\treturn {\n\t\tuser: userFromJwt(jwtUser),\n\t\tsession: sessionFromJwt(jwtUser, bearerToken)\n\t};\n}\n/** Auth API origin for JWT verification — platform URL when auth is mounted there. */\nfunction resolveAuthApiBaseUrl() {\n\treturn (process.env.PUBLIC_PLATFORM_URL ?? process.env.PUBLIC_WEB_URL ?? \"\").replace(/\\/+$/, \"\");\n}\nfunction createDefaultAuthJwtVerifier() {\n\treturn createAuthJwtVerifier(resolveAuthApiBaseUrl());\n}\nfunction createAuthJwtVerifier(authBaseUrl) {\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tif (!normalizedBaseUrl) return;\n\treturn createJwtVerifier({\n\t\tissuer: normalizedBaseUrl,\n\t\taudience: normalizedBaseUrl,\n\t\tjwksUrl: `${normalizedBaseUrl}/api/auth/jwks`\n\t});\n}\nasync function fetchJwtWithSession(authBaseUrl, sessionCredential) {\n\tconst headers = new Headers();\n\tif (sessionCredential.cookie) headers.set(\"cookie\", sessionCredential.cookie);\n\tif (sessionCredential.bearerToken) headers.set(\"authorization\", `Bearer ${sessionCredential.bearerToken}`);\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tconst response = await fetch(`${normalizedBaseUrl}/api/auth/token`, { headers });\n\tif (!response.ok) return null;\n\tconst body = await response.json();\n\treturn typeof body.token === \"string\" ? body.token : null;\n}\n//#endregion\nexport { fetchJwtWithSession as a, CLI_CLIENT_ID as c, extractBearerToken as i, createDefaultAuthJwtVerifier as n, resolveAuthApiBaseUrl as o, createJwtVerifier as r, resolveRequestAuth as s, createAuthJwtVerifier as t };\n\n//# sourceMappingURL=jwt-BVJ7dVm9.mjs.map","import { a as authAccounts, i as authDeviceCodes, n as authSessions, o as users, r as authJwks, s as getDatabaseHandle, t as authVerifications } from \"../../auth-verifications-B2HtTck3.mjs\";\nimport { drizzleAdapter } from \"@better-auth/drizzle-adapter\";\n//#region src/schema/auth/options.ts\nfunction authSchemaFor() {\n\treturn {\n\t\tusers,\n\t\tsession: authSessions,\n\t\taccount: authAccounts,\n\t\tverification: authVerifications,\n\t\tdeviceCode: authDeviceCodes,\n\t\tjwks: authJwks\n\t};\n}\nfunction authDatabaseAdapterOptions() {\n\treturn {\n\t\tprovider: \"pg\",\n\t\tschema: authSchemaFor()\n\t};\n}\n//#endregion\n//#region src/schema/auth/adapter.ts\n/** Better Auth database adapter wired to the active Drizzle handle. */\nfunction createAuthDatabaseAdapter() {\n\tconst { db } = getDatabaseHandle();\n\tconst { provider, schema } = authDatabaseAdapterOptions();\n\treturn drizzleAdapter(db, {\n\t\tprovider,\n\t\tschema\n\t});\n}\n//#endregion\nexport { authAccounts, authDatabaseAdapterOptions, authSchemaFor, authSessions, authVerifications, createAuthDatabaseAdapter, users };\n\n//# sourceMappingURL=index.mjs.map","import { a as fetchJwtWithSession, c as CLI_CLIENT_ID, i as extractBearerToken, n as createDefaultAuthJwtVerifier, o as resolveAuthApiBaseUrl, r as createJwtVerifier, s as resolveRequestAuth, t as createAuthJwtVerifier } from \"./jwt-BVJ7dVm9.mjs\";\nimport { n as decodeJwtExpiryMs, t as createJwtTokenCache } from \"./jwt-cache-4YqHn3jM.mjs\";\nimport { createAuthDatabaseAdapter } from \"@keystrokehq/platform-database/auth-schema\";\nimport { betterAuth } from \"better-auth\";\nimport { bearer } from \"better-auth/plugins/bearer\";\nimport { deviceAuthorization } from \"better-auth/plugins/device-authorization\";\nimport { jwt, lastLoginMethod } from \"better-auth/plugins\";\nimport { magicLink } from \"better-auth/plugins/magic-link\";\nimport { Resend } from \"resend\";\nimport { normalizeUserEmail, selectUserByNormalizedEmail } from \"@keystrokehq/platform-database\";\n//#region src/magic-link-email.ts\nfunction envValue$1(name) {\n\treturn process.env[name]?.trim() || void 0;\n}\nfunction resolveAuthEmailFrom() {\n\treturn envValue$1(\"AUTH_EMAIL_FROM\") ?? \"Keystroke <signin@auth.keystroke.ai>\";\n}\nfunction isMagicLinkSignInConfigured() {\n\treturn envValue$1(\"RESEND_API_KEY\") !== void 0;\n}\nfunction resolveResendApiKey() {\n\tconst apiKey = envValue$1(\"RESEND_API_KEY\");\n\tif (!apiKey) throw new Error(\"[auth] RESEND_API_KEY is required for magic link sign-in. Add it to Infisical dev/prod.\");\n\treturn apiKey;\n}\nfunction buildMagicLinkEmailHtml(payload) {\n\treturn `<!DOCTYPE html>\n<html>\n <body style=\"font-family: system-ui, sans-serif; line-height: 1.5; color: #111;\">\n <p>Sign in to Keystroke as <strong>${payload.email.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\")}</strong>.</p>\n <p><a href=\"${payload.url}\" style=\"display: inline-block; padding: 10px 16px; background: #111; color: #fff; text-decoration: none; border-radius: 8px;\">Sign in</a></p>\n <p>Or enter this code on the sign-in page:</p>\n <p style=\"font-size: 20px; font-weight: 600; letter-spacing: 0.2em;\">${payload.token}</p>\n <p style=\"color: #666; font-size: 13px;\">This link and code expire in a few minutes. If you did not request this, you can ignore this email.</p>\n </body>\n</html>`;\n}\nasync function sendAuthMagicLinkEmail(payload, resend = new Resend(resolveResendApiKey())) {\n\tconst { error } = await resend.emails.send({\n\t\tfrom: resolveAuthEmailFrom(),\n\t\tto: payload.email,\n\t\tsubject: \"Sign in to Keystroke\",\n\t\thtml: buildMagicLinkEmailHtml(payload)\n\t});\n\tif (error) throw new Error(`[auth] Failed to send magic link email: ${error.message}`);\n}\n//#endregion\n//#region src/magic-link.ts\nfunction createMagicLinkPlugin() {\n\tif (!isMagicLinkSignInConfigured()) return null;\n\treturn magicLink({ sendMagicLink: async ({ email, url, token }) => {\n\t\tawait sendAuthMagicLinkEmail({\n\t\t\temail,\n\t\t\turl,\n\t\t\ttoken\n\t\t});\n\t} });\n}\n//#endregion\n//#region src/social-login.ts\nfunction envValue(name) {\n\treturn process.env[name]?.trim() || void 0;\n}\nfunction resolveLoginOAuthCredentials(config) {\n\tconst authClientId = envValue(config.authClientIdEnv);\n\tconst authClientSecret = envValue(config.authClientSecretEnv);\n\tif (authClientId && authClientSecret) return {\n\t\tclientId: authClientId,\n\t\tclientSecret: authClientSecret\n\t};\n\tconst clientId = envValue(config.fallbackClientIdEnv);\n\tconst clientSecret = envValue(config.fallbackClientSecretEnv);\n\tif (clientId && clientSecret) return {\n\t\tclientId,\n\t\tclientSecret\n\t};\n\tif (authClientId || authClientSecret) console.warn(`[auth] Incomplete ${config.providerLabel} login OAuth env — set both ${config.authClientIdEnv} and ${config.authClientSecretEnv}.`);\n}\nconst GOOGLE_LOGIN_OAUTH_ENV = {\n\tproviderLabel: \"Google\",\n\tauthClientIdEnv: \"GOOGLE_AUTH_CLIENT_ID\",\n\tauthClientSecretEnv: \"GOOGLE_AUTH_CLIENT_SECRET\",\n\tfallbackClientIdEnv: \"GOOGLE_CLIENT_ID\",\n\tfallbackClientSecretEnv: \"GOOGLE_CLIENT_SECRET\"\n};\nconst GITHUB_LOGIN_OAUTH_ENV = {\n\tproviderLabel: \"GitHub\",\n\tauthClientIdEnv: \"GITHUB_AUTH_CLIENT_ID\",\n\tauthClientSecretEnv: \"GITHUB_AUTH_CLIENT_SECRET\",\n\tfallbackClientIdEnv: \"GITHUB_CLIENT_ID\",\n\tfallbackClientSecretEnv: \"GITHUB_CLIENT_SECRET\"\n};\n/** True when Better Auth Google login OAuth is configured. */\nfunction isGoogleSignInConfigured() {\n\treturn resolveLoginOAuthCredentials(GOOGLE_LOGIN_OAUTH_ENV) !== void 0;\n}\n/** True when Better Auth GitHub login OAuth is configured. */\nfunction isGitHubSignInConfigured() {\n\treturn resolveLoginOAuthCredentials(GITHUB_LOGIN_OAUTH_ENV) !== void 0;\n}\nfunction resolveSocialProviders() {\n\tconst googleCredentials = resolveLoginOAuthCredentials(GOOGLE_LOGIN_OAUTH_ENV);\n\tconst githubCredentials = resolveLoginOAuthCredentials(GITHUB_LOGIN_OAUTH_ENV);\n\tconst providers = {};\n\tif (googleCredentials) providers.google = {\n\t\t...googleCredentials,\n\t\tprompt: \"select_account\"\n\t};\n\tif (githubCredentials) providers.github = githubCredentials;\n\treturn Object.keys(providers).length > 0 ? providers : void 0;\n}\n//#endregion\n//#region src/user-create-hook.ts\nasync function linkUserCreateBeforeHook(user) {\n\tconst email = normalizeUserEmail(user.email);\n\tconst existing = await selectUserByNormalizedEmail(email);\n\tif (existing) return {\n\t\tdata: {\n\t\t\t...user,\n\t\t\tid: existing.id,\n\t\t\temail: existing.email,\n\t\t\tname: user.name?.trim() ? user.name : existing.name,\n\t\t\temailVerified: existing.emailVerified || user.emailVerified\n\t\t},\n\t\tforceAllowId: true\n\t};\n\treturn { data: {\n\t\t...user,\n\t\temail\n\t} };\n}\n//#endregion\n//#region src/server.ts\nconst AUTH_API_PATH = \"/api/auth/*\";\nfunction createAuthInstance(options) {\n\tconst socialProviders = resolveSocialProviders();\n\tconst magicLinkPlugin = createMagicLinkPlugin();\n\treturn betterAuth({\n\t\tsecret: options.secret,\n\t\tbaseURL: options.baseURL,\n\t\ttrustedOrigins: options.trustedOrigins,\n\t\taccount: { accountLinking: {\n\t\t\tenabled: true,\n\t\t\ttrustedProviders: [\"google\", \"github\"],\n\t\t\trequireLocalEmailVerified: false\n\t\t} },\n\t\tdatabase: createAuthDatabaseAdapter(),\n\t\tdatabaseHooks: { user: { create: { before: linkUserCreateBeforeHook } } },\n\t\t...socialProviders ? { socialProviders } : {},\n\t\tuser: { modelName: \"users\" },\n\t\tplugins: [\n\t\t\t...magicLinkPlugin ? [magicLinkPlugin] : [],\n\t\t\tlastLoginMethod({ customResolveMethod: (ctx) => {\n\t\t\t\tif (ctx.path?.startsWith(\"/magic-link/verify\")) return \"email\";\n\t\t\t\treturn null;\n\t\t\t} }),\n\t\t\tdeviceAuthorization({\n\t\t\t\tverificationUri: options.verificationUri ?? \"/device\",\n\t\t\t\tvalidateClient: (clientId) => clientId === CLI_CLIENT_ID,\n\t\t\t\tinterval: \"1s\",\n\t\t\t\tschema: {}\n\t\t\t}),\n\t\t\tbearer(),\n\t\t\tjwt({ jwt: { definePayload: ({ user }) => ({\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\timage: user.image,\n\t\t\t\temailVerified: user.emailVerified\n\t\t\t}) } })\n\t\t]\n\t});\n}\n/** Returns undefined when no secret is configured (auth disabled). */\nfunction createAuth(options = {}) {\n\tconst secret = options.secret ?? process.env.BETTER_AUTH_SECRET;\n\tif (!secret) return;\n\tconst baseURL = options.baseURL ?? process.env.PUBLIC_PLATFORM_URL?.replace(/\\/+$/, \"\") ?? process.env.PUBLIC_WEB_URL;\n\tif (!baseURL) throw new Error(\"PUBLIC_PLATFORM_URL or PUBLIC_WEB_URL is required when auth is enabled\");\n\treturn createAuthInstance({\n\t\t...options,\n\t\tsecret,\n\t\tbaseURL\n\t});\n}\nfunction handleAuthRequest(auth, request) {\n\treturn auth.handler(request);\n}\n//#endregion\n//#region src/webhook-api-key.ts\nfunction extractWebhookApiKeyFromRequest(request) {\n\tconst url = new URL(request.url);\n\tconst queryToken = url.searchParams.get(\"token\") ?? url.searchParams.get(\"api_key\");\n\tif (queryToken?.trim()) return queryToken.trim();\n\tconst authorization = request.headers.get(\"authorization\");\n\tif (authorization?.startsWith(\"Bearer \")) {\n\t\tconst bearer = authorization.slice(7).trim();\n\t\tif (bearer) return bearer;\n\t}\n\treturn request.headers.get(\"x-api-key\")?.trim() || null;\n}\n//#endregion\nexport { AUTH_API_PATH, CLI_CLIENT_ID, createAuth, createAuthJwtVerifier, createDefaultAuthJwtVerifier, createJwtTokenCache, createJwtVerifier, decodeJwtExpiryMs, extractBearerToken, extractWebhookApiKeyFromRequest, fetchJwtWithSession, handleAuthRequest, isGitHubSignInConfigured, isGoogleSignInConfigured, isMagicLinkSignInConfigured, resolveAuthApiBaseUrl, resolveAuthEmailFrom, resolveRequestAuth };\n\n//# sourceMappingURL=index.mjs.map","import { runWithProjectDatabase, runWithProjectScope, selectEphemeralTriggerAttachments, syncSkillRegistry } from \"@keystrokehq/database\";\nimport { ensureWebhookApiKeys, promoteProjectArtifact, resolveOrgDatabaseUrl, selectOrganizationById, selectProjectArtifactById, selectProjectById, updateProjectActive, updateProjectArtifactManifest, updateProjectFailed } from \"@keystrokehq/platform-database\";\nimport { extractWebhookRoutesFromManifest, fetchStoredRouteManifest, syncRegistryFromStoredManifest, webhookRouteFromEndpoint } from \"@keystrokehq/server\";\nimport { StoredProjectSourceManifestSchema, parseStoredRouteManifest } from \"@keystrokehq/shared\";\nimport { getPgBoss } from \"@keystrokehq/scheduler\";\n//#region src/management/start-project.ts\nasync function startProject(input) {\n\ttry {\n\t\tconst result = await input.runtime.start({\n\t\t\tprojectId: input.projectId,\n\t\t\tname: input.name,\n\t\t\tartifactId: input.artifactId,\n\t\t\tartifactUrl: input.artifactUrl,\n\t\t\tdatabase: input.database\n\t\t});\n\t\tawait input.onSuccess(result);\n\t} catch (error) {\n\t\tawait input.onFailure(error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n//#endregion\n//#region src/promote-project-deploy.ts\nasync function resolveDeployManifest(input) {\n\tif (input.artifactManifest != null) return parseStoredRouteManifest(input.artifactManifest);\n\treturn fetchStoredRouteManifest(input.baseUrl);\n}\n/** Skills only exist in the source manifest (file tree), never the route manifest. */\nfunction skillRecordsFromSourceManifest(sourceManifestJson) {\n\tconst parsed = StoredProjectSourceManifestSchema.safeParse(sourceManifestJson);\n\tif (!parsed.success) return [];\n\treturn parsed.data.resources.skills.map((skill) => ({\n\t\tkey: skill.key,\n\t\tmoduleFile: skill.path\n\t}));\n}\n/** Cut over activeArtifactId, then sync org project registry from the runtime manifest. */\nasync function promoteProjectDeploy(input) {\n\tconst project = await selectProjectById(input.projectId);\n\tif (!project) throw new Error(`Project ${input.projectId} not found`);\n\tconst artifact = await selectProjectArtifactById(input.artifactId);\n\tif (!artifact || artifact.projectId !== input.projectId) throw new Error(`Artifact ${input.artifactId} not found for project ${input.projectId}`);\n\tconst organization = await selectOrganizationById(project.organizationId);\n\tif (!organization) throw new Error(`Organization not found for project ${input.projectId}`);\n\tconst manifest = await resolveDeployManifest({\n\t\tartifactManifest: artifact.manifestJson,\n\t\tbaseUrl: input.baseUrl\n\t});\n\tif (artifact.manifestJson == null) await updateProjectArtifactManifest({\n\t\tartifactId: input.artifactId,\n\t\tmanifestJson: manifest\n\t});\n\tif (project.pendingArtifactId === input.artifactId) await promoteProjectArtifact({\n\t\tprojectId: input.projectId,\n\t\tartifactId: input.artifactId\n\t});\n\telse if (project.activeArtifactId !== input.artifactId) throw new Error(`Artifact ${input.artifactId} is not the pending deploy for project ${input.projectId}`);\n\tconst ephemeralRoutes = [];\n\tawait runWithProjectDatabase({\n\t\turl: resolveOrgDatabaseUrl(organization),\n\t\tsearchPath: organization.dbSchema\n\t}, async () => runWithProjectScope(project.id, async () => {\n\t\tawait syncRegistryFromStoredManifest(manifest);\n\t\tawait syncSkillRegistry(skillRecordsFromSourceManifest(artifact.sourceManifestJson));\n\t\tconst byRoute = /* @__PURE__ */ new Map();\n\t\tfor (const row of await selectEphemeralTriggerAttachments()) {\n\t\t\tif (row.source.kind !== \"webhook\") continue;\n\t\t\tconst route = webhookRouteFromEndpoint(row.source.endpoint);\n\t\t\tbyRoute.set(route, [...byRoute.get(route) ?? [], row.key]);\n\t\t}\n\t\tfor (const [route, attachmentKeys] of byRoute) ephemeralRoutes.push({\n\t\t\troute,\n\t\t\tattachmentKeys\n\t\t});\n\t}));\n\tconst webhookRoutes = [...extractWebhookRoutesFromManifest(manifest), ...ephemeralRoutes];\n\tif (webhookRoutes.length > 0) await ensureWebhookApiKeys(project.id, webhookRoutes, project.id);\n}\n//#endregion\n//#region src/resolve-runtime-artifact.ts\n/** Decide whether a pg-boss job should start runtime, skip as stale, or fail. */\nfunction resolveRuntimeArtifact(project, jobArtifactId) {\n\tif (jobArtifactId && project.pendingArtifactId && jobArtifactId !== project.pendingArtifactId) return { action: \"skip\" };\n\tif (jobArtifactId && !project.pendingArtifactId && project.activeArtifactId && jobArtifactId !== project.activeArtifactId) return { action: \"skip\" };\n\tconst artifactId = jobArtifactId ?? project.pendingArtifactId ?? project.activeArtifactId ?? null;\n\tif (!artifactId) return {\n\t\taction: \"error\",\n\t\tmessage: `Project ${project.id} has no pending artifact`\n\t};\n\tif (!project.pendingArtifactId && project.activeArtifactId === artifactId && project.status === \"active\" && project.baseUrl && project.runtimeId) return { action: \"skip\" };\n\treturn {\n\t\taction: \"run\",\n\t\tartifactId\n\t};\n}\n//#endregion\n//#region src/runtime-jobs.ts\nconst PROJECT_RUNTIME_QUEUE = \"project.runtime\";\nconst PROJECT_RUNTIME_DLQ = \"project.runtime.dlq\";\nasync function ensureProjectRuntimeQueues(boss) {\n\tawait boss.createQueue(PROJECT_RUNTIME_DLQ);\n\tawait boss.createQueue(PROJECT_RUNTIME_QUEUE, {\n\t\tretryLimit: 5,\n\t\tretryDelay: 30,\n\t\tretryBackoff: true,\n\t\texpireInSeconds: 600,\n\t\tdeadLetter: PROJECT_RUNTIME_DLQ\n\t});\n}\nasync function enqueueProjectRuntime(job) {\n\treturn getPgBoss().send(PROJECT_RUNTIME_QUEUE, job, { singletonKey: job.projectId });\n}\nasync function destroyProjectRuntime(runtime, input, runtimeId) {\n\tif (!runtime.destroy) return;\n\ttry {\n\t\tawait runtime.destroy({\n\t\t\truntimeId,\n\t\t\thosting: input.hosting\n\t\t});\n\t} catch (destroyError) {\n\t\tconsole.error(`[project.runtime] failed to destroy runtime ${runtimeId}`, destroyError);\n\t}\n}\nfunction startProjectRuntimeWorker(runtime, options = {}) {\n\tconst boss = getPgBoss();\n\tconst resolveStartInput = options.resolveStartInput ?? (async (job) => {\n\t\tthrow new Error(`Project runtime for ${job.projectId} requires resolveStartInput with database credentials`);\n\t});\n\tboss.work(PROJECT_RUNTIME_QUEUE, async (jobs) => {\n\t\tfor (const job of jobs) try {\n\t\t\tconst project = await selectProjectById(job.data.projectId);\n\t\t\tif (!project) throw new Error(`Project ${job.data.projectId} not found`);\n\t\t\tconst resolved = resolveRuntimeArtifact(project, job.data.artifactId);\n\t\t\tif (resolved.action === \"skip\") continue;\n\t\t\tif (resolved.action === \"error\") throw new Error(resolved.message);\n\t\t\tconst input = await resolveStartInput({\n\t\t\t\t...job.data,\n\t\t\t\tartifactId: resolved.artifactId\n\t\t\t});\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await runtime.start(input);\n\t\t\t\tawait promoteProjectDeploy({\n\t\t\t\t\tprojectId: job.data.projectId,\n\t\t\t\t\tartifactId: resolved.artifactId,\n\t\t\t\t\tbaseUrl: result.baseUrl\n\t\t\t\t});\n\t\t\t\tawait updateProjectActive(job.data.projectId, result);\n\t\t\t\tif (input.previousRuntimeId) await destroyProjectRuntime(runtime, input, input.previousRuntimeId);\n\t\t\t} catch (error) {\n\t\t\t\tif (result) await destroyProjectRuntime(runtime, input, result.runtimeId);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`[project.runtime] ${job.data.projectId} failed`, error);\n\t\t\tthrow error;\n\t\t}\n\t});\n\tboss.work(PROJECT_RUNTIME_DLQ, async (jobs) => {\n\t\tfor (const job of jobs) await updateProjectFailed(job.data.projectId, \"Project runtime failed after retries\");\n\t});\n}\n//#endregion\nexport { enqueueProjectRuntime, ensureProjectRuntimeQueues, promoteProjectDeploy, resolveRuntimeArtifact, startProject, startProjectRuntimeWorker };\n\n//# sourceMappingURL=index.mjs.map","import { AUTH_API_PATH, handleAuthRequest, type Auth } from \"@keystrokehq/auth\";\nimport type { Env, Hono } from \"hono\";\n\nexport function mountAuth<E extends Env>(app: Hono<E>, auth: Auth): void {\n app.on([\"POST\", \"GET\"], AUTH_API_PATH, (c) => handleAuthRequest(auth, c.req.raw));\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"./types\";\n\nconst adminRoles = new Set([\"owner\", \"admin\"]);\n\nexport function requireOrgAdmin(): MiddlewareHandler<{ Variables: OrganizationVariables }> {\n return async (c, next) => {\n const { role } = c.get(\"organization\");\n\n if (!adminRoles.has(role)) {\n return c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403);\n }\n\n await next();\n };\n}\n","import { ACTIVE_ORG_COOKIE, ACTIVE_ORG_HEADER } from \"@keystrokehq/shared\";\nimport type { Context } from \"hono\";\nimport { getCookie } from \"hono/cookie\";\n\nexport function resolveActiveOrganizationId(c: Context): string | undefined {\n const header = c.req.header(ACTIVE_ORG_HEADER)?.trim();\n if (header) {\n return header;\n }\n\n const cookie = getCookie(c, ACTIVE_ORG_COOKIE)?.trim();\n return cookie || undefined;\n}\n\nexport function activeOrganizationCookie(organizationId: string): string {\n return `${ACTIVE_ORG_COOKIE}=${organizationId}; Path=/; HttpOnly; SameSite=Lax`;\n}\n\nexport function clearActiveOrganizationCookie(): string {\n return `${ACTIVE_ORG_COOKIE}=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax`;\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\nimport type { Context } from \"hono\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { resolveActiveOrganizationId } from \"./resolve-org-id\";\nimport type { OrganizationContext, OrganizationVariables } from \"./types\";\n\ntype OrganizationResolution =\n | { ok: true; organization: OrganizationContext }\n | { ok: false; response: Response };\n\nexport async function resolveOrganizationContext(c: Context): Promise<OrganizationResolution> {\n const organizationId = resolveActiveOrganizationId(c);\n\n if (!organizationId) {\n return {\n ok: false,\n response: c.json(\n ErrorResponseSchema.parse({\n error: \"Select an organization to continue\",\n code: \"needs_org_selection\",\n }),\n 409,\n ),\n };\n }\n\n const user = c.get(\"user\");\n const membership = await selectUserOrganizationMembership(user.id, organizationId);\n\n if (!membership) {\n return {\n ok: false,\n response: c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403),\n };\n }\n\n return {\n ok: true,\n organization: {\n organizationId: membership.organization.id,\n organizationName: membership.organization.name,\n role: membership.role,\n },\n };\n}\n\nexport function requireOrganization(): MiddlewareHandler<{ Variables: OrganizationVariables }> {\n return async (c, next) => {\n const resolved = await resolveOrganizationContext(c);\n if (!resolved.ok) {\n return resolved.response;\n }\n\n c.set(\"organization\", resolved.organization);\n await next();\n };\n}\n","import { ErrorResponseSchema, mapProject } from \"@keystrokehq/shared\";\nimport {\n runWithWorkspaceContext,\n selectOrganizationById,\n selectProjectForOrganization,\n} from \"@keystrokehq/platform-database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { ProjectRouteVariables } from \"./types\";\n\nexport function requireProject(): MiddlewareHandler<{ Variables: ProjectRouteVariables }> {\n return async (c, next) => {\n const organization = c.get(\"organization\");\n const projectId = c.req.param(\"projectId\")?.trim();\n\n if (!projectId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project id is required\" }), 400);\n }\n\n const [project, organizationRow] = await Promise.all([\n selectProjectForOrganization(organization.organizationId, projectId),\n selectOrganizationById(organization.organizationId),\n ]);\n\n if (!project) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project not found\" }), 404);\n }\n\n if (!organizationRow) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n c.set(\"project\", project);\n\n await runWithWorkspaceContext(\n {\n organizationId: organization.organizationId,\n role: organization.role,\n projectId: project.id,\n dbSchema: organizationRow.dbSchema,\n },\n () => next(),\n );\n };\n}\n\nexport function routeProject(project: ProjectRouteVariables[\"project\"]) {\n return mapProject(project);\n}\n","import {\n createDefaultAuthJwtVerifier,\n resolveRequestAuth,\n type JwtVerifier,\n} from \"@keystrokehq/auth\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { SessionVariables } from \"./types\";\n\nexport function requireSession(\n jwtVerifier?: JwtVerifier,\n): MiddlewareHandler<{ Variables: SessionVariables }> {\n const verifier = jwtVerifier ?? createDefaultAuthJwtVerifier();\n\n return async (c, next) => {\n const result = await resolveRequestAuth(verifier, c.req.raw.headers);\n\n if (!result) {\n return c.json({ error: \"Unauthorized\" }, 401);\n }\n\n c.set(\"user\", result.user);\n c.set(\"session\", result.session);\n await next();\n };\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { runWithProjectDatabase, runWithTenantScope } from \"@keystrokehq/database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"../auth/types\";\n\n/** Bind the org's shared Postgres schema (all projects in the org use this DB). */\nexport function withOrganizationProjectDatabase(): MiddlewareHandler<{\n Variables: OrganizationVariables;\n}> {\n return async (c, next) => {\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithTenantScope(organizationId, () => next()),\n ),\n );\n };\n}\n","import { ListOrganizationsResponseSchema, mapUserOrganization } from \"@keystrokehq/shared\";\nimport { selectUserOrganizations } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const memberships = await selectUserOrganizations(user.id);\n\n return c.json(\n ListOrganizationsResponseSchema.parse({\n organizations: memberships.map(mapUserOrganization),\n }),\n );\n};\n","import { seedOAuthAppsFromEnvForOrganization } from \"@keystrokehq/server\";\nimport type { HostingPlugin } from \"@keystrokehq/hosting\";\nimport type { OrganizationStorageResult, StoragePlugin } from \"@keystrokehq/storage\";\nimport {\n createOrganizationForUser,\n encryptCredentialPayload,\n isOrganizationStorageBucketInUse,\n OrganizationSlugTakenError,\n resolveNewOrganizationIdentity,\n type UserOrganizationMembership,\n} from \"@keystrokehq/platform-database\";\n\nexport type CreateOrganizationDependencies = {\n hosting: HostingPlugin;\n storage: StoragePlugin;\n};\n\nexport async function createOrganizationWithHosting(\n deps: CreateOrganizationDependencies,\n userId: string,\n name: string,\n preferredSlug?: string,\n): Promise<UserOrganizationMembership> {\n const { hosting, storage } = deps;\n const identity = await resolveNewOrganizationIdentity(name, preferredSlug);\n let hostedAppName: string | undefined;\n let provisionedStorage: OrganizationStorageResult | undefined;\n let organizationPersisted = false;\n\n try {\n if (hosting.provisionOrganization) {\n const hosted = await hosting.provisionOrganization({\n organizationId: identity.organizationId,\n name: name.trim(),\n slug: identity.slug,\n });\n hostedAppName = hosted.appName;\n }\n\n provisionedStorage = await storage.provisionOrganization({\n organizationId: identity.organizationId,\n name: name.trim(),\n slug: identity.slug,\n });\n\n const membership = await createOrganizationForUser(userId, name, preferredSlug, {\n organizationId: identity.organizationId,\n slug: identity.slug,\n hostingAppName: hostedAppName ?? null,\n storage: {\n bucket: provisionedStorage.bucket,\n endpoint: provisionedStorage.endpoint,\n accessKeyIdCiphertext: encryptCredentialPayload(provisionedStorage.accessKeyId),\n secretAccessKeyCiphertext: encryptCredentialPayload(provisionedStorage.secretAccessKey),\n region: provisionedStorage.region ?? null,\n forcePathStyle: provisionedStorage.forcePathStyle ?? null,\n },\n });\n organizationPersisted = true;\n await seedOAuthAppsFromEnvForOrganization(identity.organizationId);\n return membership;\n } catch (error) {\n if (provisionedStorage && !organizationPersisted) {\n const bucketInUse = await isOrganizationStorageBucketInUse(provisionedStorage.bucket);\n if (!bucketInUse) {\n await storage.deprovisionOrganization(provisionedStorage).catch(() => undefined);\n }\n }\n if (hostedAppName && hosting.deprovisionOrganization) {\n await hosting.deprovisionOrganization({ appName: hostedAppName }).catch(() => undefined);\n }\n\n throw error;\n }\n}\n\nexport { OrganizationSlugTakenError };\n","import { OrganizationSlugTakenError } from \"@keystrokehq/platform-database\";\nimport type { OrganizationSlugErrorCode } from \"@keystrokehq/shared\";\nimport { organizationSlugErrorCodeFromMessage } from \"@keystrokehq/shared\";\nimport { ZodError } from \"zod\";\n\nexport function organizationSlugErrorBody(error: OrganizationSlugTakenError | ZodError): {\n error: string;\n code: OrganizationSlugErrorCode;\n} {\n if (error instanceof OrganizationSlugTakenError) {\n return { error: error.message, code: \"slug_taken\" };\n }\n\n const message = error.issues[0]?.message ?? \"Invalid organization slug\";\n return {\n error: message,\n code: organizationSlugErrorCodeFromMessage(message),\n };\n}\n","import {\n CreateOrganizationRequestSchema,\n CreateOrganizationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport type { CreateOrganizationDependencies } from \"../../../services/create-organization\";\nimport { ZodError } from \"zod\";\n\nimport type { AccountRouteHandler } from \"../../types\";\nimport {\n createOrganizationWithHosting,\n OrganizationSlugTakenError,\n} from \"../../../services/create-organization\";\nimport { organizationSlugErrorBody } from \"./slug-errors\";\n\nexport function createOrganizationHandler(\n deps: CreateOrganizationDependencies,\n): AccountRouteHandler {\n return async (c) => {\n const user = c.get(\"user\");\n const body = await c.req.json().catch(() => null);\n const parsed = CreateOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid organization request\" }), 400);\n }\n\n try {\n const membership = await createOrganizationWithHosting(\n deps,\n user.id,\n parsed.data.name,\n parsed.data.slug,\n );\n\n return c.json(\n CreateOrganizationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n 201,\n );\n } catch (error) {\n if (error instanceof OrganizationSlugTakenError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 409);\n }\n\n if (error instanceof ZodError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 400);\n }\n\n throw error;\n }\n };\n}\n","import {\n ErrorResponseSchema,\n SlugAvailabilityQuerySchema,\n SlugAvailabilityResponseSchema,\n} from \"@keystrokehq/shared\";\nimport { checkOrganizationSlugAvailability } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const parsed = SlugAvailabilityQuerySchema.safeParse({\n slug: c.req.query(\"slug\"),\n excludeOrganizationId: c.req.query(\"excludeOrganizationId\"),\n });\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid slug query\" }), 400);\n }\n\n const availability = await checkOrganizationSlugAvailability(\n parsed.data.slug,\n parsed.data.excludeOrganizationId,\n );\n\n return c.json(SlugAvailabilityResponseSchema.parse(availability));\n};\n","import { ActiveOrganizationResponseSchema, mapUserOrganization } from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\n\nimport { resolveActiveOrganizationId } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const organizationId = resolveActiveOrganizationId(c);\n\n if (!organizationId) {\n return c.json(ActiveOrganizationResponseSchema.parse({ organization: null }));\n }\n\n const user = c.get(\"user\");\n const membership = await selectUserOrganizationMembership(user.id, organizationId);\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: membership ? mapUserOrganization(membership) : null,\n }),\n );\n};\n","import {\n ActiveOrganizationResponseSchema,\n ErrorResponseSchema,\n SetActiveOrganizationRequestSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport { selectUserOrganizationMembership } from \"@keystrokehq/platform-database\";\n\nimport { activeOrganizationCookie } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const body = await c.req.json().catch(() => null);\n const parsed = SetActiveOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization id is required\" }), 400);\n }\n\n const membership = await selectUserOrganizationMembership(user.id, parsed.data.organizationId);\n\n if (!membership) {\n return c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403);\n }\n\n c.header(\"Set-Cookie\", activeOrganizationCookie(membership.organization.id));\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n );\n};\n","import { ActiveOrganizationResponseSchema } from \"@keystrokehq/shared\";\n\nimport { clearActiveOrganizationCookie } from \"../../../../auth/resolve-org-id\";\nimport type { AccountRouteHandler } from \"../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n c.header(\"Set-Cookie\", clearActiveOrganizationCookie());\n\n return c.json(ActiveOrganizationResponseSchema.parse({ organization: null }));\n};\n","import {\n ActiveOrganizationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n UpdateOrganizationRequestSchema,\n} from \"@keystrokehq/shared\";\nimport { OrganizationSlugTakenError, updateOrganizationSlug } from \"@keystrokehq/platform-database\";\nimport { ZodError } from \"zod\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { organizationSlugErrorBody } from \"../slug-errors\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = UpdateOrganizationRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(parsed.error)), 400);\n }\n\n try {\n const updated = await updateOrganizationSlug(organization.organizationId, parsed.data.slug);\n\n return c.json(\n ActiveOrganizationResponseSchema.parse({\n organization: mapUserOrganization({\n organization: updated,\n role: organization.role,\n }),\n }),\n );\n } catch (error) {\n if (error instanceof OrganizationSlugTakenError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 409);\n }\n\n if (error instanceof ZodError) {\n return c.json(ErrorResponseSchema.parse(organizationSlugErrorBody(error)), 400);\n }\n\n throw error;\n }\n};\n","import { PLATFORM_RESOURCE_UNSUPPORTED_TEXT } from \"@keystrokehq/shared\";\n\n/** Derive a human display name from a resource key (no `name` column exists yet). */\nexport function titleCaseKey(key: string): string {\n const normalized = key\n .split(/[/_-]+/)\n .filter(Boolean)\n .join(\" \");\n\n if (!normalized) {\n return PLATFORM_RESOURCE_UNSUPPORTED_TEXT;\n }\n\n return normalized.replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n","import { AgentSummarySchema, type AgentSummary } from \"@keystrokehq/shared\";\nimport type { AgentRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\n/** The route-manifest deploy sync seeds a placeholder model until the runtime registers the real one. */\nconst PENDING_MODEL = \"pending/pending\";\n\nfunction formatModel(model: AgentRow[\"model\"]): string | undefined {\n if (!model || model === PENDING_MODEL) {\n return undefined;\n }\n\n return model;\n}\n\nexport function toAgentSummary(row: AgentRow): AgentSummary {\n return AgentSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n model: formatModel(row.model),\n });\n}\n","import { AgentSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveAgents } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toAgentSummary } from \"../resources/agents\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveAgents();\n\n return c.json(AgentSummaryListResponseSchema.parse(rows.map(toAgentSummary)));\n};\n","import { AgentSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveAgentById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toAgentSummary } from \"../../resources/agents\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const agentId = c.req.param(\"agentId\") ?? \"\";\n const row = agentId ? await selectActiveAgentById(agentId) : undefined;\n\n return c.json(AgentSummaryDetailResponseSchema.parse(row ? toAgentSummary(row) : null));\n};\n","import { WorkflowSummarySchema, type WorkflowSummary } from \"@keystrokehq/shared\";\nimport type { WorkflowRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\nexport function toWorkflowSummary(row: WorkflowRow): WorkflowSummary {\n return WorkflowSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n });\n}\n","import { WorkflowSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveWorkflows } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toWorkflowSummary } from \"../resources/workflows\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveWorkflows();\n\n return c.json(WorkflowSummaryListResponseSchema.parse(rows.map(toWorkflowSummary)));\n};\n","import { WorkflowSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveWorkflowById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toWorkflowSummary } from \"../../resources/workflows\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const workflowId = c.req.param(\"workflowId\") ?? \"\";\n const row = workflowId ? await selectActiveWorkflowById(workflowId) : undefined;\n\n return c.json(WorkflowSummaryDetailResponseSchema.parse(row ? toWorkflowSummary(row) : null));\n};\n","import { SkillSummarySchema, type SkillSummary } from \"@keystrokehq/shared\";\nimport type { SkillRow } from \"@keystrokehq/database\";\n\nimport { titleCaseKey } from \"./common\";\n\nexport function toSkillSummary(row: SkillRow): SkillSummary {\n return SkillSummarySchema.parse({\n id: row.id,\n name: titleCaseKey(row.key),\n projectId: row.projectId,\n updatedAt: row.updatedAt.toISOString(),\n sourcePath: row.moduleFile,\n });\n}\n","import { SkillSummaryListResponseSchema } from \"@keystrokehq/shared\";\nimport { listActiveSkills } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\nimport { toSkillSummary } from \"../resources/skills\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const rows = await listActiveSkills();\n\n return c.json(SkillSummaryListResponseSchema.parse(rows.map(toSkillSummary)));\n};\n","import { SkillSummaryDetailResponseSchema } from \"@keystrokehq/shared\";\nimport { selectActiveSkillById } from \"@keystrokehq/database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\nimport { toSkillSummary } from \"../../resources/skills\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const skillId = c.req.param(\"skillId\") ?? \"\";\n const row = skillId ? await selectActiveSkillById(skillId) : undefined;\n\n return c.json(SkillSummaryDetailResponseSchema.parse(row ? toSkillSummary(row) : null));\n};\n","import { ListProjectsResponseSchema, mapProject } from \"@keystrokehq/shared\";\nimport { selectProjectsByOrganizationId } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const projects = await selectProjectsByOrganizationId(organization.organizationId);\n\n return c.json(\n ListProjectsResponseSchema.parse({\n projects: projects.map(mapProject),\n }),\n );\n};\n","import {\n CreateProjectRequestSchema,\n CreateProjectResponseSchema,\n ErrorResponseSchema,\n mapProject,\n} from \"@keystrokehq/shared\";\nimport { createProjectForOrganization } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = CreateProjectRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project name is required\" }), 400);\n }\n\n const project = await createProjectForOrganization(\n organization.organizationId,\n parsed.data.name,\n parsed.data.description,\n );\n\n return c.json(\n CreateProjectResponseSchema.parse({\n project: mapProject(project),\n }),\n 201,\n );\n};\n","import { ProjectResponseSchema } from \"@keystrokehq/shared\";\n\nimport { routeProject } from \"../../../../auth/require-project\";\nimport type { ProjectRouteHandler } from \"../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n return c.json(\n ProjectResponseSchema.parse({\n project: routeProject(c.get(\"project\")),\n }),\n );\n};\n","import { CreateProjectArtifactResponseSchema, mapProjectArtifact } from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n insertProjectArtifact,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { projectArtifactKey } from \"@keystrokehq/storage\";\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nconst DEFAULT_PRESIGN_TTL_SECONDS = 900;\nconst ARTIFACT_CONTENT_TYPE = \"application/gzip\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const artifactId = crypto.randomUUID();\n const storageKey = projectArtifactKey(project.id, artifactId);\n const storage = createOrgStorageClient(organization);\n\n const artifact = await insertProjectArtifact({\n id: artifactId,\n projectId: project.id,\n storageKey,\n });\n\n const uploadUrl = await storage.presignPut({\n key: storageKey,\n contentType: ARTIFACT_CONTENT_TYPE,\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n });\n\n return c.json(\n CreateProjectArtifactResponseSchema.parse({\n artifact: mapProjectArtifact(artifact),\n uploadUrl,\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n }),\n 201,\n );\n};\n","import {\n CompleteProjectArtifactResponseSchema,\n ErrorResponseSchema,\n mapProject,\n mapProjectArtifact,\n} from \"@keystrokehq/shared\";\nimport {\n completeProjectArtifact,\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { enqueueProjectRuntime } from \"@keystrokehq/projects\";\nimport type { ProjectRouteHandler } from \"../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const existing = await selectProjectArtifactForProject(artifactId, project.id);\n if (!existing) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n if (existing.status === \"ready\") {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact already completed\" }), 409);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n const head = await storage.headObject(existing.storageKey);\n if (!head || head.contentLength <= 0) {\n return c.json(\n ErrorResponseSchema.parse({ error: \"Artifact upload not found in storage\" }),\n 400,\n );\n }\n\n try {\n const artifactBytes = await storage.getObject(existing.storageKey);\n if (!artifactBytes || artifactBytes.byteLength <= 0) {\n return c.json(\n ErrorResponseSchema.parse({ error: \"Artifact upload not found in storage\" }),\n 400,\n );\n }\n\n const result = await completeProjectArtifact({\n artifactId,\n projectId: project.id,\n });\n\n await enqueueProjectRuntime({\n projectId: project.id,\n name: project.name,\n artifactId,\n });\n\n return c.json(\n CompleteProjectArtifactResponseSchema.parse({\n artifact: mapProjectArtifact(result.artifact),\n project: mapProject(result.project),\n }),\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to complete artifact\";\n return c.json(ErrorResponseSchema.parse({ error: message }), 400);\n }\n};\n","import {\n ErrorResponseSchema,\n PresignProjectSourceRequestSchema,\n PresignProjectSourceResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nconst SOURCE_BLOB_CONTENT_TYPE = \"text/plain; charset=utf-8\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n const parsed = PresignProjectSourceRequestSchema.safeParse(await c.req.json().catch(() => null));\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid blob list\" }), 400);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n\n // De-dupe requested hashes, then presign PUTs only for blobs not already\n // stored so unchanged files are never re-uploaded across deploys.\n const hashes = [...new Set(parsed.data.blobs.map((blob) => blob.hash))];\n const uploads = await Promise.all(\n hashes.map(async (hash) => {\n const key = projectSourceBlobKey(project.id, hash);\n const head = await storage.headObject(key);\n if (head && head.contentLength > 0) {\n return null;\n }\n const url = await storage.presignPut({ key, contentType: SOURCE_BLOB_CONTENT_TYPE });\n return { hash, url };\n }),\n );\n\n return c.json(\n PresignProjectSourceResponseSchema.parse({\n uploads: uploads.filter((upload): upload is { hash: string; url: string } => upload !== null),\n }),\n );\n};\n","import {\n ErrorResponseSchema,\n StoredProjectSourceManifestSchema,\n UploadProjectSourceManifestRequestSchema,\n UploadProjectSourceResponseSchema,\n projectFileId,\n} from \"@keystrokehq/shared\";\nimport {\n selectProjectArtifactForProject,\n updateProjectArtifactSourceManifest,\n} from \"@keystrokehq/platform-database\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n const parsed = UploadProjectSourceManifestRequestSchema.safeParse(\n await c.req.json().catch(() => null),\n );\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid source manifest\" }), 400);\n }\n\n const manifest = StoredProjectSourceManifestSchema.parse({\n files: parsed.data.files.map((file) => ({\n id: projectFileId(file.path),\n path: file.path,\n hash: file.hash,\n })),\n resources: parsed.data.resources,\n generatedAt: new Date().toISOString(),\n });\n\n await updateProjectArtifactSourceManifest({\n artifactId,\n projectId: project.id,\n sourceManifestJson: manifest,\n });\n\n return c.json(\n UploadProjectSourceResponseSchema.parse({ ok: true, fileCount: manifest.files.length }),\n 201,\n );\n};\n","import {\n ListProjectFilesResponseSchema,\n StoredProjectSourceManifestSchema,\n} from \"@keystrokehq/shared\";\nimport { selectActiveArtifactSourceManifestForProject } from \"@keystrokehq/platform-database\";\n\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const active = await selectActiveArtifactSourceManifestForProject(project.id);\n\n // No active deploy, or a deploy whose source upload never landed.\n if (!active || !active.sourceManifestJson) {\n return c.json(\n ListProjectFilesResponseSchema.parse({ artifactId: active?.artifactId ?? null, files: [] }),\n );\n }\n\n const manifest = StoredProjectSourceManifestSchema.parse(active.sourceManifestJson);\n\n return c.json(\n ListProjectFilesResponseSchema.parse({\n artifactId: active.artifactId,\n files: manifest.files.map((file) => ({ id: file.id, path: file.path, hash: file.hash })),\n resources: manifest.resources,\n }),\n );\n};\n","import { ErrorResponseSchema, StoredProjectSourceManifestSchema } from \"@keystrokehq/shared\";\nimport {\n createOrgStorageClient,\n selectOrganizationById,\n selectProjectArtifactForProject,\n} from \"@keystrokehq/platform-database\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport type { ProjectRouteHandler } from \"../../../../../../../types\";\n\nexport const handler: ProjectRouteHandler = async (c) => {\n const project = c.get(\"project\");\n const artifactId = c.req.param(\"artifactId\");\n if (!artifactId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact id is required\" }), 400);\n }\n\n const path = c.req.query(\"path\");\n if (!path) {\n return c.json(ErrorResponseSchema.parse({ error: \"File path is required\" }), 400);\n }\n\n const artifact = await selectProjectArtifactForProject(artifactId, project.id);\n if (!artifact || !artifact.sourceManifestJson) {\n return c.json(ErrorResponseSchema.parse({ error: \"Artifact not found\" }), 404);\n }\n\n // Resolve path -> hash via the manifest so we only ever serve files that\n // belong to this deploy (no arbitrary blob access).\n const manifest = StoredProjectSourceManifestSchema.parse(artifact.sourceManifestJson);\n const file = manifest.files.find((entry) => entry.path === path);\n if (!file) {\n return c.json(ErrorResponseSchema.parse({ error: \"File not found\" }), 404);\n }\n\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n if (!organization) {\n return c.json(ErrorResponseSchema.parse({ error: \"Organization not found\" }), 404);\n }\n\n const storage = createOrgStorageClient(organization);\n let bytes: Uint8Array;\n try {\n bytes = await storage.getObject(projectSourceBlobKey(project.id, file.hash));\n } catch {\n return c.json(ErrorResponseSchema.parse({ error: \"File contents not found\" }), 404);\n }\n\n // Browser/CDN caching (immutable hash-addressed responses) is intentionally\n // deferred to a follow-up PR.\n c.header(\"Content-Type\", \"text/plain; charset=utf-8\");\n return c.body(new TextDecoder().decode(bytes));\n};\n","import { ProjectReachabilityResponseSchema } from \"@keystrokehq/shared\";\nimport { pingProjectTarget } from \"@keystrokehq/hosting\";\n\nimport type { HostingPlugin } from \"@keystrokehq/hosting\";\nimport type { ProjectRouteHandler } from \"../../../../types\";\n\nexport function createProjectReachabilityHandler(hosting: HostingPlugin): ProjectRouteHandler {\n return async (c) => {\n const project = c.get(\"project\");\n\n if (project.status !== \"active\") {\n return c.json(ProjectReachabilityResponseSchema.parse({ reachable: false }));\n }\n\n const reachable = await pingProjectTarget(\n {\n baseUrl: project.baseUrl,\n runtimeId: project.runtimeId,\n },\n { plugin: hosting },\n );\n\n return c.json(ProjectReachabilityResponseSchema.parse({ reachable }));\n };\n}\n","import { ListOrganizationMembersResponseSchema, mapOrganizationMember } from \"@keystrokehq/shared\";\nimport { selectOrganizationMembers } from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const members = await selectOrganizationMembers(organizationId);\n\n return c.json(\n ListOrganizationMembersResponseSchema.parse({\n members: members.map(mapOrganizationMember),\n }),\n );\n};\n","import { resolveAuthEmailFrom } from \"@keystrokehq/auth\";\nimport { organizationInvitationAcceptPath } from \"@keystrokehq/shared\";\nimport { Resend } from \"resend\";\n\nexport type OrganizationInviteEmailPayload = {\n email: string;\n organizationName: string;\n invitationId: string;\n inviterName?: string;\n};\n\nfunction envValue(name: string): string | undefined {\n const value = process.env[name]?.trim();\n return value || undefined;\n}\n\nexport function resolveOrganizationInviteUrl(invitationId: string): string {\n const base = envValue(\"PUBLIC_WEB_URL\") ?? \"http://localhost:3000\";\n return `${base.replace(/\\/$/, \"\")}${organizationInvitationAcceptPath(invitationId)}`;\n}\n\nexport function isOrganizationInviteEmailConfigured(): boolean {\n return envValue(\"RESEND_API_KEY\") !== undefined;\n}\n\nfunction resolveResendApiKey(): string | undefined {\n return envValue(\"RESEND_API_KEY\");\n}\n\nfunction buildOrganizationInviteEmailHtml(payload: OrganizationInviteEmailPayload): string {\n const inviteUrl = resolveOrganizationInviteUrl(payload.invitationId);\n const escapedOrg = payload.organizationName.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\");\n const inviterLine = payload.inviterName\n ? `<p>${payload.inviterName.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\")} invited you to join <strong>${escapedOrg}</strong> on Keystroke.</p>`\n : `<p>You have been invited to join <strong>${escapedOrg}</strong> on Keystroke.</p>`;\n\n return `<!DOCTYPE html>\n<html>\n <body style=\"font-family: system-ui, sans-serif; line-height: 1.5; color: #111;\">\n ${inviterLine}\n <p><a href=\"${inviteUrl}\" style=\"display: inline-block; padding: 10px 16px; background: #111; color: #fff; text-decoration: none; border-radius: 8px;\">View invitation</a></p>\n <p style=\"color: #666; font-size: 13px;\">Sign in with this email address to accept the invitation.</p>\n </body>\n</html>`;\n}\n\nexport async function sendOrganizationInviteEmail(\n payload: OrganizationInviteEmailPayload,\n resend?: Resend,\n): Promise<boolean> {\n const apiKey = resolveResendApiKey();\n if (!apiKey) {\n console.warn(\"[platform] RESEND_API_KEY not set; organization invite email skipped\");\n return false;\n }\n\n const client = resend ?? new Resend(apiKey);\n const { error } = await client.emails.send({\n from: resolveAuthEmailFrom(),\n to: payload.email,\n subject: `Invitation to join ${payload.organizationName} on Keystroke`,\n html: buildOrganizationInviteEmailHtml(payload),\n });\n\n if (error) {\n console.warn(`[platform] Failed to send organization invite email: ${error.message}`);\n return false;\n }\n\n return true;\n}\n","import {\n ErrorResponseSchema,\n InviteOrganizationMembersRequestSchema,\n InviteOrganizationMembersResponseSchema,\n} from \"@keystrokehq/shared\";\nimport { inviteOrganizationMembers, selectUserById } from \"@keystrokehq/platform-database\";\n\nimport { sendOrganizationInviteEmail } from \"../../../../email/organization-invite-email\";\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const organization = c.get(\"organization\");\n const body = await c.req.json().catch(() => null);\n const parsed = InviteOrganizationMembersRequestSchema.safeParse(body);\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid invite request\" }), 400);\n }\n\n const results = await inviteOrganizationMembers({\n organizationId: organization.organizationId,\n invitedByUserId: user.id,\n emails: parsed.data.emails,\n role: parsed.data.role,\n });\n\n const inviter = await selectUserById(user.id);\n for (const result of results) {\n if (!result.invitationId || (result.status !== \"sent\" && result.status !== \"pending\")) {\n continue;\n }\n\n await sendOrganizationInviteEmail({\n email: result.email,\n organizationName: organization.organizationName,\n invitationId: result.invitationId,\n inviterName: inviter?.name,\n });\n }\n\n return c.json(InviteOrganizationMembersResponseSchema.parse({ results }));\n};\n","import {\n ErrorResponseSchema,\n mapOrganizationMember,\n UpdateOrganizationMemberRequestSchema,\n UpdateOrganizationMemberResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n CannotModifyOwnerError,\n OrganizationMemberNotFoundError,\n updateOrganizationMemberRole,\n} from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const userId = c.req.param(\"userId\");\n const body = await c.req.json().catch(() => null);\n const parsed = UpdateOrganizationMemberRequestSchema.safeParse(body);\n\n if (!userId) {\n return c.json(ErrorResponseSchema.parse({ error: \"User id is required\" }), 400);\n }\n\n if (!parsed.success) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invalid member update request\" }), 400);\n }\n\n try {\n const member = await updateOrganizationMemberRole(organizationId, userId, parsed.data.role);\n\n return c.json(\n UpdateOrganizationMemberResponseSchema.parse({\n member: mapOrganizationMember(member),\n }),\n );\n } catch (error) {\n if (\n error instanceof CannotModifyOwnerError ||\n error instanceof OrganizationMemberNotFoundError\n ) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 400);\n }\n\n throw error;\n }\n};\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport {\n CannotModifyOwnerError,\n OrganizationMemberNotFoundError,\n removeOrganizationMember,\n} from \"@keystrokehq/platform-database\";\n\nimport type { OrganizationRouteHandler } from \"../../../types\";\n\nexport const handler: OrganizationRouteHandler = async (c) => {\n const { organizationId } = c.get(\"organization\");\n const userId = c.req.param(\"userId\");\n\n if (!userId) {\n return c.json(ErrorResponseSchema.parse({ error: \"User id is required\" }), 400);\n }\n\n try {\n await removeOrganizationMember(organizationId, userId);\n return c.body(null, 204);\n } catch (error) {\n if (\n error instanceof CannotModifyOwnerError ||\n error instanceof OrganizationMemberNotFoundError\n ) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 400);\n }\n\n throw error;\n }\n};\n","import {\n ListOrganizationInvitationsResponseSchema,\n mapOrganizationInvitation,\n} from \"@keystrokehq/shared\";\nimport { selectPendingInvitationsForUser } from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitations = await selectPendingInvitationsForUser(user.id);\n\n return c.json(\n ListOrganizationInvitationsResponseSchema.parse({\n invitations: invitations.map(mapOrganizationInvitation),\n }),\n );\n};\n","import {\n AcceptOrganizationInvitationResponseSchema,\n ErrorResponseSchema,\n mapUserOrganization,\n} from \"@keystrokehq/shared\";\nimport {\n acceptInvitation,\n OrganizationInvitationExpiredError,\n OrganizationInvitationForbiddenError,\n OrganizationInvitationNotFoundError,\n} from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitationId = c.req.param(\"invitationId\");\n\n if (!invitationId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invitation id is required\" }), 400);\n }\n\n try {\n const membership = await acceptInvitation(invitationId, user.id);\n\n return c.json(\n AcceptOrganizationInvitationResponseSchema.parse({\n organization: mapUserOrganization(membership),\n }),\n );\n } catch (error) {\n if (error instanceof OrganizationInvitationNotFoundError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 404);\n }\n\n if (error instanceof OrganizationInvitationForbiddenError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 403);\n }\n\n if (error instanceof OrganizationInvitationExpiredError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 410);\n }\n\n throw error;\n }\n};\n","import {\n DeclineOrganizationInvitationResponseSchema,\n ErrorResponseSchema,\n} from \"@keystrokehq/shared\";\nimport {\n declineInvitation,\n OrganizationInvitationForbiddenError,\n OrganizationInvitationNotFoundError,\n} from \"@keystrokehq/platform-database\";\n\nimport type { AccountRouteHandler } from \"../../../../types\";\n\nexport const handler: AccountRouteHandler = async (c) => {\n const user = c.get(\"user\");\n const invitationId = c.req.param(\"invitationId\");\n\n if (!invitationId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Invitation id is required\" }), 400);\n }\n\n try {\n await declineInvitation(invitationId, user.id);\n\n return c.json(DeclineOrganizationInvitationResponseSchema.parse({ success: true }));\n } catch (error) {\n if (error instanceof OrganizationInvitationNotFoundError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 404);\n }\n\n if (error instanceof OrganizationInvitationForbiddenError) {\n return c.json(ErrorResponseSchema.parse({ error: error.message }), 403);\n }\n\n throw error;\n }\n};\n","import { createDefaultAuthJwtVerifier } from \"@keystrokehq/auth\";\nimport type { CreateOrganizationDependencies } from \"../../services/create-organization\";\nimport { Hono } from \"hono\";\n\nimport { requireOrgAdmin } from \"../../auth/require-org-admin\";\nimport { requireOrganization } from \"../../auth/require-organization\";\nimport { requireProject } from \"../../auth/require-project\";\nimport { requireSession } from \"../../auth/require-session\";\nimport { withOrganizationProjectDatabase } from \"../../middleware/with-organization-project-database\";\nimport type {\n OrganizationVariables,\n ProjectRouteVariables,\n SessionVariables,\n} from \"../../auth/types\";\nimport { handler as listOrganizations } from \"./organizations/GET\";\nimport { createOrganizationHandler } from \"./organizations/POST\";\nimport { handler as checkOrganizationSlugAvailability } from \"./organizations/slug-available/GET\";\nimport { handler as getActiveOrganization } from \"./organizations/active/GET\";\nimport { handler as setActiveOrganization } from \"./organizations/active/POST\";\nimport { handler as clearActiveOrganization } from \"./organizations/active/DELETE\";\nimport { handler as updateActiveOrganization } from \"./organizations/active/PATCH\";\nimport { handler as listAgents } from \"./agents/GET\";\nimport { handler as getAgent } from \"./agents/[agentId]/GET\";\nimport { handler as listWorkflows } from \"./workflows/GET\";\nimport { handler as getWorkflow } from \"./workflows/[workflowId]/GET\";\nimport { handler as listSkills } from \"./skills/GET\";\nimport { handler as getSkill } from \"./skills/[skillId]/GET\";\nimport { handler as listProjects } from \"./projects/GET\";\nimport { handler as createProject } from \"./projects/POST\";\nimport { handler as getProject } from \"./projects/[projectId]/GET\";\nimport { handler as createProjectArtifact } from \"./projects/[projectId]/artifacts/POST\";\nimport { handler as completeProjectArtifact } from \"./projects/[projectId]/artifacts/[artifactId]/complete/POST\";\nimport { handler as presignProjectArtifactSource } from \"./projects/[projectId]/artifacts/[artifactId]/source/presign/POST\";\nimport { handler as uploadProjectArtifactSourceManifest } from \"./projects/[projectId]/artifacts/[artifactId]/source/manifest/POST\";\nimport { handler as listProjectFiles } from \"./projects/[projectId]/files/GET\";\nimport { handler as getProjectFileContent } from \"./projects/[projectId]/artifacts/[artifactId]/files/content/GET\";\nimport { createProjectReachabilityHandler } from \"./projects/[projectId]/reachability/GET\";\nimport { handler as listOrganizationMembers } from \"./members/GET\";\nimport { handler as inviteOrganizationMembers } from \"./members/invitations/POST\";\nimport { handler as updateOrganizationMember } from \"./members/[userId]/PATCH\";\nimport { handler as removeOrganizationMember } from \"./members/[userId]/DELETE\";\nimport { handler as listOrganizationInvitations } from \"./invitations/GET\";\nimport { handler as acceptOrganizationInvitation } from \"./invitations/[invitationId]/accept/POST\";\nimport { handler as declineOrganizationInvitation } from \"./invitations/[invitationId]/decline/POST\";\n\nexport function mountAccountRoutes(\n options: CreateOrganizationDependencies,\n): Hono<{ Variables: SessionVariables }> {\n const account = new Hono<{ Variables: SessionVariables }>();\n const orgScoped = new Hono<{ Variables: OrganizationVariables }>();\n const projectScoped = new Hono<{ Variables: ProjectRouteVariables }>();\n const jwtVerifier = createDefaultAuthJwtVerifier();\n const protect = requireSession(jwtVerifier);\n\n account.use(\"/*\", protect);\n orgScoped.use(\"/*\", protect);\n orgScoped.use(\"/*\", requireOrganization());\n projectScoped.use(\"/*\", protect);\n projectScoped.use(\"/*\", requireOrganization());\n\n account.get(\"/organizations\", listOrganizations);\n account.get(\"/organizations/slug-available\", checkOrganizationSlugAvailability);\n account.post(\"/organizations\", createOrganizationHandler(options));\n account.get(\"/organizations/active\", getActiveOrganization);\n account.post(\"/organizations/active\", setActiveOrganization);\n account.patch(\"/organizations/active\", requireOrganization(), updateActiveOrganization);\n account.delete(\"/organizations/active\", clearActiveOrganization);\n\n account.get(\"/invitations\", listOrganizationInvitations);\n account.post(\"/invitations/:invitationId/accept\", acceptOrganizationInvitation);\n account.post(\"/invitations/:invitationId/decline\", declineOrganizationInvitation);\n\n const orgAdmin = requireOrgAdmin();\n\n orgScoped.get(\"/members\", listOrganizationMembers);\n orgScoped.post(\"/members/invitations\", orgAdmin, inviteOrganizationMembers);\n orgScoped.patch(\"/members/:userId\", orgAdmin, updateOrganizationMember);\n orgScoped.delete(\"/members/:userId\", orgAdmin, removeOrganizationMember);\n\n const withOrgDb = withOrganizationProjectDatabase();\n\n orgScoped.get(\"/agents\", withOrgDb, listAgents);\n orgScoped.get(\"/agents/:agentId\", withOrgDb, getAgent);\n orgScoped.get(\"/workflows\", withOrgDb, listWorkflows);\n orgScoped.get(\"/workflows/:workflowId\", withOrgDb, getWorkflow);\n orgScoped.get(\"/skills\", withOrgDb, listSkills);\n orgScoped.get(\"/skills/:skillId\", withOrgDb, getSkill);\n\n orgScoped.get(\"/projects\", listProjects);\n orgScoped.post(\"/projects\", createProject);\n\n projectScoped.get(\"/:projectId\", requireProject(), getProject);\n projectScoped.get(\n \"/:projectId/reachability\",\n requireProject(),\n createProjectReachabilityHandler(options.hosting),\n );\n projectScoped.get(\"/:projectId/files\", requireProject(), listProjectFiles);\n projectScoped.get(\n \"/:projectId/artifacts/:artifactId/files/content\",\n requireProject(),\n getProjectFileContent,\n );\n projectScoped.post(\"/:projectId/artifacts\", requireProject(), createProjectArtifact);\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/complete\",\n requireProject(),\n completeProjectArtifact,\n );\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/source/presign\",\n requireProject(),\n presignProjectArtifactSource,\n );\n projectScoped.post(\n \"/:projectId/artifacts/:artifactId/source/manifest\",\n requireProject(),\n uploadProjectArtifactSourceManifest,\n );\n\n orgScoped.route(\"/projects\", projectScoped);\n account.route(\"/\", orgScoped);\n\n return account;\n}\n","const LOCAL_PLATFORM_ORIGIN = \"http://localhost:3002\";\n\n/** `PUBLIC_PLATFORM_URL` origin; falls back to localhost outside production. */\nexport function publicPlatformOrigin(): string | undefined {\n const fromEnv = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n if (fromEnv) {\n return fromEnv;\n }\n return process.env.NODE_ENV === \"production\" ? undefined : LOCAL_PLATFORM_ORIGIN;\n}\n\n/** Webhook intake origin for a project: `<platform>/api/projects/<id>`. */\nexport function platformWebhookOrigin(\n projectId: string,\n platformOrigin: string | undefined,\n): string | undefined {\n if (!platformOrigin) {\n return undefined;\n }\n return `${platformOrigin}/api/projects/${encodeURIComponent(projectId)}`;\n}\n","import type { Context, MiddlewareHandler } from \"hono\";\n\n/** Worker auth from Bearer or x-api-key (Anthropic SDK uses the latter). */\nexport function readWorkerTokenFromRequest(c: Context): string | undefined {\n const authorization = c.req.header(\"authorization\");\n if (authorization?.startsWith(\"Bearer \")) {\n return authorization.slice(\"Bearer \".length).trim();\n }\n\n const apiKey = c.req.header(\"x-api-key\")?.trim();\n if (apiKey) {\n return apiKey;\n }\n\n return undefined;\n}\n\nexport function requireWorkerToken(expectedToken: string | undefined): MiddlewareHandler {\n return async (c, next) => {\n if (!expectedToken) {\n return c.json(\n { error: \"worker_auth_unconfigured\", message: \"Worker auth is not configured.\" },\n 503,\n );\n }\n\n const token = readWorkerTokenFromRequest(c);\n if (!token || token !== expectedToken) {\n return c.json({ error: \"unauthorized\", message: \"Invalid worker token.\" }, 401);\n }\n\n await next();\n };\n}\n","import { Hono } from \"hono\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport {\n ensureWebhookApiKeyForRoute,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n selectProjectById,\n} from \"@keystrokehq/platform-database\";\nimport { buildWebhookUrl, createCredentialMaterializeHandler } from \"@keystrokehq/server\";\nimport { z } from \"zod\";\n\nimport type { LlmProxyPlugin } from \"../../llm-proxy-plugin\";\nimport { platformWebhookOrigin, publicPlatformOrigin } from \"../../lib/platform-origin\";\nimport { requireWorkerToken } from \"../../middleware/require-worker-token\";\n\nconst EnsureWebhookRouteBodySchema = z.object({\n route: z.string().trim().min(1),\n attachmentKeys: z.array(z.string().trim().min(1)).min(1),\n});\n\nexport function mountInternalRoutes(\n workerToken: string | undefined,\n llmProxy?: LlmProxyPlugin,\n): Hono {\n const internal = new Hono();\n const protect = requireWorkerToken(workerToken);\n\n internal.use(\"/*\", protect);\n\n internal.post(\"/projects/:projectId/credentials/materialize\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n let response: Response | undefined;\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithProjectScope(project.id, () =>\n runWithTenantScope(project.organizationId, async () => {\n response = await createCredentialMaterializeHandler()(c);\n }),\n ),\n ),\n );\n\n return (\n response ??\n c.json({ error: \"internal_error\", message: \"Failed to materialize credential.\" }, 500)\n );\n });\n\n if (llmProxy) {\n internal.all(\"/projects/:projectId/llm/:path{.+}\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n let response: Response | undefined;\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithProjectScope(project.id, () =>\n runWithTenantScope(project.organizationId, async () => {\n response = await llmProxy.handler(c, {\n organizationId: project.organizationId,\n projectId: project.id,\n pathSuffix: `/${c.req.param(\"path\")}`,\n });\n }),\n ),\n ),\n );\n\n return (\n response ??\n c.json({ error: \"internal_error\", message: \"Failed to proxy LLM request.\" }, 500)\n );\n });\n }\n\n internal.post(\"/projects/:projectId/webhooks/ensure\", async (c) => {\n const projectId = c.req.param(\"projectId\");\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json({ error: \"Project not found\" }, 404);\n }\n\n const parsed = EnsureWebhookRouteBodySchema.safeParse(await c.req.json().catch(() => null));\n if (!parsed.success) {\n return c.json({ error: \"Invalid request body\", details: parsed.error.flatten() }, 400);\n }\n\n const origin = platformWebhookOrigin(projectId, publicPlatformOrigin());\n if (!origin) {\n return c.json({ error: \"PUBLIC_PLATFORM_URL is not configured\" }, 500);\n }\n\n try {\n const token = await ensureWebhookApiKeyForRoute(\n projectId,\n parsed.data.route,\n parsed.data.attachmentKeys,\n );\n\n return c.json({\n webhookUrl: buildWebhookUrl(origin, parsed.data.route, token),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Failed to ensure webhook API key.\";\n return c.json({ error: \"webhook_provisioning_failed\", message }, 500);\n }\n });\n\n return internal;\n}\n","import { runWithOrganizationScope, selectOrganizationById } from \"@keystrokehq/platform-database\";\nimport { runWithTenantScope } from \"@keystrokehq/database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { OrganizationVariables } from \"../auth/types\";\n\n/** Bind platform credential partition for org-scoped integration routes. */\nexport function withOrganizationDatabase(): MiddlewareHandler<{\n Variables: OrganizationVariables;\n}> {\n return async (c, next) => {\n const { organizationId } = c.get(\"organization\");\n const organization = await selectOrganizationById(organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n await runWithOrganizationScope(organizationId, () =>\n runWithTenantScope(organizationId, () => next()),\n );\n };\n}\n","import type { OrganizationRow } from \"@keystrokehq/platform-database\";\nimport { resolveOrgDatabaseUrl } from \"@keystrokehq/platform-database\";\nimport {\n createScheduler,\n resolveSchedulerPluginFromEnv,\n type Scheduler,\n} from \"@keystrokehq/scheduler\";\n\nconst schedulerByKey = new Map<string, Promise<Scheduler>>();\n\nexport async function getProjectScheduler(\n organization: OrganizationRow,\n projectId: string,\n): Promise<Scheduler> {\n const url = resolveOrgDatabaseUrl(organization);\n // Projects in one org share the same org Postgres URL but get their own\n // per-project queue, so the scheduler must be cached per (url, projectId).\n const key = `${url}::${projectId}`;\n let pending = schedulerByKey.get(key);\n if (!pending) {\n // The producer's queue backend is selected from the same env the platform\n // forwards to the container worker (KEYSTROKE_SCHEDULER_MODULE), so producer\n // and consumer never diverge. Falls back to the dialect default when unset.\n pending = (async () => {\n const plugin = await resolveSchedulerPluginFromEnv(process.env);\n return createScheduler({\n url,\n scope: \"project\",\n projectId,\n organizationId: organization.id,\n plugin,\n });\n })();\n schedulerByKey.set(key, pending);\n }\n\n return pending;\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectActiveArtifactManifestForProject,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport type { StoredRouteManifest } from \"@keystrokehq/server\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { ProjectRuntimeVariables } from \"../auth/types\";\nimport { getProjectScheduler } from \"../lib/project-scheduler\";\n\nexport function withProjectRuntime(): MiddlewareHandler<{ Variables: ProjectRuntimeVariables }> {\n return async (c, next) => {\n const project = c.get(\"project\");\n const organization = await selectOrganizationById(project.organizationId);\n\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () =>\n runWithProjectScope(project.id, async () =>\n runWithTenantScope(project.organizationId, async () => {\n const manifestRaw = await selectActiveArtifactManifestForProject(project.id);\n if (!manifestRaw || typeof manifestRaw !== \"object\") {\n return c.json({ error: \"Project runtime manifest is not available\" }, 503);\n }\n\n const scheduler = await getProjectScheduler(organization, project.id);\n c.set(\"jobQueue\", scheduler);\n c.set(\"scheduler\", scheduler);\n c.set(\"manifest\", manifestRaw as StoredRouteManifest);\n await next();\n }),\n ),\n ),\n );\n };\n}\n","import { prepareAgentSession } from \"@keystrokehq/agent\";\nimport { selectAgentByKey } from \"@keystrokehq/database\";\nimport type { JobQueue } from \"@keystrokehq/scheduler\";\nimport { PromptInputSchema, validationErrorResponse } from \"@keystrokehq/shared\";\nimport type { Context } from \"hono\";\nimport { ZodError } from \"zod\";\n\nimport { enqueueAgentPrompt } from \"@keystrokehq/server\";\n\nexport function createPlatformAgentPromptHandler(agentKey: string, jobQueue: JobQueue) {\n return async (c: Context): Promise<Response> => {\n const contentType = c.req.header(\"content-type\") ?? \"\";\n let payload: unknown = {};\n\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n } else if (contentType.includes(\"text/plain\")) {\n payload = { message: await c.req.text() };\n }\n\n try {\n const input = PromptInputSchema.parse(payload);\n const agent = await selectAgentByKey(agentKey);\n if (!agent) {\n return c.json({ error: \"Agent not found\" }, 404);\n }\n\n const { sessionId } = await prepareAgentSession(agent.id, input.sessionId);\n const runId = crypto.randomUUID();\n\n await enqueueAgentPrompt({\n agentId: agent.id,\n runId,\n sessionId,\n message: input.message,\n context: input.context,\n thinkingLevel: input.thinkingLevel,\n jobQueue,\n });\n\n return c.json({ sessionId, runId }, 202);\n } catch (error) {\n if (error instanceof ZodError) {\n return c.json(validationErrorResponse(error, \"Invalid agent prompt input\"), 400);\n }\n throw error;\n }\n };\n}\n","import type { JobQueue } from \"@keystrokehq/scheduler\";\nimport { validationErrorResponse } from \"@keystrokehq/shared\";\nimport {\n enqueueWorkflowRunByKey,\n findWorkflowManifestEntry,\n type StoredRouteManifest,\n} from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\nimport { z, ZodError } from \"zod\";\n\nfunction parseInputFromManifest(\n manifest: StoredRouteManifest,\n workflowKey: string,\n input: unknown,\n): unknown {\n const entry = findWorkflowManifestEntry(manifest, workflowKey);\n if (!entry) {\n throw new Error(`Workflow not found: ${workflowKey}`);\n }\n\n if (typeof z.fromJSONSchema === \"function\") {\n const schema = z.fromJSONSchema(entry.requestSchema as Parameters<typeof z.fromJSONSchema>[0]);\n return schema.parse(input ?? {});\n }\n\n return z.record(z.string(), z.unknown()).parse(input ?? {});\n}\n\nexport function createPlatformWorkflowRunHandler(\n workflowKey: string,\n manifest: StoredRouteManifest,\n jobQueue: JobQueue,\n) {\n return async (c: Context): Promise<Response> => {\n const contentType = c.req.header(\"content-type\") ?? \"\";\n let payload: unknown = {};\n\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n }\n\n try {\n const runId = await enqueueWorkflowRunByKey({\n workflowKey,\n input: payload,\n jobQueue,\n parseInput: (value) => parseInputFromManifest(manifest, workflowKey, value),\n });\n\n return c.json({ runId }, 202);\n } catch (error) {\n if (error instanceof ZodError) {\n return c.json(validationErrorResponse(error, \"Invalid workflow input\"), 400);\n }\n\n if (error instanceof Error && error.message.startsWith(\"Workflow not found:\")) {\n return c.json({ error: error.message }, 404);\n }\n\n throw error;\n }\n };\n}\n","import { createDefaultAuthJwtVerifier, resolveRequestAuth } from \"@keystrokehq/auth\";\nimport {\n agentSessionDetailHandler,\n agentSessionsListHandler,\n connectProvidersFromManifest,\n createAgentsListHandler,\n createGatewayAttachmentHandlers,\n createTriggerGetHandler,\n createTriggersListHandler,\n createLocalCredentialBackend,\n createOAuthTokenAdapterFromBackend,\n createOAuthTokenRefreshRegistry,\n listKnownIntegrationKeys,\n mountCredentialInstanceRoutes,\n mountProjectIntegrations,\n mountWorkflowCredentialRoutes,\n triggerRunDetailHandler,\n triggerRunsListHandler,\n workflowRunDetailHandler,\n workflowRunsListHandler,\n type StoredRouteManifest,\n} from \"@keystrokehq/server\";\nimport {\n listWebhookApiKeysForProject,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithTenantScope,\n selectActiveWorkflowByKey,\n selectAgentByKey,\n getProjectScopeId,\n} from \"@keystrokehq/database\";\nimport type { TriggerListItem } from \"@keystrokehq/shared\";\nimport { type Context, Hono } from \"hono\";\n\nimport { platformWebhookOrigin } from \"../../lib/platform-origin\";\nimport { requireOrganization } from \"../../auth/require-organization\";\nimport { requireProject } from \"../../auth/require-project\";\nimport { requireSession } from \"../../auth/require-session\";\nimport type {\n OrganizationVariables,\n ProjectRuntimeVariables,\n SessionVariables,\n} from \"../../auth/types\";\nimport { withOrganizationDatabase } from \"../../middleware/with-organization-database\";\nimport { withOrganizationProjectDatabase } from \"../../middleware/with-organization-project-database\";\nimport { withProjectRuntime } from \"../../middleware/with-project-runtime\";\nimport { createPlatformAgentPromptHandler } from \"./handlers/agent-prompt\";\nimport { createPlatformWorkflowRunHandler } from \"./handlers/workflow-run\";\n\nfunction manifestAgentEntries(manifest: StoredRouteManifest) {\n return manifest.entries\n .filter((entry) => entry.kind === \"agent\")\n .map((entry) => ({\n key: entry.path.replace(/^\\/agents\\//, \"\"),\n route: entry.path,\n }));\n}\n\nasync function webhookTokensByProjectId(projectId: string): Promise<Map<string, string>> {\n const keys = await listWebhookApiKeysForProject(projectId);\n return new Map(keys.map((key) => [key.route, key.token]));\n}\n\nfunction platformApiOrigin(platformOrigin: string | undefined): string | undefined {\n if (!platformOrigin) {\n return undefined;\n }\n return `${platformOrigin}/api`;\n}\n\nfunction agentKeysFromManifest(manifest: StoredRouteManifest): Set<string> {\n const keys = new Set<string>();\n for (const entry of manifest.entries) {\n if (entry.kind !== \"agent\") {\n continue;\n }\n keys.add(entry.path.replace(/^\\/agents\\//, \"\"));\n }\n return keys;\n}\n\nfunction targetFromAttachmentId(\n manifest: StoredRouteManifest,\n attachmentId: string,\n): Pick<TriggerListItem, \"targetKind\" | \"workflowKey\" | \"agentKey\"> {\n const targetKey = attachmentId.split(\":\")[1] ?? attachmentId;\n if (agentKeysFromManifest(manifest).has(targetKey)) {\n return { targetKind: \"agent\", agentKey: targetKey };\n }\n return { targetKind: \"workflow\", workflowKey: targetKey };\n}\n\nfunction manifestTriggerEntries(manifest: StoredRouteManifest): TriggerListItem[] {\n const entries: TriggerListItem[] = [];\n\n for (const entry of manifest.entries) {\n if (entry.kind === \"trigger-webhook\") {\n for (const attachmentId of entry.attachmentIds) {\n entries.push({\n key: attachmentId,\n type: \"webhook\",\n route: entry.path,\n ...targetFromAttachmentId(manifest, attachmentId),\n });\n }\n continue;\n }\n\n if (entry.kind === \"trigger-poll\") {\n entries.push({\n key: entry.attachmentId,\n type: \"poll\",\n route: entry.path,\n ...targetFromAttachmentId(manifest, entry.attachmentId),\n });\n continue;\n }\n\n if (entry.kind === \"cron-schedule\") {\n entries.push({\n key: entry.attachmentId,\n type: \"cron\",\n ...targetFromAttachmentId(manifest, entry.attachmentId),\n });\n }\n }\n\n return entries;\n}\n\nfunction createIntegrationServices(platformOrigin: string | undefined) {\n const tokenRefresh = createOAuthTokenRefreshRegistry();\n const credentialBackend = createLocalCredentialBackend({ tokenRefresh });\n const oauthAdapter = createOAuthTokenAdapterFromBackend(credentialBackend);\n const oauthRedirectOrigin = platformApiOrigin(platformOrigin);\n const jwtVerifier = createDefaultAuthJwtVerifier();\n\n return {\n tokenRefresh,\n oauthAdapter,\n jwtVerifier,\n services: {\n agents: { byKey: new Map(), idByKey: new Map() },\n oauthAdapter,\n tokenRefresh,\n runPrompt: () => ({ oauthAdapter }),\n getAuthenticatedUser: async (headers: Headers) => {\n const result = await resolveRequestAuth(jwtVerifier, headers);\n return result ? { id: result.user.id } : null;\n },\n resolvePublicServerUrl: () => oauthRedirectOrigin,\n resolveStateContext: (c: Context) => {\n const user = c.get(\"user\") as { id: string } | undefined;\n const organization = c.get(\"organization\") as { organizationId: string } | undefined;\n return { userId: user?.id, orgId: organization?.organizationId };\n },\n },\n };\n}\n\n/**\n * Public (unauthenticated) OAuth callback routes.\n *\n * OAuth providers redirect a bare browser here with `code` + signed `state`; there is no session,\n * Bearer token, or active-org cookie. We therefore mount the callback outside the session/org\n * middleware and re-establish the org persistence scope from the verified state's `orgId`\n * (`runInStateContext`). On completion redirects the browser to `PUBLIC_WEB_URL`.\n */\nexport async function mountOAuthCallbacks(): Promise<Hono> {\n const platformOrigin = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n const { tokenRefresh, services: baseServices } = createIntegrationServices(platformOrigin);\n\n const callbacks = new Hono();\n const manifest: Extract<StoredRouteManifest[\"entries\"][number], { kind: \"plugin\" }>[] = [];\n\n await mountProjectIntegrations({\n app: callbacks,\n integrationKeys: listKnownIntegrationKeys(),\n manifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeGateway: false,\n oauthMountMode: \"callback\",\n runInStateContext: async (ctx, fn) => {\n const orgId = ctx.orgId;\n if (!orgId) {\n throw new Error(\"OAuth callback state is missing an organization id\");\n }\n const organization = await selectOrganizationById(orgId);\n if (!organization) {\n throw new Error(`Organization ${orgId} not found for OAuth callback`);\n }\n const url = resolveOrgDatabaseUrl(organization);\n return runWithOrganizationScope(orgId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n runWithTenantScope(orgId, fn),\n ),\n );\n },\n },\n });\n\n return callbacks;\n}\n\nexport async function mountRuntimeRoutes(): Promise<Hono<{ Variables: SessionVariables }>> {\n const api = new Hono<{ Variables: ProjectRuntimeVariables }>();\n const platformOrigin = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/$/, \"\");\n const {\n tokenRefresh,\n jwtVerifier,\n services: baseServices,\n } = createIntegrationServices(platformOrigin);\n const protect = requireSession(jwtVerifier);\n\n api.use(\"/*\", protect);\n api.use(\"/*\", requireOrganization());\n\n const org = new Hono<{ Variables: OrganizationVariables }>();\n org.use(\"/*\", withOrganizationDatabase());\n org.use(\"/*\", withOrganizationProjectDatabase());\n\n const orgIntegrationManifest: Extract<\n StoredRouteManifest[\"entries\"][number],\n { kind: \"plugin\" }\n >[] = [];\n\n // Org mount handles OAuth *initiation* only (start + authorize-url), behind JWT + org auth.\n // The unauthenticated callback is mounted separately by `mountOAuthCallbacks`.\n await mountProjectIntegrations({\n app: org as unknown as import(\"hono\").Hono,\n integrationKeys: listKnownIntegrationKeys(),\n manifest: orgIntegrationManifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeGateway: false,\n oauthMountMode: \"initiate\",\n },\n });\n\n org.get(\"/health\", (c) => c.json({ ok: true }));\n org.get(\"/connect/providers\", (c) =>\n c.json({ providers: connectProvidersFromManifest(orgIntegrationManifest as never) }),\n );\n mountCredentialInstanceRoutes(org, null);\n\n api.route(\"/\", org);\n\n const project = new Hono<{ Variables: ProjectRuntimeVariables }>();\n project.use(\"/*\", requireProject());\n project.use(\"/*\", withProjectRuntime());\n\n const projectIntegrationManifest: Extract<\n StoredRouteManifest[\"entries\"][number],\n { kind: \"plugin\" }\n >[] = [];\n\n project.get(\"/health\", (c) => c.json({ ok: true }));\n\n project.get(\"/agents\", (c) => {\n const manifest = c.get(\"manifest\");\n return createAgentsListHandler(manifestAgentEntries(manifest))(c);\n });\n\n const slackGatewayAttachmentHandlers = (c: Context) =>\n createGatewayAttachmentHandlers({\n agentKeys: agentKeysFromManifest(c.get(\"manifest\")),\n });\n\n project.get(\"/gateways/slack/attachments\", (c) =>\n slackGatewayAttachmentHandlers(c).listSlackAttachments(c),\n );\n project.get(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).getSlackAttachment(c),\n );\n project.put(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).putSlackAttachment(c),\n );\n project.delete(\"/gateways/slack/attachments/:channelId\", (c) =>\n slackGatewayAttachmentHandlers(c).deleteSlackAttachment(c),\n );\n\n project.get(\"/agents/:key/sessions\", (c) => agentSessionsListHandler(c.req.param(\"key\"))(c));\n project.get(\"/agents/:key/sessions/:sessionId\", (c) =>\n agentSessionDetailHandler(c.req.param(\"key\"))(c),\n );\n\n project.post(\"/agents/:key\", async (c) => {\n const key = c.req.param(\"key\");\n const agent = await selectAgentByKey(key);\n if (!agent) {\n return c.json({ error: \"Agent not found\" }, 404);\n }\n\n return createPlatformAgentPromptHandler(key, c.get(\"jobQueue\"))(c);\n });\n\n project.post(\"/workflows/:key\", async (c) => {\n const key = c.req.param(\"key\");\n const workflow = await selectActiveWorkflowByKey(key);\n if (!workflow) {\n return c.json({ error: \"Workflow not found\" }, 404);\n }\n\n return createPlatformWorkflowRunHandler(key, c.get(\"manifest\"), c.get(\"jobQueue\"))(c);\n });\n\n project.get(\"/workflows/:key/runs\", (c) => workflowRunsListHandler(c.req.param(\"key\"))(c));\n project.get(\"/workflows/:key/runs/:runId\", (c) =>\n workflowRunDetailHandler(c.req.param(\"key\"))(c),\n );\n\n project.get(\"/triggers\", async (c) => {\n const manifest = c.get(\"manifest\");\n const projectId = c.get(\"project\").id;\n const tokens = await webhookTokensByProjectId(projectId);\n return createTriggersListHandler({\n entries: manifestTriggerEntries(manifest),\n webhookTokensByRoute: tokens,\n resolveOrigin: () => platformWebhookOrigin(projectId, platformOrigin) ?? \"\",\n })(c);\n });\n\n project.get(\"/triggers/:id\", async (c) => {\n const manifest = c.get(\"manifest\");\n const projectId = c.get(\"project\").id;\n const tokens = await webhookTokensByProjectId(projectId);\n return createTriggerGetHandler({\n entries: manifestTriggerEntries(manifest),\n webhookTokensByRoute: tokens,\n resolveOrigin: () => platformWebhookOrigin(projectId, platformOrigin) ?? \"\",\n })(c);\n });\n\n project.get(\"/triggers/:id/runs\", (c) => triggerRunsListHandler(c.req.param(\"id\"))(c));\n project.get(\"/triggers/:id/runs/:runId\", (c) => triggerRunDetailHandler(c.req.param(\"id\"))(c));\n\n project.get(\"/openapi.json\", (c) => {\n const manifest = c.get(\"manifest\");\n return c.json({\n openapi: \"3.0.0\",\n info: { title: \"Keystroke Project API\", version: \"1.0.0\" },\n paths: Object.fromEntries(\n manifest.entries\n .filter((entry) => \"method\" in entry && \"path\" in entry)\n .map((entry) => [entry.path, {}]),\n ),\n \"x-keystroke\": { manifest },\n });\n });\n\n mountWorkflowCredentialRoutes(project, null);\n\n await mountProjectIntegrations({\n app: project as unknown as import(\"hono\").Hono,\n integrationKeys: [\"slack\"],\n manifest: projectIntegrationManifest,\n mountedRoutes: new Set<string>(),\n tokenRefresh,\n services: {\n ...baseServices,\n includeOAuth: false,\n includeGateway: false,\n resolvePublicServerUrl: () => {\n const apiOrigin = platformApiOrigin(platformOrigin);\n return apiOrigin ? `${apiOrigin}/projects/${getProjectScopeId()}` : undefined;\n },\n },\n });\n\n api.route(\"/projects/:projectId\", project);\n\n return api as unknown as Hono<{ Variables: SessionVariables }>;\n}\n","import {\n createPgConnection,\n getOrCreateGatewayThreadSession,\n runWithProjectScope,\n} from \"@keystrokehq/database\";\nimport { resolveOrgDatabaseUrl, type OrganizationRow } from \"@keystrokehq/platform-database\";\nimport { enqueueAgentPrompt } from \"@keystrokehq/server\";\nimport { createSlackGatewayIngress, type SlackGatewayRuntime } from \"@keystrokehq/slack\";\n\nimport { getProjectScheduler } from \"./project-scheduler\";\n\ntype CachedIngress = {\n signingSecret: string;\n pending: Promise<SlackGatewayRuntime>;\n};\n\nconst ingressByOrg = new Map<string, CachedIngress>();\n\nexport function getOrgSlackIngressRuntime(\n organization: OrganizationRow,\n signingSecret: string,\n): Promise<SlackGatewayRuntime> {\n const cached = ingressByOrg.get(organization.id);\n if (cached && cached.signingSecret === signingSecret) {\n return cached.pending;\n }\n\n let pending!: Promise<SlackGatewayRuntime>;\n pending = buildOrgSlackIngressRuntime(organization, signingSecret).catch((error) => {\n const current = ingressByOrg.get(organization.id);\n if (current?.pending === pending) {\n ingressByOrg.delete(organization.id);\n }\n throw error;\n });\n\n ingressByOrg.set(organization.id, { signingSecret, pending });\n return pending;\n}\n\nfunction buildOrgSlackIngressRuntime(\n organization: OrganizationRow,\n signingSecret: string,\n): Promise<SlackGatewayRuntime> {\n // Dedicated long-lived connection for chat-adapter state (dedupe + subscriptions). The\n // per-request org DB handle is closed after each request, so a cached runtime needs its own.\n const url = resolveOrgDatabaseUrl(organization);\n const handle = createPgConnection({ url, searchPath: organization.dbSchema });\n const pgPool = handle.dialect === \"postgres\" ? handle.pool : undefined;\n\n return createSlackGatewayIngress({\n signingSecret,\n organizationSlug: organization.slug,\n pgPool,\n dispatch: async ({ attachment, threadId, channelId, teamId, message }) => {\n const projectId = attachment.projectId;\n if (!projectId) {\n return;\n }\n\n await runWithProjectScope(projectId, async () => {\n const sessionId = await getOrCreateGatewayThreadSession({\n threadId,\n agentId: attachment.agentId,\n attachmentId: attachment.attachmentId,\n });\n\n const scheduler = await getProjectScheduler(organization, projectId);\n\n await enqueueAgentPrompt({\n agentId: attachment.agentId,\n runId: crypto.randomUUID(),\n sessionId,\n message,\n jobQueue: scheduler,\n gatewayReply: {\n platform: \"slack\",\n threadId,\n channelId,\n teamId,\n agentName: attachment.agentKey,\n attachmentId: attachment.attachmentId,\n attachmentKey: attachment.key,\n },\n });\n });\n },\n });\n}\n","import {\n getActiveOrgGatewayAttachmentByTeamAndChannel,\n runWithProjectDatabase,\n} from \"@keystrokehq/database\";\nimport {\n listOAuthInstallationsByAppKeyAndExternalId,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n type ResolvedOAuthInstallation,\n} from \"@keystrokehq/platform-database\";\n\nexport type SlackOrgRoutingResult =\n | { kind: \"none\" }\n | { kind: \"single\"; installation: ResolvedOAuthInstallation }\n | { kind: \"bound\"; installation: ResolvedOAuthInstallation }\n | { kind: \"unbound\"; installations: ResolvedOAuthInstallation[] }\n | { kind: \"conflict\"; organizationIds: string[] };\n\nexport async function routeSlackEventToOrganization(options: {\n appKey: string;\n teamId: string;\n channelId?: string;\n}): Promise<SlackOrgRoutingResult> {\n const installations = await listOAuthInstallationsByAppKeyAndExternalId(\n options.appKey,\n options.teamId,\n );\n\n if (installations.length === 0) {\n return { kind: \"none\" };\n }\n\n if (installations.length === 1) {\n return { kind: \"single\", installation: installations[0]! };\n }\n\n if (!options.channelId) {\n return { kind: \"none\" };\n }\n\n const boundOrgIds: string[] = [];\n\n for (const installation of installations) {\n const organization = await selectOrganizationById(installation.organizationId);\n if (!organization) {\n continue;\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n const binding = await runWithOrganizationScope(organization.id, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, () =>\n getActiveOrgGatewayAttachmentByTeamAndChannel(\"slack\", options.teamId, options.channelId!),\n ),\n );\n\n if (binding) {\n boundOrgIds.push(organization.id);\n }\n }\n\n if (boundOrgIds.length === 1) {\n const installation = installations.find((entry) => entry.organizationId === boundOrgIds[0]!);\n if (installation) {\n return { kind: \"bound\", installation };\n }\n }\n\n if (boundOrgIds.length > 1) {\n return { kind: \"conflict\", organizationIds: boundOrgIds };\n }\n\n return { kind: \"unbound\", installations };\n}\n","import { runWithProjectDatabase } from \"@keystrokehq/database\";\nimport {\n buildSlackGatewaySetupUrl,\n channelIdFromSlackEventPayload,\n isSlackMentionEventPayload,\n postSlackChannelMessage,\n slackSignatureHeaders,\n teamIdFromSlackEventPayload,\n verifySlackSignature,\n} from \"@keystrokehq/slack\";\nimport {\n getGlobalOAuthAccessTokenByAppKeyAndExternalId,\n getOAuthAppSigningSecretByKeyGlobal,\n listOAuthInstallationsByAppKeyAndExternalId,\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport type { Context } from \"hono\";\n\nimport { getOrgSlackIngressRuntime } from \"../../lib/slack-gateway-ingress\";\nimport { routeSlackEventToOrganization } from \"../../lib/slack-gateway-routing\";\n\nconst SLACK_OAUTH_APP_KEY = \"slack\";\n\nfunction slackNotConfiguredResponse() {\n return {\n error: \"slack_not_configured\" as const,\n message: \"Slack OAuth is not configured. Install via the UI or seed oauth_apps.\",\n };\n}\n\nasync function postMultiOrgUnboundMessage(options: {\n teamId: string;\n channelId: string;\n token: string;\n}): Promise<void> {\n const webOrigin = process.env.PUBLIC_WEB_URL?.replace(/\\/$/, \"\");\n const installations = await listOAuthInstallationsByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n options.teamId,\n );\n const links: string[] = [];\n\n for (const installation of installations) {\n const organization = await selectOrganizationById(installation.organizationId);\n if (!organization) {\n continue;\n }\n\n const url = buildSlackGatewaySetupUrl(\n webOrigin,\n organization.slug,\n options.channelId,\n options.teamId,\n );\n if (url) {\n links.push(`<${url}|${organization.name ?? organization.slug}>`);\n }\n }\n\n if (links.length === 0) {\n return;\n }\n\n const text = `No agent is configured for this channel. Choose an agent: ${links.join(\" · \")}`;\n await postSlackChannelMessage({\n token: options.token,\n channelId: options.channelId,\n text,\n });\n}\n\nasync function handleSlackEventForOrganization(options: {\n organizationId: string;\n signingSecret: string;\n body: string;\n request: Request;\n teamId: string;\n}): Promise<Response> {\n const organization = await selectOrganizationById(options.organizationId);\n if (!organization) {\n console.warn(\"[gateway:slack] organization missing for installation\", {\n organizationId: options.organizationId,\n teamId: options.teamId,\n });\n return new Response(JSON.stringify({ ok: true, skipped: true }), {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n });\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n return runWithOrganizationScope(organization.id, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () => {\n const runtime = await getOrgSlackIngressRuntime(organization, options.signingSecret);\n\n const pending: Promise<unknown>[] = [];\n const verifyRequest = new Request(options.request.url, {\n method: \"POST\",\n headers: options.request.headers,\n body: options.body,\n });\n\n const response = await runtime.webhookHandler(verifyRequest, {\n waitUntil: (promise: Promise<unknown>) => pending.push(promise),\n });\n\n const results = await Promise.allSettled(pending);\n for (const result of results) {\n if (result.status === \"rejected\") {\n console.error(\"[gateway:slack] handler failed\", {\n teamId: options.teamId,\n organizationId: options.organizationId,\n error: result.reason,\n });\n }\n }\n\n return response;\n }),\n );\n}\n\n/**\n * Single shared Slack gateway webhook for all orgs/projects.\n */\nexport function createPlatformSlackGatewayHandler() {\n return async (c: Context): Promise<Response> => {\n const body = await c.req.text();\n const { timestamp, signature } = slackSignatureHeaders(c.req.raw.headers);\n\n let payload: unknown;\n try {\n payload = JSON.parse(body);\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n if (\n payload &&\n typeof payload === \"object\" &&\n (payload as Record<string, unknown>).type === \"url_verification\"\n ) {\n const challenge = (payload as Record<string, unknown>).challenge;\n if (typeof challenge !== \"string\") {\n return c.json({ error: \"Missing url_verification challenge\" }, 400);\n }\n return c.json({ challenge });\n }\n\n const signingSecret = await getOAuthAppSigningSecretByKeyGlobal(SLACK_OAUTH_APP_KEY);\n if (!signingSecret) {\n return c.json(slackNotConfiguredResponse(), 503);\n }\n\n if (\n !verifySlackSignature({\n signingSecret,\n rawBody: body,\n timestamp,\n signature,\n })\n ) {\n return c.json({ error: \"Invalid signature\" }, 401);\n }\n\n const teamId = teamIdFromSlackEventPayload(payload);\n const channelId = channelIdFromSlackEventPayload(payload);\n\n console.info(\"[gateway:slack] webhook received\", {\n payloadType: (payload as Record<string, unknown>).type,\n eventType: (payload as { event?: { type?: string } }).event?.type,\n teamId,\n channelId,\n });\n\n if (!teamId) {\n console.warn(\"[gateway:slack] skipped: missing team_id\");\n return c.json({ ok: true, skipped: true });\n }\n\n const routing = await routeSlackEventToOrganization({\n appKey: SLACK_OAUTH_APP_KEY,\n teamId,\n channelId,\n });\n\n if (routing.kind === \"none\") {\n console.warn(\"[gateway:slack] skipped: no installation for team\", { teamId });\n return c.json({ ok: true, skipped: true });\n }\n\n if (routing.kind === \"conflict\") {\n console.error(\"[gateway:slack] channel bound in multiple organizations\", {\n teamId,\n channelId,\n organizationIds: routing.organizationIds,\n });\n\n const token = await getGlobalOAuthAccessTokenByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n teamId,\n );\n if (token && channelId) {\n await postSlackChannelMessage({\n token,\n channelId,\n text: \"This channel is connected to more than one Keystroke organization. Remove one of the bindings to continue.\",\n });\n }\n\n return c.json({ ok: true, skipped: true });\n }\n\n if (routing.kind === \"unbound\") {\n if (channelId && isSlackMentionEventPayload(payload)) {\n const token = await getGlobalOAuthAccessTokenByAppKeyAndExternalId(\n SLACK_OAUTH_APP_KEY,\n teamId,\n );\n if (token) {\n await postMultiOrgUnboundMessage({ teamId, channelId, token });\n } else {\n console.warn(\"[gateway:slack] cannot post unbound links: missing bot token\", {\n teamId,\n });\n }\n } else {\n console.warn(\"[gateway:slack] skipped: multiple orgs, no channel binding\", {\n teamId,\n channelId,\n });\n }\n return c.json({ ok: true, skipped: true });\n }\n\n const installation =\n routing.kind === \"single\" || routing.kind === \"bound\" ? routing.installation : undefined;\n\n if (!installation) {\n return c.json({ ok: true, skipped: true });\n }\n\n return handleSlackEventForOrganization({\n organizationId: installation.organizationId,\n signingSecret,\n body,\n request: c.req.raw,\n teamId,\n });\n };\n}\n","import { Hono } from \"hono\";\n\nimport { createPlatformSlackGatewayHandler } from \"./slack-webhook\";\n\nconst SLACK_GATEWAY_PATH = \"/gateways/slack\";\n\nexport function mountSlackGatewayRoutes(): Hono {\n const gateways = new Hono();\n gateways.post(SLACK_GATEWAY_PATH, createPlatformSlackGatewayHandler());\n return gateways;\n}\n","import { ErrorResponseSchema } from \"@keystrokehq/shared\";\nimport { selectProjectById } from \"@keystrokehq/platform-database\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../auth/types\";\n\nexport function resolvePublicProject(): MiddlewareHandler<{\n Variables: PublicProjectRuntimeVariables;\n}> {\n return async (c, next) => {\n const projectId = c.req.param(\"projectId\")?.trim();\n if (!projectId) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project id is required\" }), 400);\n }\n\n const project = await selectProjectById(projectId);\n if (!project) {\n return c.json(ErrorResponseSchema.parse({ error: \"Project not found\" }), 404);\n }\n\n c.set(\"project\", project);\n await next();\n };\n}\n","import {\n resolveOrgDatabaseUrl,\n runWithOrganizationScope,\n selectActiveArtifactManifestForProject,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport type { StoredRouteManifest } from \"@keystrokehq/server\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../auth/types\";\nimport { getProjectScheduler } from \"../lib/project-scheduler\";\n\nexport function withPublicProjectRuntime(): MiddlewareHandler<{\n Variables: PublicProjectRuntimeVariables;\n}> {\n return async (c, next) => {\n const project = c.get(\"project\");\n\n if (project.status !== \"active\") {\n return c.json({ error: \"Project is not active\" }, 503);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return c.json({ error: \"Organization not found\" }, 404);\n }\n\n const url = resolveOrgDatabaseUrl(organization);\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase({ url, searchPath: organization.dbSchema }, async () =>\n runWithProjectScope(project.id, async () =>\n runWithTenantScope(project.organizationId, async () => {\n const manifestRaw = await selectActiveArtifactManifestForProject(project.id);\n if (!manifestRaw || typeof manifestRaw !== \"object\") {\n return c.json({ error: \"Project runtime manifest is not available\" }, 503);\n }\n\n const scheduler = await getProjectScheduler(organization, project.id);\n c.set(\"jobQueue\", scheduler);\n c.set(\"scheduler\", scheduler);\n c.set(\"manifest\", manifestRaw as StoredRouteManifest);\n await next();\n }),\n ),\n ),\n );\n };\n}\n","import {\n enqueueWebhookIngress,\n loadWebhookAttachmentSchemasForRoute,\n matchWebhookPayload,\n webhookRouteFromEndpoint,\n} from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\n\nexport function createPlatformWebhookIngressHandler(route: string) {\n return async (c: Context): Promise<Response> => {\n const schemas = await loadWebhookAttachmentSchemasForRoute(route);\n if (schemas.length === 0) {\n return c.json({ error: \"Webhook route not found\" }, 404);\n }\n\n let payload: unknown;\n\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const matches = matchWebhookPayload(payload, schemas);\n if (matches.length === 0) {\n return c.json({ ok: true, skipped: true });\n }\n\n const runId = await enqueueWebhookIngress({\n route,\n matches,\n jobQueue: c.get(\"jobQueue\"),\n });\n\n return c.json({ runId }, 202);\n };\n}\n\nexport function webhookRouteFromRequestPath(endpointSuffix: string): string {\n return webhookRouteFromEndpoint(endpointSuffix);\n}\n","import { resumeWorkflowHook } from \"@keystrokehq/server\";\nimport type { Context } from \"hono\";\n\n/**\n * In-process hook resume (PR1): resolves the token against the org DB, appends\n * hook_resumed, and enqueues the run's advance job on the per-project queue.\n * PR4 will replace this with a proxy to the project container.\n */\nexport function createPlatformHookResumeHandler() {\n return async (c: Context): Promise<Response> => {\n const token = c.req.param(\"token\")?.trim();\n if (!token) {\n return c.json({ error: \"Hook token is required\" }, 400);\n }\n\n let payload: unknown = {};\n const contentType = c.req.header(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n try {\n payload = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n }\n\n const result = await resumeWorkflowHook(token, payload, { jobQueue: c.get(\"jobQueue\") });\n if (!result.ok) {\n return c.json({ error: result.error }, result.status);\n }\n return c.json({ runId: result.runId }, 202);\n };\n}\n","import { extractWebhookApiKeyFromRequest } from \"@keystrokehq/auth\";\nimport { verifyWebhookApiKeyForRoute } from \"@keystrokehq/platform-database\";\nimport { Hono } from \"hono\";\n\nimport type { PublicProjectRuntimeVariables } from \"../../auth/types\";\nimport { resolvePublicProject } from \"../../middleware/resolve-public-project\";\nimport { withPublicProjectRuntime } from \"../../middleware/with-public-project-runtime\";\nimport {\n createPlatformWebhookIngressHandler,\n webhookRouteFromRequestPath,\n} from \"../runtime/handlers/webhook-ingress\";\nimport { createPlatformHookResumeHandler } from \"../runtime/handlers/hook-resume\";\n\nexport function mountWebhookRoutes(): Hono<{ Variables: PublicProjectRuntimeVariables }> {\n const webhooks = new Hono<{ Variables: PublicProjectRuntimeVariables }>();\n\n webhooks.use(\"/:projectId/triggers/:endpoint{.+}\", resolvePublicProject());\n webhooks.use(\"/:projectId/triggers/:endpoint{.+}\", withPublicProjectRuntime());\n\n webhooks.use(\"/:projectId/hooks/:token/resume\", resolvePublicProject());\n webhooks.use(\"/:projectId/hooks/:token/resume\", withPublicProjectRuntime());\n webhooks.post(\"/:projectId/hooks/:token/resume\", createPlatformHookResumeHandler());\n\n webhooks.post(\"/:projectId/triggers/:endpoint{.+}\", async (c) => {\n const suffix = c.req.param(\"endpoint\")?.trim() ?? \"\";\n if (!suffix) {\n return c.json({ error: \"Webhook endpoint is required\" }, 400);\n }\n\n const route = webhookRouteFromRequestPath(suffix);\n const secret = extractWebhookApiKeyFromRequest(c.req.raw);\n if (!secret) {\n return c.json({ error: \"Webhook API key is required\" }, 401);\n }\n\n const projectRow = c.get(\"project\");\n const valid = await verifyWebhookApiKeyForRoute(projectRow.id, route, secret);\n if (!valid) {\n return c.json({ error: \"Invalid webhook API key\" }, 401);\n }\n\n return createPlatformWebhookIngressHandler(route)(c);\n });\n\n return webhooks;\n}\n","import type { Auth } from \"@keystrokehq/auth\";\nimport type { PlatformConfig } from \"./config\";\nimport { ACTIVE_ORG_HEADER } from \"@keystrokehq/shared\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\n\nimport { mountAuth } from \"./auth/mount\";\nimport type { SessionVariables } from \"./auth/types\";\nimport { mountAccountRoutes } from \"./routes/account/mount\";\nimport { mountInternalRoutes } from \"./routes/internal/mount\";\nimport { mountOAuthCallbacks, mountRuntimeRoutes } from \"./routes/runtime/mount\";\nimport { mountSlackGatewayRoutes } from \"./routes/gateways/mount\";\nimport { mountWebhookRoutes } from \"./routes/webhooks/mount\";\n\nexport type CreateAppOptions = {\n /** Browser origin allowed for credentialed cross-origin requests (e.g. http://localhost:3000). */\n webOrigin?: string;\n hosting: PlatformConfig[\"hosting\"];\n storage: PlatformConfig[\"storage\"];\n llmProxy?: PlatformConfig[\"llmProxy\"];\n};\n\nexport async function createApp(\n auth: Auth,\n options: CreateAppOptions,\n): Promise<Hono<{ Variables: SessionVariables }>> {\n const app = new Hono<{ Variables: SessionVariables }>();\n\n if (options.webOrigin) {\n app.use(\n \"*\",\n cors({\n origin: options.webOrigin,\n credentials: true,\n allowHeaders: [\"Content-Type\", \"Authorization\", ACTIVE_ORG_HEADER],\n maxAge: 86400,\n }),\n );\n }\n\n mountAuth(app, auth);\n app.route(\"/api/projects\", mountWebhookRoutes());\n app.route(\"/api\", mountSlackGatewayRoutes());\n // OAuth callbacks must mount before account/runtime routes — account requires a JWT\n // bearer on `/*`; a bare browser redirect from Google carries no Authorization header.\n app.route(\"/api\", await mountOAuthCallbacks());\n app.route(\n \"/api\",\n mountAccountRoutes({\n hosting: options.hosting,\n storage: options.storage,\n }),\n );\n app.route(\"/api\", await mountRuntimeRoutes());\n app.route(\n \"/internal\",\n mountInternalRoutes(options.hosting.workerRuntime.workerToken, options.llmProxy),\n );\n\n app.get(\"/health\", (c) => c.json({ ok: true }));\n\n app.get(\"/\", (c) =>\n c.json({\n service: \"keystroke-cloud-platform\",\n }),\n );\n\n return app;\n}\n","import { serve } from \"@hono/node-server\";\nimport { createAuth } from \"@keystrokehq/auth\";\nimport { listenPortFromPublicUrl } from \"@keystrokehq/shared\";\nimport {\n ensureProjectPgBossGrants,\n initDatabase,\n resolveProjectRuntimeDatabase,\n selectProjectArtifactById,\n selectProjectById,\n createOrgContainerPresign,\n selectOrganizationById,\n} from \"@keystrokehq/platform-database\";\nimport { seedOAuthAppsFromEnvForAllOrganizations } from \"@keystrokehq/server\";\nimport type { PlatformConfig } from \"./config\";\nimport {\n ensureProjectRuntimeQueues,\n resolveRuntimeArtifact,\n startProjectRuntimeWorker,\n} from \"@keystrokehq/projects\";\nimport { configureSharedScheduler, startPgBoss } from \"@keystrokehq/scheduler\";\nimport type { Hono } from \"hono\";\n\nimport { createApp } from \"./app\";\nimport type { SessionVariables } from \"./auth/types\";\n\nexport type StartPlatformServerHooks = {\n afterCreateApp?: (app: Hono<{ Variables: SessionVariables }>) => void | Promise<void>;\n};\n\n/** Fly `internal_port` — not the public HTTPS URL port. */\nconst PRODUCTION_PLATFORM_LISTEN_PORT = 8080;\nconst LOCAL_PLATFORM_PORT = 3002;\n\nfunction resolvePlatformListenPort(): number {\n if (process.env.NODE_ENV === \"production\") {\n return PRODUCTION_PLATFORM_LISTEN_PORT;\n }\n\n return listenPortFromPublicUrl(process.env.PUBLIC_PLATFORM_URL, LOCAL_PLATFORM_PORT);\n}\n\nexport async function startPlatformServer(\n platformConfig: PlatformConfig,\n hooks: StartPlatformServerHooks = {},\n): Promise<void> {\n const runtime = platformConfig.hosting.createRuntime();\n\n await initDatabase();\n process.env.KEYSTROKE_SECRETS_MODE = \"platform\";\n await seedOAuthAppsFromEnvForAllOrganizations();\n\n if (platformConfig.scheduler) {\n configureSharedScheduler(platformConfig.scheduler);\n }\n\n const boss = await startPgBoss();\n await ensureProjectRuntimeQueues(boss);\n await ensureProjectPgBossGrants();\n startProjectRuntimeWorker(runtime, {\n resolveStartInput: async (job) => {\n const project = await selectProjectById(job.projectId);\n if (!project) {\n throw new Error(`Project ${job.projectId} not found`);\n }\n\n const resolved = resolveRuntimeArtifact(project, job.artifactId);\n if (resolved.action === \"error\") {\n throw new Error(resolved.message);\n }\n if (resolved.action === \"skip\") {\n throw new Error(`Project ${job.projectId} has no deploy artifact to start`);\n }\n\n const artifact = await selectProjectArtifactById(resolved.artifactId);\n if (!artifact || artifact.status !== \"ready\") {\n throw new Error(`Project ${job.projectId} pending artifact is not ready`);\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n throw new Error(`Organization not found for project ${job.projectId}`);\n }\n\n const containerPresign = createOrgContainerPresign(organization);\n const artifactUrl = await containerPresign.presignGet({ key: artifact.storageKey });\n\n const workerRuntime = platformConfig.hosting.workerRuntime;\n\n return {\n projectId: job.projectId,\n name: job.name,\n artifactId: resolved.artifactId,\n artifactUrl,\n database: await resolveProjectRuntimeDatabase({\n organizationId: project.organizationId,\n projectId: project.id,\n }),\n env: platformConfig.llmProxy?.workerEnv({\n platformUrl: workerRuntime.platformUrl,\n workerToken: workerRuntime.workerToken,\n projectId: project.id,\n }),\n hosting: organization.hostingAppName ? { appName: organization.hostingAppName } : undefined,\n previousRuntimeId: project.runtimeId,\n };\n },\n });\n\n const webUrl = process.env.PUBLIC_WEB_URL;\n if (!webUrl) {\n throw new Error(\"PUBLIC_WEB_URL is required for the platform server\");\n }\n\n const platformUrl = process.env.PUBLIC_PLATFORM_URL?.replace(/\\/+$/, \"\");\n if (!platformUrl) {\n throw new Error(\"PUBLIC_PLATFORM_URL is required for the platform server\");\n }\n\n const auth = createAuth({\n baseURL: platformUrl,\n verificationUri: `${webUrl.replace(/\\/+$/, \"\")}/device`,\n trustedOrigins: [webUrl],\n });\n if (!auth) {\n throw new Error(\"BETTER_AUTH_SECRET is required for the platform server\");\n }\n\n const app = await createApp(auth, {\n webOrigin: webUrl,\n hosting: platformConfig.hosting,\n storage: platformConfig.storage,\n llmProxy: platformConfig.llmProxy,\n });\n await hooks.afterCreateApp?.(app);\n const port = resolvePlatformListenPort();\n\n serve({ fetch: app.fetch, port }, (info) => {\n console.log(`Platform API listening on http://localhost:${info.port}`);\n });\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"mappings":"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"}