spiffe
Version:
Node.js SPIFFE Workload API client
1,237 lines (1,230 loc) • 41.9 kB
JavaScript
// src/index.ts
import { ChannelCredentials } from "@grpc/grpc-js";
import { Crypto } from "@peculiar/webcrypto";
import * as x509 from "@peculiar/x509";
import { GrpcTransport } from "@protobuf-ts/grpc-transport";
// src/proto/spiffe/workload/workload.client.ts
import { stackIntercept } from "@protobuf-ts/runtime-rpc";
// src/proto/spiffe/workload/workload.ts
import { MESSAGE_TYPE as MESSAGE_TYPE2, MessageType as MessageType2, UnknownFieldHandler as UnknownFieldHandler2, WireType as WireType2, reflectionMergePartial as reflectionMergePartial2 } from "@protobuf-ts/runtime";
import { ServiceType } from "@protobuf-ts/runtime-rpc";
// src/proto/google/protobuf/struct.ts
import {
MESSAGE_TYPE,
MessageType,
UnknownFieldHandler,
WireType,
isJsonObject,
reflectionMergePartial,
typeofJsonValue
} from "@protobuf-ts/runtime";
var NullValue = /* @__PURE__ */ ((NullValue2) => {
NullValue2[NullValue2["NULL_VALUE"] = 0] = "NULL_VALUE";
return NullValue2;
})(NullValue || {});
var Struct$Type = class extends MessageType {
constructor() {
super("google.protobuf.Struct", [
{ no: 1, name: "fields", kind: "map", K: 9, V: { kind: "message", T: () => Value } }
]);
}
/**
* Encode `Struct` to JSON object.
*/
internalJsonWrite(message, options) {
let json = {};
for (let [k, v] of Object.entries(message.fields)) {
json[k] = Value.toJson(v);
}
return json;
}
/**
* Decode `Struct` from JSON object.
*/
internalJsonRead(json, options, target) {
if (!isJsonObject(json))
throw new globalThis.Error(
"Unable to parse message " + this.typeName + " from JSON " + typeofJsonValue(json) + "."
);
if (!target)
target = this.create();
for (let [k, v] of globalThis.Object.entries(json)) {
target.fields[k] = Value.fromJson(v);
}
return target;
}
create(value) {
const message = { fields: {} };
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* map<string, google.protobuf.Value> fields */
1:
this.binaryReadMap1(message.fields, reader, options);
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
binaryReadMap1(map, reader, options) {
let len = reader.uint32(), end = reader.pos + len, key, val;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case 1:
key = reader.string();
break;
case 2:
val = Value.internalBinaryRead(reader, reader.uint32(), options);
break;
default:
throw new globalThis.Error("unknown map entry field for field google.protobuf.Struct.fields");
}
}
map[key ?? ""] = val ?? Value.create();
}
internalBinaryWrite(message, writer, options) {
for (let k of Object.keys(message.fields)) {
writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
writer.tag(2, WireType.LengthDelimited).fork();
Value.internalBinaryWrite(message.fields[k], writer, options);
writer.join().join();
}
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var Struct = new Struct$Type();
var Value$Type = class extends MessageType {
constructor() {
super("google.protobuf.Value", [
{ no: 1, name: "null_value", kind: "enum", oneof: "kind", T: () => ["google.protobuf.NullValue", NullValue] },
{
no: 2,
name: "number_value",
kind: "scalar",
oneof: "kind",
T: 1
/*ScalarType.DOUBLE*/
},
{
no: 3,
name: "string_value",
kind: "scalar",
oneof: "kind",
T: 9
/*ScalarType.STRING*/
},
{
no: 4,
name: "bool_value",
kind: "scalar",
oneof: "kind",
T: 8
/*ScalarType.BOOL*/
},
{ no: 5, name: "struct_value", kind: "message", oneof: "kind", T: () => Struct },
{ no: 6, name: "list_value", kind: "message", oneof: "kind", T: () => ListValue }
]);
}
/**
* Encode `Value` to JSON value.
*/
internalJsonWrite(message, options) {
if (message.kind.oneofKind === void 0)
throw new globalThis.Error();
switch (message.kind.oneofKind) {
case void 0:
throw new globalThis.Error();
case "boolValue":
return message.kind.boolValue;
case "nullValue":
return null;
case "numberValue":
let numberValue = message.kind.numberValue;
if (typeof numberValue == "number" && !Number.isFinite(numberValue))
throw new globalThis.Error();
return numberValue;
case "stringValue":
return message.kind.stringValue;
case "listValue":
let listValueField = this.fields.find((f) => f.no === 6);
if (listValueField?.kind !== "message")
throw new globalThis.Error();
return listValueField.T().toJson(message.kind.listValue);
case "structValue":
let structValueField = this.fields.find((f) => f.no === 5);
if (structValueField?.kind !== "message")
throw new globalThis.Error();
return structValueField.T().toJson(message.kind.structValue);
}
}
/**
* Decode `Value` from JSON value.
*/
internalJsonRead(json, options, target) {
if (!target)
target = this.create();
switch (typeof json) {
case "number":
target.kind = { oneofKind: "numberValue", numberValue: json };
break;
case "string":
target.kind = { oneofKind: "stringValue", stringValue: json };
break;
case "boolean":
target.kind = { oneofKind: "boolValue", boolValue: json };
break;
case "object":
if (json === null) {
target.kind = { oneofKind: "nullValue", nullValue: 0 /* NULL_VALUE */ };
} else if (globalThis.Array.isArray(json)) {
target.kind = { oneofKind: "listValue", listValue: ListValue.fromJson(json) };
} else {
target.kind = { oneofKind: "structValue", structValue: Struct.fromJson(json) };
}
break;
default:
throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
}
return target;
}
create(value) {
const message = { kind: { oneofKind: void 0 } };
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* google.protobuf.NullValue null_value */
1:
message.kind = {
oneofKind: "nullValue",
nullValue: reader.int32()
};
break;
case /* double number_value */
2:
message.kind = {
oneofKind: "numberValue",
numberValue: reader.double()
};
break;
case /* string string_value */
3:
message.kind = {
oneofKind: "stringValue",
stringValue: reader.string()
};
break;
case /* bool bool_value */
4:
message.kind = {
oneofKind: "boolValue",
boolValue: reader.bool()
};
break;
case /* google.protobuf.Struct struct_value */
5:
message.kind = {
oneofKind: "structValue",
structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, message.kind.structValue)
};
break;
case /* google.protobuf.ListValue list_value */
6:
message.kind = {
oneofKind: "listValue",
listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, message.kind.listValue)
};
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
if (message.kind.oneofKind === "nullValue")
writer.tag(1, WireType.Varint).int32(message.kind.nullValue);
if (message.kind.oneofKind === "numberValue")
writer.tag(2, WireType.Bit64).double(message.kind.numberValue);
if (message.kind.oneofKind === "stringValue")
writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue);
if (message.kind.oneofKind === "boolValue")
writer.tag(4, WireType.Varint).bool(message.kind.boolValue);
if (message.kind.oneofKind === "structValue")
Struct.internalBinaryWrite(
message.kind.structValue,
writer.tag(5, WireType.LengthDelimited).fork(),
options
).join();
if (message.kind.oneofKind === "listValue")
ListValue.internalBinaryWrite(
message.kind.listValue,
writer.tag(6, WireType.LengthDelimited).fork(),
options
).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var Value = new Value$Type();
var ListValue$Type = class extends MessageType {
constructor() {
super("google.protobuf.ListValue", [
{ no: 1, name: "values", kind: "message", repeat: 1, T: () => Value }
]);
}
/**
* Encode `ListValue` to JSON array.
*/
internalJsonWrite(message, options) {
return message.values.map((v) => Value.toJson(v));
}
/**
* Decode `ListValue` from JSON array.
*/
internalJsonRead(json, options, target) {
if (!globalThis.Array.isArray(json))
throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
if (!target)
target = this.create();
let values = json.map((v) => Value.fromJson(v));
target.values.push(...values);
return target;
}
create(value) {
const message = { values: [] };
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* repeated google.protobuf.Value values */
1:
message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options));
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
for (let i = 0; i < message.values.length; i++)
Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var ListValue = new ListValue$Type();
// src/proto/spiffe/workload/workload.ts
var X509SVIDRequest$Type = class extends MessageType2 {
constructor() {
super("X509SVIDRequest", []);
}
create(value) {
const message = {};
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
return target ?? this.create();
}
internalBinaryWrite(message, writer, options) {
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var X509SVIDRequest = new X509SVIDRequest$Type();
var X509SVIDResponse$Type = class extends MessageType2 {
constructor() {
super("X509SVIDResponse", [
{ no: 1, name: "svids", kind: "message", repeat: 1, T: () => X509SVID },
{
no: 2,
name: "crl",
kind: "scalar",
repeat: 2,
T: 12
/*ScalarType.BYTES*/
},
{
no: 3,
name: "federated_bundles",
kind: "map",
K: 9,
V: {
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
}
}
]);
}
create(value) {
const message = { svids: [], crl: [], federatedBundles: {} };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* repeated X509SVID svids */
1:
message.svids.push(X509SVID.internalBinaryRead(reader, reader.uint32(), options));
break;
case /* repeated bytes crl */
2:
message.crl.push(reader.bytes());
break;
case /* map<string, bytes> federated_bundles */
3:
this.binaryReadMap3(message.federatedBundles, reader, options);
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
binaryReadMap3(map, reader, options) {
let len = reader.uint32(), end = reader.pos + len, key, val;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case 1:
key = reader.string();
break;
case 2:
val = reader.bytes();
break;
default:
throw new globalThis.Error("unknown map entry field for field X509SVIDResponse.federated_bundles");
}
}
map[key ?? ""] = val ?? new Uint8Array(0);
}
internalBinaryWrite(message, writer, options) {
for (let i = 0; i < message.svids.length; i++)
X509SVID.internalBinaryWrite(message.svids[i], writer.tag(1, WireType2.LengthDelimited).fork(), options).join();
for (let i = 0; i < message.crl.length; i++)
writer.tag(2, WireType2.LengthDelimited).bytes(message.crl[i]);
for (let k of Object.keys(message.federatedBundles))
writer.tag(3, WireType2.LengthDelimited).fork().tag(1, WireType2.LengthDelimited).string(k).tag(2, WireType2.LengthDelimited).bytes(message.federatedBundles[k]).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var X509SVIDResponse = new X509SVIDResponse$Type();
var X509SVID$Type = class extends MessageType2 {
constructor() {
super("X509SVID", [
{
no: 1,
name: "spiffe_id",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
},
{
no: 2,
name: "x509_svid",
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
},
{
no: 3,
name: "x509_svid_key",
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
},
{
no: 4,
name: "bundle",
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
},
{
no: 5,
name: "hint",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
}
]);
}
create(value) {
const message = {
spiffeId: "",
x509Svid: new Uint8Array(0),
x509SvidKey: new Uint8Array(0),
bundle: new Uint8Array(0),
hint: ""
};
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* string spiffe_id */
1:
message.spiffeId = reader.string();
break;
case /* bytes x509_svid */
2:
message.x509Svid = reader.bytes();
break;
case /* bytes x509_svid_key */
3:
message.x509SvidKey = reader.bytes();
break;
case /* bytes bundle */
4:
message.bundle = reader.bytes();
break;
case /* string hint */
5:
message.hint = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
if (message.spiffeId !== "")
writer.tag(1, WireType2.LengthDelimited).string(message.spiffeId);
if (message.x509Svid.length)
writer.tag(2, WireType2.LengthDelimited).bytes(message.x509Svid);
if (message.x509SvidKey.length)
writer.tag(3, WireType2.LengthDelimited).bytes(message.x509SvidKey);
if (message.bundle.length)
writer.tag(4, WireType2.LengthDelimited).bytes(message.bundle);
if (message.hint !== "")
writer.tag(5, WireType2.LengthDelimited).string(message.hint);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var X509SVID = new X509SVID$Type();
var X509BundlesRequest$Type = class extends MessageType2 {
constructor() {
super("X509BundlesRequest", []);
}
create(value) {
const message = {};
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
return target ?? this.create();
}
internalBinaryWrite(message, writer, options) {
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var X509BundlesRequest = new X509BundlesRequest$Type();
var X509BundlesResponse$Type = class extends MessageType2 {
constructor() {
super("X509BundlesResponse", [
{
no: 1,
name: "crl",
kind: "scalar",
repeat: 2,
T: 12
/*ScalarType.BYTES*/
},
{
no: 2,
name: "bundles",
kind: "map",
K: 9,
V: {
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
}
}
]);
}
create(value) {
const message = { crl: [], bundles: {} };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* repeated bytes crl */
1:
message.crl.push(reader.bytes());
break;
case /* map<string, bytes> bundles */
2:
this.binaryReadMap2(message.bundles, reader, options);
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
binaryReadMap2(map, reader, options) {
let len = reader.uint32(), end = reader.pos + len, key, val;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case 1:
key = reader.string();
break;
case 2:
val = reader.bytes();
break;
default:
throw new globalThis.Error("unknown map entry field for field X509BundlesResponse.bundles");
}
}
map[key ?? ""] = val ?? new Uint8Array(0);
}
internalBinaryWrite(message, writer, options) {
for (let i = 0; i < message.crl.length; i++)
writer.tag(1, WireType2.LengthDelimited).bytes(message.crl[i]);
for (let k of Object.keys(message.bundles))
writer.tag(2, WireType2.LengthDelimited).fork().tag(1, WireType2.LengthDelimited).string(k).tag(2, WireType2.LengthDelimited).bytes(message.bundles[k]).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var X509BundlesResponse = new X509BundlesResponse$Type();
var JWTSVIDRequest$Type = class extends MessageType2 {
constructor() {
super("JWTSVIDRequest", [
{
no: 1,
name: "audience",
kind: "scalar",
repeat: 2,
T: 9
/*ScalarType.STRING*/
},
{
no: 2,
name: "spiffe_id",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
}
]);
}
create(value) {
const message = { audience: [], spiffeId: "" };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* repeated string audience */
1:
message.audience.push(reader.string());
break;
case /* string spiffe_id */
2:
message.spiffeId = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
for (let i = 0; i < message.audience.length; i++)
writer.tag(1, WireType2.LengthDelimited).string(message.audience[i]);
if (message.spiffeId !== "")
writer.tag(2, WireType2.LengthDelimited).string(message.spiffeId);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var JWTSVIDRequest = new JWTSVIDRequest$Type();
var JWTSVIDResponse$Type = class extends MessageType2 {
constructor() {
super("JWTSVIDResponse", [
{ no: 1, name: "svids", kind: "message", repeat: 1, T: () => JWTSVID }
]);
}
create(value) {
const message = { svids: [] };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* repeated JWTSVID svids */
1:
message.svids.push(JWTSVID.internalBinaryRead(reader, reader.uint32(), options));
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
for (let i = 0; i < message.svids.length; i++)
JWTSVID.internalBinaryWrite(message.svids[i], writer.tag(1, WireType2.LengthDelimited).fork(), options).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var JWTSVIDResponse = new JWTSVIDResponse$Type();
var JWTSVID$Type = class extends MessageType2 {
constructor() {
super("JWTSVID", [
{
no: 1,
name: "spiffe_id",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
},
{
no: 2,
name: "svid",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
},
{
no: 3,
name: "hint",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
}
]);
}
create(value) {
const message = { spiffeId: "", svid: "", hint: "" };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* string spiffe_id */
1:
message.spiffeId = reader.string();
break;
case /* string svid */
2:
message.svid = reader.string();
break;
case /* string hint */
3:
message.hint = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
if (message.spiffeId !== "")
writer.tag(1, WireType2.LengthDelimited).string(message.spiffeId);
if (message.svid !== "")
writer.tag(2, WireType2.LengthDelimited).string(message.svid);
if (message.hint !== "")
writer.tag(3, WireType2.LengthDelimited).string(message.hint);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var JWTSVID = new JWTSVID$Type();
var JWTBundlesRequest$Type = class extends MessageType2 {
constructor() {
super("JWTBundlesRequest", []);
}
create(value) {
const message = {};
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
return target ?? this.create();
}
internalBinaryWrite(message, writer, options) {
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var JWTBundlesRequest = new JWTBundlesRequest$Type();
var JWTBundlesResponse$Type = class extends MessageType2 {
constructor() {
super("JWTBundlesResponse", [
{
no: 1,
name: "bundles",
kind: "map",
K: 9,
V: {
kind: "scalar",
T: 12
/*ScalarType.BYTES*/
}
}
]);
}
create(value) {
const message = { bundles: {} };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* map<string, bytes> bundles */
1:
this.binaryReadMap1(message.bundles, reader, options);
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
binaryReadMap1(map, reader, options) {
let len = reader.uint32(), end = reader.pos + len, key, val;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case 1:
key = reader.string();
break;
case 2:
val = reader.bytes();
break;
default:
throw new globalThis.Error("unknown map entry field for field JWTBundlesResponse.bundles");
}
}
map[key ?? ""] = val ?? new Uint8Array(0);
}
internalBinaryWrite(message, writer, options) {
for (let k of Object.keys(message.bundles))
writer.tag(1, WireType2.LengthDelimited).fork().tag(1, WireType2.LengthDelimited).string(k).tag(2, WireType2.LengthDelimited).bytes(message.bundles[k]).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var JWTBundlesResponse = new JWTBundlesResponse$Type();
var ValidateJWTSVIDRequest$Type = class extends MessageType2 {
constructor() {
super("ValidateJWTSVIDRequest", [
{
no: 1,
name: "audience",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
},
{
no: 2,
name: "svid",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
}
]);
}
create(value) {
const message = { audience: "", svid: "" };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* string audience */
1:
message.audience = reader.string();
break;
case /* string svid */
2:
message.svid = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
if (message.audience !== "")
writer.tag(1, WireType2.LengthDelimited).string(message.audience);
if (message.svid !== "")
writer.tag(2, WireType2.LengthDelimited).string(message.svid);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var ValidateJWTSVIDRequest = new ValidateJWTSVIDRequest$Type();
var ValidateJWTSVIDResponse$Type = class extends MessageType2 {
constructor() {
super("ValidateJWTSVIDResponse", [
{
no: 1,
name: "spiffe_id",
kind: "scalar",
T: 9
/*ScalarType.STRING*/
},
{ no: 2, name: "claims", kind: "message", T: () => Struct }
]);
}
create(value) {
const message = { spiffeId: "" };
globalThis.Object.defineProperty(message, MESSAGE_TYPE2, { enumerable: false, value: this });
if (value !== void 0)
reflectionMergePartial2(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target ?? this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* string spiffe_id */
1:
message.spiffeId = reader.string();
break;
case /* google.protobuf.Struct claims */
2:
message.claims = Struct.internalBinaryRead(reader, reader.uint32(), options, message.claims);
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? UnknownFieldHandler2.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
if (message.spiffeId !== "")
writer.tag(1, WireType2.LengthDelimited).string(message.spiffeId);
if (message.claims)
Struct.internalBinaryWrite(message.claims, writer.tag(2, WireType2.LengthDelimited).fork(), options).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? UnknownFieldHandler2.onWrite : u)(this.typeName, message, writer);
return writer;
}
};
var ValidateJWTSVIDResponse = new ValidateJWTSVIDResponse$Type();
var SpiffeWorkloadAPI = new ServiceType("SpiffeWorkloadAPI", [
{ name: "FetchX509SVID", serverStreaming: true, options: {}, I: X509SVIDRequest, O: X509SVIDResponse },
{ name: "FetchX509Bundles", serverStreaming: true, options: {}, I: X509BundlesRequest, O: X509BundlesResponse },
{ name: "FetchJWTSVID", options: {}, I: JWTSVIDRequest, O: JWTSVIDResponse },
{ name: "FetchJWTBundles", serverStreaming: true, options: {}, I: JWTBundlesRequest, O: JWTBundlesResponse },
{ name: "ValidateJWTSVID", options: {}, I: ValidateJWTSVIDRequest, O: ValidateJWTSVIDResponse }
]);
// src/proto/spiffe/workload/workload.client.ts
var SpiffeWorkloadAPIClient = class {
constructor(_transport) {
this._transport = _transport;
this.typeName = SpiffeWorkloadAPI.typeName;
this.methods = SpiffeWorkloadAPI.methods;
this.options = SpiffeWorkloadAPI.options;
}
/**
* Fetch X.509-SVIDs for all SPIFFE identities the workload is entitled to,
* as well as related information like trust bundles and CRLs. As this
* information changes, subsequent messages will be streamed from the
* server.
*
* @generated from protobuf rpc: FetchX509SVID(X509SVIDRequest) returns (stream X509SVIDResponse);
*/
fetchX509SVID(input, options) {
const method = this.methods[0], opt = this._transport.mergeOptions(options);
return stackIntercept("serverStreaming", this._transport, method, opt, input);
}
/**
* Fetch trust bundles and CRLs. Useful for clients that only need to
* validate SVIDs without obtaining an SVID for themself. As this
* information changes, subsequent messages will be streamed from the
* server.
*
* @generated from protobuf rpc: FetchX509Bundles(X509BundlesRequest) returns (stream X509BundlesResponse);
*/
fetchX509Bundles(input, options) {
const method = this.methods[1], opt = this._transport.mergeOptions(options);
return stackIntercept(
"serverStreaming",
this._transport,
method,
opt,
input
);
}
// ///////////////////////////////////////////////////////////////////////
// JWT-SVID Profile
// ///////////////////////////////////////////////////////////////////////
/**
* Fetch JWT-SVIDs for all SPIFFE identities the workload is entitled to,
* for the requested audience. If an optional SPIFFE ID is requested, only
* the JWT-SVID for that SPIFFE ID is returned.
*
* @generated from protobuf rpc: FetchJWTSVID(JWTSVIDRequest) returns (JWTSVIDResponse);
*/
fetchJWTSVID(input, options) {
const method = this.methods[2], opt = this._transport.mergeOptions(options);
return stackIntercept("unary", this._transport, method, opt, input);
}
/**
* Fetches the JWT bundles, formatted as JWKS documents, keyed by the
* SPIFFE ID of the trust domain. As this information changes, subsequent
* messages will be streamed from the server.
*
* @generated from protobuf rpc: FetchJWTBundles(JWTBundlesRequest) returns (stream JWTBundlesResponse);
*/
fetchJWTBundles(input, options) {
const method = this.methods[3], opt = this._transport.mergeOptions(options);
return stackIntercept("serverStreaming", this._transport, method, opt, input);
}
/**
* Validates a JWT-SVID against the requested audience. Returns the SPIFFE
* ID of the JWT-SVID and JWT claims.
*
* @generated from protobuf rpc: ValidateJWTSVID(ValidateJWTSVIDRequest) returns (ValidateJWTSVIDResponse);
*/
validateJWTSVID(input, options) {
const method = this.methods[4], opt = this._transport.mergeOptions(options);
return stackIntercept("unary", this._transport, method, opt, input);
}
};
// src/index.ts
function createClient(baseURL) {
const baseUrl = baseURL ?? process.env.SPIFFE_ENDPOINT_SOCKET;
if (!baseUrl) {
throw new Error("SPIFFE_ENDPOINT_SOCKET environment variable is not set");
}
const transport = new GrpcTransport({
host: baseUrl,
channelCredentials: ChannelCredentials.createInsecure(),
meta: { "workload.spiffe.io": "true" }
});
return new SpiffeWorkloadAPIClient(transport);
}
function parseCertificate(data) {
initCryptoProvider();
return new x509.X509Certificate(data);
}
function parseCertificateBundle(data) {
initCryptoProvider();
let currentIndex = 0;
const certs = [];
while (currentIndex < data.length) {
const beginOfSequence = currentIndex;
currentIndex += 1;
let length = data[currentIndex++];
if (length === 128)
throw new TypeError("Indefinite length encoding not supported");
if (length & 128) {
const lengthBytes = length & 127;
length = 0;
for (let i = 0; i < lengthBytes; i++) {
length = length << 8 | data[currentIndex++];
}
}
certs.push(new x509.X509Certificate(data.slice(beginOfSequence, currentIndex + length)));
currentIndex += length;
}
return new x509.X509Certificates(certs);
}
function initCryptoProvider() {
try {
x509.cryptoProvider.get();
} catch {
const crypto = new Crypto();
x509.cryptoProvider.set(crypto);
}
}
export {
JWTBundlesRequest,
JWTBundlesResponse,
JWTSVID,
JWTSVIDRequest,
JWTSVIDResponse,
ListValue,
NullValue,
SpiffeWorkloadAPI,
SpiffeWorkloadAPIClient,
Struct,
ValidateJWTSVIDRequest,
ValidateJWTSVIDResponse,
Value,
X509BundlesRequest,
X509BundlesResponse,
X509SVID,
X509SVIDRequest,
X509SVIDResponse,
createClient,
parseCertificate,
parseCertificateBundle
};