@arcforges/api-client 1.0.0-ci.74.1 → 1.0.0-ci.82.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/NOTICE CHANGED
@@ -1,23 +1,22 @@
1
1
  ArcForges Contracts
2
2
  Copyright 2026 ArcForges contributors
3
3
 
4
- @arcforges/api-client 1.0.0-ci.74.1 (Apache-2.0)
4
+ @arcforges/api-client 1.0.0-ci.82.1 (Apache-2.0)
5
5
 
6
6
  Resolved runtime dependency inventory (dependencies retain their own licences):
7
- - @arcforges/proto 1.0.0-ci.74.1: Apache-2.0 (pkg:npm/%40arcforges/proto@1.0.0-ci.74.1)
7
+ - @arcforges/proto 1.0.0-ci.82.1: Apache-2.0 (pkg:npm/%40arcforges/proto@1.0.0-ci.82.1)
8
8
  - @bufbuild/protobuf 2.15.0: (Apache-2.0 AND BSD-3-Clause) (pkg:npm/%40bufbuild/protobuf@2.15.0)
9
9
  - @connectrpc/connect 2.2.0: Apache-2.0 (pkg:npm/%40connectrpc/connect@2.2.0)
10
10
  - @connectrpc/connect-web 2.2.0: Apache-2.0 (pkg:npm/%40connectrpc/connect-web@2.2.0)
11
11
 
12
- Third-party dependencies are referenced, not vendored into this package.
13
- The installed dependency packages supply their original licence and notice files.
12
+ Third-party dependencies are referenced, not vendored into this package. Installed dependencies supply their original licence and notice files.
14
13
 
15
14
  ArcForges source provenance notices
16
15
 
17
16
  Generated from reviewed active records. Original licence files and dependency notices remain authoritative.
18
17
 
19
- hello-bindings-r1
20
- Source: https://github.com/ArcForges/Contracts @ 76a3e0d39e61c7868b497ae7e059e29ac69f44de
18
+ contract-bindings-r2
19
+ Source: https://github.com/ArcForges/Contracts @ 3edb8888b0648c32c5594b567e0157b158e9c915
21
20
  Material licence: Apache-2.0
22
21
  Notice scope: packages
23
22
  Copyright 2026 ArcForges contributors.
@@ -25,7 +24,7 @@ Copyright 2008 Google Inc. All rights reserved.
25
24
  Copyright 2015, 2019, 2020 gRPC authors.
26
25
  Copyright 2021-2026 Buf Technologies, Inc.
27
26
  Copyright 2022-2026 The Connect Authors.
28
- Hello bindings are generated from the Apache-2.0 ArcForges proto using Grpc.Tools 2.84.0, protoc-gen-es 2.15.0, grpc-java 1.84.0, grpc-kotlin 1.5.0 and Connect-Kotlin 0.9.0. Grpc.Tools provenance binds protobuf submodule 35cd01f9fe9afbeea38cc7b979a3b6bfcde82c03. Generator implementations are build tools and are not bundled in the client packages. Preserve these attributions, Apache-2.0 terms and the protobuf BSD terms below.
27
+ Selected ArcForges contract bindings are generated from Apache-2.0 schemas using Grpc.Tools 2.84.0, protoc-gen-es 2.15.0 and Connect-Kotlin 0.9.0. Shape validators and fixture exports use Apache-2.0 repository tooling. Historical protobuf BSD-3-Clause and applicable generator Apache-2.0 attributions are retained. Build tools are not bundled in client packages. Native-grpc-only Android generation is retired in WP03.00.
29
28
 
30
29
  protobuf-generator-licence-r1
31
30
  Source: https://github.com/protocolbuffers/protobuf @ 35cd01f9fe9afbeea38cc7b979a3b6bfcde82c03
@@ -3,17 +3,17 @@
3
3
  "owner": "Contracts",
4
4
  "artifact": {
5
5
  "id": "@arcforges/api-client",
6
- "version": "1.0.0-ci.74.1"
6
+ "version": "1.0.0-ci.82.1"
7
7
  },
8
8
  "build": {
9
- "sourceCommit": "9f0e90f65d57f405fcee311d467a57a255dfd644",
9
+ "sourceCommit": "0fbb746d3bd46c507a939e2901504f390e7cd2e2",
10
10
  "dirty": false,
11
11
  "kind": "ci",
12
- "buildId": "35642372095.1",
13
- "runId": "35642372095",
12
+ "buildId": "35702693766.1",
13
+ "runId": "35702693766",
14
14
  "runAttempt": 1,
15
- "pipelineRun": "https://github.com/ArcForges/Contracts/actions/runs/35642372095",
16
- "sourceDateEpoch": 1790017396
15
+ "pipelineRun": "https://github.com/ArcForges/Contracts/actions/runs/35702693766",
16
+ "sourceDateEpoch": 1790064171
17
17
  },
