@serve.zone/interfaces 32.52.0 → 32.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/changelog.md +73 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/appstore/catalog.d.ts +92 -12
  4. package/dist_ts/appstore/catalog.js +119 -5
  5. package/dist_ts/appstore/types.d.ts +28 -4
  6. package/dist_ts/appstore/types.js +1 -1
  7. package/dist_ts/appstore/versionconfig.d.ts +1 -1
  8. package/dist_ts/data/cluster.d.ts +1 -1
  9. package/dist_ts/data/clusteringress.d.ts +4 -4
  10. package/dist_ts/data/clusteringressdesignation.d.ts +2 -2
  11. package/dist_ts/data/clusternode.d.ts +6 -6
  12. package/dist_ts/data/clusternode.js +1 -1
  13. package/dist_ts/data/clusternodehostname.d.ts +5 -5
  14. package/dist_ts/data/clusternodehostname.js +3 -3
  15. package/dist_ts/data/clusterrelaycredential.d.ts +3 -3
  16. package/dist_ts/data/clusterruntime.d.ts +1 -1
  17. package/dist_ts/data/clustervpn.d.ts +4 -4
  18. package/dist_ts/data/coremail.d.ts +11 -11
  19. package/dist_ts/data/coremail.runtime.d.ts +6 -6
  20. package/dist_ts/data/coremail.runtime.js +1 -1
  21. package/dist_ts/data/corestorecontroltoken.d.ts +1 -1
  22. package/dist_ts/data/corestorelegacyadoption.d.ts +2 -2
  23. package/dist_ts/data/deploymentmachineuser.d.ts +1 -1
  24. package/dist_ts/data/deploymentpreflight.d.ts +26 -1
  25. package/dist_ts/data/fleetcutover.d.ts +28 -28
  26. package/dist_ts/data/hostedapp.d.ts +4 -4
  27. package/dist_ts/data/immutableimage.d.ts +3 -3
  28. package/dist_ts/data/isolatedrestore.d.ts +7 -7
  29. package/dist_ts/data/isolatedrestore.js +1 -1
  30. package/dist_ts/data/networkaddressplan.d.ts +2 -2
  31. package/dist_ts/data/networkapplication.d.ts +9 -9
  32. package/dist_ts/data/networkauthority.d.ts +5 -5
  33. package/dist_ts/data/networkcredential.js +1 -1
  34. package/dist_ts/data/networkegressretirement.d.ts +3 -3
  35. package/dist_ts/data/networkegressretirement.js +1 -1
  36. package/dist_ts/data/networkhost.d.ts +3 -3
  37. package/dist_ts/data/networklease.d.ts +9 -9
  38. package/dist_ts/data/networkprojection.d.ts +7 -7
  39. package/dist_ts/data/networkprojectionretirement.d.ts +6 -6
  40. package/dist_ts/data/networkprotection.d.ts +9 -9
  41. package/dist_ts/data/networksigning.d.ts +6 -6
  42. package/dist_ts/data/networkworkloadingress.d.ts +3 -3
  43. package/dist_ts/data/nodeenrollment.d.ts +8 -8
  44. package/dist_ts/data/noderetirement.d.ts +1 -1
  45. package/dist_ts/data/noderuntimebinding.d.ts +11 -11
  46. package/dist_ts/data/privatenetwork.d.ts +3 -3
  47. package/dist_ts/data/runtimeassignment.d.ts +9 -9
  48. package/dist_ts/data/runtimeassignment.js +1 -1
  49. package/dist_ts/data/runtimeassignmentexec.d.ts +2 -2
  50. package/dist_ts/data/runtimeassignmentlogs.d.ts +4 -4
  51. package/dist_ts/data/runtimeassignmentstats.d.ts +2 -2
  52. package/dist_ts/data/runtimeconfig.d.ts +1 -1
  53. package/dist_ts/data/runtimelocalstorageclaim.d.ts +4 -4
  54. package/dist_ts/data/runtimelocalvolumearchive.d.ts +5 -5
  55. package/dist_ts/data/runtimesession.d.ts +5 -5
  56. package/dist_ts/data/runtimesession.js +1 -1
  57. package/dist_ts/data/runtimestorageclaim.d.ts +4 -4
  58. package/dist_ts/data/runtimeterminalreceipt.d.ts +2 -2
  59. package/dist_ts/data/runtimeterminalreceipt.js +1 -1
  60. package/dist_ts/data/secret.d.ts +4 -4
  61. package/dist_ts/data/secret.js +1 -1
  62. package/dist_ts/data/service.d.ts +10 -3
  63. package/dist_ts/data/serviceplatformownership.d.ts +1 -1
  64. package/dist_ts/data/serviceports.js +1 -1
  65. package/dist_ts/data/serviceruntime.d.ts +3 -3
  66. package/dist_ts/data/servicevolumeinitialization.d.ts +1 -1
  67. package/dist_ts/data/settings.d.ts +37 -31
  68. package/dist_ts/data/settings.js +1 -1
  69. package/dist_ts/data/sparklegacyretirement.d.ts +4 -4
  70. package/dist_ts/data/sparknodereport.d.ts +2 -2
  71. package/dist_ts/platform/storage.d.ts +1 -1
  72. package/dist_ts/platform/storagemigration.d.ts +6 -6
  73. package/dist_ts/platform/storagemigration.golden.d.ts +13 -13
  74. package/dist_ts/platform/types.d.ts +1 -1
  75. package/dist_ts/private/canonicaljson.d.ts +6 -6
  76. package/dist_ts/private/canonicaljson.js +1 -1
  77. package/dist_ts/private/dataproperties.js +1 -1
  78. package/dist_ts/private/networkcontract.js +1 -1
  79. package/dist_ts/private/storagecontract.d.ts +1 -1
  80. package/dist_ts/private/storagecontract.js +1 -1
  81. package/dist_ts/protocol.d.ts +1 -1
  82. package/dist_ts/requests/appstore.d.ts +18 -0
  83. package/dist_ts/requests/hostedapp.d.ts +6 -0
  84. package/dist_ts/requests/hostedapp.js +1 -1
  85. package/dist_ts/requests/node.d.ts +1 -1
  86. package/dist_ts/requests/service.d.ts +23 -0
  87. package/dist_ts/runtime.appstorecatalog.d.ts +17 -0
  88. package/dist_ts/runtime.appstorecatalog.js +84 -12
  89. package/dist_ts/runtime.assignmentsecret.d.ts +3 -3
  90. package/dist_ts/runtime.assignmentsecret.js +1 -1
  91. package/dist_ts/runtime.corestore.d.ts +13 -13
  92. package/dist_ts/runtime.d.ts +1 -1
  93. package/dist_ts/runtime.workloadinit.d.ts +11 -11
  94. package/package.json +5 -4
  95. package/readme.md +10 -1
  96. package/ts/00_commitinfo_data.ts +1 -1
  97. package/ts/appstore/catalog.ts +175 -5
  98. package/ts/appstore/types.ts +25 -0
  99. package/ts/data/clusternodehostname.ts +3 -3
  100. package/ts/data/service.ts +10 -2
  101. package/ts/data/settings.ts +6 -0
  102. package/ts/requests/appstore.ts +22 -0
  103. package/ts/requests/hostedapp.ts +6 -0
  104. package/ts/requests/node.ts +1 -1
  105. package/ts/requests/service.ts +28 -0
  106. package/ts/runtime.appstorecatalog.ts +91 -11
