@xyo-network/service-kit-aries 0.1.0 → 0.2.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
@@ -3,6 +3,22 @@
3
3
  Creates an explicitly configured readonly Service Kit seed through the native
4
4
  Aries public datalake reader.
5
5
 
6
+ The current public release is 0.1.0, published October 1, 2026 and registry
7
+ rechecked October 5. It depends on Aries datalake client ~0.2.0. Earlier native
8
+ HTTP and packed/registry-consumer receipts remain version-specific; publication
9
+ does not qualify current native/browser behavior, consumer adoption or hosted
10
+ availability. See [implementation status](../../docs/IMPLEMENTATION_STATUS.md)
11
+ and the [B3 contract](../../papers/B3_NATIVE_READER_ADAPTERS.md).
12
+
13
+ The checkout declares Node `^26`: SDK Protocol 8.0.1 confines the selected
14
+ graph to that major, and Aries datalake client 0.2.0 admits Node `>=26`.
15
+ Development/CI and current qualification use Node 26.9.0; other Node 26
16
+ versions require their own recorded qualification. This corrects the former
17
+ adapter Node `>=18.17.1` declaration and root Node 24.14.1 pin. Published 0.1.0
18
+ metadata remains unchanged until release; older runtime receipts remain
19
+ historical. Browser outputs and the configured-reader contract are unchanged.
20
+ See implementation status for the current local packed gate and its limits.
21
+
6
22
  ~~~ts
7
23
  import { createAriesDataLakeSeed } from '@xyo-network/service-kit-aries'
8
24
 
@@ -11,7 +11,7 @@ function strictFields(value, fields, required, label) {
11
11
  throw new TypeError(label + " must be a plain object");
12
12
  }
13
13
  const prototype = Object.getPrototypeOf(value);
