@m1cro/server-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/globals.d.ts +13 -0
- package/dist/globals.js +2 -0
- package/dist/globals.js.map +1 -0
- package/dist/index.d.ts +273 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as console from 'node:console';
|
|
2
|
+
|
|
3
|
+
declare const logLevels: readonly ["trace", "debug", "info", "warn", "error", "none"];
|
|
4
|
+
type LogLevel = (typeof logLevels)[number];
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface Console extends console.Console {
|
|
8
|
+
logLevel: LogLevel;
|
|
9
|
+
}
|
|
10
|
+
interface Request {
|
|
11
|
+
artifacts?: any;
|
|
12
|
+
}
|
|
13
|
+
}
|
package/dist/globals.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"globals.js","sourcesContent":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { JSONSchema4 } from 'json-schema';
|
|
2
|
+
|
|
3
|
+
interface Crypto {
|
|
4
|
+
deriveKey(seed: string, length: number): Uint8Array;
|
|
5
|
+
aesGcmEncrypt<T>(data: T): Uint8Array;
|
|
6
|
+
aesGcmDecrypt<T>(data: Uint8Array): T;
|
|
7
|
+
argon2Hash(algorithm: Argon2Algorithm, password: string, options?: Argon2Options): string;
|
|
8
|
+
argon2Verify(algorithm: Argon2Algorithm, password: string, hash: string, options?: Argon2Options): boolean;
|
|
9
|
+
}
|
|
10
|
+
type Argon2Algorithm = 'argon2d' | 'argon2i' | 'argon2id';
|
|
11
|
+
interface Argon2Options {
|
|
12
|
+
mCost?: number;
|
|
13
|
+
tCost?: number;
|
|
14
|
+
pCost?: number;
|
|
15
|
+
outputLen?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type Record<K extends string | number | symbol = string, V = any> = {
|
|
19
|
+
[key in K]: V;
|
|
20
|
+
};
|
|
21
|
+
type Variant<K extends PropertyKey, T extends object> = {
|
|
22
|
+
[P in keyof T]: ({
|
|
23
|
+
[Q in K]: P;
|
|
24
|
+
} & T[P]) extends infer U ? {
|
|
25
|
+
[Q in keyof U]: U[Q];
|
|
26
|
+
} : never;
|
|
27
|
+
}[keyof T];
|
|
28
|
+
type EventHandler = <T>(this: App, event: string, data: T) => void | Promise<void>;
|
|
29
|
+
type Visibility = 'private' | 'platform' | 'vendor' | 'public';
|
|
30
|
+
interface Tenant {
|
|
31
|
+
id: string;
|
|
32
|
+
host: string;
|
|
33
|
+
}
|
|
34
|
+
interface AppId {
|
|
35
|
+
namespace: string;
|
|
36
|
+
app: string;
|
|
37
|
+
}
|
|
38
|
+
type AppRole = Variant<"type", AppRoleData>;
|
|
39
|
+
type AppRoleData = {
|
|
40
|
+
provider: {
|
|
41
|
+
group: string;
|
|
42
|
+
};
|
|
43
|
+
test: void;
|
|
44
|
+
};
|
|
45
|
+
interface Auth {
|
|
46
|
+
subject: Subject;
|
|
47
|
+
permissions: Permissions;
|
|
48
|
+
}
|
|
49
|
+
interface Subject {
|
|
50
|
+
id: string;
|
|
51
|
+
email: string;
|
|
52
|
+
roles: string[];
|
|
53
|
+
}
|
|
54
|
+
interface Permissions {
|
|
55
|
+
[key: string]: string[];
|
|
56
|
+
}
|
|
57
|
+
interface HookEventMap {
|
|
58
|
+
"start": [];
|
|
59
|
+
"install": [];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface FindQuery<T extends Record = Record> {
|
|
63
|
+
limit(limit: number): this;
|
|
64
|
+
offset(offset: number): this;
|
|
65
|
+
sort(sort: Sorting): this;
|
|
66
|
+
exec(): Promise<T[]>;
|
|
67
|
+
}
|
|
68
|
+
interface FindOneQuery<T extends Record = Record> {
|
|
69
|
+
offset(offset: number): this;
|
|
70
|
+
sort(sort: Sorting): this;
|
|
71
|
+
exec(): Promise<T | undefined>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
type InsertReturnMode = 'insertedIds' | 'documents';
|
|
75
|
+
type InsertReturnType<T extends Record, R extends InsertReturnMode> = R extends 'insertedIds' ? string[] : R extends 'documents' ? T[] : never;
|
|
76
|
+
interface InsertQuery<T extends Record = Record, R extends InsertReturnMode = 'insertedIds'> {
|
|
77
|
+
return(mode: 'insertedIds'): InsertQuery<T, 'insertedIds'>;
|
|
78
|
+
return(mode: 'documents'): InsertQuery<T, 'documents'>;
|
|
79
|
+
return(mode: InsertReturnMode): InsertQuery<T, typeof mode>;
|
|
80
|
+
exec(): Promise<InsertReturnType<T, R>>;
|
|
81
|
+
}
|
|
82
|
+
type InsertOneReturnMode = 'insertedId' | 'document';
|
|
83
|
+
type InsertOneReturnType<T extends Record, R extends InsertOneReturnMode> = R extends 'insertedId' ? string : R extends 'document' ? T : never;
|
|
84
|
+
interface InsertOneQuery<T extends Record = Record, R extends InsertOneReturnMode = 'insertedId'> {
|
|
85
|
+
return(mode: 'insertedId'): InsertOneQuery<T, 'insertedId'>;
|
|
86
|
+
return(mode: 'document'): InsertOneQuery<T, 'document'>;
|
|
87
|
+
return(mode: InsertOneReturnMode): InsertOneQuery<T, typeof mode>;
|
|
88
|
+
exec(): Promise<InsertOneReturnType<T, R>>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
type UpdateReturnMode = 'affectedRows' | 'oldDocuments' | 'newDocuments';
|
|
92
|
+
type UpdateReturnType<T, R extends UpdateReturnMode> = R extends 'affectedRows' ? bigint : R extends 'oldDocuments' | 'newDocuments' ? T[] : never;
|
|
93
|
+
interface UpdateQuery<T extends Record = Record, R extends UpdateReturnMode = 'affectedRows'> {
|
|
94
|
+
limit(limit: number): this;
|
|
95
|
+
offset(offset: number): this;
|
|
96
|
+
sort(sort: Sorting): this;
|
|
97
|
+
return(mode: 'affectedRows'): UpdateQuery<T, 'affectedRows'>;
|
|
98
|
+
return(mode: 'oldDocuments'): UpdateQuery<T, 'oldDocuments'>;
|
|
99
|
+
return(mode: 'newDocuments'): UpdateQuery<T, 'newDocuments'>;
|
|
100
|
+
return(mode: UpdateReturnMode): UpdateQuery<T, typeof mode>;
|
|
101
|
+
exec(): Promise<UpdateReturnType<T, R>>;
|
|
102
|
+
}
|
|
103
|
+
type UpdateOneReturnMode = 'success' | 'oldDocument' | 'newDocument';
|
|
104
|
+
type UpdateOneReturnType<T, R extends UpdateOneReturnMode> = R extends 'success' ? boolean : R extends 'oldDocument' | 'newDocument' ? (T | undefined) : never;
|
|
105
|
+
interface UpdateOneQuery<T extends Record = Record, R extends UpdateOneReturnMode = 'success'> {
|
|
106
|
+
offset(offset: number): this;
|
|
107
|
+
sort(sort: Sorting): this;
|
|
108
|
+
return(mode: 'success'): UpdateOneQuery<T, 'success'>;
|
|
109
|
+
return(mode: 'oldDocument'): UpdateOneQuery<T, 'oldDocument'>;
|
|
110
|
+
return(mode: 'newDocument'): UpdateOneQuery<T, 'newDocument'>;
|
|
111
|
+
return(mode: UpdateOneReturnMode): UpdateOneQuery<T, typeof mode>;
|
|
112
|
+
exec(): Promise<UpdateOneReturnType<T, R>>;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
type RemoveReturnMode = 'affectedRows' | 'documents';
|
|
116
|
+
type RemoveReturnType<T, R extends RemoveReturnMode> = R extends 'affectedRows' ? bigint : R extends 'documents' ? T[] : never;
|
|
117
|
+
interface RemoveQuery<T extends Record = Record, R extends RemoveReturnMode = 'affectedRows'> {
|
|
118
|
+
limit(limit: number): this;
|
|
119
|
+
offset(offset: number): this;
|
|
120
|
+
sort(sort: Sorting): this;
|
|
121
|
+
return(mode: 'affectedRows'): RemoveQuery<T, 'affectedRows'>;
|
|
122
|
+
return(mode: 'documents'): RemoveQuery<T, 'documents'>;
|
|
123
|
+
return(mode: RemoveReturnMode): RemoveQuery<T, typeof mode>;
|
|
124
|
+
exec(): Promise<RemoveReturnType<T, R>>;
|
|
125
|
+
}
|
|
126
|
+
type RemoveOneReturnMode = 'success' | 'document';
|
|
127
|
+
type RemoveOneReturnType<T, R extends RemoveOneReturnMode> = R extends 'success' ? boolean : R extends 'document' ? (T | undefined) : never;
|
|
128
|
+
interface RemoveOneQuery<T extends Record = Record, R extends RemoveOneReturnMode = 'success'> {
|
|
129
|
+
offset(offset: number): this;
|
|
130
|
+
sort(sort: Sorting): this;
|
|
131
|
+
return(mode: 'success'): RemoveOneQuery<T, 'success'>;
|
|
132
|
+
return(mode: 'document'): RemoveOneQuery<T, 'document'>;
|
|
133
|
+
return(mode: RemoveOneReturnMode): RemoveOneQuery<T, typeof mode>;
|
|
134
|
+
exec(): Promise<RemoveOneReturnType<T, R>>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
interface Entity<T extends object = Record<string, unknown>> {
|
|
138
|
+
get name(): string;
|
|
139
|
+
find(query: Record): FindQuery<T>;
|
|
140
|
+
findOne(query: Record): FindOneQuery<T>;
|
|
141
|
+
insert(docs: T[]): InsertQuery<T>;
|
|
142
|
+
insertOne(doc: T): InsertOneQuery<T>;
|
|
143
|
+
update(query: Record, update: Record): UpdateQuery<T>;
|
|
144
|
+
updateOne(query: Record, update: Record): UpdateOneQuery<T>;
|
|
145
|
+
remove(query: Record): RemoveQuery<T>;
|
|
146
|
+
removeOne(query: Record): RemoveOneQuery<T>;
|
|
147
|
+
}
|
|
148
|
+
interface Sorting {
|
|
149
|
+
[field: string]: 'asc' | 'desc';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
interface SetOptions {
|
|
153
|
+
ttl?: number;
|
|
154
|
+
existenceCheck?: "nx" | "xx";
|
|
155
|
+
}
|
|
156
|
+
interface KeyValueStore {
|
|
157
|
+
get<T>(key: string): Promise<T>;
|
|
158
|
+
getDel<T>(key: string): Promise<T>;
|
|
159
|
+
set<T>(key: string, value: T, options?: SetOptions): Promise<void>;
|
|
160
|
+
delete(key: string): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
interface Providers {
|
|
164
|
+
list(group: string): Provider[];
|
|
165
|
+
}
|
|
166
|
+
interface Provider {
|
|
167
|
+
group: string;
|
|
168
|
+
app: AppId;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface Artifacts {
|
|
172
|
+
get<T>(key: string): T | undefined;
|
|
173
|
+
set<T>(key: string, value: T): void;
|
|
174
|
+
delete(key: string): void;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
interface Router {
|
|
178
|
+
scope(path: string): Router;
|
|
179
|
+
route(method: Method, path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
180
|
+
get(path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
181
|
+
post(path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
182
|
+
put(path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
183
|
+
patch(path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
184
|
+
delete(path: string, handler: RequestHandler, options?: RouteOptions): Router;
|
|
185
|
+
}
|
|
186
|
+
interface RouteOptions {
|
|
187
|
+
timeoutMs?: number;
|
|
188
|
+
permissions?: string[];
|
|
189
|
+
authenticated?: boolean;
|
|
190
|
+
visibility?: Visibility;
|
|
191
|
+
}
|
|
192
|
+
type Method = 'get' | 'post' | 'put' | 'patch' | 'delete';
|
|
193
|
+
type RequestHandler = (this: App, req: Request, res: Response) => void | Promise<void>;
|
|
194
|
+
interface Request {
|
|
195
|
+
get artifacts(): Artifacts;
|
|
196
|
+
get method(): Method;
|
|
197
|
+
withMethod(method: Method): Request;
|
|
198
|
+
get url(): URL;
|
|
199
|
+
withUrl(url: string | URL): Request;
|
|
200
|
+
header(name: string): string | undefined;
|
|
201
|
+
withHeader(name: string, value: string): Request;
|
|
202
|
+
get headers(): Headers;
|
|
203
|
+
withHeaders(headers: HeadersInit): Request;
|
|
204
|
+
body(): Promise<Uint8Array>;
|
|
205
|
+
withBody(bytes: Uint8Array): Request;
|
|
206
|
+
text(): Promise<string>;
|
|
207
|
+
withText(text: string): Request;
|
|
208
|
+
json<T>(): Promise<T>;
|
|
209
|
+
withJson<T>(json: T): Request;
|
|
210
|
+
}
|
|
211
|
+
interface Response {
|
|
212
|
+
get status(): number;
|
|
213
|
+
withStatus(status: number): Response;
|
|
214
|
+
header(name: string): string | undefined;
|
|
215
|
+
withHeader(name: string, value: string): Response;
|
|
216
|
+
get headers(): Headers;
|
|
217
|
+
withHeaders(headers: HeadersInit): Response;
|
|
218
|
+
body(): Promise<Uint8Array>;
|
|
219
|
+
withBody(bytes: Uint8Array): Response;
|
|
220
|
+
text(): Promise<string>;
|
|
221
|
+
withText(text: string): Response;
|
|
222
|
+
json<T>(): Promise<T>;
|
|
223
|
+
withJson<T>(json: T): Response;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
interface RPC {
|
|
227
|
+
call(url: string, method: Method): Call;
|
|
228
|
+
get(url: string): Call;
|
|
229
|
+
post(url: string): Call;
|
|
230
|
+
put(url: string): Call;
|
|
231
|
+
patch(url: string): Call;
|
|
232
|
+
delete(url: string): Call;
|
|
233
|
+
}
|
|
234
|
+
interface Call extends Request {
|
|
235
|
+
send(): Promise<Response>;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
interface SSE {
|
|
239
|
+
push<T>(event: T, targets: string[]): Promise<void>;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
interface App {
|
|
243
|
+
get tenant(): Tenant;
|
|
244
|
+
get providers(): Providers;
|
|
245
|
+
settings<T>(): T | undefined;
|
|
246
|
+
crd<T>(key: string): T | undefined;
|
|
247
|
+
get rpc(): RPC;
|
|
248
|
+
get kv(): KeyValueStore;
|
|
249
|
+
get sse(): SSE;
|
|
250
|
+
get crypto(): Crypto;
|
|
251
|
+
entity<T extends object>(name: string): Entity<T>;
|
|
252
|
+
publish<T extends object>(event: string, payload: T, visibility?: Visibility[]): void;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
declare const _default: {
|
|
256
|
+
encode<T>(data: T): Uint8Array;
|
|
257
|
+
decode<T>(data: Uint8Array): T;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
type EntryPoint = (builder: AppBuilder) => unknown;
|
|
261
|
+
interface AppBuilder {
|
|
262
|
+
on<K extends keyof HookEventMap>(type: K, listener: (this: App, ...args: HookEventMap[K]) => unknown): AppBuilder;
|
|
263
|
+
role(role: AppRole): AppBuilder;
|
|
264
|
+
capability(app: string, permissions: string[]): AppBuilder;
|
|
265
|
+
capabilities(capabilities: {
|
|
266
|
+
[app: string]: string[];
|
|
267
|
+
}): AppBuilder;
|
|
268
|
+
routes(factory: (router: Router) => unknown): AppBuilder;
|
|
269
|
+
entity(name: string, schema: JSONSchema4): AppBuilder;
|
|
270
|
+
subscribe(pattern: string, handler: EventHandler): AppBuilder;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export { type App, type AppBuilder, type AppId, type AppRole, type Artifacts, type Auth, type Entity, type EntryPoint, type Providers, type Request, type RequestHandler, type Response, type RouteOptions, type Router, type Tenant, _default as cbor };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cbor.ts"],"names":["cbor_default","data"],"mappings":"wBAEA,IAAOA,CAAAA,CAAQ,CACX,MAAA,CAAUC,CAAAA,CAAqB,CAC3B,OAAa,CAAA,CAAA,MAAA,CAAOA,CAAI,CAC5B,CAAA,CACA,OAAUA,CAAAA,CAAqB,CAC3B,OAAa,CAAA,CAAA,MAAA,CAAOA,CAAI,CAC5B,CACJ","file":"index.js","sourcesContent":["import * as cbor2 from \"cbor2\";\n\nexport default {\n encode<T>(data: T): Uint8Array {\n return cbor2.encode(data);\n },\n decode<T>(data: Uint8Array): T {\n return cbor2.decode(data);\n },\n};\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@m1cro/server-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./globals": {
|
|
14
|
+
"types": "./dist/globals.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "yarn run typecheck && yarn run bundle",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"bundle": "tsup --minify --treeshake smallest",
|
|
24
|
+
"versioning": "yarn version --new-version",
|
|
25
|
+
"deploy": "yarn publish --non-interactive"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@types/json-schema": "^7.0.15",
|
|
29
|
+
"cbor2": "^2.2.1",
|
|
30
|
+
"json-schema": "^0.4.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"tsup": "^8.5.1"
|
|
34
|
+
}
|
|
35
|
+
}
|