diff --git a/apps/writer/package.json b/apps/writer/package.json index e547910..d71f44c 100644 --- a/apps/writer/package.json +++ b/apps/writer/package.json @@ -49,9 +49,9 @@ "@mdbase-dev/connect": "0.1.0-beta.149", "@mdbase-dev/connect-protocol": "file:vendor/mdbase-dev-connect-protocol-0.1.0-beta.145-e6e66bcd172f.tgz", "@mdbase-dev/i18n": "0.1.0-beta.176", - "@mdbase-dev/sdk": "0.1.0-beta.187", - "@mdbase-dev/sdk-lab": "file:../../vendor/sdk-lab-beta157.tgz", - "@mdbase-dev/sdk-staging": "file:../../vendor/sdk-staging-beta157.tgz", + "@mdbase-dev/sdk": "0.1.0-beta.188", + "@mdbase-dev/sdk-lab": "file:../../vendor/sdk-lab-beta188.tgz", + "@mdbase-dev/sdk-staging": "file:../../vendor/sdk-staging-beta188.tgz", "@mdbase-dev/ui": "0.1.0-beta.176", "@mdbase-writer/core": "workspace:*", "@myriaddreamin/typst-ts-renderer": "0.7.0", diff --git a/apps/writer/scripts/browser-a11y-fixture.tsx b/apps/writer/scripts/browser-a11y-fixture.tsx index 20d61cd..ac19c69 100644 --- a/apps/writer/scripts/browser-a11y-fixture.tsx +++ b/apps/writer/scripts/browser-a11y-fixture.tsx @@ -50,9 +50,9 @@ export async function mountNative(body = "# Original manuscript\n\nConfirmed nat phase: "ready", }); fixture.client().describe = async () => ({ - specVersion: "0.3.0", settings: new Map(), issues: [], inclusion: { include: ["image"] }, + specVersion: "0.3.0", settings: {}, issues: [], inclusion: { include: ["image"] }, contracts: manifest.requirements.contracts.map((contract, index) => ({ ...contract, path: `_contracts/${contract.id}.md`, digest: contract.digest.replace(/^sha256:/, ""), contractType: "record", implementedBy: [names[index]!] })), - types: manifest.requirements.contracts.map((contract, index) => ({ name: names[index]!, path: `_types/${names[index]}.md`, implements: [{ contract: contract.id, version: contract.version, fields: new Map([["title", "title"], ["template", "template"], ["csl", "csl"]]) }] })), + types: manifest.requirements.contracts.map((contract, index) => ({ name: names[index]!, path: `_types/${names[index]}.md`, implements: [{ contract: contract.id, version: contract.version, fields: { title: "title", template: "template", csl: "csl" } }] })), }); document.getElementById("root")!.hidden = true; const host = document.createElement("div"); diff --git a/apps/writer/scripts/browser-polish-r2-test.mjs b/apps/writer/scripts/browser-polish-r2-test.mjs index c200f38..43698b0 100644 --- a/apps/writer/scripts/browser-polish-r2-test.mjs +++ b/apps/writer/scripts/browser-polish-r2-test.mjs @@ -91,7 +91,7 @@ try { await page.screenshot({ path: `out/polish-r2/${name}-hold.png` }); await page.evaluate(() => { const client = window.nativeFixture.client(); - window.nativeHoldResolution = client.save(client.resolveHold(window.nativeHold, "keep_mine")).then( + window.nativeHoldResolution = client.settle(client.resolveHold(window.nativeHold, "keep_mine")).then( result => { window.nativeHoldResult = { outcome: result.outcome }; }, error => { window.nativeHoldResult = { error: String(error) }; }, ); @@ -110,7 +110,7 @@ try { await comparison.getByRole("textbox", { name: /Merged Markdown/ }).fill("Deliberately merged native draft\n"); await comparison.getByRole("button", { name: "Save merged version", exact: true }).click(); await page.waitForFunction(() => { const snapshot = window.writer.workspace.getSnapshot().records.get(window.writer.workspace.main).snapshot; return snapshot.state === "saved" && snapshot.body === "Deliberately merged native draft\n"; }); - assert.equal(await page.evaluate(async () => (await window.nativeFixture.client().get({ path: "writing/main.md" }, { body: true })).body), "Deliberately merged native draft\n"); + assert.equal(await page.evaluate(async () => (await window.nativeFixture.client().get({ path: "writing/main.md" }, { include: { body: true } })).body), "Deliberately merged native draft\n"); await page.evaluate(() => { window.nativeFixture.replica().setOnline(false); window.restoreStorage = Storage.prototype.setItem; diff --git a/apps/writer/scripts/writer-sdk.mjs b/apps/writer/scripts/writer-sdk.mjs index d98144e..b61fa05 100644 --- a/apps/writer/scripts/writer-sdk.mjs +++ b/apps/writer/scripts/writer-sdk.mjs @@ -19,9 +19,9 @@ const hash = (bytes) => createHash("sha256").update(bytes).digest("hex"); /** Intake pins (under vendor/) for each environment's SDK original. */ export const writerSdkPins = Object.freeze({ - lab: "sdk-lab-beta157.json", - staging: "sdk-staging-beta157.json", - production: "sdk-production-beta187.json", + lab: "sdk-lab-beta188.json", + staging: "sdk-staging-beta188.json", + production: "sdk-production-beta188.json", }); /** Installed package names to try, in order. The plain name comes first so a diff --git a/apps/writer/src/backend/native-schema.ts b/apps/writer/src/backend/native-schema.ts index 3635eac..509cb41 100644 --- a/apps/writer/src/backend/native-schema.ts +++ b/apps/writer/src/backend/native-schema.ts @@ -1,4 +1,4 @@ -import { toPlain, type wire } from "@mdbase-dev/sdk"; +import type { DescribeResult, JsonValue } from "@mdbase-dev/sdk"; import type { JsonObject } from "@mdbase-dev/connect"; import manifest from "../generated/mdbase-app.json"; import { annotationContract, CollectionSchema, domainContract, unavailableTypeMessage, type Domain, type WriterSchemaDescription } from "./collection.js"; @@ -7,8 +7,8 @@ import type { UnavailableType } from "./types.js"; const DOMAINS: readonly Domain[] = ["manuscript", "source", "annotation", "comment", "person"]; const domainOf = (id: string): Domain | undefined => DOMAINS.find(domain => domainContract(domain).id === id); /** The definition path an issue is attached to, when it names one. */ -function issuePath(details: unknown): string | null { - const path = details instanceof Map ? (details as Map).get("path") : null; +function issuePath(details: JsonValue | undefined): string | null { + const path = typeof details === "object" && details !== null && !Array.isArray(details) ? details["path"] : null; return typeof path === "string" && path ? path : null; } @@ -27,8 +27,8 @@ export function nativeJson(value: unknown): NativeJson { export function nativeWriteFields(fields: JsonObject): { [key: string]: NativeJson } { return Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, nativeJson(value)])); } -export function nativeObject(value: wire.Value): JsonObject { - const json = nativeJson(toPlain(value)); +export function nativeObject(value: JsonValue): JsonObject { + const json = nativeJson(value); if (json === null || typeof json !== "object" || Array.isArray(json)) throw new Error("Writer requires a native field map."); return json; } @@ -48,7 +48,7 @@ export function manifestContractDigest(id: string, version: string): string | un * recognise a starter name without its actual native contract implementation. * The SDK remains responsible for root readiness and configuration/provisioning. */ -export function nativeWriterSchema(catalog: wire.DescribeResult): CollectionSchema { +export function nativeWriterSchema(catalog: DescribeResult): CollectionSchema { // Aggregate readiness belongs to the SDK. An unrelated definition diagnostic // must not hide usable Writer records; exact domain bindings remain checked. const required = manifest.requirements.contracts; @@ -77,7 +77,7 @@ export function nativeWriterSchema(catalog: wire.DescribeResult): CollectionSche if (domain && !unavailableTypes.some(entry => entry.name === type.name)) unavailableTypes.push({name: type.name, domain, message: unavailableTypeMessage(type.name, domain)}); return []; } - return [{typeName: type.name, fields: Object.fromEntries(binding.fields)}]; + return [{typeName: type.name, fields: binding.fields}]; })})); const schema = new CollectionSchema({types: catalog.types.map(type => ({name: type.name})), contracts, // A collection without settings reports null: that is no settings, not an error. diff --git a/apps/writer/src/backend/native.test.ts b/apps/writer/src/backend/native.test.ts index 1d2ffd3..58d14ac 100644 --- a/apps/writer/src/backend/native.test.ts +++ b/apps/writer/src/backend/native.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { connect, MdbaseError, MdbasePeopleClient, type ChangesWatch, type MdbaseApplicationConnection, type MdbaseClient, type wire } from "@mdbase-dev/sdk"; +import { MdbaseError, MdbasePeopleClient, type ChangesWatch, type DescribeResult, type MdbaseApplicationConnection, type MdbaseClient } from "@mdbase-dev/sdk"; import { MemoryReplica, type MemoryContract } from "@mdbase-dev/sdk/testing"; import manifest from "../generated/mdbase-app.json"; import { NativeWriterBackend } from "./native.js"; @@ -11,29 +11,29 @@ import { byRecentlyEdited } from "../ui/names.js"; const clients: MdbaseClient[] = []; const backends: NativeWriterBackend[] = []; afterEach(() => {for (const backend of backends.splice(0)) backend.dispose(); for (const client of clients.splice(0)) client.close(); vi.restoreAllMocks();}); -function catalog(): wire.DescribeResult { +function catalog(): DescribeResult { const definitions = manifest.requirements.contracts.map((contract, index) => ({contract, type: ["native-manuscript", "native-source", "native-comment"][index] ?? "unknown"})); const mappings: Readonly>>> = { "native-manuscript": {title: "/meta/heading", template: "layout", csl: "style"}, "native-source": {title: "heading", csl: "citation"}, "native-comment": {document: "document", motivation: "motivation", status: "/review/state", created_at: "created_at", created_by: "created_by", in_reply_to: "in_reply_to", target: "target", suggestion: "suggestion", resolved_at: "resolved_at", resolved_by: "resolved_by", modified_at: "/review/modified", deleted_at: "/review/deleted"}, }; - return {specVersion: "0.3.0", settings: new Map([["explicit_type_keys", ["type"]]]), inclusion: {include: ["image"]}, issues: [], + return {specVersion: "0.3.0", settings: {explicit_type_keys: ["type"]}, inclusion: {include: ["image"]}, issues: [], contracts: definitions.map(({contract, type}) => ({...contract, path: `_contracts/${contract.id}.md`, contractType: "record", implementedBy: [type]})), - types: definitions.map(({contract, type}) => ({name: type, path: `_types/${type}.md`, implements: [{contract: contract.id, version: contract.version, fields: new Map(Object.entries(mappings[type] ?? {}))}]}))}; + types: definitions.map(({contract, type}) => ({name: type, path: `_types/${type}.md`, implements: [{contract: contract.id, version: contract.version, fields: {...mappings[type]}}]}))}; } async function fixture(beforeBackend?: (client: MdbaseClient) => void) { const description = catalog(); const contracts: MemoryContract[] = description.types.flatMap(type => (type.implements ?? []).map(implementation => { const contract = description.contracts.find(candidate => candidate.id === implementation.contract && candidate.version === implementation.version); if (!contract || !implementation.version) throw new Error("Missing exact fixture contract"); - return {id: contract.id, version: implementation.version, type: type.name, contractDigest: contract.digest, fields: Object.fromEntries(implementation.fields ?? new Map())}; + return {id: contract.id, version: implementation.version, type: type.name, contractDigest: contract.digest, fields: implementation.fields ?? {}}; })); const replica = new MemoryReplica({confirmDelayMs: 0, contracts}); const manuscript = replica.seed({path: "manuscripts/original.md", types: ["native-manuscript"], frontmatter: {type: "native-manuscript", meta: new Map([["heading", "Original"]]), layout: "article", style: "apa"}, body: "Original manuscript\n"}); replica.seed({path: "sources/paper.md", types: ["native-source"], frontmatter: {type: "native-source", heading: "Citation source", citation: new Map([["id", "paper"], ["type", "article-journal"], ["title", "Citation source"]])}, body: "Lazy source body\n"}); replica.seed({path: "notes/chapter.md", frontmatter: {custom: "keep"}, body: "# A chapter\n"}); - const client = await connect({connector: replica.connector(), app: {name: "writer-native-test", version: "test"}, reconnect: false}); clients.push(client); + const client = await replica.client({app: {name: "writer-native-test", version: "test"}}); clients.push(client); vi.spyOn(client, "describe").mockResolvedValue(description); const metadata = vi.fn(async () => {throw new Error("Identity was not approved");}); const current = vi.fn(() => true); @@ -60,7 +60,7 @@ describe("native Writer domain backend", () => { it("discovers mapped manuscripts/library/index without bodies or identity requests", async () => { const h = await fixture(); const query = vi.spyOn(h.client, "query"); const get = vi.spyOn(h.client, "get"); const projected = await h.client.queryContract({id: "dev.mdbase.writer.manuscript", version: "1.0.0-beta.2"}, {pageSize: 128}); - expect(projected.records[0]?.implementations[0]?.fields.get("title")).toBe("Original"); + expect(projected.records[0]?.implementations[0]?.fields["title"]).toBe("Original"); const manuscripts = await h.backend.listManuscripts(); expect(manuscripts).toEqual({ok: true, value: [{path: "manuscripts/original.md", title: "Original", template: "article", style: "apa"}]}); const library = await h.backend.library(); @@ -69,7 +69,7 @@ describe("native Writer domain backend", () => { expect(index.ok && index.value.recordPaths).toContain("sources/paper.md"); expect(index.ok && index.value.notePaths).not.toContain("sources/paper.md"); expect(index.ok && index.value.notePaths).toContain("notes/chapter.md"); - expect(query.mock.calls.every(call => !call[1]?.body && !call[1]?.document)).toBe(true); + expect(query.mock.calls.every(call => !call[1]?.include?.body && !call[1]?.include?.document)).toBe(true); expect(get).not.toHaveBeenCalled(); expect(h.metadata).not.toHaveBeenCalled(); expect("writeFile" in h.backend).toBe(false); }); @@ -114,7 +114,7 @@ describe("native Writer domain backend", () => { }); it("unrelated invalid definitions do not hide Writer records or untyped notes", async () => { const h = await fixture(); - h.description.issues.push({code: "type_invalid", severity: "error", message: "An unrelated custom type is invalid", details: new Map([["path", "_types/unrelated.md"]])}); + h.description.issues.push({code: "type_invalid", severity: "error", message: "An unrelated custom type is invalid", details: {path: "_types/unrelated.md"}}); expect(await h.backend.listManuscripts()).toMatchObject({ok: true, value: [{path: "manuscripts/original.md"}]}); expect(await h.backend.index()).toMatchObject({ok: true, value: {notePaths: expect.arrayContaining(["notes/chapter.md"])}}); expect(await h.backend.readBody("notes/chapter.md")).toEqual({ok: true, value: "# A chapter\n"}); @@ -147,7 +147,7 @@ describe("native Writer domain backend", () => { }); it("an error in one of Writer's own types makes only that type unavailable", async () => { const h = await fixture(); - h.description.issues.push({code: "type_invalid", severity: "error", message: "Bad comment type", details: new Map([["path", "_types/native-comment.md"]])}); + h.description.issues.push({code: "type_invalid", severity: "error", message: "Bad comment type", details: {path: "_types/native-comment.md"}}); expect(await h.backend.listManuscripts()).toMatchObject({ok: true, value: [{path: "manuscripts/original.md"}]}); expect((await h.backend.library()).ok).toBe(true); const index = await h.backend.index(); @@ -158,7 +158,7 @@ describe("native Writer domain backend", () => { }); it("an error in the manuscript type leaves notes and sources usable", async () => { const h = await fixture(); - h.description.issues.push({code: "type_invalid", severity: "error", message: "Bad manuscript type", details: new Map([["path", "_types/native-manuscript.md"]])}); + h.description.issues.push({code: "type_invalid", severity: "error", message: "Bad manuscript type", details: {path: "_types/native-manuscript.md"}}); expect(await h.backend.listManuscripts()).toMatchObject({ok: false, message: expect.stringContaining("native-manuscript")}); expect(await h.backend.library()).toMatchObject({ok: true, value: [{key: "paper"}]}); const index = await h.backend.index(); @@ -214,7 +214,7 @@ describe("native Writer domain backend", () => { initial.publish(state); expect((await h.backend.index()).ok).toBe(true); expect(watch).toHaveBeenCalledTimes(2); expect(initial.stop).toHaveBeenCalledOnce(); expect(initial.listeners.size).toBe(0); - const old = watch.mock.calls[0]?.[1]; if (!old) throw new Error("Missing original watch callback"); + const old = watch.mock.calls[0]?.[0]; if (!old) throw new Error("Missing original watch callback"); const calls = notified.mock.calls.length; old({changes: [], cursor: "retired-watch", reset: true}); expect(notified).toHaveBeenCalledTimes(calls); @@ -253,7 +253,7 @@ describe("native Writer domain backend", () => { expect(query.mock.calls.some(call => call[1]?.cursor !== undefined)).toBe(true); }); it.each(["changed snapshot", "repeated cursor"]) ("refuses unsafe metadata pagination: %s", async failure => { - const h = await fixture(); const actual = await h.client.query({}, {effective: true}); + const h = await fixture(); const actual = await h.client.query({}, {include: {effective: true}}); vi.spyOn(h.client, "pages").mockImplementation(async function* () { yield {...actual, records: [], complete: false, cursor: "original-cursor"}; yield {...actual, records: [], complete: false, ...(failure === "changed snapshot" ? {asOf: actual.asOf + 1, cursor: "next-cursor"} : {cursor: "original-cursor"})}; @@ -286,7 +286,7 @@ describe("native Writer domain backend", () => { expect(opened.value.session.getNativeSnapshot().record.id).toBe(h.manuscript.id); opened.value.session.setBody("Changed through native lease\n"); expect((await opened.value.session.flush()).ok).toBe(true); - expect((await h.client.get(h.manuscript.id, {body: true})).body).toBe("Changed through native lease\n"); + expect((await h.client.get(h.manuscript.id, {include: {body: true}})).body).toBe("Changed through native lease\n"); h.backend.dispose(); expect(close).not.toHaveBeenCalled(); peer.session.setBody("Peer still active\n"); expect((await peer.session.flush()).ok).toBe(true); peer.release(); }); @@ -295,13 +295,13 @@ describe("native Writer domain backend", () => { const row = h.replica.seed({path: "comments/unsupported.md", types: ["native-comment"], frontmatter: {type: "native-comment", document: "manuscripts/original.md", motivation: "commenting", status: "open", created_at: "2026-06-10T12:00:00Z"}, body: "Unconfirmed contract text\n"}); const read = vi.spyOn(h.client, "getContract").mockRejectedValue(new MdbaseError({code: "upgrade_required", recovery: "upgrade", message: "Contract records unsupported", reason: "contract_records_unsupported"})); expect(await h.backend.comments()).toMatchObject({ok: false, message: expect.stringContaining("upgrade_required")}); - expect(read).toHaveBeenCalledWith(row.id, {id: "mdbase.comment", version: "1.0.0", type: "native-comment"}, expect.any(AbortSignal)); + expect(read).toHaveBeenCalledWith(row.id, {id: "mdbase.comment", version: "1.0.0", type: "native-comment"}, {signal: expect.any(AbortSignal)}); }); it("creates a mapped manuscript and chapter only after confirmed current native readback", async () => { const h = await fixture(); const created = await h.backend.createManuscript({title: "Launch", template: "article", style: "apa"}); expect(created).toEqual({ok: true, value: "manuscripts/launch.md"}); - const actual = await h.client.get({path: "manuscripts/launch.md"}, {body: true}); + const actual = await h.client.get({path: "manuscripts/launch.md"}, {include: {body: true}}); expect(nativeObject(actual.frontmatter)["meta"]).toMatchObject({heading: "Launch"}); expect(actual.state.state).toBe("confirmed"); const chapter = await h.backend.createRecord("notes/chapter.md", "# New chapter\n"); expect(chapter).toEqual({ok: true, value: "notes/chapter-2.md"}); @@ -320,12 +320,12 @@ describe("native Writer domain backend", () => { }); it("adopts a note with original UUID/body/custom metadata preserved by native CAS", async () => { const h = await fixture(); - const original = await h.client.get({path: "notes/chapter.md"}, {body: true, document: true}); + const original = await h.client.get({path: "notes/chapter.md"}, {include: {body: true, document: true}}); const update = vi.spyOn(h.client, "update"); expect(await h.backend.adoptManuscript(original.path)).toEqual({ok: true, value: original.path}); - const changed = await h.client.get(original.id, {body: true}); + const changed = await h.client.get(original.id, {include: {body: true}}); expect(changed.id).toBe(original.id); expect(changed.body).toBe(original.body); - expect(changed.frontmatter.get("custom")).toBe("keep"); expect(changed.types).toContain("native-manuscript"); + expect(changed.frontmatter["custom"]).toBe("keep"); expect(changed.types).toContain("native-manuscript"); expect(nativeObject(changed.frontmatter)["meta"]).toMatchObject({heading: "A chapter"}); expect(update).toHaveBeenCalledTimes(1); expect(update.mock.calls[0]?.[1]).toMatchObject({contract: {id: "dev.mdbase.writer.manuscript", version: "1.0.0-beta.2", type: "native-manuscript"}, promote: true, patch: {title: "A chapter"}, ifRevision: original.revision}); @@ -352,12 +352,12 @@ describe("native Writer domain backend", () => { expect(withdrawn.ok).toBe(true); expect(update).toHaveBeenCalledTimes(1); expect(update.mock.calls[0]?.[1]).toMatchObject({body: "", contract: {id: "mdbase.comment", version: "1.0.0", type: "native-comment"}}); - const raw = await h.client.get({path: changed.value.path}, {body: true}); + const raw = await h.client.get({path: changed.value.path}, {include: {body: true}}); expect(raw.body).toBe(""); - expect(raw.frontmatter.get("review")).toBeInstanceOf(Map); + expect(raw.frontmatter["review"]).toBeTypeOf("object"); const review = nativeObject(raw.frontmatter)["review"]; expect(review).toMatchObject({state: "resolved", deleted: expect.any(String), modified: expect.any(String)}); - expect(raw.frontmatter.has("deleted_at")).toBe(false); + expect(raw.frontmatter).not.toHaveProperty("deleted_at"); }); it("reloads comments without an error while a comment write is still pending (issue 91)", async () => { // The watch reports a write before it confirms, and the panel reloads at once. @@ -418,9 +418,9 @@ describe("native Writer domain backend", () => { const receipt = vi.spyOn(h.client, "awaitReceipt"); const recover = await h.backend.createRecord("notes/unknown.md", "Fresh retry must not submit\n"); expect(recover).toMatchObject({ok: false, message: expect.stringContaining("recovered the original operation")}); - expect(receipt).toHaveBeenCalledWith(submitted[0], 5_000, expect.any(AbortSignal)); + expect(receipt).toHaveBeenCalledWith(submitted[0], {timeoutMs: 5_000, signal: expect.any(AbortSignal)}); expect(h.client.create).toHaveBeenCalledOnce(); - const queried = await h.client.query({}, {body: true}); + const queried = await h.client.query({}, {include: {body: true}}); const records = queried.records.filter(record => record.path === "notes/unknown.md"); expect(records).toHaveLength(1); expect(records[0]?.body).toBe("Original intent\n"); }); diff --git a/apps/writer/src/backend/native.ts b/apps/writer/src/backend/native.ts index fbb6d31..8697321 100644 --- a/apps/writer/src/backend/native.ts +++ b/apps/writer/src/backend/native.ts @@ -1,6 +1,6 @@ // Writer's domain repository over one borrowed public SDK connection. No // legacy backend facade, SDK runtime/setup engine, copied client or app journal. -import { isMdbaseError, type MdbaseApplicationConnection, type MdbaseClient, type ContractRecordView, type ContractSelector, type Write, type wire } from "@mdbase-dev/sdk"; +import { isMdbaseError, type MdbaseApplicationConnection, type MdbaseClient, type ContractRecordView, type ContractSelector, type DescribeResult, type FileView, type Receipt, type RecordView, type Write } from "@mdbase-dev/sdk"; import type { JsonObject } from "@mdbase-dev/connect"; import { changeFields, commentFromRecord, commentPath, newCommentFields, type CommentChange, type CommentRecord } from "@mdbase-dev/ui/comments"; import { CollectionBodies, type WriterBodyRow } from "./bodies.js"; @@ -21,17 +21,17 @@ interface NativeMetadata { readonly schema: CollectionSchema; readonly store: CollectionStore; readonly identities: ReadonlyMap; - readonly files: ReadonlyMap; + readonly files: ReadonlyMap; readonly generation: number; } const RECONNECT_MIN_MS = 500, RECONNECT_MAX_MS = 30_000, PEOPLE_RETRY_MS = 250; -function unprotected(record: wire.RecordView): boolean { +function unprotected(record: RecordView): boolean { return record.state.state === "confirmed" && readable(record); } /** A record a display read may show: no hold or unresolved conflict. It may still be * pending, as every write is between the watch's change and its confirmation; a * rejected write is rolled back and arrives as another change. Writes need `unprotected`. */ -function readable(record: wire.RecordView): boolean { +function readable(record: RecordView): boolean { return !record.state.hold && !(record.state.unresolved ?? 0); } @@ -89,7 +89,7 @@ export class NativeWriterBackend implements WriterBackend { // loop); it schedules one bounded, backed-off reconnect instead. let notifyFailure = !reconnecting; const current = () => !this.disposed && epoch === this.watchEpoch; - const watch = this.client.watchChanges(undefined, batch => { + const watch = this.client.watchChanges(batch => { if (current()) this.invalidate(batch.reset ? [] : batch.changes.map(change => change.path)); }); const ended = () => { @@ -170,7 +170,7 @@ export class NativeWriterBackend implements WriterBackend { await watch.ready; this.check(); const generation = this.generation; if (watch !== this.watch || watch.state !== "active") throw new Error("Writer's collection watch needs reconnection."); - const catalog = await this.client.describe(this.signal); this.check(generation); + const catalog = await this.client.describe({signal: this.signal}); this.check(generation); const schema = nativeWriterSchema(catalog); const store = new CollectionStore(schema); const rows = new Map(); @@ -179,7 +179,7 @@ export class NativeWriterBackend implements WriterBackend { const recordCursors = new Set(); let asOf: number | undefined; let complete = false; - for await (const page of this.client.pages({limit: 500}, {effective: true}, this.signal)) { + for await (const page of this.client.pages({limit: 500}, {include: {effective: true}, signal: this.signal})) { this.check(generation); if (asOf !== undefined && asOf !== page.asOf) throw new Error("Writer's native query snapshot changed."); asOf = page.asOf; @@ -198,7 +198,7 @@ export class NativeWriterBackend implements WriterBackend { if (!complete || asOf === undefined) throw new Error("Writer's native query did not return a complete snapshot."); await this.projectMetadata(catalog, schema, rows, identities, asOf, generation); store.upsert([...rows.values()], true); - const files = new Map(); + const files = new Map(); const fileIds = new Set(); const cursors = new Set(); let cursor: string | undefined; @@ -220,7 +220,7 @@ export class NativeWriterBackend implements WriterBackend { if (watch !== this.watch || watch.state !== "active") throw new Error("Writer's collection watch needs reconnection."); return this.cached = {schema, store, identities, files, generation}; } - private async projectMetadata(catalog: wire.DescribeResult, schema: CollectionSchema, rows: Map, identities: ReadonlyMap, asOf: number, generation: number): Promise { + private async projectMetadata(catalog: DescribeResult, schema: CollectionSchema, rows: Map, identities: ReadonlyMap, asOf: number, generation: number): Promise { for (const domain of ["manuscript", "source", "annotation", "comment", "person"] as const) { const selected = new Map([...rows].filter(([, row]) => schema.roles(row.types).get(domain)?.active)); if (!selected.size) continue; @@ -289,7 +289,7 @@ export class NativeWriterBackend implements WriterBackend { for (const [path, entry] of selected) { const identity = metadata.identities.get(path); if (!identity) throw new Error("Writer lost the original record identity."); - const record = await this.client.get(identity.id, {body: true}, this.signal); this.check(metadata.generation); + const record = await this.client.get(identity.id, {include: {body: true}, signal: this.signal}); this.check(metadata.generation); if (record.id !== identity.id || record.path !== path || record.revision !== identity.revision || !record.types.includes(entry.type) || !readable(record)) throw new Error("Writer's selected record changed or is protected."); const contract = metadata.store.comments.has(path) ? commentContract : annotationContract; const projected = await this.contractRecord(record, {...contract, type: entry.type}, readable); this.check(metadata.generation); @@ -316,7 +316,7 @@ export class NativeWriterBackend implements WriterBackend { return this.safely(async () => { const metadata = await this.metadata(); const original = metadata.identities.get(path); if (!original) throw new Error("Writer cannot find this record in its native index."); - const record = await this.client.get(original.id, {body: true}, this.signal); this.check(metadata.generation); + const record = await this.client.get(original.id, {include: {body: true}, signal: this.signal}); this.check(metadata.generation); if (record.id !== original.id || record.path !== path || record.revision !== original.revision || !unprotected(record)) throw new Error("Writer's record changed or is protected."); return record.body ?? ""; }); @@ -325,10 +325,10 @@ export class NativeWriterBackend implements WriterBackend { return this.safely(async () => { const metadata = await this.metadata(); const original = metadata.files.get(path); if (!original) throw new Error("Writer cannot find this file in its native index."); - const seen = await this.connection.files.get(original.id, this.signal); this.check(metadata.generation); + const seen = await this.connection.files.get(original.id, {signal: this.signal}); this.check(metadata.generation); if (seen.id !== original.id || seen.path !== path || seen.digest !== original.digest || seen.hold || seen.state === "pending_upload" || seen.confirmedSeq <= 0) throw new Error("Writer's file changed or is protected."); const bytes = await this.connection.files.download(seen, {signal: this.signal}); this.check(metadata.generation); - const current = await this.connection.files.get(original.id, this.signal); this.check(metadata.generation); + const current = await this.connection.files.get(original.id, {signal: this.signal}); this.check(metadata.generation); if (current.id !== original.id || current.digest !== seen.digest || current.path !== path || current.hold || current.state === "pending_upload" || current.confirmedSeq <= 0 || bytes.byteLength !== current.size) throw new Error("Writer's downloaded file changed or is protected."); return bytes; }); @@ -366,7 +366,7 @@ export class NativeWriterBackend implements WriterBackend { // captured MID through SDK receipt/read APIs; this click does no write. // A retry of the same creation re-sends its original intent, which lands once. if (this.unresolvedMutation && (intent === undefined || this.sdkIntent(intent) !== this.unresolvedIntent)) { - const receipt = await this.client.awaitReceipt(this.unresolvedMutation, 5_000, this.signal); this.check(); + const receipt = await this.client.awaitReceipt(this.unresolvedMutation, {timeoutMs: 5_000, signal: this.signal}); this.check(); if (receipt.mutation !== this.unresolvedMutation) throw new Error("Writer lost the original receipt identity."); if (receipt.state === "rejected") { this.unresolvedMutation = this.unresolvedIntent = undefined; @@ -380,10 +380,10 @@ export class NativeWriterBackend implements WriterBackend { }); } finally {this.writing = false;} } - private async recovered(mutationId: string, receipt: wire.Receipt): Promise { + private async recovered(mutationId: string, receipt: Receipt): Promise { if (receipt.mutation !== mutationId || receipt.state !== "confirmed" || !receipt.records?.length) throw new Error("Writer must recover the original operation before starting another."); for (const witnessed of receipt.records) { - const current = await this.client.get(witnessed.id, {document: true}, this.signal); this.check(); + const current = await this.client.get(witnessed.id, {include: {document: true}, signal: this.signal}); this.check(); if (!unprotected(current) || current.id !== witnessed.id || current.path !== witnessed.path || (witnessed.state.state === "confirmed" && current.revision !== witnessed.revision)) throw new Error("Writer's original operation is protected or changed."); } @@ -391,7 +391,7 @@ export class NativeWriterBackend implements WriterBackend { private async availablePath(path: string): Promise { for (let n = 1; n <= 20; n++) { const target = numberedPath(path, n); - const found = await this.client.find({path: target}, undefined, this.signal); this.check(); + const found = await this.client.find({path: target}, {signal: this.signal}); this.check(); if (!found) return target; } throw new Error("Writer could not find an unused path."); @@ -416,18 +416,18 @@ export class NativeWriterBackend implements WriterBackend { throw error; } } - private async contractRecord(original: wire.RecordView, contract: ContractSelector, usable: (record: wire.RecordView) => boolean = unprotected): Promise { - const projected = await this.client.getContract(original.id, contract, this.signal); this.check(); + private async contractRecord(original: RecordView, contract: ContractSelector, usable: (record: RecordView) => boolean = unprotected): Promise { + const projected = await this.client.getContract(original.id, contract, {signal: this.signal}); this.check(); const expected = (await this.metadata()).schema.description.contracts.find(candidate => candidate.id === contract.id); const digest = manifestContractDigest(contract.id, contract.version); if (!expected || projected.id !== original.id || projected.path !== original.path || projected.revision !== original.revision || projected.contract.id !== contract.id || projected.contract.version !== contract.version || projected.contract.type !== contract.type || (digest !== undefined && !sameDigest(projected.contract.digest, digest))) throw new Error("Writer's contract record binding changed."); - const current = await this.client.get(original.id, {body: true, document: true}, this.signal); this.check(); + const current = await this.client.get(original.id, {include: {body: true, document: true}, signal: this.signal}); this.check(); if (!usable(current) || current.id !== original.id || current.path !== original.path || current.revision !== original.revision) throw new Error("Writer's contract record changed or is protected."); return projected; } - private async confirmed(write: Write, id: string, contract?: ContractSelector): Promise { + private async confirmed(write: Write, id: string, contract?: ContractSelector): Promise { await write.confirmed; this.check(); if (write.receipt.mutation !== write.mutationId || write.receipt.state !== "confirmed") throw new Error("Writer lost the original confirmed receipt."); // A confirmed receipt may carry no records, so `write.records` can still be the @@ -435,7 +435,7 @@ export class NativeWriterBackend implements WriterBackend { // confirmed read below proves protection and the current revision. const witnessed = write.records.find(record => record.id === id); if (!witnessed) throw new Error("Writer's original receipt did not name the record."); - const current = await this.client.get(id, {body: true, document: true}, this.signal); this.check(); + const current = await this.client.get(id, {include: {body: true, document: true}, signal: this.signal}); this.check(); if (!unprotected(current) || current.id !== id || current.path !== witnessed.path || (witnessed.state.state === "confirmed" && current.revision !== witnessed.revision)) throw new Error("Writer's confirmed record changed or is protected."); if (contract) await this.contractRecord(current, contract); @@ -446,7 +446,7 @@ export class NativeWriterBackend implements WriterBackend { const attempt = this.creations.get(intent)?.attempt ?? 0; return attempt ? `${intent}/${attempt}` : intent; } - private async create(path: string, body: string, frontmatter: JsonObject, contract?: ContractSelector, intent?: string): Promise { + private async create(path: string, body: string, frontmatter: JsonObject, contract?: ContractSelector, intent?: string): Promise { const creation = intent === undefined ? {attempt: 0} : this.creations.get(intent) ?? {attempt: 0}; const target = creation.target ?? await this.availablePath(path); this.check(); const id = creation.id ?? crypto.randomUUID(); @@ -483,7 +483,7 @@ export class NativeWriterBackend implements WriterBackend { adoptManuscript(path: string): Promise> { return this.write(async () => { const binding = await this.binding("manuscript"); - const original = await this.client.get({path}, {body: true, document: true}, this.signal); this.check(); + const original = await this.client.get({path}, {include: {body: true, document: true}, signal: this.signal}); this.check(); if (!unprotected(original) || original.document === undefined) throw new Error("Writer's note is protected or lacks its full source."); const contract = {...manuscriptContract, type: binding.name}; const patch = {title: titleFromNote(path, original.body ?? "")}; @@ -510,7 +510,7 @@ export class NativeWriterBackend implements WriterBackend { return this.write(async () => { const metadata = await this.metadata(); const identity = metadata.identities.get(comment.path); if (!identity) throw new Error("Writer lost the original comment identity."); - const original = await this.client.get(identity.id, {body: true, document: true}, this.signal); this.check(); + const original = await this.client.get(identity.id, {include: {body: true, document: true}, signal: this.signal}); this.check(); if (!unprotected(original) || original.document === undefined || original.path !== comment.path) throw new Error("Writer's original comment is protected or has moved."); const binding = this.bindingList(metadata.schema, "comment").find(candidate => original.types.includes(candidate.name)); if (!binding) throw new Error("Writer's comment lost its native contract binding."); diff --git a/apps/writer/src/backend/next-records.test.ts b/apps/writer/src/backend/next-records.test.ts index b16cbc0..44c43d8 100644 --- a/apps/writer/src/backend/next-records.test.ts +++ b/apps/writer/src/backend/next-records.test.ts @@ -1,4 +1,4 @@ -import { connect, MdbaseError, type MdbaseClient } from "@mdbase-dev/sdk"; +import { MdbaseError, type MdbaseClient } from "@mdbase-dev/sdk"; import { MemoryReplica } from "@mdbase-dev/sdk/testing"; import { afterEach, describe, expect, it, vi } from "vitest"; @@ -15,7 +15,7 @@ afterEach(() => { async function fixture(pending = false) { const replica = new MemoryReplica({ confirmDelayMs: pending ? null : 0 }); const record = replica.seed({ path: "writing/draft.md", frontmatter: { title: "Draft", custom: "preserve" }, body: "Original body\n" }); - const client = await connect({ connector: replica.connector(), app: { name: "writer-lease-test", version: "test" }, reconnect: false }); + const client = await replica.client({ app: { name: "writer-lease-test", version: "test" } }); clients.push(client); const owner = new AbortController(); // The public helper is frozen; a typed test-only forwarding port observes @@ -42,7 +42,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru expect(lease.session.getNativeSnapshot().remote?.state.hold).toBeTruthy(); expect(lease.session.getSnapshot()).toMatchObject({ state: "conflict", remote: null, body: "Local draft while held\n" }); expect(await fixtureState.client.listHolds()).toHaveLength(1); - expect((await fixtureState.client.save(fixtureState.client.resolveHold(hold, "keep_mine"))).outcome).toBe("confirmed"); + expect((await fixtureState.client.settle(fixtureState.client.resolveHold(hold, "keep_mine"))).outcome).toBe("confirmed"); expect((await lease.session.flush({ timeoutMs: 100 })).ok).toBe(false); await vi.waitFor(() => expect(lease.session.getSnapshot().remote).not.toBeNull()); lease.session.resolve({ body: "Deliberately merged draft\n" }); @@ -58,7 +58,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru await vi.waitFor(() => expect(lease.session.getSnapshot()).toMatchObject({ state: "conflict", body: "Local concurrent edit\n", remote: { body: "Collection concurrent edit\n" } })); lease.session.resolve({ body: "Merged concurrent edit\n" }); expect((await lease.session.flush({ timeoutMs: 100 })).ok).toBe(true); - expect((await fixtureState.client.get(fixtureState.record.id, { body: true })).body).toBe("Merged concurrent edit\n"); + expect((await fixtureState.client.get(fixtureState.record.id, { include: { body: true } })).body).toBe("Merged concurrent edit\n"); }); it("opens an explicit native path and projects display JSON without replacing the native view", async () => { @@ -69,7 +69,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru expect(lease.session.getSnapshot()).toMatchObject({ state: "saved", body: "Original body\n", dirty: false, frontmatter: { title: "Draft", custom: "preserve" } }); const native = lease.session.getNativeSnapshot(); expect(native.record.id).toBe(f.record.id); - expect(native.record.frontmatter).toBeInstanceOf(Map); + expect(native.record.frontmatter).toEqual({ title: "Draft", custom: "preserve" }); expect(native.record.document).toBeDefined(); }); @@ -84,7 +84,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru expect(await lease.session.flush({ timeoutMs: 1000 })).toEqual({ ok: true }); expect(lease.session.getSnapshot()).toMatchObject({ state: "saved", body: "Changed body\n", dirty: false }); expect(lease.session.getNativeSnapshot().lastReceipt?.state).toBe("confirmed"); - expect((await f.client.get(f.record.id, { body: true })).body).toBe("Changed body\n"); + expect((await f.client.get(f.record.id, { include: { body: true } })).body).toBe("Changed body\n"); expect(changed).toHaveBeenCalled(); stop(); }); @@ -97,7 +97,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru expect(second.session.getSnapshot().body).toBe("Shared peer draft\n"); first.release(); expect(await second.session.flush({ timeoutMs: 1000 })).toEqual({ ok: true }); - expect((await f.client.get(f.record.id, { body: true })).body).toBe("Shared peer draft\n"); + expect((await f.client.get(f.record.id, { include: { body: true } })).body).toBe("Shared peer draft\n"); }); it("passes retained recovery identity to the native open helper without a factory shim", async () => { @@ -168,7 +168,7 @@ describe("NextWriterRecords SDK lease value translation (stand-in, not native/ru expect(lease.session.getSnapshot()).toMatchObject({ state: "saved", dirty: false, frontmatter: { title: "Draft" } }); } lease.session.patchFrontmatter({ custom: undefined }); - expect(lease.session.getNativeSnapshot().frontmatter.has("custom")).toBe(false); + expect(lease.session.getNativeSnapshot().frontmatter).not.toHaveProperty("custom"); expect((await f.client.pendingWrites())).toEqual([]); }); diff --git a/apps/writer/src/backend/next-records.ts b/apps/writer/src/backend/next-records.ts index 53c5bee..5c562d2 100644 --- a/apps/writer/src/backend/next-records.ts +++ b/apps/writer/src/backend/next-records.ts @@ -1,4 +1,4 @@ -import { isMdbaseError, toPlain, type MdbaseClient, type PlainValue, type RecordOpenOptions as NativeOpenOptions, type RecordSessionSnapshot as NativeSnapshot, type wire } from "@mdbase-dev/sdk"; +import { isMdbaseError, type MdbaseClient, type PlainValue, type RecordOpenOptions as NativeOpenOptions, type RecordSessionSnapshot as NativeSnapshot, type RecordView } from "@mdbase-dev/sdk"; import type { JsonObject } from "@mdbase-dev/connect"; import type { RecordLease, RecordOpenOptions, RecordSession, RecordSessionSnapshot, SessionProblem, SessionRecord, WriterRecords } from "./types.js"; @@ -105,14 +105,14 @@ function plain(value: unknown): PlainValue { throw new TypeError("Writer frontmatter patches require plain JSON values."); } -function record(view: wire.RecordView): SessionRecord { +function record(view: RecordView): SessionRecord { return { path: view.path, revision: view.revision, types: view.types, - // Display/edit view only. Native session keeps the exact Map/tag values and - // genuine full record witness; writes only receive the explicit app patch. - frontmatter: toPlain(view.frontmatter) as JsonObject, + // Display/edit view only. Native session keeps the genuine full record + // witness; writes only receive the explicit app patch. + frontmatter: view.frontmatter, ...(view.body === undefined ? {} : { body: view.body }), }; } @@ -121,7 +121,7 @@ function snapshot(value: NativeSnapshot): RecordSessionSnapshot { return { state: value.state, body: value.body, - frontmatter: toPlain(new Map(value.frontmatter)) as JsonObject, + frontmatter: value.frontmatter, record: record(value.record), remote: value.remote && value.remote.state.state === "confirmed" && !value.remote.state.hold && !value.remote.state.unresolved ? record(value.remote) : null, dirty: value.dirty, diff --git a/apps/writer/src/ui/NativeWriterView.tsx b/apps/writer/src/ui/NativeWriterView.tsx index 7966c0d..732f25f 100644 --- a/apps/writer/src/ui/NativeWriterView.tsx +++ b/apps/writer/src/ui/NativeWriterView.tsx @@ -18,7 +18,7 @@ export function NativeWriterView({scope}: {scope: WriterNativeScope}) { try { backend = new NativeWriterBackend(scope.connection, { collectionName: scope.connection.displayName, signal: scope.signal, records: scope.records, - authorize: () => scope.mdbase.application.reauthorize({signal: scope.signal}), + authorize: () => scope.mdbase.reauthorize({signal: scope.signal}), }); const owned = backend; queueMicrotask(() => {if (active) setView({scope, backend: owned});}); diff --git a/apps/writer/src/ui/SdkWriterRoot.test.tsx b/apps/writer/src/ui/SdkWriterRoot.test.tsx index 4eb9233..1e3ac6c 100644 --- a/apps/writer/src/ui/SdkWriterRoot.test.tsx +++ b/apps/writer/src/ui/SdkWriterRoot.test.tsx @@ -3,7 +3,6 @@ import { act, cleanup, fireEvent, screen, waitFor } from "@testing-library/react import { render } from "../test/render.js"; import { StrictMode, useEffect } from "react"; import { afterEach, beforeEach, expect, it, vi } from "vitest"; -import type { wire } from "@mdbase-dev/sdk"; import { createTestApp, type TestApp, type TestAppOptions } from "@mdbase-dev/sdk/testing"; import manifest from "../generated/mdbase-app.json"; import { App } from "../App.js"; @@ -77,11 +76,6 @@ it("hands Writer the gate's ready connection and retires that scope when the col it("opens the manuscript list with the shared collection switcher in the top bar", async () => { const h = await readyFixture(); - const names = ["manuscript", "source", "comment"]; - const catalog: wire.DescribeResult = {specVersion: "0.3.0", settings: new Map(), issues: [], inclusion: {include: ["image"]}, - contracts: manifest.requirements.contracts.map((contract, index) => ({...contract, path: `_contracts/${contract.id}.md`, digest: contract.digest.replace(/^sha256:/, ""), contractType: "record", implementedBy: [names[index] ?? "unknown"]})), - types: manifest.requirements.contracts.map((contract, index) => ({name: names[index] ?? "unknown", path: `_types/${names[index]}.md`, implements: [{contract: contract.id, version: contract.version, fields: new Map([["title", "title"], ["template", "template"], ["csl", "csl"]])}]}))}; - vi.spyOn(h.client(), "describe").mockResolvedValue(catalog); const {container} = render(); await screen.findByRole("button", { name: /Original manuscript/ }); expect(screen.queryByText("Continue writing")).toBeNull(); diff --git a/apps/writer/src/ui/connection-notice.test.ts b/apps/writer/src/ui/connection-notice.test.ts index 32613f7..77b3f1f 100644 --- a/apps/writer/src/ui/connection-notice.test.ts +++ b/apps/writer/src/ui/connection-notice.test.ts @@ -4,8 +4,8 @@ import { expect, it, vi } from "vitest"; import { connectionNotice, SYNC_DELAY_MS, useConnectionNotice } from "./connection-notice.js"; const ready = { phase: { kind: "ready" } } as const; -const sync = (health: string | null, live: boolean | null = true) => - ({ kind: "synced", health, live }) as never; +const sync = (health: string | null, live: boolean | null = true, writes: unknown = null) => + ({ connection: "online", health, live, writes }) as never; it("never reads as connected while offline, reconnecting or holding changes", () => { expect(connectionNotice({ ...ready, sync: sync(null) } as never)).toBeNull(); @@ -24,26 +24,25 @@ it("never reads as connected while offline, reconnecting or holding changes", () expect( connectionNotice({ ...ready, - sync: sync("offline"), - writes: { saveState: "saved_on_device", pending: [], rejected: [] }, + sync: sync("offline", true, { saveState: "saved_on_device", pending: [], rejected: [] }), } as never), ).toBe("offline"); - expect(connectionNotice({ ...ready, writes: { saveState: "saved_on_device", pending: [], rejected: [] } } as never)).toBe("saved_on_device"); + expect(connectionNotice({ ...ready, sync: sync(null, true, { saveState: "saved_on_device", pending: [], rejected: [] }) } as never)).toBe("saved_on_device"); expect( connectionNotice({ phase: { kind: "opening" }, live: false } as never), ).toBeNull(); }); it("escalates at 30 seconds without an SDK snapshot change and clears when confirmed", () => { - const snapshot = { ...ready, writes: { pending: [{ createdAt: 1000 }], rejected: [], saveState: "saving" } } as never; + const snapshot = { ...ready, sync: sync(null, true, { pending: [{ createdAt: 1000 }], rejected: [], saveState: "saving" }) } as never; expect(connectionNotice(snapshot, true, 1000 + SYNC_DELAY_MS - 1)).toBeNull(); expect(connectionNotice(snapshot, true, 1000 + SYNC_DELAY_MS)).toBe("sync_delayed"); - expect(connectionNotice({ ...ready, writes: { pending: [], rejected: [], saveState: "saved" } } as never, true, 100000)).toBeNull(); + expect(connectionNotice({ ...ready, sync: sync(null, true, { pending: [], rejected: [], saveState: "saved" }) } as never, true, 100000)).toBeNull(); }); it("shows refused writes immediately without acknowledging or stopping SDK retries", () => { const rejected = [{ createdAt: 1000, state: "rejected" }]; - const snapshot = { ...ready, writes: { pending: [], rejected, saveState: "rejected" } } as never; + const snapshot = { ...ready, sync: sync(null, true, { pending: [], rejected, saveState: "rejected" }) } as never; expect(connectionNotice(snapshot, true, 1001)).toBe("sync_delayed"); expect(rejected).toHaveLength(1); }); @@ -51,7 +50,7 @@ it("shows refused writes immediately without acknowledging or stopping SDK retri it("announces the pending boundary without a new snapshot and cancels its timer on confirmation", () => { vi.useFakeTimers(); vi.setSystemTime(1000); - let snapshot = { ...ready, writes: { pending: [{ createdAt: 1000 }], rejected: [], saveState: "saving" } } as never; + let snapshot = { ...ready, sync: sync(null, true, { pending: [{ createdAt: 1000 }], rejected: [], saveState: "saving" }) } as never; let notify = () => {}; const source = { getSnapshot: () => snapshot, subscribe: (listener: () => void) => { notify = listener; return () => {}; } }; const hook = renderHook(() => useConnectionNotice(source)); @@ -61,7 +60,7 @@ it("announces the pending boundary without a new snapshot and cancels its timer expect(hook.result.current).toBeNull(); act(() => vi.advanceTimersByTime(1)); expect(hook.result.current).toBe("sync_delayed"); - snapshot = { ...ready, writes: { pending: [], rejected: [], saveState: "saved" } } as never; + snapshot = { ...ready, sync: sync(null, true, { pending: [], rejected: [], saveState: "saved" }) } as never; act(notify); expect(hook.result.current).toBeNull(); expect(vi.getTimerCount()).toBe(0); diff --git a/apps/writer/src/ui/connection-notice.ts b/apps/writer/src/ui/connection-notice.ts index 571fc68..4ae4bb2 100644 --- a/apps/writer/src/ui/connection-notice.ts +++ b/apps/writer/src/ui/connection-notice.ts @@ -22,7 +22,7 @@ export const connectionNoticeLabels: Record = { }; type Observed = Partial< - Pick + Pick >; export function connectionNotice( @@ -32,17 +32,18 @@ export function connectionNotice( ): ConnectionNotice | null { if (!snapshot || (snapshot.phase && snapshot.phase.kind !== "ready")) return null; - if (snapshot.writes?.rejected.length || snapshot.writes?.pending.some(entry => now - entry.createdAt >= SYNC_DELAY_MS)) + const writes = snapshot.sync?.writes; + if (writes?.rejected.length || writes?.pending.some(entry => now - entry.createdAt >= SYNC_DELAY_MS)) return "sync_delayed"; const health = snapshot.sync?.health ?? snapshot.transport?.kind ?? null; if (!online || health === "offline") return "offline"; - if (snapshot.writes?.saveState === "saved_on_device") + if (writes?.saveState === "saved_on_device") return "saved_on_device"; if ( health === "unreachable" || health === "server_busy" || health === "rate_limited" || - snapshot.sync?.kind === "offline" || + snapshot.sync?.connection === "offline" || (snapshot.sync?.live ?? snapshot.live) === false ) return "reconnecting"; @@ -71,7 +72,7 @@ export function useConnectionNotice( let timer: ReturnType | undefined; const changed = () => { clearTimeout(timer); - const pending = entry.getSnapshot()?.writes?.pending ?? []; + const pending = entry.getSnapshot()?.sync?.writes?.pending ?? []; const oldest = Math.min(...pending.map(write => write.createdAt)); const remaining = oldest + SYNC_DELAY_MS - Date.now(); if (Number.isFinite(remaining) && remaining > 0) timer = setTimeout(changed, remaining); diff --git a/apps/writer/src/workspace/native-workspace.test.ts b/apps/writer/src/workspace/native-workspace.test.ts index a5a0d18..9fbcbb7 100644 --- a/apps/writer/src/workspace/native-workspace.test.ts +++ b/apps/writer/src/workspace/native-workspace.test.ts @@ -1,5 +1,5 @@ import { afterEach, expect, it, vi } from "vitest"; -import { connect, MdbasePeopleClient, type MdbaseClient, type wire } from "@mdbase-dev/sdk"; +import { MdbasePeopleClient, type DescribeResult, type MdbaseClient } from "@mdbase-dev/sdk"; import { MemoryReplica } from "@mdbase-dev/sdk/testing"; import manifest from "../generated/mdbase-app.json"; import { NativeWriterBackend } from "../backend/native.js"; @@ -27,10 +27,10 @@ it("runs existing manuscript/chapter editing and mapped settings on one borrowed const replica = new MemoryReplica({confirmDelayMs: 0, contracts: manifest.requirements.contracts.map((contract, index) => ({id: contract.id, version: contract.version, contractDigest: contract.digest, type: `fixture-${["manuscript", "source", "comment"][index]}`, fields: {title: "heading", template: "layout", csl: "style"}}))}); const main = replica.seed({path: "manuscripts/main.md", types: ["fixture-manuscript"], frontmatter: {type: "fixture-manuscript", heading: "Native title", unrelated: "preserved"}, body: "# Main\n\n![[chapters/first]]\n"}); const chapter = replica.seed({path: "chapters/first.md", body: "Native chapter\n"}); - const native = await connect({connector: replica.connector(), app: {name: "native-workspace-test", version: "test"}, reconnect: false}); client = native; - const description: wire.DescribeResult = {specVersion: "0.3.0", settings: new Map([["explicit_type_keys", ["type"]]]), inclusion: {include: ["image"]}, issues: [], + const native = await replica.client({app: {name: "native-workspace-test", version: "test"}}); client = native; + const description: DescribeResult = {specVersion: "0.3.0", settings: {explicit_type_keys: ["type"]}, inclusion: {include: ["image"]}, issues: [], contracts: manifest.requirements.contracts.map((contract, index) => ({...contract, digest: contract.digest.replace(/^sha256:/, ""), path: `_contracts/${contract.id}.md`, contractType: "record", implementedBy: [`fixture-${["manuscript", "source", "comment"][index]}`]})), - types: manifest.requirements.contracts.map((contract, index) => ({name: `fixture-${["manuscript", "source", "comment"][index]}`, path: `_types/type-${index}.md`, implements: [{contract: contract.id, version: contract.version, fields: new Map([["title", "heading"], ["template", "layout"], ["csl", "style"]])}]}))}; + types: manifest.requirements.contracts.map((contract, index) => ({name: `fixture-${["manuscript", "source", "comment"][index]}`, path: `_types/type-${index}.md`, implements: [{contract: contract.id, version: contract.version, fields: {title: "heading", template: "layout", csl: "style"}}]}))}; vi.spyOn(native, "describe").mockResolvedValue(description); const isCurrent = () => true; backend = new NativeWriterBackend({id: native.collection, displayName: "Writing", scope: {account: "fixture-account", installation: "fixture-installation", collection: native.collection}, generation: "fixture-generation", records: native, files: native.files, isCurrent, @@ -47,11 +47,11 @@ it("runs existing manuscript/chapter editing and mapped settings on one borrowed workspace.setBody(chapter.path, "Edited native chapter\n"); workspace.patchFrontmatter(main.path, {title: "Mapped native title"}); expect((await workspace.retrySave()).ok).toBe(true); - const saved = await native.get(main.id, {body: true}); - expect(saved.id).toBe(main.id); expect(saved.frontmatter.get("heading")).toBe("Mapped native title"); - expect(saved.frontmatter.get("unrelated")).toBe("preserved"); expect(saved.frontmatter.has("title")).toBe(false); - expect((await native.get(chapter.id, {body: true})).body).toBe("Edited native chapter\n"); + const saved = await native.get(main.id, {include: {body: true}}); + expect(saved.id).toBe(main.id); expect(saved.frontmatter["heading"]).toBe("Mapped native title"); + expect(saved.frontmatter["unrelated"]).toBe("preserved"); expect(saved.frontmatter).not.toHaveProperty("title"); + expect((await native.get(chapter.id, {include: {body: true}})).body).toBe("Edited native chapter\n"); await workspace.dispose(); backend.dispose(); expect(close).not.toHaveBeenCalled(); peer.session.setBody("Peer remains active\n"); await peer.session.flush(); - expect((await native.get(chapter.id, {body: true})).body).toBe("Peer remains active\n"); peer.release(); + expect((await native.get(chapter.id, {include: {body: true}})).body).toBe("Peer remains active\n"); peer.release(); }); diff --git a/changelog.d/sdk-polish-migration.md b/changelog.d/sdk-polish-migration.md new file mode 100644 index 0000000..7e1a928 --- /dev/null +++ b/changelog.d/sdk-polish-migration.md @@ -0,0 +1,3 @@ +## Changed + +- Move Writer to the SDK's new API in 0.1.0-beta.188 (one `createMdbase` entry, one options object per read, plain JSON record values, one `snapshot.sync` status) and update the LAB and staging SDK originals to the same release. diff --git a/docs/new-sdk.md b/docs/new-sdk.md index abaee4a..ec0b79e 100644 --- a/docs/new-sdk.md +++ b/docs/new-sdk.md @@ -169,7 +169,7 @@ refusal. Confirm applies that original object; an empty plan uses `configure()`. Unknown outcomes re-assess through the SDK rather than claim no changes or submit a fresh mutation automatically. Scope retirement fences the review. -Live migration, update and suspension status uses `summarizeStatus` over the +Live migration, update and suspension status uses the SDK's `snapshot.sync` status over the original client without replacing a still-current editable workspace, its local edits or record leases. Teardown removes only owned listeners/adapters, never the borrowed client. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1c6372..9608843 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,17 +69,17 @@ importers: specifier: 0.1.0-beta.176 version: 0.1.0-beta.176(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(babel-plugin-macros@3.1.0)(react@19.3.0)(rolldown@1.2.11)(supports-color@7.2.0) '@mdbase-dev/sdk': - specifier: 0.1.0-beta.187 - version: 0.1.0-beta.187 + specifier: 0.1.0-beta.188 + version: 0.1.0-beta.188 '@mdbase-dev/sdk-lab': - specifier: file:../../vendor/sdk-lab-beta157.tgz - version: file:vendor/sdk-lab-beta157.tgz + specifier: file:../../vendor/sdk-lab-beta188.tgz + version: file:vendor/sdk-lab-beta188.tgz '@mdbase-dev/sdk-staging': - specifier: file:../../vendor/sdk-staging-beta157.tgz - version: file:vendor/sdk-staging-beta157.tgz + specifier: file:../../vendor/sdk-staging-beta188.tgz + version: file:vendor/sdk-staging-beta188.tgz '@mdbase-dev/ui': specifier: 0.1.0-beta.176 - version: 0.1.0-beta.176(@codemirror/commands@6.11.1)(@codemirror/language@6.12.4)(@codemirror/state@6.7.6)(@codemirror/view@6.43.13)(@lezer/common@1.5.3)(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(@mdbase-dev/i18n@0.1.0-beta.176(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(babel-plugin-macros@3.1.0)(react@19.3.0)(rolldown@1.2.11)(supports-color@7.2.0))(@mdbase-dev/sdk@0.1.0-beta.187)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + version: 0.1.0-beta.176(@codemirror/commands@6.11.1)(@codemirror/language@6.12.4)(@codemirror/state@6.7.6)(@codemirror/view@6.43.13)(@lezer/common@1.5.3)(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(@mdbase-dev/i18n@0.1.0-beta.176(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(babel-plugin-macros@3.1.0)(react@19.3.0)(rolldown@1.2.11)(supports-color@7.2.0))(@mdbase-dev/sdk@0.1.0-beta.188)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@mdbase-writer/core': specifier: workspace:* version: link:../../packages/core @@ -602,22 +602,22 @@ packages: '@lingui/react': 6.9.0 react: ^19.2.0 - '@mdbase-dev/sdk-lab@file:vendor/sdk-lab-beta157.tgz': - resolution: {integrity: sha512-Q71Vbuk4iQFZknK0GR/2CmUpeNsf0T/XL2GMuv/PVWNxqO+dYTMw1mDpvb8pAtYAMpRyVrnQUf26Vk9HAuSjuQ==, tarball: file:vendor/sdk-lab-beta157.tgz} - version: 0.1.0-beta.157 + '@mdbase-dev/sdk-lab@file:vendor/sdk-lab-beta188.tgz': + resolution: {integrity: sha512-Tc/R1WhEBNDc2ODSWSOkmw35Fr+EhKGogdfECBgNS9R1gawItPaMiqA96D1S2/vlh01+CH2X8H0e9fG1alUXRw==, tarball: file:vendor/sdk-lab-beta188.tgz} + version: 0.1.0-beta.188 engines: {node: '>=20'} bundledDependencies: - '@mdbase-dev/connect-protocol' - '@mdbase-dev/sdk-staging@file:vendor/sdk-staging-beta157.tgz': - resolution: {integrity: sha512-ia47TMEcUfFWIahKWpkqhsuAMRoyZ0so6gJ5IZkJ9N4zz+zV6tL1GDu1SqtosCEj0Cql5qUH+dinqk9WBrYJfQ==, tarball: file:vendor/sdk-staging-beta157.tgz} - version: 0.1.0-beta.157 + '@mdbase-dev/sdk-staging@file:vendor/sdk-staging-beta188.tgz': + resolution: {integrity: sha512-tlfCGDfKueciOkqEAtz4MTrIuG3PXWJPw6PitidrSWU+P4HZdvJUTSUOpc2ZO+rllivnTV2r7wU0P5ohSIv5Sg==, tarball: file:vendor/sdk-staging-beta188.tgz} + version: 0.1.0-beta.188 engines: {node: '>=20'} bundledDependencies: - '@mdbase-dev/connect-protocol' - '@mdbase-dev/sdk@0.1.0-beta.187': - resolution: {integrity: sha512-bNsqlaeBKwA5ig3e4WZaCBRKmnlJs/b1FB11pogNtb7ur/bQf8txlcJWawKU2Fjto5/7+8MYz9bZFzM7JOfK/Q==} + '@mdbase-dev/sdk@0.1.0-beta.188': + resolution: {integrity: sha512-EDaInyP8q2Lz0Akz8P+CNj5O6OvinMJWR1bE04fKtWRFDt9mVRBRBYRja5okOtb3gtnKYyMdQFGLlFln7F1RrA==} engines: {node: '>=20'} bundledDependencies: - '@mdbase-dev/connect-protocol' @@ -2356,25 +2356,25 @@ snapshots: - rolldown - supports-color - '@mdbase-dev/sdk-lab@file:vendor/sdk-lab-beta157.tgz': + '@mdbase-dev/sdk-lab@file:vendor/sdk-lab-beta188.tgz': dependencies: '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 - '@mdbase-dev/sdk-staging@file:vendor/sdk-staging-beta157.tgz': + '@mdbase-dev/sdk-staging@file:vendor/sdk-staging-beta188.tgz': dependencies: '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 - '@mdbase-dev/sdk@0.1.0-beta.187': + '@mdbase-dev/sdk@0.1.0-beta.188': dependencies: '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 - '@mdbase-dev/ui@0.1.0-beta.176(@codemirror/commands@6.11.1)(@codemirror/language@6.12.4)(@codemirror/state@6.7.6)(@codemirror/view@6.43.13)(@lezer/common@1.5.3)(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(@mdbase-dev/i18n@0.1.0-beta.176(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(babel-plugin-macros@3.1.0)(react@19.3.0)(rolldown@1.2.11)(supports-color@7.2.0))(@mdbase-dev/sdk@0.1.0-beta.187)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@mdbase-dev/ui@0.1.0-beta.176(@codemirror/commands@6.11.1)(@codemirror/language@6.12.4)(@codemirror/state@6.7.6)(@codemirror/view@6.43.13)(@lezer/common@1.5.3)(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(@mdbase-dev/i18n@0.1.0-beta.176(@lingui/core@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0))(@lingui/react@6.9.0(@babel/core@7.29.7(supports-color@7.2.0))(babel-plugin-macros@3.1.0)(react@19.3.0))(babel-plugin-macros@3.1.0)(react@19.3.0)(rolldown@1.2.11)(supports-color@7.2.0))(@mdbase-dev/sdk@0.1.0-beta.188)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: '@fontsource/azeret-mono': 5.3.0 '@fontsource/ibm-plex-sans': 5.3.0 @@ -2388,7 +2388,7 @@ snapshots: '@codemirror/state': 6.7.6 '@codemirror/view': 6.43.13 '@lezer/common': 1.5.3 - '@mdbase-dev/sdk': 0.1.0-beta.187 + '@mdbase-dev/sdk': 0.1.0-beta.188 react-dom: 19.3.0(react@19.3.0) '@messageformat/date-skeleton@1.1.0': {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cdae0c7..799eef8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,7 +9,7 @@ minimumReleaseAgeExclude: - '@mdbase-dev/connect-dev@0.1.0-beta.149' - '@mdbase-dev/ui@0.1.0-beta.176' - '@mdbase-dev/i18n@0.1.0-beta.176' - - '@mdbase-dev/sdk@0.1.0-beta.187' + - '@mdbase-dev/sdk@0.1.0-beta.188' onlyBuiltDependencies: - esbuild diff --git a/tests/writer-sdk-intake.test.mjs b/tests/writer-sdk-intake.test.mjs index 4f2a281..d093bcf 100644 --- a/tests/writer-sdk-intake.test.mjs +++ b/tests/writer-sdk-intake.test.mjs @@ -13,14 +13,14 @@ const metadata=bytes=>JSON.parse(/^const metadata = (\{.*\});$/m.exec(bytes.toSt const member=(archive,path)=>execFileSync('tar',['-xOf',resolve(root,'vendor',archive),`package/dist/${path}`],{maxBuffer:8_000_000}); test('production npm archive and installed SDK match the authenticated release',async()=>{ - const pin=JSON.parse(await read('vendor/sdk-production-beta187.json')); - assert.equal(pin.sha256,'00eb1395160907323bfcdc9e6689438bbb8b478ec2d1c4e1b79c421d2a940c8d'); - assert.equal(pin.sourceCommit,'1907e67f26ece85f9c8b35bd99d4099d4e3f181a'); + const pin=JSON.parse(await read('vendor/sdk-production-beta188.json')); + assert.equal(pin.sha256,'9ac39582b5440272f7e95177ac4f4840aebd4c8ddf832b24545232abe99c6b27'); + assert.equal(pin.sourceCommit,'e8ffb806d16c58fe03cf50c96fb66e29ebb612ba'); assert.equal(hash(await read(`vendor/${pin.artifact}`)),pin.sha256); const pkg=JSON.parse(await read('apps/writer/package.json')); const target=process.env.VITE_MDBASE_ENV==='staging'?'staging':'production'; const archive=pin.artifact; - assert.equal(pkg.dependencies['@mdbase-dev/sdk'],'0.1.0-beta.187'); + assert.equal(pkg.dependencies['@mdbase-dev/sdk'],'0.1.0-beta.188'); const original=member(pin.artifact,'application/packaged-trust.js'); assert.equal(hash(original),pin.packagedTrustModuleSha256); assert.deepEqual(await read('apps/writer/node_modules/@mdbase-dev/sdk/dist/application/packaged-trust.js'),member(archive,'application/packaged-trust.js')); diff --git a/vendor/sdk-e8ffb806-production-beta188.tgz b/vendor/sdk-e8ffb806-production-beta188.tgz new file mode 100644 index 0000000..b4d999c Binary files /dev/null and b/vendor/sdk-e8ffb806-production-beta188.tgz differ diff --git a/vendor/sdk-lab-beta157.tgz b/vendor/sdk-lab-beta157.tgz deleted file mode 100644 index 4a3677b..0000000 Binary files a/vendor/sdk-lab-beta157.tgz and /dev/null differ diff --git a/vendor/sdk-lab-beta157.tgz.sigstore.json b/vendor/sdk-lab-beta157.tgz.sigstore.json deleted file mode 100644 index 53aa362..0000000 --- a/vendor/sdk-lab-beta157.tgz.sigstore.json +++ /dev/null @@ -1 +0,0 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtCgAwIBAgIUK7/p6h2sR01kZGq7HAb+DxbfNzswCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMTA2MTAzMDM1WhcNMjYxMTA2MTA0MDM1WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwEALXRbfXC2CBj78xavZK732h/yxfx4V0MaadYN04RWFtOQoFdFQZAZybQkrEnhyflU3UdiWVym4jAR+RXm1PqOCBe8wggXrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBwBgNVHREBAf8EZjBkhmJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMBoGCisGAQQBg78wAQIEDHdvcmtmbG93X3J1bjA2BgorBgEEAYO/MAEDBCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMCYGCisGAQQBg78wAQQEGFB1Ymxpc2ggc291cmNlLWJ1aWx0IFNESzAnBgorBgEEAYO/MAEFBBltZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcgYKKwYBBAGDvzABCQRkDGJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDQ5M2QyOWNhMmEzNDk0YzVkNTk2NzdlOGI4M2UzMDliNDRhMjhjMzEwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMDwGCisGAQQBg78wAQwELgwsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QwOAYKKwYBBAGDvzABDQQqDCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMwNzEzNzgwMDAtBgorBgEEAYO/MAEQBB8MHWh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2MBkGCisGAQQBg78wAREECwwJMzA3MzMyMTU3MHIGCisGAQQBg78wARIEZAxiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMBwGCisGAQQBg78wARQEDgwMd29ya2Zsb3dfcnVuMGAGCisGAQQBg78wARUEUgxQaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvYWN0aW9ucy9ydW5zLzQyMjAyMTU5NTMwL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwVwYKKwYBBAGDvzABGARJDEdyZXBvOm1kYmFzZS1kZXZAMzA3MzMyMTU3L21kYmFzZS1jb25uZWN0QDEzMDcxMzc4MDA6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABobBpBsoAAAQDAEYwRAIgdWTz+7MVz1UOEfDvOmtKpzHvySdjhblG6zKikebjQAACIFcEUU+6uTNfMLV4ifYt7chK5vAnD9z/NJqGaZBFnTLnMAoGCCqGSM49BAMDA2gAMGUCMCzV2dDRpFqvRJJ6rX/N200dL+kpcr0356cwJwS2z0HLeBhIv17zvaNYyHbTw0YNDAIxAJun70yQISoSUGKn09zGeXfeEmzAakpdKV0kjkhDIcq/0zbkhEP55guqFdVvJqvQ/w=="},"tlogEntries":[{"logIndex":"3715024899","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1793961035","inclusionPromise":{"signedEntryTimestamp":"MEYCIQDPERsZWWgYmQehH8Mzeg3CsVCzEaSLJ+fjtD2LJt+aowIhAJOrSkwyNqUQ3BtIylPF5ViAbDoXepn8Mjr/Y8edMO4O"},"inclusionProof":{"logIndex":"3593120637","rootHash":"b3Zjm5BosbqjnJ8NOE67Al3E0kibbTnjrevNhqarW6s=","treeSize":"3593120689","hashes":["24+9V5P0muDQ2rnG1Yjskgfmerp9vL2TT/N1H9ELoJY=","1ai8o6eZEMdxVek9kFQRLgyjD3KH4DLyrU2QR9imSiI=","NrrV9/olyZp185EsyrJDy+ZVM68SDpOdBj6RQBIahSU=","r629/oljeoF0MvhdoYckGQvjD/bV0wqcHoeDmmLs5QU=","mrtyOK5wgpu/D9Awcrm9fjdJErm4tbI4zjnNEvWiDTw=","+82iOz2w8h1eVW58DCT4t9KLELzUggn8UWXayI4wF8M=","iIX/JClJkOrxy3Z7tnn3AtIohAaEc2pgJfkN4AWrag0=","D/78tXm1oTR8r4Q3r05BwairwpGsHAiLeV3dkOIMKu8=","pLlpAn9pdCm/Txt1+DMJgOyZQ80mtsvvE8lT7aeD8cw=","JCURxeSm88bENiN1dlSnekOt1lMQcuuLGWo916EZ2ZM=","e7WI8i+bvkhhRvfhuP+xAoDucf5lbVG1pvEXlTBVsSw=","77Z5+9Me13I5WkdpjjFy8XfpbtWgiQnBkY68pcBOEhQ=","m91hXylpjWF/yCgGGabPnOAiCs5l+o9Ggfve+nQFk/k=","rzm7IKxnJSK7nAIO33qQrBO1/0S9Dn56GJSaWI6Iolg=","oL7mzlXbjtGF6livZrZPLeR0mSE6uWTI9AusOhVEeus=","W0CJJalcT5Y3vqkUlAtTGs495sT//zKJ643sj4m3oN4=","my/+Zl55N1AU/mFzahAu4GlANWBzfiwACU5JgAfgHCQ=","+/W1QXjmDCUSmr405DwH5XT+gRMljSLaFUUVp3vrXrI=","SlixnS34BhAO+yRI2FaGPSOh9V6JSVNPfLl1bHxrcQY=","1DaDKzrCNNBhmSdY5vFjz+NpAmxmYfYEgBCdPLrMP1A=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3593120689\nb3Zjm5BosbqjnJ8NOE67Al3E0kibbTnjrevNhqarW6s=\n\n— rekor.sigstore.dev wNI9ajBFAiBF5FGNkevXkIinx6bJ2LOuxW8UnnhdQPYgiVMnjB1ohQIhAMIPjcqsee7KrmnDxTOwuER9mfUs00zomfrkKSYOynnt\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZTA4MDQ2MzIxNzE2MDZkYTk5ZGZlM2UxZjExMGQ5NTUxZTRiNjg1YTk4MDA5YmFlOWUzOTkwNDZiYzRmMjMyOCJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6ImQyMzZjYTA3MDU5ZWE3MmI0YTEwYWY1OTQwMmRiZDBjZDYzZTAzYTQwMDY3Yjc5Zjk3ZmE1YjliOWNkYjBjN2EifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRQzYwMG5nY3VFTDF6cUhwdmZmNTRneUtLVVEwN0VIUHUrTzk2dUhCNVp4Y1FJZ2IyNUQ3QnFkdEJlaUtlWUUwRktiSjNSaHBxWHVzK3pldUtXbC8wVC9TWEE9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoVGFrTkRRblJEWjBGM1NVSkJaMGxWU3pjdmNEWm9Nbk5TTURGcldrZHhOMGhCWWl0RWVHSm1UbnB6ZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmVFMVVRVEpOVkVGNlRVUk5NVmRvWTA1TmFsbDRUVlJCTWsxVVFUQk5SRTB4VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVjNSVUZNV0ZKaVpsaERNa05DYWpjNGVHRjJXa3MzTXpKb0wzbDRabmcwVmpCTllXRUtaRmxPTURSU1YwWjBUMUZ2Um1SR1VWcEJXbmxpVVd0eVJXNW9lV1pzVlROVlpHbFhWbmx0TkdwQlVpdFNXRzB4VUhGUFEwSmxPSGRuWjFoeVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdaQ1owNVdTRk5OUlVkRVFWZG5RbFJtQ2pBcmJsQldhVkZTYkhadGJ6SlBhMjlXWVV4SFRHaG9hMUI2UW5kQ1owNVdTRkpGUWtGbU9FVmFha0pyYUcxS2IyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmhSMVpvV2toTmRtSlhSbkJpYWtFMVFtZHZja0puUlVWQldVOHZDazFCUlVKQ1EzUnZaRWhTZDJONmIzWk1NMUoyWVRKV2RVeHRSbXBrUjJ4MlltNU5kVm95YkRCaFNGWnBaRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFFLVFVKdlIwTnBjMGRCVVZGQ1p6YzRkMEZSU1VWRVNHUjJZMjEwYldKSE9UTllNMG94WW1wQk1rSm5iM0pDWjBWRlFWbFBMMDFCUlVSQ1EyY3dUMVJPYXdwTmFteHFXVlJLYUUxNlVUVk9SMDB4V2tSVk5VNXFZek5hVkdocFQwUk9iRTE2UVRWWmFsRXdXVlJKTkZsNlRYaE5RMWxIUTJselIwRlJVVUpuTnpoM0NrRlJVVVZIUmtJeFdXMTRjR015WjJkak1qa3hZMjFPYkV4WFNqRmhWM2d3U1VaT1JWTjZRVzVDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pzZEZwSFNtZ0tZekpWZEZwSFZqSk1NakZyV1cxR2VscFRNV3BpTWpWMVdsZE9NRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVVmxGUkROS2JGcHVUWFpoUjFab1draE5kZ3BpVjBad1ltcEJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2Q21SWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMk5uV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpyUkVkS2IyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmhSMVpvV2toTmRtSlhSbkJpYWtFMFFtZHZja0puUlVWQldVOHZDazFCUlV0Q1EyOU5TMFJSTlUweVVYbFBWMDVvVFcxRmVrNUVhekJaZWxaclRsUnJNazU2Wkd4UFIwazBUVEpWZWsxRWJHbE9SRkpvVFdwb2FrMTZSWGNLU0ZGWlMwdDNXVUpDUVVkRWRucEJRa04zVVZCRVFURnVZVmhTYjJSWFNYUmhSemw2WkVkV2EwMUVkMGREYVhOSFFWRlJRbWMzT0hkQlVYZEZUR2QzY3dwaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWpGcldXMUdlbHBUTVd0YVdGbDJZbGRTYVZsWVRteE1WMDUyWW0wMWJGa3pVWGRQUVZsTENrdDNXVUpDUVVkRWRucEJRa1JSVVhGRVEyY3dUMVJPYTAxcWJHcFpWRXBvVFhwUk5VNUhUVEZhUkZVMVRtcGpNMXBVYUdsUFJFNXNUWHBCTlZscVVUQUtXVlJKTkZsNlRYaE5RamhIUTJselIwRlJVVUpuTnpoM1FWRTBSVVZSZDFCamJWWnRZM2s1YjFwWFJtdGplVGwwV1Zkc2RVMUNiMGREYVhOSFFWRlJRZ3BuTnpoM1FWRTRSVVJCZDB0TlZFMTNUbnBGZWs1NlozZE5SRUYwUW1kdmNrSm5SVVZCV1U4dlRVRkZVVUpDT0UxSVYyZ3daRWhDZWs5cE9IWmFNbXd3Q21GSVZtbE1iVTUyWWxNNWRGcEhTbWhqTWxWMFdrZFdNazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMTZRVE5OZWsxNVRWUlZNMDFJU1VjS1EybHpSMEZSVVVKbk56aDNRVkpKUlZwQmVHbGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1qRnJXVzFHZWxwVE1XdGFXRmwyWWxkU2FRcFpXRTVzVEZkT2RtSnROV3haTTFGMlRHMWtjR1JIYURGWmFUa3pZak5LY2xwdGVIWmtNMDEyWTBoV2FXSkhiSHBoUXpGNldrZHpkR0p1UW5STWJteDBDbUpGUW5sYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQwOUJXVXRMZDFsQ1FrRkhSSFo2UVVKRmQxRnhSRU5uTUU5VVRtdE5hbXhxV1ZSS2FFMTZVVFVLVGtkTk1WcEVWVFZPYW1NeldsUm9hVTlFVG14TmVrRTFXV3BSTUZsVVNUUlplazE0VFVKM1IwTnBjMGRCVVZGQ1p6YzRkMEZTVVVWRVozZE5aREk1ZVFwaE1scHpZak5rWm1OdVZuVk5SMEZIUTJselIwRlJVVUpuTnpoM1FWSlZSVlZuZUZGaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWpGckNsbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNURmRPZG1KdE5XeFpNMUYyV1ZkT01HRlhPWFZqZVRsNVpGYzFla3g2VVhsTmFrRjVUVlJWTlU1VVRYY0tUREpHTUdSSFZuUmpTRko2VEhwRmQwWm5XVXRMZDFsQ1FrRkhSSFo2UVVKR1oxRkpSRUZhZDJSWFNuTmhWMDEzVm5kWlMwdDNXVUpDUVVkRWRucEJRZ3BIUVZKS1JFVmtlVnBZUW5aUGJURnJXVzFHZWxwVE1XdGFXRnBCVFhwQk0wMTZUWGxOVkZVelRESXhhMWx0Um5wYVV6RnFZakkxZFZwWFRqQlJSRVY2Q2sxRVkzaE5lbU0wVFVSQk5tTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBVVmxMUzNkWlFrSkJTRmRsVVVsRlFXZFNOMEpJYTBFS1pIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05aVFuQkNjMjlCUVVGUlJBcEJSVmwzVWtGSloyUlhWSG9yTjAxV2VqRlZUMFZtUkhaUGJYUkxjSHBJZG5sVFpHcG9ZbXhITm5wTGFXdGxZbXBSUVVGRFNVWmpSVlZWS3paMVZFNW1DazFNVmpScFpsbDBOMk5vU3pWMlFXNUVPWG92VGtweFIyRmFRa1p1VkV4dVRVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeVowRk5SMVZEVFVONlZqSmtSRklLY0VaeGRsSktTalp5V0M5T01qQXdaRXdyYTNCamNqQXpOVFpqZDBwM1V6SjZNRWhNWlVKb1NYWXhOM3AyWVU1WmVVaGlWSGN3V1U1RVFVbDRRVXAxYmdvM01IbFJTVk52VTFWSFMyNHdPWHBIWlZobVpVVnRla0ZoYTNCa1MxWXdhMnByYUVSSlkzRXZNSHBpYTJoRlVEVTFaM1Z4Um1SV2RrcHhkbEV2ZHowOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9XX19"}],"timestampVerificationData":{"rfc3161Timestamps":[]}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoic2RrLWxhYi50Z3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiOTI3Y2M2ODhhMjJkMDkzMTIwN2Q5MTA4YjUzOTU4ZTMyNzlmMmQyZDcxMTM0MmIwNGFjODBjMDJkODA5MWUyNiJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjEiLCJwcmVkaWNhdGUiOnsiYnVpbGREZWZpbml0aW9uIjp7ImJ1aWxkVHlwZSI6Imh0dHBzOi8vYWN0aW9ucy5naXRodWIuaW8vYnVpbGR0eXBlcy93b3JrZmxvdy92MSIsImV4dGVybmFsUGFyYW1ldGVycyI6eyJ3b3JrZmxvdyI6eyJyZWYiOiJyZWZzL2hlYWRzL21haW4iLCJyZXBvc2l0b3J5IjoiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QiLCJwYXRoIjoiLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbCJ9fSwiaW50ZXJuYWxQYXJhbWV0ZXJzIjp7ImdpdGh1YiI6eyJldmVudF9uYW1lIjoid29ya2Zsb3dfcnVuIiwicmVwb3NpdG9yeV9pZCI6IjEzMDcxMzc4MDAiLCJyZXBvc2l0b3J5X293bmVyX2lkIjoiMzA3MzMyMTU3IiwicnVubmVyX2Vudmlyb25tZW50IjoiZ2l0aHViLWhvc3RlZCJ9fSwicmVzb2x2ZWREZXBlbmRlbmNpZXMiOlt7InVyaSI6ImdpdCtodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdEByZWZzL2hlYWRzL21haW4iLCJkaWdlc3QiOnsiZ2l0Q29tbWl0IjoiNDkzZDI5Y2EyYTM0OTRjNWQ1OTY3N2U4YjgzZTMwOWI0NGEyOGMzMSJ9fV19LCJydW5EZXRhaWxzIjp7ImJ1aWxkZXIiOnsiaWQiOiJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvaGVhZHMvbWFpbiJ9LCJtZXRhZGF0YSI6eyJpbnZvY2F0aW9uSWQiOiJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC9hY3Rpb25zL3J1bnMvNDIyMDIxNTk1MzAvYXR0ZW1wdHMvMSJ9fX19","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIQC600ngcuEL1zqHpvff54gyKKUQ07EHPu+O96uHB5ZxcQIgb25D7BqdtBeiKeYE0FKbJ3RhpqXus+zeuKWl/0T/SXA=","keyid":""}]}} diff --git a/vendor/sdk-lab-beta157.json b/vendor/sdk-lab-beta188.json similarity index 63% rename from vendor/sdk-lab-beta157.json rename to vendor/sdk-lab-beta188.json index e165faf..e612ce5 100644 --- a/vendor/sdk-lab-beta157.json +++ b/vendor/sdk-lab-beta188.json @@ -1,20 +1,20 @@ { "schema": "tnapp/production-sdk-original/1", "package": "@mdbase-dev/sdk-lab", - "version": "0.1.0-beta.157", - "artifact": "sdk-lab-beta157.tgz", - "sourceCommit": "493d29ca2a3494c5d59677e8b83e309b44a28c31", + "version": "0.1.0-beta.188", + "artifact": "sdk-lab-beta188.tgz", + "sourceCommit": "e8ffb806d16c58fe03cf50c96fb66e29ebb612ba", "environment": "lab", - "bytes": 4537675, - "sha256": "927cc688a22d0931207d9108b53958e3279f2d2d711342b04ac80c02d8091e26", - "sri": "sha512-Q71Vbuk4iQFZknK0GR/2CmUpeNsf0T/XL2GMuv/PVWNxqO+dYTMw1mDpvb8pAtYAMpRyVrnQUf26Vk9HAuSjuQ==", + "bytes": 4819910, + "sha256": "ee3283c5e37eadb728a32076b4831e1e2bcca064a526f7456aab43ae003771f9", + "sri": "sha512-Tc/R1WhEBNDc2ODSWSOkmw35Fr+EhKGogdfECBgNS9R1gawItPaMiqA96D1S2/vlh01+CH2X8H0e9fG1alUXRw==", "publication": { "repository": "mdbase-dev/mdbase-connect", "workflow": ".github/workflows/publish-sdk-npm.yml", - "ref": "refs/heads/main", - "tag": "sdk-v0.1.0-beta.157", + "ref": "refs/tags/v0.1.0-beta.188", + "tag": "sdk-v0.1.0-beta.188", "asset": "sdk-lab.tgz", - "bundle": "sdk-lab-beta157.tgz.sigstore.json" + "bundle": "sdk-lab-beta188.tgz.sigstore.json" }, "trust": { "package": "@mdbase-dev/sdk-lab", @@ -26,12 +26,12 @@ "sourceVersion": "0.1.0-beta.129" }, "runtime": { - "sha256": "d375ce16a48dec718801704f56ffb6a545247a2793912c2c8e68ceb171ff2537", - "bytes": 3797530, - "maxBytes": 3797530, + "sha256": "7004351583c3a79411e644fafe9f5786816d32ea058605d1905fd50666012f40", + "bytes": 3875815, + "maxBytes": 3875815, "source": { "repository": "mdbase-dev/mdbase-connect", - "commit": "3e433313e0a234513478789686a4f4274e4dd76c" + "commit": "aae332572834fbfa065c0f696017c0de3540649d" } }, "packagedTrustModuleSha256": "a7db2cc3ba9fd1e78d86093599b608a2e3268408402630d81242450603c98a10", diff --git a/vendor/sdk-lab-beta188.tgz b/vendor/sdk-lab-beta188.tgz new file mode 100644 index 0000000..2ab895c Binary files /dev/null and b/vendor/sdk-lab-beta188.tgz differ diff --git a/vendor/sdk-lab-beta188.tgz.sigstore.json b/vendor/sdk-lab-beta188.tgz.sigstore.json new file mode 100644 index 0000000..9cb29cf --- /dev/null +++ b/vendor/sdk-lab-beta188.tgz.sigstore.json @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHkjCCBxegAwIBAgIURhO1AOKZt4PrqFd0zFOa8EdSZzQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMTEyMjIxMDM2WhcNMjYxMTEyMjIyMDM2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJAdQjlpqQvPPbypjgbHOZB8jKKx2z7qzP1WsWTwg176lGiIj9uXuaWUYaffuyekWbelmC40nK/+WZ2HdgWigw6OCBjYwggYyMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzB6BgNVHREBAf8EcDBuhmxodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAfBgorBgEEAYO/MAECBBF3b3JrZmxvd19kaXNwYXRjaDA2BgorBgEEAYO/MAEDBChlOGZmYjgwNmQxNmM1OGZlMDNjZjUwYzk2ZmI2NmUyOWViYjYxMmJhMCYGCisGAQQBg78wAQQEGFB1Ymxpc2ggc291cmNlLWJ1aWx0IFNESzAnBgorBgEEAYO/MAEFBBltZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0MCcGCisGAQQBg78wAQYEGXJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHwGCisGAQQBg78wAQkEbgxsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MDgGCisGAQQBg78wAQoEKgwoZThmZmI4MDZkMTZjNThmZTAzY2Y1MGM5NmZiNjZlMjllYmI2MTJiYTAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwPAYKKwYBBAGDvzABDAQuDCxodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdDA4BgorBgEEAYO/MAENBCoMKGU4ZmZiODA2ZDE2YzU4ZmUwM2NmNTBjOTZmYjY2ZTI5ZWJiNjEyYmEwKQYKKwYBBAGDvzABDgQbDBlyZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MBoGCisGAQQBg78wAQ8EDAwKMTMwNzEzNzgwMDAtBgorBgEEAYO/MAEQBB8MHWh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2MBkGCisGAQQBg78wAREECwwJMzA3MzMyMTU3MHwGCisGAQQBg78wARIEbgxsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MDgGCisGAQQBg78wARMEKgwoZThmZmI4MDZkMTZjNThmZTAzY2Y1MGM5NmZiNjZlMjllYmI2MTJiYTAhBgorBgEEAYO/MAEUBBMMEXdvcmtmbG93X2Rpc3BhdGNoMGAGCisGAQQBg78wARUEUgxQaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvYWN0aW9ucy9ydW5zLzQzMzE1OTg3MTgyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwYQYKKwYBBAGDvzABGARTDFFyZXBvOm1kYmFzZS1kZXZAMzA3MzMyMTU3L21kYmFzZS1jb25uZWN0QDEzMDcxMzc4MDA6cmVmOnJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaHR0BIlAAAEAwBHMEUCIQCTwT1ajyo7HruWNlhwDuO5gMRh+fnZabeRIbz/x5zysQIgGmRx5MhlrRaq3MZ38NiXRczYiWnpD0baQnzOfyR8NEswCgYIKoZIzj0EAwMDaQAwZgIxAMfni1kUqQENAaMfBCtrasDklLfdaqNUw98CZVexH80ZokVykm0vlozKNag/iFkT2QIxAMDOdnYBAUyBYTSAg+66RGIop04o+uEzcGPPI/N2Flfo+PwmIQMR9DMtB7RkHcn0nw=="},"tlogEntries":[{"logIndex":"3840223142","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1794521437","inclusionPromise":{"signedEntryTimestamp":"MEUCIBcLah/s+UP7lUaAAelpl6N+mkkiLoZ9hJPRNMFp35GnAiEAkx/W422D++haJMK9bERh5N1N4p/3hDtREIPCgIM0h+8="},"inclusionProof":{"logIndex":"3718318880","rootHash":"NDX82OGhVJQIUu1GapoMtSQsqSTmvifvYDQDstllUY4=","treeSize":"3718319598","hashes":["jA8WasY/8eagR8RsH1iiq9qs+B0DHcjjYPuoGg/Xgn4=","vFfGIknxkjcKEv5hZtIlLtgVvDCrXE2Ld0bXoVedvK4=","jPURQjEjuMX5NlG7Uf6uhSihpcvlW5gDXr9KyCuEhwY=","TBpr1G2FtskzSUyEUAOi/2BYD9359xacAw4EyPmYd2U=","khNM7ypGeGWBhs26RSClJ7wkaUJoCR2Yr0NnQowte/E=","G550ydBtt/+WwVNrXju7sLYiRoou9arZGTVCiuijlqo=","kNMJ39IWmLFXZMbyZNGnqnuib1jlh9eEA7NBJ+MsE28=","VxWs5A38lJQoW9DxAUFuEJhvHz4NeksvKdzOJ4PqEPw=","vIjM3Cs7KMxxk3gvZLB7iS1WUF0iGIbdE/NJum0KgE0=","gNSon6V8AD7us/dKHRqxkH+GsdBAPWJ7iKlFq9rXTxY=","/iXfoXMoFS51yjOpbn/Cf9Hfcc7blSp9ftHRJ+thCRM=","L8NBvUBAdpUks64aP8pOJeo6Derkjy8Eqiiyt9S7gb4=","s5N0/sDFWe+bUqu7bksHSd0G8U1mCSoIw/jvTpNk1Bw=","MCdAPHkfAn/LR3NqZlXbSpOsSneRm+qrvpuL2Pbgr78=","TwXbCXl7wRlKLPqZIOhBtokcEq/oDos0oIsn2CED27Y=","6Zb4lP4ayCR20KRzH6TKkjR8KLkBKgOkFeYZAzMxF/o=","bQpNk+RepvtefLx/ZZtfZFu2d5gzQ7CA4ZE2emImMC4=","XPex1okR3Qf1VhXr/LVSojah9cB4R1RgvK/mRrmdWLY=","SlixnS34BhAO+yRI2FaGPSOh9V6JSVNPfLl1bHxrcQY=","1DaDKzrCNNBhmSdY5vFjz+NpAmxmYfYEgBCdPLrMP1A=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3718319598\nNDX82OGhVJQIUu1GapoMtSQsqSTmvifvYDQDstllUY4=\n\n— rekor.sigstore.dev wNI9ajBFAiAXYCnNGRGXn5XVm2Dc+Fo1a+/sRmo/yChNY0eyI4sD3wIhANpj5hbip02cjckT6r03DCangLMZ+6Hs8ZBFqEqI9QJV\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNjhhYTI0ZjE3MDMxYTg0YTgyM2UyMTc4NmZhMzQ4MzRmZmE2NTFkYzhlYmIyMWQ0MjM4Nzk3MTU1NjkzNTM0MyJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjFkYzI5MzQzZGQ0YTgyNDE0MGIwMWU1ODkwN2Q0NjRjYWExOWMyNGM4ZGZlNjBiZTAxODNkOGJiMTFjYWVlNzgifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRQ0VyVDY2ZGtCaC9ndlRORjl2QTJxbnpuUEFSVFppdXliSVRtWmVJeURQZHdJZ0JTSkpFVFdCNmQ3M2FzSXlRdmp6TDR5d3F3bkhvSW1SYXJOcHF6eW0yRWM9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VocmFrTkRRbmhsWjBGM1NVSkJaMGxWVW1oUE1VRlBTMXAwTkZCeWNVWmtNSHBHVDJFNFJXUlRXbnBSZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmVFMVVSWGxOYWtsNFRVUk5NbGRvWTA1TmFsbDRUVlJGZVUxcVNYbE5SRTB5VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVktRV1JSYW14d2NWRjJVRkJpZVhCcVoySklUMXBDT0dwTFMzZ3llamR4ZWxBeFYzTUtWMVIzWnpFM05teEhhVWxxT1hWWWRXRlhWVmxoWm1aMWVXVnJWMkpsYkcxRE5EQnVTeThyVjFveVNHUm5WMmxuZHpaUFEwSnFXWGRuWjFsNVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdaQ1owNVdTRk5OUlVkRVFWZG5RbFJtQ2pBcmJsQldhVkZTYkhadGJ6SlBhMjlXWVV4SFRHaG9hMUI2UWpaQ1owNVdTRkpGUWtGbU9FVmpSRUoxYUcxNGIyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmtSMFp1WTNrNU1rMUROSGhNYWtGMFdXMVdNRmxUTkhoUFJHZDNDazlSV1V0TGQxbENRa0ZIUkhaNlFVSkJVVkZ5WVVoU01HTklUVFpNZVRrd1lqSjBiR0pwTldoWk0xSndZakkxZWt4dFpIQmtSMmd4V1c1V2VscFlTbW9LWWpJMU1GcFhOVEJNYlU1MllsUkJaa0puYjNKQ1owVkZRVmxQTDAxQlJVTkNRa1l6WWpOS2NscHRlSFprTVRscllWaE9kMWxZVW1waFJFRXlRbWR2Y2dwQ1owVkZRVmxQTDAxQlJVUkNRMmhzVDBkYWJWbHFaM2RPYlZGNFRtMU5NVTlIV214TlJFNXFXbXBWZDFsNmF6SmFiVWt5VG0xVmVVOVhWbWxaYWxsNENrMXRTbWhOUTFsSFEybHpSMEZSVVVKbk56aDNRVkZSUlVkR1FqRlpiWGh3WXpKbloyTXlPVEZqYlU1c1RGZEtNV0ZYZURCSlJrNUZVM3BCYmtKbmIzSUtRbWRGUlVGWlR5OU5RVVZHUWtKc2RGcEhTbWhqTWxWMFdrZFdNa3d5TVd0WmJVWjZXbE14YW1JeU5YVmFWMDR3VFVOalIwTnBjMGRCVVZGQ1p6YzRkd3BCVVZsRlIxaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5IaE1ha0YwV1cxV01GbFROSGhQUkdkM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2Q21SSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVaDNSME5wYzBjS1FWRlJRbWMzT0hkQlVXdEZZbWQ0YzJGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5TVd0WmJVWjZXbE14YTFwWVdYWmlWMUpwV1ZoT2JBcE1WMDUyWW0wMWJGa3pVWFpNYldSd1pFZG9NVmxwT1ROaU0wcHlXbTE0ZG1RelRYWmpTRlpwWWtkc2VtRkRNWHBhUjNOMFltNUNkRXh1YkhSaVJVSjVDbHBYV25wTU0xSm9Xak5OZG1ScVFYVk5VelIzVEZkS2JHUkhSWFZOVkdjMFRVUm5SME5wYzBkQlVWRkNaemM0ZDBGUmIwVkxaM2R2V2xSb2JWcHRTVFFLVFVSYWEwMVVXbXBPVkdodFdsUkJlbGt5V1RGTlIwMDFUbTFhYVU1cVdteE5hbXhzV1cxSk1rMVVTbWxaVkVGa1FtZHZja0puUlVWQldVOHZUVUZGVEFwQ1FUaE5SRmRrY0dSSGFERlphVEZ2WWpOT01GcFhVWGRRUVZsTFMzZFpRa0pCUjBSMmVrRkNSRUZSZFVSRGVHOWtTRkozWTNwdmRrd3laSEJrUjJneENsbHBOV3BpTWpCMllsZFNhVmxZVG14TVYxSnNaR2s1ZEZwSFNtaGpNbFYwV1RJNWRXSnRWbXBrUkVFMFFtZHZja0puUlVWQldVOHZUVUZGVGtKRGIwMEtTMGRWTkZwdFdtbFBSRUV5V2tSRk1sbDZWVFJhYlZWM1RUSk9iVTVVUW1wUFZGcHRXV3BaTWxwVVNUVmFWMHBwVG1wRmVWbHRSWGRMVVZsTFMzZFpRZ3BDUVVkRWRucEJRa1JuVVdKRVFteDVXbGRhZWt3elVtaGFNMDEyWkdwQmRVMVROSGRNVjBwc1pFZEZkVTFVWnpSTlFtOUhRMmx6UjBGUlVVSm5OemgzQ2tGUk9FVkVRWGRMVFZSTmQwNTZSWHBPZW1kM1RVUkJkRUpuYjNKQ1owVkZRVmxQTDAxQlJWRkNRamhOU0Zkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1rS1RHMU9kbUpUT1hSYVIwcG9ZekpWZEZwSFZqSk5RbXRIUTJselIwRlJVVUpuTnpoM1FWSkZSVU4zZDBwTmVrRXpUWHBOZVUxVVZUTk5TSGRIUTJselJ3cEJVVkZDWnpjNGQwRlNTVVZpWjNoellVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERJeGExbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNDa3hYVG5aaWJUVnNXVE5SZGt4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU5JVm1saVIyeDZZVU14ZWxwSGMzUmlia0owVEc1c2RHSkZRbmtLV2xkYWVrd3pVbWhhTTAxMlpHcEJkVTFUTkhkTVYwcHNaRWRGZFUxVVp6Uk5SR2RIUTJselIwRlJVVUpuTnpoM1FWSk5SVXRuZDI5YVZHaHRXbTFKTkFwTlJGcHJUVlJhYWs1VWFHMWFWRUY2V1RKWk1VMUhUVFZPYlZwcFRtcGFiRTFxYkd4WmJVa3lUVlJLYVZsVVFXaENaMjl5UW1kRlJVRlpUeTlOUVVWVkNrSkNUVTFGV0dSMlkyMTBiV0pIT1ROWU1sSndZek5DYUdSSFRtOU5SMEZIUTJselIwRlJVVUpuTnpoM1FWSlZSVlZuZUZGaFNGSXdZMGhOTmt4NU9XNEtZVmhTYjJSWFNYVlpNamwwVERJeGExbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNURmRPZG1KdE5XeFpNMUYyV1ZkT01HRlhPWFZqZVRsNVpGYzFlZ3BNZWxGNlRYcEZNVTlVWnpOTlZHZDVUREpHTUdSSFZuUmpTRko2VEhwRmQwWm5XVXRMZDFsQ1FrRkhSSFo2UVVKR1oxRkpSRUZhZDJSWFNuTmhWMDEzQ2xsUldVdExkMWxDUWtGSFJIWjZRVUpIUVZKVVJFWkdlVnBZUW5aUGJURnJXVzFHZWxwVE1XdGFXRnBCVFhwQk0wMTZUWGxOVkZVelRESXhhMWx0Um5vS1dsTXhhbUl5TlhWYVYwNHdVVVJGZWsxRVkzaE5lbU0wVFVSQk5tTnRWbTFQYmtwc1dtNU5kbVJIUm01amVUa3lUVU0wZUV4cVFYUlpiVll3V1ZNMGVBcFBSR2QzWjFsdlIwTnBjMGRCVVZGQ01XNXJRMEpCU1VWbVFWSTJRVWhuUVdSblJHUlFWRUp4ZUhOalVrMXRUVnBJYUhsYVducGpRMjlyY0dWMVRqUTRDbkptSzBocGJrdEJUSGx1ZFdwblFVRkJZVWhTTUVKSmJFRkJRVVZCZDBKSVRVVlZRMGxSUTFSM1ZERmhhbmx2TjBoeWRWZE9iR2gzUkhWUE5XZE5VbWdLSzJadVdtRmlaVkpKWW5vdmVEVjZlWE5SU1dkSGJWSjROVTFvYkhKU1lYRXpUVm96T0U1cFdGSmplbGxwVjI1d1JEQmlZVkZ1ZWs5bWVWSTRUa1Z6ZHdwRFoxbEpTMjlhU1hwcU1FVkJkMDFFWVZGQmQxcG5TWGhCVFdadWFURnJWWEZSUlU1QllVMW1Ra04wY21GelJHdHNUR1prWVhGT1ZYYzVPRU5hVm1WNENrZzRNRnB2YTFaNWEyMHdkbXh2ZWt0T1lXY3ZhVVpyVkRKUlNYaEJUVVJQWkc1WlFrRlZlVUpaVkZOQlp5czJObEpIU1c5d01EUnZLM1ZGZW1OSFVGQUtTUzlPTWtac1ptOHJVSGR0U1ZGTlVqbEVUWFJDTjFKclNHTnVNRzUzUFQwS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9XX19"}],"timestampVerificationData":{"rfc3161Timestamps":[]}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoic2RrLWxhYi50Z3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiZWUzMjgzYzVlMzdlYWRiNzI4YTMyMDc2YjQ4MzFlMWUyYmNjYTA2NGE1MjZmNzQ1NmFhYjQzYWUwMDM3NzFmOSJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjEiLCJwcmVkaWNhdGUiOnsiYnVpbGREZWZpbml0aW9uIjp7ImJ1aWxkVHlwZSI6Imh0dHBzOi8vYWN0aW9ucy5naXRodWIuaW8vYnVpbGR0eXBlcy93b3JrZmxvdy92MSIsImV4dGVybmFsUGFyYW1ldGVycyI6eyJ3b3JrZmxvdyI6eyJyZWYiOiJyZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4IiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0IiwicGF0aCI6Ii5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gtc2RrLW5wbS55bWwifX0sImludGVybmFsUGFyYW1ldGVycyI6eyJnaXRodWIiOnsiZXZlbnRfbmFtZSI6IndvcmtmbG93X2Rpc3BhdGNoIiwicmVwb3NpdG9yeV9pZCI6IjEzMDcxMzc4MDAiLCJyZXBvc2l0b3J5X293bmVyX2lkIjoiMzA3MzMyMTU3IiwicnVubmVyX2Vudmlyb25tZW50IjoiZ2l0aHViLWhvc3RlZCJ9fSwicmVzb2x2ZWREZXBlbmRlbmNpZXMiOlt7InVyaSI6ImdpdCtodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4IiwiZGlnZXN0Ijp7ImdpdENvbW1pdCI6ImU4ZmZiODA2ZDE2YzU4ZmUwM2NmNTBjOTZmYjY2ZTI5ZWJiNjEyYmEifX1dfSwicnVuRGV0YWlscyI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4In0sIm1ldGFkYXRhIjp7Imludm9jYXRpb25JZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0L2FjdGlvbnMvcnVucy80MzMxNTk4NzE4Mi9hdHRlbXB0cy8xIn19fX0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIQCErT66dkBh/gvTNF9vA2qnznPARTZiuybITmZeIyDPdwIgBSJJETWB6d73asIyQvjzL4ywqwnHoImRarNpqzym2Ec=","keyid":""}]}} diff --git a/vendor/sdk-production-beta188.json b/vendor/sdk-production-beta188.json new file mode 100644 index 0000000..de880f1 --- /dev/null +++ b/vendor/sdk-production-beta188.json @@ -0,0 +1,47 @@ +{ + "schema": "tnapp/production-sdk-original/1", + "artifact": "sdk-e8ffb806-production-beta188.tgz", + "version": "0.1.0-beta.188", + "sourceCommit": "e8ffb806d16c58fe03cf50c96fb66e29ebb612ba", + "environment": "production", + "bytes": 4819840, + "sha256": "9ac39582b5440272f7e95177ac4f4840aebd4c8ddf832b24545232abe99c6b27", + "sri": "sha512-EDaInyP8q2Lz0Akz8P+CNj5O6OvinMJWR1bE04fKtWRFDt9mVRBRBYRja5okOtb3gtnKYyMdQFGLlFln7F1RrA==", + "publication": { + "repository": "mdbase-dev/mdbase-connect", + "workflow": ".github/workflows/publish-sdk-npm.yml", + "ref": "refs/tags/v0.1.0-beta.188", + "npm": "@mdbase-dev/sdk@0.1.0-beta.188", + "integrity": "sha512-EDaInyP8q2Lz0Akz8P+CNj5O6OvinMJWR1bE04fKtWRFDt9mVRBRBYRja5okOtb3gtnKYyMdQFGLlFln7F1RrA==", + "tarball": "https://registry.npmjs.org/@mdbase-dev/sdk/-/sdk-0.1.0-beta.188.tgz", + "attestations": "https://registry.npmjs.org/-/npm/v1/attestations/@mdbase-dev%2fsdk@0.1.0-beta.188" + }, + "trust": { + "package": "@mdbase-dev/sdk", + "sha256": "7912e40838213e60b65848350d319a48019021317b112e3326429b250f0133d7", + "bytes": 840, + "cpOrigin": "https://connect.mdbase.dev", + "logOrigin": "https://log.mdbase.dev", + "sourceCommit": "36abd4b065be9495a7f5ae0808865a1f2279af04", + "sourceVersion": "0.1.0-beta.141" + }, + "runtime": { + "sha256": "7004351583c3a79411e644fafe9f5786816d32ea058605d1905fd50666012f40", + "bytes": 3875815, + "maxBytes": 3875815, + "source": { + "repository": "mdbase-dev/mdbase-connect", + "commit": "aae332572834fbfa065c0f696017c0de3540649d" + } + }, + "packagedTrustModuleSha256": "cf9690968d68b3c1eed2356ccfa2c72198b2f8cf07b9b24b1bb7be499b05bffb", + "bundledDependencies": [ + { + "name": "@mdbase-dev/connect-protocol", + "member": "package/vendor/mdbase-dev-connect-protocol-0.1.0-beta.145-e6e66bcd172f.tgz", + "bytes": 106404, + "sha256": "e901144b8d93dc96fcf71d9d8f85dddbf647e9908913be21191c484e9224bb98" + } + ], + "package": "@mdbase-dev/sdk" +} diff --git a/vendor/sdk-staging-beta157.tgz b/vendor/sdk-staging-beta157.tgz deleted file mode 100644 index 90a4c6d..0000000 Binary files a/vendor/sdk-staging-beta157.tgz and /dev/null differ diff --git a/vendor/sdk-staging-beta157.tgz.sigstore.json b/vendor/sdk-staging-beta157.tgz.sigstore.json deleted file mode 100644 index be64135..0000000 --- a/vendor/sdk-staging-beta157.tgz.sigstore.json +++ /dev/null @@ -1 +0,0 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHTDCCBtGgAwIBAgIUb05AZueNz3r4hdZuL6R3be3Q0SMwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMTA2MTAzMDMyWhcNMjYxMTA2MTA0MDMyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIOwudliapkEMh7Yb/cO0wnh7J0SpsqQn935otBMotDPCVt0Vwg1ebG84iz88mSqiql35zmKKpbc7hpwq5nXgl6OCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBwBgNVHREBAf8EZjBkhmJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMBoGCisGAQQBg78wAQIEDHdvcmtmbG93X3J1bjA2BgorBgEEAYO/MAEDBCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMCYGCisGAQQBg78wAQQEGFB1Ymxpc2ggc291cmNlLWJ1aWx0IFNESzAnBgorBgEEAYO/MAEFBBltZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcgYKKwYBBAGDvzABCQRkDGJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDQ5M2QyOWNhMmEzNDk0YzVkNTk2NzdlOGI4M2UzMDliNDRhMjhjMzEwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMDwGCisGAQQBg78wAQwELgwsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QwOAYKKwYBBAGDvzABDQQqDCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMwNzEzNzgwMDAtBgorBgEEAYO/MAEQBB8MHWh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2MBkGCisGAQQBg78wAREECwwJMzA3MzMyMTU3MHIGCisGAQQBg78wARIEZAxiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg0OTNkMjljYTJhMzQ5NGM1ZDU5Njc3ZThiODNlMzA5YjQ0YTI4YzMxMBwGCisGAQQBg78wARQEDgwMd29ya2Zsb3dfcnVuMGAGCisGAQQBg78wARUEUgxQaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvYWN0aW9ucy9ydW5zLzQyMjAyMTU5NTMwL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwVwYKKwYBBAGDvzABGARJDEdyZXBvOm1kYmFzZS1kZXZAMzA3MzMyMTU3L21kYmFzZS1jb25uZWN0QDEzMDcxMzc4MDA6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABobBo/S4AAAQDAEcwRQIgSgOJ/UkCRbXtwlX4fZqVyWl/37IZK93OLW8doXT0l3sCIQDSeQbtqsk9bK9kFIT2oOkQ/vsU/n5DyG9oChO4mhJs3zAKBggqhkjOPQQDAwNpADBmAjEA/UsnxYJC6Ljam5pwNw3RKSPxFlxOI8HUDj9IGSBMNocP/1uIz8lQcQL/3hk03gfqAjEAoI1D6EQyFz6gPEcoeH4EsCtRWMwKi8JRkrf56y5hAywdMwFkXalqUF/0+edxwiIV"},"tlogEntries":[{"logIndex":"3715024029","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1793961033","inclusionPromise":{"signedEntryTimestamp":"MEYCIQD0AyTZImDKu1SjZ9gnAiOz8W66RWT3aLtd7RBLE1+i6wIhAMFyfj0e0mKMgXJoCSCUhRGyN4uajUZ/fCFIerBQwCjp"},"inclusionProof":{"logIndex":"3593119767","rootHash":"w/H7PCSArnQT90jUHWL7GFH6Kp8blMi/h9OZTr5DgUo=","treeSize":"3593119848","hashes":["Ge//UMeg1kEApZNekN18D302eb1V+BHjokSCqecTNnY=","/I46kMWX0V68hpUSnOFTu4loKqRRan41tnKv+9oqWe4=","Kf7thE/V8fUCB2Vfdn3QE98F1HWDBhb70aa/97N8psc=","7wNr50CQQ6jo7joZTsbq5Rd+RACjxP3AY5DsurNTXqQ=","y/6BLxe+piDrBAREK+0JlLlTJgMmx7FTxzMnTwDN7cI=","kVfjAnAK4OAYcCae2mJJavW/g1ycJ03jcLFXRrS2hPA=","yayxwhP1gjOhWt+ZHCEqA8169VWwqele0jFy5xFdheY=","e7WI8i+bvkhhRvfhuP+xAoDucf5lbVG1pvEXlTBVsSw=","77Z5+9Me13I5WkdpjjFy8XfpbtWgiQnBkY68pcBOEhQ=","m91hXylpjWF/yCgGGabPnOAiCs5l+o9Ggfve+nQFk/k=","rzm7IKxnJSK7nAIO33qQrBO1/0S9Dn56GJSaWI6Iolg=","oL7mzlXbjtGF6livZrZPLeR0mSE6uWTI9AusOhVEeus=","W0CJJalcT5Y3vqkUlAtTGs495sT//zKJ643sj4m3oN4=","my/+Zl55N1AU/mFzahAu4GlANWBzfiwACU5JgAfgHCQ=","+/W1QXjmDCUSmr405DwH5XT+gRMljSLaFUUVp3vrXrI=","SlixnS34BhAO+yRI2FaGPSOh9V6JSVNPfLl1bHxrcQY=","1DaDKzrCNNBhmSdY5vFjz+NpAmxmYfYEgBCdPLrMP1A=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3593119848\nw/H7PCSArnQT90jUHWL7GFH6Kp8blMi/h9OZTr5DgUo=\n\n— rekor.sigstore.dev wNI9ajBFAiA+uNApfOcM9PGS4oIdumlQ7hRvJdG6hdaviq0Yv/P6NQIhAMJMNnjuAIIsBZQ6h0yJz3jfDqkPUEUIW5mYYouizp5q\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNDBmZTU0ZGUzYzI5YWU2OGRlMWJiZmQxNzFhMTc0NzliZDFhZmQ4MWU5YmE4YzQxNDEyMmFmNDgxMmQxMGNkNSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjBlOTFhMWE5MTc3NzU3NzdkOWZkODFjYjY5NGJiNmM4MmM3NWZlYjg4NDY4YWE5NjkxM2JmMWJjZmFlY2ZhMTEifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRQ01IL0ZUMk5VREk1czFzODdUREVBVWozd2tidVIwUTFXWXVjUjJUUDIzZGdJZ1A0amRMYWU1WVV4OTVXYnpVUGtmWmJFR0VKdlAwU2dyWlgvWkhnN1NBd2s9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoVVJFTkRRblJIWjBGM1NVSkJaMGxWWWpBMVFWcDFaVTU2TTNJMGFHUmFkVXcyVWpOaVpUTlJNRk5OZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmVFMVVRVEpOVkVGNlRVUk5lVmRvWTA1TmFsbDRUVlJCTWsxVVFUQk5SRTE1VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVkpUM2QxWkd4cFlYQnJSVTFvTjFsaUwyTlBNSGR1YURkS01GTndjM0ZSYmprek5XOEtkRUpOYjNSRVVFTldkREJXZDJjeFpXSkhPRFJwZWpnNGJWTnhhWEZzTXpWNmJVdExjR0pqTjJod2QzRTFibGhuYkRaUFEwSm1RWGRuWjFoelRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdaQ1owNVdTRk5OUlVkRVFWZG5RbFJtQ2pBcmJsQldhVkZTYkhadGJ6SlBhMjlXWVV4SFRHaG9hMUI2UW5kQ1owNVdTRkpGUWtGbU9FVmFha0pyYUcxS2IyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmhSMVpvV2toTmRtSlhSbkJpYWtFMVFtZHZja0puUlVWQldVOHZDazFCUlVKQ1EzUnZaRWhTZDJONmIzWk1NMUoyWVRKV2RVeHRSbXBrUjJ4MlltNU5kVm95YkRCaFNGWnBaRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFFLVFVKdlIwTnBjMGRCVVZGQ1p6YzRkMEZSU1VWRVNHUjJZMjEwYldKSE9UTllNMG94WW1wQk1rSm5iM0pDWjBWRlFWbFBMMDFCUlVSQ1EyY3dUMVJPYXdwTmFteHFXVlJLYUUxNlVUVk9SMDB4V2tSVk5VNXFZek5hVkdocFQwUk9iRTE2UVRWWmFsRXdXVlJKTkZsNlRYaE5RMWxIUTJselIwRlJVVUpuTnpoM0NrRlJVVVZIUmtJeFdXMTRjR015WjJkak1qa3hZMjFPYkV4WFNqRmhWM2d3U1VaT1JWTjZRVzVDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pzZEZwSFNtZ0tZekpWZEZwSFZqSk1NakZyV1cxR2VscFRNV3BpTWpWMVdsZE9NRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVVmxGUkROS2JGcHVUWFpoUjFab1draE5kZ3BpVjBad1ltcEJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2Q21SWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMk5uV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpyUkVkS2IyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmhSMVpvV2toTmRtSlhSbkJpYWtFMFFtZHZja0puUlVWQldVOHZDazFCUlV0Q1EyOU5TMFJSTlUweVVYbFBWMDVvVFcxRmVrNUVhekJaZWxaclRsUnJNazU2Wkd4UFIwazBUVEpWZWsxRWJHbE9SRkpvVFdwb2FrMTZSWGNLU0ZGWlMwdDNXVUpDUVVkRWRucEJRa04zVVZCRVFURnVZVmhTYjJSWFNYUmhSemw2WkVkV2EwMUVkMGREYVhOSFFWRlJRbWMzT0hkQlVYZEZUR2QzY3dwaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWpGcldXMUdlbHBUTVd0YVdGbDJZbGRTYVZsWVRteE1WMDUyWW0wMWJGa3pVWGRQUVZsTENrdDNXVUpDUVVkRWRucEJRa1JSVVhGRVEyY3dUMVJPYTAxcWJHcFpWRXBvVFhwUk5VNUhUVEZhUkZVMVRtcGpNMXBVYUdsUFJFNXNUWHBCTlZscVVUQUtXVlJKTkZsNlRYaE5RamhIUTJselIwRlJVVUpuTnpoM1FWRTBSVVZSZDFCamJWWnRZM2s1YjFwWFJtdGplVGwwV1Zkc2RVMUNiMGREYVhOSFFWRlJRZ3BuTnpoM1FWRTRSVVJCZDB0TlZFMTNUbnBGZWs1NlozZE5SRUYwUW1kdmNrSm5SVVZCV1U4dlRVRkZVVUpDT0UxSVYyZ3daRWhDZWs5cE9IWmFNbXd3Q21GSVZtbE1iVTUyWWxNNWRGcEhTbWhqTWxWMFdrZFdNazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMTZRVE5OZWsxNVRWUlZNMDFJU1VjS1EybHpSMEZSVVVKbk56aDNRVkpKUlZwQmVHbGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1qRnJXVzFHZWxwVE1XdGFXRmwyWWxkU2FRcFpXRTVzVEZkT2RtSnROV3haTTFGMlRHMWtjR1JIYURGWmFUa3pZak5LY2xwdGVIWmtNMDEyWTBoV2FXSkhiSHBoUXpGNldrZHpkR0p1UW5STWJteDBDbUpGUW5sYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQwOUJXVXRMZDFsQ1FrRkhSSFo2UVVKRmQxRnhSRU5uTUU5VVRtdE5hbXhxV1ZSS2FFMTZVVFVLVGtkTk1WcEVWVFZPYW1NeldsUm9hVTlFVG14TmVrRTFXV3BSTUZsVVNUUlplazE0VFVKM1IwTnBjMGRCVVZGQ1p6YzRkMEZTVVVWRVozZE5aREk1ZVFwaE1scHpZak5rWm1OdVZuVk5SMEZIUTJselIwRlJVVUpuTnpoM1FWSlZSVlZuZUZGaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWpGckNsbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNURmRPZG1KdE5XeFpNMUYyV1ZkT01HRlhPWFZqZVRsNVpGYzFla3g2VVhsTmFrRjVUVlJWTlU1VVRYY0tUREpHTUdSSFZuUmpTRko2VEhwRmQwWm5XVXRMZDFsQ1FrRkhSSFo2UVVKR1oxRkpSRUZhZDJSWFNuTmhWMDEzVm5kWlMwdDNXVUpDUVVkRWRucEJRZ3BIUVZKS1JFVmtlVnBZUW5aUGJURnJXVzFHZWxwVE1XdGFXRnBCVFhwQk0wMTZUWGxOVkZVelRESXhhMWx0Um5wYVV6RnFZakkxZFZwWFRqQlJSRVY2Q2sxRVkzaE5lbU0wVFVSQk5tTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBaMWxMUzNkWlFrSkJTRmRsVVVsRlFXZFNPRUpJYjBFS1pVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05aVFtOHZVelJCUVVGUlJBcEJSV04zVWxGSloxTm5UMG92Vld0RFVtSllkSGRzV0RSbVduRldlVmRzTHpNM1NWcExPVE5QVEZjNFpHOVlWREJzTTNORFNWRkVVMlZSWW5SeGMyczVDbUpMT1d0R1NWUXliMDlyVVM5MmMxVXZialZFZVVjNWIwTm9UelJ0YUVwek0zcEJTMEpuWjNGb2EycFBVRkZSUkVGM1RuQkJSRUp0UVdwRlFTOVZjMjRLZUZsS1F6Wk1hbUZ0TlhCM1RuY3pVa3RUVUhoR2JIaFBTVGhJVlVScU9VbEhVMEpOVG05alVDOHhkVWw2T0d4UlkxRk1Mek5vYXpBeloyWnhRV3BGUVFwdlNURkVOa1ZSZVVaNk5tZFFSV052WlVnMFJYTkRkRkpYVFhkTGFUaEtVbXR5WmpVMmVUVm9RWGwzWkUxM1JtdFlZV3h4VlVZdk1DdGxaSGgzYVVsV0NpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9XX19"}],"timestampVerificationData":{"rfc3161Timestamps":[]}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoic2RrLXN0YWdpbmcudGd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjNlZmI3ODg4ZWY1OWI2NDQ5ZWNmZjdjNzE3YjEyM2RmYWY5NGIzYWU2MjU3YmNhZTRmMWU3MTEzYTgyYTBkNGMifX1dLCJwcmVkaWNhdGVUeXBlIjoiaHR0cHM6Ly9zbHNhLmRldi9wcm92ZW5hbmNlL3YxIiwicHJlZGljYXRlIjp7ImJ1aWxkRGVmaW5pdGlvbiI6eyJidWlsZFR5cGUiOiJodHRwczovL2FjdGlvbnMuZ2l0aHViLmlvL2J1aWxkdHlwZXMvd29ya2Zsb3cvdjEiLCJleHRlcm5hbFBhcmFtZXRlcnMiOnsid29ya2Zsb3ciOnsicmVmIjoicmVmcy9oZWFkcy9tYWluIiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0IiwicGF0aCI6Ii5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gtc2RrLW5wbS55bWwifX0sImludGVybmFsUGFyYW1ldGVycyI6eyJnaXRodWIiOnsiZXZlbnRfbmFtZSI6IndvcmtmbG93X3J1biIsInJlcG9zaXRvcnlfaWQiOiIxMzA3MTM3ODAwIiwicmVwb3NpdG9yeV9vd25lcl9pZCI6IjMwNzMzMjE1NyIsInJ1bm5lcl9lbnZpcm9ubWVudCI6ImdpdGh1Yi1ob3N0ZWQifX0sInJlc29sdmVkRGVwZW5kZW5jaWVzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3RAcmVmcy9oZWFkcy9tYWluIiwiZGlnZXN0Ijp7ImdpdENvbW1pdCI6IjQ5M2QyOWNhMmEzNDk0YzVkNTk2NzdlOGI4M2UzMDliNDRhMjhjMzEifX1dfSwicnVuRGV0YWlscyI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL2hlYWRzL21haW4ifSwibWV0YWRhdGEiOnsiaW52b2NhdGlvbklkIjoiaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvYWN0aW9ucy9ydW5zLzQyMjAyMTU5NTMwL2F0dGVtcHRzLzEifX19fQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIQCMH/FT2NUDI5s1s87TDEAUj3wkbuR0Q1WYucR2TP23dgIgP4jdLae5YUx95WbzUPkfZbEGEJvP0SgrZX/ZHg7SAwk=","keyid":""}]}} diff --git a/vendor/sdk-staging-beta157.json b/vendor/sdk-staging-beta188.json similarity index 63% rename from vendor/sdk-staging-beta157.json rename to vendor/sdk-staging-beta188.json index 706be9d..5eaeb82 100644 --- a/vendor/sdk-staging-beta157.json +++ b/vendor/sdk-staging-beta188.json @@ -1,20 +1,20 @@ { "schema": "tnapp/production-sdk-original/1", "package": "@mdbase-dev/sdk-staging", - "version": "0.1.0-beta.157", - "artifact": "sdk-staging-beta157.tgz", - "sourceCommit": "493d29ca2a3494c5d59677e8b83e309b44a28c31", + "version": "0.1.0-beta.188", + "artifact": "sdk-staging-beta188.tgz", + "sourceCommit": "e8ffb806d16c58fe03cf50c96fb66e29ebb612ba", "environment": "staging", - "bytes": 4537508, - "sha256": "3efb7888ef59b6449ecff7c717b123dfaf94b3ae6257bcae4f1e7113a82a0d4c", - "sri": "sha512-ia47TMEcUfFWIahKWpkqhsuAMRoyZ0so6gJ5IZkJ9N4zz+zV6tL1GDu1SqtosCEj0Cql5qUH+dinqk9WBrYJfQ==", + "bytes": 4819824, + "sha256": "08d9b8d871aea9fd688cff2b395f07db63d0e411c8766b947d0907dc42e3cdc6", + "sri": "sha512-tlfCGDfKueciOkqEAtz4MTrIuG3PXWJPw6PitidrSWU+P4HZdvJUTSUOpc2ZO+rllivnTV2r7wU0P5ohSIv5Sg==", "publication": { "repository": "mdbase-dev/mdbase-connect", "workflow": ".github/workflows/publish-sdk-npm.yml", - "ref": "refs/heads/main", - "tag": "sdk-v0.1.0-beta.157", + "ref": "refs/tags/v0.1.0-beta.188", + "tag": "sdk-v0.1.0-beta.188", "asset": "sdk-staging.tgz", - "bundle": "sdk-staging-beta157.tgz.sigstore.json" + "bundle": "sdk-staging-beta188.tgz.sigstore.json" }, "trust": { "package": "@mdbase-dev/sdk-staging", @@ -26,12 +26,12 @@ "sourceVersion": "0.1.0-beta.141" }, "runtime": { - "sha256": "d375ce16a48dec718801704f56ffb6a545247a2793912c2c8e68ceb171ff2537", - "bytes": 3797530, - "maxBytes": 3797530, + "sha256": "7004351583c3a79411e644fafe9f5786816d32ea058605d1905fd50666012f40", + "bytes": 3875815, + "maxBytes": 3875815, "source": { "repository": "mdbase-dev/mdbase-connect", - "commit": "3e433313e0a234513478789686a4f4274e4dd76c" + "commit": "aae332572834fbfa065c0f696017c0de3540649d" } }, "packagedTrustModuleSha256": "8821ff673b3d27171e893c5c6108c4fc839d60e7d64fb3a50c395893f4c3f2df", diff --git a/vendor/sdk-staging-beta188.tgz b/vendor/sdk-staging-beta188.tgz new file mode 100644 index 0000000..0b8e360 Binary files /dev/null and b/vendor/sdk-staging-beta188.tgz differ diff --git a/vendor/sdk-staging-beta188.tgz.sigstore.json b/vendor/sdk-staging-beta188.tgz.sigstore.json new file mode 100644 index 0000000..bff4db5 --- /dev/null +++ b/vendor/sdk-staging-beta188.tgz.sigstore.json @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHkDCCBxagAwIBAgIUWp1OJkX7AJsvg2QLwTeGF6FtE1cwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMTEyMjIxMDMxWhcNMjYxMTEyMjIyMDMxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg+HCg3H2lCYsR5ujLds9ONhweVqfYCteyZsl384Gle/ErrUskbm+gEytTWi+hLyRG51TlYkzgx9RDm2E4lNSlaOCBjUwggYxMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzB6BgNVHREBAf8EcDBuhmxodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC8uZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sQHJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAfBgorBgEEAYO/MAECBBF3b3JrZmxvd19kaXNwYXRjaDA2BgorBgEEAYO/MAEDBChlOGZmYjgwNmQxNmM1OGZlMDNjZjUwYzk2ZmI2NmUyOWViYjYxMmJhMCYGCisGAQQBg78wAQQEGFB1Ymxpc2ggc291cmNlLWJ1aWx0IFNESzAnBgorBgEEAYO/MAEFBBltZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0MCcGCisGAQQBg78wAQYEGXJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHwGCisGAQQBg78wAQkEbgxsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MDgGCisGAQQBg78wAQoEKgwoZThmZmI4MDZkMTZjNThmZTAzY2Y1MGM5NmZiNjZlMjllYmI2MTJiYTAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwPAYKKwYBBAGDvzABDAQuDCxodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdDA4BgorBgEEAYO/MAENBCoMKGU4ZmZiODA2ZDE2YzU4ZmUwM2NmNTBjOTZmYjY2ZTI5ZWJiNjEyYmEwKQYKKwYBBAGDvzABDgQbDBlyZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MBoGCisGAQQBg78wAQ8EDAwKMTMwNzEzNzgwMDAtBgorBgEEAYO/MAEQBB8MHWh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2MBkGCisGAQQBg78wAREECwwJMzA3MzMyMTU3MHwGCisGAQQBg78wARIEbgxsaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1zZGstbnBtLnltbEByZWZzL3RhZ3MvdjAuMS4wLWJldGEuMTg4MDgGCisGAQQBg78wARMEKgwoZThmZmI4MDZkMTZjNThmZTAzY2Y1MGM5NmZiNjZlMjllYmI2MTJiYTAhBgorBgEEAYO/MAEUBBMMEXdvcmtmbG93X2Rpc3BhdGNoMGAGCisGAQQBg78wARUEUgxQaHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3QvYWN0aW9ucy9ydW5zLzQzMzE1OTg3MTgyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwYQYKKwYBBAGDvzABGARTDFFyZXBvOm1kYmFzZS1kZXZAMzA3MzMyMTU3L21kYmFzZS1jb25uZWN0QDEzMDcxMzc4MDA6cmVmOnJlZnMvdGFncy92MC4xLjAtYmV0YS4xODgwgYkGCisGAQQB1nkCBAIEewR5AHcAdQDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaHRz/9MAAAEAwBGMEQCIDT0JUDImo8LaSyf5jclD4ksImOuUnaQsJUqZxljf8RLAiBd1CIjQzfM3a/ML/aIGJTfXCwnxDm0BM+w48zBWKAx2DAKBggqhkjOPQQDAwNoADBlAjEA7NNKvgzj5vfXt1gzIOq9obY3xJU9QofZYWzykm5AM6ywG0U236GoZk9Lxdl6zjjYAjAjnNOIWyMGMSyzZ/YDhFarMRk4c2qdRAHUv9iqHpPzwiEDVEjHYXoOky/ZAGLYqLA="},"tlogEntries":[{"logIndex":"3840221650","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1794521432","inclusionPromise":{"signedEntryTimestamp":"MEQCIApiCR8sIv9yqJ6bMcXQhKKVEwtIvG0/j+QUEQZwZBwcAiAs0rThkKdfaTYFdvTSbznGw5Aqd570zPmLFUJrMK8HDw=="},"inclusionProof":{"logIndex":"3718317388","rootHash":"3pRkMuXS6Lym18pX4S8lmucu1WYskZ9vgP1ARSah8Hg=","treeSize":"3718317614","hashes":["c8vtN+AZgv5HjZ8kkd11GxZs2d9fSov4bjIHHLiL8YU=","3bF9MBnt0iT9aU94BxmdB8x02d7OgZU1H2gQV6In5SE=","tt3kv3p+kUZyCY/rj48IqE063MSL3KE/1gFZVs36j/E=","3KTH5ES6B4/suSyLQsNRYAmNa7ekZ9R2wUDIjwmauxM=","kwawS+IYpmlcnuiRGLlcQkrFwqhL6+SgwjwAmArY130=","IZqhJR22yz6JU1jftxGOnT+5kSVkf7HmSbTsOrGy6wY=","hYKHxMM77cdJz1LXmkH1TrR2JvtN0xU3saOmn1FvriM=","ksck2cE++eBwMyTvbJGKxQISTZBqkwtSZOVHCvdqZ/4=","y0gyy29hruiRxuW1vZtMV+ZeQLki50PNDOVLdZD+KPs=","hQyNCUg+sZivAAt/90SJkpEKlJ2PE6nT0qvqUpOjmaA=","XpVsnDn4Fs/bFjALHuN+XK3npAIidJevu5Xz1PBZfKQ=","s5N0/sDFWe+bUqu7bksHSd0G8U1mCSoIw/jvTpNk1Bw=","MCdAPHkfAn/LR3NqZlXbSpOsSneRm+qrvpuL2Pbgr78=","TwXbCXl7wRlKLPqZIOhBtokcEq/oDos0oIsn2CED27Y=","6Zb4lP4ayCR20KRzH6TKkjR8KLkBKgOkFeYZAzMxF/o=","bQpNk+RepvtefLx/ZZtfZFu2d5gzQ7CA4ZE2emImMC4=","XPex1okR3Qf1VhXr/LVSojah9cB4R1RgvK/mRrmdWLY=","SlixnS34BhAO+yRI2FaGPSOh9V6JSVNPfLl1bHxrcQY=","1DaDKzrCNNBhmSdY5vFjz+NpAmxmYfYEgBCdPLrMP1A=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3718317614\n3pRkMuXS6Lym18pX4S8lmucu1WYskZ9vgP1ARSah8Hg=\n\n— rekor.sigstore.dev wNI9ajBEAiBTkPUbTpJ4Ians0b0RsYsi9zDZ5chYSeZUt/IZu4BCCQIgIP8adbFzdJfNLB8y2fCzv2MCfY005+vbL9D0YXmSHSY=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiM2RmZjk3ZDE0Yjk2NDkzNWE3MjdkNzUxMjRkNGFlY2Y3ZjRkOTlmOGQ5ZGQ0ODdlMDVlMGFjZjZlNGMwNTRjZCJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjllZTMxMDM2Zjc5NWQ4YjUwNjU3ODc5YmFlNzliNWQ5OWJjYjExZjYyOWM3N2M4NDJmMzZlOGZjMmQ5NDk3MzMifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lHK1A0Yk53dUtXWStld1FoYVMxSXNONmdGclNtQVVzbDhCR1U1WHBNWEFPQWlFQWtFTW5sa3NKV0ZqMklKV0wvbzZremlSWTNnM3Z3cVJxeDNUYm00RUdzZzg9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoclJFTkRRbmhoWjBGM1NVSkJaMGxWVjNBeFQwcHJXRGRCU25OMlp6SlJUSGRVWlVkR05rWjBSVEZqZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmVFMVVSWGxOYWtsNFRVUk5lRmRvWTA1TmFsbDRUVlJGZVUxcVNYbE5SRTE0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVm5LMGhEWnpOSU1teERXWE5TTlhWcVRHUnpPVTlPYUhkbFZuRm1XVU4wWlhsYWMyd0tNemcwUjJ4bEwwVnljbFZ6YTJKdEsyZEZlWFJVVjJrcmFFeDVVa2MxTVZSc1dXdDZaM2c1VWtSdE1rVTBiRTVUYkdGUFEwSnFWWGRuWjFsNFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdaQ1owNVdTRk5OUlVkRVFWZG5RbFJtQ2pBcmJsQldhVkZTYkhadGJ6SlBhMjlXWVV4SFRHaG9hMUI2UWpaQ1owNVdTRkpGUWtGbU9FVmpSRUoxYUcxNGIyUklVbmRqZW05MlRESmtjR1JIYURFS1dXazFhbUl5TUhaaVYxSnBXVmhPYkV4WFVteGthVGwwV2tkS2FHTXlWWFJaTWpsMVltMVdhbVJET0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU13cGplVGwzWkZkS2MyRllUbTlNV0U1cllYa3hkV05ITUhWbFZ6RnpVVWhLYkZwdVRYWmtSMFp1WTNrNU1rMUROSGhNYWtGMFdXMVdNRmxUTkhoUFJHZDNDazlSV1V0TGQxbENRa0ZIUkhaNlFVSkJVVkZ5WVVoU01HTklUVFpNZVRrd1lqSjBiR0pwTldoWk0xSndZakkxZWt4dFpIQmtSMmd4V1c1V2VscFlTbW9LWWpJMU1GcFhOVEJNYlU1MllsUkJaa0puYjNKQ1owVkZRVmxQTDAxQlJVTkNRa1l6WWpOS2NscHRlSFprTVRscllWaE9kMWxZVW1waFJFRXlRbWR2Y2dwQ1owVkZRVmxQTDAxQlJVUkNRMmhzVDBkYWJWbHFaM2RPYlZGNFRtMU5NVTlIV214TlJFNXFXbXBWZDFsNmF6SmFiVWt5VG0xVmVVOVhWbWxaYWxsNENrMXRTbWhOUTFsSFEybHpSMEZSVVVKbk56aDNRVkZSUlVkR1FqRlpiWGh3WXpKbloyTXlPVEZqYlU1c1RGZEtNV0ZYZURCSlJrNUZVM3BCYmtKbmIzSUtRbWRGUlVGWlR5OU5RVVZHUWtKc2RGcEhTbWhqTWxWMFdrZFdNa3d5TVd0WmJVWjZXbE14YW1JeU5YVmFWMDR3VFVOalIwTnBjMGRCVVZGQ1p6YzRkd3BCVVZsRlIxaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5IaE1ha0YwV1cxV01GbFROSGhQUkdkM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2Q21SSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVaDNSME5wYzBjS1FWRlJRbWMzT0hkQlVXdEZZbWQ0YzJGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5TVd0WmJVWjZXbE14YTFwWVdYWmlWMUpwV1ZoT2JBcE1WMDUyWW0wMWJGa3pVWFpNYldSd1pFZG9NVmxwT1ROaU0wcHlXbTE0ZG1RelRYWmpTRlpwWWtkc2VtRkRNWHBhUjNOMFltNUNkRXh1YkhSaVJVSjVDbHBYV25wTU0xSm9Xak5OZG1ScVFYVk5VelIzVEZkS2JHUkhSWFZOVkdjMFRVUm5SME5wYzBkQlVWRkNaemM0ZDBGUmIwVkxaM2R2V2xSb2JWcHRTVFFLVFVSYWEwMVVXbXBPVkdodFdsUkJlbGt5V1RGTlIwMDFUbTFhYVU1cVdteE5hbXhzV1cxSk1rMVVTbWxaVkVGa1FtZHZja0puUlVWQldVOHZUVUZGVEFwQ1FUaE5SRmRrY0dSSGFERlphVEZ2WWpOT01GcFhVWGRRUVZsTFMzZFpRa0pCUjBSMmVrRkNSRUZSZFVSRGVHOWtTRkozWTNwdmRrd3laSEJrUjJneENsbHBOV3BpTWpCMllsZFNhVmxZVG14TVYxSnNaR2s1ZEZwSFNtaGpNbFYwV1RJNWRXSnRWbXBrUkVFMFFtZHZja0puUlVWQldVOHZUVUZGVGtKRGIwMEtTMGRWTkZwdFdtbFBSRUV5V2tSRk1sbDZWVFJhYlZWM1RUSk9iVTVVUW1wUFZGcHRXV3BaTWxwVVNUVmFWMHBwVG1wRmVWbHRSWGRMVVZsTFMzZFpRZ3BDUVVkRWRucEJRa1JuVVdKRVFteDVXbGRhZWt3elVtaGFNMDEyWkdwQmRVMVROSGRNVjBwc1pFZEZkVTFVWnpSTlFtOUhRMmx6UjBGUlVVSm5OemgzQ2tGUk9FVkVRWGRMVFZSTmQwNTZSWHBPZW1kM1RVUkJkRUpuYjNKQ1owVkZRVmxQTDAxQlJWRkNRamhOU0Zkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1rS1RHMU9kbUpUT1hSYVIwcG9ZekpWZEZwSFZqSk5RbXRIUTJselIwRlJVVUpuTnpoM1FWSkZSVU4zZDBwTmVrRXpUWHBOZVUxVVZUTk5TSGRIUTJselJ3cEJVVkZDWnpjNGQwRlNTVVZpWjNoellVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERJeGExbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNDa3hYVG5aaWJUVnNXVE5SZGt4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU5JVm1saVIyeDZZVU14ZWxwSGMzUmlia0owVEc1c2RHSkZRbmtLV2xkYWVrd3pVbWhhTTAxMlpHcEJkVTFUTkhkTVYwcHNaRWRGZFUxVVp6Uk5SR2RIUTJselIwRlJVVUpuTnpoM1FWSk5SVXRuZDI5YVZHaHRXbTFKTkFwTlJGcHJUVlJhYWs1VWFHMWFWRUY2V1RKWk1VMUhUVFZPYlZwcFRtcGFiRTFxYkd4WmJVa3lUVlJLYVZsVVFXaENaMjl5UW1kRlJVRlpUeTlOUVVWVkNrSkNUVTFGV0dSMlkyMTBiV0pIT1ROWU1sSndZek5DYUdSSFRtOU5SMEZIUTJselIwRlJVVUpuTnpoM1FWSlZSVlZuZUZGaFNGSXdZMGhOTmt4NU9XNEtZVmhTYjJSWFNYVlpNamwwVERJeGExbHRSbnBhVXpGcldsaFpkbUpYVW1sWldFNXNURmRPZG1KdE5XeFpNMUYyV1ZkT01HRlhPWFZqZVRsNVpGYzFlZ3BNZWxGNlRYcEZNVTlVWnpOTlZHZDVUREpHTUdSSFZuUmpTRko2VEhwRmQwWm5XVXRMZDFsQ1FrRkhSSFo2UVVKR1oxRkpSRUZhZDJSWFNuTmhWMDEzQ2xsUldVdExkMWxDUWtGSFJIWjZRVUpIUVZKVVJFWkdlVnBZUW5aUGJURnJXVzFHZWxwVE1XdGFXRnBCVFhwQk0wMTZUWGxOVkZVelRESXhhMWx0Um5vS1dsTXhhbUl5TlhWYVYwNHdVVVJGZWsxRVkzaE5lbU0wVFVSQk5tTnRWbTFQYmtwc1dtNU5kbVJIUm01amVUa3lUVU0wZUV4cVFYUlpiVll3V1ZNMGVBcFBSR2QzWjFsclIwTnBjMGRCVVZGQ01XNXJRMEpCU1VWbGQxSTFRVWhqUVdSUlJHUlFWRUp4ZUhOalVrMXRUVnBJYUhsYVducGpRMjlyY0dWMVRqUTRDbkptSzBocGJrdEJUSGx1ZFdwblFVRkJZVWhTZWk4NVRVRkJRVVZCZDBKSFRVVlJRMGxFVkRCS1ZVUkpiVzg0VEdGVGVXWTFhbU5zUkRScmMwbHRUM1VLVlc1aFVYTktWWEZhZUd4cVpqaFNURUZwUW1ReFEwbHFVWHBtVFROaEwwMU1MMkZKUjBwVVpsaERkMjU0Ukcwd1FrMHJkelE0ZWtKWFMwRjRNa1JCU3dwQ1oyZHhhR3RxVDFCUlVVUkJkMDV2UVVSQ2JFRnFSVUUzVGs1TGRtZDZhalYyWmxoME1XZDZTVTl4T1c5aVdUTjRTbFU1VVc5bVdsbFhlbmxyYlRWQkNrMDJlWGRITUZVeU16WkhiMXByT1V4NFpHdzJlbXBxV1VGcVFXcHVUazlKVjNsTlIwMVRlWHBhTDFsRWFFWmhjazFTYXpSak1uRmtVa0ZJVlhZNWFYRUtTSEJRZW5kcFJVUldSV3BJV1ZodlQydDVMMXBCUjB4WmNVeEJQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In1dfX0="}],"timestampVerificationData":{"rfc3161Timestamps":[]}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoic2RrLXN0YWdpbmcudGd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjA4ZDliOGQ4NzFhZWE5ZmQ2ODhjZmYyYjM5NWYwN2RiNjNkMGU0MTFjODc2NmI5NDdkMDkwN2RjNDJlM2NkYzYifX1dLCJwcmVkaWNhdGVUeXBlIjoiaHR0cHM6Ly9zbHNhLmRldi9wcm92ZW5hbmNlL3YxIiwicHJlZGljYXRlIjp7ImJ1aWxkRGVmaW5pdGlvbiI6eyJidWlsZFR5cGUiOiJodHRwczovL2FjdGlvbnMuZ2l0aHViLmlvL2J1aWxkdHlwZXMvd29ya2Zsb3cvdjEiLCJleHRlcm5hbFBhcmFtZXRlcnMiOnsid29ya2Zsb3ciOnsicmVmIjoicmVmcy90YWdzL3YwLjEuMC1iZXRhLjE4OCIsInJlcG9zaXRvcnkiOiJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdCIsInBhdGgiOiIuZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLXNkay1ucG0ueW1sIn19LCJpbnRlcm5hbFBhcmFtZXRlcnMiOnsiZ2l0aHViIjp7ImV2ZW50X25hbWUiOiJ3b3JrZmxvd19kaXNwYXRjaCIsInJlcG9zaXRvcnlfaWQiOiIxMzA3MTM3ODAwIiwicmVwb3NpdG9yeV9vd25lcl9pZCI6IjMwNzMzMjE1NyIsInJ1bm5lcl9lbnZpcm9ubWVudCI6ImdpdGh1Yi1ob3N0ZWQifX0sInJlc29sdmVkRGVwZW5kZW5jaWVzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL21kYmFzZS1kZXYvbWRiYXNlLWNvbm5lY3RAcmVmcy90YWdzL3YwLjEuMC1iZXRhLjE4OCIsImRpZ2VzdCI6eyJnaXRDb21taXQiOiJlOGZmYjgwNmQxNmM1OGZlMDNjZjUwYzk2ZmI2NmUyOWViYjYxMmJhIn19XX0sInJ1bkRldGFpbHMiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZGJhc2UtZGV2L21kYmFzZS1jb25uZWN0Ly5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gtc2RrLW5wbS55bWxAcmVmcy90YWdzL3YwLjEuMC1iZXRhLjE4OCJ9LCJtZXRhZGF0YSI6eyJpbnZvY2F0aW9uSWQiOiJodHRwczovL2dpdGh1Yi5jb20vbWRiYXNlLWRldi9tZGJhc2UtY29ubmVjdC9hY3Rpb25zL3J1bnMvNDMzMTU5ODcxODIvYXR0ZW1wdHMvMSJ9fX19","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIG+P4bNwuKWY+ewQhaS1IsN6gFrSmAUsl8BGU5XpMXAOAiEAkEMnlksJWFj2IJWL/o6kziRY3g3vwqRqx3Tbm4EGsg8=","keyid":""}]}}