14
- if (prototype !== Object.prototype && prototype !== null) {
14
+ if (prototype !== null && prototype !== Object.prototype) {
15
15
  throw new TypeError(label + " must be a plain object");
16
16
  }
17
17
  const descriptors = Object.getOwnPropertyDescriptors(value);
@@ -82,7 +82,7 @@ function pinDataLakeSeedOptions(options) {
82
82
  return Object.freeze({
83
83
  endpoint,
84
84
  id: seedId(descriptors.id?.value),
85
- ...fetcher === void 0 ? {} : { fetcher }
85
+ ...fetcher !== void 0 && { fetcher }
86
86
  });
87
87
  }
88
88
  function exactHash(hashes) {
@@ -93,7 +93,7 @@ function exactHash(hashes) {
93
93
  }
94
94
  const descriptor = Object.getOwnPropertyDescriptor(hashes, "0");
95
95
  const value = descriptor?.value;
96
- if (descriptor?.enumerable !== true || !("value" in descriptor) || typeof value !== "string" || !HASH_PATTERN.test(value)) {
96
+ if (typeof value !== "string" || descriptor?.enumerable !== true || !("value" in descriptor) || !HASH_PATTERN.test(value)) {
97
97
  throw new TypeError("Hash must be canonical 64-character lowercase hexadecimal");
98
98
  }
99
99
  return value;
@@ -148,13 +148,13 @@ function createAriesDataLakeSeed(options) {
148
148
  const native = new RestPublicPayloadsReader({
149
149
  baseUrl: endpoint.baseUrl,
150
150
  datalakeId: endpoint.datalakeId,
151
- ...pinned.fetcher === void 0 ? {} : { fetchImpl: pinned.fetcher }
151
+ ...pinned.fetcher !== void 0 && { fetchImpl: pinned.fetcher }
152
152
  });
153
153
  return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {
154
154
  const read = pinRead(hashes, readOptions);
155
155
  return await native.getMany([read.hash], {
156
156
  maxResponseBytes: read.maxResponseBytes,
157
- ...read.signal === void 0 ? {} : { signal: read.signal }
157
+ ...read.signal !== void 0 && { signal: read.signal }
158
158
  });
159
159
  }));
160
160
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAriesDataLakeSeed.ts", "../../src/configuration.ts"],
4
- "sourcesContent": ["import { RestPublicPayloadsReader } from '@ariestools/aries-datalake-client/browser'\nimport type { ConfiguredSeed } from '@xyo-network/service-kit-protocol'\n\nimport {\n configuredSeed, type DataLakeSeedOptions, pinDataLakeSeedOptions, pinRead,\n} from './configuration.js'\n\nexport interface AriesDataLakeSeedOptions extends DataLakeSeedOptions {}\n\ninterface AriesEndpoint {\n readonly baseUrl: string\n readonly datalakeId: string\n}\n\nfunction ariesEndpoint(endpoint: URL): AriesEndpoint {\n const path = endpoint.pathname.replace(/\\/+$/u, '')\n const marker = '/v1/datalakes/'\n const markerIndex = path.lastIndexOf(marker)\n const encodedId = markerIndex === -1 ? '' : path.slice(markerIndex + marker.length)\n if (markerIndex === -1 || encodedId === '' || encodedId.includes('/')) {\n throw new TypeError('Aries endpoint must end with /v1/datalakes/{native-route-id}')\n }\n let datalakeId: string\n try {\n datalakeId = decodeURIComponent(encodedId)\n } catch {\n throw new TypeError('Aries endpoint contains an invalid native route ID')\n }\n if (datalakeId.length === 0 || datalakeId.length > 128 || datalakeId.trim() !== datalakeId) {\n throw new TypeError('Aries native route IDs must be nonempty trimmed strings of at most 128 characters')\n }\n endpoint.pathname = path.slice(0, markerIndex) || '/'\n return Object.freeze({\n baseUrl: endpoint.href.replace(/\\/+$/u, ''),\n datalakeId,\n })\n}\n\n/** Create one explicitly configured public Aries datalake seed. */\nexport function createAriesDataLakeSeed(options: AriesDataLakeSeedOptions): Promise<ConfiguredSeed> {\n const pinned = pinDataLakeSeedOptions(options)\n const endpoint = ariesEndpoint(pinned.endpoint)\n const native = new RestPublicPayloadsReader({\n baseUrl: endpoint.baseUrl,\n datalakeId: endpoint.datalakeId,\n ...(pinned.fetcher === undefined ? {} : { fetchImpl: pinned.fetcher }),\n })\n return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {\n const read = pinRead(hashes, readOptions)\n return await native.getMany([read.hash], {\n maxResponseBytes: read.maxResponseBytes,\n ...(read.signal === undefined ? {} : { signal: read.signal }),\n })\n }))\n}\n", "import type {\n ConfiguredSeed, PublicObjectReader, PublicObjectReadOptions,\n} from '@xyo-network/service-kit-protocol'\nimport { DEFAULT_VERIFICATION_LIMITS } from '@xyo-network/service-kit-protocol'\n\nexport type DataLakeEndpointPolicy = 'explicit-local' | 'public-https'\n\nexport interface DataLakeSeedOptions {\n readonly endpoint: string\n readonly endpointPolicy: DataLakeEndpointPolicy\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\nexport interface PinnedDataLakeSeedOptions {\n readonly endpoint: URL\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\ninterface PinnedRead {\n readonly hash: string\n readonly maxResponseBytes: number\n readonly signal?: AbortSignal\n}\n\nconst CONFIG_FIELDS = new Set(['endpoint', 'endpointPolicy', 'fetcher', 'id'])\nconst READ_FIELDS = new Set(['maxBodyBytes', 'signal'])\nconst HASH_PATTERN = /^[0-9a-f]{64}$/u\n\nfunction strictFields(value: unknown, fields: ReadonlySet<string>, required: readonly string[], label: string) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(label + ' must be a plain object')\n }\n const prototype: unknown = Object.getPrototypeOf(value)\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(label + ' must be a plain object')\n }\n const descriptors = Object.getOwnPropertyDescriptors(value)\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !fields.has(key)) throw new TypeError(label + ' contains an unknown field')\n const descriptor = descriptors[key]\n if (descriptor?.enumerable !== true || !('value' in descriptor)) {\n throw new TypeError(label + ' fields must be enumerable own data properties')\n }\n }\n for (const key of required) {\n if (!Object.hasOwn(descriptors, key)) throw new TypeError(label + ' requires ' + key)\n }\n return descriptors\n}\n\nfunction seedId(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 128 || value.trim() !== value) {\n throw new TypeError('Seed IDs must be nonempty trimmed strings of at most 128 characters')\n }\n return value\n}\n\nfunction hasDisallowedEndpointCharacter(value: string) {\n return [...value].some((character) => {\n const codePoint = character.codePointAt(0)\n return codePoint !== undefined && (codePoint <= 0x1F || codePoint === 0x7F\n || character === '\\\\' || character.trim() === '')\n })\n}\n\nfunction endpointText(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 2048 || value.trim() !== value\n || hasDisallowedEndpointCharacter(value) || value.includes('?') || value.includes('#')) {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n return value\n}\n\nfunction endpointPolicy(value: unknown): DataLakeEndpointPolicy {\n if (value !== 'public-https' && value !== 'explicit-local') {\n throw new TypeError('endpointPolicy must be public-https or explicit-local')\n }\n return value\n}\n\nfunction parsedEndpoint(value: unknown, policyValue: unknown) {\n const text = endpointText(value)\n const policy = endpointPolicy(policyValue)\n let parsed: URL\n try {\n parsed = new URL(text)\n } catch {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n if ((parsed.protocol !== 'http:' && parsed.protocol !== 'https:') || parsed.hostname === ''\n || parsed.username !== '' || parsed.password !== '') {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n const inputWithoutTrailingSlashes = text.replace(/\\/+$/u, '')\n const parsedWithoutTrailingSlashes = parsed.href.replace(/\\/+$/u, '')\n if (parsedWithoutTrailingSlashes !== inputWithoutTrailingSlashes) {\n throw new TypeError('endpoint must not require URL normalization')\n }\n if (policy === 'public-https' && parsed.protocol !== 'https:') {\n throw new TypeError('public-https endpoints must use HTTPS')\n }\n parsed.pathname = parsed.pathname.replace(/\\/+$/u, '') || '/'\n return parsed\n}\n\nexport function pinDataLakeSeedOptions(options: DataLakeSeedOptions): PinnedDataLakeSeedOptions {\n const descriptors = strictFields(options, CONFIG_FIELDS, ['endpoint', 'endpointPolicy', 'id'], 'options')\n const fetcher: unknown = descriptors.fetcher?.value\n if (fetcher !== undefined && typeof fetcher !== 'function') throw new TypeError('fetcher must be a function')\n const endpoint = parsedEndpoint(descriptors.endpoint?.value as unknown, descriptors.endpointPolicy?.value as unknown)\n return Object.freeze({\n endpoint,\n id: seedId(descriptors.id?.value as unknown),\n ...(fetcher === undefined ? {} : { fetcher: fetcher as typeof fetch }),\n })\n}\n\nfunction exactHash(hashes: string[]) {\n if (!Array.isArray(hashes) || hashes.length !== 1) throw new TypeError('Reader requires exactly one hash')\n const keys = Reflect.ownKeys(hashes)\n if (keys.some(key => typeof key !== 'string' || (key !== '0' && key !== 'length'))) {\n throw new TypeError('Hash input must be a dense one-element array')\n }\n const descriptor = Object.getOwnPropertyDescriptor(hashes, '0')\n const value: unknown = descriptor?.value\n if (descriptor?.enumerable !== true || !('value' in descriptor) || typeof value !== 'string'\n || !HASH_PATTERN.test(value)) {\n throw new TypeError('Hash must be canonical 64-character lowercase hexadecimal')\n }\n return value\n}\n\nfunction readPolicy(options: PublicObjectReadOptions | undefined) {\n if (options === undefined) return { maxResponseBytes: DEFAULT_VERIFICATION_LIMITS.maxBodyBytes }\n const descriptors = strictFields(options, READ_FIELDS, ['maxBodyBytes', 'signal'], 'read options')\n const maxResponseBytes: unknown = descriptors.maxBodyBytes?.value\n if (!Number.isSafeInteger(maxResponseBytes) || (maxResponseBytes as number) <= 0) {\n throw new RangeError('maxBodyBytes must be a positive safe integer')\n }\n const signal: unknown = descriptors.signal?.value\n if (typeof signal !== 'object' || signal === null || typeof (signal as AbortSignal).aborted !== 'boolean'\n || typeof (signal as AbortSignal).addEventListener !== 'function'\n || typeof (signal as AbortSignal).removeEventListener !== 'function'\n || typeof (signal as AbortSignal).throwIfAborted !== 'function') {\n throw new TypeError('signal must implement AbortSignal')\n }\n return { maxResponseBytes: maxResponseBytes as number, signal: signal as AbortSignal }\n}\n\nexport function pinRead(hashes: string[], options?: PublicObjectReadOptions): PinnedRead {\n return Object.freeze({ hash: exactHash(hashes), ...readPolicy(options) })\n}\n\nexport function configuredSeed(id: string, get: PublicObjectReader['get']): ConfiguredSeed {\n return Object.freeze({ id, reader: Object.freeze({ get }) })\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { RestPublicPayloadsReader } from '@ariestools/aries-datalake-client/browser'\nimport type { ConfiguredSeed } from '@xyo-network/service-kit-protocol'\n\nimport {\n configuredSeed, type DataLakeSeedOptions, pinDataLakeSeedOptions, pinRead,\n} from './configuration.js'\n\nexport interface AriesDataLakeSeedOptions extends DataLakeSeedOptions {}\n\ninterface AriesEndpoint {\n readonly baseUrl: string\n readonly datalakeId: string\n}\n\nfunction ariesEndpoint(endpoint: URL): AriesEndpoint {\n const path = endpoint.pathname.replace(/\\/+$/u, '')\n const marker = '/v1/datalakes/'\n const markerIndex = path.lastIndexOf(marker)\n const encodedId = markerIndex === -1 ? '' : path.slice(markerIndex + marker.length)\n if (markerIndex === -1 || encodedId === '' || encodedId.includes('/')) {\n throw new TypeError('Aries endpoint must end with /v1/datalakes/{native-route-id}')\n }\n let datalakeId: string\n try {\n datalakeId = decodeURIComponent(encodedId)\n } catch {\n throw new TypeError('Aries endpoint contains an invalid native route ID')\n }\n if (datalakeId.length === 0 || datalakeId.length > 128 || datalakeId.trim() !== datalakeId) {\n throw new TypeError('Aries native route IDs must be nonempty trimmed strings of at most 128 characters')\n }\n endpoint.pathname = path.slice(0, markerIndex) || '/'\n return Object.freeze({\n baseUrl: endpoint.href.replace(/\\/+$/u, ''),\n datalakeId,\n })\n}\n\n/** Create one explicitly configured public Aries datalake seed. */\nexport function createAriesDataLakeSeed(options: AriesDataLakeSeedOptions): Promise<ConfiguredSeed> {\n const pinned = pinDataLakeSeedOptions(options)\n const endpoint = ariesEndpoint(pinned.endpoint)\n const native = new RestPublicPayloadsReader({\n baseUrl: endpoint.baseUrl,\n datalakeId: endpoint.datalakeId,\n ...(pinned.fetcher !== undefined && { fetchImpl: pinned.fetcher }),\n })\n return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {\n const read = pinRead(hashes, readOptions)\n return await native.getMany([read.hash], {\n maxResponseBytes: read.maxResponseBytes,\n ...(read.signal !== undefined && { signal: read.signal }),\n })\n }))\n}\n", "import type {\n ConfiguredSeed, PublicObjectReader, PublicObjectReadOptions,\n} from '@xyo-network/service-kit-protocol'\nimport { DEFAULT_VERIFICATION_LIMITS } from '@xyo-network/service-kit-protocol'\n\nexport type DataLakeEndpointPolicy = 'explicit-local' | 'public-https'\n\nexport interface DataLakeSeedOptions {\n readonly endpoint: string\n readonly endpointPolicy: DataLakeEndpointPolicy\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\nexport interface PinnedDataLakeSeedOptions {\n readonly endpoint: URL\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\ninterface PinnedRead {\n readonly hash: string\n readonly maxResponseBytes: number\n readonly signal?: AbortSignal\n}\n\nconst CONFIG_FIELDS = new Set(['endpoint', 'endpointPolicy', 'fetcher', 'id'])\nconst READ_FIELDS = new Set(['maxBodyBytes', 'signal'])\nconst HASH_PATTERN = /^[0-9a-f]{64}$/u\n\nfunction strictFields(value: unknown, fields: ReadonlySet<string>, required: readonly string[], label: string) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(label + ' must be a plain object')\n }\n const prototype: unknown = Object.getPrototypeOf(value)\n if (prototype !== null && prototype !== Object.prototype) {\n throw new TypeError(label + ' must be a plain object')\n }\n const descriptors = Object.getOwnPropertyDescriptors(value)\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !fields.has(key)) throw new TypeError(label + ' contains an unknown field')\n const descriptor = descriptors[key]\n if (descriptor?.enumerable !== true || !('value' in descriptor)) {\n throw new TypeError(label + ' fields must be enumerable own data properties')\n }\n }\n for (const key of required) {\n if (!Object.hasOwn(descriptors, key)) throw new TypeError(label + ' requires ' + key)\n }\n return descriptors\n}\n\nfunction seedId(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 128 || value.trim() !== value) {\n throw new TypeError('Seed IDs must be nonempty trimmed strings of at most 128 characters')\n }\n return value\n}\n\nfunction hasDisallowedEndpointCharacter(value: string) {\n return [...value].some((character) => {\n const codePoint = character.codePointAt(0)\n return codePoint !== undefined && (codePoint <= 0x1F || codePoint === 0x7F\n || character === '\\\\' || character.trim() === '')\n })\n}\n\nfunction endpointText(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 2048 || value.trim() !== value\n || hasDisallowedEndpointCharacter(value) || value.includes('?') || value.includes('#')) {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n return value\n}\n\nfunction endpointPolicy(value: unknown): DataLakeEndpointPolicy {\n if (value !== 'public-https' && value !== 'explicit-local') {\n throw new TypeError('endpointPolicy must be public-https or explicit-local')\n }\n return value\n}\n\nfunction parsedEndpoint(value: unknown, policyValue: unknown) {\n const text = endpointText(value)\n const policy = endpointPolicy(policyValue)\n let parsed: URL\n try {\n parsed = new URL(text)\n } catch {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n if ((parsed.protocol !== 'http:' && parsed.protocol !== 'https:') || parsed.hostname === ''\n || parsed.username !== '' || parsed.password !== '') {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n const inputWithoutTrailingSlashes = text.replace(/\\/+$/u, '')\n const parsedWithoutTrailingSlashes = parsed.href.replace(/\\/+$/u, '')\n if (parsedWithoutTrailingSlashes !== inputWithoutTrailingSlashes) {\n throw new TypeError('endpoint must not require URL normalization')\n }\n if (policy === 'public-https' && parsed.protocol !== 'https:') {\n throw new TypeError('public-https endpoints must use HTTPS')\n }\n parsed.pathname = parsed.pathname.replace(/\\/+$/u, '') || '/'\n return parsed\n}\n\nexport function pinDataLakeSeedOptions(options: DataLakeSeedOptions): PinnedDataLakeSeedOptions {\n const descriptors = strictFields(options, CONFIG_FIELDS, ['endpoint', 'endpointPolicy', 'id'], 'options')\n const fetcher: unknown = descriptors.fetcher?.value\n if (fetcher !== undefined && typeof fetcher !== 'function') throw new TypeError('fetcher must be a function')\n const endpoint = parsedEndpoint(descriptors.endpoint?.value as unknown, descriptors.endpointPolicy?.value as unknown)\n return Object.freeze({\n endpoint,\n id: seedId(descriptors.id?.value as unknown),\n ...(fetcher !== undefined && { fetcher: fetcher as typeof fetch }),\n })\n}\n\nfunction exactHash(hashes: string[]) {\n if (!Array.isArray(hashes) || hashes.length !== 1) throw new TypeError('Reader requires exactly one hash')\n const keys = Reflect.ownKeys(hashes)\n if (keys.some(key => typeof key !== 'string' || (key !== '0' && key !== 'length'))) {\n throw new TypeError('Hash input must be a dense one-element array')\n }\n const descriptor = Object.getOwnPropertyDescriptor(hashes, '0')\n const value: unknown = descriptor?.value\n if (typeof value !== 'string' || descriptor?.enumerable !== true || !('value' in descriptor)\n || !HASH_PATTERN.test(value)) {\n throw new TypeError('Hash must be canonical 64-character lowercase hexadecimal')\n }\n return value\n}\n\nfunction readPolicy(options: PublicObjectReadOptions | undefined) {\n if (options === undefined) return { maxResponseBytes: DEFAULT_VERIFICATION_LIMITS.maxBodyBytes }\n const descriptors = strictFields(options, READ_FIELDS, ['maxBodyBytes', 'signal'], 'read options')\n const maxResponseBytes: unknown = descriptors.maxBodyBytes?.value\n if (!Number.isSafeInteger(maxResponseBytes) || (maxResponseBytes as number) <= 0) {\n throw new RangeError('maxBodyBytes must be a positive safe integer')\n }\n const signal: unknown = descriptors.signal?.value\n if (typeof signal !== 'object' || signal === null || typeof (signal as AbortSignal).aborted !== 'boolean'\n || typeof (signal as AbortSignal).addEventListener !== 'function'\n || typeof (signal as AbortSignal).removeEventListener !== 'function'\n || typeof (signal as AbortSignal).throwIfAborted !== 'function') {\n throw new TypeError('signal must implement AbortSignal')\n }\n return { maxResponseBytes: maxResponseBytes as number, signal: signal as AbortSignal }\n}\n\nexport function pinRead(hashes: string[], options?: PublicObjectReadOptions): PinnedRead {\n return Object.freeze({ hash: exactHash(hashes), ...readPolicy(options) })\n}\n\nexport function configuredSeed(id: string, get: PublicObjectReader['get']): ConfiguredSeed {\n return Object.freeze({ id, reader: Object.freeze({ get }) })\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -11,7 +11,7 @@ function strictFields(value, fields, required, label) {
11
11
  throw new TypeError(label + " must be a plain object");
12
12
  }
13
13
  const prototype = Object.getPrototypeOf(value);
14
- if (prototype !== Object.prototype && prototype !== null) {
14
+ if (prototype !== null && prototype !== Object.prototype) {
15
15
  throw new TypeError(label + " must be a plain object");
16
16
  }
17
17
  const descriptors = Object.getOwnPropertyDescriptors(value);
@@ -82,7 +82,7 @@ function pinDataLakeSeedOptions(options) {
82
82
  return Object.freeze({
83
83
  endpoint,
84
84
  id: seedId(descriptors.id?.value),
85
- ...fetcher === void 0 ? {} : { fetcher }
85
+ ...fetcher !== void 0 && { fetcher }
86
86
  });
87
87
  }
88
88
  function exactHash(hashes) {
@@ -93,7 +93,7 @@ function exactHash(hashes) {
93
93
  }
94
94
  const descriptor = Object.getOwnPropertyDescriptor(hashes, "0");
95
95
  const value = descriptor?.value;
96
- if (descriptor?.enumerable !== true || !("value" in descriptor) || typeof value !== "string" || !HASH_PATTERN.test(value)) {
96
+ if (typeof value !== "string" || descriptor?.enumerable !== true || !("value" in descriptor) || !HASH_PATTERN.test(value)) {
97
97
  throw new TypeError("Hash must be canonical 64-character lowercase hexadecimal");
98
98
  }
99
99
  return value;
@@ -148,13 +148,13 @@ function createAriesDataLakeSeed(options) {
148
148
  const native = new RestPublicPayloadsReader({
149
149
  baseUrl: endpoint.baseUrl,
150
150
  datalakeId: endpoint.datalakeId,
151
- ...pinned.fetcher === void 0 ? {} : { fetchImpl: pinned.fetcher }
151
+ ...pinned.fetcher !== void 0 && { fetchImpl: pinned.fetcher }
152
152
  });
153
153
  return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {
154
154
  const read = pinRead(hashes, readOptions);
155
155
  return await native.getMany([read.hash], {
156
156
  maxResponseBytes: read.maxResponseBytes,
157
- ...read.signal === void 0 ? {} : { signal: read.signal }
157
+ ...read.signal !== void 0 && { signal: read.signal }
158
158
  });
159
159
  }));
160
160
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAriesDataLakeSeed.ts", "../../src/configuration.ts"],
4
- "sourcesContent": ["import { RestPublicPayloadsReader } from '@ariestools/aries-datalake-client/browser'\nimport type { ConfiguredSeed } from '@xyo-network/service-kit-protocol'\n\nimport {\n configuredSeed, type DataLakeSeedOptions, pinDataLakeSeedOptions, pinRead,\n} from './configuration.js'\n\nexport interface AriesDataLakeSeedOptions extends DataLakeSeedOptions {}\n\ninterface AriesEndpoint {\n readonly baseUrl: string\n readonly datalakeId: string\n}\n\nfunction ariesEndpoint(endpoint: URL): AriesEndpoint {\n const path = endpoint.pathname.replace(/\\/+$/u, '')\n const marker = '/v1/datalakes/'\n const markerIndex = path.lastIndexOf(marker)\n const encodedId = markerIndex === -1 ? '' : path.slice(markerIndex + marker.length)\n if (markerIndex === -1 || encodedId === '' || encodedId.includes('/')) {\n throw new TypeError('Aries endpoint must end with /v1/datalakes/{native-route-id}')\n }\n let datalakeId: string\n try {\n datalakeId = decodeURIComponent(encodedId)\n } catch {\n throw new TypeError('Aries endpoint contains an invalid native route ID')\n }\n if (datalakeId.length === 0 || datalakeId.length > 128 || datalakeId.trim() !== datalakeId) {\n throw new TypeError('Aries native route IDs must be nonempty trimmed strings of at most 128 characters')\n }\n endpoint.pathname = path.slice(0, markerIndex) || '/'\n return Object.freeze({\n baseUrl: endpoint.href.replace(/\\/+$/u, ''),\n datalakeId,\n })\n}\n\n/** Create one explicitly configured public Aries datalake seed. */\nexport function createAriesDataLakeSeed(options: AriesDataLakeSeedOptions): Promise<ConfiguredSeed> {\n const pinned = pinDataLakeSeedOptions(options)\n const endpoint = ariesEndpoint(pinned.endpoint)\n const native = new RestPublicPayloadsReader({\n baseUrl: endpoint.baseUrl,\n datalakeId: endpoint.datalakeId,\n ...(pinned.fetcher === undefined ? {} : { fetchImpl: pinned.fetcher }),\n })\n return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {\n const read = pinRead(hashes, readOptions)\n return await native.getMany([read.hash], {\n maxResponseBytes: read.maxResponseBytes,\n ...(read.signal === undefined ? {} : { signal: read.signal }),\n })\n }))\n}\n", "import type {\n ConfiguredSeed, PublicObjectReader, PublicObjectReadOptions,\n} from '@xyo-network/service-kit-protocol'\nimport { DEFAULT_VERIFICATION_LIMITS } from '@xyo-network/service-kit-protocol'\n\nexport type DataLakeEndpointPolicy = 'explicit-local' | 'public-https'\n\nexport interface DataLakeSeedOptions {\n readonly endpoint: string\n readonly endpointPolicy: DataLakeEndpointPolicy\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\nexport interface PinnedDataLakeSeedOptions {\n readonly endpoint: URL\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\ninterface PinnedRead {\n readonly hash: string\n readonly maxResponseBytes: number\n readonly signal?: AbortSignal\n}\n\nconst CONFIG_FIELDS = new Set(['endpoint', 'endpointPolicy', 'fetcher', 'id'])\nconst READ_FIELDS = new Set(['maxBodyBytes', 'signal'])\nconst HASH_PATTERN = /^[0-9a-f]{64}$/u\n\nfunction strictFields(value: unknown, fields: ReadonlySet<string>, required: readonly string[], label: string) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(label + ' must be a plain object')\n }\n const prototype: unknown = Object.getPrototypeOf(value)\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(label + ' must be a plain object')\n }\n const descriptors = Object.getOwnPropertyDescriptors(value)\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !fields.has(key)) throw new TypeError(label + ' contains an unknown field')\n const descriptor = descriptors[key]\n if (descriptor?.enumerable !== true || !('value' in descriptor)) {\n throw new TypeError(label + ' fields must be enumerable own data properties')\n }\n }\n for (const key of required) {\n if (!Object.hasOwn(descriptors, key)) throw new TypeError(label + ' requires ' + key)\n }\n return descriptors\n}\n\nfunction seedId(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 128 || value.trim() !== value) {\n throw new TypeError('Seed IDs must be nonempty trimmed strings of at most 128 characters')\n }\n return value\n}\n\nfunction hasDisallowedEndpointCharacter(value: string) {\n return [...value].some((character) => {\n const codePoint = character.codePointAt(0)\n return codePoint !== undefined && (codePoint <= 0x1F || codePoint === 0x7F\n || character === '\\\\' || character.trim() === '')\n })\n}\n\nfunction endpointText(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 2048 || value.trim() !== value\n || hasDisallowedEndpointCharacter(value) || value.includes('?') || value.includes('#')) {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n return value\n}\n\nfunction endpointPolicy(value: unknown): DataLakeEndpointPolicy {\n if (value !== 'public-https' && value !== 'explicit-local') {\n throw new TypeError('endpointPolicy must be public-https or explicit-local')\n }\n return value\n}\n\nfunction parsedEndpoint(value: unknown, policyValue: unknown) {\n const text = endpointText(value)\n const policy = endpointPolicy(policyValue)\n let parsed: URL\n try {\n parsed = new URL(text)\n } catch {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n if ((parsed.protocol !== 'http:' && parsed.protocol !== 'https:') || parsed.hostname === ''\n || parsed.username !== '' || parsed.password !== '') {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n const inputWithoutTrailingSlashes = text.replace(/\\/+$/u, '')\n const parsedWithoutTrailingSlashes = parsed.href.replace(/\\/+$/u, '')\n if (parsedWithoutTrailingSlashes !== inputWithoutTrailingSlashes) {\n throw new TypeError('endpoint must not require URL normalization')\n }\n if (policy === 'public-https' && parsed.protocol !== 'https:') {\n throw new TypeError('public-https endpoints must use HTTPS')\n }\n parsed.pathname = parsed.pathname.replace(/\\/+$/u, '') || '/'\n return parsed\n}\n\nexport function pinDataLakeSeedOptions(options: DataLakeSeedOptions): PinnedDataLakeSeedOptions {\n const descriptors = strictFields(options, CONFIG_FIELDS, ['endpoint', 'endpointPolicy', 'id'], 'options')\n const fetcher: unknown = descriptors.fetcher?.value\n if (fetcher !== undefined && typeof fetcher !== 'function') throw new TypeError('fetcher must be a function')\n const endpoint = parsedEndpoint(descriptors.endpoint?.value as unknown, descriptors.endpointPolicy?.value as unknown)\n return Object.freeze({\n endpoint,\n id: seedId(descriptors.id?.value as unknown),\n ...(fetcher === undefined ? {} : { fetcher: fetcher as typeof fetch }),\n })\n}\n\nfunction exactHash(hashes: string[]) {\n if (!Array.isArray(hashes) || hashes.length !== 1) throw new TypeError('Reader requires exactly one hash')\n const keys = Reflect.ownKeys(hashes)\n if (keys.some(key => typeof key !== 'string' || (key !== '0' && key !== 'length'))) {\n throw new TypeError('Hash input must be a dense one-element array')\n }\n const descriptor = Object.getOwnPropertyDescriptor(hashes, '0')\n const value: unknown = descriptor?.value\n if (descriptor?.enumerable !== true || !('value' in descriptor) || typeof value !== 'string'\n || !HASH_PATTERN.test(value)) {\n throw new TypeError('Hash must be canonical 64-character lowercase hexadecimal')\n }\n return value\n}\n\nfunction readPolicy(options: PublicObjectReadOptions | undefined) {\n if (options === undefined) return { maxResponseBytes: DEFAULT_VERIFICATION_LIMITS.maxBodyBytes }\n const descriptors = strictFields(options, READ_FIELDS, ['maxBodyBytes', 'signal'], 'read options')\n const maxResponseBytes: unknown = descriptors.maxBodyBytes?.value\n if (!Number.isSafeInteger(maxResponseBytes) || (maxResponseBytes as number) <= 0) {\n throw new RangeError('maxBodyBytes must be a positive safe integer')\n }\n const signal: unknown = descriptors.signal?.value\n if (typeof signal !== 'object' || signal === null || typeof (signal as AbortSignal).aborted !== 'boolean'\n || typeof (signal as AbortSignal).addEventListener !== 'function'\n || typeof (signal as AbortSignal).removeEventListener !== 'function'\n || typeof (signal as AbortSignal).throwIfAborted !== 'function') {\n throw new TypeError('signal must implement AbortSignal')\n }\n return { maxResponseBytes: maxResponseBytes as number, signal: signal as AbortSignal }\n}\n\nexport function pinRead(hashes: string[], options?: PublicObjectReadOptions): PinnedRead {\n return Object.freeze({ hash: exactHash(hashes), ...readPolicy(options) })\n}\n\nexport function configuredSeed(id: string, get: PublicObjectReader['get']): ConfiguredSeed {\n return Object.freeze({ id, reader: Object.freeze({ get }) })\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { RestPublicPayloadsReader } from '@ariestools/aries-datalake-client/browser'\nimport type { ConfiguredSeed } from '@xyo-network/service-kit-protocol'\n\nimport {\n configuredSeed, type DataLakeSeedOptions, pinDataLakeSeedOptions, pinRead,\n} from './configuration.js'\n\nexport interface AriesDataLakeSeedOptions extends DataLakeSeedOptions {}\n\ninterface AriesEndpoint {\n readonly baseUrl: string\n readonly datalakeId: string\n}\n\nfunction ariesEndpoint(endpoint: URL): AriesEndpoint {\n const path = endpoint.pathname.replace(/\\/+$/u, '')\n const marker = '/v1/datalakes/'\n const markerIndex = path.lastIndexOf(marker)\n const encodedId = markerIndex === -1 ? '' : path.slice(markerIndex + marker.length)\n if (markerIndex === -1 || encodedId === '' || encodedId.includes('/')) {\n throw new TypeError('Aries endpoint must end with /v1/datalakes/{native-route-id}')\n }\n let datalakeId: string\n try {\n datalakeId = decodeURIComponent(encodedId)\n } catch {\n throw new TypeError('Aries endpoint contains an invalid native route ID')\n }\n if (datalakeId.length === 0 || datalakeId.length > 128 || datalakeId.trim() !== datalakeId) {\n throw new TypeError('Aries native route IDs must be nonempty trimmed strings of at most 128 characters')\n }\n endpoint.pathname = path.slice(0, markerIndex) || '/'\n return Object.freeze({\n baseUrl: endpoint.href.replace(/\\/+$/u, ''),\n datalakeId,\n })\n}\n\n/** Create one explicitly configured public Aries datalake seed. */\nexport function createAriesDataLakeSeed(options: AriesDataLakeSeedOptions): Promise<ConfiguredSeed> {\n const pinned = pinDataLakeSeedOptions(options)\n const endpoint = ariesEndpoint(pinned.endpoint)\n const native = new RestPublicPayloadsReader({\n baseUrl: endpoint.baseUrl,\n datalakeId: endpoint.datalakeId,\n ...(pinned.fetcher !== undefined && { fetchImpl: pinned.fetcher }),\n })\n return Promise.resolve(configuredSeed(pinned.id, async (hashes, readOptions) => {\n const read = pinRead(hashes, readOptions)\n return await native.getMany([read.hash], {\n maxResponseBytes: read.maxResponseBytes,\n ...(read.signal !== undefined && { signal: read.signal }),\n })\n }))\n}\n", "import type {\n ConfiguredSeed, PublicObjectReader, PublicObjectReadOptions,\n} from '@xyo-network/service-kit-protocol'\nimport { DEFAULT_VERIFICATION_LIMITS } from '@xyo-network/service-kit-protocol'\n\nexport type DataLakeEndpointPolicy = 'explicit-local' | 'public-https'\n\nexport interface DataLakeSeedOptions {\n readonly endpoint: string\n readonly endpointPolicy: DataLakeEndpointPolicy\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\nexport interface PinnedDataLakeSeedOptions {\n readonly endpoint: URL\n readonly fetcher?: typeof fetch\n readonly id: string\n}\n\ninterface PinnedRead {\n readonly hash: string\n readonly maxResponseBytes: number\n readonly signal?: AbortSignal\n}\n\nconst CONFIG_FIELDS = new Set(['endpoint', 'endpointPolicy', 'fetcher', 'id'])\nconst READ_FIELDS = new Set(['maxBodyBytes', 'signal'])\nconst HASH_PATTERN = /^[0-9a-f]{64}$/u\n\nfunction strictFields(value: unknown, fields: ReadonlySet<string>, required: readonly string[], label: string) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(label + ' must be a plain object')\n }\n const prototype: unknown = Object.getPrototypeOf(value)\n if (prototype !== null && prototype !== Object.prototype) {\n throw new TypeError(label + ' must be a plain object')\n }\n const descriptors = Object.getOwnPropertyDescriptors(value)\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !fields.has(key)) throw new TypeError(label + ' contains an unknown field')\n const descriptor = descriptors[key]\n if (descriptor?.enumerable !== true || !('value' in descriptor)) {\n throw new TypeError(label + ' fields must be enumerable own data properties')\n }\n }\n for (const key of required) {\n if (!Object.hasOwn(descriptors, key)) throw new TypeError(label + ' requires ' + key)\n }\n return descriptors\n}\n\nfunction seedId(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 128 || value.trim() !== value) {\n throw new TypeError('Seed IDs must be nonempty trimmed strings of at most 128 characters')\n }\n return value\n}\n\nfunction hasDisallowedEndpointCharacter(value: string) {\n return [...value].some((character) => {\n const codePoint = character.codePointAt(0)\n return codePoint !== undefined && (codePoint <= 0x1F || codePoint === 0x7F\n || character === '\\\\' || character.trim() === '')\n })\n}\n\nfunction endpointText(value: unknown) {\n if (typeof value !== 'string' || value.length === 0 || value.length > 2048 || value.trim() !== value\n || hasDisallowedEndpointCharacter(value) || value.includes('?') || value.includes('#')) {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n return value\n}\n\nfunction endpointPolicy(value: unknown): DataLakeEndpointPolicy {\n if (value !== 'public-https' && value !== 'explicit-local') {\n throw new TypeError('endpointPolicy must be public-https or explicit-local')\n }\n return value\n}\n\nfunction parsedEndpoint(value: unknown, policyValue: unknown) {\n const text = endpointText(value)\n const policy = endpointPolicy(policyValue)\n let parsed: URL\n try {\n parsed = new URL(text)\n } catch {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n if ((parsed.protocol !== 'http:' && parsed.protocol !== 'https:') || parsed.hostname === ''\n || parsed.username !== '' || parsed.password !== '') {\n throw new TypeError('endpoint must be an unambiguous absolute HTTP(S) URL')\n }\n const inputWithoutTrailingSlashes = text.replace(/\\/+$/u, '')\n const parsedWithoutTrailingSlashes = parsed.href.replace(/\\/+$/u, '')\n if (parsedWithoutTrailingSlashes !== inputWithoutTrailingSlashes) {\n throw new TypeError('endpoint must not require URL normalization')\n }\n if (policy === 'public-https' && parsed.protocol !== 'https:') {\n throw new TypeError('public-https endpoints must use HTTPS')\n }\n parsed.pathname = parsed.pathname.replace(/\\/+$/u, '') || '/'\n return parsed\n}\n\nexport function pinDataLakeSeedOptions(options: DataLakeSeedOptions): PinnedDataLakeSeedOptions {\n const descriptors = strictFields(options, CONFIG_FIELDS, ['endpoint', 'endpointPolicy', 'id'], 'options')\n const fetcher: unknown = descriptors.fetcher?.value\n if (fetcher !== undefined && typeof fetcher !== 'function') throw new TypeError('fetcher must be a function')\n const endpoint = parsedEndpoint(descriptors.endpoint?.value as unknown, descriptors.endpointPolicy?.value as unknown)\n return Object.freeze({\n endpoint,\n id: seedId(descriptors.id?.value as unknown),\n ...(fetcher !== undefined && { fetcher: fetcher as typeof fetch }),\n })\n}\n\nfunction exactHash(hashes: string[]) {\n if (!Array.isArray(hashes) || hashes.length !== 1) throw new TypeError('Reader requires exactly one hash')\n const keys = Reflect.ownKeys(hashes)\n if (keys.some(key => typeof key !== 'string' || (key !== '0' && key !== 'length'))) {\n throw new TypeError('Hash input must be a dense one-element array')\n }\n const descriptor = Object.getOwnPropertyDescriptor(hashes, '0')\n const value: unknown = descriptor?.value\n if (typeof value !== 'string' || descriptor?.enumerable !== true || !('value' in descriptor)\n || !HASH_PATTERN.test(value)) {\n throw new TypeError('Hash must be canonical 64-character lowercase hexadecimal')\n }\n return value\n}\n\nfunction readPolicy(options: PublicObjectReadOptions | undefined) {\n if (options === undefined) return { maxResponseBytes: DEFAULT_VERIFICATION_LIMITS.maxBodyBytes }\n const descriptors = strictFields(options, READ_FIELDS, ['maxBodyBytes', 'signal'], 'read options')\n const maxResponseBytes: unknown = descriptors.maxBodyBytes?.value\n if (!Number.isSafeInteger(maxResponseBytes) || (maxResponseBytes as number) <= 0) {\n throw new RangeError('maxBodyBytes must be a positive safe integer')\n }\n const signal: unknown = descriptors.signal?.value\n if (typeof signal !== 'object' || signal === null || typeof (signal as AbortSignal).aborted !== 'boolean'\n || typeof (signal as AbortSignal).addEventListener !== 'function'\n || typeof (signal as AbortSignal).removeEventListener !== 'function'\n || typeof (signal as AbortSignal).throwIfAborted !== 'function') {\n throw new TypeError('signal must implement AbortSignal')\n }\n return { maxResponseBytes: maxResponseBytes as number, signal: signal as AbortSignal }\n}\n\nexport function pinRead(hashes: string[], options?: PublicObjectReadOptions): PinnedRead {\n return Object.freeze({ hash: exactHash(hashes), ...readPolicy(options) })\n}\n\nexport function configuredSeed(id: string, get: PublicObjectReader['get']): ConfiguredSeed {\n return Object.freeze({ id, reader: Object.freeze({ get }) })\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/service-kit-aries",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Configured public Aries datalake seeds for Service Kit",
5
5
  "license": "LGPL-3.0-only",
6
6
  "sideEffects": false,
@@ -28,19 +28,19 @@
28
28
  "README.md"
29
29
  ],
30
30
  "dependencies": {
31
- "@ariestools/aries-datalake-client": "~0.1.22",
32
- "@xyo-network/service-kit-protocol": "~0.1.0"
31
+ "@ariestools/aries-datalake-client": "~0.2.0",
32
+ "@xyo-network/service-kit-protocol": "~0.2.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@ariestools/toolchain": "~10.0.8",
36
- "@ariestools/tsconfig": "~10.0.8",
37
- "@ariestools/tsconfig-dom": "~10.0.8",
35
+ "@ariestools/toolchain": "~10.1.0",
36
+ "@ariestools/tsconfig": "~10.1.0",
37
+ "@ariestools/tsconfig-dom": "~10.1.0",
38
38
  "@opentelemetry/api": "~1.9.1",
39
39
  "@xyo-network/sdk-protocol": "~8.0.1",
40
- "eslint": "~10.11.0",
40
+ "eslint": "~10.12.0",
41
41
  "eslint-import-resolver-typescript": "~4.4.5",
42
42
  "typescript": "~6.0.3",
43
- "vite": "~8.3.1",
43
+ "vite": "~8.3.2",
44
44
  "vitest": "~5.0.3",
45
45
  "zod": "~4.6.5"
46
46
  },
@@ -50,7 +50,7 @@
50
50
  "zod": "^4.6"
51
51
  },
52
52
  "engines": {
53
- "node": ">=18.17.1"
53
+ "node": "^26"
54
54
  },
55
55
  "engineStrict": true,
56
56
  "publishConfig": {