@floegence/redevplugin-ui 0.4.3 → 0.5.1

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,4 @@
1
+ export declare const pluginPlatformErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_ORIGIN_DENIED", "PLUGIN_ACTION_DENIED", "PLUGIN_OWNER_SCOPE_MISMATCH", "PLUGIN_SECRET_SCOPE_MISMATCH", "PLUGIN_STORAGE_SCOPE_MISMATCH", "PLUGIN_ADAPTER_FAILURE", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_DELIVERY_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_UI_PROTOCOL_UNSUPPORTED", "PLUGIN_UI_PROTOCOL_VIOLATION", "PLUGIN_SURFACE_QUIESCE_TIMEOUT", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_MANAGEMENT_REVISION_MISMATCH", "PLUGIN_AUTHORIZATION_REVISION_MISMATCH", "PLUGIN_BINDING_REVISION_MISMATCH", "PLUGIN_VALUES_REVISION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_CSRF_INVALID", "PLUGIN_FEATURE_NOT_CONFIGURED"];
2
+ export declare const pluginBridgeErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_ORIGIN_DENIED", "PLUGIN_ACTION_DENIED", "PLUGIN_OWNER_SCOPE_MISMATCH", "PLUGIN_SECRET_SCOPE_MISMATCH", "PLUGIN_STORAGE_SCOPE_MISMATCH", "PLUGIN_ADAPTER_FAILURE", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_DELIVERY_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_UI_PROTOCOL_UNSUPPORTED", "PLUGIN_UI_PROTOCOL_VIOLATION", "PLUGIN_SURFACE_QUIESCE_TIMEOUT", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_MANAGEMENT_REVISION_MISMATCH", "PLUGIN_AUTHORIZATION_REVISION_MISMATCH", "PLUGIN_BINDING_REVISION_MISMATCH", "PLUGIN_VALUES_REVISION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_CSRF_INVALID", "PLUGIN_FEATURE_NOT_CONFIGURED", "PLUGIN_CONFIRMATION_REJECTED", "PLUGIN_BRIDGE_CANCELLED", "PLUGIN_BRIDGE_TIMEOUT", "PLUGIN_BRIDGE_DISPOSED", "PLUGIN_BRIDGE_HANDSHAKE_FAILED", "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED"];
3
+ export declare const pluginClientErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_ORIGIN_DENIED", "PLUGIN_ACTION_DENIED", "PLUGIN_OWNER_SCOPE_MISMATCH", "PLUGIN_SECRET_SCOPE_MISMATCH", "PLUGIN_STORAGE_SCOPE_MISMATCH", "PLUGIN_ADAPTER_FAILURE", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_DELIVERY_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_UI_PROTOCOL_UNSUPPORTED", "PLUGIN_UI_PROTOCOL_VIOLATION", "PLUGIN_SURFACE_QUIESCE_TIMEOUT", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_MANAGEMENT_REVISION_MISMATCH", "PLUGIN_AUTHORIZATION_REVISION_MISMATCH", "PLUGIN_BINDING_REVISION_MISMATCH", "PLUGIN_VALUES_REVISION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_CSRF_INVALID", "PLUGIN_FEATURE_NOT_CONFIGURED", "PLUGIN_CONFIRMATION_REJECTED", "PLUGIN_BRIDGE_CANCELLED", "PLUGIN_BRIDGE_TIMEOUT", "PLUGIN_BRIDGE_DISPOSED", "PLUGIN_BRIDGE_HANDSHAKE_FAILED", "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED", "PLUGIN_PLATFORM_REQUEST_FAILED", "PLUGIN_STREAM_FAILED"];
4
+ export declare const runtimeProcessFailureCodes: readonly ["RUNTIME_PROCESS_FAILED", "RUNTIME_PROCESS_EXIT_UNEXPECTED", "RUNTIME_PROCESS_EXIT_UNRECOGNIZED", "RUNTIME_PROCESS_SIGNALLED", "IPC_WRITER_CAPACITY_OVERFLOW", "IPC_WRITER_CAPACITY_LIMIT_EXCEEDED", "IPC_WRITER_START_FAILED", "IPC_WRITER_CLOSED", "IPC_WRITER_BATCH_SIZE_OVERFLOW", "IPC_WRITER_WRITE_FAILED", "IPC_WRITER_FLUSH_FAILED", "IPC_WRITER_PANICKED"];
@@ -0,0 +1,206 @@
1
+ // Generated from spec/plugin/error-codes-v4.schema.json. Do not edit.
2
+ export const pluginPlatformErrorCodes = [
3
+ "PLUGIN_INVALID_REQUEST",
4
+ "PLUGIN_MANIFEST_INVALID",
5
+ "PLUGIN_PACKAGE_INVALID",
6
+ "PLUGIN_PACKAGE_TOO_LARGE",
7
+ "PLUGIN_PACKAGE_PATH_FORBIDDEN",
8
+ "PLUGIN_SIGNATURE_INVALID",
9
+ "PLUGIN_TRUST_STATE_DENIED",
10
+ "PLUGIN_TRUST_VERIFICATION_REQUIRED",
11
+ "PLUGIN_TRUST_VERIFICATION_INVALID",
12
+ "PLUGIN_RELEASE_REF_VERIFICATION_FAILED",
13
+ "PLUGIN_RELEASE_REF_POLICY_DENIED",
14
+ "PLUGIN_DISABLED",
15
+ "PLUGIN_DISABLED_BY_POLICY",
16
+ "PLUGIN_PERMISSION_DENIED",
17
+ "PLUGIN_ORIGIN_DENIED",
18
+ "PLUGIN_ACTION_DENIED",
19
+ "PLUGIN_OWNER_SCOPE_MISMATCH",
20
+ "PLUGIN_SECRET_SCOPE_MISMATCH",
21
+ "PLUGIN_STORAGE_SCOPE_MISMATCH",
22
+ "PLUGIN_ADAPTER_FAILURE",
23
+ "PLUGIN_CONFIRMATION_REQUIRED",
24
+ "PLUGIN_CONFIRMATION_INVALID",
25
+ "PLUGIN_TOKEN_EXPIRED",
26
+ "PLUGIN_TOKEN_REPLAY",
27
+ "PLUGIN_GATEWAY_TOKEN_INVALID",
28
+ "PLUGIN_GATEWAY_TOKEN_REPLAYED",
29
+ "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH",
30
+ "PLUGIN_ASSET_TICKET_INVALID",
31
+ "PLUGIN_ASSET_SESSION_INVALID",
32
+ "PLUGIN_STREAM_TICKET_INVALID",
33
+ "PLUGIN_STREAM_DELIVERY_INVALID",
34
+ "PLUGIN_STREAM_CANCELLED",
35
+ "PLUGIN_LEASE_INVALID",
36
+ "PLUGIN_LEASE_REPLAYED",
37
+ "PLUGIN_GRANT_INVALID",
38
+ "PLUGIN_STORAGE_QUOTA_EXCEEDED",
39
+ "PLUGIN_OPERATION_BLOCKED",
40
+ "PLUGIN_OPERATION_NOT_FOUND",
41
+ "PLUGIN_OPERATION_NOT_CANCELABLE",
42
+ "PLUGIN_NETWORK_TARGET_DENIED",
43
+ "PLUGIN_NETWORK_RATE_LIMITED",
44
+ "PLUGIN_RUNTIME_UNAVAILABLE",
45
+ "PLUGIN_RUNTIME_VERSION_MISMATCH",
46
+ "PLUGIN_UI_PROTOCOL_UNSUPPORTED",
47
+ "PLUGIN_UI_PROTOCOL_VIOLATION",
48
+ "PLUGIN_SURFACE_QUIESCE_TIMEOUT",
49
+ "PLUGIN_JSON_LIMIT_EXCEEDED",
50
+ "PLUGIN_CAPABILITY_ERROR",
51
+ "PLUGIN_WORKER_ERROR",
52
+ "PLUGIN_CONTRACT_MISMATCH",
53
+ "PLUGIN_MANAGEMENT_REVISION_MISMATCH",
54
+ "PLUGIN_AUTHORIZATION_REVISION_MISMATCH",
55
+ "PLUGIN_BINDING_REVISION_MISMATCH",
56
+ "PLUGIN_VALUES_REVISION_MISMATCH",
57
+ "PLUGIN_CSRF_REQUIRED",
58
+ "PLUGIN_CSRF_INVALID",
59
+ "PLUGIN_FEATURE_NOT_CONFIGURED"
60
+ ];
61
+ export const pluginBridgeErrorCodes = [
62
+ "PLUGIN_INVALID_REQUEST",
63
+ "PLUGIN_MANIFEST_INVALID",
64
+ "PLUGIN_PACKAGE_INVALID",
65
+ "PLUGIN_PACKAGE_TOO_LARGE",
66
+ "PLUGIN_PACKAGE_PATH_FORBIDDEN",
67
+ "PLUGIN_SIGNATURE_INVALID",
68
+ "PLUGIN_TRUST_STATE_DENIED",
69
+ "PLUGIN_TRUST_VERIFICATION_REQUIRED",
70
+ "PLUGIN_TRUST_VERIFICATION_INVALID",
71
+ "PLUGIN_RELEASE_REF_VERIFICATION_FAILED",
72
+ "PLUGIN_RELEASE_REF_POLICY_DENIED",
73
+ "PLUGIN_DISABLED",
74
+ "PLUGIN_DISABLED_BY_POLICY",
75
+ "PLUGIN_PERMISSION_DENIED",
76
+ "PLUGIN_ORIGIN_DENIED",
77
+ "PLUGIN_ACTION_DENIED",
78
+ "PLUGIN_OWNER_SCOPE_MISMATCH",
79
+ "PLUGIN_SECRET_SCOPE_MISMATCH",
80
+ "PLUGIN_STORAGE_SCOPE_MISMATCH",
81
+ "PLUGIN_ADAPTER_FAILURE",
82
+ "PLUGIN_CONFIRMATION_REQUIRED",
83
+ "PLUGIN_CONFIRMATION_INVALID",
84
+ "PLUGIN_TOKEN_EXPIRED",
85
+ "PLUGIN_TOKEN_REPLAY",
86
+ "PLUGIN_GATEWAY_TOKEN_INVALID",
87
+ "PLUGIN_GATEWAY_TOKEN_REPLAYED",
88
+ "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH",
89
+ "PLUGIN_ASSET_TICKET_INVALID",
90
+ "PLUGIN_ASSET_SESSION_INVALID",
91
+ "PLUGIN_STREAM_TICKET_INVALID",
92
+ "PLUGIN_STREAM_DELIVERY_INVALID",
93
+ "PLUGIN_STREAM_CANCELLED",
94
+ "PLUGIN_LEASE_INVALID",
95
+ "PLUGIN_LEASE_REPLAYED",
96
+ "PLUGIN_GRANT_INVALID",
97
+ "PLUGIN_STORAGE_QUOTA_EXCEEDED",
98
+ "PLUGIN_OPERATION_BLOCKED",
99
+ "PLUGIN_OPERATION_NOT_FOUND",
100
+ "PLUGIN_OPERATION_NOT_CANCELABLE",
101
+ "PLUGIN_NETWORK_TARGET_DENIED",
102
+ "PLUGIN_NETWORK_RATE_LIMITED",
103
+ "PLUGIN_RUNTIME_UNAVAILABLE",
104
+ "PLUGIN_RUNTIME_VERSION_MISMATCH",
105
+ "PLUGIN_UI_PROTOCOL_UNSUPPORTED",
106
+ "PLUGIN_UI_PROTOCOL_VIOLATION",
107
+ "PLUGIN_SURFACE_QUIESCE_TIMEOUT",
108
+ "PLUGIN_JSON_LIMIT_EXCEEDED",
109
+ "PLUGIN_CAPABILITY_ERROR",
110
+ "PLUGIN_WORKER_ERROR",
111
+ "PLUGIN_CONTRACT_MISMATCH",
112
+ "PLUGIN_MANAGEMENT_REVISION_MISMATCH",
113
+ "PLUGIN_AUTHORIZATION_REVISION_MISMATCH",
114
+ "PLUGIN_BINDING_REVISION_MISMATCH",
115
+ "PLUGIN_VALUES_REVISION_MISMATCH",
116
+ "PLUGIN_CSRF_REQUIRED",
117
+ "PLUGIN_CSRF_INVALID",
118
+ "PLUGIN_FEATURE_NOT_CONFIGURED",
119
+ "PLUGIN_CONFIRMATION_REJECTED",
120
+ "PLUGIN_BRIDGE_CANCELLED",
121
+ "PLUGIN_BRIDGE_TIMEOUT",
122
+ "PLUGIN_BRIDGE_DISPOSED",
123
+ "PLUGIN_BRIDGE_HANDSHAKE_FAILED",
124
+ "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED"
125
+ ];
126
+ export const pluginClientErrorCodes = [
127
+ "PLUGIN_INVALID_REQUEST",
128
+ "PLUGIN_MANIFEST_INVALID",
129
+ "PLUGIN_PACKAGE_INVALID",
130
+ "PLUGIN_PACKAGE_TOO_LARGE",
131
+ "PLUGIN_PACKAGE_PATH_FORBIDDEN",
132
+ "PLUGIN_SIGNATURE_INVALID",
133
+ "PLUGIN_TRUST_STATE_DENIED",
134
+ "PLUGIN_TRUST_VERIFICATION_REQUIRED",
135
+ "PLUGIN_TRUST_VERIFICATION_INVALID",
136
+ "PLUGIN_RELEASE_REF_VERIFICATION_FAILED",
137
+ "PLUGIN_RELEASE_REF_POLICY_DENIED",
138
+ "PLUGIN_DISABLED",
139
+ "PLUGIN_DISABLED_BY_POLICY",
140
+ "PLUGIN_PERMISSION_DENIED",
141
+ "PLUGIN_ORIGIN_DENIED",
142
+ "PLUGIN_ACTION_DENIED",
143
+ "PLUGIN_OWNER_SCOPE_MISMATCH",
144
+ "PLUGIN_SECRET_SCOPE_MISMATCH",
145
+ "PLUGIN_STORAGE_SCOPE_MISMATCH",
146
+ "PLUGIN_ADAPTER_FAILURE",
147
+ "PLUGIN_CONFIRMATION_REQUIRED",
148
+ "PLUGIN_CONFIRMATION_INVALID",
149
+ "PLUGIN_TOKEN_EXPIRED",
150
+ "PLUGIN_TOKEN_REPLAY",
151
+ "PLUGIN_GATEWAY_TOKEN_INVALID",
152
+ "PLUGIN_GATEWAY_TOKEN_REPLAYED",
153
+ "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH",
154
+ "PLUGIN_ASSET_TICKET_INVALID",
155
+ "PLUGIN_ASSET_SESSION_INVALID",
156
+ "PLUGIN_STREAM_TICKET_INVALID",
157
+ "PLUGIN_STREAM_DELIVERY_INVALID",
158
+ "PLUGIN_STREAM_CANCELLED",
159
+ "PLUGIN_LEASE_INVALID",
160
+ "PLUGIN_LEASE_REPLAYED",
161
+ "PLUGIN_GRANT_INVALID",
162
+ "PLUGIN_STORAGE_QUOTA_EXCEEDED",
163
+ "PLUGIN_OPERATION_BLOCKED",
164
+ "PLUGIN_OPERATION_NOT_FOUND",
165
+ "PLUGIN_OPERATION_NOT_CANCELABLE",
166
+ "PLUGIN_NETWORK_TARGET_DENIED",
167
+ "PLUGIN_NETWORK_RATE_LIMITED",
168
+ "PLUGIN_RUNTIME_UNAVAILABLE",
169
+ "PLUGIN_RUNTIME_VERSION_MISMATCH",
170
+ "PLUGIN_UI_PROTOCOL_UNSUPPORTED",
171
+ "PLUGIN_UI_PROTOCOL_VIOLATION",
172
+ "PLUGIN_SURFACE_QUIESCE_TIMEOUT",
173
+ "PLUGIN_JSON_LIMIT_EXCEEDED",
174
+ "PLUGIN_CAPABILITY_ERROR",
175
+ "PLUGIN_WORKER_ERROR",
176
+ "PLUGIN_CONTRACT_MISMATCH",
177
+ "PLUGIN_MANAGEMENT_REVISION_MISMATCH",
178
+ "PLUGIN_AUTHORIZATION_REVISION_MISMATCH",
179
+ "PLUGIN_BINDING_REVISION_MISMATCH",
180
+ "PLUGIN_VALUES_REVISION_MISMATCH",
181
+ "PLUGIN_CSRF_REQUIRED",
182
+ "PLUGIN_CSRF_INVALID",
183
+ "PLUGIN_FEATURE_NOT_CONFIGURED",
184
+ "PLUGIN_CONFIRMATION_REJECTED",
185
+ "PLUGIN_BRIDGE_CANCELLED",
186
+ "PLUGIN_BRIDGE_TIMEOUT",
187
+ "PLUGIN_BRIDGE_DISPOSED",
188
+ "PLUGIN_BRIDGE_HANDSHAKE_FAILED",
189
+ "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED",
190
+ "PLUGIN_PLATFORM_REQUEST_FAILED",
191
+ "PLUGIN_STREAM_FAILED"
192
+ ];
193
+ export const runtimeProcessFailureCodes = [
194
+ "RUNTIME_PROCESS_FAILED",
195
+ "RUNTIME_PROCESS_EXIT_UNEXPECTED",
196
+ "RUNTIME_PROCESS_EXIT_UNRECOGNIZED",
197
+ "RUNTIME_PROCESS_SIGNALLED",
198
+ "IPC_WRITER_CAPACITY_OVERFLOW",
199
+ "IPC_WRITER_CAPACITY_LIMIT_EXCEEDED",
200
+ "IPC_WRITER_START_FAILED",
201
+ "IPC_WRITER_CLOSED",
202
+ "IPC_WRITER_BATCH_SIZE_OVERFLOW",
203
+ "IPC_WRITER_WRITE_FAILED",
204
+ "IPC_WRITER_FLUSH_FAILED",
205
+ "IPC_WRITER_PANICKED"
206
+ ];
package/dist/errors.d.ts CHANGED
@@ -1,12 +1,30 @@
1
- export declare const pluginPlatformErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_STATE_VERSION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_RETAINED_DATA_CLEANUP_FAILED", "PLUGIN_RETAINED_DATA_BIND_FAILED"];
2
- export declare const pluginBridgeErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_STATE_VERSION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_RETAINED_DATA_CLEANUP_FAILED", "PLUGIN_RETAINED_DATA_BIND_FAILED", "PLUGIN_CONFIRMATION_REJECTED", "PLUGIN_BRIDGE_TIMEOUT", "PLUGIN_BRIDGE_DISPOSED", "PLUGIN_BRIDGE_HANDSHAKE_FAILED", "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED"];
3
- export declare const pluginClientErrorCodes: readonly ["PLUGIN_INVALID_REQUEST", "PLUGIN_MANIFEST_INVALID", "PLUGIN_PACKAGE_INVALID", "PLUGIN_PACKAGE_TOO_LARGE", "PLUGIN_PACKAGE_PATH_FORBIDDEN", "PLUGIN_SIGNATURE_INVALID", "PLUGIN_TRUST_STATE_DENIED", "PLUGIN_TRUST_VERIFICATION_REQUIRED", "PLUGIN_TRUST_VERIFICATION_INVALID", "PLUGIN_RELEASE_REF_VERIFICATION_FAILED", "PLUGIN_RELEASE_REF_POLICY_DENIED", "PLUGIN_DISABLED", "PLUGIN_DISABLED_BY_POLICY", "PLUGIN_PERMISSION_DENIED", "PLUGIN_CONFIRMATION_REQUIRED", "PLUGIN_CONFIRMATION_INVALID", "PLUGIN_TOKEN_EXPIRED", "PLUGIN_TOKEN_REPLAY", "PLUGIN_GATEWAY_TOKEN_INVALID", "PLUGIN_GATEWAY_TOKEN_REPLAYED", "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH", "PLUGIN_ASSET_TICKET_INVALID", "PLUGIN_ASSET_SESSION_INVALID", "PLUGIN_STREAM_TICKET_INVALID", "PLUGIN_STREAM_CANCELLED", "PLUGIN_LEASE_INVALID", "PLUGIN_LEASE_REPLAYED", "PLUGIN_GRANT_INVALID", "PLUGIN_STORAGE_QUOTA_EXCEEDED", "PLUGIN_OPERATION_BLOCKED", "PLUGIN_OPERATION_NOT_FOUND", "PLUGIN_OPERATION_NOT_CANCELABLE", "PLUGIN_NETWORK_TARGET_DENIED", "PLUGIN_NETWORK_RATE_LIMITED", "PLUGIN_RUNTIME_UNAVAILABLE", "PLUGIN_RUNTIME_VERSION_MISMATCH", "PLUGIN_JSON_LIMIT_EXCEEDED", "PLUGIN_CAPABILITY_ERROR", "PLUGIN_WORKER_ERROR", "PLUGIN_CONTRACT_MISMATCH", "PLUGIN_STATE_VERSION_MISMATCH", "PLUGIN_CSRF_REQUIRED", "PLUGIN_RETAINED_DATA_CLEANUP_FAILED", "PLUGIN_RETAINED_DATA_BIND_FAILED", "PLUGIN_CONFIRMATION_REJECTED", "PLUGIN_BRIDGE_TIMEOUT", "PLUGIN_BRIDGE_DISPOSED", "PLUGIN_BRIDGE_HANDSHAKE_FAILED", "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED", "PLUGIN_PLATFORM_REQUEST_FAILED", "PLUGIN_STREAM_FAILED"];
1
+ export { pluginBridgeErrorCodes, pluginClientErrorCodes, pluginPlatformErrorCodes, runtimeProcessFailureCodes, } from "./error-codes.gen.js";
2
+ import { pluginBridgeErrorCodes, pluginClientErrorCodes, pluginPlatformErrorCodes, runtimeProcessFailureCodes } from "./error-codes.gen.js";
4
3
  export type PluginPlatformErrorCode = typeof pluginPlatformErrorCodes[number];
