@claudian-collab/protocol 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -62,18 +62,24 @@ part of the public surface.
62
62
 
63
63
  Package SemVer, canonical wire version, and Cloud binding version are independent concepts.
64
64
 
65
- - **Package version** (this `package.json`): `2.0.0`. Patch releases preserve
65
+ - **Package version** (this `package.json`): `3.1.0`. Patch releases preserve
66
66
  every existing public declaration and runtime behavior baseline. Minor
67
67
  releases may add backward-compatible API. Removing or changing an existing
68
68
  declaration, export, runtime behavior, codec, error, limit, ref rule,
69
- operation, or compatibility rule requires a major release. The package
70
- version never signals wire compatibility by itself.
71
- - **Wire version** (`COLLAB_PROTOCOL_VERSION`): currently `5`. The supported
72
- range is exactly `[5, 5]`. This is independent from Cloud binding version `2` and the existing application
73
- LAN control version `9`. Any change to an envelope, DTO, or operation
74
- payload shape, or to the operation inventory, is wire-breaking and requires
75
- a new wire-protocol version.
76
- - **Cloud binding version** (`COLLAB_CLOUD_BINDING_VERSION`): currently `2`. It versions Cloud routes, bounded transfer streams, and capabilities independently from package and wire versions. Binding v1 and wire v4 are unsupported rather than translated or dual-interpreted.
69
+ operation, or compatibility rule requires a major release. An independently
70
+ proven additive control operation may use a package minor release without a
71
+ wire-version increase; existing operation declarations and fixtures must stay
72
+ exact. Package 3 and wire 6 support exact transfer-claim batches and a
73
+ source-pinned target receipt verifier. The package version never signals wire
74
+ compatibility by itself.
75
+ - **Wire version** (`COLLAB_PROTOCOL_VERSION`): currently `6`. The supported
76
+ range is exactly `[6, 6]`. This is independent from Cloud binding version `2` and the existing application
77
+ LAN control version `9`. Any change to an existing envelope, DTO, operation
78
+ payload shape, or operation definition is wire-breaking and requires a new
79
+ wire-protocol version. A strictly additive operation may remain on the
80
+ current wire version when the compatibility classifier proves that every
81
+ existing operation contract is unchanged.
82
+ - **Cloud binding version** (`COLLAB_CLOUD_BINDING_VERSION`): currently `2`. It versions Cloud routes, bounded transfer streams, and capabilities independently from package and wire versions. Binding v1 and wire versions before v6 are unsupported rather than translated or dual-interpreted.
77
83
 
78
84
  ### Compatibility behavior
79
85
 
@@ -141,6 +141,15 @@ export interface GetProjectAuthorityTransferRequest {
141
141
  readonly projectId: CollabProjectId;
142
142
  readonly transferId: string;
143
143
  }
144
+ export type GetAuthorityTransferReceiptVerifierRequest = GetProjectAuthorityTransferRequest;
145
+ export interface CollabAuthorityTransferReceiptVerifier {
146
+ readonly projectId: CollabProjectId;
147
+ readonly receiptKeyId: string;
148
+ readonly receiptPublicKey: string;
149
+ readonly receiptPublicKeyEncoding: 'base64url-raw';
150
+ readonly signatureAlgorithm: 'ed25519';
151
+ readonly transferId: string;
152
+ }
144
153
  export interface RotateTransferredMembershipClaimsRequest extends CollabAuthorityMutationRequest {
145
154
  readonly expectedBatchRevision: number;
146
155
  readonly expectedBatchSha256: string;
@@ -209,7 +218,7 @@ export interface CancelProjectAuthorityTransferRequest extends CollabAuthorityMu
209
218
  readonly expectedPhase: CollabAuthorityTransferCancellablePhase;
210
219
  readonly transferId: string;
211
220
  }
