@mcp-z/oauth-microsoft 1.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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/dist/cjs/index.d.cts +16 -0
  4. package/dist/cjs/index.d.ts +16 -0
  5. package/dist/cjs/index.js +112 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/lib/dcr-router.d.cts +44 -0
  8. package/dist/cjs/lib/dcr-router.d.ts +44 -0
  9. package/dist/cjs/lib/dcr-router.js +1227 -0
  10. package/dist/cjs/lib/dcr-router.js.map +1 -0
  11. package/dist/cjs/lib/dcr-utils.d.cts +160 -0
  12. package/dist/cjs/lib/dcr-utils.d.ts +160 -0
  13. package/dist/cjs/lib/dcr-utils.js +860 -0
  14. package/dist/cjs/lib/dcr-utils.js.map +1 -0
  15. package/dist/cjs/lib/dcr-verify.d.cts +53 -0
  16. package/dist/cjs/lib/dcr-verify.d.ts +53 -0
  17. package/dist/cjs/lib/dcr-verify.js +193 -0
  18. package/dist/cjs/lib/dcr-verify.js.map +1 -0
  19. package/dist/cjs/lib/fetch-with-timeout.d.cts +14 -0
  20. package/dist/cjs/lib/fetch-with-timeout.d.ts +14 -0
  21. package/dist/cjs/lib/fetch-with-timeout.js +257 -0
  22. package/dist/cjs/lib/fetch-with-timeout.js.map +1 -0
  23. package/dist/cjs/lib/token-verifier.d.cts +44 -0
  24. package/dist/cjs/lib/token-verifier.d.ts +44 -0
  25. package/dist/cjs/lib/token-verifier.js +253 -0
  26. package/dist/cjs/lib/token-verifier.js.map +1 -0
  27. package/dist/cjs/package.json +1 -0
  28. package/dist/cjs/providers/dcr.d.cts +110 -0
  29. package/dist/cjs/providers/dcr.d.ts +110 -0
  30. package/dist/cjs/providers/dcr.js +600 -0
  31. package/dist/cjs/providers/dcr.js.map +1 -0
  32. package/dist/cjs/providers/device-code.d.cts +179 -0
  33. package/dist/cjs/providers/device-code.d.ts +179 -0
  34. package/dist/cjs/providers/device-code.js +896 -0
  35. package/dist/cjs/providers/device-code.js.map +1 -0
  36. package/dist/cjs/providers/loopback-oauth.d.cts +125 -0
  37. package/dist/cjs/providers/loopback-oauth.d.ts +125 -0
  38. package/dist/cjs/providers/loopback-oauth.js +1325 -0
  39. package/dist/cjs/providers/loopback-oauth.js.map +1 -0
  40. package/dist/cjs/schemas/index.d.cts +20 -0
  41. package/dist/cjs/schemas/index.d.ts +20 -0
  42. package/dist/cjs/schemas/index.js +37 -0
  43. package/dist/cjs/schemas/index.js.map +1 -0
  44. package/dist/cjs/setup/config.d.cts +113 -0
  45. package/dist/cjs/setup/config.d.ts +113 -0
  46. package/dist/cjs/setup/config.js +246 -0
  47. package/dist/cjs/setup/config.js.map +1 -0
  48. package/dist/cjs/types.d.cts +188 -0
  49. package/dist/cjs/types.d.ts +188 -0
  50. package/dist/cjs/types.js +18 -0
  51. package/dist/cjs/types.js.map +1 -0
  52. package/dist/esm/index.d.ts +16 -0
  53. package/dist/esm/index.js +16 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/lib/dcr-router.d.ts +44 -0
  56. package/dist/esm/lib/dcr-router.js +556 -0
  57. package/dist/esm/lib/dcr-router.js.map +1 -0
  58. package/dist/esm/lib/dcr-utils.d.ts +160 -0
  59. package/dist/esm/lib/dcr-utils.js +270 -0
  60. package/dist/esm/lib/dcr-utils.js.map +1 -0
  61. package/dist/esm/lib/dcr-verify.d.ts +53 -0
  62. package/dist/esm/lib/dcr-verify.js +53 -0
  63. package/dist/esm/lib/dcr-verify.js.map +1 -0
  64. package/dist/esm/lib/fetch-with-timeout.d.ts +14 -0
  65. package/dist/esm/lib/fetch-with-timeout.js +30 -0
  66. package/dist/esm/lib/fetch-with-timeout.js.map +1 -0
  67. package/dist/esm/lib/token-verifier.d.ts +44 -0
  68. package/dist/esm/lib/token-verifier.js +53 -0
  69. package/dist/esm/lib/token-verifier.js.map +1 -0
  70. package/dist/esm/package.json +1 -0
  71. package/dist/esm/providers/dcr.d.ts +110 -0
  72. package/dist/esm/providers/dcr.js +235 -0
  73. package/dist/esm/providers/dcr.js.map +1 -0
  74. package/dist/esm/providers/device-code.d.ts +179 -0
  75. package/dist/esm/providers/device-code.js +417 -0
  76. package/dist/esm/providers/device-code.js.map +1 -0
  77. package/dist/esm/providers/loopback-oauth.d.ts +125 -0
  78. package/dist/esm/providers/loopback-oauth.js +643 -0
  79. package/dist/esm/providers/loopback-oauth.js.map +1 -0
  80. package/dist/esm/schemas/index.d.ts +20 -0
  81. package/dist/esm/schemas/index.js +18 -0
  82. package/dist/esm/schemas/index.js.map +1 -0
  83. package/dist/esm/setup/config.d.ts +113 -0
  84. package/dist/esm/setup/config.js +268 -0
  85. package/dist/esm/setup/config.js.map +1 -0
  86. package/dist/esm/types.d.ts +188 -0
  87. package/dist/esm/types.js +8 -0
  88. package/dist/esm/types.js.map +1 -0
  89. package/package.json +87 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Standalone types for Microsoft OAuth
