@shipfox/api-auth-context 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ $ shipfox-swc
2
+ Successfully compiled: 1 file with swc (42.58ms)
@@ -0,0 +1 @@
1
+ $ shipfox-tsc-emit
@@ -0,0 +1 @@
1
+ $ shipfox-tsc-check
package/CHANGELOG.md ADDED
@@ -0,0 +1,48 @@
1
+ # @shipfox/api-auth-context
2
+
3
+ ## 2.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1b0d344: Publishes the complete API runtime closure with packed-consumer-safe internal imports and records its exact package set in application releases.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [1b0d344]
12
+ - @shipfox/api-auth-dto@2.0.0
13
+ - @shipfox/api-workspaces-dto@2.0.0
14
+ - @shipfox/node-fastify@0.2.1
15
+
16
+ ## 0.1.0
17
+
18
+ ### Minor Changes
19
+
20
+ - a81b68c: Adds provisioner token and auth context primitives for workspace-scoped control-plane credentials.
21
+ - c0a883c: Moves the job lease capability token codec and its claims schema from the runners packages into api-auth/api-auth-dto, renaming its config to `AUTH_JOB_LEASE_TOKEN_*`, so all signed-token codecs live with authentication. Adds a shared leased-job auth context for request-scoped lease claims, and a shared `createLeaseTokenAuthMethod` (the `leased-job` auth method) registered on the auth module so any feature module can protect routes with a lease token by name.
22
+ - 6181819: Adds runner registration sessions with bounded label contracts, session-token auth, and lease-token heartbeat ownership.
23
+
24
+ ### Patch Changes
25
+
26
+ - 72ce351: Removes the legacy workspace API-key auth surface, its DTOs, project-access branch, database table, and token prefix support.
27
+ - 82d22e4: Make the workspace-membership gate stateless. `requireWorkspaceAccess` now lives in `@shipfox/api-auth-context` and authorizes a request purely from the verified session-token claims, replacing the `requireMembership` gate in `@shipfox/api-workspaces` that read the workspace row from the database on every workspace-scoped request. Membership and role already travel in the token, so the check needs no database access.
28
+
29
+ This removes the per-request database read and severs the runtime dependency on `@shipfox/api-workspaces` from feature modules that only needed the membership gate (integration providers, secrets, projects, agent, runners). Workspace existence and `active`-status enforcement, which no code path currently exercises, moves off the hot path; enforce it at token issuance when workspace suspension is introduced.
30
+
31
+ - Updated dependencies [34ba284]
32
+ - Updated dependencies [b9c3f32]
33
+ - Updated dependencies [d02c5fd]
34
+ - Updated dependencies [c0a883c]
35
+ - Updated dependencies [72ce351]
36
+ - Updated dependencies [e47f8da]
37
+ - Updated dependencies [f92122b]
38
+ - Updated dependencies [e250c4c]
39
+ - Updated dependencies [857fd73]
40
+ - Updated dependencies [3afb7e3]
41
+ - Updated dependencies [362b3eb]
42
+ - Updated dependencies [d6d4862]
43
+ - Updated dependencies [c0a883c]
44
+ - Updated dependencies [27770eb]
45
+ - Updated dependencies [6181819]
46
+ - @shipfox/node-fastify@0.2.0
47
+ - @shipfox/api-auth-dto@0.1.0
48
+ - @shipfox/api-workspaces-dto@0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shipfox
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,63 @@
1
+ import type { JobLeaseTokenClaims, RunnerSessionTokenClaims } from '@shipfox/api-auth-dto';
2
+ import type { WorkspaceRole } from '@shipfox/api-workspaces-dto';
3
+ export declare const AUTH_USER = "user";
4
+ export declare const AUTH_RUNNER_REGISTRATION_TOKEN = "runner-registration-token";
5
+ export declare const AUTH_RUNNER_SESSION = "runner-session";
6
+ export declare const AUTH_LEASED_JOB = "leased-job";
7
+ export declare const AUTH_PROVISIONER_TOKEN = "provisioner-token";
8
+ export type WorkspaceStatus = 'active' | 'suspended' | 'deleted';
9
+ export interface UserContextMembership {
10
+ workspaceId: string;
11
+ role: WorkspaceRole;
12
+ }
13
+ export interface UserContext {
14
+ userId: string;
15
+ email: string;
16
+ name: string | null;
17
+ memberships: ReadonlyArray<UserContextMembership>;
18
+ canAccess(workspaceId: string): boolean;
19
+ hasRole(workspaceId: string, role: WorkspaceRole): boolean;
20
+ }
21
+ export interface BuildUserContextParams {
22
+ userId: string;
23
+ email: string;
24
+ name?: string | null | undefined;
25
+ memberships?: ReadonlyArray<UserContextMembership> | undefined;
26
+ }
27
+ export declare function buildUserContext(params: BuildUserContextParams): UserContext;
28
+ export interface ProvisionerContext {
29
+ provisionerTokenId: string;
30
+ workspaceId: string;
31
+ }
32
+ export type LeasedJobContext = JobLeaseTokenClaims;
33
+ export type RunnerSessionContext = RunnerSessionTokenClaims;
34
+ type RequestWithContext = object;
35
+ export declare function setUserContext(request: RequestWithContext, context: UserContext): void;
36
+ export declare function getUserContext(request: RequestWithContext): UserContext | null;
37
+ export declare function requireUserContext(request: RequestWithContext): UserContext;
38
+ export interface RequireWorkspaceAccessParams {
39
+ request: RequestWithContext;
40
+ workspaceId: string;
41
+ }
42
+ export interface RequireWorkspaceAccessResult {
43
+ workspaceId: string;
44
+ userId: string;
45
+ role: WorkspaceRole;
46
+ }
47
+ /**
48
+ * Authorizes the request's user for a workspace using only the verified session
49
+ * token. Membership and role come from the token claims, so the check stays
50
+ * stateless and does not read the database on the request path.
51
+ */
52
+ export declare function requireWorkspaceAccess(params: RequireWorkspaceAccessParams): RequireWorkspaceAccessResult;
53
+ export declare function setProvisionerContext(request: RequestWithContext, context: ProvisionerContext): void;
54
+ export declare function getProvisionerContext(request: RequestWithContext): ProvisionerContext | null;
55
+ export declare function requireProvisionerContext(request: RequestWithContext): ProvisionerContext;
56
+ export declare function setLeasedJobContext(request: RequestWithContext, context: LeasedJobContext): void;
57
+ export declare function getLeasedJobContext(request: RequestWithContext): LeasedJobContext | null;
58
+ export declare function requireLeasedJobContext(request: RequestWithContext): LeasedJobContext;
59
+ export declare function setRunnerSessionContext(request: RequestWithContext, context: RunnerSessionContext): void;
60
+ export declare function getRunnerSessionContext(request: RequestWithContext): RunnerSessionContext | null;
61
+ export declare function requireRunnerSessionContext(request: RequestWithContext): RunnerSessionContext;
62
+ export {};
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AACzF,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAG/D,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAClD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAC;CAChE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,WAAW,CAW5E;AAED,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAE5D,KAAK,kBAAkB,GAAG,MAAM,CAAC;AAOjC,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAEtF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,GAAG,IAAI,CAI9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAM3E;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,4BAA4B,GACnC,4BAA4B,CAY9B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAM5F;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAMzF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEhG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI,CAMxF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,CAMrF;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,IAAI,CAMhG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,CAM7F"}
package/dist/index.js ADDED
@@ -0,0 +1,98 @@
1
+ import { ClientError } from '@shipfox/node-fastify';
2
+ export const AUTH_USER = 'user';
3
+ export const AUTH_RUNNER_REGISTRATION_TOKEN = 'runner-registration-token';
4
+ export const AUTH_RUNNER_SESSION = 'runner-session';
5
+ export const AUTH_LEASED_JOB = 'leased-job';
6
+ export const AUTH_PROVISIONER_TOKEN = 'provisioner-token';
7
+ export function buildUserContext(params) {
8
+ const memberships = params.memberships ?? [];
9
+ return {
10
+ userId: params.userId,
11
+ email: params.email,
12
+ name: params.name ?? null,
13
+ memberships,
14
+ canAccess: (workspaceId)=>memberships.some((m)=>m.workspaceId === workspaceId),
15
+ hasRole: (workspaceId, role)=>memberships.some((m)=>m.workspaceId === workspaceId && m.role === role)
16
+ };
17
+ }
18
+ const USER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/user');
19
+ const LEASED_JOB_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/leased-job');
20
+ const PROVISIONER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/provisioner');
21
+ const RUNNER_SESSION_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/runner-session');
22
+ export function setUserContext(request, context) {
23
+ request[USER_CONTEXT_KEY] = context;
24
+ }
25
+ export function getUserContext(request) {
26
+ return request[USER_CONTEXT_KEY] ?? null;
27
+ }
28
+ export function requireUserContext(request) {
29
+ const context = getUserContext(request);
30
+ if (!context) {
31
+ throw new Error('User context is not available on this request');
32
+ }
33
+ return context;
34
+ }
35
+ /**
36
+ * Authorizes the request's user for a workspace using only the verified session
37
+ * token. Membership and role come from the token claims, so the check stays
38
+ * stateless and does not read the database on the request path.
39
+ */ export function requireWorkspaceAccess(params) {
40
+ const context = getUserContext(params.request);
41
+ if (!context) {
42
+ throw new ClientError('Authentication required', 'unauthorized', {
43
+ status: 401
44
+ });
45
+ }
46
+ const membership = context.memberships.find((m)=>m.workspaceId === params.workspaceId);
47
+ if (!membership) {
48
+ throw new ClientError('Not a member of this workspace', 'forbidden', {
49
+ status: 403
50
+ });
51
+ }
52
+ return {
53
+ workspaceId: params.workspaceId,
54
+ userId: context.userId,
55
+ role: membership.role
56
+ };
57
+ }
58
+ export function setProvisionerContext(request, context) {
59
+ request[PROVISIONER_CONTEXT_KEY] = context;
60
+ }
61
+ export function getProvisionerContext(request) {
62
+ return request[PROVISIONER_CONTEXT_KEY] ?? null;
63
+ }
64
+ export function requireProvisionerContext(request) {
65
+ const context = getProvisionerContext(request);
66
+ if (!context) {
67
+ throw new Error('Provisioner context is not available on this request');
68
+ }
69
+ return context;
70
+ }
71
+ export function setLeasedJobContext(request, context) {
72
+ request[LEASED_JOB_CONTEXT_KEY] = context;
73
+ }
74
+ export function getLeasedJobContext(request) {
75
+ return request[LEASED_JOB_CONTEXT_KEY] ?? null;
76
+ }
77
+ export function requireLeasedJobContext(request) {
78
+ const context = getLeasedJobContext(request);
79
+ if (!context) {
80
+ throw new Error('Leased job context is not available on this request');
81
+ }
82
+ return context;
83
+ }
84
+ export function setRunnerSessionContext(request, context) {
85
+ request[RUNNER_SESSION_CONTEXT_KEY] = context;
86
+ }
87
+ export function getRunnerSessionContext(request) {
88
+ return request[RUNNER_SESSION_CONTEXT_KEY] ?? null;
89
+ }
90
+ export function requireRunnerSessionContext(request) {
91
+ const context = getRunnerSessionContext(request);
92
+ if (!context) {
93
+ throw new Error('Runner session context is not available on this request');
94
+ }
95
+ return context;
96
+ }
97
+
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {JobLeaseTokenClaims, RunnerSessionTokenClaims} from '@shipfox/api-auth-dto';\nimport type {WorkspaceRole} from '@shipfox/api-workspaces-dto';\nimport {ClientError} from '@shipfox/node-fastify';\n\nexport const AUTH_USER = 'user';\nexport const AUTH_RUNNER_REGISTRATION_TOKEN = 'runner-registration-token';\nexport const AUTH_RUNNER_SESSION = 'runner-session';\nexport const AUTH_LEASED_JOB = 'leased-job';\nexport const AUTH_PROVISIONER_TOKEN = 'provisioner-token';\n\nexport type WorkspaceStatus = 'active' | 'suspended' | 'deleted';\n\nexport interface UserContextMembership {\n workspaceId: string;\n role: WorkspaceRole;\n}\n\nexport interface UserContext {\n userId: string;\n email: string;\n name: string | null;\n memberships: ReadonlyArray<UserContextMembership>;\n canAccess(workspaceId: string): boolean;\n hasRole(workspaceId: string, role: WorkspaceRole): boolean;\n}\n\nexport interface BuildUserContextParams {\n userId: string;\n email: string;\n name?: string | null | undefined;\n memberships?: ReadonlyArray<UserContextMembership> | undefined;\n}\n\nexport function buildUserContext(params: BuildUserContextParams): UserContext {\n const memberships = params.memberships ?? [];\n return {\n userId: params.userId,\n email: params.email,\n name: params.name ?? null,\n memberships,\n canAccess: (workspaceId) => memberships.some((m) => m.workspaceId === workspaceId),\n hasRole: (workspaceId, role) =>\n memberships.some((m) => m.workspaceId === workspaceId && m.role === role),\n };\n}\n\nexport interface ProvisionerContext {\n provisionerTokenId: string;\n workspaceId: string;\n}\n\nexport type LeasedJobContext = JobLeaseTokenClaims;\nexport type RunnerSessionContext = RunnerSessionTokenClaims;\n\ntype RequestWithContext = object;\n\nconst USER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/user');\nconst LEASED_JOB_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/leased-job');\nconst PROVISIONER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/provisioner');\nconst RUNNER_SESSION_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/runner-session');\n\nexport function setUserContext(request: RequestWithContext, context: UserContext): void {\n (request as Record<symbol, unknown>)[USER_CONTEXT_KEY] = context;\n}\n\nexport function getUserContext(request: RequestWithContext): UserContext | null {\n return (\n ((request as Record<symbol, unknown>)[USER_CONTEXT_KEY] as UserContext | undefined) ?? null\n );\n}\n\nexport function requireUserContext(request: RequestWithContext): UserContext {\n const context = getUserContext(request);\n if (!context) {\n throw new Error('User context is not available on this request');\n }\n return context;\n}\n\nexport interface RequireWorkspaceAccessParams {\n request: RequestWithContext;\n workspaceId: string;\n}\n\nexport interface RequireWorkspaceAccessResult {\n workspaceId: string;\n userId: string;\n role: WorkspaceRole;\n}\n\n/**\n * Authorizes the request's user for a workspace using only the verified session\n * token. Membership and role come from the token claims, so the check stays\n * stateless and does not read the database on the request path.\n */\nexport function requireWorkspaceAccess(\n params: RequireWorkspaceAccessParams,\n): RequireWorkspaceAccessResult {\n const context = getUserContext(params.request);\n if (!context) {\n throw new ClientError('Authentication required', 'unauthorized', {status: 401});\n }\n\n const membership = context.memberships.find((m) => m.workspaceId === params.workspaceId);\n if (!membership) {\n throw new ClientError('Not a member of this workspace', 'forbidden', {status: 403});\n }\n\n return {workspaceId: params.workspaceId, userId: context.userId, role: membership.role};\n}\n\nexport function setProvisionerContext(\n request: RequestWithContext,\n context: ProvisionerContext,\n): void {\n (request as Record<symbol, unknown>)[PROVISIONER_CONTEXT_KEY] = context;\n}\n\nexport function getProvisionerContext(request: RequestWithContext): ProvisionerContext | null {\n return (\n ((request as Record<symbol, unknown>)[PROVISIONER_CONTEXT_KEY] as\n | ProvisionerContext\n | undefined) ?? null\n );\n}\n\nexport function requireProvisionerContext(request: RequestWithContext): ProvisionerContext {\n const context = getProvisionerContext(request);\n if (!context) {\n throw new Error('Provisioner context is not available on this request');\n }\n return context;\n}\n\nexport function setLeasedJobContext(request: RequestWithContext, context: LeasedJobContext): void {\n (request as Record<symbol, unknown>)[LEASED_JOB_CONTEXT_KEY] = context;\n}\n\nexport function getLeasedJobContext(request: RequestWithContext): LeasedJobContext | null {\n return (\n ((request as Record<symbol, unknown>)[LEASED_JOB_CONTEXT_KEY] as\n | LeasedJobContext\n | undefined) ?? null\n );\n}\n\nexport function requireLeasedJobContext(request: RequestWithContext): LeasedJobContext {\n const context = getLeasedJobContext(request);\n if (!context) {\n throw new Error('Leased job context is not available on this request');\n }\n return context;\n}\n\nexport function setRunnerSessionContext(\n request: RequestWithContext,\n context: RunnerSessionContext,\n): void {\n (request as Record<symbol, unknown>)[RUNNER_SESSION_CONTEXT_KEY] = context;\n}\n\nexport function getRunnerSessionContext(request: RequestWithContext): RunnerSessionContext | null {\n return (\n ((request as Record<symbol, unknown>)[RUNNER_SESSION_CONTEXT_KEY] as\n | RunnerSessionContext\n | undefined) ?? null\n );\n}\n\nexport function requireRunnerSessionContext(request: RequestWithContext): RunnerSessionContext {\n const context = getRunnerSessionContext(request);\n if (!context) {\n throw new Error('Runner session context is not available on this request');\n }\n return context;\n}\n"],"names":["ClientError","AUTH_USER","AUTH_RUNNER_REGISTRATION_TOKEN","AUTH_RUNNER_SESSION","AUTH_LEASED_JOB","AUTH_PROVISIONER_TOKEN","buildUserContext","params","memberships","userId","email","name","canAccess","workspaceId","some","m","hasRole","role","USER_CONTEXT_KEY","Symbol","for","LEASED_JOB_CONTEXT_KEY","PROVISIONER_CONTEXT_KEY","RUNNER_SESSION_CONTEXT_KEY","setUserContext","request","context","getUserContext","requireUserContext","Error","requireWorkspaceAccess","status","membership","find","setProvisionerContext","getProvisionerContext","requireProvisionerContext","setLeasedJobContext","getLeasedJobContext","requireLeasedJobContext","setRunnerSessionContext","getRunnerSessionContext","requireRunnerSessionContext"],"mappings":"AAEA,SAAQA,WAAW,QAAO,wBAAwB;AAElD,OAAO,MAAMC,YAAY,OAAO;AAChC,OAAO,MAAMC,iCAAiC,4BAA4B;AAC1E,OAAO,MAAMC,sBAAsB,iBAAiB;AACpD,OAAO,MAAMC,kBAAkB,aAAa;AAC5C,OAAO,MAAMC,yBAAyB,oBAAoB;AAyB1D,OAAO,SAASC,iBAAiBC,MAA8B;IAC7D,MAAMC,cAAcD,OAAOC,WAAW,IAAI,EAAE;IAC5C,OAAO;QACLC,QAAQF,OAAOE,MAAM;QACrBC,OAAOH,OAAOG,KAAK;QACnBC,MAAMJ,OAAOI,IAAI,IAAI;QACrBH;QACAI,WAAW,CAACC,cAAgBL,YAAYM,IAAI,CAAC,CAACC,IAAMA,EAAEF,WAAW,KAAKA;QACtEG,SAAS,CAACH,aAAaI,OACrBT,YAAYM,IAAI,CAAC,CAACC,IAAMA,EAAEF,WAAW,KAAKA,eAAeE,EAAEE,IAAI,KAAKA;IACxE;AACF;AAYA,MAAMC,mBAAmBC,OAAOC,GAAG,CAAC;AACpC,MAAMC,yBAAyBF,OAAOC,GAAG,CAAC;AAC1C,MAAME,0BAA0BH,OAAOC,GAAG,CAAC;AAC3C,MAAMG,6BAA6BJ,OAAOC,GAAG,CAAC;AAE9C,OAAO,SAASI,eAAeC,OAA2B,EAAEC,OAAoB;IAC7ED,OAAmC,CAACP,iBAAiB,GAAGQ;AAC3D;AAEA,OAAO,SAASC,eAAeF,OAA2B;IACxD,OACE,AAAC,AAACA,OAAmC,CAACP,iBAAiB,IAAgC;AAE3F;AAEA,OAAO,SAASU,mBAAmBH,OAA2B;IAC5D,MAAMC,UAAUC,eAAeF;IAC/B,IAAI,CAACC,SAAS;QACZ,MAAM,IAAIG,MAAM;IAClB;IACA,OAAOH;AACT;AAaA;;;;CAIC,GACD,OAAO,SAASI,uBACdvB,MAAoC;IAEpC,MAAMmB,UAAUC,eAAepB,OAAOkB,OAAO;IAC7C,IAAI,CAACC,SAAS;QACZ,MAAM,IAAI1B,YAAY,2BAA2B,gBAAgB;YAAC+B,QAAQ;QAAG;IAC/E;IAEA,MAAMC,aAAaN,QAAQlB,WAAW,CAACyB,IAAI,CAAC,CAAClB,IAAMA,EAAEF,WAAW,KAAKN,OAAOM,WAAW;IACvF,IAAI,CAACmB,YAAY;QACf,MAAM,IAAIhC,YAAY,kCAAkC,aAAa;YAAC+B,QAAQ;QAAG;IACnF;IAEA,OAAO;QAAClB,aAAaN,OAAOM,WAAW;QAAEJ,QAAQiB,QAAQjB,MAAM;QAAEQ,MAAMe,WAAWf,IAAI;IAAA;AACxF;AAEA,OAAO,SAASiB,sBACdT,OAA2B,EAC3BC,OAA2B;IAE1BD,OAAmC,CAACH,wBAAwB,GAAGI;AAClE;AAEA,OAAO,SAASS,sBAAsBV,OAA2B;IAC/D,OACE,AAAC,AAACA,OAAmC,CAACH,wBAAwB,IAE5C;AAEtB;AAEA,OAAO,SAASc,0BAA0BX,OAA2B;IACnE,MAAMC,UAAUS,sBAAsBV;IACtC,IAAI,CAACC,SAAS;QACZ,MAAM,IAAIG,MAAM;IAClB;IACA,OAAOH;AACT;AAEA,OAAO,SAASW,oBAAoBZ,OAA2B,EAAEC,OAAyB;IACvFD,OAAmC,CAACJ,uBAAuB,GAAGK;AACjE;AAEA,OAAO,SAASY,oBAAoBb,OAA2B;IAC7D,OACE,AAAC,AAACA,OAAmC,CAACJ,uBAAuB,IAE3C;AAEtB;AAEA,OAAO,SAASkB,wBAAwBd,OAA2B;IACjE,MAAMC,UAAUY,oBAAoBb;IACpC,IAAI,CAACC,SAAS;QACZ,MAAM,IAAIG,MAAM;IAClB;IACA,OAAOH;AACT;AAEA,OAAO,SAASc,wBACdf,OAA2B,EAC3BC,OAA6B;IAE5BD,OAAmC,CAACF,2BAA2B,GAAGG;AACrE;AAEA,OAAO,SAASe,wBAAwBhB,OAA2B;IACjE,OACE,AAAC,AAACA,OAAmC,CAACF,2BAA2B,IAE/C;AAEtB;AAEA,OAAO,SAASmB,4BAA4BjB,OAA2B;IACrE,MAAMC,UAAUe,wBAAwBhB;IACxC,IAAI,CAACC,SAAS;QACZ,MAAM,IAAIG,MAAM;IAClB;IACA,OAAOH;AACT"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@shipfox/api-auth-context",
3
+ "license": "MIT",
4
+ "version": "2.0.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/ShipfoxHQ/shipfox.git",
8
+ "directory": "libs/api/auth-context"
9
+ },
10
+ "private": false,
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "development": {
17
+ "types": "./src/index.ts",
18
+ "default": "./src/index.ts"
19
+ },
20
+ "default": {
21
+ "types": "./dist/index.d.ts",
22
+ "default": "./dist/index.js"
23
+ }
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "@shipfox/api-auth-dto": "2.0.0",
28
+ "@shipfox/api-workspaces-dto": "2.0.0",
29
+ "@shipfox/node-fastify": "0.2.1"
30
+ },
31
+ "devDependencies": {
32
+ "@shipfox/ts-config": "1.3.8",
33
+ "@shipfox/typescript": "1.1.6",
34
+ "@shipfox/swc": "1.2.5",
35
+ "@shipfox/vitest": "1.2.2",
36
+ "@shipfox/biome": "1.8.1"
37
+ },
38
+ "scripts": {
39
+ "build": "shipfox-swc",
40
+ "check": "shipfox-biome-check",
41
+ "check:fix": "shipfox-biome-check --write",
42
+ "test": "shipfox-vitest-run",
43
+ "test:watch": "shipfox-vitest-watch",
44
+ "type": "shipfox-tsc-check",
45
+ "type:emit": "shipfox-tsc-emit"
46
+ }
47
+ }
package/src/index.ts ADDED
@@ -0,0 +1,176 @@
1
+ import type {JobLeaseTokenClaims, RunnerSessionTokenClaims} from '@shipfox/api-auth-dto';
2
+ import type {WorkspaceRole} from '@shipfox/api-workspaces-dto';
3
+ import {ClientError} from '@shipfox/node-fastify';
4
+
5
+ export const AUTH_USER = 'user';
6
+ export const AUTH_RUNNER_REGISTRATION_TOKEN = 'runner-registration-token';
7
+ export const AUTH_RUNNER_SESSION = 'runner-session';
8
+ export const AUTH_LEASED_JOB = 'leased-job';
9
+ export const AUTH_PROVISIONER_TOKEN = 'provisioner-token';
10
+
11
+ export type WorkspaceStatus = 'active' | 'suspended' | 'deleted';
12
+
13
+ export interface UserContextMembership {
14
+ workspaceId: string;
15
+ role: WorkspaceRole;
16
+ }
17
+
18
+ export interface UserContext {
19
+ userId: string;
20
+ email: string;
21
+ name: string | null;
22
+ memberships: ReadonlyArray<UserContextMembership>;
23
+ canAccess(workspaceId: string): boolean;
24
+ hasRole(workspaceId: string, role: WorkspaceRole): boolean;
25
+ }
26
+
27
+ export interface BuildUserContextParams {
28
+ userId: string;
29
+ email: string;
30
+ name?: string | null | undefined;
31
+ memberships?: ReadonlyArray<UserContextMembership> | undefined;
32
+ }
33
+
34
+ export function buildUserContext(params: BuildUserContextParams): UserContext {
35
+ const memberships = params.memberships ?? [];
36
+ return {
37
+ userId: params.userId,
38
+ email: params.email,
39
+ name: params.name ?? null,
40
+ memberships,
41
+ canAccess: (workspaceId) => memberships.some((m) => m.workspaceId === workspaceId),
42
+ hasRole: (workspaceId, role) =>
43
+ memberships.some((m) => m.workspaceId === workspaceId && m.role === role),
44
+ };
45
+ }
46
+
47
+ export interface ProvisionerContext {
48
+ provisionerTokenId: string;
49
+ workspaceId: string;
50
+ }
51
+
52
+ export type LeasedJobContext = JobLeaseTokenClaims;
53
+ export type RunnerSessionContext = RunnerSessionTokenClaims;
54
+
55
+ type RequestWithContext = object;
56
+
57
+ const USER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/user');
58
+ const LEASED_JOB_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/leased-job');
59
+ const PROVISIONER_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/provisioner');
60
+ const RUNNER_SESSION_CONTEXT_KEY = Symbol.for('@shipfox/api-auth-context/runner-session');
61
+
62
+ export function setUserContext(request: RequestWithContext, context: UserContext): void {
63
+ (request as Record<symbol, unknown>)[USER_CONTEXT_KEY] = context;
64
+ }
65
+
66
+ export function getUserContext(request: RequestWithContext): UserContext | null {
67
+ return (
68
+ ((request as Record<symbol, unknown>)[USER_CONTEXT_KEY] as UserContext | undefined) ?? null
69
+ );
70
+ }
71
+
72
+ export function requireUserContext(request: RequestWithContext): UserContext {
73
+ const context = getUserContext(request);
74
+ if (!context) {
75
+ throw new Error('User context is not available on this request');
76
+ }
77
+ return context;
78
+ }
79
+
80
+ export interface RequireWorkspaceAccessParams {
81
+ request: RequestWithContext;
82
+ workspaceId: string;
83
+ }
84
+
85
+ export interface RequireWorkspaceAccessResult {
86
+ workspaceId: string;
87
+ userId: string;
88
+ role: WorkspaceRole;
89
+ }
90
+
91
+ /**
92
+ * Authorizes the request's user for a workspace using only the verified session
93
+ * token. Membership and role come from the token claims, so the check stays
94
+ * stateless and does not read the database on the request path.
95
+ */
96
+ export function requireWorkspaceAccess(
97
+ params: RequireWorkspaceAccessParams,
98
+ ): RequireWorkspaceAccessResult {
99
+ const context = getUserContext(params.request);
100
+ if (!context) {
101
+ throw new ClientError('Authentication required', 'unauthorized', {status: 401});
102
+ }
103
+
104
+ const membership = context.memberships.find((m) => m.workspaceId === params.workspaceId);
105
+ if (!membership) {
106
+ throw new ClientError('Not a member of this workspace', 'forbidden', {status: 403});
107
+ }
108
+
109
+ return {workspaceId: params.workspaceId, userId: context.userId, role: membership.role};
110
+ }
111
+
112
+ export function setProvisionerContext(
113
+ request: RequestWithContext,
114
+ context: ProvisionerContext,
115
+ ): void {
116
+ (request as Record<symbol, unknown>)[PROVISIONER_CONTEXT_KEY] = context;
117
+ }
118
+
119
+ export function getProvisionerContext(request: RequestWithContext): ProvisionerContext | null {
120
+ return (
121
+ ((request as Record<symbol, unknown>)[PROVISIONER_CONTEXT_KEY] as
122
+ | ProvisionerContext
123
+ | undefined) ?? null
124
+ );
125
+ }
126
+
127
+ export function requireProvisionerContext(request: RequestWithContext): ProvisionerContext {
128
+ const context = getProvisionerContext(request);
129
+ if (!context) {
130
+ throw new Error('Provisioner context is not available on this request');
131
+ }
132
+ return context;
133
+ }
134
+
135
+ export function setLeasedJobContext(request: RequestWithContext, context: LeasedJobContext): void {
136
+ (request as Record<symbol, unknown>)[LEASED_JOB_CONTEXT_KEY] = context;
137
+ }
138
+
139
+ export function getLeasedJobContext(request: RequestWithContext): LeasedJobContext | null {
140
+ return (
141
+ ((request as Record<symbol, unknown>)[LEASED_JOB_CONTEXT_KEY] as
142
+ | LeasedJobContext
143
+ | undefined) ?? null
144
+ );
145
+ }
146
+
147
+ export function requireLeasedJobContext(request: RequestWithContext): LeasedJobContext {
148
+ const context = getLeasedJobContext(request);
149
+ if (!context) {
150
+ throw new Error('Leased job context is not available on this request');
151
+ }
152
+ return context;
153
+ }
154
+
155
+ export function setRunnerSessionContext(
156
+ request: RequestWithContext,
157
+ context: RunnerSessionContext,
158
+ ): void {
159
+ (request as Record<symbol, unknown>)[RUNNER_SESSION_CONTEXT_KEY] = context;
160
+ }
161
+
162
+ export function getRunnerSessionContext(request: RequestWithContext): RunnerSessionContext | null {
163
+ return (
164
+ ((request as Record<symbol, unknown>)[RUNNER_SESSION_CONTEXT_KEY] as
165
+ | RunnerSessionContext
166
+ | undefined) ?? null
167
+ );
168
+ }
169
+
170
+ export function requireRunnerSessionContext(request: RequestWithContext): RunnerSessionContext {
171
+ const context = getRunnerSessionContext(request);
172
+ if (!context) {
173
+ throw new Error('Runner session context is not available on this request');
174
+ }
175
+ return context;
176
+ }
@@ -0,0 +1,56 @@
1
+ import {ClientError} from '@shipfox/node-fastify';
2
+ import {
3
+ buildUserContext,
4
+ requireWorkspaceAccess,
5
+ setUserContext,
6
+ type UserContextMembership,
7
+ } from './index.js';
8
+
9
+ function requestWith(params: {
10
+ userId: string;
11
+ memberships: ReadonlyArray<UserContextMembership>;
12
+ }): object {
13
+ const request = {};
14
+ setUserContext(
15
+ request,
16
+ buildUserContext({
17
+ userId: params.userId,
18
+ email: 'user@example.com',
19
+ memberships: params.memberships,
20
+ }),
21
+ );
22
+ return request;
23
+ }
24
+
25
+ describe('requireWorkspaceAccess', () => {
26
+ test('returns workspaceId, userId, and role when the token grants access', () => {
27
+ const userId = crypto.randomUUID();
28
+ const workspaceId = crypto.randomUUID();
29
+ const request = requestWith({userId, memberships: [{workspaceId, role: 'admin'}]});
30
+
31
+ const result = requireWorkspaceAccess({request, workspaceId});
32
+
33
+ expect(result.workspaceId).toBe(workspaceId);
34
+ expect(result.userId).toBe(userId);
35
+ expect(result.role).toBe('admin');
36
+ });
37
+
38
+ test('throws 403 when the token does not include the workspace', () => {
39
+ const request = requestWith({
40
+ userId: crypto.randomUUID(),
41
+ memberships: [{workspaceId: crypto.randomUUID(), role: 'admin'}],
42
+ });
43
+
44
+ const act = () => requireWorkspaceAccess({request, workspaceId: crypto.randomUUID()});
45
+
46
+ expect(act).toThrow(ClientError);
47
+ expect(act).toThrow(expect.objectContaining({status: 403}));
48
+ });
49
+
50
+ test('throws 401 when the request has no user context', () => {
51
+ const act = () => requireWorkspaceAccess({request: {}, workspaceId: crypto.randomUUID()});
52
+
53
+ expect(act).toThrow(ClientError);
54
+ expect(act).toThrow(expect.objectContaining({status: 401}));
55
+ });
56
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@shipfox/ts-config/node",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "outDir": "dist"
6
+ },
7
+ "include": ["src"],
8
+ "exclude": ["**/*.test.tsx", "**/*.test.ts"]
9
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.d.cts","../auth-dto/dist/events.d.ts","../auth-dto/dist/schemas/auth.d.ts","../auth-dto/dist/schemas/e2e.d.ts","../auth-dto/dist/schemas/job-lease-token.d.ts","../auth-dto/dist/schemas/runner-session-token.d.ts","../auth-dto/dist/schemas/user.d.ts","../auth-dto/dist/schemas/index.d.ts","../auth-dto/dist/index.d.ts","../workspaces-dto/src/events.ts","../common-dto/dist/schemas/display-name.d.ts","../common-dto/dist/index.d.ts","../workspaces-dto/src/schemas/invitation.ts","../workspaces-dto/src/schemas/workspace.ts","../workspaces-dto/src/schemas/e2e.ts","../workspaces-dto/src/schemas/membership.ts","../workspaces-dto/src/schemas/index.ts","../workspaces-dto/dist/index.d.ts","../../../node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/datatype.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/errors.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/json-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/jtd-schema.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/error.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/type.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/values.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/index.d.ts","../../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/jtd.d.ts","../../../node_modules/.pnpm/@fastify+ajv-compiler@4.0.5/node_modules/@fastify/ajv-compiler/types/index.d.ts","../../../node_modules/.pnpm/@fastify+error@4.2.0/node_modules/@fastify/error/types/index.d.ts","../../../node_modules/.pnpm/fast-json-stringify@6.3.0/node_modules/fast-json-stringify/types/index.d.ts","../../../node_modules/.pnpm/@fastify+fast-json-stringify-compiler@5.0.3/node_modules/@fastify/fast-json-stringify-compiler/types/index.d.ts","../../../node_modules/.pnpm/find-my-way@9.5.0/node_modules/find-my-way/index.d.ts","../../../node_modules/.pnpm/light-my-request@6.6.0/node_modules/light-my-request/types/index.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/utils.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/schema.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/type-provider.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/reply.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/buffer@5.6.0/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@24.13.2/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.d.ts","../../../node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/types/index.d.ts","../../../node_modules/.pnpm/thread-stream@4.0.0/node_modules/thread-stream/index.d.ts","../../../node_modules/.pnpm/pino@10.3.1/node_modules/pino/pino.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/logger.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/plugin.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/register.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/instance.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/hooks.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/route.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/context.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/request.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/content-type-parser.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/errors.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/types/server-factory.d.ts","../../../node_modules/.pnpm/fastify@5.8.5/node_modules/fastify/fastify.d.ts","../../../node_modules/.pnpm/openapi-types@12.1.3/node_modules/openapi-types/dist/index.d.ts","../../../node_modules/.pnpm/@fastify+swagger@9.7.0/node_modules/@fastify/swagger/index.d.ts","../../shared/node/fastify/dist/swagger.d.ts","../../shared/node/fastify/dist/types.d.ts","../../shared/node/fastify/dist/auth.d.ts","../../shared/node/fastify/dist/clienterror.d.ts","../../shared/node/fastify/dist/errorhandler.d.ts","../../shared/node/fastify/dist/webhook-raw-body.d.ts","../../shared/node/fastify/dist/webhook-signature.d.ts","../../shared/node/fastify/dist/index.d.ts","./src/index.ts"],"fileIdsList":[[147,156,223,278,295,296,355],[139,223,278,295,296],[146,223,278,295,296],[140,141,142,143,144,145,223,278,295,296],[149,223,278,295,296],[155,223,278,295,296],[139,150,151,152,223,278,295,296],[148,151,152,153,154,223,278,295,296],[139,150,223,278,295,296],[223,278,295,296,345,349],[223,278,295,296],[223,278,292,295,296,345],[223,278,295,296,345,348,349,350,351,352,353,354],[223,278,295,296,345,347],[139,223,278,295,296,345,348],[223,278,295,296,345],[197,201,210,223,278,295,296],[213,223,278,295,296],[223,278,295,296,345,346,347],[223,275,276,278,295,296],[223,277,278,295,296],[278,295,296],[223,278,283,295,296,314],[223,278,279,284,289,295,296,298,311,322],[223,278,279,280,289,295,296,298],[223,278,281,295,296,323],[223,278,282,283,290,295,296,300],[223,278,283,295,296,311,319],[223,278,284,286,289,295,296,298],[223,277,278,285,295,296],[223,278,286,287,295,296],[223,278,288,289,295,296],[223,277,278,289,295,296],[223,278,289,290,291,295,296,311,322],[223,278,289,290,291,295,296,306,311,314],[223,270,278,286,289,292,295,296,298,311,322],[223,278,289,290,292,293,295,296,298,311,319,322],[223,278,292,294,295,296,311,319,322],[221,222,223,224,225,226,227,228,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328],[223,278,289,295,296],[223,278,295,296,297,322],[223,278,286,289,295,296,298,311],[223,278,295,296,300],[223,278,295,296,301],[223,277,278,295,296,302],[223,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328],[223,278,295,296,304],[223,278,295,296,305],[223,278,289,295,296,306,307],[223,278,295,296,306,308,323,325],[223,278,290,295,296],[223,278,289,295,296,311,312,314],[223,278,295,296,313,314],[223,278,295,296,311,312],[223,278,295,296,314],[223,278,295,296,315],[223,275,278,295,296,311,316,322],[223,278,289,295,296,317,318],[223,278,295,296,317,318],[223,278,283,295,296,298,311,319],[223,278,295,296,320],[223,278,295,296,298,321],[223,278,292,295,296,305,322],[223,278,283,295,296,323],[223,278,295,296,311,324],[223,278,295,296,297,325],[223,278,295,296,326],[223,278,283,295,296],[223,270,278,295,296],[223,278,295,296,327],[223,270,278,289,291,295,296,302,311,314,322,324,325,327],[223,278,295,296,311,328],[160,161,165,192,193,195,196,197,199,200,223,278,295,296],[158,159,223,278,295,296],[158,223,278,295,296],[160,200,223,278,295,296],[160,161,197,198,200,223,278,295,296],[200,223,278,295,296],[157,200,201,223,278,295,296],[160,161,199,200,223,278,295,296],[160,161,163,164,199,200,223,278,295,296],[160,161,162,199,200,223,278,295,296],[160,161,165,192,193,194,195,196,199,200,223,278,295,296],[160,165,194,195,196,197,199,200,209,223,278,295,296],[157,160,161,165,197,199,223,278,295,296],[165,200,223,278,295,296],[167,168,169,170,171,172,173,174,175,176,200,223,278,295,296],[190,200,223,278,295,296],[166,177,185,186,187,188,189,191,223,278,295,296],[190,200,202,223,278,295,296],[200,202,223,278,295,296],[200,203,204,205,206,207,208,223,278,295,296],[165,200,202,223,278,295,296],[170,200,223,278,295,296],[178,179,180,181,182,183,184,200,223,278,295,296],[201,223,278,295,296],[211,212,214,215,216,217,218,219,220,223,278,292,293,294,295,296,298,334,335,336,337,338,339,340,341,342,343,344],[217,218,219,223,278,295,296,339,341],[217,223,278,295,296,339],[212,223,278,295,296],[212,217,218,219,220,223,278,295,296,311,334,335,336,337,339,341],[212,215,216,217,218,219,220,223,278,292,295,296,298,334,336,338,339,341,342,345],[212,217,218,219,220,223,278,295,296,333,337,339,341],[217,219,223,278,295,296,334,337],[217,223,278,295,296,334,335,337,345],[217,218,219,223,278,295,296,334,337,339,341],[211,217,218,219,223,278,295,296,334,337,339,340],[212,215,217,218,219,220,223,278,295,296,334,337,338,340,341],[211,214,223,278,295,296,345],[217,223,278,292,293,294,295,296],[217,218,223,278,295,296,339],[223,278,292,293,294,295,296],[223,278,292,293,295,296],[223,278,292,295,296,311],[223,278,292,295,296,329],[223,278,289,295,296,327,330,331,332],[223,278,289,295,296,329],[223,278,289,295,296,327],[223,235,238,241,242,278,295,296,322],[223,238,278,295,296,311,322],[223,238,242,278,295,296,322],[223,278,295,296,311],[223,232,278,295,296],[223,236,278,295,296],[223,234,235,238,278,295,296,322],[223,278,295,296,298,319],[223,278,295,296,329],[223,232,278,295,296,329],[223,234,238,278,295,296,298,322],[223,229,230,231,233,237,278,289,295,296,311,322],[223,238,247,255,278,295,296],[223,230,236,278,295,296],[223,238,264,265,278,295,296],[223,230,233,238,278,295,296,314,322,329],[223,238,278,295,296],[223,234,238,278,295,296,322],[223,229,278,295,296],[223,232,233,234,236,237,238,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,265,266,267,268,269,278,295,296],[223,238,257,260,278,286,295,296],[223,238,247,248,249,278,295,296],[223,236,238,248,250,278,295,296],[223,237,278,295,296],[223,230,232,238,278,295,296],[223,238,242,248,250,278,295,296],[223,242,278,295,296],[223,236,238,241,278,295,296,322],[223,230,234,238,247,278,295,296],[223,238,257,278,295,296],[223,250,278,295,296],[223,232,238,264,278,295,296,314,327,329],[138,223,278,295,296],[129,223,278,295,296],[129,132,223,278,295,296],[64,124,127,129,130,131,132,133,134,135,136,137,223,278,295,296],[60,62,132,223,278,295,296],[129,130,223,278,295,296],[61,129,131,223,278,295,296],[62,64,66,67,68,69,223,278,295,296],[64,66,68,69,223,278,295,296],[64,66,68,223,278,295,296],[61,64,66,67,69,223,278,295,296],[60,62,63,64,65,66,67,68,69,70,71,124,125,126,127,128,223,278,295,296],[60,62,63,66,223,278,295,296],[62,63,66,223,278,295,296],[66,69,223,278,295,296],[60,61,63,64,65,67,68,69,223,278,295,296],[60,61,62,66,129,223,278,295,296],[66,67,68,69,223,278,295,296],[68,223,278,295,296],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,223,278,295,296]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"109b3d62ea59acfdd07982c317f963f7f2d3545ca95b480a4347233586913cde","impliedFormat":99},{"version":"97666d28ffe69f4e287f0b399b8d962dac2f12d4334e5d105245328e2b2b65fe","impliedFormat":99},{"version":"34dd3eee68585dfc5ce5cd32f3a9e8177f44c9fd67d90a60d687e9b7dc4fa660","impliedFormat":99},{"version":"b996df167b69e23386c73fcf867a588cbcdd7b79f85adf4c2be3f3024065002a","impliedFormat":99},{"version":"b9c7beaa560145004d83edc603590e7a02102523e129100ff077f001f0cc5087","impliedFormat":99},{"version":"1426f49725b731e4feb96e209ae006ff89d12ab19f8aca9f1be8194fd3b2f5ea","impliedFormat":99},{"version":"917a6e73b3a8354db3de9a537a0fb61df2101063c7e9ef5373bedd2f199d9f29","impliedFormat":99},{"version":"3213e8b1ea184d138e17c95eacc99d05e0a78328de691fe54997407fd853c0dd","impliedFormat":99},{"version":"f1384fc6bbadcd91a6ceedf6d0882370331eb23999ecb2eee33cea5b447816bf","impliedFormat":99},{"version":"4988589eb4b0e1344b61859d9d674a77f47a1b2a4be40aba87ed72569979841f","impliedFormat":99},{"version":"7bbc3c459beb45e5472a8431ed60836d888e1898b9bed8c5019397f90e25adec","impliedFormat":99},{"version":"1a70b73c9dde763befda52576f8f36bc88df0c6f9fa5c8da0f383bc8f684ecce","impliedFormat":99},{"version":"79204cbfe0d9f6562b3ce9fc24ef0fd73a9d20df93168cc8d142ddfb88554f4f","impliedFormat":99},{"version":"541bf05382749ce1587825c91ed9ea0c3b97adf1af04aff5782479ff8f055460","impliedFormat":99},{"version":"42c222ef1082756d87fd201181826d45f203d888ce287bec9a8a13eb93709757","impliedFormat":99},{"version":"6f62f993c5344db4dd9f5c61a2d62889d68c34a910951a9faa29ed7aeb8f50c0","impliedFormat":99},{"version":"0466ecc52807fe4fad35f9ed8249768f73189c764333e537771346bf49f31e4b","impliedFormat":99},{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"4304f640f7cb4724ea82441accb7c7607fa7207541182470d625adda99b2900b","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"a6613ee552418429af38391e37389036654a882c342a1b81f2711e8ddac597f2","impliedFormat":1},{"version":"da47cb979ae4a849f9b983f43ef34365b7050c4f5ae2ebf818195858774e1d67","impliedFormat":1},{"version":"ac3bcb82d7280fc313a967f311764258d18caf33db6d2b1a0243cde607ff01a0","impliedFormat":1},{"version":"c9b5632d6665177030428d02603aeac3e920d31ec83ac500b55d44c7da74bd84","impliedFormat":1},{"version":"46456824df16d60f243a7e386562b27bac838aaba66050b9bc0f31e1ab34c1f2","impliedFormat":1},{"version":"b91034069e217212d8dda6c92669ee9f180b4c36273b5244c3be2c657f9286c7","impliedFormat":1},{"version":"0697277dd829ac2610d68fe1b457c9e758105bb52d40e149d9c15e5e2fe6dca4","impliedFormat":1},{"version":"b0d06dbb409369169143ede5df1fb58b2fca8d44588e199bd624b6f6d966bf08","impliedFormat":1},{"version":"88dfdb2a44912a28aea3ebb657dc7fcec6ba59f7233005e3405824995b713dac","impliedFormat":1},{"version":"f38a45cbc0356dfb6455211e75ecd0f8aeaedbacd4cb8d6646c818d36a46d195","impliedFormat":1},{"version":"cc2d5d5687bdf9d7c49b6946b8769ac7abcbdcd1701d9bb9ca70a8bc1b003e8b","impliedFormat":1},{"version":"6f1fabd39b8c9a66a3232030a4b28ed4fb4f857dcffef0add3220dab4bbba77a","impliedFormat":1},{"version":"9c0623d67471ddc5b9d82b4e06252c746d54f7ae8ccff8701cd51c249f7e7694","impliedFormat":1},{"version":"49f6e5eb1e6d34bd4a63d26294f48c046e467e9f58b5ed10943aae4cabb778da","impliedFormat":1},{"version":"f69b484edf398d636992757d587e7e38ea91844a66dbca9d682c9cf7858b77cf","impliedFormat":1},{"version":"37d852b3e6b30b974178674dbf2a7974a1ea4bbdbec26d0bdb8f34632cab94a2","impliedFormat":1},{"version":"c3ccf44723b474b5d7a87c53eed9711e81422f0e29b3e8f8f8d42775fa802243","impliedFormat":1},{"version":"faeaf9586ba4505448bd0fdb332509a7e3ecca5d8ae10208950a5d03e8b4ea28","impliedFormat":1},{"version":"c3a0295707fde0cb51ca784ecb799aa95ca71c40337b5ee4a81a8f7134dd7e92","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"1cbdcdef62bf42688e5d825898c3a59458466c48ad8a4ef3f88d8a1cd04310d6","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"5b22bf96be06fca1e134e3a85351ffe7aa2edf0c9a5bd175b7239ee48186dbf5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"5b48cc670da1dfe926036deaf349085caf822def460a6d50de23f1cc12a5f8cd","impliedFormat":1},{"version":"418f34087d52d001e2688a6282a5de9bf583ff771ed5546af0ae36e4f60a458b","affectsGlobalScope":true,"impliedFormat":1},{"version":"036c9a03b01281f99f8251fdc7088e894566be44b3f139a9d48501a978b611df","impliedFormat":1},{"version":"ef18cbf1d8374576e3db03ff33c2c7499845972eb0c4adf87392949709c5e160","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1569ad5969ae0de6ad0bdfaaab0dabcd8878bc3147ab096206eed2019bb84e7f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"42a350ce4f6f291198dc89833afcc4fd078248b4e1fdc9d05c846c66a670f710","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"b03754211d839cdc48979996525a32eb62130682c2f9801dfc2f25533ce7238d","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"f4d99ac08c4097a3cc202bec2c7198c19dcdd80d4ec6c62d1356b10d03b119d5","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ca77e83162eccec633513723d178d4203bdd5465297267696be08013bab0aa1d","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"f61c153d5abbe4381a1fba0d41be0babdd5de51c626ee7ff14cede14dedc33f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7803171d745ab18e77f16bf82e742268ff72b7f7382ab191e4277527580c2d89","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e9ba65cd3d6d194bdda7343f9f2917f7144ead96a924ca58d1a14919992dc20","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"0b0dfb2d3e8420ead06f6a11acfb02ddcec42257e6ce391993e895ba0af86de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"e34aecf8d244b86b519e778b9a85e05f877119f4e920c635f8ee024bb4c354c8","impliedFormat":1},{"version":"e40f9840e4686053a5d42b39fddfd6774172a3d12fa61c1edb8c35b452a5e74a","impliedFormat":1},{"version":"c034433fe3ebd5391d0078de0193306591f61e421697a217cbeb92bd5e0f6ebc","impliedFormat":1},{"version":"479a021fec9328c8ab37f9372dcdc1022d79aeedde6febf03942b4456d1591c9","impliedFormat":1},{"version":"68d25a0614893e256a9e6fe18e2b125dbdad694381b57e63320de6a7518e47fc","impliedFormat":1},{"version":"49b89a0b4b3b3e18cbf726a9c608d622b4f6d49304076fc01c10f93833c70f09","impliedFormat":1},{"version":"4f62dc739ef3b99a93779255f85e51f02ce411d63cf294ee654258ff8c1978e4","impliedFormat":1},{"version":"3fa13ab73c7307a308bba2f9ca5cea92b74cbdae348a7ba1f5ac094fde7286c2","impliedFormat":1},{"version":"64102e00cb41de7f423608037d17dff83954904383e5c45f1054c2246cf5e184","impliedFormat":1},{"version":"5cf7ebe883e54b764af73548dbbef8887c640f1fd896f4d8b935b027d9989728","impliedFormat":1},{"version":"05e29a500e59cc5697947ee0fa9390e88ff008ec76be1f859152bda8ec01f13d","impliedFormat":1},{"version":"c89237cc87fc6e004290ae667babd0fa242e87c7de1cb49d4e5aba53391923f4","impliedFormat":1},{"version":"44b227ad122395768f07a8f1b84041b096220335b34ff7af3b8caa61731b294d","impliedFormat":1},{"version":"cfac258f114785ee4591fed69b045070da61d3ea03a9fabd750d682cc501253f","impliedFormat":1},{"version":"2df62cd6db7d86f765cfc05606bbd27b38ed7bae502b5c4d927996bcf3638d64","impliedFormat":1},{"version":"a66071f82c67ba2f4da760b3bc1bb0c66053ae7eaafb8f1e1fb9524d8c08b9e0","impliedFormat":1},{"version":"ad025800bbe8f3e88ede8beb31ce5661b8c7ecb8b342e218359a71183d6f25a4","impliedFormat":99},{"version":"ee60736e5e7eda25d5815a40b90348b67acbb7ebaf77c1daf5929aeb1b8be41e","impliedFormat":99},{"version":"4bc632a22997359536b86eb26df5933aa8d45be3289462cd53285758438f6971","impliedFormat":99},{"version":"d0423f31612a7c01ddefb63b40549cc0a7e18aaeca127a29585c0eddf8a67151","impliedFormat":99},{"version":"df9d0f045dd6920c92adf19e00e4ae99da831a937e86b2a9521e1cc6501546cd","impliedFormat":99},{"version":"f8a1bbda70a7823064f1092b903b02828ef989998dc41b1bf6fb99f26d37261d","impliedFormat":99},{"version":"3bac8e53ea4fc83e24a610c87e2fc3d273a4bfcd099744b91d8cb8941a69a238","impliedFormat":99},{"version":"14dc6af392a43f2e38c6f52db3de6d752ececff8f4390581f9c6cad8751ef7d3","impliedFormat":99},{"version":"7d4b03588aea53cf47d8f80bc8d253eca3044155729202428ae626bacdc59b2c","signature":"912187f7c550daefdf3ff4519f2dc6f2a21c231060a0d99b8c0366ec544f8a55","impliedFormat":99}],"root":[356],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[356,1],[140,2],[147,3],[141,2],[142,2],[146,4],[143,2],[144,2],[145,2],[150,5],[149,2],[156,6],[148,2],[153,7],[155,8],[151,2],[154,2],[152,9],[350,10],[351,11],[352,12],[355,13],[348,14],[349,15],[353,16],[354,11],[211,17],[212,11],[214,18],[347,19],[275,20],[276,20],[277,21],[223,22],[278,23],[279,24],[280,25],[221,11],[281,26],[282,27],[283,28],[284,29],[285,30],[286,31],[287,31],[288,32],[289,33],[290,34],[291,35],[224,11],[222,11],[292,36],[293,37],[294,38],[329,39],[295,40],[296,11],[297,41],[298,42],[300,43],[301,44],[302,45],[303,46],[304,47],[305,48],[306,49],[307,49],[308,50],[309,11],[310,51],[311,52],[313,53],[312,54],[314,55],[315,56],[316,57],[317,58],[318,59],[319,60],[320,61],[321,62],[322,63],[323,64],[324,65],[325,66],[326,67],[225,11],[226,68],[227,11],[228,11],[271,69],[272,70],[273,11],[274,55],[327,71],[328,72],[201,73],[158,11],[160,74],[159,75],[164,76],[199,77],[196,78],[198,79],[161,78],[162,80],[166,80],[165,81],[163,82],[197,83],[210,84],[195,78],[200,85],[193,11],[194,11],[167,86],[172,78],[174,78],[169,78],[170,86],[176,78],[177,87],[168,78],[173,78],[175,78],[171,78],[191,88],[190,78],[192,89],[186,78],[207,90],[205,91],[204,78],[202,76],[209,92],[206,93],[203,91],[208,91],[188,78],[187,78],[183,78],[189,94],[184,78],[185,95],[178,78],[179,78],[180,78],[181,78],[182,78],[299,11],[213,96],[157,11],[345,97],[342,98],[340,99],[343,100],[338,101],[337,102],[334,103],[335,104],[336,105],[220,106],[341,107],[339,108],[218,109],[344,110],[219,111],[217,112],[215,113],[216,114],[346,11],[330,115],[333,116],[331,117],[332,118],[58,11],[59,11],[11,11],[10,11],[2,11],[12,11],[13,11],[14,11],[15,11],[16,11],[17,11],[18,11],[19,11],[3,11],[20,11],[21,11],[4,11],[22,11],[26,11],[23,11],[24,11],[25,11],[27,11],[28,11],[29,11],[5,11],[30,11],[31,11],[32,11],[33,11],[6,11],[37,11],[34,11],[35,11],[36,11],[38,11],[7,11],[39,11],[44,11],[45,11],[40,11],[41,11],[42,11],[43,11],[8,11],[49,11],[46,11],[47,11],[48,11],[50,11],[9,11],[51,11],[52,11],[53,11],[55,11],[54,11],[56,11],[1,11],[57,11],[247,119],[259,120],[244,121],[260,122],[269,123],[235,124],[236,125],[234,126],[268,127],[263,128],[267,129],[238,130],[256,131],[237,132],[266,133],[232,134],[233,128],[239,135],[240,11],[246,136],[243,135],[230,137],[270,138],[261,139],[250,140],[249,135],[251,141],[254,142],[248,143],[252,144],[264,127],[241,145],[242,146],[255,147],[231,122],[258,148],[257,135],[245,146],[253,149],[262,11],[229,11],[265,150],[139,151],[133,152],[137,153],[134,153],[130,152],[138,154],[135,155],[136,153],[131,156],[132,157],[126,158],[67,159],[69,160],[125,11],[68,161],[129,162],[128,163],[127,164],[60,11],[70,159],[71,11],[62,165],[66,166],[61,11],[63,167],[64,168],[65,11],[72,169],[73,169],[74,169],[75,169],[76,169],[77,169],[78,169],[79,169],[80,169],[81,169],[82,169],[83,169],[84,169],[85,169],[87,169],[86,169],[88,169],[89,169],[90,169],[91,169],[92,169],[124,170],[93,169],[94,169],[95,169],[96,169],[97,169],[98,169],[99,169],[100,169],[101,169],[102,169],[103,169],[104,169],[105,169],[107,169],[106,169],[108,169],[109,169],[110,169],[111,169],[112,169],[113,169],[114,169],[115,169],[116,169],[117,169],[118,169],[119,169],[120,169],[123,169],[121,169],[122,169]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356],"latestChangedDtsFile":"./dist/index.d.ts","checkPending":true,"version":"6.0.3"}
package/tsconfig.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "files": [],
3
+ "references": [{ "path": "tsconfig.build.json" }]
4
+ }
@@ -0,0 +1,3 @@
1
+ import {defineConfig, type UserConfigExport} from '@shipfox/vitest';
2
+
3
+ export default defineConfig({}, import.meta.url) as UserConfigExport;