From 2ed7f3e28d5ca3fae54419720c11bcd3257b672d Mon Sep 17 00:00:00 2001 From: Jonathan Haas Date: Sat, 11 Jul 2026 06:58:16 -0700 Subject: [PATCH] fix(identity): bridge workspace token fields --- gen/go/identity/v1/tokens.pb.go | 24 ++++++++++++++--- gen/openapi/identity/v1/tokens.openapi.yaml | 6 +++++ gen/python/identity/v1/tokens_pb2.py | 28 ++++++++++---------- gen/ts/identity/v1/tokens_pb.ts | 14 ++++++++-- proto/identity/v1/tokens.proto | 2 ++ scripts/test_identity_workspace_compat.py | 29 +++++++++++++++++++++ 6 files changed, 84 insertions(+), 19 deletions(-) create mode 100644 scripts/test_identity_workspace_compat.py diff --git a/gen/go/identity/v1/tokens.pb.go b/gen/go/identity/v1/tokens.pb.go index a940f75..669a20c 100644 --- a/gen/go/identity/v1/tokens.pb.go +++ b/gen/go/identity/v1/tokens.pb.go @@ -87,6 +87,7 @@ type IntrospectResponse struct { Name string `protobuf:"bytes,13,opt,name=name,proto3" json:"name,omitempty"` ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` IssuedAt *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=issued_at,json=issuedAt,proto3" json:"issued_at,omitempty"` + WorkspaceId string `protobuf:"bytes,27,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -226,12 +227,20 @@ func (x *IntrospectResponse) GetIssuedAt() *timestamppb.Timestamp { return nil } +func (x *IntrospectResponse) GetWorkspaceId() string { + if x != nil { + return x.WorkspaceId + } + return "" +} + type IssueServiceTokenRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` OrganizationId string `protobuf:"bytes,2,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` Scopes []string `protobuf:"bytes,3,rep,name=scopes,proto3" json:"scopes,omitempty"` TtlSeconds int32 `protobuf:"varint,4,opt,name=ttl_seconds,json=ttlSeconds,proto3" json:"ttl_seconds,omitempty"` + WorkspaceId string `protobuf:"bytes,5,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -294,6 +303,13 @@ func (x *IssueServiceTokenRequest) GetTtlSeconds() int32 { return 0 } +func (x *IssueServiceTokenRequest) GetWorkspaceId() string { + if x != nil { + return x.WorkspaceId + } + return "" +} + type IssueServiceTokenResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` @@ -502,7 +518,7 @@ const file_identity_v1_tokens_proto_rawDesc = "" + "\n" + "\x18identity/v1/tokens.proto\x12\videntity.v1\x1a\x1fgoogle/protobuf/timestamp.proto\")\n" + "\x11IntrospectRequest\x12\x14\n" + - "\x05token\x18\x01 \x01(\tR\x05token\"\xf5\x03\n" + + "\x05token\x18\x01 \x01(\tR\x05token\"\x98\x04\n" + "\x12IntrospectResponse\x12\x16\n" + "\x06active\x18\x01 \x01(\bR\x06active\x12\x18\n" + "\asubject\x18\x02 \x01(\tR\asubject\x12\x1d\n" + @@ -522,13 +538,15 @@ const file_identity_v1_tokens_proto_rawDesc = "" + "\x04name\x18\r \x01(\tR\x04name\x129\n" + "\n" + "expires_at\x18\x0e \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt\x127\n" + - "\tissued_at\x18\x0f \x01(\v2\x1a.google.protobuf.TimestampR\bissuedAt\"\x96\x01\n" + + "\tissued_at\x18\x0f \x01(\v2\x1a.google.protobuf.TimestampR\bissuedAt\x12!\n" + + "\fworkspace_id\x18\x1b \x01(\tR\vworkspaceId\"\xb9\x01\n" + "\x18IssueServiceTokenRequest\x12\x18\n" + "\aservice\x18\x01 \x01(\tR\aservice\x12'\n" + "\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\x16\n" + "\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x1f\n" + "\vttl_seconds\x18\x04 \x01(\x05R\n" + - "ttlSeconds\"l\n" + + "ttlSeconds\x12!\n" + + "\fworkspace_id\x18\x05 \x01(\tR\vworkspaceId\"l\n" + "\x19IssueServiceTokenResponse\x12\x14\n" + "\x05token\x18\x01 \x01(\tR\x05token\x129\n" + "\n" + diff --git a/gen/openapi/identity/v1/tokens.openapi.yaml b/gen/openapi/identity/v1/tokens.openapi.yaml index dfd5b9b..502e25b 100644 --- a/gen/openapi/identity/v1/tokens.openapi.yaml +++ b/gen/openapi/identity/v1/tokens.openapi.yaml @@ -268,6 +268,9 @@ components: issuedAt: title: issued_at $ref: '#/components/schemas/google.protobuf.Timestamp' + workspaceId: + type: string + title: workspace_id title: IntrospectResponse additionalProperties: false description: |- @@ -346,6 +349,9 @@ components: type: integer title: ttl_seconds format: int32 + workspaceId: + type: string + title: workspace_id title: IssueServiceTokenRequest additionalProperties: false identity.v1.IssueServiceTokenResponse: diff --git a/gen/python/identity/v1/tokens_pb2.py b/gen/python/identity/v1/tokens_pb2.py index 593b666..cd855fe 100644 --- a/gen/python/identity/v1/tokens_pb2.py +++ b/gen/python/identity/v1/tokens_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: identity/v1/tokens.proto -# Protobuf Python Version: 7.35.0 +# Protobuf Python Version: 7.35.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -13,7 +13,7 @@ _runtime_version.Domain.PUBLIC, 7, 35, - 0, + 1, '', 'identity/v1/tokens.proto' ) @@ -25,7 +25,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18identity/v1/tokens.proto\x12\x0bidentity.v1\x1a\x1fgoogle/protobuf/timestamp.proto\")\n\x11IntrospectRequest\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\"\xf5\x03\n\x12IntrospectResponse\x12\x16\n\x06\x61\x63tive\x18\x01 \x01(\x08R\x06\x61\x63tive\x12\x18\n\x07subject\x18\x02 \x01(\tR\x07subject\x12\x1d\n\ntoken_type\x18\x03 \x01(\tR\ttokenType\x12\x18\n\x07service\x18\x04 \x01(\tR\x07service\x12\'\n\x0forganization_id\x18\x05 \x01(\tR\x0eorganizationId\x12\x16\n\x06scopes\x18\x06 \x03(\tR\x06scopes\x12\x1d\n\nagent_type\x18\x07 \x01(\tR\tagentType\x12\"\n\x0c\x63\x61pabilities\x18\x08 \x03(\tR\x0c\x63\x61pabilities\x12\x15\n\x06run_id\x18\t \x01(\tR\x05runId\x12\x18\n\x07surface\x18\n \x01(\tR\x07surface\x12!\n\x0cuser_subject\x18\x0b \x01(\tR\x0buserSubject\x12\x14\n\x05\x65mail\x18\x0c \x01(\tR\x05\x65mail\x12\x12\n\x04name\x18\r \x01(\tR\x04name\x12\x39\n\nexpires_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tissued_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08issuedAt\"\x96\x01\n\x18IssueServiceTokenRequest\x12\x18\n\x07service\x18\x01 \x01(\tR\x07service\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x1f\n\x0bttl_seconds\x18\x04 \x01(\x05R\nttlSeconds\"l\n\x19IssueServiceTokenResponse\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"\xd1\x01\n\x16IssueAgentTokenRequest\x12!\n\nagent_type\x18\x01 \x01(\tB\x02\x18\x01R\tagentType\x12&\n\x0c\x63\x61pabilities\x18\x02 \x03(\tB\x02\x18\x01R\x0c\x63\x61pabilities\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x18\n\x07surface\x18\x04 \x01(\tR\x07surface\x12\x1f\n\x0bttl_seconds\x18\x05 \x01(\x05R\nttlSeconds\x12\x19\n\x08\x61gent_id\x18\x06 \x01(\tR\x07\x61gentId\"j\n\x17IssueAgentTokenResponse\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt2\x9f\x02\n\x0cTokenService\x12M\n\nIntrospect\x12\x1e.identity.v1.IntrospectRequest\x1a\x1f.identity.v1.IntrospectResponse\x12\x62\n\x11IssueServiceToken\x12%.identity.v1.IssueServiceTokenRequest\x1a&.identity.v1.IssueServiceTokenResponse\x12\\\n\x0fIssueAgentToken\x12#.identity.v1.IssueAgentTokenRequest\x1a$.identity.v1.IssueAgentTokenResponseB8Z6github.com/evalops/proto/gen/go/identity/v1;identityv1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18identity/v1/tokens.proto\x12\x0bidentity.v1\x1a\x1fgoogle/protobuf/timestamp.proto\")\n\x11IntrospectRequest\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\"\x98\x04\n\x12IntrospectResponse\x12\x16\n\x06\x61\x63tive\x18\x01 \x01(\x08R\x06\x61\x63tive\x12\x18\n\x07subject\x18\x02 \x01(\tR\x07subject\x12\x1d\n\ntoken_type\x18\x03 \x01(\tR\ttokenType\x12\x18\n\x07service\x18\x04 \x01(\tR\x07service\x12\'\n\x0forganization_id\x18\x05 \x01(\tR\x0eorganizationId\x12\x16\n\x06scopes\x18\x06 \x03(\tR\x06scopes\x12\x1d\n\nagent_type\x18\x07 \x01(\tR\tagentType\x12\"\n\x0c\x63\x61pabilities\x18\x08 \x03(\tR\x0c\x63\x61pabilities\x12\x15\n\x06run_id\x18\t \x01(\tR\x05runId\x12\x18\n\x07surface\x18\n \x01(\tR\x07surface\x12!\n\x0cuser_subject\x18\x0b \x01(\tR\x0buserSubject\x12\x14\n\x05\x65mail\x18\x0c \x01(\tR\x05\x65mail\x12\x12\n\x04name\x18\r \x01(\tR\x04name\x12\x39\n\nexpires_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tissued_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08issuedAt\x12!\n\x0cworkspace_id\x18\x1b \x01(\tR\x0bworkspaceId\"\xb9\x01\n\x18IssueServiceTokenRequest\x12\x18\n\x07service\x18\x01 \x01(\tR\x07service\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x1f\n\x0bttl_seconds\x18\x04 \x01(\x05R\nttlSeconds\x12!\n\x0cworkspace_id\x18\x05 \x01(\tR\x0bworkspaceId\"l\n\x19IssueServiceTokenResponse\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\"\xd1\x01\n\x16IssueAgentTokenRequest\x12!\n\nagent_type\x18\x01 \x01(\tB\x02\x18\x01R\tagentType\x12&\n\x0c\x63\x61pabilities\x18\x02 \x03(\tB\x02\x18\x01R\x0c\x63\x61pabilities\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x18\n\x07surface\x18\x04 \x01(\tR\x07surface\x12\x1f\n\x0bttl_seconds\x18\x05 \x01(\x05R\nttlSeconds\x12\x19\n\x08\x61gent_id\x18\x06 \x01(\tR\x07\x61gentId\"j\n\x17IssueAgentTokenResponse\x12\x14\n\x05token\x18\x01 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt2\x9f\x02\n\x0cTokenService\x12M\n\nIntrospect\x12\x1e.identity.v1.IntrospectRequest\x1a\x1f.identity.v1.IntrospectResponse\x12\x62\n\x11IssueServiceToken\x12%.identity.v1.IssueServiceTokenRequest\x1a&.identity.v1.IssueServiceTokenResponse\x12\\\n\x0fIssueAgentToken\x12#.identity.v1.IssueAgentTokenRequest\x1a$.identity.v1.IssueAgentTokenResponseB8Z6github.com/evalops/proto/gen/go/identity/v1;identityv1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -40,15 +40,15 @@ _globals['_INTROSPECTREQUEST']._serialized_start=74 _globals['_INTROSPECTREQUEST']._serialized_end=115 _globals['_INTROSPECTRESPONSE']._serialized_start=118 - _globals['_INTROSPECTRESPONSE']._serialized_end=619 - _globals['_ISSUESERVICETOKENREQUEST']._serialized_start=622 - _globals['_ISSUESERVICETOKENREQUEST']._serialized_end=772 - _globals['_ISSUESERVICETOKENRESPONSE']._serialized_start=774 - _globals['_ISSUESERVICETOKENRESPONSE']._serialized_end=882 - _globals['_ISSUEAGENTTOKENREQUEST']._serialized_start=885 - _globals['_ISSUEAGENTTOKENREQUEST']._serialized_end=1094 - _globals['_ISSUEAGENTTOKENRESPONSE']._serialized_start=1096 - _globals['_ISSUEAGENTTOKENRESPONSE']._serialized_end=1202 - _globals['_TOKENSERVICE']._serialized_start=1205 - _globals['_TOKENSERVICE']._serialized_end=1492 + _globals['_INTROSPECTRESPONSE']._serialized_end=654 + _globals['_ISSUESERVICETOKENREQUEST']._serialized_start=657 + _globals['_ISSUESERVICETOKENREQUEST']._serialized_end=842 + _globals['_ISSUESERVICETOKENRESPONSE']._serialized_start=844 + _globals['_ISSUESERVICETOKENRESPONSE']._serialized_end=952 + _globals['_ISSUEAGENTTOKENREQUEST']._serialized_start=955 + _globals['_ISSUEAGENTTOKENREQUEST']._serialized_end=1164 + _globals['_ISSUEAGENTTOKENRESPONSE']._serialized_start=1166 + _globals['_ISSUEAGENTTOKENRESPONSE']._serialized_end=1272 + _globals['_TOKENSERVICE']._serialized_start=1275 + _globals['_TOKENSERVICE']._serialized_end=1562 # @@protoc_insertion_point(module_scope) diff --git a/gen/ts/identity/v1/tokens_pb.ts b/gen/ts/identity/v1/tokens_pb.ts index 32cc640..e0718e4 100644 --- a/gen/ts/identity/v1/tokens_pb.ts +++ b/gen/ts/identity/v1/tokens_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts,import_extension=.js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=.js" // @generated from file identity/v1/tokens.proto (package identity.v1, syntax proto3) /* eslint-disable */ @@ -12,7 +12,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file identity/v1/tokens.proto. */ export const file_identity_v1_tokens: GenFile = /*@__PURE__*/ - fileDesc("ChhpZGVudGl0eS92MS90b2tlbnMucHJvdG8SC2lkZW50aXR5LnYxIiIKEUludHJvc3BlY3RSZXF1ZXN0Eg0KBXRva2VuGAEgASgJIuACChJJbnRyb3NwZWN0UmVzcG9uc2USDgoGYWN0aXZlGAEgASgIEg8KB3N1YmplY3QYAiABKAkSEgoKdG9rZW5fdHlwZRgDIAEoCRIPCgdzZXJ2aWNlGAQgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgFIAEoCRIOCgZzY29wZXMYBiADKAkSEgoKYWdlbnRfdHlwZRgHIAEoCRIUCgxjYXBhYmlsaXRpZXMYCCADKAkSDgoGcnVuX2lkGAkgASgJEg8KB3N1cmZhY2UYCiABKAkSFAoMdXNlcl9zdWJqZWN0GAsgASgJEg0KBWVtYWlsGAwgASgJEgwKBG5hbWUYDSABKAkSLgoKZXhwaXJlc19hdBgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJaXNzdWVkX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJpChhJc3N1ZVNlcnZpY2VUb2tlblJlcXVlc3QSDwoHc2VydmljZRgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSDgoGc2NvcGVzGAMgAygJEhMKC3R0bF9zZWNvbmRzGAQgASgFIloKGUlzc3VlU2VydmljZVRva2VuUmVzcG9uc2USDQoFdG9rZW4YASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAikgEKFklzc3VlQWdlbnRUb2tlblJlcXVlc3QSFgoKYWdlbnRfdHlwZRgBIAEoCUICGAESGAoMY2FwYWJpbGl0aWVzGAIgAygJQgIYARIOCgZzY29wZXMYAyADKAkSDwoHc3VyZmFjZRgEIAEoCRITCgt0dGxfc2Vjb25kcxgFIAEoBRIQCghhZ2VudF9pZBgGIAEoCSJYChdJc3N1ZUFnZW50VG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcDKfAgoMVG9rZW5TZXJ2aWNlEk0KCkludHJvc3BlY3QSHi5pZGVudGl0eS52MS5JbnRyb3NwZWN0UmVxdWVzdBofLmlkZW50aXR5LnYxLkludHJvc3BlY3RSZXNwb25zZRJiChFJc3N1ZVNlcnZpY2VUb2tlbhIlLmlkZW50aXR5LnYxLklzc3VlU2VydmljZVRva2VuUmVxdWVzdBomLmlkZW50aXR5LnYxLklzc3VlU2VydmljZVRva2VuUmVzcG9uc2USXAoPSXNzdWVBZ2VudFRva2VuEiMuaWRlbnRpdHkudjEuSXNzdWVBZ2VudFRva2VuUmVxdWVzdBokLmlkZW50aXR5LnYxLklzc3VlQWdlbnRUb2tlblJlc3BvbnNlQjhaNmdpdGh1Yi5jb20vZXZhbG9wcy9wcm90by9nZW4vZ28vaWRlbnRpdHkvdjE7aWRlbnRpdHl2MWIGcHJvdG8z", [file_google_protobuf_timestamp]); + fileDesc("ChhpZGVudGl0eS92MS90b2tlbnMucHJvdG8SC2lkZW50aXR5LnYxIiIKEUludHJvc3BlY3RSZXF1ZXN0Eg0KBXRva2VuGAEgASgJIvYCChJJbnRyb3NwZWN0UmVzcG9uc2USDgoGYWN0aXZlGAEgASgIEg8KB3N1YmplY3QYAiABKAkSEgoKdG9rZW5fdHlwZRgDIAEoCRIPCgdzZXJ2aWNlGAQgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgFIAEoCRIOCgZzY29wZXMYBiADKAkSEgoKYWdlbnRfdHlwZRgHIAEoCRIUCgxjYXBhYmlsaXRpZXMYCCADKAkSDgoGcnVuX2lkGAkgASgJEg8KB3N1cmZhY2UYCiABKAkSFAoMdXNlcl9zdWJqZWN0GAsgASgJEg0KBWVtYWlsGAwgASgJEgwKBG5hbWUYDSABKAkSLgoKZXhwaXJlc19hdBgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJaXNzdWVkX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgx3b3Jrc3BhY2VfaWQYGyABKAkifwoYSXNzdWVTZXJ2aWNlVG9rZW5SZXF1ZXN0Eg8KB3NlcnZpY2UYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg4KBnNjb3BlcxgDIAMoCRITCgt0dGxfc2Vjb25kcxgEIAEoBRIUCgx3b3Jrc3BhY2VfaWQYBSABKAkiWgoZSXNzdWVTZXJ2aWNlVG9rZW5SZXNwb25zZRINCgV0b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKSAQoWSXNzdWVBZ2VudFRva2VuUmVxdWVzdBIWCgphZ2VudF90eXBlGAEgASgJQgIYARIYCgxjYXBhYmlsaXRpZXMYAiADKAlCAhgBEg4KBnNjb3BlcxgDIAMoCRIPCgdzdXJmYWNlGAQgASgJEhMKC3R0bF9zZWNvbmRzGAUgASgFEhAKCGFnZW50X2lkGAYgASgJIlgKF0lzc3VlQWdlbnRUb2tlblJlc3BvbnNlEg0KBXRva2VuGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wMp8CCgxUb2tlblNlcnZpY2USTQoKSW50cm9zcGVjdBIeLmlkZW50aXR5LnYxLkludHJvc3BlY3RSZXF1ZXN0Gh8uaWRlbnRpdHkudjEuSW50cm9zcGVjdFJlc3BvbnNlEmIKEUlzc3VlU2VydmljZVRva2VuEiUuaWRlbnRpdHkudjEuSXNzdWVTZXJ2aWNlVG9rZW5SZXF1ZXN0GiYuaWRlbnRpdHkudjEuSXNzdWVTZXJ2aWNlVG9rZW5SZXNwb25zZRJcCg9Jc3N1ZUFnZW50VG9rZW4SIy5pZGVudGl0eS52MS5Jc3N1ZUFnZW50VG9rZW5SZXF1ZXN0GiQuaWRlbnRpdHkudjEuSXNzdWVBZ2VudFRva2VuUmVzcG9uc2VCOFo2Z2l0aHViLmNvbS9ldmFsb3BzL3Byb3RvL2dlbi9nby9pZGVudGl0eS92MTtpZGVudGl0eXYxYgZwcm90bzM", [file_google_protobuf_timestamp]); /** * @generated from message identity.v1.IntrospectRequest @@ -114,6 +114,11 @@ export type IntrospectResponse = Message<"identity.v1.IntrospectResponse"> & { * @generated from field: google.protobuf.Timestamp issued_at = 15; */ issuedAt?: Timestamp | undefined; + + /** + * @generated from field: string workspace_id = 27; + */ + workspaceId: string; }; /** @@ -146,6 +151,11 @@ export type IssueServiceTokenRequest = Message<"identity.v1.IssueServiceTokenReq * @generated from field: int32 ttl_seconds = 4; */ ttlSeconds: number; + + /** + * @generated from field: string workspace_id = 5; + */ + workspaceId: string; }; /** diff --git a/proto/identity/v1/tokens.proto b/proto/identity/v1/tokens.proto index 1583c4b..6432771 100644 --- a/proto/identity/v1/tokens.proto +++ b/proto/identity/v1/tokens.proto @@ -42,6 +42,7 @@ message IntrospectResponse { string name = 13; google.protobuf.Timestamp expires_at = 14; google.protobuf.Timestamp issued_at = 15; + string workspace_id = 27; } message IssueServiceTokenRequest { @@ -49,6 +50,7 @@ message IssueServiceTokenRequest { string organization_id = 2; repeated string scopes = 3; int32 ttl_seconds = 4; + string workspace_id = 5; } message IssueServiceTokenResponse { diff --git a/scripts/test_identity_workspace_compat.py b/scripts/test_identity_workspace_compat.py new file mode 100644 index 0000000..e6eb17a --- /dev/null +++ b/scripts/test_identity_workspace_compat.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +import re +import unittest +from pathlib import Path + + +SOURCE = ( + Path(__file__).resolve().parents[1] / "proto" / "identity" / "v1" / "tokens.proto" +) + + +class IdentityWorkspaceCompatibilityTests(unittest.TestCase): + def test_workspace_fields_match_platform_numbers(self) -> None: + source = SOURCE.read_text(encoding="utf-8") + issue = re.search( + r"message IssueServiceTokenRequest \{(?P.*?)\n\}", source, re.DOTALL + ) + introspect = re.search( + r"message IntrospectResponse \{(?P.*?)\n\}", source, re.DOTALL + ) + self.assertIsNotNone(issue) + self.assertIsNotNone(introspect) + self.assertRegex(issue.group("body"), r"\bstring workspace_id = 5;") + self.assertRegex(introspect.group("body"), r"\bstring workspace_id = 27;") + + +if __name__ == "__main__": + unittest.main()