18
18
  "axes": {
19
19
  "AppVersion": {
@@ -23,6 +23,24 @@
23
23
  "ContractSet": {
24
24
  "status": "present",
25
25
  "values": [
26
+ {
27
+ "subject": "arcforges.events",
28
+ "version": "1",
29
+ "source": {
30
+ "path": "public/proto/arcforges/events/v1/events.proto",
31
+ "sha256": "ea0ac740c06bbb5b81724b4a7e601110424cabc4940b07e579cf97d852880f43"
32
+ },
33
+ "descriptorSha256": "1d9e586eee777509104447b60295d2af63a588f2885555763e8fc598e7d8d3c5"
34
+ },
35
+ {
36
+ "subject": "arcforges.foundation",
37
+ "version": "1",
38
+ "source": {
39
+ "path": "public/proto/arcforges/foundation/v1/foundation.proto",
40
+ "sha256": "9445c5229ff92c2376fb8bfb49ca98b4503441636544795b9853fba3cd25bdb6"
41
+ },
42
+ "descriptorSha256": "1d9e586eee777509104447b60295d2af63a588f2885555763e8fc598e7d8d3c5"
43
+ },
26
44
  {
27
45
  "subject": "arcforges.hello",
28
46
  "version": "1",
@@ -30,13 +48,29 @@
30
48
  "path": "public/proto/arcforges/hello/v1/hello.proto",
31
49
  "sha256": "92489f89d1898a3d3bbea56c72116416cd0152ae8866c98745739437020c67d9"
32
50
  },
33
- "descriptorSha256": "7219a8d730978bcc3b7b8769e159d06711dff3f2b07715a6d487589f8c09b99c"
51
+ "descriptorSha256": "1d9e586eee777509104447b60295d2af63a588f2885555763e8fc598e7d8d3c5"
52
+ },
53
+ {
54
+ "subject": "json:PackageInventory",
55
+ "version": "1",
56
+ "source": {
57
+ "path": "public/http/v1/inventory.schema.json",
58
+ "sha256": "fb6929548278f6e16e61491001fecae4143882efbfe732950a1584e1e2f80a5d"
59
+ }
60
+ },
61
+ {
62
+ "subject": "json:PartReceipt",
63
+ "version": "1",
64
+ "source": {
65
+ "path": "public/http/v1/schema.json",
66
+ "sha256": "23587b33320fcbe4a917c2839552984eb40e716c4ce317a5c218f35bedf06751"
67
+ }
34
68
  }
35
69
  ]
36
70
  },
37
71
  "CapabilityVersion": {
38
72
  "status": "not-produced",
39
- "reason": "Hello declares no production capabilities.",
73
+ "reason": "The selected contract records do not declare implemented product capabilities.",
40
74
  "producer": "WP09 and product capability owners"
41
75
  },
42
76
  "NativeFormatVersion": {
@@ -55,23 +89,22 @@
55
89
  },
56
90
  "PolicySchemaVersion": {
57
91
  "status": "not-produced",
58
- "reason": "Hello is not a product policy schema.",
92
+ "reason": "The selected schemas contain no implemented product policy declaration.",
59
93
  "producer": "WP03 and WP44"
60
94
  },
61
95
  "ExtensionProtocolVersion": {
62
- "status": "not-produced",
63
- "reason": "Hello is not an extension protocol.",
64
- "producer": "WP03 and WP41"
96
+ "status": "not-applicable",
97
+ "reason": "This package closure contains no extension protocol."
65
98
  },
66
99
  "PackageVersion": {
67
100
  "status": "present",
68
101
  "values": [
69
102
  {
70
103
  "subject": "pkg:npm/%40arcforges/proto",
71
- "version": "1.0.0-ci.74.1",
104
+ "version": "1.0.0-ci.82.1",
72
105
  "source": {
73
106
  "path": "sbom.cdx.json#components",
74
- "sha256": "cb9b32565c0482c8dc5a2e25e2fafaf18b8192c53dfec6e0b076cbf141f2d055"
107
+ "sha256": "b81b87c9fa45060e54122df72af02c21ddcb28202e1278f8420d3ef5335ee4d1"
75
108
  }
76
109
  },
77
110
  {
@@ -79,7 +112,7 @@
79
112
  "version": "2.15.0",
80
113
  "source": {
81
114
  "path": "sbom.cdx.json#components",
82
- "sha256": "cb9b32565c0482c8dc5a2e25e2fafaf18b8192c53dfec6e0b076cbf141f2d055"
115
+ "sha256": "b81b87c9fa45060e54122df72af02c21ddcb28202e1278f8420d3ef5335ee4d1"
83
116
  }
84
117
  },
85
118
  {
@@ -87,7 +120,7 @@
87
120
  "version": "2.2.0",
88
121
  "source": {
89
122
  "path": "sbom.cdx.json#components",
90
- "sha256": "cb9b32565c0482c8dc5a2e25e2fafaf18b8192c53dfec6e0b076cbf141f2d055"
123
+ "sha256": "b81b87c9fa45060e54122df72af02c21ddcb28202e1278f8420d3ef5335ee4d1"
91
124
  }
92
125
  },
93
126
  {
@@ -95,7 +128,7 @@
95
128
  "version": "2.2.0",
96
129
  "source": {
97
130
  "path": "sbom.cdx.json#components",
98
- "sha256": "cb9b32565c0482c8dc5a2e25e2fafaf18b8192c53dfec6e0b076cbf141f2d055"
131
+ "sha256": "b81b87c9fa45060e54122df72af02c21ddcb28202e1278f8420d3ef5335ee4d1"
99
132
  }
100
133
  }
101
134
  ]
Binary file
@@ -0,0 +1,2 @@
1
+ export * from "../shapes/gen/PartReceipt.js";
2
+ export * from "../shapes/gen/PackageInventory.js";
@@ -0,0 +1,5 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // <auto-generated />
3
+ // Generated by eng/generate_shapes.py; do not edit.
4
+ export * from "../shapes/gen/PartReceipt.js";
5
+ export * from "../shapes/gen/PackageInventory.js";
package/dist/index.d.ts CHANGED
@@ -7,3 +7,4 @@ export declare function createHelloClient(options: GrpcWebTransportOptions): imp
7
7
  output: typeof import("@arcforges/proto").SayHelloResponseSchema;
8
8
  };
9
9
  }>>;
