@adminiumjs/manifest 0.3.5 → 0.3.7
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/capacity.d.ts +786 -0
- package/dist/capacity.d.ts.map +1 -0
- package/dist/capacity.js +717 -0
- package/dist/capacity.js.map +1 -0
- package/dist/documents.d.ts +91 -5
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +129 -32
- package/dist/documents.js.map +1 -1
- package/dist/formula.d.ts +114 -2
- package/dist/formula.d.ts.map +1 -1
- package/dist/formula.js +291 -5
- package/dist/formula.js.map +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/marketplace-wire.d.ts +230 -0
- package/dist/marketplace-wire.d.ts.map +1 -0
- package/dist/marketplace-wire.js +138 -0
- package/dist/marketplace-wire.js.map +1 -0
- package/dist/outbox.d.ts +242 -27
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +553 -27
- package/dist/outbox.js.map +1 -1
- package/dist/plan-context.d.ts +28 -3
- package/dist/plan-context.d.ts.map +1 -1
- package/dist/plan-context.js +291 -14
- package/dist/plan-context.js.map +1 -1
- package/dist/plan-model.d.ts +58 -3
- package/dist/plan-model.d.ts.map +1 -1
- package/dist/public-access.d.ts +637 -0
- package/dist/public-access.d.ts.map +1 -1
- package/dist/public-access.js +1593 -12
- package/dist/public-access.js.map +1 -1
- package/dist/refs.d.ts +86 -0
- package/dist/refs.d.ts.map +1 -1
- package/dist/refs.js +186 -0
- package/dist/refs.js.map +1 -1
- package/dist/roles.d.ts +10 -2
- package/dist/roles.d.ts.map +1 -1
- package/dist/roles.js +27 -5
- package/dist/roles.js.map +1 -1
- package/dist/sample.d.ts +218 -2
- package/dist/sample.d.ts.map +1 -1
- package/dist/sample.js +145 -7
- package/dist/sample.js.map +1 -1
- package/dist/schema.d.ts +2860 -360
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1002 -54
- package/dist/schema.js.map +1 -1
- package/dist/shapes.d.ts +5 -1
- package/dist/shapes.d.ts.map +1 -1
- package/dist/shapes.js +13 -3
- package/dist/shapes.js.map +1 -1
- package/dist/states.d.ts +342 -2
- package/dist/states.d.ts.map +1 -1
- package/dist/states.js +566 -7
- package/dist/states.js.map +1 -1
- package/dist/table-shapes.d.ts +47 -0
- package/dist/table-shapes.d.ts.map +1 -0
- package/dist/table-shapes.js +159 -0
- package/dist/table-shapes.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +80 -2
- package/dist/validate.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GAeb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAC;AAEjF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GAeb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAC;AAEjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,IAAI,cAAc,EACxB,OAAO,IAAI,eAAe,GAO3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GAKb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAkD,MAAM,oBAAoB,CAAC;AAChN,OAAO,EAAE,eAAe,EAA6D,MAAM,oBAAoB,CAAC;AAEhH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,KAAK,IAAI,YAAY,EACrB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,OAAO,GAKR,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,YAAY,GAMb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAUhB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAsC,MAAM,gBAAgB,CAAC;AAE1G,OAAO,EACL,sBAAsB,EACtB,QAAQ,GAKT,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AAEpH,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,cAAc,GASf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,WAAW,GASZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,GAUf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,GAMlB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,GAMX,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The marketplace API's wire format, `adminium-marketplace/1` — what
|
|
3
|
+
* `https://adminium.dev/api/v1/marketplace/apps` and `/add-ons` answer, as an
|
|
4
|
+
* Adminium server reads it.
|
|
5
|
+
*
|
|
6
|
+
* ── TWO POSTURES IN ONE DOCUMENT ────────────────────────────────────────────
|
|
7
|
+
*
|
|
8
|
+
* THE ITEM IS LENIENT. Names, art, links and dates are display facts, and a
|
|
9
|
+
* field this server does not know is dropped (zod's default strip). That is
|
|
10
|
+
* what lets the site grow a display field without breaking every server
|
|
11
|
+
* already in service — the reason the static feeds before this had to move to
|
|
12
|
+
* a new address each time they changed (v1, v2, v3).
|
|
13
|
+
*
|
|
14
|
+
* THE RELEASE IS STRICT. `release` is the install contract: the exact version,
|
|
15
|
+
* the fingerprint the downloaded bytes are checked against, the floor, and
|
|
16
|
+
* what the verified file's manifest says. A field here that this server does
|
|
17
|
+
* not know is a refusal of that ITEM, never a warning — which is how "no price
|
|
18
|
+
* reaches an install" holds by construction rather than by nobody sending one.
|
|
19
|
+
* A pricing block at ITEM level is simply stripped: pricing is not shown in
|
|
20
|
+
* this round, and no DTO carries it.
|
|
21
|
+
*
|
|
22
|
+
* ONE ITEM, ONE VERDICT. Items are parsed one at a time: an item whose release
|
|
23
|
+
* this server cannot read is skipped and counted, and the rest of the shelf is
|
|
24
|
+
* still offered. Only a document that is not this format at all is refused.
|
|
25
|
+
*
|
|
26
|
+
* `?adminium=<version>`: the site offers each item's newest release this
|
|
27
|
+
* version can install, and names the newest one in `newerRelease` when that
|
|
28
|
+
* is a different one. An item whose every release is too new comes back with
|
|
29
|
+
* `release: null` and a `newerRelease`.
|
|
30
|
+
*/
|
|
31
|
+
import { z } from 'zod';
|
|
32
|
+
export declare const MARKETPLACE_FORMAT = "adminium-marketplace/1";
|
|
33
|
+
/** An item key: the grammar the stores, the payloads and the download paths share. */
|
|
34
|
+
export declare const MARKETPLACE_KEY_PATTERN: RegExp;
|
|
35
|
+
/** An exact version — never a range, never `latest`. One optional tail group (see the add-on catalog client). */
|
|
36
|
+
export declare const MARKETPLACE_VERSION_PATTERN: RegExp;
|
|
37
|
+
/** An add-on release's install facts, strict. */
|
|
38
|
+
export declare const addOnReleaseWireSchema: z.ZodObject<{
|
|
39
|
+
version: z.ZodString;
|
|
40
|
+
integrity: z.ZodString;
|
|
41
|
+
categories: z.ZodArray<z.ZodString>;
|
|
42
|
+
capabilities: z.ZodArray<z.ZodString>;
|
|
43
|
+
connect: z.ZodObject<{
|
|
44
|
+
kind: z.ZodEnum<{
|
|
45
|
+
none: "none";
|
|
46
|
+
"api-key": "api-key";
|
|
47
|
+
oauth2: "oauth2";
|
|
48
|
+
}>;
|
|
49
|
+
}, z.core.$strict>;
|
|
50
|
+
provides: z.ZodArray<z.ZodObject<{
|
|
51
|
+
contract: z.ZodString;
|
|
52
|
+
version: z.ZodNumber;
|
|
53
|
+
}, z.core.$strict>>;
|
|
54
|
+
attaches: z.ZodArray<z.ZodObject<{
|
|
55
|
+
app: z.ZodString;
|
|
56
|
+
range: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, z.core.$strict>>;
|
|
58
|
+
network: z.ZodObject<{
|
|
59
|
+
allow: z.ZodArray<z.ZodString>;
|
|
60
|
+
}, z.core.$strict>;
|
|
61
|
+
minAdminiumVersion: z.ZodString;
|
|
62
|
+
publisher: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, z.core.$strict>;
|
|
64
|
+
/** An app release's install facts, strict. */
|
|
65
|
+
export declare const appReleaseWireSchema: z.ZodObject<{
|
|
66
|
+
version: z.ZodString;
|
|
67
|
+
integrity: z.ZodString;
|
|
68
|
+
categories: z.ZodArray<z.ZodString>;
|
|
69
|
+
capabilities: z.ZodArray<z.ZodString>;
|
|
70
|
+
publisher: z.ZodString;
|
|
71
|
+
sides: z.ZodArray<z.ZodEnum<{
|
|
72
|
+
customer: "customer";
|
|
73
|
+
staff: "staff";
|
|
74
|
+
}>>;
|
|
75
|
+
minAdminiumVersion: z.ZodString;
|
|
76
|
+
addOns: z.ZodObject<{
|
|
77
|
+
requires: z.ZodArray<z.ZodObject<{
|
|
78
|
+
key: z.ZodString;
|
|
79
|
+
}, z.core.$loose>>;
|
|
80
|
+
suggests: z.ZodArray<z.ZodObject<{
|
|
81
|
+
key: z.ZodString;
|
|
82
|
+
}, z.core.$loose>>;
|
|
83
|
+
features: z.ZodArray<z.ZodObject<{
|
|
84
|
+
requires: z.ZodArray<z.ZodString>;
|
|
85
|
+
}, z.core.$loose>>;
|
|
86
|
+
}, z.core.$strict>;
|
|
87
|
+
}, z.core.$strict>;
|
|
88
|
+
export declare const addOnItemWireSchema: z.ZodObject<{
|
|
89
|
+
kind: z.ZodLiteral<"add-on">;
|
|
90
|
+
categoryKey: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
91
|
+
release: z.ZodNullable<z.ZodObject<{
|
|
92
|
+
version: z.ZodString;
|
|
93
|
+
integrity: z.ZodString;
|
|
94
|
+
categories: z.ZodArray<z.ZodString>;
|
|
95
|
+
capabilities: z.ZodArray<z.ZodString>;
|
|
96
|
+
connect: z.ZodObject<{
|
|
97
|
+
kind: z.ZodEnum<{
|
|
98
|
+
none: "none";
|
|
99
|
+
"api-key": "api-key";
|
|
100
|
+
oauth2: "oauth2";
|
|
101
|
+
}>;
|
|
102
|
+
}, z.core.$strict>;
|
|
103
|
+
provides: z.ZodArray<z.ZodObject<{
|
|
104
|
+
contract: z.ZodString;
|
|
105
|
+
version: z.ZodNumber;
|
|
106
|
+
}, z.core.$strict>>;
|
|
107
|
+
attaches: z.ZodArray<z.ZodObject<{
|
|
108
|
+
app: z.ZodString;
|
|
109
|
+
range: z.ZodOptional<z.ZodString>;
|
|
110
|
+
}, z.core.$strict>>;
|
|
111
|
+
network: z.ZodObject<{
|
|
112
|
+
allow: z.ZodArray<z.ZodString>;
|
|
113
|
+
}, z.core.$strict>;
|
|
114
|
+
minAdminiumVersion: z.ZodString;
|
|
115
|
+
publisher: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, z.core.$strict>>;
|
|
117
|
+
key: z.ZodString;
|
|
118
|
+
availability: z.ZodEnum<{
|
|
119
|
+
installable: "installable";
|
|
120
|
+
"coming-soon": "coming-soon";
|
|
121
|
+
"source-only": "source-only";
|
|
122
|
+
}>;
|
|
123
|
+
name: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
124
|
+
tagline: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
125
|
+
author: z.ZodObject<{
|
|
126
|
+
name: z.ZodString;
|
|
127
|
+
url: z.ZodOptional<z.ZodString>;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
capabilities: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
130
|
+
art: z.ZodDefault<z.ZodObject<{
|
|
131
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
132
|
+
iconPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
133
|
+
monogram: z.ZodOptional<z.ZodString>;
|
|
134
|
+
}, z.core.$strip>>;
|
|
135
|
+
links: z.ZodObject<{
|
|
136
|
+
page: z.ZodString;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
lastUpdatedAt: z.ZodString;
|
|
139
|
+
file: z.ZodDefault<z.ZodNullable<z.ZodObject<{
|
|
140
|
+
size: z.ZodNumber;
|
|
141
|
+
publishedAt: z.ZodNullable<z.ZodString>;
|
|
142
|
+
}, z.core.$strip>>>;
|
|
143
|
+
newerRelease: z.ZodOptional<z.ZodObject<{
|
|
144
|
+
version: z.ZodString;
|
|
145
|
+
minAdminiumVersion: z.ZodString;
|
|
146
|
+
}, z.core.$strip>>;
|
|
147
|
+
}, z.core.$strip>;
|
|
148
|
+
export declare const appItemWireSchema: z.ZodObject<{
|
|
149
|
+
kind: z.ZodLiteral<"app">;
|
|
150
|
+
release: z.ZodNullable<z.ZodObject<{
|
|
151
|
+
version: z.ZodString;
|
|
152
|
+
integrity: z.ZodString;
|
|
153
|
+
categories: z.ZodArray<z.ZodString>;
|
|
154
|
+
capabilities: z.ZodArray<z.ZodString>;
|
|
155
|
+
publisher: z.ZodString;
|
|
156
|
+
sides: z.ZodArray<z.ZodEnum<{
|
|
157
|
+
customer: "customer";
|
|
158
|
+
staff: "staff";
|
|
159
|
+
}>>;
|
|
160
|
+
minAdminiumVersion: z.ZodString;
|
|
161
|
+
addOns: z.ZodObject<{
|
|
162
|
+
requires: z.ZodArray<z.ZodObject<{
|
|
163
|
+
key: z.ZodString;
|
|
164
|
+
}, z.core.$loose>>;
|
|
165
|
+
suggests: z.ZodArray<z.ZodObject<{
|
|
166
|
+
key: z.ZodString;
|
|
167
|
+
}, z.core.$loose>>;
|
|
168
|
+
features: z.ZodArray<z.ZodObject<{
|
|
169
|
+
requires: z.ZodArray<z.ZodString>;
|
|
170
|
+
}, z.core.$loose>>;
|
|
171
|
+
}, z.core.$strict>;
|
|
172
|
+
}, z.core.$strict>>;
|
|
173
|
+
key: z.ZodString;
|
|
174
|
+
availability: z.ZodEnum<{
|
|
175
|
+
installable: "installable";
|
|
176
|
+
"coming-soon": "coming-soon";
|
|
177
|
+
"source-only": "source-only";
|
|
178
|
+
}>;
|
|
179
|
+
name: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
180
|
+
tagline: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
181
|
+
author: z.ZodObject<{
|
|
182
|
+
name: z.ZodString;
|
|
183
|
+
url: z.ZodOptional<z.ZodString>;
|
|
184
|
+
}, z.core.$strip>;
|
|
185
|
+
capabilities: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
186
|
+
art: z.ZodDefault<z.ZodObject<{
|
|
187
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
188
|
+
iconPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
189
|
+
monogram: z.ZodOptional<z.ZodString>;
|
|
190
|
+
}, z.core.$strip>>;
|
|
191
|
+
links: z.ZodObject<{
|
|
192
|
+
page: z.ZodString;
|
|
193
|
+
}, z.core.$strip>;
|
|
194
|
+
lastUpdatedAt: z.ZodString;
|
|
195
|
+
file: z.ZodDefault<z.ZodNullable<z.ZodObject<{
|
|
196
|
+
size: z.ZodNumber;
|
|
197
|
+
publishedAt: z.ZodNullable<z.ZodString>;
|
|
198
|
+
}, z.core.$strip>>>;
|
|
199
|
+
newerRelease: z.ZodOptional<z.ZodObject<{
|
|
200
|
+
version: z.ZodString;
|
|
201
|
+
minAdminiumVersion: z.ZodString;
|
|
202
|
+
}, z.core.$strip>>;
|
|
203
|
+
}, z.core.$strip>;
|
|
204
|
+
/** The shelf document around the items: the items themselves are parsed one by one. */
|
|
205
|
+
export declare const marketplaceShelfSchema: z.ZodObject<{
|
|
206
|
+
format: z.ZodLiteral<"adminium-marketplace/1">;
|
|
207
|
+
generatedAt: z.ZodString;
|
|
208
|
+
items: z.ZodArray<z.ZodUnknown>;
|
|
209
|
+
}, z.core.$strip>;
|
|
210
|
+
export type AddOnReleaseWire = z.infer<typeof addOnReleaseWireSchema>;
|
|
211
|
+
export type AppReleaseWire = z.infer<typeof appReleaseWireSchema>;
|
|
212
|
+
export type AddOnItemWire = z.infer<typeof addOnItemWireSchema>;
|
|
213
|
+
export type AppItemWire = z.infer<typeof appItemWireSchema>;
|
|
214
|
+
export interface ParsedShelf<T> {
|
|
215
|
+
generatedAt: string;
|
|
216
|
+
items: T[];
|
|
217
|
+
/** Items skipped because this server could not read them, with why. */
|
|
218
|
+
skipped: {
|
|
219
|
+
key: string | null;
|
|
220
|
+
reason: string;
|
|
221
|
+
}[];
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* One shelf, item by item. Null when the document is not this format at all.
|
|
225
|
+
*
|
|
226
|
+
* An `installable` item must carry a release, and the release must be one
|
|
227
|
+
* this reader can read; anything else is skipped with its reason.
|
|
228
|
+
*/
|
|
229
|
+
export declare function parseShelf<S extends typeof addOnItemWireSchema | typeof appItemWireSchema>(schema: S, document: unknown): ParsedShelf<z.infer<S>> | null;
|
|
230
|
+
//# sourceMappingURL=marketplace-wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-wire.d.ts","sourceRoot":"","sources":["../src/marketplace-wire.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAChE,iHAAiH;AACjH,eAAO,MAAM,2BAA2B,QAAuE,CAAC;AAMhH,iDAAiD;AACjD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;kBAaxB,CAAC;AAKZ,8CAA8C;AAC9C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;kBAkBtB,CAAC;AAuBZ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI5B,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,uEAAuE;IACvE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,OAAO,mBAAmB,GAAG,OAAO,iBAAiB,EACxF,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,OAAO,GAChB,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAehC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
/**
|
|
3
|
+
* The marketplace API's wire format, `adminium-marketplace/1` — what
|
|
4
|
+
* `https://adminium.dev/api/v1/marketplace/apps` and `/add-ons` answer, as an
|
|
5
|
+
* Adminium server reads it.
|
|
6
|
+
*
|
|
7
|
+
* ── TWO POSTURES IN ONE DOCUMENT ────────────────────────────────────────────
|
|
8
|
+
*
|
|
9
|
+
* THE ITEM IS LENIENT. Names, art, links and dates are display facts, and a
|
|
10
|
+
* field this server does not know is dropped (zod's default strip). That is
|
|
11
|
+
* what lets the site grow a display field without breaking every server
|
|
12
|
+
* already in service — the reason the static feeds before this had to move to
|
|
13
|
+
* a new address each time they changed (v1, v2, v3).
|
|
14
|
+
*
|
|
15
|
+
* THE RELEASE IS STRICT. `release` is the install contract: the exact version,
|
|
16
|
+
* the fingerprint the downloaded bytes are checked against, the floor, and
|
|
17
|
+
* what the verified file's manifest says. A field here that this server does
|
|
18
|
+
* not know is a refusal of that ITEM, never a warning — which is how "no price
|
|
19
|
+
* reaches an install" holds by construction rather than by nobody sending one.
|
|
20
|
+
* A pricing block at ITEM level is simply stripped: pricing is not shown in
|
|
21
|
+
* this round, and no DTO carries it.
|
|
22
|
+
*
|
|
23
|
+
* ONE ITEM, ONE VERDICT. Items are parsed one at a time: an item whose release
|
|
24
|
+
* this server cannot read is skipped and counted, and the rest of the shelf is
|
|
25
|
+
* still offered. Only a document that is not this format at all is refused.
|
|
26
|
+
*
|
|
27
|
+
* `?adminium=<version>`: the site offers each item's newest release this
|
|
28
|
+
* version can install, and names the newest one in `newerRelease` when that
|
|
29
|
+
* is a different one. An item whose every release is too new comes back with
|
|
30
|
+
* `release: null` and a `newerRelease`.
|
|
31
|
+
*/
|
|
32
|
+
import { z } from 'zod';
|
|
33
|
+
export const MARKETPLACE_FORMAT = 'adminium-marketplace/1';
|
|
34
|
+
/** An item key: the grammar the stores, the payloads and the download paths share. */
|
|
35
|
+
export const MARKETPLACE_KEY_PATTERN = /^[a-z][a-z0-9-]{1,79}$/;
|
|
36
|
+
/** An exact version — never a range, never `latest`. One optional tail group (see the add-on catalog client). */
|
|
37
|
+
export const MARKETPLACE_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:[-+][0-9A-Za-z.+-]+)?$/;
|
|
38
|
+
const INTEGRITY_PATTERN = /^sha512-[A-Za-z0-9+/]+={0,2}$/;
|
|
39
|
+
const localized = z.record(z.string(), z.string());
|
|
40
|
+
const version = z.string().regex(MARKETPLACE_VERSION_PATTERN);
|
|
41
|
+
/** An add-on release's install facts, strict. */
|
|
42
|
+
export const addOnReleaseWireSchema = z
|
|
43
|
+
.object({
|
|
44
|
+
version,
|
|
45
|
+
integrity: z.string().regex(INTEGRITY_PATTERN),
|
|
46
|
+
categories: z.array(z.string()),
|
|
47
|
+
capabilities: z.array(z.string()),
|
|
48
|
+
connect: z.object({ kind: z.enum(['none', 'api-key', 'oauth2']) }).strict(),
|
|
49
|
+
provides: z.array(z.object({ contract: z.string(), version: z.number().int().positive() }).strict()),
|
|
50
|
+
attaches: z.array(z.object({ app: z.string(), range: z.string().optional() }).strict()),
|
|
51
|
+
network: z.object({ allow: z.array(z.string()) }).strict(),
|
|
52
|
+
minAdminiumVersion: version,
|
|
53
|
+
publisher: z.string().min(1).optional(),
|
|
54
|
+
})
|
|
55
|
+
.strict();
|
|
56
|
+
/** A need as the manifest declares it; read for display, the staged manifest decides the install. */
|
|
57
|
+
const needWire = z.object({ key: z.string().regex(MARKETPLACE_KEY_PATTERN) }).passthrough();
|
|
58
|
+
/** An app release's install facts, strict. */
|
|
59
|
+
export const appReleaseWireSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
version,
|
|
62
|
+
integrity: z.string().regex(INTEGRITY_PATTERN),
|
|
63
|
+
categories: z.array(z.string()),
|
|
64
|
+
capabilities: z.array(z.string()),
|
|
65
|
+
publisher: z.string().min(1),
|
|
66
|
+
sides: z.array(z.enum(['staff', 'customer'])).min(1),
|
|
67
|
+
minAdminiumVersion: version,
|
|
68
|
+
/** Which add-ons the app needs or can use (the "Needs Invoices" line). */
|
|
69
|
+
addOns: z
|
|
70
|
+
.object({
|
|
71
|
+
requires: z.array(needWire),
|
|
72
|
+
suggests: z.array(needWire),
|
|
73
|
+
features: z.array(z.object({ requires: z.array(z.string()) }).passthrough()),
|
|
74
|
+
})
|
|
75
|
+
.strict(),
|
|
76
|
+
})
|
|
77
|
+
.strict();
|
|
78
|
+
const itemBase = {
|
|
79
|
+
key: z.string().regex(MARKETPLACE_KEY_PATTERN),
|
|
80
|
+
/** `installable` offers a release; `coming-soon` is listed and cannot be downloaded; `source-only` has none to offer. */
|
|
81
|
+
availability: z.enum(['installable', 'coming-soon', 'source-only']),
|
|
82
|
+
name: localized.refine((map) => typeof map['en'] === 'string' && map['en'] !== '', 'an English name'),
|
|
83
|
+
tagline: localized,
|
|
84
|
+
author: z.object({ name: z.string(), url: z.string().optional() }),
|
|
85
|
+
capabilities: z.array(z.string()).default([]),
|
|
86
|
+
art: z
|
|
87
|
+
.object({
|
|
88
|
+
tint: z.string().optional(),
|
|
89
|
+
iconPaths: z.array(z.string()).optional(),
|
|
90
|
+
monogram: z.string().optional(),
|
|
91
|
+
})
|
|
92
|
+
.default({}),
|
|
93
|
+
links: z.object({ page: z.string() }),
|
|
94
|
+
lastUpdatedAt: z.string(),
|
|
95
|
+
file: z.object({ size: z.number().int().nonnegative(), publishedAt: z.string().nullable() }).nullable().default(null),
|
|
96
|
+
newerRelease: z.object({ version, minAdminiumVersion: version }).optional(),
|
|
97
|
+
};
|
|
98
|
+
export const addOnItemWireSchema = z.object({
|
|
99
|
+
...itemBase,
|
|
100
|
+
kind: z.literal('add-on'),
|
|
101
|
+
categoryKey: z.string().nullable().default(null),
|
|
102
|
+
release: addOnReleaseWireSchema.nullable(),
|
|
103
|
+
});
|
|
104
|
+
export const appItemWireSchema = z.object({
|
|
105
|
+
...itemBase,
|
|
106
|
+
kind: z.literal('app'),
|
|
107
|
+
release: appReleaseWireSchema.nullable(),
|
|
108
|
+
});
|
|
109
|
+
/** The shelf document around the items: the items themselves are parsed one by one. */
|
|
110
|
+
export const marketplaceShelfSchema = z.object({
|
|
111
|
+
format: z.literal(MARKETPLACE_FORMAT),
|
|
112
|
+
generatedAt: z.string().min(1),
|
|
113
|
+
items: z.array(z.unknown()),
|
|
114
|
+
});
|
|
115
|
+
/**
|
|
116
|
+
* One shelf, item by item. Null when the document is not this format at all.
|
|
117
|
+
*
|
|
118
|
+
* An `installable` item must carry a release, and the release must be one
|
|
119
|
+
* this reader can read; anything else is skipped with its reason.
|
|
120
|
+
*/
|
|
121
|
+
export function parseShelf(schema, document) {
|
|
122
|
+
const shelf = marketplaceShelfSchema.safeParse(document);
|
|
123
|
+
if (!shelf.success)
|
|
124
|
+
return null;
|
|
125
|
+
const items = [];
|
|
126
|
+
const skipped = [];
|
|
127
|
+
for (const raw of shelf.data.items) {
|
|
128
|
+
const key = typeof raw === 'object' && raw !== null && typeof raw.key === 'string' ? raw.key : null;
|
|
129
|
+
const parsed = schema.safeParse(raw);
|
|
130
|
+
if (!parsed.success) {
|
|
131
|
+
skipped.push({ key, reason: parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ') });
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
items.push(parsed.data);
|
|
135
|
+
}
|
|
136
|
+
return { generatedAt: shelf.data.generatedAt, items, skipped };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=marketplace-wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-wire.js","sourceRoot":"","sources":["../src/marketplace-wire.ts"],"names":[],"mappings":"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"}
|