@lynxship/contracts 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/index.d.ts +154 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/package.json +26 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
export type Platform = "android" | "ios";
|
|
2
|
+
export type BuildState = "created" | "uploading_source" | "queued" | "provisioning" | "installing_dependencies" | "building" | "signing" | "uploading_artifacts" | "success" | "failed" | "canceled" | "timed_out";
|
|
3
|
+
export type Role = "owner" | "admin" | "developer" | "viewer";
|
|
4
|
+
export interface ErrorDetails {
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare class LynxShipError extends Error {
|
|
8
|
+
readonly code: string;
|
|
9
|
+
readonly details: ErrorDetails;
|
|
10
|
+
constructor(code: string, message: string, details?: ErrorDetails);
|
|
11
|
+
}
|
|
12
|
+
export declare function assert(condition: unknown, code: string, message: string, details?: ErrorDetails): asserts condition;
|
|
13
|
+
export interface BuildJob {
|
|
14
|
+
id: string;
|
|
15
|
+
projectId: string;
|
|
16
|
+
organizationId: string;
|
|
17
|
+
platform: Platform;
|
|
18
|
+
profile: string;
|
|
19
|
+
sourceHash: string | null;
|
|
20
|
+
runtimeVersion?: string;
|
|
21
|
+
runtimeInputs?: Record<string, unknown>;
|
|
22
|
+
state: BuildState;
|
|
23
|
+
attempts: number;
|
|
24
|
+
logs: Array<{
|
|
25
|
+
level: string;
|
|
26
|
+
message: string;
|
|
27
|
+
at: string;
|
|
28
|
+
}>;
|
|
29
|
+
transitions: Array<{
|
|
30
|
+
state: BuildState;
|
|
31
|
+
reason?: string;
|
|
32
|
+
at: string;
|
|
33
|
+
}>;
|
|
34
|
+
artifact?: {
|
|
35
|
+
name: string;
|
|
36
|
+
hash: string;
|
|
37
|
+
path?: string;
|
|
38
|
+
key?: string;
|
|
39
|
+
size?: number;
|
|
40
|
+
contentType?: string;
|
|
41
|
+
url?: string;
|
|
42
|
+
expiresAt?: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export interface BuildResult {
|
|
46
|
+
artifact?: {
|
|
47
|
+
name: string;
|
|
48
|
+
hash: string;
|
|
49
|
+
};
|
|
50
|
+
logs?: Array<{
|
|
51
|
+
level: string;
|
|
52
|
+
message: string;
|
|
53
|
+
at: string;
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
export interface WorkerRequest {
|
|
57
|
+
platform: Platform;
|
|
58
|
+
capabilities?: string[];
|
|
59
|
+
}
|
|
60
|
+
export interface WorkerHandle {
|
|
61
|
+
id: string;
|
|
62
|
+
platform: Platform;
|
|
63
|
+
providerId: string;
|
|
64
|
+
}
|
|
65
|
+
export interface SubmissionJob {
|
|
66
|
+
id: string;
|
|
67
|
+
projectId: string;
|
|
68
|
+
organizationId: string;
|
|
69
|
+
platform: Platform;
|
|
70
|
+
artifact: {
|
|
71
|
+
hash: string;
|
|
72
|
+
};
|
|
73
|
+
status: string;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
remoteId?: string;
|
|
76
|
+
source?: string;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
export interface Worker {
|
|
80
|
+
id: string;
|
|
81
|
+
name: string;
|
|
82
|
+
organizationId: string;
|
|
83
|
+
platform: Platform;
|
|
84
|
+
capabilities: Record<string, unknown>;
|
|
85
|
+
status: "ready" | "offline" | "draining" | "revoked";
|
|
86
|
+
registeredAt: string;
|
|
87
|
+
lastHeartbeatAt: string;
|
|
88
|
+
}
|
|
89
|
+
export interface Artifact {
|
|
90
|
+
key: string;
|
|
91
|
+
hash: string;
|
|
92
|
+
size: number;
|
|
93
|
+
contentType: string;
|
|
94
|
+
}
|
|
95
|
+
export interface Release {
|
|
96
|
+
id: string;
|
|
97
|
+
manifest: OtaManifest;
|
|
98
|
+
signature: string;
|
|
99
|
+
message: string;
|
|
100
|
+
rollout: number;
|
|
101
|
+
paused: boolean;
|
|
102
|
+
createdAt: string;
|
|
103
|
+
policy: {
|
|
104
|
+
verdict: string;
|
|
105
|
+
reason: string;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export interface OtaManifest {
|
|
109
|
+
protocolVersion: number;
|
|
110
|
+
projectId: string;
|
|
111
|
+
channel: string;
|
|
112
|
+
platform: Platform;
|
|
113
|
+
runtimeVersion: string;
|
|
114
|
+
sequence: number;
|
|
115
|
+
keyId: string;
|
|
116
|
+
assets: Array<{
|
|
117
|
+
path: string;
|
|
118
|
+
hash: string;
|
|
119
|
+
size: number;
|
|
120
|
+
url?: string;
|
|
121
|
+
}>;
|
|
122
|
+
}
|
|
123
|
+
export interface Channel {
|
|
124
|
+
name: string;
|
|
125
|
+
projectId: string;
|
|
126
|
+
releases: string[];
|
|
127
|
+
current: string | null;
|
|
128
|
+
lastRollback?: {
|
|
129
|
+
releaseId: string;
|
|
130
|
+
reason: string;
|
|
131
|
+
at: string;
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export interface Organization {
|
|
135
|
+
id: string;
|
|
136
|
+
name: string;
|
|
137
|
+
createdAt: string;
|
|
138
|
+
}
|
|
139
|
+
export interface Project {
|
|
140
|
+
id: string;
|
|
141
|
+
organizationId: string;
|
|
142
|
+
name: string;
|
|
143
|
+
createdAt: string;
|
|
144
|
+
}
|
|
145
|
+
export interface Membership {
|
|
146
|
+
organizationId: string;
|
|
147
|
+
userId: string;
|
|
148
|
+
role: Role;
|
|
149
|
+
}
|
|
150
|
+
export declare function canonicalize(value: unknown): string;
|
|
151
|
+
export declare function sha256(value: string | Buffer): string;
|
|
152
|
+
export declare function hashJson(value: unknown): string;
|
|
153
|
+
export declare function createId(prefix: string): string;
|
|
154
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
export class LynxShipError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
details;
|
|
5
|
+
constructor(code, message, details = {}) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "LynxShipError";
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.details = details;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function assert(condition, code, message, details) {
|
|
13
|
+
if (!condition)
|
|
14
|
+
throw new LynxShipError(code, message, details);
|
|
15
|
+
}
|
|
16
|
+
export function canonicalize(value) {
|
|
17
|
+
if (value === null || typeof value !== "object")
|
|
18
|
+
return JSON.stringify(value);
|
|
19
|
+
if (Array.isArray(value))
|
|
20
|
+
return `[${value.map(canonicalize).join(",")}]`;
|
|
21
|
+
return `{${Object.keys(value)
|
|
22
|
+
.sort()
|
|
23
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalize(value[key])}`)
|
|
24
|
+
.join(",")}}`;
|
|
25
|
+
}
|
|
26
|
+
export function sha256(value) {
|
|
27
|
+
const hash = createHash("sha256");
|
|
28
|
+
if (typeof value === "string")
|
|
29
|
+
hash.update(value);
|
|
30
|
+
else
|
|
31
|
+
hash.update(value.toString("latin1"), "latin1");
|
|
32
|
+
return hash.digest("hex");
|
|
33
|
+
}
|
|
34
|
+
export function hashJson(value) {
|
|
35
|
+
return sha256(canonicalize(value));
|
|
36
|
+
}
|
|
37
|
+
export function createId(prefix) {
|
|
38
|
+
return `${prefix}_${Date.now().toString(36)}_${randomBytes(5).toString("hex")}`;
|
|
39
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lynxship/contracts",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Shared LynxShip contracts, identifiers, hashing and validation helpers.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=22.0.0"
|
|
12
|
+
},
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc -b tsconfig.json",
|
|
24
|
+
"typecheck": "tsc -b tsconfig.json --pretty false"
|
|
25
|
+
}
|
|
26
|
+
}
|