10
+ export * from "./gen/http.js";
package/dist/index.js CHANGED
@@ -6,3 +6,4 @@ import { createGrpcWebTransport } from "@connectrpc/connect-web";
6
6
  export function createHelloClient(options) {
7
7
  return createClient(HelloService, createGrpcWebTransport(options));
8
8
  }
9
+ export * from "./gen/http.js";
@@ -0,0 +1,10 @@
1
+ export interface PackageInventory {
2
+ schemaVersion: string;
3
+ files: InventoryFile[];
4
+ }
5
+ export interface InventoryFile {
6
+ path: string;
7
+ size: string;
8
+ sha256: string;
9
+ }
10
+ export declare function isPackageInventory(value: unknown): value is PackageInventory;
@@ -0,0 +1,133 @@
1
+ export function isPackageInventory(value) { return check0(value); }
2
+ function check0(value) {
3
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
4
+ return false;
5
+ const object = value;
6
+ for (const key of Object.keys(object)) {
7
+ switch (key) {
8
+ case "schemaVersion":
9
+ if (!check1(object[key]))
10
+ return false;
11
+ break;
12
+ case "files":
13
+ if (!check2(object[key]))
14
+ return false;
15
+ break;
16
+ default: return false;
17
+ }
18
+ }
19
+ if (!Object.prototype.hasOwnProperty.call(object, "schemaVersion"))
20
+ return false;
21
+ if (!Object.prototype.hasOwnProperty.call(object, "files"))
22
+ return false;
23
+ if (!inventoryRules(value))
24
+ return false;
25
+ if (!inventoryRules(value))
26
+ return false;
27
+ return true;
28
+ }
29
+ function check1(value) {
30
+ if (typeof value !== 'string' || !validText(value))
31
+ return false;
32
+ if (value !== "inventory.v1")
33
+ return false;
34
+ return true;
35
+ }
36
+ function check2(value) {
37
+ if (!Array.isArray(value))
38
+ return false;
39
+ if (value.length < 1)
40
+ return false;
41
+ if (value.length > 10000)
42
+ return false;
43
+ if (!value.every(item => check3(item)))
44
+ return false;
45
+ return true;
46
+ }
47
+ function check3(value) {
48
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
49
+ return false;
50
+ const object = value;
51
+ for (const key of Object.keys(object)) {
52
+ switch (key) {
53
+ case "path":
54
+ if (!check4(object[key]))
55
+ return false;
56
+ break;
57
+ case "size":
58
+ if (!check5(object[key]))
59
+ return false;
60
+ break;
61
+ case "sha256":
62
+ if (!check6(object[key]))
63
+ return false;
64
+ break;
65
+ default: return false;
66
+ }
67
+ }
68
+ if (!Object.prototype.hasOwnProperty.call(object, "path"))
69
+ return false;
70
+ if (!Object.prototype.hasOwnProperty.call(object, "size"))
71
+ return false;
72
+ if (!Object.prototype.hasOwnProperty.call(object, "sha256"))
73
+ return false;
74
+ return true;
75
+ }
76
+ function check4(value) {
77
+ if (typeof value !== 'string' || !validText(value))
78
+ return false;
79
+ if ((new RegExp("^[A-Za-z0-9_.-]+(/[A-Za-z0-9_.-]+)*$", 'u')).exec(value)?.[0] !== value)
80
+ return false;
81
+ return true;
82
+ }
83
+ function check5(value) {
84
+ if (typeof value !== 'string' || !validText(value))
85
+ return false;
86
+ if ([...value].length > 20)
87
+ return false;
88
+ if ((new RegExp("^(0|[1-9][0-9]*)$", 'u')).exec(value)?.[0] !== value)
89
+ return false;
90
+ if (BigInt(value) > 18446744073709551615n)
91
+ return false;
92
+ return true;
93
+ }
94
+ function check6(value) {
95
+ if (typeof value !== 'string' || !validText(value))
96
+ return false;
97
+ if ((new RegExp("^[0-9a-f]{64}$", 'u')).exec(value)?.[0] !== value)
98
+ return false;
99
+ return true;
100
+ }
101
+ function validText(value) {
102
+ for (const scalar of value) {
103
+ const point = scalar.codePointAt(0);
104
+ if (point >= 0xd800 && point <= 0xdfff)
105
+ return false;
106
+ }
107
+ return true;
108
+ }
109
+ function inventoryRules(value) {
110
+ const files = value.files;
111
+ const seen = new Set();
112
+ let previous;
113
+ let total = 0n;
114
+ for (const file of files) {
115
+ const path = file.path;
116
+ const folded = path.toUpperCase();
117
+ if (path.length === 0 || folded === 'INVENTORY.JSON' || folded === 'SIGNATURE.JSON' || seen.has(folded) || (previous !== undefined && previous >= path))
118
+ return false;
119
+ for (const segment of path.split('/')) {
120
+ if (!/^[A-Za-z0-9_.-]+$/.test(segment) || segment === '.' || segment === '..' || segment.endsWith('.') || /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$)/i.test(segment))
121
+ return false;
122
+ }
123
+ const size = BigInt(file.size);
124
+ if (size > 134217728n)
125
+ return false;
126
+ total += size;
127
+ if (total > 1073741824n)
128
+ return false;
129
+ seen.add(folded);
130
+ previous = path;
131
+ }
132
+ return files.some(file => file.path === 'manifest.json');
133
+ }
@@ -0,0 +1,7 @@
1
+ export interface PartReceipt {
2
+ partNumber: number;
3
+ size: string;
4
+ sha256: string;
5
+ etag: string;
6
+ }
7
+ export declare function isPartReceipt(value: unknown): value is PartReceipt;
@@ -0,0 +1,101 @@
1
+ export function isPartReceipt(value) { return check0(value); }
2
+ function check0(value) {
3
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
4
+ return false;
5
+ const object = value;
6
+ for (const key of Object.keys(object)) {
7
+ switch (key) {
8
+ case "partNumber":
9
+ if (!check1(object[key]))
10
+ return false;
11
+ break;
12
+ case "size":
13
+ if (!check2(object[key]))
14
+ return false;
15
+ break;
16
+ case "sha256":
17
+ if (!check3(object[key]))
18
+ return false;
19
+ break;
20
+ case "etag":
21
+ if (!check4(object[key]))
22
+ return false;
23
+ break;
24
+ default: return false;
25
+ }
26
+ }
27
+ if (!Object.prototype.hasOwnProperty.call(object, "partNumber"))
28
+ return false;
29
+ if (!Object.prototype.hasOwnProperty.call(object, "size"))
30
+ return false;
31
+ if (!Object.prototype.hasOwnProperty.call(object, "sha256"))
32
+ return false;
33
+ if (!Object.prototype.hasOwnProperty.call(object, "etag"))
34
+ return false;
35
+ return true;
36
+ }
37
+ function check1(value) {
38
+ if (typeof value !== 'number' || !Number.isSafeInteger(value))
39
+ return false;
40
+ if (value < 0)
41
+ return false;
42
+ if (value > 4294967295)
43
+ return false;
44
+ return true;
45
+ }
46
+ function check2(value) {
47
+ if (typeof value !== 'string' || !validText(value))
48
+ return false;
49
+ if ([...value].length > 20)
50
+ return false;
51
+ if ((new RegExp("^(0|[1-9][0-9]*)$", 'u')).exec(value)?.[0] !== value)
52
+ return false;
53
+ if (BigInt(value) > 18446744073709551615n)
54
+ return false;
55
+ return true;
56
+ }
57
+ function check3(value) {
58
+ if (typeof value !== 'string' || !validText(value))
59
+ return false;
60
+ if ((new RegExp("^[0-9a-f]{64}$", 'u')).exec(value)?.[0] !== value)
61
+ return false;
62
+ return true;
63
+ }
64
+ function check4(value) {
65
+ if (typeof value !== 'string' || !validText(value))
66
+ return false;
67
+ return true;
68
+ }
69
+ function validText(value) {
70
+ for (const scalar of value) {
71
+ const point = scalar.codePointAt(0);
72
+ if (point >= 0xd800 && point <= 0xdfff)
73
+ return false;
74
+ }
75
+ return true;
76
+ }
77
+ function inventoryRules(value) {
78
+ const files = value.files;
79
+ const seen = new Set();
80
+ let previous;
81
+ let total = 0n;
82
+ for (const file of files) {
83
+ const path = file.path;
84
+ const folded = path.toUpperCase();
85
+ if (path.length === 0 || folded === 'INVENTORY.JSON' || folded === 'SIGNATURE.JSON' || seen.has(folded) || (previous !== undefined && previous >= path))
86
+ return false;
87
+ for (const segment of path.split('/')) {
88
+ if (!/^[A-Za-z0-9_.-]+$/.test(segment) || segment === '.' || segment === '..' || segment.endsWith('.') || /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$)/i.test(segment))
89
+ return false;
90
+ }
91
+ const size = BigInt(file.size);
92
+ if (size > 134217728n)
93
+ return false;
94
+ total += size;
95
+ if (total > 1073741824n)
96
+ return false;
97
+ seen.add(folded);
98
+ previous = path;
99
+ }
100
+ return files.some(file => file.path === 'manifest.json');
101
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcforges/api-client",
3
- "version": "1.0.0-ci.74.1",
3
+ "version": "1.0.0-ci.82.1",
4
4
  "description": "ArcForges public gRPC-Web client entry point; initial Hello World example.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -22,16 +22,18 @@
