@apinteract/plugin-api 0.1.0-bootstrap.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 APInteract contributors
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.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # `@apinteract/plugin-api`
2
+
3
+ Stable TypeScript contracts for APInteract plugins.
4
+
5
+ ```sh
6
+ pnpm add --save-dev @apinteract/plugin-api
7
+ ```
8
+
9
+ Import the registration contract from the package root and target-specific
10
+ providers from `@apinteract/plugin-api/frontend` or
11
+ `@apinteract/plugin-api/backend`:
12
+
13
+ ```ts
14
+ import type { PluginRegistrationContext } from "@apinteract/plugin-api";
15
+ import type { FrontendPluginProviders } from "@apinteract/plugin-api/frontend";
16
+
17
+ export function register(
18
+ context: PluginRegistrationContext<FrontendPluginProviders>,
19
+ ): void {
20
+ // Register the providers declared by apinteract-plugin.json.
21
+ }
22
+ ```
23
+
24
+ The package contains declarations and the small runtime constants needed to
25
+ author a plugin. It does not depend on the APInteract application source tree.
26
+ Plugin packages should bundle every runtime dependency into their `dist/`
27
+ output.
28
+
29
+ See the [plugin development guide](https://github.com/xirelogy/apinteract/blob/main/docs/plugins/README.md)
30
+ for the package format, provider contracts, and compatibility rules.
31
+
32
+ ## License
33
+
34
+ MIT
@@ -0,0 +1,199 @@
1
+ import type { APInteractPluginModule } from "./core.js";
2
+ export type ImportProviderId = string;
3
+ export type ImportedHttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
4
+ /** Describes one variable declaration emitted by an import provider. */
5
+ export type ImportedVariableWrite = {
6
+ readonly variableId?: string;
7
+ readonly name: string;
8
+ readonly description?: string;
9
+ readonly kind: "value";
10
+ readonly value: string;
11
+ } | {
12
+ readonly variableId?: string;
13
+ readonly name: string;
14
+ readonly description?: string;
15
+ readonly kind: "secret";
16
+ readonly value?: string;
17
+ readonly clearValue?: boolean;
18
+ } | {
19
+ readonly variableId?: string;
20
+ readonly name: string;
21
+ readonly description?: string;
22
+ readonly kind: "alias";
23
+ readonly target: string;
24
+ } | {
25
+ readonly variableId?: string;
26
+ readonly name: string;
27
+ readonly description?: string;
28
+ readonly kind: "unset";
29
+ };
30
+ /** Declares one source adapter and the normalized features it may produce. */
31
+ export interface ImportProviderManifest {
32
+ readonly id: ImportProviderId;
33
+ readonly version: string;
34
+ readonly label: string;
35
+ readonly acceptedExtensions: readonly string[];
36
+ readonly acceptedMediaTypes: readonly string[];
37
+ readonly inputKinds: readonly ["file"];
38
+ readonly capabilities: {
39
+ readonly multipleRequests: boolean;
40
+ readonly hierarchy: boolean;
41
+ readonly attachments: boolean;
42
+ readonly capturedResponses: boolean;
43
+ readonly responseExamples: boolean;
44
+ readonly variables: boolean;
45
+ };
46
+ }
47
+ /** Contains one bounded source presented to import providers without I/O access. */
48
+ export interface ImportSource {
49
+ readonly name: string;
50
+ readonly text: string;
51
+ }
52
+ /** Reports how confidently a provider recognizes a bounded source. */
53
+ export interface ImportProbeResult {
54
+ readonly confidence: number;
55
+ readonly reason: string;
56
+ }
57
+ export type ImportDiagnosticSeverity = "info" | "warning" | "error";
58
+ /** Represents one editable name/value field emitted by an import provider. */
59
+ export interface ImportedRequestField {
60
+ readonly name: string;
61
+ readonly value: string;
62
+ readonly enabled: boolean;
63
+ readonly mode?: "override" | "append";
64
+ readonly description?: string;
65
+ }
66
+ /** Describes one immutable uploaded file referenced by an imported body. */
67
+ export interface ImportedRequestAttachment {
68
+ readonly attachmentId: string;
69
+ readonly workspaceId: string;
70
+ readonly fileName: string;
71
+ readonly contentType: string;
72
+ readonly byteLength: number;
73
+ readonly sha256: string;
74
+ }
75
+ /** Preserves the wire-level request body variants accepted by the backend. */
76
+ export type ImportedRequestBodyDefinition = {
77
+ readonly kind: "none";
78
+ } | {
79
+ readonly kind: "text";
80
+ readonly contentType: string | null;
81
+ readonly text: string;
82
+ } | {
83
+ readonly kind: "file";
84
+ readonly contentType: string | null;
85
+ readonly attachment: ImportedRequestAttachment;
86
+ } | {
87
+ readonly kind: "urlencoded";
88
+ readonly contentType: string | null;
89
+ readonly fields: readonly ImportedRequestField[];
90
+ } | {
91
+ readonly kind: "multipart";
92
+ readonly contentType: string | null;
93
+ readonly boundary: string;
94
+ readonly fields: readonly (ImportedRequestField | {
95
+ readonly kind: "file";
96
+ readonly name: string;
97
+ readonly enabled: boolean;
98
+ readonly description?: string;
99
+ readonly attachment: ImportedRequestAttachment;
100
+ })[];
101
+ };
102
+ /** Describes one provider-defined request-body alternative selectable at import time. */
103
+ export interface ImportedRequestBodyOption {
104
+ readonly optionId: string;
105
+ readonly label: string;
106
+ /** Stable provider-defined value used when one choice can apply to many requests. */
107
+ readonly selectionKey?: string;
108
+ readonly requestBody: ImportedRequestBodyDefinition;
109
+ /** Provider-owned Markdown appended to request notes only when this option is selected. */
110
+ readonly documentation?: string;
111
+ }
112
+ /** Describes a lossy, unsupported, or invalid source construct. */
113
+ export interface ImportDiagnostic {
114
+ readonly code: string;
115
+ readonly severity: ImportDiagnosticSeverity;
116
+ readonly message: string;
117
+ readonly itemId?: string;
118
+ readonly itemIds?: readonly string[];
119
+ readonly sourceLocation?: string;
120
+ readonly sourceLocations?: readonly string[];
121
+ }
122
+ /** Describes one provider-created collection below the imported root. */
123
+ export interface ImportedCollection {
124
+ readonly collectionKey: string;
125
+ readonly parentCollectionKey: string | null;
126
+ readonly name: string;
127
+ readonly description: string;
128
+ readonly notes: string;
129
+ readonly pathPrefix: string;
130
+ readonly variables: readonly ImportedVariableWrite[];
131
+ }
132
+ /** Preserves one recorded HTTP response without provider-controlled provenance. */
133
+ export interface ImportedCapturedExchange {
134
+ readonly capturedExchangeId?: string;
135
+ readonly label?: string;
136
+ readonly status: number;
137
+ readonly statusText: string;
138
+ readonly headers: readonly {
139
+ readonly name: string;
140
+ readonly value: string;
141
+ }[];
142
+ readonly contentType: string | null;
143
+ readonly body: string;
144
+ readonly bodyEncoding: "text" | "base64";
145
+ readonly bodyComplete: boolean;
146
+ readonly bodyBytes: number;
147
+ readonly recordedAt: string | null;
148
+ readonly importedAt?: string;
149
+ }
150
+ /** Represents one source request normalized into APInteract draft semantics. */
151
+ export interface ImportedRequest {
152
+ readonly itemId: string;
153
+ readonly sourceLocation: string;
154
+ readonly collectionKey: string | null;
155
+ readonly name: string;
156
+ readonly description: string;
157
+ readonly notes: string;
158
+ readonly method: ImportedHttpMethod;
159
+ readonly targetMode: "absolute" | "composed";
160
+ readonly targetUrl: string;
161
+ readonly query: readonly ImportedRequestField[];
162
+ readonly headers: readonly ImportedRequestField[];
163
+ readonly requestBody: ImportedRequestBodyDefinition;
164
+ readonly requestBodyOptions?: readonly ImportedRequestBodyOption[];
165
+ readonly defaultRequestBodyOptionId?: string;
166
+ readonly body: string;
167
+ readonly preRequestScript: string;
168
+ readonly postResponseScript: string;
169
+ readonly variables: readonly ImportedVariableWrite[];
170
+ readonly capturedExchange?: ImportedCapturedExchange;
171
+ readonly capturedExchanges?: readonly ImportedCapturedExchange[];
172
+ }
173
+ /** Describes a mutation-free canonical request and collection import preview. */
174
+ export interface ImportPlan {
175
+ readonly schemaVersion: 1;
176
+ readonly providerId: ImportProviderId;
177
+ readonly providerVersion: string;
178
+ readonly sourceName: string;
179
+ readonly sourceFingerprint: string;
180
+ readonly suggestedName: string;
181
+ readonly description: string;
182
+ readonly notes: string;
183
+ readonly pathPrefix: string;
184
+ readonly variables: readonly ImportedVariableWrite[];
185
+ readonly collections: readonly ImportedCollection[];
186
+ readonly requests: readonly ImportedRequest[];
187
+ readonly diagnostics: readonly ImportDiagnostic[];
188
+ }
189
+ /** Converts one supported source into a canonical import plan without mutation. */
190
+ export interface ImportProvider {
191
+ readonly manifest: ImportProviderManifest;
192
+ probe(source: ImportSource): ImportProbeResult;
193
+ parse(source: ImportSource): Omit<ImportPlan, "sourceFingerprint"> | Promise<Omit<ImportPlan, "sourceFingerprint">>;
194
+ }
195
+ /** Lists the extension providers available to backend-only plugins. */
196
+ export interface BackendPluginProviders {
197
+ readonly "request.import": ImportProvider;
198
+ }
199
+ export type BackendPluginModule = APInteractPluginModule<BackendPluginProviders>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":""}
package/dist/core.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ export type PluginTarget = "frontend" | "backend";
2
+ export type PluginSource = "built-in" | "user";
3
+ /** Current JSON manifest format generation accepted by plugin hosts. */
4
+ export declare const PLUGIN_MANIFEST_SCHEMA_VERSION = 1;
5
+ /** Current executable host/plugin compatibility generation. */
6
+ export declare const PLUGIN_API_VERSION = 1;
7
+ /** Identifies one installable plugin package and its single execution target. */
8
+ export interface PluginPackageManifest<TTarget extends PluginTarget = PluginTarget> {
9
+ /** Selects the JSON manifest format independently of the executable API. */
10
+ readonly schemaVersion: typeof PLUGIN_MANIFEST_SCHEMA_VERSION;
11
+ /** Selects one breaking-compatibility generation of the host/plugin API. */
12
+ readonly apiVersion: typeof PLUGIN_API_VERSION;
13
+ readonly id: string;
14
+ readonly name: string;
15
+ readonly version: string;
16
+ /** Higher weights are presented before lower-weight plugin contributions. */
17
+ readonly weight?: number;
18
+ readonly target: TTarget;
19
+ readonly entrypoint: string;
20
+ readonly providers: readonly string[];
21
+ }
22
+ /** Describes one successfully loaded plugin without exposing contributions. */
23
+ export interface EnabledPlugin {
24
+ readonly id: string;
25
+ readonly name: string;
26
+ readonly version: string;
27
+ readonly target: PluginTarget;
28
+ readonly source: PluginSource;
29
+ }
30
+ /** Exposes only the typed extension providers owned by one plugin host. */
31
+ export interface PluginRegistrationContext<TProviders extends object> {
32
+ register<TProvider extends Extract<keyof TProviders, string>>(provider: TProvider, contribution: TProviders[TProvider]): void;
33
+ }
34
+ /** Defines the common package signature shared by single-target plugins. */
35
+ export interface APInteractPluginModule<TProviders extends object> {
36
+ register(context: PluginRegistrationContext<TProviders>): void;
37
+ }
package/dist/core.js ADDED
@@ -0,0 +1,5 @@
1
+ /** Current JSON manifest format generation accepted by plugin hosts. */
2
+ export const PLUGIN_MANIFEST_SCHEMA_VERSION = 1;
3
+ /** Current executable host/plugin compatibility generation. */
4
+ export const PLUGIN_API_VERSION = 1;
5
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAIA,wEAAwE;AACxE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC"}
@@ -0,0 +1,198 @@
1
+ import type { APInteractPluginModule } from "./core.js";
2
+ export type RequestBodyHostKind = RequestBodyDefinition["kind"];
3
+ /** Describes one editable name/value field in a structured request body. */
4
+ export interface RequestBodyField {
5
+ readonly name: string;
6
+ readonly value: string;
7
+ readonly enabled: boolean;
8
+ readonly description?: string;
9
+ readonly mode?: "override" | "append";
10
+ }
11
+ /** Describes an immutable workspace upload referenced by a request body. */
12
+ export interface RequestAttachment {
13
+ readonly attachmentId: string;
14
+ readonly workspaceId: string;
15
+ readonly fileName: string;
16
+ readonly contentType: string;
17
+ readonly byteLength: number;
18
+ readonly sha256: string;
19
+ }
20
+ /** Describes one file positioned among multipart text fields. */
21
+ export interface MultipartFileField {
22
+ readonly kind: "file";
23
+ readonly name: string;
24
+ readonly enabled: boolean;
25
+ readonly description?: string;
26
+ readonly attachment: RequestAttachment;
27
+ }
28
+ /** Preserves the canonical HTTP wire-body forms exchanged with content plugins. */
29
+ export type RequestBodyDefinition = {
30
+ readonly kind: "none";
31
+ } | {
32
+ readonly kind: "text";
33
+ readonly contentType: string | null;
34
+ readonly text: string;
35
+ } | {
36
+ readonly kind: "file";
37
+ readonly contentType: string | null;
38
+ readonly attachment: RequestAttachment;
39
+ } | {
40
+ readonly kind: "urlencoded";
41
+ readonly contentType: string | null;
42
+ readonly fields: RequestBodyField[];
43
+ } | {
44
+ readonly kind: "multipart";
45
+ readonly contentType: string | null;
46
+ readonly boundary: string;
47
+ readonly fields: (RequestBodyField | MultipartFileField)[];
48
+ };
49
+ /** Identifies the declaration that supplied one effective variable preview. */
50
+ export interface VariablePreviewSource {
51
+ readonly scope: "workspace" | "collection" | "environment" | "request";
52
+ readonly scopeId: string;
53
+ readonly scopeName: string;
54
+ readonly revision: number;
55
+ }
56
+ /** Provides secret-safe variable resolution evidence to an editor plugin. */
57
+ export interface VariablePreview {
58
+ readonly name: string;
59
+ readonly status: "resolved" | "missing" | "unset" | "error";
60
+ readonly declaredKind: "value" | "secret" | "alias" | "unset" | null;
61
+ readonly effectiveKind: "value" | "secret" | null;
62
+ readonly aliasTarget: string | null;
63
+ readonly value: string | null;
64
+ readonly secretVersion: number | null;
65
+ readonly diagnostic: string | null;
66
+ readonly source: VariablePreviewSource | null;
67
+ }
68
+ /** Exposes only response fields required by response-content plugins. */
69
+ export interface ResponseExecution {
70
+ readonly executionId: string;
71
+ readonly headers?: readonly {
72
+ readonly name: string;
73
+ readonly value: string;
74
+ }[];
75
+ readonly bodyComplete: boolean;
76
+ readonly bodyBytes?: number;
77
+ readonly bodyPreview?: string;
78
+ readonly bodyBlobId?: string;
79
+ }
80
+ /** Names one editor language understood by a host or safely treated as plain text. */
81
+ export type CodeEditorLanguage = string;
82
+ /** Supplies a stable fallback and optional translations owned by the plugin package. */
83
+ export interface PluginLabel {
84
+ readonly default: string;
85
+ readonly translations?: Readonly<Record<string, string>>;
86
+ }
87
+ /** Returns either formatted request source or a safe user-facing parse error. */
88
+ export type RequestContentFormatResult = {
89
+ readonly valid: true;
90
+ readonly value: string;
91
+ } | {
92
+ readonly valid: false;
93
+ readonly error: string;
94
+ };
95
+ /** Updates or destroys one framework-neutral plugin view instance. */
96
+ export interface FrontendPluginViewHandle<TContext> {
97
+ update(context: TContext): void;
98
+ destroy(): void;
99
+ }
100
+ /** Mounts one plugin-owned view into a host-provided DOM container. */
101
+ export type FrontendPluginViewMount<TContext> = (container: HTMLElement, context: TContext) => FrontendPluginViewHandle<TContext>;
102
+ /** Configures the shared CodeMirror mechanism without choosing content semantics. */
103
+ export interface CodeEditorMountOptions {
104
+ readonly document: string;
105
+ readonly label: string;
106
+ readonly language?: CodeEditorLanguage;
107
+ readonly disabled?: boolean;
108
+ readonly readOnly?: boolean;
109
+ readonly foldable?: boolean;
110
+ readonly onChange?: (document: string) => void;
111
+ }
112
+ /** Configures the generic editor for canonical HTTP wire-body representations. */
113
+ export interface WireBodyEditorMountOptions {
114
+ readonly body: RequestBodyDefinition;
115
+ readonly wireKind: RequestBodyHostKind;
116
+ readonly label: string;
117
+ readonly disabled: boolean;
118
+ readonly variablePreviews: readonly VariablePreview[];
119
+ readonly uploadAttachment?: (file: File) => Promise<RequestAttachment>;
120
+ readonly codeLanguage?: CodeEditorLanguage;
121
+ readonly contentTypePlaceholder?: string;
122
+ readonly format?: (source: string) => RequestContentFormatResult;
123
+ readonly onChange: (body: RequestBodyDefinition) => void;
124
+ }
125
+ /** Configures an isolated document surface for untrusted response markup. */
126
+ export interface SandboxedDocumentMountOptions {
127
+ readonly source: string;
128
+ readonly title: string;
129
+ }
130
+ /** Configures bounded raster decoding through host-owned security policy. */
131
+ export interface ImageViewerMountOptions {
132
+ readonly executionId: string;
133
+ readonly mediaType: string;
134
+ readonly byteLength: number;
135
+ readonly loadBody: (executionId: string) => Promise<Blob>;
136
+ /** Interprets bounded header bytes without moving format knowledge into the host. */
137
+ readonly inspect: (mediaType: string, bytes: Uint8Array) => ImageDimensions | null;
138
+ }
139
+ /** Describes intrinsic raster dimensions returned by a plugin-owned inspector. */
140
+ export interface ImageDimensions {
141
+ readonly width: number;
142
+ readonly height: number;
143
+ }
144
+ /** Exposes reusable UI and security mechanisms without application internals. */
145
+ export interface FrontendPluginUi {
146
+ mountCodeEditor(container: HTMLElement, options: CodeEditorMountOptions): FrontendPluginViewHandle<CodeEditorMountOptions>;
147
+ mountWireBodyEditor(container: HTMLElement, options: WireBodyEditorMountOptions): FrontendPluginViewHandle<WireBodyEditorMountOptions>;
148
+ mountSandboxedDocument(container: HTMLElement, options: SandboxedDocumentMountOptions): FrontendPluginViewHandle<SandboxedDocumentMountOptions>;
149
+ mountImageViewer(container: HTMLElement, options: ImageViewerMountOptions): FrontendPluginViewHandle<ImageViewerMountOptions>;
150
+ }
151
+ /** Supplies canonical wire state and host mechanisms to a request editor. */
152
+ export interface RequestContentEditorContext {
153
+ readonly body: RequestBodyDefinition;
154
+ readonly disabled: boolean;
155
+ readonly locale: string;
156
+ readonly variablePreviews: readonly VariablePreview[];
157
+ readonly uploadAttachment?: (file: File) => Promise<RequestAttachment>;
158
+ readonly updateBody: (body: RequestBodyDefinition) => void;
159
+ readonly ui: FrontendPluginUi;
160
+ }
161
+ /** Contributes executable request editing over a canonical HTTP wire body. */
162
+ export interface RequestContentContribution {
163
+ readonly id: string;
164
+ readonly label: PluginLabel;
165
+ readonly mediaTypes?: readonly string[];
166
+ readonly priority?: number;
167
+ readonly order?: number;
168
+ createBody(previous: RequestBodyDefinition): RequestBodyDefinition;
169
+ isDefaultFor(body: RequestBodyDefinition): boolean;
170
+ effectiveContentType(body: RequestBodyDefinition): string | null;
171
+ mountEditor: FrontendPluginViewMount<RequestContentEditorContext>;
172
+ }
173
+ /** Provides bounded response data to one selected frontend parser/presenter. */
174
+ export interface ResponseContentPresenterContext {
175
+ readonly execution: ResponseExecution;
176
+ readonly mediaType: string;
177
+ readonly locale: string;
178
+ readonly previewComplete: boolean;
179
+ readonly previewTruncated: boolean;
180
+ readonly loadBody?: (executionId: string) => Promise<Blob>;
181
+ readonly ui: FrontendPluginUi;
182
+ }
183
+ /** Contributes one executable response viewer for deterministic media-type patterns. */
184
+ export interface ResponseContentContribution {
185
+ readonly id: string;
186
+ readonly label: PluginLabel;
187
+ readonly mediaTypes: readonly string[];
188
+ readonly priority?: number;
189
+ isAvailable?(context: Omit<ResponseContentPresenterContext, "ui">): boolean;
190
+ isDefault?(context: Omit<ResponseContentPresenterContext, "ui">): boolean;
191
+ mountView: FrontendPluginViewMount<ResponseContentPresenterContext>;
192
+ }
193
+ /** Lists the extension providers available to frontend-only plugins. */
194
+ export interface FrontendPluginProviders {
195
+ readonly "request.content": RequestContentContribution;
196
+ readonly "response.content": ResponseContentContribution;
197
+ }
198
+ export type FrontendPluginModule = APInteractPluginModule<FrontendPluginProviders>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@apinteract/plugin-api",
3
+ "version": "0.1.0-bootstrap.0",
4
+ "description": "Stable TypeScript contracts for developing APInteract plugins.",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/xirelogy/apinteract/tree/main/packages/plugin-api#readme",
7
+ "bugs": "https://github.com/xirelogy/apinteract/issues",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/xirelogy/apinteract.git",
11
+ "directory": "packages/plugin-api"
12
+ },
13
+ "type": "module",
14
+ "types": "./dist/core.d.ts",
15
+ "sideEffects": false,
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/core.d.ts",
24
+ "default": "./dist/core.js"
25
+ },
26
+ "./frontend": {
27
+ "types": "./dist/frontend.d.ts",
28
+ "default": "./dist/frontend.js"
29
+ },
30
+ "./backend": {
31
+ "types": "./dist/backend.d.ts",
32
+ "default": "./dist/backend.js"
33
+ }
34
+ },
35
+ "publishConfig": {
36
+ "access": "public",
37
+ "provenance": true,
38
+ "registry": "https://registry.npmjs.org/"
39
+ },
40
+ "devDependencies": {
41
+ "typescript": "5.9.3"
42
+ },
43
+ "scripts": {
44
+ "build": "tsc -p tsconfig.build.json",
45
+ "typecheck": "tsc --noEmit"
46
+ }
47
+ }