@ninomae/mcp-app-server 0.1.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +262 -0
  4. package/README.zh-CN.md +204 -0
  5. package/dist/identity.d.ts +27 -0
  6. package/dist/identity.d.ts.map +1 -0
  7. package/dist/identity.js +62 -0
  8. package/dist/identity.js.map +1 -0
  9. package/dist/index.d.ts +33 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +134 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/mcp.d.ts +64 -0
  14. package/dist/mcp.d.ts.map +1 -0
  15. package/dist/mcp.js +76 -0
  16. package/dist/mcp.js.map +1 -0
  17. package/dist/oauth.d.ts +33 -0
  18. package/dist/oauth.d.ts.map +1 -0
  19. package/dist/oauth.js +338 -0
  20. package/dist/oauth.js.map +1 -0
  21. package/dist/rate-limit.d.ts +20 -0
  22. package/dist/rate-limit.d.ts.map +1 -0
  23. package/dist/rate-limit.js +29 -0
  24. package/dist/rate-limit.js.map +1 -0
  25. package/dist/react.d.ts +36 -0
  26. package/dist/react.d.ts.map +1 -0
  27. package/dist/react.js +73 -0
  28. package/dist/react.js.map +1 -0
  29. package/dist/sql.d.ts +27 -0
  30. package/dist/sql.d.ts.map +1 -0
  31. package/dist/sql.js +107 -0
  32. package/dist/sql.js.map +1 -0
  33. package/dist/store.d.ts +106 -0
  34. package/dist/store.d.ts.map +1 -0
  35. package/dist/store.js +122 -0
  36. package/dist/store.js.map +1 -0
  37. package/dist/tokens.d.ts +26 -0
  38. package/dist/tokens.d.ts.map +1 -0
  39. package/dist/tokens.js +61 -0
  40. package/dist/tokens.js.map +1 -0
  41. package/dist/types.d.ts +152 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +13 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/util.d.ts +9 -0
  46. package/dist/util.d.ts.map +1 -0
  47. package/dist/util.js +48 -0
  48. package/dist/util.js.map +1 -0
  49. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAItG,OAAO,EAAE,cAAc,EAAsB,aAAa,EAAY,MAAM,UAAU,CAAC;AAGvF,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,uFAAuF;IACvF,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAClD,mJAAmJ;IACnJ,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACnE,mFAAmF;IACnF,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACxC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,oGAAoG;IACpG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,2FAA2F;IAC3F,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC9D,mDAAmD;IACnD,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACvG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CA6G3E"}
