@unconfirmed/publish 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +246 -0
  3. package/dist/args.d.ts +5 -0
  4. package/dist/args.d.ts.map +1 -0
  5. package/dist/args.js +185 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/cli-types.d.ts +24 -0
  8. package/dist/cli-types.d.ts.map +1 -0
  9. package/dist/cli-types.js +2 -0
  10. package/dist/cli-types.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +192 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +12 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +21 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/errors.d.ts +17 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +22 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/move-build.d.ts +17 -0
  28. package/dist/move-build.d.ts.map +1 -0
  29. package/dist/move-build.js +189 -0
  30. package/dist/move-build.js.map +1 -0
  31. package/dist/onara-client.d.ts +36 -0
  32. package/dist/onara-client.d.ts.map +1 -0
  33. package/dist/onara-client.js +119 -0
  34. package/dist/onara-client.js.map +1 -0
  35. package/dist/published-file.d.ts +16 -0
  36. package/dist/published-file.d.ts.map +1 -0
  37. package/dist/published-file.js +79 -0
  38. package/dist/published-file.js.map +1 -0
  39. package/dist/result.d.ts +12 -0
  40. package/dist/result.d.ts.map +1 -0
  41. package/dist/result.js +86 -0
  42. package/dist/result.js.map +1 -0
  43. package/dist/transaction.d.ts +13 -0
  44. package/dist/transaction.d.ts.map +1 -0
  45. package/dist/transaction.js +36 -0
  46. package/dist/transaction.js.map +1 -0
  47. package/dist/types.d.ts +60 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/workflow.d.ts +19 -0
  52. package/dist/workflow.d.ts.map +1 -0
  53. package/dist/workflow.js +241 -0
  54. package/dist/workflow.js.map +1 -0
  55. package/package.json +59 -0
