mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-04-04 14:29:45 +00:00
2
container-runtime/package-lock.json
generated
2
container-runtime/package-lock.json
generated
@@ -38,7 +38,7 @@
|
|||||||
},
|
},
|
||||||
"../sdk/dist": {
|
"../sdk/dist": {
|
||||||
"name": "@start9labs/start-sdk",
|
"name": "@start9labs/start-sdk",
|
||||||
"version": "0.4.0-beta.38",
|
"version": "0.4.0-beta.40",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@iarna/toml": "^3.0.0",
|
"@iarna/toml": "^3.0.0",
|
||||||
|
|||||||
@@ -21,23 +21,78 @@ type FilterKinds = "onion" | "local" | "domain" | "ip" | "ipv4" | "ipv6"
|
|||||||
export type Filter = {
|
export type Filter = {
|
||||||
visibility?: "public" | "private"
|
visibility?: "public" | "private"
|
||||||
kind?: FilterKinds | FilterKinds[]
|
kind?: FilterKinds | FilterKinds[]
|
||||||
|
predicate?: (h: HostnameInfo) => boolean
|
||||||
exclude?: Filter
|
exclude?: Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type VisibilityFilter<V extends "public" | "private"> = V extends "public"
|
||||||
|
? (HostnameInfo & { public: true }) | VisibilityFilter<Exclude<V, "public">>
|
||||||
|
: V extends "private"
|
||||||
|
?
|
||||||
|
| (HostnameInfo & { public: false })
|
||||||
|
| VisibilityFilter<Exclude<V, "private">>
|
||||||
|
: never
|
||||||
|
type KindFilter<K extends FilterKinds> = K extends "onion"
|
||||||
|
? (HostnameInfo & { kind: "onion" }) | KindFilter<Exclude<K, "onion">>
|
||||||
|
: K extends "local"
|
||||||
|
?
|
||||||
|
| (HostnameInfo & { kind: "ip"; hostname: { kind: "local" } })
|
||||||
|
| KindFilter<Exclude<K, "local">>
|
||||||
|
: K extends "domain"
|
||||||
|
?
|
||||||
|
| (HostnameInfo & { kind: "ip"; hostname: { kind: "domain" } })
|
||||||
|
| KindFilter<Exclude<K, "domain">>
|
||||||
|
: K extends "ipv4"
|
||||||
|
?
|
||||||
|
| (HostnameInfo & { kind: "ip"; hostname: { kind: "ipv4" } })
|
||||||
|
| KindFilter<Exclude<K, "ipv4">>
|
||||||
|
: K extends "ipv6"
|
||||||
|
?
|
||||||
|
| (HostnameInfo & { kind: "ip"; hostname: { kind: "ipv6" } })
|
||||||
|
| KindFilter<Exclude<K, "ipv6">>
|
||||||
|
: K extends "ip"
|
||||||
|
? KindFilter<Exclude<K, "ip"> | "ipv4" | "ipv6">
|
||||||
|
: never
|
||||||
|
|
||||||
|
type FilterReturnTy<F extends Filter> = F extends {
|
||||||
|
visibility: infer V extends "public" | "private"
|
||||||
|
}
|
||||||
|
? VisibilityFilter<V> & FilterReturnTy<Omit<F, "visibility">>
|
||||||
|
: F extends {
|
||||||
|
kind: (infer K extends FilterKinds) | (infer K extends FilterKinds)[]
|
||||||
|
}
|
||||||
|
? KindFilter<K> & FilterReturnTy<Omit<F, "kind">>
|
||||||
|
: F extends {
|
||||||
|
predicate: (h: HostnameInfo) => h is infer H extends HostnameInfo
|
||||||
|
}
|
||||||
|
? H & FilterReturnTy<Omit<F, "predicate">>
|
||||||
|
: F extends { exclude: infer E extends Filter } // MUST BE LAST
|
||||||
|
? HostnameInfo extends FilterReturnTy<E>
|
||||||
|
? HostnameInfo
|
||||||
|
: Exclude<HostnameInfo, FilterReturnTy<E>>
|
||||||
|
: HostnameInfo
|
||||||
|
|
||||||
type Formats = "hostname-info" | "urlstring" | "url"
|
type Formats = "hostname-info" | "urlstring" | "url"
|
||||||
type FormatReturnTy<Format extends Formats> = Format extends "hostname-info"
|
type FormatReturnTy<
|
||||||
? HostnameInfo
|
F extends Filter,
|
||||||
|
Format extends Formats,
|
||||||
|
> = Format extends "hostname-info"
|
||||||
|
? FilterReturnTy<F> | FormatReturnTy<F, Exclude<Format, "hostname-info">>
|
||||||
: Format extends "url"
|
: Format extends "url"
|
||||||
? URL
|
? URL | FormatReturnTy<F, Exclude<Format, "url">>
|
||||||
: UrlString
|
: Format extends "urlstring"
|
||||||
|
? UrlString | FormatReturnTy<F, Exclude<Format, "urlstring">>
|
||||||
|
: never
|
||||||
|
|
||||||
export type Filled = {
|
export type Filled = {
|
||||||
hostnames: HostnameInfo[]
|
hostnames: HostnameInfo[]
|
||||||
|
|
||||||
filter: <Format extends Formats = "urlstring">(
|
toUrl: (h: HostnameInfo) => UrlString[]
|
||||||
filter: Filter,
|
|
||||||
|
filter: <F extends Filter, Format extends Formats = "urlstring">(
|
||||||
|
filter: F,
|
||||||
format?: Format,
|
format?: Format,
|
||||||
) => FormatReturnTy<Format>[]
|
) => FormatReturnTy<F, Format>[]
|
||||||
|
|
||||||
publicHostnames: HostnameInfo[]
|
publicHostnames: HostnameInfo[]
|
||||||
onionHostnames: HostnameInfo[]
|
onionHostnames: HostnameInfo[]
|
||||||
@@ -83,7 +138,7 @@ const negate =
|
|||||||
const unique = <A>(values: A[]) => Array.from(new Set(values))
|
const unique = <A>(values: A[]) => Array.from(new Set(values))
|
||||||
export const addressHostToUrl = (
|
export const addressHostToUrl = (
|
||||||
{ scheme, sslScheme, username, suffix }: AddressInfo,
|
{ scheme, sslScheme, username, suffix }: AddressInfo,
|
||||||
host: HostnameInfo,
|
hostname: HostnameInfo,
|
||||||
): UrlString[] => {
|
): UrlString[] => {
|
||||||
const res = []
|
const res = []
|
||||||
const fmt = (scheme: string | null, host: HostnameInfo, port: number) => {
|
const fmt = (scheme: string | null, host: HostnameInfo, port: number) => {
|
||||||
@@ -109,11 +164,11 @@ export const addressHostToUrl = (
|
|||||||
username ? `${username}@` : ""
|
username ? `${username}@` : ""
|
||||||
}${hostname}${excludePort ? "" : `:${port}`}${suffix}`
|
}${hostname}${excludePort ? "" : `:${port}`}${suffix}`
|
||||||
}
|
}
|
||||||
if (host.hostname.sslPort !== null) {
|
if (hostname.hostname.sslPort !== null) {
|
||||||
res.push(fmt(sslScheme, host, host.hostname.sslPort))
|
res.push(fmt(sslScheme, hostname, hostname.hostname.sslPort))
|
||||||
}
|
}
|
||||||
if (host.hostname.port !== null) {
|
if (hostname.hostname.port !== null) {
|
||||||
res.push(fmt(scheme, host, host.hostname.port))
|
res.push(fmt(scheme, hostname, hostname.hostname.port))
|
||||||
}
|
}
|
||||||
|
|
||||||
return res
|
return res
|
||||||
@@ -124,6 +179,10 @@ function filterRec(
|
|||||||
filter: Filter,
|
filter: Filter,
|
||||||
invert: boolean,
|
invert: boolean,
|
||||||
): HostnameInfo[] {
|
): HostnameInfo[] {
|
||||||
|
if (filter.predicate) {
|
||||||
|
const pred = filter.predicate
|
||||||
|
hostnames = hostnames.filter((h) => invert !== pred(h))
|
||||||
|
}
|
||||||
if (filter.visibility === "public")
|
if (filter.visibility === "public")
|
||||||
hostnames = hostnames.filter(
|
hostnames = hostnames.filter(
|
||||||
(h) => invert !== (h.kind === "onion" || h.public),
|
(h) => invert !== (h.kind === "onion" || h.public),
|
||||||
@@ -170,13 +229,18 @@ export const filledAddress = (
|
|||||||
return {
|
return {
|
||||||
...addressInfo,
|
...addressInfo,
|
||||||
hostnames,
|
hostnames,
|
||||||
filter: <T extends Formats = "urlstring">(filter: Filter, format?: T) => {
|
toUrl,
|
||||||
const res = filterRec(hostnames, filter, false)
|
filter: <F extends Filter, Format extends Formats = "urlstring">(
|
||||||
if (format === "hostname-info") return res as FormatReturnTy<T>[]
|
filter: F,
|
||||||
const urls = res.flatMap(toUrl)
|
format?: Format,
|
||||||
if (format === "url")
|
) => {
|
||||||
return urls.map((u) => new URL(u)) as FormatReturnTy<T>[]
|
const filtered = filterRec(hostnames, filter, false)
|
||||||
return urls as FormatReturnTy<T>[]
|
let res: FormatReturnTy<F, Format>[] = filtered as any
|
||||||
|
if (format === "hostname-info") return res
|
||||||
|
const urls = filtered.flatMap(toUrl)
|
||||||
|
if (format === "url") res = urls.map((u) => new URL(u)) as any
|
||||||
|
else res = urls as any
|
||||||
|
return res
|
||||||
},
|
},
|
||||||
get publicHostnames() {
|
get publicHostnames() {
|
||||||
return hostnames.filter((h) => h.kind === "onion" || h.public)
|
return hostnames.filter((h) => h.kind === "onion" || h.public)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import * as CP from "node:child_process"
|
|||||||
|
|
||||||
export { Daemon } from "./Daemon"
|
export { Daemon } from "./Daemon"
|
||||||
export { CommandController } from "./CommandController"
|
export { CommandController } from "./CommandController"
|
||||||
import { HealthDaemon } from "./HealthDaemon"
|
import { EXIT_SUCCESS, HealthDaemon } from "./HealthDaemon"
|
||||||
import { Daemon } from "./Daemon"
|
import { Daemon } from "./Daemon"
|
||||||
import { CommandController } from "./CommandController"
|
import { CommandController } from "./CommandController"
|
||||||
import { HealthCheck } from "../health/HealthCheck"
|
import { HealthCheck } from "../health/HealthCheck"
|
||||||
@@ -91,6 +91,10 @@ type NewDaemonParams<
|
|||||||
subcontainer: C
|
subcontainer: C
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type OptionalParamSync<T> = T | (() => T | null)
|
||||||
|
type OptionalParamAsync<T> = () => Promise<T | null>
|
||||||
|
type OptionalParam<T> = OptionalParamSync<T> | OptionalParamAsync<T>
|
||||||
|
|
||||||
type AddDaemonParams<
|
type AddDaemonParams<
|
||||||
Manifest extends T.SDKManifest,
|
Manifest extends T.SDKManifest,
|
||||||
Ids extends string,
|
Ids extends string,
|
||||||
@@ -192,6 +196,37 @@ export class Daemons<Manifest extends T.SDKManifest, Ids extends string>
|
|||||||
[],
|
[],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private addDaemonImpl<Id extends string>(
|
||||||
|
id: Id,
|
||||||
|
daemon: Promise<
|
||||||
|
Daemon<Manifest, SubContainer<Manifest, T.Effects> | null>
|
||||||
|
> | null,
|
||||||
|
requires: Ids[],
|
||||||
|
ready: Ready | typeof EXIT_SUCCESS,
|
||||||
|
) {
|
||||||
|
const healthDaemon = new HealthDaemon(
|
||||||
|
daemon,
|
||||||
|
requires
|
||||||
|
.map((x) => this.ids.indexOf(x))
|
||||||
|
.filter((x) => x >= 0)
|
||||||
|
.map((id) => this.healthDaemons[id]),
|
||||||
|
id,
|
||||||
|
ready,
|
||||||
|
this.effects,
|
||||||
|
)
|
||||||
|
const daemons = daemon ? [...this.daemons, daemon] : [...this.daemons]
|
||||||
|
const ids = [...this.ids, id] as (Ids | Id)[]
|
||||||
|
const healthDaemons = [...this.healthDaemons, healthDaemon]
|
||||||
|
return new Daemons<Manifest, Ids | Id>(
|
||||||
|
this.effects,
|
||||||
|
this.started,
|
||||||
|
daemons,
|
||||||
|
ids,
|
||||||
|
healthDaemons,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the complete list of daemons, including the one defined here
|
* Returns the complete list of daemons, including the one defined here
|
||||||
* @param id
|
* @param id
|
||||||
@@ -205,36 +240,42 @@ export class Daemons<Manifest extends T.SDKManifest, Ids extends string>
|
|||||||
ErrorDuplicateId<Id> extends Id ? never :
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
Id extends Ids ? ErrorDuplicateId<Id> :
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
Id,
|
Id,
|
||||||
options: AddDaemonParams<Manifest, Ids, Id, C>,
|
options: OptionalParamSync<AddDaemonParams<Manifest, Ids, Id, C>>,
|
||||||
|
): Daemons<Manifest, Ids | Id>
|
||||||
|
addDaemon<Id extends string, C extends SubContainer<Manifest> | null>(
|
||||||
|
// prettier-ignore
|
||||||
|
id:
|
||||||
|
"" extends Id ? never :
|
||||||
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
|
Id,
|
||||||
|
options: OptionalParamAsync<AddDaemonParams<Manifest, Ids, Id, C>>,
|
||||||
|
): Promise<Daemons<Manifest, Ids | Id>>
|
||||||
|
addDaemon<Id extends string, C extends SubContainer<Manifest> | null>(
|
||||||
|
id: Id,
|
||||||
|
options: OptionalParam<AddDaemonParams<Manifest, Ids, Id, C>>,
|
||||||
) {
|
) {
|
||||||
const daemon =
|
const prev = this
|
||||||
"daemon" in options
|
const res = (options: AddDaemonParams<Manifest, Ids, Id, C> | null) => {
|
||||||
? Promise.resolve(options.daemon)
|
if (!options) return prev
|
||||||
: Daemon.of<Manifest>()<C>(
|
const daemon =
|
||||||
this.effects,
|
"daemon" in options
|
||||||
options.subcontainer,
|
? Promise.resolve(options.daemon)
|
||||||
options.exec,
|
: Daemon.of<Manifest>()<C>(
|
||||||
)
|
this.effects,
|
||||||
const healthDaemon = new HealthDaemon(
|
options.subcontainer,
|
||||||
daemon,
|
options.exec,
|
||||||
options.requires
|
)
|
||||||
.map((x) => this.ids.indexOf(x))
|
return prev.addDaemonImpl(id, daemon, options.requires, options.ready)
|
||||||
.filter((x) => x >= 0)
|
}
|
||||||
.map((id) => this.healthDaemons[id]),
|
if (options instanceof Function) {
|
||||||
id,
|
const opts = options()
|
||||||
options.ready,
|
if (opts instanceof Promise) {
|
||||||
this.effects,
|
return opts.then(res)
|
||||||
)
|
}
|
||||||
const daemons = [...this.daemons, daemon]
|
return res(opts)
|
||||||
const ids = [...this.ids, id] as (Ids | Id)[]
|
}
|
||||||
const healthDaemons = [...this.healthDaemons, healthDaemon]
|
return res(options)
|
||||||
return new Daemons<Manifest, Ids | Id>(
|
|
||||||
this.effects,
|
|
||||||
this.started,
|
|
||||||
daemons,
|
|
||||||
ids,
|
|
||||||
healthDaemons,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -245,40 +286,45 @@ export class Daemons<Manifest extends T.SDKManifest, Ids extends string>
|
|||||||
* @returns a new Daemons object
|
* @returns a new Daemons object
|
||||||
*/
|
*/
|
||||||
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(
|
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(
|
||||||
id: "" extends Id
|
// prettier-ignore
|
||||||
? never
|
id:
|
||||||
: ErrorDuplicateId<Id> extends Id
|
"" extends Id ? never :
|
||||||
? never
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
: Id extends Ids
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
? ErrorDuplicateId<Id>
|
Id,
|
||||||
: Id,
|
options: OptionalParamSync<AddOneshotParams<Manifest, Ids, Id, C>>,
|
||||||
options: AddOneshotParams<Manifest, Ids, Id, C>,
|
): Daemons<Manifest, Ids | Id>
|
||||||
|
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(
|
||||||
|
// prettier-ignore
|
||||||
|
id:
|
||||||
|
"" extends Id ? never :
|
||||||
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
|
Id,
|
||||||
|
options: OptionalParamAsync<AddOneshotParams<Manifest, Ids, Id, C>>,
|
||||||
|
): Promise<Daemons<Manifest, Ids | Id>>
|
||||||
|
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(
|
||||||
|
id: Id,
|
||||||
|
options: OptionalParam<AddOneshotParams<Manifest, Ids, Id, C>>,
|
||||||
) {
|
) {
|
||||||
const daemon = Oneshot.of<Manifest>()<C>(
|
const prev = this
|
||||||
this.effects,
|
const res = (options: AddOneshotParams<Manifest, Ids, Id, C> | null) => {
|
||||||
options.subcontainer,
|
if (!options) return prev
|
||||||
options.exec,
|
const daemon = Oneshot.of<Manifest>()<C>(
|
||||||
)
|
this.effects,
|
||||||
const healthDaemon = new HealthDaemon<Manifest>(
|
options.subcontainer,
|
||||||
daemon,
|
options.exec,
|
||||||
options.requires
|
)
|
||||||
.map((x) => this.ids.indexOf(x))
|
return prev.addDaemonImpl(id, daemon, options.requires, EXIT_SUCCESS)
|
||||||
.filter((x) => x >= 0)
|
}
|
||||||
.map((id) => this.healthDaemons[id]),
|
if (options instanceof Function) {
|
||||||
id,
|
const opts = options()
|
||||||
"EXIT_SUCCESS",
|
if (opts instanceof Promise) {
|
||||||
this.effects,
|
return opts.then(res)
|
||||||
)
|
}
|
||||||
const daemons = [...this.daemons, daemon]
|
return res(opts)
|
||||||
const ids = [...this.ids, id] as (Ids | Id)[]
|
}
|
||||||
const healthDaemons = [...this.healthDaemons, healthDaemon]
|
return res(options)
|
||||||
return new Daemons<Manifest, Ids | Id>(
|
|
||||||
this.effects,
|
|
||||||
this.started,
|
|
||||||
daemons,
|
|
||||||
ids,
|
|
||||||
healthDaemons,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -288,35 +334,40 @@ export class Daemons<Manifest extends T.SDKManifest, Ids extends string>
|
|||||||
* @returns a new Daemons object
|
* @returns a new Daemons object
|
||||||
*/
|
*/
|
||||||
addHealthCheck<Id extends string>(
|
addHealthCheck<Id extends string>(
|
||||||
id: "" extends Id
|
// prettier-ignore
|
||||||
? never
|
id:
|
||||||
: ErrorDuplicateId<Id> extends Id
|
"" extends Id ? never :
|
||||||
? never
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
: Id extends Ids
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
? ErrorDuplicateId<Id>
|
Id,
|
||||||
: Id,
|
options: OptionalParamSync<AddHealthCheckParams<Ids, Id>>,
|
||||||
options: AddHealthCheckParams<Ids, Id>,
|
): Daemons<Manifest, Ids | Id>
|
||||||
|
addHealthCheck<Id extends string>(
|
||||||
|
// prettier-ignore
|
||||||
|
id:
|
||||||
|
"" extends Id ? never :
|
||||||
|
ErrorDuplicateId<Id> extends Id ? never :
|
||||||
|
Id extends Ids ? ErrorDuplicateId<Id> :
|
||||||
|
Id,
|
||||||
|
options: OptionalParamAsync<AddHealthCheckParams<Ids, Id>>,
|
||||||
|
): Promise<Daemons<Manifest, Ids | Id>>
|
||||||
|
addHealthCheck<Id extends string>(
|
||||||
|
id: Id,
|
||||||
|
options: OptionalParam<AddHealthCheckParams<Ids, Id>>,
|
||||||
) {
|
) {
|
||||||
const healthDaemon = new HealthDaemon<Manifest>(
|
const prev = this
|
||||||
null,
|
const res = (options: AddHealthCheckParams<Ids, Id> | null) => {
|
||||||
options.requires
|
if (!options) return prev
|
||||||
.map((x) => this.ids.indexOf(x))
|
return prev.addDaemonImpl(id, null, options.requires, EXIT_SUCCESS)
|
||||||
.filter((x) => x >= 0)
|
}
|
||||||
.map((id) => this.healthDaemons[id]),
|
if (options instanceof Function) {
|
||||||
id,
|
const opts = options()
|
||||||
options.ready,
|
if (opts instanceof Promise) {
|
||||||
this.effects,
|
return opts.then(res)
|
||||||
)
|
}
|
||||||
const daemons = [...this.daemons]
|
return res(opts)
|
||||||
const ids = [...this.ids, id] as (Ids | Id)[]
|
}
|
||||||
const healthDaemons = [...this.healthDaemons, healthDaemon]
|
return res(options)
|
||||||
return new Daemons<Manifest, Ids | Id>(
|
|
||||||
this.effects,
|
|
||||||
this.started,
|
|
||||||
daemons,
|
|
||||||
ids,
|
|
||||||
healthDaemons,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
4
sdk/package/package-lock.json
generated
4
sdk/package/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@start9labs/start-sdk",
|
"name": "@start9labs/start-sdk",
|
||||||
"version": "0.4.0-beta.38",
|
"version": "0.4.0-beta.40",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@start9labs/start-sdk",
|
"name": "@start9labs/start-sdk",
|
||||||
"version": "0.4.0-beta.38",
|
"version": "0.4.0-beta.40",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@iarna/toml": "^3.0.0",
|
"@iarna/toml": "^3.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@start9labs/start-sdk",
|
"name": "@start9labs/start-sdk",
|
||||||
"version": "0.4.0-beta.38",
|
"version": "0.4.0-beta.40",
|
||||||
"description": "Software development kit to facilitate packaging services for StartOS",
|
"description": "Software development kit to facilitate packaging services for StartOS",
|
||||||
"main": "./package/lib/index.js",
|
"main": "./package/lib/index.js",
|
||||||
"types": "./package/lib/index.d.ts",
|
"types": "./package/lib/index.d.ts",
|
||||||
|
|||||||
@@ -385,7 +385,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoin.org',
|
docsUrl: 'https://bitcoin.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -420,7 +420,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoinknots.org',
|
docsUrl: 'https://bitcoinknots.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -465,7 +465,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoin.org',
|
docsUrl: 'https://bitcoin.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -500,7 +500,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoinknots.org',
|
docsUrl: 'https://bitcoinknots.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -547,7 +547,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://lightning.engineering/',
|
docsUrl: 'https://lightning.engineering/',
|
||||||
releaseNotes: 'Upstream release to 0.17.5',
|
releaseNotes: 'Upstream release to 0.17.5',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: LND_ICON,
|
icon: LND_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -595,7 +595,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://lightning.engineering/',
|
docsUrl: 'https://lightning.engineering/',
|
||||||
releaseNotes: 'Upstream release to 0.17.4',
|
releaseNotes: 'Upstream release to 0.17.4',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: LND_ICON,
|
icon: LND_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -647,7 +647,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoin.org',
|
docsUrl: 'https://bitcoin.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -682,7 +682,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://bitcoinknots.org',
|
docsUrl: 'https://bitcoinknots.org',
|
||||||
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
releaseNotes: 'Even better support for Bitcoin and wallets!',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: BTC_ICON,
|
icon: BTC_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -727,7 +727,7 @@ export namespace Mock {
|
|||||||
docsUrl: 'https://lightning.engineering/',
|
docsUrl: 'https://lightning.engineering/',
|
||||||
releaseNotes: 'Upstream release and minor fixes.',
|
releaseNotes: 'Upstream release and minor fixes.',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: LND_ICON,
|
icon: LND_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
@@ -775,7 +775,7 @@ export namespace Mock {
|
|||||||
marketingSite: '',
|
marketingSite: '',
|
||||||
releaseNotes: 'Upstream release and minor fixes.',
|
releaseNotes: 'Upstream release and minor fixes.',
|
||||||
osVersion: '0.3.6',
|
osVersion: '0.3.6',
|
||||||
sdkVersion: '0.4.0-beta.38',
|
sdkVersion: '0.4.0-beta.40',
|
||||||
gitHash: 'fakehash',
|
gitHash: 'fakehash',
|
||||||
icon: PROXY_ICON,
|
icon: PROXY_ICON,
|
||||||
sourceVersion: null,
|
sourceVersion: null,
|
||||||
|
|||||||
Reference in New Issue
Block a user