212
- export declare const COLLAB_AUTHORITY_TRANSFER_OPERATIONS: readonly ["requestLanToCloudTransfer", "acceptLanToCloudTransferTarget", "beginLanToCloudTransfer", "getProjectAuthorityTransfer", "rotateTransferredMembershipClaims", "acknowledgeTransferredMembershipClaimBatch", "getTransferredMembershipClaim", "claimTransferredMembership", "acknowledgeTransferredMembershipClaimRedemption", "commitLanToCloudRelinquishment", "beginCloudToLanTransfer", "acceptCloudToLanTransferTarget", "reportCloudToLanTargetStaged", "confirmCloudToLanTargetActive", "cancelProjectAuthorityTransfer"];
221
+ export declare const COLLAB_AUTHORITY_TRANSFER_OPERATIONS: readonly ["requestLanToCloudTransfer", "acceptLanToCloudTransferTarget", "beginLanToCloudTransfer", "getProjectAuthorityTransfer", "getAuthorityTransferReceiptVerifier", "rotateTransferredMembershipClaims", "acknowledgeTransferredMembershipClaimBatch", "getTransferredMembershipClaim", "claimTransferredMembership", "acknowledgeTransferredMembershipClaimRedemption", "commitLanToCloudRelinquishment", "beginCloudToLanTransfer", "acceptCloudToLanTransferTarget", "reportCloudToLanTargetStaged", "confirmCloudToLanTargetActive", "cancelProjectAuthorityTransfer"];
213
222
  export type CollabAuthorityTransferOperation = typeof COLLAB_AUTHORITY_TRANSFER_OPERATIONS[number];