@@ -0,0 +1,119 @@
1
+ const MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
2
+ export class OnaraHttpError extends Error {
3
+ status;
4
+ digest;
5
+ txStatus;
6
+ constructor(message, status, options = {}) {
7
+ super(message);
8
+ this.name = 'OnaraHttpError';
9
+ this.status = status;
10
+ this.digest = options.digest;
11
+ this.txStatus = options.txStatus;
12
+ }
13
+ }
14
+ function record(value) {
15
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
16
+ ? value
17
+ : undefined;
18
+ }
19
+ async function responseBytes(response) {
20
+ const contentLength = response.headers.get('content-length');
21
+ if (contentLength !== null && Number(contentLength) > MAX_RESPONSE_BYTES) {
22
+ throw new OnaraHttpError('Onara response exceeded the 8 MiB limit.', response.status);
23
+ }
24
+ if (!response.body)
25
+ return new Uint8Array();
26
+ const reader = response.body.getReader();
27
+ const chunks = [];
28
+ let total = 0;
29
+ while (true) {
30
+ const { done, value } = await reader.read();
31
+ if (done)
32
+ break;
33
+ total += value.byteLength;
34
+ if (total > MAX_RESPONSE_BYTES) {
35
+ await reader.cancel();
36
+ throw new OnaraHttpError('Onara response exceeded the 8 MiB limit.', response.status);
37
+ }
38
+ chunks.push(value);
39
+ }
40
+ const bytes = new Uint8Array(total);
41
+ let offset = 0;
42
+ for (const chunk of chunks) {
43
+ bytes.set(chunk, offset);
44
+ offset += chunk.byteLength;
45
+ }
46
+ return bytes;
47
+ }
48
+ async function responseJson(response) {
49
+ try {
50
+ const body = record(JSON.parse(new TextDecoder().decode(await responseBytes(response))));
51
+ if (body)
52
+ return body;
53
+ }
54
+ catch (error) {
55
+ if (error instanceof OnaraHttpError)
56
+ throw error;
57
+ // Report a stable protocol error below.
58
+ }
59
+ throw new OnaraHttpError('Onara returned an invalid JSON response.', response.status);
60
+ }
61
+ function errorFromResponse(response, body) {
62
+ const status = body.status === 'unconfirmed' || body.status === 'unknown' ? body.status : undefined;
63
+ return new OnaraHttpError(typeof body.error === 'string' ? body.error : `Onara request failed with HTTP ${response.status}.`, response.status, {
64
+ ...(typeof body.digest === 'string' ? { digest: body.digest } : {}),
65
+ ...(status ? { txStatus: status } : {}),
66
+ });
67
+ }
68
+ export class OnaraHttpClient {
69
+ baseUrl;
70
+ fetch;
71
+ constructor(options) {
72
+ this.baseUrl = options.url.replace(/\/+$/, '');
73
+ this.fetch = options.fetch;
74
+ }
75
+ async status() {
76
+ const response = await this.fetch(`${this.baseUrl}/status`);
77
+ const body = await responseJson(response);
78
+ if (!response.ok)
79
+ throw errorFromResponse(response, body);
80
+ if (typeof body.network !== 'string' ||
81
+ typeof body.chainId !== 'string' ||
82
+ typeof body.address !== 'string' ||
83
+ !record(body.balances) ||
84
+ typeof record(body.balances).active !== 'string' ||
85
+ typeof record(body.balances).pending !== 'string') {
86
+ throw new OnaraHttpError('Onara returned an invalid status response.', response.status);
87
+ }
88
+ return body;
89
+ }
90
+ async sponsor(options) {
91
+ const query = new URLSearchParams();
92
+ if (options.dryRun)
93
+ query.set('dryRun', 'true');
94
+ if (!options.waitForExecution)
95
+ query.set('waitForExecution', 'false');
96
+ const suffix = query.size ? `?${query}` : '';
97
+ const response = await this.fetch(`${this.baseUrl}/sponsor${suffix}`, {
98
+ method: 'POST',
99
+ headers: { 'Content-Type': 'application/json' },
100
+ body: JSON.stringify({
101
+ sender: options.sender,
102
+ txBytes: options.txBytes,
103
+ txSignature: options.txSignature,
104
+ }),
105
+ });
106
+ const body = await responseJson(response);
107
+ if (!response.ok)
108
+ throw errorFromResponse(response, body);
109
+ return body;
110
+ }
111
+ async transactionStatus(digest) {
112
+ const response = await this.fetch(`${this.baseUrl}/sponsor/${encodeURIComponent(digest)}/status`);
113
+ const body = await responseJson(response);
114
+ if (!response.ok && response.status !== 404)
115
+ throw errorFromResponse(response, body);
116
+ return body;
117
+ }
118
+ }
119
+ //# sourceMappingURL=onara-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onara-client.js","sourceRoot":"","sources":["../src/onara-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Network } from './config.js';
2
+ export declare function updatePublishedText(existing: string, options: {
3
+ network: Network;
4
+ chainId: string;
5
+ packageId: string;
6
+ suiCliVersion: string;
7
+ edition: string;
8
+ }): string;
9
+ export declare function updatePublishedFile(options: {
10
+ packagePath: string;
11
+ network: Network;
12
+ chainId: string;
13
+ packageId: string;
14
+ suiCliVersion: string;
15
+ }): Promise<string>;
16
+ //# sourceMappingURL=published-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"published-file.d.ts","sourceRoot":"","sources":["../src/published-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAqC1C,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,GACA,MAAM,CAgBR;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClB"}
@@ -0,0 +1,79 @@
1
+ import { lstat, readFile, rename, unlink, writeFile } from 'node:fs/promises';
2
+ import { basename, dirname, join } from 'node:path';
3
+ import { PublishError } from './errors.js';
4
+ const HEADER = `# Generated by Move
5
+ # This file contains metadata about published versions of this package in different environments
6
+ # This file SHOULD be committed to source control
7
+ `;
8
+ function compilerVersion(suiCliVersion) {
9
+ return suiCliVersion.match(/\b(\d+\.\d+\.\d+)/)?.[1] ?? suiCliVersion.replace(/^sui\s+/, '');
10
+ }
11
+ function moveEdition(manifest) {
12
+ return manifest.match(/^\s*edition\s*=\s*["']([^"']+)["']/m)?.[1] ?? '2024';
13
+ }
14
+ function publicationSection(options) {
15
+ return `[published.${options.network}]
16
+ chain-id = ${JSON.stringify(options.chainId)}
17
+ published-at = ${JSON.stringify(options.packageId)}
18
+ original-id = ${JSON.stringify(options.packageId)}
19
+ version = 1
20
+ toolchain-version = ${JSON.stringify(compilerVersion(options.suiCliVersion))}
21
+ build-config = { flavor = "sui", edition = ${JSON.stringify(options.edition)} }
22
+ `;
23
+ }
24
+ function oneTrailingNewline(value) {
25
+ return `${value.trimEnd()}\n`;
26
+ }
27
+ export function updatePublishedText(existing, options) {
28
+ const replacement = publicationSection(options);
29
+ const sectionPattern = new RegExp(`^\\[published\\.${options.network}\\]\\s*$`, 'm');
30
+ const match = sectionPattern.exec(existing);
31
+ if (!match) {
32
+ const prefix = existing.trim() ? `${existing.trimEnd()}\n\n` : `${HEADER}\n`;
33
+ return oneTrailingNewline(`${prefix}${replacement}`);
34
+ }
35
+ const start = match.index;
36
+ const afterHeader = start + match[0].length;
37
+ const nextHeader = /^\[[^\]]+\]\s*$/m.exec(existing.slice(afterHeader));
38
+ const end = nextHeader ? afterHeader + nextHeader.index : existing.length;
39
+ const before = existing.slice(0, start);
40
+ const after = existing.slice(end).replace(/^\s*/, '\n\n');
41
+ return oneTrailingNewline(`${before}${replacement.trimEnd()}${after || '\n'}`);
42
+ }
43
+ export async function updatePublishedFile(options) {
44
+ const publishedPath = join(options.packagePath, 'Published.toml');
45
+ const manifestPath = join(options.packagePath, 'Move.toml');
46
+ let existing = '';
47
+ try {
48
+ const stat = await lstat(publishedPath);
49
+ if (stat.isSymbolicLink()) {
50
+ throw new PublishError('PUBLISHED_FILE_SYMLINK', 'Refusing to replace a symlinked Published.toml.');
51
+ }
52
+ existing = await readFile(publishedPath, 'utf8');
53
+ }
54
+ catch (error) {
55
+ if (!(error instanceof PublishError) && error.code !== 'ENOENT')
56
+ throw error;
57
+ if (error instanceof PublishError)
58
+ throw error;
59
+ }
60
+ const manifest = await readFile(manifestPath, 'utf8');
61
+ const updated = updatePublishedText(existing, {
62
+ network: options.network,
63
+ chainId: options.chainId,
64
+ packageId: options.packageId,
65
+ suiCliVersion: options.suiCliVersion,
66
+ edition: moveEdition(manifest),
67
+ });
68
+ const temporaryPath = join(dirname(publishedPath), `.${basename(publishedPath)}.${process.pid}.${Date.now()}.tmp`);
69
+ try {
70
+ await writeFile(temporaryPath, updated, { encoding: 'utf8', mode: 0o644, flag: 'wx' });
71
+ await rename(temporaryPath, publishedPath);
72
+ }
73
+ catch (error) {
74
+ await unlink(temporaryPath).catch(() => undefined);
75
+ throw error;
76
+ }
77
+ return publishedPath;
78
+ }
79
+ //# sourceMappingURL=published-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"published-file.js","sourceRoot":"","sources":["../src/published-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type ExecutionExtraction = {
2
+ kind: 'success' | 'failed' | 'unknown';
3
+ effect: 'applied' | 'unknown';
4
+ digest?: string;
5
+ packageId?: string;
6
+ packageIds?: string[];
7
+ error?: string;
8
+ };
9
+ export declare function extractExecutionResult(value: unknown): ExecutionExtraction;
10
+ /** Extract all freshly published package IDs from any supported execution response. */
11
+ export declare function extractPublishedPackageIds(value: unknown): string[];
12
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACtC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAgDD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAuC1E;AAED,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAEnE"}
package/dist/result.js ADDED
@@ -0,0 +1,86 @@
1
+ import { normalizeSuiAddress } from '@mysten/sui/utils';
2
+ function record(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
4
+ ? value
5
+ : undefined;
6
+ }
7
+ function text(value) {
8
+ return typeof value === 'string' && value ? value : undefined;
9
+ }
10
+ function executionError(transaction) {
11
+ const status = record(transaction.status);
12
+ const error = record(status?.error);
13
+ return text(error?.message) ?? (status?.success === false ? 'Transaction execution failed.' : undefined);
14
+ }
15
+ function packageIdsFrom(transaction) {
16
+ const effects = record(transaction.effects);
17
+ const changes = effects?.changedObjects;
18
+ if (!Array.isArray(changes))
19
+ return [];
20
+ const packageIds = [];
21
+ for (const value of changes) {
22
+ const change = record(value);
23
+ if (change?.outputState !== 'PackageWrite' || change.idOperation !== 'Created')
24
+ continue;
25
+ const objectId = text(change.objectId);
26
+ if (!objectId)
27
+ continue;
28
+ try {
29
+ packageIds.push(normalizeSuiAddress(objectId));
30
+ }
31
+ catch {
32
+ continue;
33
+ }
34
+ }
35
+ return packageIds;
36
+ }
37
+ function packageFields(transaction) {
38
+ const packageIds = packageIdsFrom(transaction);
39
+ return packageIds.length === 0
40
+ ? {}
41
+ : { packageId: packageIds[0], packageIds };
42
+ }
43
+ export function extractExecutionResult(value) {
44
+ const response = record(value);
45
+ if (!response)
46
+ return { kind: 'unknown', effect: 'unknown' };
47
+ if (response.$kind === 'Transaction') {
48
+ const transaction = record(response.Transaction);
49
+ if (!transaction)
50
+ return { kind: 'unknown', effect: 'unknown' };
51
+ return {
52
+ kind: 'success',
53
+ effect: 'applied',
54
+ ...(text(transaction.digest) ? { digest: text(transaction.digest) } : {}),
55
+ ...packageFields(transaction),
56
+ };
57
+ }
58
+ if (response.$kind === 'FailedTransaction') {
59
+ const transaction = record(response.FailedTransaction);
60
+ if (!transaction)
61
+ return { kind: 'failed', effect: 'applied' };
62
+ return {
63
+ kind: 'failed',
64
+ effect: 'applied',
65
+ ...(text(transaction.digest) ? { digest: text(transaction.digest) } : {}),
66
+ ...(executionError(transaction) ? { error: executionError(transaction) } : {}),
67
+ };
68
+ }
69
+ // Tolerate the unwrapped transaction returned by some status endpoints.
70
+ if (text(response.digest) && record(response.status)) {
71
+ const status = record(response.status);
72
+ return {
73
+ kind: status.success === true ? 'success' : status.success === false ? 'failed' : 'unknown',
74
+ effect: status.success === true || status.success === false ? 'applied' : 'unknown',
75
+ digest: text(response.digest),
76
+ ...packageFields(response),
77
+ ...(executionError(response) ? { error: executionError(response) } : {}),
78
+ };
79
+ }
80
+ return { kind: 'unknown', effect: 'unknown' };
81
+ }
82
+ /** Extract all freshly published package IDs from any supported execution response. */
83
+ export function extractPublishedPackageIds(value) {
84
+ return extractExecutionResult(value).packageIds ?? [];
85
+ }
86
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Transaction } from '@mysten/sui/transactions';
2
+ import type { MoveBuildArtifact } from './types.js';
3
+ export declare const MAX_IMMUTABLE_PUBLISHES = 5;
4
+ /**
5
+ * Append one atomic `Publish -> make_immutable` pair to an existing transaction.
6
+ *
7
+ * The caller retains control of the transaction sender, gas, signing, execution,
8
+ * and any commands before or after the publish.
9
+ */
10
+ export declare function addImmutablePublish(transaction: Transaction, artifact: Pick<MoveBuildArtifact, 'modules' | 'dependencies'>): void;
11
+ /** Create an executor-neutral transaction containing one or more immutable publishes. */
12
+ export declare function createImmutablePublishTransaction(artifacts: readonly Pick<MoveBuildArtifact, 'modules' | 'dependencies'>[]): Transaction;
13
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,cAAc,CAAC,GAC5D,IAAI,CAaN;AAED,yFAAyF;AACzF,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,SAAS,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,cAAc,CAAC,EAAE,GACxE,WAAW,CAcb"}
@@ -0,0 +1,36 @@
1
+ import { Transaction } from '@mysten/sui/transactions';
2
+ import { PublishError } from './errors.js';
3
+ export const MAX_IMMUTABLE_PUBLISHES = 5;
4
+ /**
5
+ * Append one atomic `Publish -> make_immutable` pair to an existing transaction.
6
+ *
7
+ * The caller retains control of the transaction sender, gas, signing, execution,
8
+ * and any commands before or after the publish.
9
+ */
10
+ export function addImmutablePublish(transaction, artifact) {
11
+ if (artifact.modules.length === 0) {
12
+ throw new PublishError('EMPTY_PACKAGE', 'An immutable publish requires at least one module.');
13
+ }
14
+ const [upgradeCap] = transaction.publish({
15
+ modules: artifact.modules,
16
+ dependencies: artifact.dependencies,
17
+ });
18
+ transaction.moveCall({
19
+ target: '0x2::package::make_immutable',
20
+ arguments: [upgradeCap],
21
+ });
22
+ }
23
+ /** Create an executor-neutral transaction containing one or more immutable publishes. */
24
+ export function createImmutablePublishTransaction(artifacts) {
25
+ if (artifacts.length === 0) {
26
+ throw new PublishError('EMPTY_BATCH', 'An immutable publish transaction requires at least one package.');
27
+ }
28
+ if (artifacts.length > MAX_IMMUTABLE_PUBLISHES) {
29
+ throw new PublishError('PUBLISH_BATCH_LIMIT', `An immutable publish transaction supports at most ${MAX_IMMUTABLE_PUBLISHES} packages.`);
30
+ }
31
+ const transaction = new Transaction();
32
+ for (const artifact of artifacts)
33
+ addImmutablePublish(transaction, artifact);
34
+ return transaction;
35
+ }
36
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA;AAExC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAwB,EACxB,QAA6D;IAE7D,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,oDAAoD,CAAC,CAAA;IAC/F,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;QACvC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC,CAAA;IACF,WAAW,CAAC,QAAQ,CAAC;QACnB,MAAM,EAAE,8BAA8B;QACtC,SAAS,EAAE,CAAC,UAAW,CAAC;KACzB,CAAC,CAAA;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,iCAAiC,CAC/C,SAAyE;IAEzE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,iEAAiE,CAAC,CAAA;IAC1G,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;QAC/C,MAAM,IAAI,YAAY,CACpB,qBAAqB,EACrB,qDAAqD,uBAAuB,YAAY,CACzF,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IACrC,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC5E,OAAO,WAAW,CAAA;AACpB,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { Network } from './config.js';
2
+ import type { MutationEffect } from './errors.js';
3
+ export type PublishConnectionOptions = {
4
+ network: Network;
5
+ rpcUrl?: string;
6
+ onaraUrl: string;
7
+ timeoutMs: number;
8
+ };
9
+ export type PublishOptions = PublishConnectionOptions & {
10
+ dryRun: boolean;
11
+ };
12
+ export type StatusOptions = PublishConnectionOptions & {
13
+ digest: string;
14
+ };
15
+ export type MoveBuildArtifact = {
16
+ modules: string[];
17
+ dependencies: string[];
18
+ digest: number[];
19
+ };
20
+ export type PublishPackageOptions = PublishOptions & {
21
+ packagePath: string;
22
+ artifact: MoveBuildArtifact;
23
+ suiCliVersion: string;
24
+ signal?: AbortSignal;
25
+ };
26
+ export type PublishReceipt = {
27
+ schemaVersion: 1;
28
+ operation: 'publish';
29
+ outcome: 'validated' | 'published';
30
+ effect: MutationEffect;
31
+ network: Network;
32
+ packagePath: string;
33
+ packageDigest: string;
34
+ moduleCount: number;
35
+ dependencyCount: number;
36
+ sender: string;
37
+ sponsor: string;
38
+ immutable: true;
39
+ onaraUrl: string;
40
+ rpcUrl: string;
41
+ suiCliVersion: string;
42
+ policy?: string;
43
+ transactionDigest?: string;
44
+ packageId?: string;
45
+ publishedFile?: string;
46
+ publishedFileUpdated?: boolean;
47
+ warnings?: string[];
48
+ };
49
+ export type StatusReceipt = {
50
+ schemaVersion: 1;
51
+ operation: 'status';
52
+ network: Network;
53
+ digest: string;
54
+ found: boolean;
55
+ outcome: 'not_found' | 'success' | 'failed' | 'unknown';
56
+ packageId?: string;
57
+ immutable?: boolean;
58
+ onaraUrl: string;
59
+ };
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,wBAAwB,GAAG;IACtD,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,wBAAwB,GAAG;IACrD,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,CAAC,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,WAAW,GAAG,WAAW,CAAA;IAClC,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,CAAC,CAAA;IAChB,SAAS,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACvD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { SuiGrpcClient } from '@mysten/sui/grpc';
2
+ import { PublishError } from './errors.js';
3
+ import { OnaraHttpClient } from './onara-client.js';
4
+ import type { PublishPackageOptions, PublishReceipt, StatusOptions, StatusReceipt } from './types.js';
5
+ export declare function createBoundedFetch(timeoutMs: number): typeof fetch;
6
+ export declare function packageDigestHex(digest: number[]): string;
7
+ export declare function sponsorshipError(error: unknown, digest: string): PublishError;
8
+ export declare function assertNetworkIdentity(options: {
9
+ client: SuiGrpcClient;
10
+ onara: OnaraHttpClient;
11
+ network: string;
12
+ chainId: string;
13
+ signal?: AbortSignal;
14
+ }): Promise<{
15
+ sponsor: string;
16
+ }>;
17
+ export declare function publishPackage(options: PublishPackageOptions): Promise<PublishReceipt>;
18
+ export declare function transactionStatus(options: StatusOptions): Promise<StatusReceipt>;
19
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAA;AAGnE,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAA;AAEnB,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,KAAK,CAMlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,YAAY,CAqCd;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,eAAe,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B/B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA0H5F;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDtF"}