@@ -62,11 +62,96 @@ const publicKeyObjectOf = (publicKeyArg: string): plugins.crypto.KeyObject =>
62
62
  key: { kty: 'OKP', crv: 'Ed25519', x: Buffer.from(publicKeyArg, 'hex').toString('base64url') },
63
63
  });
64
64
 
65
+ /** One PEM block of exactly this label and nothing around it but whitespace. */
66
+ const isSinglePemBlock = (pemArg: string, labelArg: string): boolean =>
67
+ new RegExp(`^-----BEGIN ${labelArg}-----\\r?\\n(?:[A-Za-z0-9+/=]+\\r?\\n)+-----END ${labelArg}-----$`)
68
+ .test(pemArg.trim());
69
+
70
+ const signingKeyOf = async (privateKeyArg: plugins.crypto.KeyObject): Promise<IAppStoreCatalogSigningKey> => {
71
+ const publicKey = rawPublicKeyOf(plugins.crypto.createPublicKey(privateKeyArg));
72
+ return { keyId: await computeAppStoreCatalogSigningKeyId(publicKey), publicKey, privateKey: privateKeyArg };
73
+ };
74
+
75
+ /** The Ed25519 private key of a signing key whose `publicKey` it matches; `keyId` is the caller's check. */
76
+ const readSigningPrivateKey = (keyArg: IAppStoreCatalogSigningKey): plugins.crypto.KeyObject => {
77
+ const { privateKey } = keyArg;
78
+ if (!(privateKey instanceof plugins.crypto.KeyObject) || privateKey.type !== 'private'
79
+ || privateKey.asymmetricKeyType !== 'ed25519') {
80
+ throw new Error('App Store catalog signing key must be an Ed25519 private key');
81
+ }
82
+ if (rawPublicKeyOf(plugins.crypto.createPublicKey(privateKey)) !== keyArg.publicKey) {
83
+ throw new Error(`App Store catalog signing key ${keyArg.keyId} does not match its private key`);
84
+ }
85
+ return privateKey;
86
+ };
87
+
65
88
  /** A fresh Ed25519 catalog signing key with its key id. */