5
4
  export type PluginBridgeErrorCode = typeof pluginBridgeErrorCodes[number];
6
5
  export type PluginClientErrorCode = typeof pluginClientErrorCodes[number];
6
+ export type RuntimeProcessFailureCode = typeof runtimeProcessFailureCodes[number];
7
+ export type PluginMutationOutcome = "not_committed" | "unknown";
8
+ export declare class PluginPlatformRequestError extends Error {
9
+ readonly errorCode: PluginPlatformErrorCode;
10
+ readonly details: Record<string, unknown>;
11
+ readonly mutationOutcome?: PluginMutationOutcome;
12
+ constructor(errorCode: PluginPlatformErrorCode, message: string, details?: Record<string, unknown>, mutationOutcome?: PluginMutationOutcome);
13
+ }
14
+ export declare class PluginTransportError extends Error {
15
+ readonly mutationOutcome?: PluginMutationOutcome;
16
+ readonly cause: unknown;
17
+ constructor(message: string, cause: unknown, mutationOutcome?: PluginMutationOutcome);
18
+ }
7
19
  export declare class PluginBridgeError extends Error {
8
20
  readonly errorCode: string;
9
21
  readonly data?: unknown;
10
22
  readonly details?: unknown;
11
- constructor(errorCode: string, message: string, data?: unknown, details?: unknown);
23
+ readonly mutationOutcome?: PluginMutationOutcome;
24
+ constructor(errorCode: string, message: string, data?: unknown, details?: unknown, mutationOutcome?: PluginMutationOutcome);
25
+ }
26
+ export declare function pluginMutationOutcome(error: unknown): PluginMutationOutcome | undefined;
27
+ export declare class PluginMutationLifecycleError extends AggregateError {
28
+ readonly mutationOutcome?: PluginMutationOutcome;
29
+ constructor(message: string, mutationError: unknown, lifecycleErrors: readonly unknown[]);
12
30
  }
