@floegence/redevplugin-ui 0.6.6 → 0.6.8
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/dist/contracts.gen.d.ts +3 -3
- package/dist/contracts.gen.js +3 -3
- package/dist/openapi.gen.d.ts +526 -1
- package/dist/platform.d.ts +10 -0
- package/dist/platform.js +103 -0
- package/package.json +2 -2
package/dist/contracts.gen.d.ts
CHANGED
|
@@ -136,12 +136,12 @@ export declare const redevPluginContractArtifacts: readonly [{
|
|
|
136
136
|
readonly id: "owner-scope-inventory-registry";
|
|
137
137
|
readonly path: "spec/plugin/owner-scope-inventories-v1.json";
|
|
138
138
|
readonly version: "owner-scope-inventory-registry-v1";
|
|
139
|
-
readonly sha256: "
|
|
139
|
+
readonly sha256: "f655313a641368383b3d84b6ea4f6a2a2ef42a44a4dd23f71211361c9c2e0505";
|
|
140
140
|
}, {
|
|
141
141
|
readonly id: "owner-scope-inventory-schema";
|
|
142
142
|
readonly path: "spec/plugin/owner-scope-inventory-v1.schema.json";
|
|
143
143
|
readonly version: "owner-scope-inventory-v1";
|
|
144
|
-
readonly sha256: "
|
|
144
|
+
readonly sha256: "21dc4980103f3a36f4252ce141d7350476ec00968e8a320695e450274e928be1";
|
|
145
145
|
}, {
|
|
146
146
|
readonly id: "owner-scope-migration-schema";
|
|
147
147
|
readonly path: "spec/plugin/owner-scope-migration-v1.schema.json";
|
|
@@ -176,7 +176,7 @@ export declare const redevPluginContractArtifacts: readonly [{
|
|
|
176
176
|
readonly id: "plugin-platform-openapi";
|
|
177
177
|
readonly path: "spec/openapi/plugin-platform-v8.yaml";
|
|
178
178
|
readonly version: "plugin-platform-v8";
|
|
179
|
-
readonly sha256: "
|
|
179
|
+
readonly sha256: "39bcfcfb846c868945ab0d21404747b2f5f083574c7ead5aca64f65b98212b7d";
|
|
180
180
|
}, {
|
|
181
181
|
readonly id: "process-containment-schema";
|
|
182
182
|
readonly path: "spec/plugin/process-containment-v1.schema.json";
|
package/dist/contracts.gen.js
CHANGED
|
@@ -146,13 +146,13 @@ export const redevPluginContractArtifacts = [
|
|
|
146
146
|
id: "owner-scope-inventory-registry",
|
|
147
147
|
path: "spec/plugin/owner-scope-inventories-v1.json",
|
|
148
148
|
version: "owner-scope-inventory-registry-v1",
|
|
149
|
-
sha256: "
|
|
149
|
+
sha256: "f655313a641368383b3d84b6ea4f6a2a2ef42a44a4dd23f71211361c9c2e0505",
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
id: "owner-scope-inventory-schema",
|
|
153
153
|
path: "spec/plugin/owner-scope-inventory-v1.schema.json",
|
|
154
154
|
version: "owner-scope-inventory-v1",
|
|
155
|
-
sha256: "
|
|
155
|
+
sha256: "21dc4980103f3a36f4252ce141d7350476ec00968e8a320695e450274e928be1",
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
158
|
id: "owner-scope-migration-schema",
|
|
@@ -194,7 +194,7 @@ export const redevPluginContractArtifacts = [
|
|
|
194
194
|
id: "plugin-platform-openapi",
|
|
195
195
|
path: "spec/openapi/plugin-platform-v8.yaml",
|
|
196
196
|
version: "plugin-platform-v8",
|
|
197
|
-
sha256: "
|
|
197
|
+
sha256: "39bcfcfb846c868945ab0d21404747b2f5f083574c7ead5aca64f65b98212b7d",
|
|
198
198
|
},
|
|
199
199
|
{
|
|
200
200
|
id: "process-containment-schema",
|
package/dist/openapi.gen.d.ts
CHANGED
|
@@ -19,6 +19,91 @@ export interface paths {
|
|
|
19
19
|
patch?: never;
|
|
20
20
|
trace?: never;
|
|
21
21
|
};
|
|
22
|
+
"/_redevplugin/api/plugins/external-packages/inspect": {
|
|
23
|
+
parameters: {
|
|
24
|
+
query?: never;
|
|
25
|
+
header?: never;
|
|
26
|
+
path?: never;
|
|
27
|
+
cookie?: never;
|
|
28
|
+
};
|
|
29
|
+
get?: never;
|
|
30
|
+
put?: never;
|
|
31
|
+
/** @description Resolves and inspects a package from a caller-selected URL or GitHub repository without installing it. Package identity, hashes, provenance, signature state, approval, and update eligibility are computed by the platform and cannot be supplied by the caller. */
|
|
32
|
+
post: operations["inspectExternalPackage"];
|
|
33
|
+
delete?: never;
|
|
34
|
+
options?: never;
|
|
35
|
+
head?: never;
|
|
36
|
+
patch?: never;
|
|
37
|
+
trace?: never;
|
|
38
|
+
};
|
|
39
|
+
"/_redevplugin/api/plugins/external-packages/upload/inspect": {
|
|
40
|
+
parameters: {
|
|
41
|
+
query?: never;
|
|
42
|
+
header?: never;
|
|
43
|
+
path?: never;
|
|
44
|
+
cookie?: never;
|
|
45
|
+
};
|
|
46
|
+
get?: never;
|
|
47
|
+
put?: never;
|
|
48
|
+
/** @description Uploads and inspects a package for installation without committing it. Package identity, hashes, provenance, signature state, approval, and update eligibility are computed by the platform and cannot be supplied by the caller. The returned inspection is committed and reconciled through the shared external-package commit/query routes. */
|
|
49
|
+
post: operations["inspectUploadedExternalPackageInstall"];
|
|
50
|
+
delete?: never;
|
|
51
|
+
options?: never;
|
|
52
|
+
head?: never;
|
|
53
|
+
patch?: never;
|
|
54
|
+
trace?: never;
|
|
55
|
+
};
|
|
56
|
+
"/_redevplugin/api/plugins/{plugin_instance_id}/external-packages/upload/inspect": {
|
|
57
|
+
parameters: {
|
|
58
|
+
query?: never;
|
|
59
|
+
header?: never;
|
|
60
|
+
path?: never;
|
|
61
|
+
cookie?: never;
|
|
62
|
+
};
|
|
63
|
+
get?: never;
|
|
64
|
+
/** @description Uploads and inspects a package for an optimistic-concurrency-controlled update without committing it. Package identity, hashes, provenance, signature state, approval, and update eligibility are computed by the platform and cannot be supplied by the caller. The returned inspection is committed and reconciled through the shared external-package commit/query routes. */
|
|
65
|
+
put: operations["inspectUploadedExternalPackageUpdate"];
|
|
66
|
+
post?: never;
|
|
67
|
+
delete?: never;
|
|
68
|
+
options?: never;
|
|
69
|
+
head?: never;
|
|
70
|
+
patch?: never;
|
|
71
|
+
trace?: never;
|
|
72
|
+
};
|
|
73
|
+
"/_redevplugin/api/plugins/external-packages/commit": {
|
|
74
|
+
parameters: {
|
|
75
|
+
query?: never;
|
|
76
|
+
header?: never;
|
|
77
|
+
path?: never;
|
|
78
|
+
cookie?: never;
|
|
79
|
+
};
|
|
80
|
+
get?: never;
|
|
81
|
+
put?: never;
|
|
82
|
+
/** @description Commits one unexpired inspection after the user confirms its exact server-computed digest. An absent signature does not make a package ineligible for installation; signature assessment affects trust classification and automatic-update eligibility only. */
|
|
83
|
+
post: operations["commitExternalPackage"];
|
|
84
|
+
delete?: never;
|
|
85
|
+
options?: never;
|
|
86
|
+
head?: never;
|
|
87
|
+
patch?: never;
|
|
88
|
+
trace?: never;
|
|
89
|
+
};
|
|
90
|
+
"/_redevplugin/api/plugins/external-packages/commit/query": {
|
|
91
|
+
parameters: {
|
|
92
|
+
query?: never;
|
|
93
|
+
header?: never;
|
|
94
|
+
path?: never;
|
|
95
|
+
cookie?: never;
|
|
96
|
+
};
|
|
97
|
+
get?: never;
|
|
98
|
+
put?: never;
|
|
99
|
+
/** @description Reconciles the commit result for one inspection without repeating the mutation. */
|
|
100
|
+
post: operations["queryExternalPackageCommit"];
|
|
101
|
+
delete?: never;
|
|
102
|
+
options?: never;
|
|
103
|
+
head?: never;
|
|
104
|
+
patch?: never;
|
|
105
|
+
trace?: never;
|
|
106
|
+
};
|
|
22
107
|
"/_redevplugin/api/plugins/install-release-ref": {
|
|
23
108
|
parameters: {
|
|
24
109
|
query?: never;
|
|
@@ -890,6 +975,16 @@ export interface components {
|
|
|
890
975
|
ok: true;
|
|
891
976
|
data: components["schemas"]["PluginRecord"];
|
|
892
977
|
};
|
|
978
|
+
ExternalPackageInspectionSuccessResponse: {
|
|
979
|
+
/** @constant */
|
|
980
|
+
ok: true;
|
|
981
|
+
data: components["schemas"]["ExternalPackageInspection"];
|
|
982
|
+
};
|
|
983
|
+
ExternalPackageCommitSuccessResponse: {
|
|
984
|
+
/** @constant */
|
|
985
|
+
ok: true;
|
|
986
|
+
data: components["schemas"]["ExternalPackageCommitResult"];
|
|
987
|
+
};
|
|
893
988
|
PluginCatalogSuccessResponse: {
|
|
894
989
|
/** @constant */
|
|
895
990
|
ok: true;
|
|
@@ -898,7 +993,7 @@ export interface components {
|
|
|
898
993
|
PluginFeaturesSuccessResponse: {
|
|
899
994
|
/** @constant */
|
|
900
995
|
ok: true;
|
|
901
|
-
data: ("release" | "runtime" | "capability" | "connectivity" | "secrets" | "core_action")[];
|
|
996
|
+
data: ("release" | "runtime" | "capability" | "connectivity" | "secrets" | "core_action" | "external_package")[];
|
|
902
997
|
};
|
|
903
998
|
CompatibilitySuccessResponse: {
|
|
904
999
|
/** @constant */
|
|
@@ -1515,6 +1610,315 @@ export interface components {
|
|
|
1515
1610
|
/** Format: date-time */
|
|
1516
1611
|
updated_at?: string;
|
|
1517
1612
|
};
|
|
1613
|
+
/** @description Closed install or update intent. Update concurrency values are supplied by the caller, while package identity is always derived from the inspected artifact. */
|
|
1614
|
+
ExternalPackageIntentRequest: {
|
|
1615
|
+
/** @constant */
|
|
1616
|
+
action: "install";
|
|
1617
|
+
} | {
|
|
1618
|
+
/** @constant */
|
|
1619
|
+
action: "update";
|
|
1620
|
+
plugin_instance_id: string;
|
|
1621
|
+
expected_management_revision: number;
|
|
1622
|
+
};
|
|
1623
|
+
/** @description Server-resolved install or update intent. The platform generates the install instance identifier during inspection. */
|
|
1624
|
+
ExternalPackageIntent: {
|
|
1625
|
+
/** @constant */
|
|
1626
|
+
action: "install";
|
|
1627
|
+
plugin_instance_id: string;
|
|
1628
|
+
} | {
|
|
1629
|
+
/** @constant */
|
|
1630
|
+
action: "update";
|
|
1631
|
+
plugin_instance_id: string;
|
|
1632
|
+
expected_management_revision: number;
|
|
1633
|
+
};
|
|
1634
|
+
/** @description Caller-selected external source. Redirect resolution, package hashes, identity, and provenance are derived by the platform. */
|
|
1635
|
+
ExternalPackageSource: {
|
|
1636
|
+
/** @constant */
|
|
1637
|
+
kind: "package_url";
|
|
1638
|
+
/** Format: uri */
|
|
1639
|
+
url: string;
|
|
1640
|
+
} | {
|
|
1641
|
+
/** @constant */
|
|
1642
|
+
kind: "github_repository";
|
|
1643
|
+
/** Format: uri */
|
|
1644
|
+
url: string;
|
|
1645
|
+
/** @description Optional exact release tag. When omitted, the resolver selects the repository's latest eligible release. */
|
|
1646
|
+
tag?: string;
|
|
1647
|
+
};
|
|
1648
|
+
/** @description Requests server-side inspection. Trust, hashes, package identity, approval, provenance, signature assessment, and update eligibility are intentionally not caller-controlled. */
|
|
1649
|
+
InspectExternalPackageRequest: {
|
|
1650
|
+
intent: components["schemas"]["ExternalPackageIntentRequest"];
|
|
1651
|
+
source: components["schemas"]["ExternalPackageSource"];
|
|
1652
|
+
};
|
|
1653
|
+
/** @description Confirms the exact immutable inspection. The digest cannot override any inspected fact. */
|
|
1654
|
+
CommitExternalPackageRequest: {
|
|
1655
|
+
inspection_id: string;
|
|
1656
|
+
confirmation_digest: string;
|
|
1657
|
+
};
|
|
1658
|
+
QueryExternalPackageCommitRequest: {
|
|
1659
|
+
inspection_id: string;
|
|
1660
|
+
commit_id?: string;
|
|
1661
|
+
};
|
|
1662
|
+
/** @description Cryptographic signature fact computed over the inspected artifact. The absent state is installable and affects trust classification and automatic-update eligibility only. */
|
|
1663
|
+
ExternalPackageSignatureAssessment: {
|
|
1664
|
+
/** @enum {string} */
|
|
1665
|
+
state: "verified" | "absent" | "unknown_signer" | "invalid" | "revoked" | "unavailable";
|
|
1666
|
+
reason_codes: string[];
|
|
1667
|
+
assessed_hashes: components["schemas"]["TrustHashSet"];
|
|
1668
|
+
algorithm?: string;
|
|
1669
|
+
key_id?: string;
|
|
1670
|
+
/** Format: date-time */
|
|
1671
|
+
assessed_at: string;
|
|
1672
|
+
assessment_epoch?: string;
|
|
1673
|
+
};
|
|
1674
|
+
/** @description Credential-free redirect projection. Userinfo, query strings, and fragments are never exposed. */
|
|
1675
|
+
ExternalPackageRedirectHop: {
|
|
1676
|
+
/** Format: uri */
|
|
1677
|
+
origin: string;
|
|
1678
|
+
path: string;
|
|
1679
|
+
};
|
|
1680
|
+
/** @description Stable, credential-free source provenance computed after URL, GitHub release, or uploaded-package resolution. Upload identifiers are opaque server-generated values and cannot be supplied by callers. */
|
|
1681
|
+
ExternalPackageSourceProvenance: {
|
|
1682
|
+
/** @constant */
|
|
1683
|
+
kind: "package_url";
|
|
1684
|
+
/** Format: uri */
|
|
1685
|
+
source_origin: string;
|
|
1686
|
+
source_path: string;
|
|
1687
|
+
redirect_chain: components["schemas"]["ExternalPackageRedirectHop"][];
|
|
1688
|
+
package_sha256: string;
|
|
1689
|
+
/** Format: date-time */
|
|
1690
|
+
resolved_at: string;
|
|
1691
|
+
} | {
|
|
1692
|
+
/** @constant */
|
|
1693
|
+
kind: "package_upload";
|
|
1694
|
+
/** @description Opaque server-generated identifier for the staged uploaded artifact. */
|
|
1695
|
+
upload_id: string;
|
|
1696
|
+
package_sha256: string;
|
|
1697
|
+
/** Format: date-time */
|
|
1698
|
+
resolved_at: string;
|
|
1699
|
+
} | {
|
|
1700
|
+
/** @constant */
|
|
1701
|
+
kind: "github_repository";
|
|
1702
|
+
/** @description Stable GitHub repository database ID encoded as decimal text. */
|
|
1703
|
+
repository_id: string;
|
|
1704
|
+
/** @description Stable GitHub release database ID encoded as decimal text. */
|
|
1705
|
+
release_id: string;
|
|
1706
|
+
/** @description Stable GitHub release asset database ID encoded as decimal text. */
|
|
1707
|
+
asset_id: string;
|
|
1708
|
+
/** Format: uri */
|
|
1709
|
+
repository_url: string;
|
|
1710
|
+
/** @description Display-only owner login; repository_id remains authoritative across renames. */
|
|
1711
|
+
owner: string;
|
|
1712
|
+
/** @description Display-only repository name; repository_id remains authoritative across renames. */
|
|
1713
|
+
repository: string;
|
|
1714
|
+
resolved_commit_sha: string;
|
|
1715
|
+
release_tag?: string;
|
|
1716
|
+
asset_name?: string;
|
|
1717
|
+
package_sha256: string;
|
|
1718
|
+
/** Format: date-time */
|
|
1719
|
+
resolved_at: string;
|
|
1720
|
+
};
|
|
1721
|
+
/** @description Execution decision independent from signature state. Session and owner hashes are excluded from this public projection. */
|
|
1722
|
+
ExternalPackageExecutionApproval: {
|
|
1723
|
+
/** @enum {string} */
|
|
1724
|
+
state: "pending" | "user_approved" | "policy_approved" | "policy_blocked";
|
|
1725
|
+
reason_codes: string[];
|
|
1726
|
+
/** Format: date-time */
|
|
1727
|
+
assessed_at: string;
|
|
1728
|
+
/** Format: date-time */
|
|
1729
|
+
approved_at?: string;
|
|
1730
|
+
};
|
|
1731
|
+
/** @description Automatic-update decision. Unsigned or otherwise unverified packages remain installable but are normally manual-only. */
|
|
1732
|
+
ExternalPackageUpdateEligibility: {
|
|
1733
|
+
/** @enum {string} */
|
|
1734
|
+
state: "manual_only" | "automatic_eligible";
|
|
1735
|
+
reason_codes: string[];
|
|
1736
|
+
/** Format: date-time */
|
|
1737
|
+
assessed_at: string;
|
|
1738
|
+
};
|
|
1739
|
+
ExternalPackagePermissionSummary: {
|
|
1740
|
+
permission_id: string;
|
|
1741
|
+
methods: string[];
|
|
1742
|
+
};
|
|
1743
|
+
ExternalPackageMethodRouteSummary: {
|
|
1744
|
+
/** @enum {string} */
|
|
1745
|
+
kind: "capability" | "worker" | "core_action";
|
|
1746
|
+
binding_id?: string;
|
|
1747
|
+
target_method?: string;
|
|
1748
|
+
worker_id?: string;
|
|
1749
|
+
action_id?: string;
|
|
1750
|
+
};
|
|
1751
|
+
ExternalPackageConfirmationSummary: {
|
|
1752
|
+
/** @enum {string} */
|
|
1753
|
+
mode: "none" | "required" | "risk_based";
|
|
1754
|
+
preflight_method?: string;
|
|
1755
|
+
request_hash_fields: string[];
|
|
1756
|
+
plan_hash_required: boolean;
|
|
1757
|
+
};
|
|
1758
|
+
ExternalPackageCancelSummary: {
|
|
1759
|
+
cancelable: boolean;
|
|
1760
|
+
/** @enum {string} */
|
|
1761
|
+
disable_behavior: "cancel" | "orphan" | "wait";
|
|
1762
|
+
/** @enum {string} */
|
|
1763
|
+
uninstall_behavior: "cancel_then_block_delete" | "force_cleanup_allowed";
|
|
1764
|
+
ack_timeout_ms: number;
|
|
1765
|
+
};
|
|
1766
|
+
ExternalPackageMethodSummary: {
|
|
1767
|
+
method: string;
|
|
1768
|
+
route: components["schemas"]["ExternalPackageMethodRouteSummary"];
|
|
1769
|
+
/** @enum {string} */
|
|
1770
|
+
effect: "read" | "write" | "delete" | "execute" | "admin";
|
|
1771
|
+
/** @enum {string} */
|
|
1772
|
+
execution: "sync" | "operation" | "subscription";
|
|
1773
|
+
dangerous: boolean;
|
|
1774
|
+
preflight_only: boolean;
|
|
1775
|
+
required_permissions: string[];
|
|
1776
|
+
confirmation: components["schemas"]["ExternalPackageConfirmationSummary"];
|
|
1777
|
+
cancel?: components["schemas"]["ExternalPackageCancelSummary"];
|
|
1778
|
+
};
|
|
1779
|
+
ExternalPackageCapabilityContractSummary: {
|
|
1780
|
+
binding_id: string;
|
|
1781
|
+
capability_id: string;
|
|
1782
|
+
capability_version: string;
|
|
1783
|
+
contract_sha256: string;
|
|
1784
|
+
};
|
|
1785
|
+
ExternalPackageWorkerSummary: {
|
|
1786
|
+
worker_id: string;
|
|
1787
|
+
artifact: string;
|
|
1788
|
+
/** @constant */
|
|
1789
|
+
abi: "redevplugin-wasm-worker-v2";
|
|
1790
|
+
/** @constant */
|
|
1791
|
+
mode: "job";
|
|
1792
|
+
scope: components["schemas"]["ResourceScopeKind"];
|
|
1793
|
+
memory_limit_bytes: number;
|
|
1794
|
+
idle_timeout_ms: number;
|
|
1795
|
+
};
|
|
1796
|
+
ExternalPackageNetworkMethodAccessSummary: {
|
|
1797
|
+
method: string;
|
|
1798
|
+
operations: ("http" | "http_stream" | "websocket_round_trip" | "tcp_round_trip" | "udp_round_trip")[];
|
|
1799
|
+
http_methods: ("GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS")[];
|
|
1800
|
+
};
|
|
1801
|
+
ExternalPackageNetworkSummary: {
|
|
1802
|
+
connector_id: string;
|
|
1803
|
+
/** @enum {string} */
|
|
1804
|
+
transport: "http" | "websocket" | "tcp" | "udp";
|
|
1805
|
+
scope: components["schemas"]["ResourceScopeKind"];
|
|
1806
|
+
destinations: string[];
|
|
1807
|
+
auth_declared: boolean;
|
|
1808
|
+
tls_declared: boolean;
|
|
1809
|
+
method_access: components["schemas"]["ExternalPackageNetworkMethodAccessSummary"][];
|
|
1810
|
+
};
|
|
1811
|
+
ExternalPackageStorageMethodAccessSummary: {
|
|
1812
|
+
method: string;
|
|
1813
|
+
operations: ("read" | "write" | "delete" | "list" | "get" | "put" | "query" | "exec")[];
|
|
1814
|
+
};
|
|
1815
|
+
ExternalPackageStorageSummary: {
|
|
1816
|
+
store_id: string;
|
|
1817
|
+
/** @enum {string} */
|
|
1818
|
+
kind: "kv" | "files" | "sqlite";
|
|
1819
|
+
scope: components["schemas"]["ResourceScopeKind"];
|
|
1820
|
+
quota_bytes: number;
|
|
1821
|
+
quota_files?: number;
|
|
1822
|
+
schema_version: number;
|
|
1823
|
+
method_access: components["schemas"]["ExternalPackageStorageMethodAccessSummary"][];
|
|
1824
|
+
};
|
|
1825
|
+
ExternalPackageSecretRefSummary: {
|
|
1826
|
+
setting_key: string;
|
|
1827
|
+
secret_ref: string;
|
|
1828
|
+
scope: components["schemas"]["ResourceScopeKind"];
|
|
1829
|
+
};
|
|
1830
|
+
ExternalPackageCoreActionSummary: {
|
|
1831
|
+
method: string;
|
|
1832
|
+
action_id: string;
|
|
1833
|
+
/** @enum {string} */
|
|
1834
|
+
effect: "read" | "write" | "delete" | "execute" | "admin";
|
|
1835
|
+
};
|
|
1836
|
+
ExternalPackageIntentSummary: {
|
|
1837
|
+
intent_id: string;
|
|
1838
|
+
method: string;
|
|
1839
|
+
};
|
|
1840
|
+
ExternalPackageSurfaceSummary: {
|
|
1841
|
+
surface_id: string;
|
|
1842
|
+
/** @enum {string} */
|
|
1843
|
+
kind: "view" | "command" | "background";
|
|
1844
|
+
/** @enum {string} */
|
|
1845
|
+
intent: "primary" | "secondary" | "utility";
|
|
1846
|
+
label: string;
|
|
1847
|
+
entry: string;
|
|
1848
|
+
icon?: string;
|
|
1849
|
+
default_size?: components["schemas"]["ExternalPackageSizeSummary"];
|
|
1850
|
+
};
|
|
1851
|
+
ExternalPackageSizeSummary: {
|
|
1852
|
+
width: number;
|
|
1853
|
+
height: number;
|
|
1854
|
+
};
|
|
1855
|
+
/** @description Closed, display-ready projection of every security-relevant declaration in the inspected manifest. */
|
|
1856
|
+
ExternalPackageSecuritySummary: {
|
|
1857
|
+
summary_sha256: string;
|
|
1858
|
+
permissions: components["schemas"]["ExternalPackagePermissionSummary"][];
|
|
1859
|
+
methods: components["schemas"]["ExternalPackageMethodSummary"][];
|
|
1860
|
+
capability_contracts: components["schemas"]["ExternalPackageCapabilityContractSummary"][];
|
|
1861
|
+
workers: components["schemas"]["ExternalPackageWorkerSummary"][];
|
|
1862
|
+
network: components["schemas"]["ExternalPackageNetworkSummary"][];
|
|
1863
|
+
storage: components["schemas"]["ExternalPackageStorageSummary"][];
|
|
1864
|
+
secret_refs: components["schemas"]["ExternalPackageSecretRefSummary"][];
|
|
1865
|
+
core_actions: components["schemas"]["ExternalPackageCoreActionSummary"][];
|
|
1866
|
+
intents: components["schemas"]["ExternalPackageIntentSummary"][];
|
|
1867
|
+
surfaces: components["schemas"]["ExternalPackageSurfaceSummary"][];
|
|
1868
|
+
};
|
|
1869
|
+
/** @description Immutable inspection projection. Package identity and all four trust/security facts are server-derived. */
|
|
1870
|
+
ExternalPackageInspection: {
|
|
1871
|
+
inspection_id: string;
|
|
1872
|
+
/** Format: date-time */
|
|
1873
|
+
expires_at: string;
|
|
1874
|
+
intent: components["schemas"]["ExternalPackageIntent"];
|
|
1875
|
+
publisher_id: string;
|
|
1876
|
+
plugin_id: string;
|
|
1877
|
+
version: components["schemas"]["StrictSemVer"];
|
|
1878
|
+
inspected_hashes: components["schemas"]["TrustHashSet"];
|
|
1879
|
+
signature_assessment: components["schemas"]["ExternalPackageSignatureAssessment"];
|
|
1880
|
+
source_provenance: components["schemas"]["ExternalPackageSourceProvenance"];
|
|
1881
|
+
execution_approval: components["schemas"]["ExternalPackageExecutionApproval"];
|
|
1882
|
+
update_eligibility: components["schemas"]["ExternalPackageUpdateEligibility"];
|
|
1883
|
+
security_summary: components["schemas"]["ExternalPackageSecuritySummary"];
|
|
1884
|
+
confirmation_digest: string;
|
|
1885
|
+
};
|
|
1886
|
+
/** @description Immutable successful commit evidence. */
|
|
1887
|
+
ExternalPackageCommitReceipt: {
|
|
1888
|
+
commit_id: string;
|
|
1889
|
+
inspection_id: string;
|
|
1890
|
+
package_sha256: string;
|
|
1891
|
+
management_revision: number;
|
|
1892
|
+
/** Format: date-time */
|
|
1893
|
+
committed_at: string;
|
|
1894
|
+
};
|
|
1895
|
+
/** @description Closed commit reconciliation union. A committed result repeats all four facts so clients never infer them from legacy trust_state alone. A failed result is terminal evidence that a durable commit did not occur and requires a fresh inspection before retrying. */
|
|
1896
|
+
ExternalPackageCommitResult: {
|
|
1897
|
+
/** @constant */
|
|
1898
|
+
status: "committed";
|
|
1899
|
+
inspection_id: string;
|
|
1900
|
+
intent: components["schemas"]["ExternalPackageIntent"];
|
|
1901
|
+
receipt: components["schemas"]["ExternalPackageCommitReceipt"];
|
|
1902
|
+
plugin: components["schemas"]["PluginRecord"];
|
|
1903
|
+
signature_assessment: components["schemas"]["ExternalPackageSignatureAssessment"];
|
|
1904
|
+
source_provenance: components["schemas"]["ExternalPackageSourceProvenance"];
|
|
1905
|
+
execution_approval: components["schemas"]["ExternalPackageExecutionApproval"];
|
|
1906
|
+
update_eligibility: components["schemas"]["ExternalPackageUpdateEligibility"];
|
|
1907
|
+
security_summary: components["schemas"]["ExternalPackageSecuritySummary"];
|
|
1908
|
+
} | {
|
|
1909
|
+
/** @constant */
|
|
1910
|
+
status: "in_progress";
|
|
1911
|
+
inspection_id: string;
|
|
1912
|
+
intent: components["schemas"]["ExternalPackageIntent"];
|
|
1913
|
+
retry_after_ms: number;
|
|
1914
|
+
} | {
|
|
1915
|
+
/** @constant */
|
|
1916
|
+
status: "failed";
|
|
1917
|
+
inspection_id: string;
|
|
1918
|
+
intent: components["schemas"]["ExternalPackageIntent"];
|
|
1919
|
+
/** @constant */
|
|
1920
|
+
failure_code: "host_restarted_before_commit";
|
|
1921
|
+
};
|
|
1518
1922
|
/** @enum {string} */
|
|
1519
1923
|
TrustState: "verified" | "unsigned_local" | "untrusted" | "needs_review" | "trust_unavailable" | "blocked_security";
|
|
1520
1924
|
TrustHashSet: {
|
|
@@ -1551,6 +1955,11 @@ export interface components {
|
|
|
1551
1955
|
[key: string]: unknown;
|
|
1552
1956
|
};
|
|
1553
1957
|
local_import_provenance?: components["schemas"]["LocalImportProvenance"];
|
|
1958
|
+
signature_assessment?: components["schemas"]["ExternalPackageSignatureAssessment"];
|
|
1959
|
+
source_provenance?: components["schemas"]["ExternalPackageSourceProvenance"];
|
|
1960
|
+
execution_approval?: components["schemas"]["ExternalPackageExecutionApproval"];
|
|
1961
|
+
update_eligibility?: components["schemas"]["ExternalPackageUpdateEligibility"];
|
|
1962
|
+
security_summary?: components["schemas"]["ExternalPackageSecuritySummary"];
|
|
1554
1963
|
capability_contracts?: components["schemas"]["CapabilityContractPin"][];
|
|
1555
1964
|
manifest: components["schemas"]["ManifestV5"];
|
|
1556
1965
|
package_entries: components["schemas"]["PackageEntry"][];
|
|
@@ -1578,6 +1987,11 @@ export interface components {
|
|
|
1578
1987
|
[key: string]: unknown;
|
|
1579
1988
|
};
|
|
1580
1989
|
local_import_provenance?: components["schemas"]["LocalImportProvenance"];
|
|
1990
|
+
signature_assessment?: components["schemas"]["ExternalPackageSignatureAssessment"];
|
|
1991
|
+
source_provenance?: components["schemas"]["ExternalPackageSourceProvenance"];
|
|
1992
|
+
execution_approval?: components["schemas"]["ExternalPackageExecutionApproval"];
|
|
1993
|
+
update_eligibility?: components["schemas"]["ExternalPackageUpdateEligibility"];
|
|
1994
|
+
security_summary?: components["schemas"]["ExternalPackageSecuritySummary"];
|
|
1581
1995
|
capability_contracts?: components["schemas"]["CapabilityContractPin"][];
|
|
1582
1996
|
/** @enum {string} */
|
|
1583
1997
|
enable_state: "disabled" | "enabled" | "disabled_by_policy" | "disabled_incompatible";
|
|
@@ -2782,6 +3196,24 @@ export interface components {
|
|
|
2782
3196
|
"application/json": components["schemas"]["PluginRecordSuccessResponse"];
|
|
2783
3197
|
};
|
|
2784
3198
|
};
|
|
3199
|
+
/** @description Immutable server-computed package inspection and confirmation boundary. */
|
|
3200
|
+
ExternalPackageInspectionResponse: {
|
|
3201
|
+
headers: {
|
|
3202
|
+
[name: string]: unknown;
|
|
3203
|
+
};
|
|
3204
|
+
content: {
|
|
3205
|
+
"application/json": components["schemas"]["ExternalPackageInspectionSuccessResponse"];
|
|
3206
|
+
};
|
|
3207
|
+
};
|
|
3208
|
+
/** @description External package commit reconciliation result with explicit trust, approval, provenance, and update facts. */
|
|
3209
|
+
ExternalPackageCommitResponse: {
|
|
3210
|
+
headers: {
|
|
3211
|
+
[name: string]: unknown;
|
|
3212
|
+
};
|
|
3213
|
+
content: {
|
|
3214
|
+
"application/json": components["schemas"]["ExternalPackageCommitSuccessResponse"];
|
|
3215
|
+
};
|
|
3216
|
+
};
|
|
2785
3217
|
/** @description Installed plugin catalog response with typed registry records. */
|
|
2786
3218
|
PluginCatalogResponse: {
|
|
2787
3219
|
headers: {
|
|
@@ -3041,6 +3473,21 @@ export interface components {
|
|
|
3041
3473
|
SurfaceInstanceID: string;
|
|
3042
3474
|
};
|
|
3043
3475
|
requestBodies: {
|
|
3476
|
+
InspectExternalPackageRequest: {
|
|
3477
|
+
content: {
|
|
3478
|
+
"application/json": components["schemas"]["InspectExternalPackageRequest"];
|
|
3479
|
+
};
|
|
3480
|
+
};
|
|
3481
|
+
CommitExternalPackageRequest: {
|
|
3482
|
+
content: {
|
|
3483
|
+
"application/json": components["schemas"]["CommitExternalPackageRequest"];
|
|
3484
|
+
};
|
|
3485
|
+
};
|
|
3486
|
+
QueryExternalPackageCommitRequest: {
|
|
3487
|
+
content: {
|
|
3488
|
+
"application/json": components["schemas"]["QueryExternalPackageCommitRequest"];
|
|
3489
|
+
};
|
|
3490
|
+
};
|
|
3044
3491
|
InstallReleaseRefRequest: {
|
|
3045
3492
|
content: {
|
|
3046
3493
|
"application/json": components["schemas"]["InstallReleaseRefRequest"];
|
|
@@ -3293,6 +3740,84 @@ export interface operations {
|
|
|
3293
3740
|
default: components["responses"]["MutationPlatformErrorResponse"];
|
|
3294
3741
|
};
|
|
3295
3742
|
};
|
|
3743
|
+
inspectExternalPackage: {
|
|
3744
|
+
parameters: {
|
|
3745
|
+
query?: never;
|
|
3746
|
+
header?: never;
|
|
3747
|
+
path?: never;
|
|
3748
|
+
cookie?: never;
|
|
3749
|
+
};
|
|
3750
|
+
requestBody: components["requestBodies"]["InspectExternalPackageRequest"];
|
|
3751
|
+
responses: {
|
|
3752
|
+
200: components["responses"]["ExternalPackageInspectionResponse"];
|
|
3753
|
+
default: components["responses"]["MutationPlatformErrorResponse"];
|
|
3754
|
+
};
|
|
3755
|
+
};
|
|
3756
|
+
inspectUploadedExternalPackageInstall: {
|
|
3757
|
+
parameters: {
|
|
3758
|
+
query?: never;
|
|
3759
|
+
header?: never;
|
|
3760
|
+
path?: never;
|
|
3761
|
+
cookie?: never;
|
|
3762
|
+
};
|
|
3763
|
+
requestBody: {
|
|
3764
|
+
content: {
|
|
3765
|
+
"application/vnd.redevplugin.package+zip": string;
|
|
3766
|
+
};
|
|
3767
|
+
};
|
|
3768
|
+
responses: {
|
|
3769
|
+
200: components["responses"]["ExternalPackageInspectionResponse"];
|
|
3770
|
+
default: components["responses"]["MutationPlatformErrorResponse"];
|
|
3771
|
+
};
|
|
3772
|
+
};
|
|
3773
|
+
inspectUploadedExternalPackageUpdate: {
|
|
3774
|
+
parameters: {
|
|
3775
|
+
query?: never;
|
|
3776
|
+
header: {
|
|
3777
|
+
/** @description Canonical decimal management revision. Duplicate, combined, empty, or whitespace-padded values are rejected. */
|
|
3778
|
+
"X-ReDevPlugin-Expected-Management-Revision": number;
|
|
3779
|
+
};
|
|
3780
|
+
path: {
|
|
3781
|
+
plugin_instance_id: components["parameters"]["PluginInstanceID"];
|
|
3782
|
+
};
|
|
3783
|
+
cookie?: never;
|
|
3784
|
+
};
|
|
3785
|
+
requestBody: {
|
|
3786
|
+
content: {
|
|
3787
|
+
"application/vnd.redevplugin.package+zip": string;
|
|
3788
|
+
};
|
|
3789
|
+
};
|
|
3790
|
+
responses: {
|
|
3791
|
+
200: components["responses"]["ExternalPackageInspectionResponse"];
|
|
3792
|
+
default: components["responses"]["MutationPlatformErrorResponse"];
|
|
3793
|
+
};
|
|
3794
|
+
};
|
|
3795
|
+
commitExternalPackage: {
|
|
3796
|
+
parameters: {
|
|
3797
|
+
query?: never;
|
|
3798
|
+
header?: never;
|
|
3799
|
+
path?: never;
|
|
3800
|
+
cookie?: never;
|
|
3801
|
+
};
|
|
3802
|
+
requestBody: components["requestBodies"]["CommitExternalPackageRequest"];
|
|
3803
|
+
responses: {
|
|
3804
|
+
200: components["responses"]["ExternalPackageCommitResponse"];
|
|
3805
|
+
default: components["responses"]["MutationPlatformErrorResponse"];
|
|
3806
|
+
};
|
|
3807
|
+
};
|
|
3808
|
+
queryExternalPackageCommit: {
|
|
3809
|
+
parameters: {
|
|
3810
|
+
query?: never;
|
|
3811
|
+
header?: never;
|
|
3812
|
+
path?: never;
|
|
3813
|
+
cookie?: never;
|
|
3814
|
+
};
|
|
3815
|
+
requestBody: components["requestBodies"]["QueryExternalPackageCommitRequest"];
|
|
3816
|
+
responses: {
|
|
3817
|
+
200: components["responses"]["ExternalPackageCommitResponse"];
|
|
3818
|
+
default: components["responses"]["PlatformErrorResponse"];
|
|
3819
|
+
};
|
|
3820
|
+
};
|
|
3296
3821
|
installReleaseRef: {
|
|
3297
3822
|
parameters: {
|
|
3298
3823
|
query?: never;
|
package/dist/platform.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ export type PluginPackageHashSet = PlatformSchemas["PackageHashSet"];
|
|
|
31
31
|
export type PluginReleaseRef = PlatformSchemas["PluginReleaseRef"];
|
|
32
32
|
export type PluginInstallReleaseRefRequest = PlatformSchemas["InstallReleaseRefRequest"];
|
|
33
33
|
export type PluginUpdateReleaseRefRequest = PlatformSchemas["UpdateReleaseRefRequest"];
|
|
34
|
+
export type PluginInspectExternalPackageRequest = PlatformSchemas["InspectExternalPackageRequest"];
|
|
35
|
+
export type PluginUploadedExternalPackageIntent = PlatformSchemas["ExternalPackageIntentRequest"];
|
|
36
|
+
export type PluginExternalPackageInspection = PlatformSchemas["ExternalPackageInspection"];
|
|
37
|
+
export type PluginCommitExternalPackageRequest = PlatformSchemas["CommitExternalPackageRequest"];
|
|
38
|
+
export type PluginQueryExternalPackageCommitRequest = PlatformSchemas["QueryExternalPackageCommitRequest"];
|
|
39
|
+
export type PluginExternalPackageCommitResult = PlatformSchemas["ExternalPackageCommitResult"];
|
|
34
40
|
export type PluginDowngradeRequest = PlatformSchemas["DowngradeRequest"];
|
|
35
41
|
export type PluginEnableRequest = PlatformSchemas["EnableRequest"];
|
|
36
42
|
export type PluginDisableRequest = PlatformSchemas["DisableRequest"];
|
|
@@ -119,6 +125,10 @@ export declare class PluginPlatformClient {
|
|
|
119
125
|
features(options?: PluginRequestOptions): Promise<PluginFeatures>;
|
|
120
126
|
getCompatibility(options?: PluginRequestOptions): Promise<PluginCompatibilityManifest>;
|
|
121
127
|
installReleaseRef(request: PluginInstallReleaseRefRequest, options?: PluginRequestOptions): Promise<PluginRecord>;
|
|
128
|
+
inspectExternalPackage(request: PluginInspectExternalPackageRequest, options?: PluginRequestOptions): Promise<PluginExternalPackageInspection>;
|
|
129
|
+
inspectUploadedExternalPackage(intent: PluginUploadedExternalPackageIntent, packageBlob: Blob, options?: PluginRequestOptions): Promise<PluginExternalPackageInspection>;
|
|
130
|
+
commitExternalPackage(request: PluginCommitExternalPackageRequest, options?: PluginRequestOptions): Promise<PluginExternalPackageCommitResult>;
|
|
131
|
+
queryExternalPackageCommit(request: PluginQueryExternalPackageCommitRequest, options?: PluginRequestOptions): Promise<PluginExternalPackageCommitResult>;
|
|
122
132
|
updateReleaseRef(request: PluginUpdateReleaseRefRequest, options?: PluginRequestOptions): Promise<PluginRecord>;
|
|
123
133
|
downgradePlugin(request: PluginDowngradeRequest, options?: PluginRequestOptions): Promise<PluginRecord>;
|
|
124
134
|
enablePlugin(request: PluginEnableRequest, options?: PluginRequestOptions): Promise<PluginRecord>;
|
package/dist/platform.js
CHANGED
|
@@ -26,6 +26,7 @@ export class PluginPlatformClient {
|
|
|
26
26
|
#surfaceScope;
|
|
27
27
|
#surfaceTransport;
|
|
28
28
|
#onMutationOutcomeUnknown;
|
|
29
|
+
#externalInspectionTargets = new Map();
|
|
29
30
|
constructor(options = {}) {
|
|
30
31
|
this.#fetch = options.fetch ?? defaultFetch();
|
|
31
32
|
this.#apiBaseURL = trimTrailingSlash(options.apiBaseURL ?? "");
|
|
@@ -39,6 +40,56 @@ export class PluginPlatformClient {
|
|
|
39
40
|
installReleaseRef(request, options = {}) {
|
|
40
41
|
return this.#requestMutation("POST", "/_redevplugin/api/plugins/install-release-ref", request, options);
|
|
41
42
|
}
|
|
43
|
+
async inspectExternalPackage(request, options = {}) {
|
|
44
|
+
const inspection = await this.#requestMutation("POST", "/_redevplugin/api/plugins/external-packages/inspect", request, options);
|
|
45
|
+
this.#externalInspectionTargets.set(inspection.inspection_id, inspection.intent.plugin_instance_id ?? "");
|
|
46
|
+
return inspection;
|
|
47
|
+
}
|
|
48
|
+
async inspectUploadedExternalPackage(intent, packageBlob, options = {}) {
|
|
49
|
+
const canonicalIntent = canonicalUploadedExternalPackageIntent(intent);
|
|
50
|
+
if (!(packageBlob instanceof Blob)) {
|
|
51
|
+
throw new TypeError("external package upload must be a Blob");
|
|
52
|
+
}
|
|
53
|
+
const update = canonicalIntent.action === "update";
|
|
54
|
+
const path = update
|
|
55
|
+
? `/_redevplugin/api/plugins/${encodeURIComponent(canonicalIntent.plugin_instance_id)}/external-packages/upload/inspect`
|
|
56
|
+
: "/_redevplugin/api/plugins/external-packages/upload/inspect";
|
|
57
|
+
const inspection = await this.#requestPackageUploadInspection(update ? "PUT" : "POST", path, packageBlob, options, update
|
|
58
|
+
? { "X-ReDevPlugin-Expected-Management-Revision": String(canonicalIntent.expected_management_revision) }
|
|
59
|
+
: {});
|
|
60
|
+
this.#externalInspectionTargets.set(inspection.inspection_id, update ? canonicalIntent.plugin_instance_id : "");
|
|
61
|
+
return inspection;
|
|
62
|
+
}
|
|
63
|
+
async commitExternalPackage(request, options = {}) {
|
|
64
|
+
const target = this.#externalInspectionTargets.get(request.inspection_id);
|
|
65
|
+
let result;
|
|
66
|
+
try {
|
|
67
|
+
result = await this.#requestMutation("POST", "/_redevplugin/api/plugins/external-packages/commit", request, options);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
await this.#handleMutationFailure(error, target || undefined, "External package commit and local surface teardown failed");
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
if (result.status === "committed") {
|
|
74
|
+
await disposePluginSurfaceScope(this.#surfaceScope, result.plugin.plugin_instance_id);
|
|
75
|
+
this.#externalInspectionTargets.delete(request.inspection_id);
|
|
76
|
+
}
|
|
77
|
+
else if (result.status === "failed") {
|
|
78
|
+
this.#externalInspectionTargets.delete(request.inspection_id);
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
async queryExternalPackageCommit(request, options = {}) {
|
|
83
|
+
const result = await this.#requestQuery("/_redevplugin/api/plugins/external-packages/commit/query", request, options);
|
|
84
|
+
if (result.status === "committed") {
|
|
85
|
+
await disposePluginSurfaceScope(this.#surfaceScope, result.plugin.plugin_instance_id);
|
|
86
|
+
this.#externalInspectionTargets.delete(request.inspection_id);
|
|
87
|
+
}
|
|
88
|
+
else if (result.status === "failed") {
|
|
89
|
+
this.#externalInspectionTargets.delete(request.inspection_id);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
42
93
|
updateReleaseRef(request, options = {}) {
|
|
43
94
|
return this.#mutatePlugin("/_redevplugin/api/plugins/update-release-ref", request, options);
|
|
44
95
|
}
|
|
@@ -296,6 +347,58 @@ export class PluginPlatformClient {
|
|
|
296
347
|
}, operation);
|
|
297
348
|
return readMutationPlatformResponse(response);
|
|
298
349
|
}
|
|
350
|
+
async #requestPackageUploadInspection(method, path, body, options, metadataHeaders) {
|
|
351
|
+
const operation = `${method} ${path}`;
|
|
352
|
+
assertMutationDispatchable(options.signal, operation);
|
|
353
|
+
const response = await dispatchMutationRequest(this.#fetch, this.#apiBaseURL + path, {
|
|
354
|
+
method,
|
|
355
|
+
headers: {
|
|
356
|
+
"Accept": "application/json",
|
|
357
|
+
"Content-Type": "application/vnd.redevplugin.package+zip",
|
|
358
|
+
...metadataHeaders,
|
|
359
|
+
},
|
|
360
|
+
body,
|
|
361
|
+
credentials: "same-origin",
|
|
362
|
+
signal: options.signal,
|
|
363
|
+
}, operation);
|
|
364
|
+
return readMutationPlatformResponse(response);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
function canonicalUploadedExternalPackageIntent(intent) {
|
|
368
|
+
if (typeof intent !== "object" || intent === null || Array.isArray(intent)) {
|
|
369
|
+
throw new TypeError("uploaded external package intent must be a closed install or update object");
|
|
370
|
+
}
|
|
371
|
+
const value = intent;
|
|
372
|
+
const keys = Object.keys(value).sort();
|
|
373
|
+
if (value.action === "install") {
|
|
374
|
+
if (keys.length !== 1 || keys[0] !== "action") {
|
|
375
|
+
throw new TypeError("uploaded external package install intent accepts only action");
|
|
376
|
+
}
|
|
377
|
+
return { action: "install" };
|
|
378
|
+
}
|
|
379
|
+
if (value.action !== "update") {
|
|
380
|
+
throw new TypeError("uploaded external package intent action must be install or update");
|
|
381
|
+
}
|
|
382
|
+
const updateKeys = ["action", "expected_management_revision", "plugin_instance_id"];
|
|
383
|
+
if (keys.length !== updateKeys.length || keys.some((key, index) => key !== updateKeys[index])) {
|
|
384
|
+
throw new TypeError("uploaded external package update intent requires only action, plugin_instance_id, and expected_management_revision");
|
|
385
|
+
}
|
|
386
|
+
if (typeof value.plugin_instance_id !== "string" ||
|
|
387
|
+
value.plugin_instance_id.length === 0 ||
|
|
388
|
+
value.plugin_instance_id.trim() !== value.plugin_instance_id ||
|
|
389
|
+
value.plugin_instance_id.startsWith(".") ||
|
|
390
|
+
value.plugin_instance_id.includes("/")) {
|
|
391
|
+
throw new TypeError("uploaded external package update plugin_instance_id must be a canonical non-empty string");
|
|
392
|
+
}
|
|
393
|
+
if (!Number.isSafeInteger(value.expected_management_revision) ||
|
|
394
|
+
value.expected_management_revision <= 0) {
|
|
395
|
+
throw new TypeError("uploaded external package update expected_management_revision must be a positive safe integer");
|
|
396
|
+
}
|
|
397
|
+
return {
|
|
398
|
+
action: "update",
|
|
399
|
+
plugin_instance_id: value.plugin_instance_id,
|
|
400
|
+
expected_management_revision: value.expected_management_revision,
|
|
401
|
+
};
|
|
299
402
|
}
|
|
300
403
|
const sessionScopeCountKeys = [
|
|
301
404
|
"surfaces",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floegence/redevplugin-ui",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.8",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dist"
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@floegence/redevplugin-contracts": "0.6.
|
|
35
|
+
"@floegence/redevplugin-contracts": "0.6.8"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|