66
- export const createAppStoreCatalogSigningKey = async (): Promise<IAppStoreCatalogSigningKey> => {
67
- const pair = plugins.crypto.generateKeyPairSync('ed25519');
68
- const publicKey = rawPublicKeyOf(pair.publicKey);
69
- return { keyId: await computeAppStoreCatalogSigningKeyId(publicKey), publicKey, privateKey: pair.privateKey };
89
+ export const createAppStoreCatalogSigningKey = async (): Promise<IAppStoreCatalogSigningKey> =>
90
+ await signingKeyOf(plugins.crypto.generateKeyPairSync('ed25519').privateKey);
91
+
92
+ /**
93
+ * Reads a catalog signing key from the text of a PKCS#8 PEM file holding an unencrypted Ed25519
94
+ * private key (`-----BEGIN PRIVATE KEY-----`, as `openssl genpkey -algorithm ed25519` writes it)
95
+ * and derives its public key and key id. Errors never quote the input.
96
+ */
97
+ export const importAppStoreCatalogSigningKeyPem = async (pkcs8PemArg: string): Promise<IAppStoreCatalogSigningKey> => {
98
+ if (typeof pkcs8PemArg !== 'string' || !isSinglePemBlock(pkcs8PemArg, 'PRIVATE KEY')) {
99
+ throw new Error('App Store catalog signing key must be one unencrypted PKCS#8 PEM private key block');
100
+ }
101
+ let privateKey: plugins.crypto.KeyObject;
102
+ try {
103
+ privateKey = plugins.crypto.createPrivateKey({ key: pkcs8PemArg, format: 'pem' });
104
+ } catch {
105
+ throw new Error('App Store catalog signing key is not a readable PKCS#8 PEM private key');
106
+ }
107
+ if (privateKey.asymmetricKeyType !== 'ed25519') {
108
+ throw new Error('App Store catalog signing key must be an Ed25519 private key');
109
+ }
110
+ return await signingKeyOf(privateKey);
111
+ };
112
+
113
+ /** The PKCS#8 PEM text of a signing key, for the key file `importAppStoreCatalogSigningKeyPem` reads. */
114
+ export const exportAppStoreCatalogSigningKeyPem = async (keyArg: IAppStoreCatalogSigningKey): Promise<string> => {
115
+ const privateKey = readSigningPrivateKey(keyArg);
116
+ if (await computeAppStoreCatalogSigningKeyId(keyArg.publicKey) !== keyArg.keyId) {
117
+ throw new Error(`App Store catalog signing key ${keyArg.keyId} does not match its public key`);
118
+ }
119
+ return privateKey.export({ format: 'pem', type: 'pkcs8' });
120
+ };
121
+
122
+ /** The trusted-key record a consumer ships for a signing key: its public half only. */
123
+ export const getAppStoreCatalogTrustedKey = (keyArg: IAppStoreCatalogSigningKey): IAppStoreCatalogTrustedKey => ({
124
+ keyId: keyArg.keyId,
125
+ publicKey: keyArg.publicKey,
126
+ });
127
+
128
+ /**
129
+ * Reads a trusted key from the text of an SPKI PEM public key (`-----BEGIN PUBLIC KEY-----`, as
130
+ * `openssl pkey -pubout` writes it) holding an Ed25519 key. Errors never quote the input.
131
+ */
132
+ export const importAppStoreCatalogTrustedKeyPem = async (spkiPemArg: string): Promise<IAppStoreCatalogTrustedKey> => {
133
+ if (typeof spkiPemArg !== 'string' || !isSinglePemBlock(spkiPemArg, 'PUBLIC KEY')) {
134
+ throw new Error('App Store catalog trusted key must be one SPKI PEM public key block');
135
+ }
136
+ let publicKeyObject: plugins.crypto.KeyObject;
137
+ try {
138
+ publicKeyObject = plugins.crypto.createPublicKey({ key: spkiPemArg, format: 'pem' });
139
+ } catch {
140
+ throw new Error('App Store catalog trusted key is not a readable SPKI PEM public key');
141
+ }
142
+ if (publicKeyObject.type !== 'public' || publicKeyObject.asymmetricKeyType !== 'ed25519') {
143
+ throw new Error('App Store catalog trusted key must be an Ed25519 public key');
144
+ }
145
+ const publicKey = rawPublicKeyOf(publicKeyObject);
146
+ return { keyId: await computeAppStoreCatalogSigningKeyId(publicKey), publicKey };
147
+ };
148
+
149
+ /** The SPKI PEM text of a trusted key whose `keyId` matches its public key. */
150
+ export const exportAppStoreCatalogTrustedKeyPem = async (keyArg: IAppStoreCatalogTrustedKey): Promise<string> => {
151
+ if (await computeAppStoreCatalogSigningKeyId(keyArg.publicKey) !== keyArg.keyId) {
152
+ throw new Error(`App Store catalog trusted key ${keyArg.keyId} does not match its public key`);
153
+ }
154
+ return publicKeyObjectOf(keyArg.publicKey).export({ format: 'pem', type: 'spki' });
70
155
  };
71
156
 
72
157
  /**
@@ -91,13 +176,8 @@ export const signAppStoreCatalog = async (
91
176
  const payload = createAppStoreCatalogSignaturePayload(catalogDigest);
92
177
  const signatures: IAppStoreCatalogSignature[] = [];
93
178
  for (const key of signingKeysArg) {
94
- const { privateKey } = key;
95
- if (!(privateKey instanceof plugins.crypto.KeyObject) || privateKey.type !== 'private'
96
- || privateKey.asymmetricKeyType !== 'ed25519') {
97
- throw new Error('App Store catalog signing key must be an Ed25519 private key');
98
- }
99
- const publicKey = rawPublicKeyOf(plugins.crypto.createPublicKey(privateKey));
100
- if (publicKey !== key.publicKey || await computeAppStoreCatalogSigningKeyId(publicKey) !== key.keyId) {
179
+ const privateKey = readSigningPrivateKey(key);
180
+ if (await computeAppStoreCatalogSigningKeyId(key.publicKey) !== key.keyId) {
101
181
  throw new Error(`App Store catalog signing key ${key.keyId} does not match its private key`);
102
182
  }
103
183
  signatures.push({