22
22
  "./build-identity": "./build-identity.json"
23
23
  },
24
24
  "files": [
25
- "dist",
26
25
  "LICENSE",
27
26
  "NOTICE",
28
- "sbom.cdx.json",
29
- "source.json",
30
27
  "README.md",
31
- "build-identity.json"
28
+ "build-identity.json",
29
+ "contracts.binpb",
30
+ "dist",
31
+ "sbom.cdx.json",
32
+ "schemas",
33
+ "source.json"
32
34
  ],
33
35
  "dependencies": {
34
- "@arcforges/proto": "1.0.0-ci.74.1",
36
+ "@arcforges/proto": "1.0.0-ci.82.1",
35
37
  "@bufbuild/protobuf": "2.15.0",
36
38
  "@connectrpc/connect": "2.2.0",
37
39
  "@connectrpc/connect-web": "2.2.0"
@@ -41,6 +43,7 @@
41
43
  "registry": "https://registry.npmjs.org/"
42
44
  },
43
45
  "arcforges": {
44
- "licenceBoundary": "Apache"
46
+ "licenceBoundary": "Apache",
47
+ "contractAccess": "public"
45
48
  }
46
49
  }
package/sbom.cdx.json CHANGED
@@ -5,10 +5,10 @@
5
5
  "metadata": {
6
6
  "component": {
7
7
  "type": "library",
8
- "bom-ref": "pkg:npm/%40arcforges/api-client@1.0.0-ci.74.1",
8
+ "bom-ref": "pkg:npm/%40arcforges/api-client@1.0.0-ci.82.1",
9
9
  "name": "@arcforges/api-client",
10
- "version": "1.0.0-ci.74.1",
11
- "purl": "pkg:npm/%40arcforges/api-client@1.0.0-ci.74.1",
10
+ "version": "1.0.0-ci.82.1",
11
+ "purl": "pkg:npm/%40arcforges/api-client@1.0.0-ci.82.1",
12
12
  "licenses": [
13
13
  {
14
14
  "expression": "Apache-2.0"
@@ -19,10 +19,10 @@
19
19
  "components": [
20
20
  {
21
21
  "type": "library",
22
- "bom-ref": "pkg:npm/%40arcforges/proto@1.0.0-ci.74.1",
22
+ "bom-ref": "pkg:npm/%40arcforges/proto@1.0.0-ci.82.1",
23
23
  "name": "@arcforges/proto",
24
- "version": "1.0.0-ci.74.1",
25
- "purl": "pkg:npm/%40arcforges/proto@1.0.0-ci.74.1",
24
+ "version": "1.0.0-ci.82.1",
25
+ "purl": "pkg:npm/%40arcforges/proto@1.0.0-ci.82.1",
26
26
  "licenses": [
27
27
  {
28
28
  "expression": "Apache-2.0"
@@ -72,7 +72,7 @@
72
72
  "dependsOn": []
73
73
  },
74
74
  {
75
- "ref": "pkg:npm/%40arcforges/proto@1.0.0-ci.74.1",
75
+ "ref": "pkg:npm/%40arcforges/proto@1.0.0-ci.82.1",
76
76
  "dependsOn": [
77
77
  "pkg:npm/%40bufbuild/protobuf@2.15.0"
78
78
  ]
@@ -91,9 +91,9 @@
91
91
  ]
92
92
  },
93
93
  {
94
- "ref": "pkg:npm/%40arcforges/api-client@1.0.0-ci.74.1",
94
+ "ref": "pkg:npm/%40arcforges/api-client@1.0.0-ci.82.1",
95
95
  "dependsOn": [
96
- "pkg:npm/%40arcforges/proto@1.0.0-ci.74.1",
96
+ "pkg:npm/%40arcforges/proto@1.0.0-ci.82.1",
97
97
  "pkg:npm/%40bufbuild/protobuf@2.15.0",
98
98
  "pkg:npm/%40connectrpc/connect@2.2.0",
99
99
  "pkg:npm/%40connectrpc/connect-web@2.2.0"
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "SPDX-License-Identifier: Apache-2.0",
4
+ "title": "PackageInventory",
5
+ "type": "object",
6
+ "properties": {
7
+ "schemaVersion": {
8
+ "type": "string",
9
+ "const": "inventory.v1"
10
+ },
11
+ "files": {
12
+ "type": "array",
13
+ "maxItems": 10000,
14
+ "items": {
15
+ "$ref": "#/$defs/InventoryFile"
16
+ },
17
+ "minItems": 1
18
+ }
19
+ },
20
+ "required": ["schemaVersion", "files"],
21
+ "additionalProperties": false,
22
+ "$defs": {
23
+ "InventoryFile": {
24
+ "title": "InventoryFile",
25
+ "type": "object",
26
+ "properties": {
27
+ "path": {
28
+ "type": "string",
29
+ "pattern": "^[A-Za-z0-9_.-]+(/[A-Za-z0-9_.-]+)*$"
30
+ },
31
+ "size": {
32
+ "type": "string",
33
+ "pattern": "^(0|[1-9][0-9]*)$",
34
+ "maxLength": 20,
35
+ "x-arcforges-rules": ["uint64String"]
36
+ },
37
+ "sha256": {
38
+ "type": "string",
39
+ "pattern": "^[0-9a-f]{64}$"
40
+ }
41
+ },
42
+ "required": ["path", "size", "sha256"],
43
+ "additionalProperties": false
44
+ }
45
+ },
46
+ "x-arcforges-rules": ["inventoryPaths", "inventoryBounds"],
47
+ "x-arcforges-schema-version": "1"
48
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "SPDX-License-Identifier: Apache-2.0",
4
+ "title": "PartReceipt",
5
+ "type": "object",
6
+ "properties": {
7
+ "partNumber": {
8
+ "type": "integer",
9
+ "minimum": 0,
10
+ "maximum": 4294967295
11
+ },
12
+ "size": {
13
+ "type": "string",
14
+ "pattern": "^(0|[1-9][0-9]*)$",
15
+ "maxLength": 20,
16
+ "x-arcforges-rules": ["uint64String"]
17
+ },
18
+ "sha256": {
19
+ "type": "string",
20
+ "pattern": "^[0-9a-f]{64}$"
21
+ },
22
+ "etag": {
23
+ "type": "string"
24
+ }
25
+ },
26
+ "required": ["partNumber", "size", "sha256", "etag"],
27
+ "additionalProperties": false,
28
+ "x-arcforges-schema-version": "1"
29
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ syntax = "proto3";
3
+
4
+ package arcforges.events.v1;
5
+
6
+ option csharp_namespace = "ArcForges.Contracts.Events.V1";
7
+ option java_package = "io.github.arcforges.contracts.events.v1";
8
+ option java_multiple_files = true;
9
+ option java_outer_classname = "EventsProto";
10
+
11
+ // The complete entitlement.changed hint payload; not the full Event envelope.
12
+ message EntitlementChanged {
13
+ optional int64 entitlement_version = 1 [json_name = "entitlementVersion"];
14
+ }
@@ -0,0 +1,128 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ syntax = "proto3";
3
+
4
+ package arcforges.foundation.v1;
5
+
6
+ option csharp_namespace = "ArcForges.Contracts.Foundation.V1";
7
+ option java_package = "io.github.arcforges.contracts.foundation.v1";
8
+ option java_multiple_files = true;
9
+ option java_outer_classname = "FoundationProto";
10
+
11
+ // Complete selected registry04 records; shape constraints are owned beside this schema.
12
+ message Id { optional bytes value = 1 [json_name = "value"]; }
13
+ message Revision { optional int64 value = 1 [json_name = "value"]; }
14
+ message LocalNotesVersion {
15
+ Revision acked_rev = 1 [json_name = "ackedRev"];
16
+ optional uint64 head_local_seq = 2 [json_name = "headLocalSeq"];
17
+ }
18
+ message NativeContentRev { optional uint64 value = 1 [json_name = "value"]; }
19
+ message Instant {
20
+ optional sint64 unix_seconds = 1 [json_name = "unixSeconds"];
21
+ optional uint32 nanos = 2 [json_name = "nanos"];
22
+ }
23
+ message Decimal { optional string value = 1 [json_name = "value"]; }
24
+ message AggregateRef {
25
+ optional string kind = 1 [json_name = "kind"];
26
+ Id id = 2 [json_name = "id"];
27
+ }
28
+ message VersionedRef {
29
+ AggregateRef root = 1 [json_name = "root"];
30
+ Revision revision = 2 [json_name = "revision"];
31
+ optional string sha256 = 3 [json_name = "sha256"];
32
+ }
33
+ enum EffectCertainty {
34
+ EFFECT_CERTAINTY_UNSPECIFIED = 0;
35
+ EFFECT_CERTAINTY_DID_NOT_HAPPEN = 1;
36
+ EFFECT_CERTAINTY_HAPPENED = 2;
37
+ EFFECT_CERTAINTY_UNKNOWN = 3;
38
+ }
39
+ enum RetryMode {
40
+ RETRY_MODE_UNSPECIFIED = 0;
41
+ RETRY_MODE_NEVER = 1;
42
+ RETRY_MODE_SAME_COMMAND = 2;
43
+ RETRY_MODE_AFTER_TIME = 3;
44
+ RETRY_MODE_RECONCILE = 4;
45
+ }
46
+ enum ErrorCategory {
47
+ ERROR_CATEGORY_UNSPECIFIED = 0;
48
+ ERROR_CATEGORY_VALIDATION = 1;
49
+ ERROR_CATEGORY_AUTHENTICATION = 2;
50
+ ERROR_CATEGORY_AUTHORIZATION = 3;
51
+ ERROR_CATEGORY_ENTITLEMENT = 4;
52
+ ERROR_CATEGORY_CONFLICT = 5;
53
+ ERROR_CATEGORY_STATE = 6;
54
+ ERROR_CATEGORY_RESOURCE = 7;
55
+ ERROR_CATEGORY_EXECUTION = 8;
56
+ ERROR_CATEGORY_INTERNAL = 9;
57
+ }
58
+ message Receipt {
59
+ Id command_id = 1 [json_name = "commandId"];
60
+ Revision result_revision = 2 [json_name = "resultRevision"];
61
+ optional EffectCertainty effect = 3 [json_name = "effect"];
62
+ }
63
+ message ApplicationScope {
64
+ optional string product_id = 1 [json_name = "productId"];
65
+ Id installation_id = 2 [json_name = "installationId"];
66
+ }
67
+ message RequestMeta {
68
+ Id command_id = 1 [json_name = "commandId"];
69
+ Revision expected_rev = 2 [json_name = "expectedRev"];
70
+ Id correlation_id = 3 [json_name = "correlationId"];
71
+ Id workspace_id = 4 [json_name = "workspaceId"];
72
+ LocalNotesVersion expected_local = 5 [json_name = "expectedLocal"];
73
+ NativeContentRev expected_native = 6 [json_name = "expectedNative"];
74
+ optional uint64 recovery_generation = 7 [json_name = "recoveryGeneration"];
75
+ ApplicationScope application_scope = 8 [json_name = "applicationScope"];
76
+ }
77
+ message ResponseMeta {
78
+ Revision result_rev = 1 [json_name = "resultRev"];
79
+ optional int64 entitlement_version = 2 [json_name = "entitlementVersion"];
80
+ repeated string warnings = 3 [json_name = "warnings"];
81
+ Id correlation_id = 4 [json_name = "correlationId"];
82
+ optional uint64 recovery_generation = 5 [json_name = "recoveryGeneration"];
83
+ }
84
+ message ArcError {
85
+ optional string code = 1 [json_name = "code"];
86
+ optional ErrorCategory category = 2 [json_name = "category"];
87
+ optional string message_key = 3 [json_name = "messageKey"];
88
+ RetryAdvice retry = 4 [json_name = "retry"];
89
+ optional EffectCertainty effect = 5 [json_name = "effect"];
90
+ Id correlation_id = 6 [json_name = "correlationId"];
91
+ ErrorDetails details = 7 [json_name = "details"];
92
+ }
93
+ message RetryAdvice {
94
+ optional RetryMode mode = 1 [json_name = "mode"];
95
+ Instant retry_at = 2 [json_name = "retryAt"];
96
+ optional string reconciliation_operation = 3 [json_name = "reconciliationOperation"];
97
+ }
98
+ message ErrorDetails {
99
+ oneof detail {
100
+ RevisionConflict revision = 1 [json_name = "revision"];
101
+ LimitFailure limit = 2 [json_name = "limit"];
102
+ VersionFailure upgrade = 3 [json_name = "upgrade"];
103
+ StateFailure state = 4 [json_name = "state"];
104
+ }
105
+ }
106
+ message RevisionConflict {
107
+ Revision expected = 1 [json_name = "expected"];
108
+ Revision actual = 2 [json_name = "actual"];
109
+ Id conflict_id = 3 [json_name = "conflictId"];
110
+ }
111
+ message LimitFailure {
112
+ optional string limit_name = 1 [json_name = "limitName"];
113
+ Decimal maximum = 2 [json_name = "maximum"];
114
+ Decimal available = 3 [json_name = "available"];
115
+ Instant recovery_at = 4 [json_name = "recoveryAt"];
116
+ }
117
+ message VersionFailure {
118
+ optional string min_readable = 1 [json_name = "minReadable"];
119
+ optional string min_writable = 2 [json_name = "minWritable"];
120
+ optional string received = 3 [json_name = "received"];
121
+ }
122
+ message StateFailure {
123
+ optional string state = 1 [json_name = "state"];
124
+ optional string reason = 2 [json_name = "reason"];
125
+ AggregateRef resource = 3 [json_name = "resource"];
126
+ LocalNotesVersion local = 4 [json_name = "local"];
127
+ NativeContentRev native = 5 [json_name = "native"];
128
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ syntax = "proto3";
3
+
4
+ package arcforges.hello.v1;
5
+
6
+ option csharp_namespace = "ArcForges.Contracts.Hello.V1";
7
+ option java_package = "io.github.arcforges.contracts.hello.v1";
8
+ option java_multiple_files = true;
9
+ option java_outer_classname = "HelloProto";
10
+
11
+ // Packaging and transport demonstration, not a product API.
12
+ service HelloService {
13
+ // Returns "Hello, <name>!". An empty name returns INVALID_ARGUMENT.
14
+ rpc SayHello(SayHelloRequest) returns (SayHelloResponse);
15
+ }
16
+
17
+ message SayHelloRequest {
18
+ string name = 1;
19
+ }
20
+
21
+ message SayHelloResponse {
22
+ string message = 1;
23
+ }
package/source.json CHANGED
@@ -1,16 +1,35 @@
1
1
  {
2
2
  "repository": "https://github.com/ArcForges/Contracts",
3
- "commit": "9f0e90f65d57f405fcee311d467a57a255dfd644",
3
+ "commit": "0fbb746d3bd46c507a939e2901504f390e7cd2e2",
4
4
  "dirty": false,
5
- "version": "1.0.0-ci.74.1",
6
- "schema": "arcforges.hello.v1",
7
- "descriptorSha256": "7219a8d730978bcc3b7b8769e159d06711dff3f2b07715a6d487589f8c09b99c",
5
+ "version": "1.0.0-ci.82.1",
6
+ "contractAccess": "public",
7
+ "schemaSources": {
8
+ "public/http/v1/inventory.schema.json": "fb6929548278f6e16e61491001fecae4143882efbfe732950a1584e1e2f80a5d",
9
+ "public/http/v1/schema.json": "23587b33320fcbe4a917c2839552984eb40e716c4ce317a5c218f35bedf06751",
10
+ "public/proto/arcforges/events/v1/events.proto": "ea0ac740c06bbb5b81724b4a7e601110424cabc4940b07e579cf97d852880f43",
11
+ "public/proto/arcforges/foundation/v1/foundation.proto": "9445c5229ff92c2376fb8bfb49ca98b4503441636544795b9853fba3cd25bdb6",
12
+ "public/proto/arcforges/hello/v1/hello.proto": "92489f89d1898a3d3bbea56c72116416cd0152ae8866c98745739437020c67d9"
13
+ },
14
+ "descriptorSha256": "1d9e586eee777509104447b60295d2af63a588f2885555763e8fc598e7d8d3c5",
8
15
  "dependencyLocks": {
9
- "package-lock.json": "5ccbb6790ac9f6995b28d33a66f9c06192eeed2434892bdae8f9badde1614f7d",
10
- "PublicApi/packages.lock.json": "6081ad4fb578234a0fb55b07cc28f635269fc9441be05a1d7c484bc423c25706",
11
- "gradle.lockfile": "410eb7817f1bdf23eb5c2563b1953c4c2ee0403d54f687cb1ccdf82c0bd816de",
16
+ "package-lock.json": "9315666370bc19c05eed6023ef932f1c5305fe52cd64da4af74cbfe114c3681f",
17
+ "src/public/dotnet/ArcForges.Contracts.Foundation/packages.lock.json": "fa17fe6057706e36ae0b9370a457536d05d0f3a8f0f72df622881bfc1628337e",
18
+ "src/public/dotnet/ArcForges.Contracts.PublicApi/packages.lock.json": "6081ad4fb578234a0fb55b07cc28f635269fc9441be05a1d7c484bc423c25706",
19
+ "src/public/dotnet/ArcForges.Contracts.Events/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
20
+ "src/public/dotnet/ArcForges.Sdk.Contracts/packages.lock.json": "0244d57ce10e1aaf95d4e29c6d5794684c3a1e7bc64ba6543cf3232a08a3851b",
21
+ "src/public/dotnet/ArcForges.Contracts.Validation/packages.lock.json": "33ce7598a49127dbadcd5cac91b76f27bce523a5d226596df2bb3cc488317e52",
22
+ "src/public/dotnet/ArcForges.Sdk.Client/packages.lock.json": "4a9cd785831a5d0785bc43867548f2e6c4052552b1bd1734bd22166c925af61f",
23
+ "src/public/dotnet/ArcForges.Cli/packages.lock.json": "09563c12da99098f1aed0d2966cd8e45509e4b2b6a2a13cfc01dbb212128d858",
24
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Platform/packages.lock.json": "fa17fe6057706e36ae0b9370a457536d05d0f3a8f0f72df622881bfc1628337e",
25
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Sandbox/packages.lock.json": "fa17fe6057706e36ae0b9370a457536d05d0f3a8f0f72df622881bfc1628337e",
26
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Chat/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
27
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Notes/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
28
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Scope/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
29
+ "src/internal/dotnet/ArcForges.Contracts.LocalRpc.Slate/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
30
+ "src/internal/dotnet/ArcForges.Contracts.CloudInternal/packages.lock.json": "bfc4981894f94a4ee6f2518f6e1f5997d7d20e17749125c5711794cd2ee10d94",
31
+ "gradle.lockfile": "b176c43fe3fdb8fc99e36c8ccafc6dd1c07c2a2c0c0e9e5cbb3a328b70d128df",
12
32
  "src/public/kotlin/contract-fixtures/gradle.lockfile": "14dc5803d23ab183aa24b2849ee51541e52e4d26fbada80e19082d15e0b1c654",
13
- "src/public/kotlin/contracts-client/gradle.lockfile": "8f73565fdf42782b54bc63075e9daa435f7301dcee0654657f47235975e640ce",
14
33
  "src/public/kotlin/contracts-connect-client/gradle.lockfile": "560f3bf8fa2d38cc4b9a87717342c7a3e003ed1243f405519f5b73e6de0acfb9",
15
34
  "src/public/kotlin/contracts-proto/gradle.lockfile": "766ba7a9c4101ae5149d0200ddc2bfc45d54aa1e3187717171a1dfab28a1ec4b"
16
35
  }