package/dist/errors.js CHANGED
@@ -1,71 +1,53 @@
1
- export const pluginPlatformErrorCodes = [
2
- "PLUGIN_INVALID_REQUEST",
3
- "PLUGIN_MANIFEST_INVALID",
4
- "PLUGIN_PACKAGE_INVALID",
5
- "PLUGIN_PACKAGE_TOO_LARGE",
6
- "PLUGIN_PACKAGE_PATH_FORBIDDEN",
7
- "PLUGIN_SIGNATURE_INVALID",
8
- "PLUGIN_TRUST_STATE_DENIED",
9
- "PLUGIN_TRUST_VERIFICATION_REQUIRED",
10
- "PLUGIN_TRUST_VERIFICATION_INVALID",
11
- "PLUGIN_RELEASE_REF_VERIFICATION_FAILED",
12
- "PLUGIN_RELEASE_REF_POLICY_DENIED",
13
- "PLUGIN_DISABLED",
14
- "PLUGIN_DISABLED_BY_POLICY",
15
- "PLUGIN_PERMISSION_DENIED",
16
- "PLUGIN_CONFIRMATION_REQUIRED",
17
- "PLUGIN_CONFIRMATION_INVALID",
18
- "PLUGIN_TOKEN_EXPIRED",
19
- "PLUGIN_TOKEN_REPLAY",
20
- "PLUGIN_GATEWAY_TOKEN_INVALID",
21
- "PLUGIN_GATEWAY_TOKEN_REPLAYED",
22
- "PLUGIN_GATEWAY_TOKEN_CHANNEL_MISMATCH",
23
- "PLUGIN_ASSET_TICKET_INVALID",
24
- "PLUGIN_ASSET_SESSION_INVALID",
25
- "PLUGIN_STREAM_TICKET_INVALID",
26
- "PLUGIN_STREAM_CANCELLED",
27
- "PLUGIN_LEASE_INVALID",
28
- "PLUGIN_LEASE_REPLAYED",
29
- "PLUGIN_GRANT_INVALID",
30
- "PLUGIN_STORAGE_QUOTA_EXCEEDED",
31
- "PLUGIN_OPERATION_BLOCKED",
32
- "PLUGIN_OPERATION_NOT_FOUND",
33
- "PLUGIN_OPERATION_NOT_CANCELABLE",
34
- "PLUGIN_NETWORK_TARGET_DENIED",
35
- "PLUGIN_NETWORK_RATE_LIMITED",
36
- "PLUGIN_RUNTIME_UNAVAILABLE",
37
- "PLUGIN_RUNTIME_VERSION_MISMATCH",
38
- "PLUGIN_JSON_LIMIT_EXCEEDED",
39
- "PLUGIN_CAPABILITY_ERROR",
40
- "PLUGIN_WORKER_ERROR",
41
- "PLUGIN_CONTRACT_MISMATCH",
42
- "PLUGIN_STATE_VERSION_MISMATCH",
43
- "PLUGIN_CSRF_REQUIRED",
44
- "PLUGIN_RETAINED_DATA_CLEANUP_FAILED",
45
- "PLUGIN_RETAINED_DATA_BIND_FAILED",
46
- ];
47
- export const pluginBridgeErrorCodes = [
48
- ...pluginPlatformErrorCodes,
49
- "PLUGIN_CONFIRMATION_REJECTED",
50
- "PLUGIN_BRIDGE_TIMEOUT",
51
- "PLUGIN_BRIDGE_DISPOSED",
52
- "PLUGIN_BRIDGE_HANDSHAKE_FAILED",
53
- "PLUGIN_BRIDGE_HANDSHAKE_REQUIRED",
54
- ];
55
- export const pluginClientErrorCodes = [
56
- ...pluginBridgeErrorCodes,
57
- "PLUGIN_PLATFORM_REQUEST_FAILED",
58
- "PLUGIN_STREAM_FAILED",
59
- ];
1
+ export { pluginBridgeErrorCodes, pluginClientErrorCodes, pluginPlatformErrorCodes, runtimeProcessFailureCodes, } from "./error-codes.gen.js";
2
+ export class PluginPlatformRequestError extends Error {
3
+ errorCode;
4
+ details;
5
+ mutationOutcome;
6
+ constructor(errorCode, message, details = {}, mutationOutcome) {
7
+ super(message);
8
+ this.name = "PluginPlatformRequestError";
9
+ this.errorCode = errorCode;
10
+ this.details = details;
11
+ this.mutationOutcome = mutationOutcome;
12
+ }
13
+ }
14
+ export class PluginTransportError extends Error {
15
+ mutationOutcome;
16
+ cause;
17
+ constructor(message, cause, mutationOutcome) {
18
+ super(message, { cause });
19
+ this.name = "PluginTransportError";
20
+ this.cause = cause;
21
+ this.mutationOutcome = mutationOutcome;
22
+ }
23
+ }
60
24
  export class PluginBridgeError extends Error {
61
25
  errorCode;
62
26
  data;
63
27
  details;
64
- constructor(errorCode, message, data, details) {
28
+ mutationOutcome;
29
+ constructor(errorCode, message, data, details, mutationOutcome) {
65
30
  super(message);
66
31
  this.name = "PluginBridgeError";
67
32
  this.errorCode = errorCode;
68
33
  this.data = data;
69
34
  this.details = details ?? data;
35
+ this.mutationOutcome = mutationOutcome;
36
+ }
37
+ }
38
+ export function pluginMutationOutcome(error) {
39
+ if (error instanceof PluginPlatformRequestError ||
40
+ error instanceof PluginTransportError ||
41
+ error instanceof PluginBridgeError) {
42
+ return error.mutationOutcome;
43
+ }
44
+ return undefined;
45
+ }
46
+ export class PluginMutationLifecycleError extends AggregateError {
47
+ mutationOutcome;
48
+ constructor(message, mutationError, lifecycleErrors) {
49
+ super([mutationError, ...lifecycleErrors], message, { cause: mutationError });
50
+ this.name = "PluginMutationLifecycleError";
51
+ this.mutationOutcome = pluginMutationOutcome(mutationError);
70
52
  }
71
53
  }
package/dist/http.d.ts CHANGED
@@ -1,8 +1,9 @@
1
+ import type { components as PluginPlatformComponents } from "./openapi.gen.js";
1
2
  export type FetchLike = (input: string, init: FetchInitLike) => Promise<FetchResponseLike>;
2
3
  export type FetchInitLike = {
3
4
  method: string;
4
5
  headers: Record<string, string>;
5
- body?: string;
6
+ body?: BodyInit;
6
7
  credentials?: "same-origin" | "include" | "omit";
7
8
  signal?: AbortSignal;
8
9
  keepalive?: boolean;
@@ -12,19 +13,26 @@ export type FetchResponseLike = {
12
13
  status: number;
13
14
  json(): Promise<unknown>;
14
15
  };
15
- export type HostEnvelope<T> = {
16
+ export type PlatformResponse<T> = {
16
17
  ok: true;
17
- data?: T;
18
+ data: T;
18
19
  } | {
19
20
  ok: false;
20
- data?: unknown;
21
- error?: string;
22
- error_code?: string;
23
- error_details?: Record<string, unknown>;
21
+ error: PluginPlatformComponents["schemas"]["PlatformError"];
22
+ };
23
+ export type MutationPlatformResponse<T> = {
24
+ ok: true;
25
+ data: T;
26
+ } | {
27
+ ok: false;
28
+ error: PluginPlatformComponents["schemas"]["MutationPlatformError"];
24
29
  };
25
30
  export declare function defaultFetch(): FetchLike;
26
31
  export declare function trimTrailingSlash(value: string): string;
27
- export declare function readHostEnvelope<T>(response: FetchResponseLike, fallbackCode: string): Promise<T>;
32
+ export declare function assertMutationDispatchable(signal: AbortSignal | undefined, operation: string): void;
33
+ export declare function dispatchMutationRequest(fetch: FetchLike, input: string, init: FetchInitLike, operation: string): Promise<FetchResponseLike>;
34
+ export declare function readPlatformResponse<T>(response: FetchResponseLike): Promise<T>;
35
+ export declare function readMutationPlatformResponse<T>(response: FetchResponseLike): Promise<T>;
28
36
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
29
37
  export declare function hasExactKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown>;
30
38
  export declare function hasAllowedKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown>;
package/dist/http.js CHANGED
@@ -1,4 +1,4 @@
1
- import { PluginBridgeError } from "./errors.js";
1
+ import { PluginPlatformRequestError, PluginTransportError, pluginPlatformErrorCodes, } from "./errors.js";
2
2
  export function defaultFetch() {
3
3
  const fetchLike = globalThis.fetch;
4
4
  if (!fetchLike) {
@@ -9,15 +9,56 @@ export function defaultFetch() {
9
9
  export function trimTrailingSlash(value) {
10
10
  return value.endsWith("/") ? value.slice(0, -1) : value;
11
11
  }
12
- export async function readHostEnvelope(response, fallbackCode) {
13
- const raw = await response.json();
14
- if (!isHostEnvelope(raw)) {
15
- throw new PluginBridgeError("PLUGIN_CONTRACT_MISMATCH", `Plugin platform endpoint returned an invalid envelope with HTTP ${response.status}`);
12
+ export function assertMutationDispatchable(signal, operation) {
13
+ if (!signal?.aborted)
14
+ return;
15
+ throw new PluginTransportError(`Plugin platform request was aborted before dispatch for ${operation}`, signal.reason, "not_committed");
16
+ }
17
+ export async function dispatchMutationRequest(fetch, input, init, operation) {
18
+ assertMutationDispatchable(init.signal, operation);
19
+ let pending;
20
+ try {
21
+ pending = fetch(input, init);
22
+ }
23
+ catch (cause) {
24
+ throw new PluginTransportError(`Plugin platform request failed before dispatch for ${operation}`, cause, "not_committed");
16
25
  }
17
- if (!raw.ok) {
18
- throw new PluginBridgeError(raw.error_code ?? fallbackCode, raw.error ?? `Plugin platform endpoint failed with HTTP ${response.status}`, raw.data, raw.error_details ?? raw.data);
26
+ try {
27
+ return await pending;
28
+ }
29
+ catch (cause) {
30
+ throw new PluginTransportError(`Plugin platform request failed after dispatch for ${operation}`, cause, "unknown");
31
+ }
32
+ }
33
+ export async function readPlatformResponse(response) {
34
+ return readResponse(response, false);
35
+ }
36
+ export async function readMutationPlatformResponse(response) {
37
+ return readResponse(response, true);
38
+ }
39
+ async function readResponse(response, mutation) {
40
+ let raw;
41
+ try {
42
+ raw = await response.json();
43
+ }
44
+ catch (cause) {
45
+ throw new PluginTransportError(`Plugin platform endpoint returned invalid JSON with HTTP ${response.status}`, cause, mutation ? "unknown" : undefined);
46
+ }
47
+ if (!isPlatformResponse(raw, mutation)) {
48
+ throw new PluginTransportError(`Plugin platform endpoint returned an invalid envelope with HTTP ${response.status}`, new PluginPlatformRequestError("PLUGIN_CONTRACT_MISMATCH", "Invalid platform response envelope"), mutation ? "unknown" : undefined);
49
+ }
50
+ if (raw.ok) {
51
+ if (!response.ok || response.status !== 200) {
52
+ throw new PluginTransportError(`Plugin platform endpoint returned a success envelope with HTTP ${response.status}`, new PluginPlatformRequestError("PLUGIN_CONTRACT_MISMATCH", "HTTP status does not match the platform response envelope"), mutation ? "unknown" : undefined);
53
+ }
54
+ return raw.data;
55
+ }
56
+ if (response.ok || response.status === 200) {
57
+ throw new PluginTransportError(`Plugin platform endpoint returned an error envelope with HTTP ${response.status}`, new PluginPlatformRequestError("PLUGIN_CONTRACT_MISMATCH", "HTTP status does not match the platform response envelope"), mutation ? "unknown" : undefined);
58
+ }
59
+ {
60
+ throw new PluginPlatformRequestError(raw.error.code, raw.error.message || `Plugin platform endpoint failed with HTTP ${response.status}`, raw.error.details, "mutation_outcome" in raw.error ? raw.error.mutation_outcome : undefined);
19
61
  }
20
- return raw.data;
21
62
  }
22
63
  export function isRecord(value) {
23
64
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -32,14 +73,109 @@ export function hasExactKeys(value, keys) {
32
73
  export function hasAllowedKeys(value, keys) {
33
74
  return isRecord(value) && Object.keys(value).every((key) => keys.includes(key));
34
75
  }
35
- function isHostEnvelope(value) {
36
- if (!isRecord(value) || typeof value.ok !== "boolean") {
76
+ function isPlatformResponse(value, mutation) {
77
+ if (!isRecord(value) || typeof value.ok !== "boolean")
37
78
  return false;
38
- }
39
79
  if (value.ok) {
40
- return true;
80
+ return hasExactKeys(value, ["ok", "data"]);
41
81
  }
42
- return (value.error == null || typeof value.error === "string") &&
43
- (value.error_code == null || typeof value.error_code === "string") &&
44
- (value.error_details == null || isRecord(value.error_details));
82
+ if (!hasExactKeys(value, ["ok", "error"]) || !isRecord(value.error))
83
+ return false;
84
+ const errorKeys = mutation ? ["code", "message", "details", "mutation_outcome"] : ["code", "message", "details"];
85
+ if (!hasExactKeys(value.error, errorKeys) ||
86
+ !isPluginPlatformErrorCode(value.error.code) ||
87
+ typeof value.error.message !== "string" || value.error.message.trim().length === 0 ||
88
+ Array.from(value.error.message).length > 4096 ||
89
+ !isPlatformErrorDetails(value.error.code, value.error.details))
90
+ return false;
91
+ return !mutation || value.error.mutation_outcome === "not_committed" || value.error.mutation_outcome === "unknown";
92
+ }
93
+ const packageValidationErrorCodes = [
94
+ "PLUGIN_MANIFEST_INVALID",
95
+ "PLUGIN_PACKAGE_INVALID",
96
+ "PLUGIN_PACKAGE_TOO_LARGE",
97
+ "PLUGIN_PACKAGE_PATH_FORBIDDEN",
98
+ ];
99
+ const jsonLimitReasons = ["payload_bytes", "json_depth", "prototype_key", "number_precision"];
100
+ const packageValidationReasons = [
101
+ "manifest_missing", "manifest_field", "manifest_decode", "zip_invalid", "file_count", "duplicate_entry",
102
+ "ambiguous_entry", "non_regular_entry", "invalid_utf8_path", "non_nfc_path", "symlink_entry",
103
+ "directory_entry", "entry_bytes", "path_length", "compression_ratio", "total_uncompressed_bytes",
104
+ "entry_open_failed", "entry_read_failed", "entry_close_failed", "entry_size_mismatch",
105
+ "unsupported_signature_entry", "manifest_artifact", "package_asset_security", "package_artifact_boundary",
106
+ "entry_path", "manifest_canonical_json", "canonical_hash", "package_signature", "empty_path",
107
+ "slash_separator", "non_canonical_path", "path_traversal", "hidden_path", "external_icon_path",
108
+ "unsupported_icon_format", "missing_icon_asset", "icon_magic_mismatch", "query_or_fragment",
109
+ ];
110
+ function isPluginPlatformErrorCode(value) {
111
+ return typeof value === "string" && pluginPlatformErrorCodes.includes(value);
112
+ }
113
+ function isPlatformErrorDetails(code, value) {
114
+ if (code === "PLUGIN_MANAGEMENT_REVISION_MISMATCH") {
115
+ return hasExactKeys(value, ["plugin_instance_id", "expected_management_revision", "actual_management_revision"]) &&
116
+ typeof value.plugin_instance_id === "string" && value.plugin_instance_id.length > 0 &&
117
+ Number.isSafeInteger(value.expected_management_revision) && Number(value.expected_management_revision) >= 1 &&
118
+ Number.isSafeInteger(value.actual_management_revision) && Number(value.actual_management_revision) >= 1;
119
+ }
120
+ if (code === "PLUGIN_AUTHORIZATION_REVISION_MISMATCH") {
121
+ return hasExactKeys(value, [
122
+ "plugin_instance_id",
123
+ "expected_policy_revision",
124
+ "actual_policy_revision",
125
+ "expected_management_revision",
126
+ "actual_management_revision",
127
+ "expected_revoke_epoch",
128
+ "actual_revoke_epoch",
129
+ ]) &&
130
+ typeof value.plugin_instance_id === "string" && value.plugin_instance_id.length > 0 &&
131
+ Number.isSafeInteger(value.expected_policy_revision) && Number(value.expected_policy_revision) >= 1 &&
132
+ Number.isSafeInteger(value.actual_policy_revision) && Number(value.actual_policy_revision) >= 1 &&
133
+ Number.isSafeInteger(value.expected_management_revision) && Number(value.expected_management_revision) >= 1 &&
134
+ Number.isSafeInteger(value.actual_management_revision) && Number(value.actual_management_revision) >= 1 &&
135
+ Number.isSafeInteger(value.expected_revoke_epoch) && Number(value.expected_revoke_epoch) >= 0 &&
136
+ Number.isSafeInteger(value.actual_revoke_epoch) && Number(value.actual_revoke_epoch) >= 0;
137
+ }
138
+ if (code === "PLUGIN_BINDING_REVISION_MISMATCH") {
139
+ return hasExactKeys(value, ["plugin_instance_id", "expected_binding_revision", "actual_binding_revision"]) &&
140
+ typeof value.plugin_instance_id === "string" && value.plugin_instance_id.length > 0 &&
141
+ Number.isSafeInteger(value.expected_binding_revision) && Number(value.expected_binding_revision) >= 1 &&
142
+ Number.isSafeInteger(value.actual_binding_revision) && Number(value.actual_binding_revision) >= 1;
143
+ }
144
+ if (code === "PLUGIN_VALUES_REVISION_MISMATCH") {
145
+ return hasExactKeys(value, ["plugin_instance_id", "expected_values_revision", "actual_values_revision"]) &&
146
+ typeof value.plugin_instance_id === "string" && value.plugin_instance_id.length > 0 &&
147
+ Number.isSafeInteger(value.expected_values_revision) && Number(value.expected_values_revision) >= 1 &&
148
+ Number.isSafeInteger(value.actual_values_revision) && Number(value.actual_values_revision) >= 1;
149
+ }
150
+ if (code === "PLUGIN_CAPABILITY_ERROR") {
151
+ return hasAllowedKeys(value, ["capability_id", "capability_version", "detail_schema_sha256", "business_error_code", "business_error_details"]) &&
152
+ hasRequiredKeys(value, ["capability_id", "capability_version", "detail_schema_sha256", "business_error_code"]) &&
153
+ typeof value.capability_id === "string" && value.capability_id.length > 0 &&
154
+ typeof value.capability_version === "string" && value.capability_version.length > 0 &&
155
+ typeof value.detail_schema_sha256 === "string" && /^[0-9a-f]{64}$/.test(value.detail_schema_sha256) &&
156
+ typeof value.business_error_code === "string" && /^[A-Z][A-Z0-9_]*$/.test(value.business_error_code) &&
157
+ (value.business_error_details === undefined || isRecord(value.business_error_details));
158
+ }
159
+ if (code === "PLUGIN_WORKER_ERROR") {
160
+ return hasExactKeys(value, ["worker_error_code", "worker_error_message", "worker_error_origin"]) &&
161
+ typeof value.worker_error_code === "string" && /^[A-Z][A-Z0-9_]*$/.test(value.worker_error_code) &&
162
+ typeof value.worker_error_message === "string" && value.worker_error_message.length > 0 &&
163
+ Array.from(value.worker_error_message).length <= 4096 &&
164
+ ["runtime", "hostcall", "plugin"].includes(String(value.worker_error_origin));
165
+ }
166
+ if (code === "PLUGIN_JSON_LIMIT_EXCEEDED") {
167
+ return hasExactKeys(value, ["reason"]) &&
168
+ typeof value.reason === "string" && jsonLimitReasons.includes(value.reason);
169
+ }
170
+ if (packageValidationErrorCodes.includes(code)) {
171
+ return hasAllowedKeys(value, ["reason", "path", "pointer"]) &&
172
+ hasRequiredKeys(value, ["reason"]) &&
173
+ typeof value.reason === "string" && packageValidationReasons.includes(value.reason) &&
174
+ (value.path === undefined || typeof value.path === "string") &&
175
+ (value.pointer === undefined || typeof value.pointer === "string");
176
+ }
177
+ return hasExactKeys(value, []);
178
+ }
179
+ function hasRequiredKeys(value, keys) {
180
+ return keys.every((key) => Object.hasOwn(value, key));
45
181
  }
@@ -1,17 +1,12 @@
1
1
  import type { PluginPlatformClientOptions, PluginRecord } from "./platform.js";
2
- export type PluginImportLocalPackageRequest = {
3
- package_base64: string;
4
- plugin_instance_id?: string;
5
- plugin_state_version: 0;
6
- };
7
- export type PluginUpdateLocalPackageRequest = {
8
- plugin_instance_id: string;
9
- package_base64: string;
10
- plugin_state_version: number;
2
+ export type PluginUploadProgress = (uploadedBytes: number, totalBytes: number) => void;
3
+ export type PluginLocalImportOptions = {
4
+ signal?: AbortSignal;
5
+ onProgress?: PluginUploadProgress;
11
6
  };
12
7
  export declare class PluginLocalImportClient {
13
8
  #private;
14
9
  constructor(options?: PluginPlatformClientOptions);
15
- importLocalPackage(request: PluginImportLocalPackageRequest): Promise<PluginRecord>;
16
- updateLocalPackage(request: PluginUpdateLocalPackageRequest): Promise<PluginRecord>;
10
+ importLocalPackage(pluginInstanceId: string, packageBlob: Blob, options?: PluginLocalImportOptions): Promise<PluginRecord>;
11
+ updateLocalPackage(pluginInstanceId: string, expectedManagementRevision: number, packageBlob: Blob, options?: PluginLocalImportOptions): Promise<PluginRecord>;
17
12
  }