214
223
  export interface CollabAuthorityTransferOperationMap {
215
224
  readonly requestLanToCloudTransfer: {
@@ -228,6 +237,10 @@ export interface CollabAuthorityTransferOperationMap {
228
237
  readonly request: GetProjectAuthorityTransferRequest;
229
238
  readonly response: CollabAuthorityTransferStatus;
230
239
  };
240
+ readonly getAuthorityTransferReceiptVerifier: {
241
+ readonly request: GetAuthorityTransferReceiptVerifierRequest;
242
+ readonly response: CollabAuthorityTransferReceiptVerifier;
243
+ };
231
244
  readonly rotateTransferredMembershipClaims: {
232
245
  readonly request: RotateTransferredMembershipClaimsRequest;
233
246
  readonly response: CollabTransferredMembershipClaimBatch;
@@ -64,6 +64,7 @@ exports.COLLAB_AUTHORITY_TRANSFER_OPERATIONS = Object.freeze([
64
64
  'acceptLanToCloudTransferTarget',
65
65
  'beginLanToCloudTransfer',
66
66
  'getProjectAuthorityTransfer',
67
+ 'getAuthorityTransferReceiptVerifier',
67
68
  'rotateTransferredMembershipClaims',
68
69
  'acknowledgeTransferredMembershipClaimBatch',
69
70
  'getTransferredMembershipClaim',
@@ -223,7 +224,7 @@ function decodeCollabTransferredMembershipClaimBatch(value) {
223
224
  'targetAuthorityGeneration',
224
225
  'transferId',
225
226
  ]);
226
- if (!Array.isArray(source.claims) || source.claims.length === 0) {
227
+ if (!Array.isArray(source.claims)) {
227
228
  throw invalidPayload('claims');
228
229
  }
229
230
  const claims = source.claims.map(claimItem);
@@ -627,6 +628,24 @@ function decodeGetProjectAuthorityTransfer(value) {
627
628
  transferId: token(source, 'transferId'),
628
629
  };
629
630
  }
631
+ function decodeAuthorityTransferReceiptVerifier(value) {
632
+ const source = exactRecord(value, 'receiptVerifier', [
633
+ 'projectId',
634
+ 'receiptKeyId',
635
+ 'receiptPublicKey',
636
+ 'receiptPublicKeyEncoding',
637
+ 'signatureAlgorithm',
638
+ 'transferId',
639
+ ]);
640
+ return {
641
+ projectId: token(source, 'projectId', CollabValidation_1.isCollabProjectId),
642
+ receiptKeyId: boundedString(source, 'receiptKeyId', 256),
643
+ receiptPublicKey: fixedBase64url(source, 'receiptPublicKey', 32),
644
+ receiptPublicKeyEncoding: literal(source, 'receiptPublicKeyEncoding', ['base64url-raw']),
645
+ signatureAlgorithm: literal(source, 'signatureAlgorithm', ['ed25519']),
646
+ transferId: token(source, 'transferId'),
647
+ };
648
+ }
630
649
  function decodeRotateTransferredMembershipClaims(value) {
631
650
  const source = exactRecord(value, 'request', [
632
651
  'expectedBatchRevision',
@@ -820,6 +839,8 @@ function decodeCollabAuthorityTransferOperationRequest(operation, value) {
820
839
  case 'acceptLanToCloudTransferTarget': return decodeAcceptLanToCloudTransferTarget(value);
821
840
  case 'beginLanToCloudTransfer': return decodeBeginLanToCloudTransfer(value);
822
841
  case 'getProjectAuthorityTransfer': return decodeGetProjectAuthorityTransfer(value);
842
+ case 'getAuthorityTransferReceiptVerifier':
843
+ return decodeGetProjectAuthorityTransfer(value);
823
844
  case 'rotateTransferredMembershipClaims':
824
845
  return decodeRotateTransferredMembershipClaims(value);
825
846
  case 'acknowledgeTransferredMembershipClaimBatch':
@@ -869,6 +890,8 @@ function decodeCollabAuthorityTransferOperationResponse(operation, value) {
869
890
  return decodeCollabTransferredMembershipRedemptionReceipt(value);
870
891
  case 'acknowledgeTransferredMembershipClaimRedemption':
871
892
  return decodeRedemptionAcknowledgement(value);
893
+ case 'getAuthorityTransferReceiptVerifier':
894
+ return decodeAuthorityTransferReceiptVerifier(value);
872
895
  default:
873
896
  return decodeCollabAuthorityTransferStatus(value);
874
897
  }
@@ -1,4 +1,4 @@
1
- export declare const COLLAB_PROTOCOL_VERSION: 5;
1
+ export declare const COLLAB_PROTOCOL_VERSION: 6;
2
2
  export declare const COLLAB_MAIN_REF: "refs/heads/main";
3
3
  export declare const COLLAB_MEMBER_REF_PREFIX: "refs/heads/members/";
4
4
  export declare const COLLAB_LIMITS: Readonly<{
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.COLLAB_LIMITS = exports.COLLAB_MEMBER_REF_PREFIX = exports.COLLAB_MAIN_REF = exports.COLLAB_PROTOCOL_VERSION = void 0;
4
- exports.COLLAB_PROTOCOL_VERSION = 5;
4
+ exports.COLLAB_PROTOCOL_VERSION = 6;
5
5
  exports.COLLAB_MAIN_REF = 'refs/heads/main';
6
6
  exports.COLLAB_MEMBER_REF_PREFIX = 'refs/heads/members/';
7
7
  exports.COLLAB_LIMITS = Object.freeze({
@@ -27,6 +27,7 @@ export declare const COLLAB_CONTROL_OPERATION_CODECS: Readonly<{
27
27
  readonly acceptLanToCloudTransferTarget: CollabControlOperationCodec<import("./CollabAuthorityTransfer").AcceptLanToCloudTransferTargetRequest, import("./CollabAuthorityTransfer").CollabAuthorityTransferStatus>;
28
28
  readonly beginLanToCloudTransfer: CollabControlOperationCodec<import("./CollabAuthorityTransfer").BeginLanToCloudTransferRequest, import("./CollabAuthorityTransfer").CollabAuthorityTransferStatus>;
29
29
  readonly getProjectAuthorityTransfer: CollabControlOperationCodec<import("./CollabAuthorityTransfer").GetProjectAuthorityTransferRequest, import("./CollabAuthorityTransfer").CollabAuthorityTransferStatus>;
30
+ readonly getAuthorityTransferReceiptVerifier: CollabControlOperationCodec<import("./CollabAuthorityTransfer").GetProjectAuthorityTransferRequest, import("./CollabAuthorityTransfer").CollabAuthorityTransferReceiptVerifier>;
30
31
  readonly rotateTransferredMembershipClaims: CollabControlOperationCodec<import("./CollabAuthorityTransfer").RotateTransferredMembershipClaimsRequest, import("./CollabAuthorityTransfer").CollabTransferredMembershipClaimBatch>;
31
32
  readonly acknowledgeTransferredMembershipClaimBatch: CollabControlOperationCodec<import("./CollabAuthorityTransfer").AcknowledgeTransferredMembershipClaimBatchRequest, import("./CollabAuthorityTransfer").CollabTransferredMembershipClaimCustodyReceipt>;
32
33
  readonly getTransferredMembershipClaim: CollabControlOperationCodec<import("./CollabAuthorityTransfer").GetTransferredMembershipClaimRequest, import("./CollabAuthorityTransfer").CollabTransferredMembershipClaim>;
@@ -81,6 +81,7 @@ exports.COLLAB_CONTROL_OPERATION_CODECS = Object.freeze({
81
81
  acceptLanToCloudTransferTarget: codec('acceptLanToCloudTransferTarget'),
82
82
  beginLanToCloudTransfer: codec('beginLanToCloudTransfer'),
83
83
  getProjectAuthorityTransfer: codec('getProjectAuthorityTransfer'),
84
+ getAuthorityTransferReceiptVerifier: codec('getAuthorityTransferReceiptVerifier'),
84
85
  rotateTransferredMembershipClaims: codec('rotateTransferredMembershipClaims'),
85
86
  acknowledgeTransferredMembershipClaimBatch: codec('acknowledgeTransferredMembershipClaimBatch'),
86
87
  getTransferredMembershipClaim: codec('getTransferredMembershipClaim'),
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { COLLAB_LIMITS, COLLAB_MAIN_REF, COLLAB_MEMBER_REF_PREFIX, COLLAB_PROTOCOL_VERSION, } from './CollabConstants';
2
2
  export type { CollabProtocolVersion } from './CollabConstants';
3
3
  export { COLLAB_AUTHORITY_TRANSFER_CANCELLABLE_PHASES, COLLAB_AUTHORITY_TRANSFER_CANCELLATION_PHASES, COLLAB_AUTHORITY_TRANSFER_OPERATIONS, COLLAB_CLOUD_TO_LAN_TRANSFER_PHASES, COLLAB_LAN_TO_CLOUD_TRANSFER_PHASES, decodeCollabAuthorityRelinquishmentProof, decodeCollabAuthorityTransferOperationRequest, decodeCollabAuthorityTransferOperationResponse, decodeCollabAuthorityTransferProposal, decodeCollabAuthorityTransferStatus, decodeCollabTransferredMembershipClaim, decodeCollabTransferredMembershipClaimBatch, decodeCollabTransferredMembershipClaimCustodyReceipt, decodeCollabTransferredMembershipRedemptionReceipt, encodeCollabAuthorityRelinquishmentProofSigningInput, encodeCollabTransferredMembershipClaimBatchDigestInput, encodeCollabTransferredMembershipRedemptionReceiptSigningInput, } from './CollabAuthorityTransfer';
4
- export type { AcceptCloudToLanTransferTargetRequest, AcceptLanToCloudTransferTargetRequest, AcknowledgeTransferredMembershipClaimBatchRequest, AcknowledgeTransferredMembershipClaimRedemptionRequest, BeginCloudToLanTransferRequest, BeginLanToCloudTransferRequest, CancelProjectAuthorityTransferRequest, ClaimTransferredMembershipRequest, CollabAuthorityRelinquishmentProof, CollabAuthorityRelinquishmentProofSigningPayload, CollabAuthorityTransferCancellablePhase, CollabAuthorityTransferCancellationPhase, CollabAuthorityTransferDirection, CollabAuthorityTransferOperation, CollabAuthorityTransferOperationMap, CollabAuthorityTransferProposal, CollabAuthorityTransferStatus, CollabCloudToLanTransferPhase, CollabLanToCloudTransferPhase, CollabTransferredMembershipClaim, CollabTransferredMembershipClaimBatch, CollabTransferredMembershipClaimCustodyReceipt, CollabTransferredMembershipClaimItem, CollabTransferredMembershipRedemptionAcknowledgement, CollabTransferredMembershipRedemptionReceipt, CollabTransferredMembershipRedemptionReceiptSigningPayload, CommitLanToCloudRelinquishmentRequest, ConfirmCloudToLanTargetActiveRequest, GetProjectAuthorityTransferRequest, GetTransferredMembershipClaimRequest, ReportCloudToLanTargetStagedRequest, RequestLanToCloudTransferRequest, RotateTransferredMembershipClaimsRequest, } from './CollabAuthorityTransfer';
4
+ export type { AcceptCloudToLanTransferTargetRequest, AcceptLanToCloudTransferTargetRequest, AcknowledgeTransferredMembershipClaimBatchRequest, AcknowledgeTransferredMembershipClaimRedemptionRequest, BeginCloudToLanTransferRequest, BeginLanToCloudTransferRequest, CancelProjectAuthorityTransferRequest, ClaimTransferredMembershipRequest, CollabAuthorityRelinquishmentProof, CollabAuthorityRelinquishmentProofSigningPayload, CollabAuthorityTransferCancellablePhase, CollabAuthorityTransferCancellationPhase, CollabAuthorityTransferDirection, CollabAuthorityTransferOperation, CollabAuthorityTransferOperationMap, CollabAuthorityTransferProposal, CollabAuthorityTransferReceiptVerifier, CollabAuthorityTransferStatus, CollabCloudToLanTransferPhase, CollabLanToCloudTransferPhase, CollabTransferredMembershipClaim, CollabTransferredMembershipClaimBatch, CollabTransferredMembershipClaimCustodyReceipt, CollabTransferredMembershipClaimItem, CollabTransferredMembershipRedemptionAcknowledgement, CollabTransferredMembershipRedemptionReceipt, CollabTransferredMembershipRedemptionReceiptSigningPayload, CommitLanToCloudRelinquishmentRequest, ConfirmCloudToLanTargetActiveRequest, GetProjectAuthorityTransferRequest, GetAuthorityTransferReceiptVerifierRequest, GetTransferredMembershipClaimRequest, ReportCloudToLanTargetStagedRequest, RequestLanToCloudTransferRequest, RotateTransferredMembershipClaimsRequest, } from './CollabAuthorityTransfer';
5
5
  export { COLLAB_CHECKPOINT_ARTIFACT_LIMITS, COLLAB_CHECKPOINT_BACKUP_RECORD_KINDS, COLLAB_CHECKPOINT_PORTABLE_RECORD_KINDS, COLLAB_CHECKPOINT_PROFILES, COLLAB_PROJECT_CHECKPOINT_ARTIFACTS, COLLAB_PROJECT_CHECKPOINT_MANIFEST_SCHEMA_VERSION, COLLAB_PROJECT_COORDINATION_FORMAT_VERSION, COLLAB_PROTECTED_CLAIM_ENVELOPE_LIMITS, COLLAB_PROTECTED_CLAIM_ENVELOPE_VERSION, decodeCollabProjectCheckpointCoordinationNdjson, decodeCollabProjectCheckpointManifest, encodeCollabProjectCheckpointCoordinationNdjson, encodeCollabProjectCheckpointManifestCanonicalJson, encodeCollabProjectCheckpointManifestDigestInput, encodeCollabProtectedClaimAssociatedData, validateCollabProjectCheckpointConsistency, } from './CollabProjectCheckpoint';
6
6
  export type { CollabCheckpointArtifactFact, CollabCheckpointAuthorityVolumePairRecord, CollabCheckpointAuthority, CollabCheckpointAuthorityKind, CollabCheckpointBackupRecord, CollabCheckpointBackupRecordKind, CollabCheckpointCloudEventCursorRecord, CollabCheckpointCloudEventRecord, CollabCheckpointGitRef, CollabCheckpointIdempotencyResultRecord, CollabCheckpointLifecycleStateRecord, CollabCheckpointMemberRecord, CollabCheckpointObjectFormat, CollabCheckpointPortableRecord, CollabCheckpointPortableRecordKind, CollabCheckpointProfile, CollabCheckpointPrincipalBindingRecord, CollabCheckpointProjectRecord, CollabCheckpointProtectedClaimEnvelopeRecord, CollabCheckpointRepositoryPlacementRecord, CollabCheckpointRequestCommentRecord, CollabCheckpointRequestRecord, CollabCheckpointTicketCommentRecord, CollabCheckpointTicketMentionRecord, CollabCheckpointTicketRecord, CollabCheckpointTicketRelationRecord, CollabCheckpointSchemaCatalogRecord, CollabCheckpointServerCompatibilityRecord, CollabCheckpointTerminalResponderRecord, CollabCheckpointTerminalAcknowledgement, CollabCheckpointTombstoneRecord, CollabProjectCheckpointManifest, CollabProtectedClaimAssociatedData, } from './CollabProjectCheckpoint';
7
7
  export { COLLAB_PROJECT_RETIREMENT_OPERATIONS, COLLAB_PROJECT_RETIREMENT_RESULT_KINDS, decodeCollabProjectRetirementAcknowledgement, decodeCollabProjectRetirementOperationRequest, decodeCollabProjectRetirementOperationResponse, decodeCollabProjectRetirementRequest, decodeCollabProjectRetirementResult, } from './CollabProjectRetirement';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudian-collab/protocol",
3
- "version": "2.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "Canonical Collab wire and Cloud binding contract for Claudian clients and servers.",
5
5
  "license": "MIT",
6
6
  "repository": {