3
+ * No dependencies on other @mcp-z packages except @mcp-z/oauth
4
+ */
5
+ import type { AuthFlowDescriptor, CachedToken, DcrClientInformation, DcrClientMetadata, Logger, OAuth2TokenStorageProvider, ProviderTokens, ToolHandler, ToolModule, UserAuthProvider } from '@mcp-z/oauth';
6
+ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
7
+ import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { Keyv } from 'keyv';
9
+ export type { Logger, CachedToken, ToolModule, ProviderTokens, DcrClientMetadata, DcrClientInformation };
10
+ export { AuthRequiredError } from '@mcp-z/oauth';
11
+ export type { ToolHandler, AuthFlowDescriptor, OAuth2TokenStorageProvider, UserAuthProvider, RequestHandlerExtra, ServerRequest, ServerNotification };
12
+ /**
13
+ * Microsoft service types that support OAuth
14
+ * OAuth clients support all Microsoft services provided by Microsoft Graph
15
+ * @public
16
+ */
17
+ export type MicrosoftService = string;
18
+ /**
19
+ * OAuth client configuration for upstream provider
20
+ * @public
21
+ */
22
+ export interface OAuthClientConfig {
23
+ /** OAuth client ID for upstream provider */
24
+ clientId: string;
25
+ /** OAuth client secret (optional for some flows) */
26
+ clientSecret?: string;
27
+ /** Tenant/directory ID (for multi-tenant providers) */
28
+ tenantId?: string;
29
+ }
30
+ /**
31
+ * Microsoft OAuth configuration interface.
32
+ * Contains all OAuth-related configuration from CLI arguments and environment variables.
33
+ * @public
34
+ */
35
+ export interface OAuthConfig {
36
+ /** OAuth client ID */
37
+ clientId: string;
38
+ /** OAuth client secret (optional for public clients) */
39
+ clientSecret?: string;
40
+ /** Azure AD tenant ID */
41
+ tenantId: string;
42
+ /** OAuth adapter mode */
43
+ auth: 'loopback-oauth' | 'device-code' | 'dcr';
44
+ /** Whether to run in headless mode (no browser interaction) */
45
+ headless: boolean;
46
+ /** Optional redirect URI override (defaults to ephemeral loopback) */
47
+ redirectUri?: string;
48
+ }
49
+ /**
50
+ * DCR configuration for dynamic client registration
51
+ * @public
52
+ */
53
+ export interface DcrConfig {
54
+ /** DCR mode: self-hosted (runs own OAuth server) or external (uses Auth0/Stitch) */
55
+ mode: 'self-hosted' | 'external';
56
+ /** External verification endpoint URL (required for external mode) */
57
+ verifyUrl?: string;
58
+ /** DCR client storage URI (required for self-hosted mode) */
59
+ storeUri?: string;
60
+ /** OAuth client ID for Microsoft Graph */
61
+ clientId: string;
62
+ /** OAuth client secret (optional for public clients) */
63
+ clientSecret?: string;
64
+ /** Azure AD tenant ID */
65
+ tenantId: string;
66
+ /** OAuth scopes to request */
67
+ scope: string;
68
+ /** Logger instance */
69
+ logger?: Logger;
70
+ }
71
+ /**
72
+ * Configuration for loopback OAuth client
73
+ * @public
74
+ */
75
+ export interface LoopbackOAuthConfig {
76
+ /** Microsoft service type (e.g., 'outlook') */
77
+ service: MicrosoftService;
78
+ /** OAuth client ID */
79
+ clientId: string;
80
+ /** OAuth client secret (optional for public clients) */
81
+ clientSecret?: string | undefined;
82
+ /** Azure AD tenant ID */
83
+ tenantId: string;
84
+ /** OAuth scopes to request */
85
+ scope: string;
86
+ /** Whether to run in headless mode (no browser interaction) */
87
+ headless: boolean;
88
+ /** Logger instance */
89
+ logger: Logger;
90
+ /** Token storage */
91
+ tokenStore: Keyv<unknown>;
92
+ /** Optional redirect URI override (defaults to ephemeral loopback) */
93
+ redirectUri?: string;
94
+ }
95
+ /**
96
+ * Microsoft Graph AuthenticationProvider interface
97
+ * Used by Microsoft Graph SDK for API authentication
98
+ * @public
99
+ */
100
+ export interface MicrosoftAuthProvider {
101
+ getAccessToken: () => Promise<string>;
102
+ }
103
+ /**
104
+ * Auth context injected into extra by middleware
105
+ * @public
106
+ */
107
+ export interface AuthContext {
108
+ /**
109
+ * Microsoft Graph AuthenticationProvider ready for Graph SDK
110
+ * GUARANTEED to exist when handler runs
111
+ */
112
+ auth: MicrosoftAuthProvider;
113
+ /**
114
+ * Account being used (for logging, debugging)
115
+ */
116
+ accountId: string;
117
+ }
118
+ /**
119
+ * Enriched extra with guaranteed auth context and logger
120
+ * Handlers receive this type - never plain RequestHandlerExtra
121
+ * @public
122
+ */
123
+ export interface EnrichedExtra extends RequestHandlerExtra<ServerRequest, ServerNotification> {
124
+ /**
125
+ * Auth context injected by middleware
126
+ * GUARANTEED to exist (middleware catches auth failures)
127
+ */
128
+ authContext: AuthContext;
129
+ /**
130
+ * Logger injected by middleware
131
+ * GUARANTEED to exist
132
+ */
133
+ logger: Logger;
134
+ /**
135
+ * HTTP request object (for HTTP transport scenarios)
136
+ * Optional - present when using HTTP transport with JWT/session auth
137
+ */
138
+ req?: unknown;
139
+ _meta?: {
140
+ accountId?: string;
141
+ [key: string]: unknown;
142
+ };
143
+ }
144
+ /**
145
+ * Registered client with full metadata
146
+ * Extends DcrClientInformation with internal timestamps
147
+ * @internal
148
+ */
149
+ export interface RegisteredClient extends DcrClientInformation {
150
+ /** Creation timestamp (milliseconds since epoch) */
151
+ created_at: number;
152
+ }
153
+ /**
154
+ * Authorization code data structure
155
+ * @public
156
+ */
157
+ export interface AuthorizationCode {
158
+ code: string;
159
+ client_id: string;
160
+ redirect_uri: string;
161
+ scope: string;
162
+ code_challenge?: string;
163
+ code_challenge_method?: string;
164
+ /** Microsoft provider tokens obtained during authorization */
165
+ providerTokens: ProviderTokens;
166
+ created_at: number;
167
+ expires_at: number;
168
+ }
169
+ /**
170
+ * Access token data structure
171
+ * @public
172
+ */
173
+ export interface AccessToken {
174
+ access_token: string;
175
+ token_type: 'Bearer';
176
+ expires_in: number;
177
+ refresh_token?: string;
178
+ scope: string;
179
+ client_id: string;
180
+ /** Microsoft provider tokens */
181
+ providerTokens: ProviderTokens;
182
+ created_at: number;
183
+ }
184
+ /**
185
+ * Auth required response interface
186
+ * Re-exported from @mcp-z/oauth for consistency
187
+ */
188
+ export type { AuthRequired, AuthRequiredBranch } from './schemas/index.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Standalone types for Microsoft OAuth
3
+ * No dependencies on other @mcp-z packages except @mcp-z/oauth
4
+ */ // Import shared types from base @mcp-z/oauth package
5
+ // Public types (will be re-exported)
6
+ // Internal-only types (not re-exported, used by providers)
7
+ // Re-export error class
8
+ export { AuthRequiredError } from '@mcp-z/oauth';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/oauth/oauth-microsoft/src/types.ts"],"sourcesContent":["/**\n * Standalone types for Microsoft OAuth\n * No dependencies on other @mcp-z packages except @mcp-z/oauth\n */\n\n// Import shared types from base @mcp-z/oauth package\n// Public types (will be re-exported)\n// Internal-only types (not re-exported, used by providers)\nimport type { AuthFlowDescriptor, CachedToken, DcrClientInformation, DcrClientMetadata, Logger, OAuth2TokenStorageProvider, ProviderTokens, ToolHandler, ToolModule, UserAuthProvider } from '@mcp-z/oauth';\nimport type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';\nimport type { Keyv } from 'keyv';\n\n// Re-export only essential shared types for public API\nexport type { Logger, CachedToken, ToolModule, ProviderTokens, DcrClientMetadata, DcrClientInformation };\n\n// Re-export error class\nexport { AuthRequiredError } from '@mcp-z/oauth';\n\n// Make internal types available for internal use without exporting\nexport type { ToolHandler, AuthFlowDescriptor, OAuth2TokenStorageProvider, UserAuthProvider, RequestHandlerExtra, ServerRequest, ServerNotification };\n\n// ============================================================================\n// Core Authentication Types\n// ============================================================================\n\n/**\n * Microsoft service types that support OAuth\n * OAuth clients support all Microsoft services provided by Microsoft Graph\n * @public\n */\nexport type MicrosoftService = string;\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * OAuth client configuration for upstream provider\n * @public\n */\nexport interface OAuthClientConfig {\n /** OAuth client ID for upstream provider */\n clientId: string;\n /** OAuth client secret (optional for some flows) */\n clientSecret?: string;\n /** Tenant/directory ID (for multi-tenant providers) */\n tenantId?: string;\n}\n\n/**\n * Microsoft OAuth configuration interface.\n * Contains all OAuth-related configuration from CLI arguments and environment variables.\n * @public\n */\nexport interface OAuthConfig {\n /** OAuth client ID */\n clientId: string;\n /** OAuth client secret (optional for public clients) */\n clientSecret?: string;\n /** Azure AD tenant ID */\n tenantId: string;\n /** OAuth adapter mode */\n auth: 'loopback-oauth' | 'device-code' | 'dcr';\n /** Whether to run in headless mode (no browser interaction) */\n headless: boolean;\n /** Optional redirect URI override (defaults to ephemeral loopback) */\n redirectUri?: string;\n}\n\n/**\n * DCR configuration for dynamic client registration\n * @public\n */\nexport interface DcrConfig {\n /** DCR mode: self-hosted (runs own OAuth server) or external (uses Auth0/Stitch) */\n mode: 'self-hosted' | 'external';\n /** External verification endpoint URL (required for external mode) */\n verifyUrl?: string;\n /** DCR client storage URI (required for self-hosted mode) */\n storeUri?: string;\n /** OAuth client ID for Microsoft Graph */\n clientId: string;\n /** OAuth client secret (optional for public clients) */\n clientSecret?: string;\n /** Azure AD tenant ID */\n tenantId: string;\n /** OAuth scopes to request */\n scope: string;\n /** Logger instance */\n logger?: Logger;\n}\n\n/**\n * Configuration for loopback OAuth client\n * @public\n */\nexport interface LoopbackOAuthConfig {\n /** Microsoft service type (e.g., 'outlook') */\n service: MicrosoftService;\n /** OAuth client ID */\n clientId: string;\n /** OAuth client secret (optional for public clients) */\n clientSecret?: string | undefined;\n /** Azure AD tenant ID */\n tenantId: string;\n /** OAuth scopes to request */\n scope: string;\n /** Whether to run in headless mode (no browser interaction) */\n headless: boolean;\n /** Logger instance */\n logger: Logger;\n /** Token storage */\n tokenStore: Keyv<unknown>;\n /** Optional redirect URI override (defaults to ephemeral loopback) */\n redirectUri?: string;\n}\n\n// ============================================================================\n// Middleware Types\n// ============================================================================\n\n/**\n * Microsoft Graph AuthenticationProvider interface\n * Used by Microsoft Graph SDK for API authentication\n * @public\n */\nexport interface MicrosoftAuthProvider {\n getAccessToken: () => Promise<string>;\n}\n\n/**\n * Auth context injected into extra by middleware\n * @public\n */\nexport interface AuthContext {\n /**\n * Microsoft Graph AuthenticationProvider ready for Graph SDK\n * GUARANTEED to exist when handler runs\n */\n auth: MicrosoftAuthProvider;\n\n /**\n * Account being used (for logging, debugging)\n */\n accountId: string;\n\n /**\n * User ID (multi-tenant only)\n */\n}\n\n/**\n * Enriched extra with guaranteed auth context and logger\n * Handlers receive this type - never plain RequestHandlerExtra\n * @public\n */\nexport interface EnrichedExtra extends RequestHandlerExtra<ServerRequest, ServerNotification> {\n /**\n * Auth context injected by middleware\n * GUARANTEED to exist (middleware catches auth failures)\n */\n authContext: AuthContext;\n\n /**\n * Logger injected by middleware\n * GUARANTEED to exist\n */\n logger: Logger;\n\n /**\n * HTTP request object (for HTTP transport scenarios)\n * Optional - present when using HTTP transport with JWT/session auth\n */\n req?: unknown;\n\n // Preserve backchannel support\n _meta?: {\n accountId?: string;\n [key: string]: unknown;\n };\n}\n\n// ============================================================================\n// DCR Internal Types\n// ============================================================================\n\n/**\n * Registered client with full metadata\n * Extends DcrClientInformation with internal timestamps\n * @internal\n */\nexport interface RegisteredClient extends DcrClientInformation {\n /** Creation timestamp (milliseconds since epoch) */\n created_at: number;\n}\n\n/**\n * Authorization code data structure\n * @public\n */\nexport interface AuthorizationCode {\n code: string;\n client_id: string;\n redirect_uri: string;\n scope: string;\n code_challenge?: string;\n code_challenge_method?: string;\n /** Microsoft provider tokens obtained during authorization */\n providerTokens: ProviderTokens;\n created_at: number;\n expires_at: number;\n}\n\n/**\n * Access token data structure\n * @public\n */\nexport interface AccessToken {\n access_token: string;\n token_type: 'Bearer';\n expires_in: number;\n refresh_token?: string;\n scope: string;\n client_id: string;\n /** Microsoft provider tokens */\n providerTokens: ProviderTokens;\n created_at: number;\n}\n\n// ============================================================================\n// Schema Types\n// ============================================================================\n\n/**\n * Auth required response interface\n * Re-exported from @mcp-z/oauth for consistency\n */\nexport type { AuthRequired, AuthRequiredBranch } from './schemas/index.ts';\n"],"names":["AuthRequiredError"],"mappings":"AAAA;;;CAGC,GAED,qDAAqD;AACrD,qCAAqC;AACrC,2DAA2D;AAS3D,wBAAwB;AACxB,SAASA,iBAAiB,QAAQ,eAAe"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@mcp-z/oauth-microsoft",
3
+ "version": "1.0.0",
4
+ "description": "OAuth 2.0 client for Microsoft Graph with multi-account support, PKCE security, and swappable storage backends",
5
+ "keywords": [
6
+ "oauth2",
7
+ "microsoft-graph",
8
+ "authentication",
9
+ "multi-account",
10
+ "outlook",
11
+ "azure-ad",
12
+ "msal-alternative",
13
+ "pkce",
14
+ "graph-api",
15
+ "token-storage"
16
+ ],
17
+ "homepage": "https://github.com/mcp-z/oauth-microsoft#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/mcp-z/oauth-microsoft/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/mcp-z/oauth-microsoft.git"
24
+ },
25
+ "license": "MIT",
26
+ "author": "Kevin Malakoff <kmalakoff.info@gmail.com>",
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/esm/index.d.ts",
31
+ "import": "./dist/esm/index.js",
32
+ "require": "./dist/cjs/index.js"
33
+ },
34
+ "./package.json": "./package.json"
35
+ },
36
+ "main": "./dist/cjs/index.js",
37
+ "module": "./dist/esm/index.js",
38
+ "types": "./dist/esm/index.d.ts",
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "scripts": {
43
+ "build": "tsds build",
44
+ "format": "tsds format",
45
+ "prepublish:check": "ncp",
46
+ "prepublishOnly": "tsds validate",
47
+ "test": "npm run test:unit && npm run test:integration",
48
+ "test:engines": "nvu engines tsds test:node --no-timeouts 'test/**/*.test.ts'",
49
+ "test:integration": "tsds test:node --no-timeouts 'test/integration/**/*.test.ts'",
50
+ "test:setup": "node --env-file=.env.test test/lib/setup-token.ts",
51
+ "test:unit": "tsds test:node --no-timeouts 'test/unit/**/*.test.ts'",
52
+ "version": "tsds version"
53
+ },
54
+ "dependencies": {
55
+ "@mcp-z/oauth": "^1.0.0",
56
+ "express": "^5.0.0",
57
+ "open": "^11.0.0",
58
+ "zod": "^4.0.0"
59
+ },
60
+ "devDependencies": {
61
+ "@mcp-z/client": "^1.0.0",
62
+ "@microsoft/microsoft-graph-client": "^3.0.7",
63
+ "@modelcontextprotocol/sdk": "^1.0.0",
64
+ "@types/cors": "^2.8.19",
65
+ "@types/express": "^5.0.6",
66
+ "@types/mocha": "^10.0.10",
67
+ "@types/node": "^25.0.2",
68
+ "cors": "^2.0.0",
69
+ "dotenv": "^17.2.3",
70
+ "get-port": "^7.1.0",
71
+ "keyv": "^5.5.5",
72
+ "keyv-file": "^5.3.3",
73
+ "node-version-use": "^2.1.6",
74
+ "ts-dev-stack": "^1.21.3",
75
+ "tsds-config": "^1.0.0",
76
+ "typescript": "^5.9.3"
77
+ },
78
+ "peerDependencies": {
79
+ "keyv": "^5.5.5"
80
+ },
81
+ "engines": {
82
+ "node": ">=24"
83
+ },
84
+ "tsds": {
85
+ "source": "src/index.ts"
86
+ }
87
+ }