package/dist/index.js ADDED
@@ -0,0 +1,134 @@
1
+ import { AppServerError } from './types.js';
2
+ import { createTokenStore } from './tokens.js';
3
+ import * as oauth from './oauth.js';
4
+ import { describeServer, isDiscoveryRequest, registryEntry, serveMcp } from './mcp.js';
5
+ import { memoryRateLimiter } from './rate-limit.js';
6
+ export * from './types.js';
7
+ export * from './store.js';
8
+ export * from './rate-limit.js';
9
+ export * from './identity.js';
10
+ export { classifyRedirect } from './oauth.js';
11
+ function days(value, fallback) {
12
+ return Number.isFinite(value) && value > 0 && value <= 365 ? value : fallback;
13
+ }
14
+ export function createMcpAppServer(config) {
15
+ const basePath = config.basePath.replace(/\/+$/, '');
16
+ const paths = { mcp: basePath + '/mcp', schema: basePath + '/mcp/schema', oauth: basePath + '/oauth', consent: config.consentPath || '/oauth/authorize' };
17
+ const tokenPrefix = config.tokenPrefix || 'agt_';
18
+ // No catalogue → one implicit scope so OAuth clients still have something to request and consent to.
19
+ const scopes = config.scopes && Object.keys(config.scopes).length ? config.scopes : { [config.name]: { description: `Act on your behalf in ${config.name}`, required: true } };
20
+ const scopeNames = Object.keys(scopes);
21
+ const version = config.version || '1.0.0';
22
+ const tokens = createTokenStore(config.storage, tokenPrefix, days(config.accessTokenDays, 30), scopeNames);
23
+ const registrationLimit = config.registrationLimit === false ? null : config.registrationLimit || { limiter: memoryRateLimiter() };
24
+ const origins = (request) => (typeof config.origins === 'function' ? config.origins(request) : config.origins);
25
+ const runtime = (request) => ({
26
+ store: config.storage,
27
+ origins: origins(request),
28
+ mcpPath: paths.mcp,
29
+ oauthPath: paths.oauth,
30
+ consentPath: paths.consent,
31
+ scopes,
32
+ refreshDays: days(config.refreshTokenDays, 90),
33
+ tokens,
34
+ onEvent: config.onEvent,
35
+ registrationLimit,
36
+ });
37
+ const carriesToken = (request) => (request.headers.get('authorization') || '').replace(/^Bearer\s+/i, '').trim().startsWith(tokenPrefix);
38
+ async function authenticate(request) {
39
+ if (!carriesToken(request))
40
+ return null;
41
+ const token = (request.headers.get('authorization') || '').replace(/^Bearer\s+/i, '').trim();
42
+ return tokens.verify(token, oauth.mcpResource(runtime(request)));
43
+ }
44
+ async function handleOauth(rt, request, pathname) {
45
+ const method = request.method.toUpperCase();
46
+ try {
47
+ if (pathname === paths.oauth + '/register' && method === 'POST')
48
+ return await oauth.register(rt, request);
49
+ if (pathname === paths.oauth + '/authorize' && method === 'GET')
50
+ return await oauth.authorize(rt, request);
51
+ if (pathname === paths.oauth + '/client' && method === 'GET')
52
+ return await oauth.clientInfo(rt, request);
53
+ if (pathname === paths.oauth + '/token' && method === 'POST') {
54
+ await oauth.pruneOauth(rt);
55
+ return await oauth.token(rt, request);
56
+ }
57
+ if (pathname === paths.oauth + '/approve' && method === 'POST') {
58
+ // The consent page posts with whatever credential the host's own login uses; only the host can read it.
59
+ if (carriesToken(request))
60
+ throw new AppServerError(403, 'Agents cannot approve grants', 'access_denied');
61
+ const identity = await config.identity.resolve(request);
62
+ return await oauth.approve(rt, request, identity.id);
63
+ }
64
+ throw new AppServerError(404, 'Unknown OAuth endpoint');
65
+ }
66
+ catch (error) {
67
+ if (error instanceof AppServerError)
68
+ return oauth.oauthErrorResponse(error);
69
+ throw error;
70
+ }
71
+ }
72
+ async function handleMcp(rt, request) {
73
+ const method = request.method.toUpperCase();
74
+ const anonymous = !request.headers.has('authorization');
75
+ if (anonymous && method === 'POST' && config.anonymousDiscovery !== false && (await isDiscoveryRequest(request))) {
76
+ return serveMcp({ name: config.name, version, tools: config.tools, request, ctx: null });
77
+ }
78
+ let grant;
79
+ try {
80
+ grant = await authenticate(request);
81
+ }
82
+ catch (error) {
83
+ if (error instanceof AppServerError)
84
+ return oauth.challengeResponse(rt, error.code, error.message, error.status);
85
+ throw error;
86
+ }
87
+ if (!grant)
88
+ return oauth.challengeResponse(rt, 'invalid_token', 'Authorize this agent with OAuth first');
89
+ const ctx = { ownerId: grant.ownerId, scopes: grant.scopes, grantId: grant.grantId, clientId: grant.clientId, clientName: grant.clientName, request };
90
+ const tools = config.tools.map((tool) => ({
91
+ ...tool,
92
+ handler: async (args, c) => {
93
+ const result = await tool.handler(args, c);
94
+ await config.onEvent?.({ type: 'tool', ownerId: c.ownerId, grantId: c.grantId, clientId: c.clientId, clientName: c.clientName, tool: tool.name, ok: !result.isError });
95
+ return result;
96
+ },
97
+ }));
98
+ return serveMcp({ name: config.name, version, tools, request, ctx });
99
+ }
100
+ return {
101
+ paths,
102
+ origins,
103
+ carriesToken,
104
+ authenticate,
105
+ async ensureSchema() {
106
+ await config.storage.ensureSchema?.();
107
+ },
108
+ describe: (request) => describeServer({ name: config.name, version, origins: origins(request), mcpPath: paths.mcp, scopes: scopeNames, tools: config.tools, contract: config.contract }),
109
+ serverJson: (request, namespace, description) => registryEntry({ namespace, name: config.name, version, description, origins: origins(request), mcpPath: paths.mcp }),
110
+ listGrants: (ownerId) => tokens.list(ownerId),
111
+ async revokeGrant(ownerId, grantId) {
112
+ if (!(await tokens.owns(ownerId, grantId)))
113
+ throw new AppServerError(404, 'Grant not found');
114
+ // Origins are irrelevant for revocation; a placeholder runtime keeps the signature simple.
115
+ await oauth.revokeChain(runtime(new Request('http://app.local/')), grantId);
116
+ },
117
+ async fetch(request) {
118
+ const pathname = new URL(request.url).pathname;
119
+ const method = request.method.toUpperCase();
120
+ const rt = runtime(request);
121
+ if (oauth.isWellKnownPath(rt, pathname) && method === 'GET')
122
+ return oauth.wellKnownResponse(rt, pathname);
123
+ if (pathname === paths.schema && method === 'GET') {
124
+ return new Response(JSON.stringify(this.describe(request)), { headers: { 'content-type': 'application/json; charset=utf-8', 'access-control-allow-origin': '*', 'cache-control': 'public, max-age=300' } });
125
+ }
126
+ if (pathname.startsWith(paths.oauth + '/'))
127
+ return handleOauth(rt, request, pathname);
128
+ if (pathname === paths.mcp)
129
+ return handleMcp(rt, request);
130
+ return null;
131
+ },
132
+ };
133
+ }
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ import { z } from 'zod';
2
+ import type { AgentTool, Origins, ToolContext } from './types.js';
3
+ /** True when every JSON-RPC message in the body is a metadata method that reveals no user data. */
4
+ export declare function isDiscoveryRequest(request: Request): Promise<boolean>;
5
+ export declare function visibleTools(tools: readonly AgentTool[], scopes: readonly string[]): AgentTool[];
6
+ /** Public, unauthenticated description of the MCP surface. Contains no user data. */
7
+ export declare function describeServer(input: {
8
+ name: string;
9
+ version: string;
10
+ origins: Origins;
11
+ mcpPath: string;
12
+ scopes: string[];
13
+ tools: readonly AgentTool[];
14
+ contract?: string;
15
+ }): {
16
+ contract?: string | undefined;
17
+ name: string;
18
+ version: string;
19
+ transport: string;
20
+ endpoint: string;
21
+ authorization: {
22
+ type: string;
23
+ resourceMetadata: string;
24
+ scopes: string[];
25
+ };
26
+ tools: {
27
+ name: string;
28
+ scope: string | null;
29
+ description: string;
30
+ inputSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
31
+ [x: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
32
+ }, z.core.$strip>>;
33
+ annotations: import("./types.js").ToolAnnotations;
34
+ }[];
35
+ };
36
+ /** Minimal `server.json` for the official MCP registry. Namespace is the host's (e.g. `io.github.<user>/<name>`). */
37
+ export declare function registryEntry(input: {
38
+ namespace: string;
39
+ name: string;
40
+ version: string;
41
+ description: string;
42
+ origins: Origins;
43
+ mcpPath: string;
44
+ }): {
45
+ name: string;
46
+ description: string;
47
+ version: string;
48
+ remotes: {
49
+ type: string;
50
+ url: string;
51
+ }[];
52
+ };
53
+ /**
54
+ * Serves one MCP request. `ctx` is null for anonymous discovery, in which case every tool is listed
55
+ * but the handler is never reachable because tools/call is rejected before this point.
56
+ */
57
+ export declare function serveMcp(input: {
58
+ name: string;
59
+ version: string;
60
+ tools: readonly AgentTool[];
61
+ request: Request;
62
+ ctx: ToolContext | null;
63
+ }): Promise<Response>;
64
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIlE,mGAAmG;AACnG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,oBASxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,eAElF;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;EAiB3K;AAED,qHAAqH;AACrH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;;;;EAOhJ;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,qBAoB9I"}
package/dist/mcp.js ADDED
@@ -0,0 +1,76 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
3
+ import { z } from 'zod';
4
+ const DISCOVERY_METHODS = new Set(['initialize', 'notifications/initialized', 'ping', 'tools/list']);
5
+ /** True when every JSON-RPC message in the body is a metadata method that reveals no user data. */
6
+ export async function isDiscoveryRequest(request) {
7
+ let body;
8
+ try {
9
+ body = await request.clone().json();
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ const messages = Array.isArray(body) ? body : [body];
15
+ return messages.length > 0 && messages.every((m) => m && typeof m === 'object' && DISCOVERY_METHODS.has(String(m.method)));
16
+ }
17
+ export function visibleTools(tools, scopes) {
18
+ return tools.filter((tool) => !tool.scope || scopes.includes(tool.scope));
19
+ }
20
+ /** Public, unauthenticated description of the MCP surface. Contains no user data. */
21
+ export function describeServer(input) {
22
+ const publicOrigin = input.origins.publicOrigin;
23
+ return {
24
+ name: input.name,
25
+ version: input.version,
26
+ transport: 'streamable-http',
27
+ endpoint: publicOrigin + input.mcpPath,
28
+ authorization: { type: 'oauth2', resourceMetadata: publicOrigin + '/.well-known/oauth-protected-resource', scopes: input.scopes },
29
+ tools: input.tools.map((tool) => ({
30
+ name: tool.name,
31
+ scope: tool.scope ?? null,
32
+ description: tool.description,
33
+ inputSchema: z.toJSONSchema(z.object(tool.inputSchema), { unrepresentable: 'any' }),
34
+ annotations: tool.annotations,
35
+ })),
36
+ ...(input.contract ? { contract: input.contract } : {}),
37
+ };
38
+ }
39
+ /** Minimal `server.json` for the official MCP registry. Namespace is the host's (e.g. `io.github.<user>/<name>`). */
40
+ export function registryEntry(input) {
41
+ return {
42
+ name: `${input.namespace}/${input.name}`,
43
+ description: input.description,
44
+ version: input.version,
45
+ remotes: [{ type: 'streamable-http', url: input.origins.publicOrigin + input.mcpPath }],
46
+ };
47
+ }
48
+ /**
49
+ * Serves one MCP request. `ctx` is null for anonymous discovery, in which case every tool is listed
50
+ * but the handler is never reachable because tools/call is rejected before this point.
51
+ */
52
+ export async function serveMcp(input) {
53
+ const { request } = input;
54
+ const origin = request.headers.get('origin');
55
+ if (origin && origin !== new URL(request.url).origin && !/^http:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/.test(origin))
56
+ return new Response('Origin denied', { status: 403 });
57
+ const server = new McpServer({ name: input.name, version: input.version });
58
+ const scopes = input.ctx ? input.ctx.scopes : input.tools.map((tool) => tool.scope || '').filter(Boolean);
59
+ for (const tool of visibleTools(input.tools, scopes)) {
60
+ server.registerTool(tool.name, { description: tool.description, inputSchema: tool.inputSchema, annotations: tool.annotations }, async (payload) => {
61
+ if (!input.ctx)
62
+ return { content: [{ type: 'text', text: 'Authorize this agent with OAuth first' }], isError: true };
63
+ const result = await tool.handler((payload ?? {}), input.ctx);
64
+ return { ...result };
65
+ });
66
+ }
67
+ const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true });
68
+ await server.connect(transport);
69
+ try {
70
+ return await transport.handleRequest(request);
71
+ }
72
+ finally {
73
+ await server.close();
74
+ }
75
+ }
76
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { AppServerEvent, Origins, ScopeDefinition } from './types.js';
2
+ import { AppServerError } from './types.js';
3
+ import type { AppServerStore } from './store.js';
4
+ import type { RateLimitConfig } from './rate-limit.js';
5
+ import type { TokenStore } from './tokens.js';
6
+ export interface OauthRuntime {
7
+ store: AppServerStore;
8
+ origins: Origins;
9
+ mcpPath: string;
10
+ oauthPath: string;
11
+ consentPath: string;
12
+ scopes: Record<string, ScopeDefinition>;
13
+ refreshDays: number;
14
+ tokens: TokenStore;
15
+ onEvent?: (event: AppServerEvent) => Promise<void> | void;
16
+ /** Null disables registration rate limiting. */
17
+ registrationLimit: RateLimitConfig | null;
18
+ }
19
+ export declare const mcpResource: (rt: Pick<OauthRuntime, "origins" | "mcpPath">) => string;
20
+ export declare const resourceMetadataUrl: (rt: Pick<OauthRuntime, "origins">) => string;
21
+ export declare function isWellKnownPath(rt: Pick<OauthRuntime, 'mcpPath'>, pathname: string): boolean;
22
+ export declare function wellKnownResponse(rt: OauthRuntime, pathname: string): Response;
23
+ export declare function oauthErrorResponse(error: AppServerError): Response;
24
+ export declare function challengeResponse(rt: Pick<OauthRuntime, 'origins'>, error: string, description: string, status?: number): Response;
25
+ export declare function classifyRedirect(uri: string): 'loopback' | 'custom' | 'https' | null;
26
+ export declare function register(rt: OauthRuntime, request: Request): Promise<Response>;
27
+ export declare function authorize(rt: OauthRuntime, request: Request): Promise<Response>;
28
+ export declare function clientInfo(rt: OauthRuntime, request: Request): Promise<Response>;
29
+ export declare function approve(rt: OauthRuntime, request: Request, ownerId: string): Promise<Response>;
30
+ export declare function token(rt: OauthRuntime, request: Request): Promise<Response>;
31
+ export declare function revokeChain(rt: OauthRuntime, accessTokenId: string): Promise<void>;
32
+ export declare function pruneOauth(rt: OauthRuntime): Promise<void>;
33
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,gDAAgD;IAChD,iBAAiB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,WAAW,GAAI,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC,WAAyC,CAAC;AACnH,eAAO,MAAM,mBAAmB,GAAI,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,WAAsE,CAAC;AAI5I,wBAAgB,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,WAMlF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAgBnE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,YAEvD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAM,YAMpH;AASD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAYpF;AA+BD,wBAAsB,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,qBAgChE;AAiCD,wBAAsB,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,qBAcjE;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,qBAqBlE;AAGD,wBAAsB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAahF;AAuCD,wBAAsB,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,qBA6C7D;AAQD,wBAAsB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAUxE;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,YAAY,iBAEhD"}