@tinycloud/courier 0.3.0-beta.4 → 0.3.0-beta.6

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
@@ -86,9 +86,20 @@ address replaces the older pending request only after the new request succeeds;
86
86
  the new request fails, the older pending request is kept and `--code-stdin` still
87
87
  completes it.
88
88
 
89
- `courier credential show --email <addr>` prints the stored credential's `email`,
90
- `credentialId`, `issuedAt`, `expiresAt` and `status`. The credential itself is
91
- never printed.
89
+ `courier credential show --email <addr>` prints one JSON document on stdout (pretty
90
+ printed, nothing else on stdout) with `address`, `credentialId`, `issuedAt`,
91
+ `expiresAt` and `status`. The credential itself is never printed. Every read
92
+ re-verifies the stored record offline against the pinned issuer key before anything
93
+ else. A record that fails is refused with `credential-record-invalid` and kept
94
+ untouched for inspection; it is never deleted on the strength of its stored fields.
95
+ Only a record that passed verification can be dropped, and only when its own
96
+ verified `exp` is less than 60 seconds away or it was issued more than 3600 seconds
97
+ ago: it is then deleted and reported as `credential.show.NOT_FOUND`.
98
+
99
+ `acquire` prints one JSON document on stdout (pretty printed, nothing else on
100
+ stdout). The first call (`status: "code-sent"`) returns `codeExpiresAt`; enter the
101
+ code within 5 minutes. The second call (`status: "acquired"`) returns `issuedAt` and
102
+ `expiresAt`, the end of the credential's validity. Human hints go to stderr.
92
103
 
93
104
  ### Settings
94
105
 
@@ -1,38 +1,32 @@
1
- import { type CredentialRequirement, type StoredCredentialRecord, type VerifiedCredential } from '@tinycloud/sdk-core';
1
+ import { verifyStoredEmailProof, type EmailProofResult, type StoredEmailProofRecord } from '@tinycloud/node-sdk/credentials';
2
+ import { type CredentialRequirement } from '@tinycloud/sdk-core';
3
+ /** The offline re-verify used by `StoredCredentialSource`. Injectable so tests can stand in for the issuer keys. */
4
+ export type StoredVerifier = typeof verifyStoredEmailProof;
2
5
  /**
3
- * Credentials held by Courier, keyed by holder DID and requirement digest.
4
- * Same `find`/`store` contract as the receiver custody used by `tinycloud share receive`.
6
+ * Stored email credentials for the Courier agent.
7
+ *
8
+ * - `find` authenticates the stored record first, with the offline verifier, and refuses anything that
9
+ * fails: the record is neither returned nor deleted, and the caller gets `credential-record-invalid`.
10
+ * - Only then does the lifecycle apply, and only to the authenticated `issuedAt` and `expiresAt` (the
11
+ * verifier proves both equal the signed `iat` and `exp`): a credential with less than 60 s of its own
12
+ * `exp` left, or issued more than the maximum age ago, is deleted and reported as absent.
13
+ * Nothing is deleted on the strength of a stored field the verifier has not accepted.
5
14
  */
6
- export interface CredentialSource {
7
- find(input: {
8
- readonly requirement: CredentialRequirement;
9
- readonly requirementDigest: string;
10
- readonly holderDid: string;
11
- readonly now?: Date;
12
- }): Promise<StoredCredentialRecord | undefined>;
13
- store(input: {
14
- readonly verified: VerifiedCredential;
15
- readonly requirement: CredentialRequirement;
16
- readonly requirementDigest: string;
17
- readonly holderDid: string;
18
- readonly now?: Date;
19
- }): Promise<StoredCredentialRecord>;
20
- }
21
- /** Stored credentials for the Courier agent. Records are dropped once they fail the requirement's window. */
22
- export declare class StoredCredentialSource implements CredentialSource {
15
+ export declare class StoredCredentialSource {
23
16
  private readonly home;
24
- constructor(home?: string);
17
+ private readonly verify;
18
+ constructor(home?: string, verify?: typeof verifyStoredEmailProof);
25
19
  find(input: {
26
20
  readonly requirement: CredentialRequirement;
27
21
  readonly requirementDigest: string;
28
22
  readonly holderDid: string;
29
23
  readonly now?: Date;
30
- }): Promise<StoredCredentialRecord | undefined>;
24
+ }): Promise<StoredEmailProofRecord | undefined>;
31
25
  store(input: {
32
- readonly verified: VerifiedCredential;
26
+ readonly result: EmailProofResult;
33
27
  readonly requirement: CredentialRequirement;
34
28
  readonly requirementDigest: string;
35
29
  readonly holderDid: string;
36
30
  readonly now?: Date;
37
- }): Promise<StoredCredentialRecord>;
31
+ }): Promise<StoredEmailProofRecord>;
38
32
  }
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Credential store under `<home>/credentials/`.
3
3
  *
4
- * - Directory is created 0700 and re-checked on every read (real dir, owned by
5
- * the current uid, no group/world bits). Files are written 0600 via O_EXCL
6
- * temp + fsync + rename, and read only with O_NOFOLLOW after an lstat check
7
- * (regular file, 0600, owned by current uid, same dev/ino on open).
4
+ * - Directory: `ensureSecureDir` / `checkSecureDir` from `@tinycloud/node-sdk/credential-pending-store`
5
+ * (real directory, owner-only, owned by the current uid; a symlink is refused and never chmodded).
6
+ * - Files: written 0600 via O_EXCL temp + fsync + rename, and read only with O_NOFOLLOW after an
7
+ * lstat check (regular file, 0600, owned by current uid, same dev/ino on open). These file-level
8
+ * helpers are Courier-local; the pending store has its own record format.
9
+ * - Every `find` and `store` re-verifies the envelope offline with `verifyStoredEmailProof`.
8
10
  *
9
11
  * Pending email-proof requests are not stored here; `@tinycloud/node-sdk/credential-pending-store`
10
12
  * owns them.
@@ -12,10 +14,18 @@
12
14
  import fs from 'node:fs';
13
15
  import path from 'node:path';
14
16
  import { createHash, randomBytes } from 'node:crypto';
15
- import { createStoredCredentialRecord, credentialMatchesRequirement, } from '@tinycloud/sdk-core';
17
+ import { checkSecureDir, ensureSecureDir } from '@tinycloud/node-sdk/credential-pending-store';
18
+ import { verifyStoredEmailProof, } from '@tinycloud/node-sdk/credentials';
19
+ import { createStoredCredentialRecord, EMAIL_CREDENTIAL_MAX_AGE_SECONDS, } from '@tinycloud/sdk-core';
16
20
  import { CourierError } from './errors.js';
17
- import { mkdirOwnerOnly, profileDir } from './profile.js';
21
+ import { profileDir } from './profile.js';
18
22
  const DIR_NAME = 'credentials';
23
+ /**
24
+ * A stored credential is returned only while more than this much of its own `exp` window remains.
25
+ * A credential that expires within the margin is treated as expired, so a holder never starts a
26
+ * use that a verifier with a slightly different clock would reject.
27
+ */
28
+ const EXPIRY_MARGIN_MS = 60_000;
19
29
  function credentialsDir(home) {
20
30
  return path.join(home, DIR_NAME);
21
31
  }
@@ -47,27 +57,6 @@ function assertOwnedByCurrentUser(st, label) {
47
57
  throw new CourierError('credential-permissions', `${label} is not owned by the current user.`);
48
58
  }
49
59
  }
50
- /** Creates the store directory 0700 if absent. Refuses a symlink or a directory owned by another user. */
51
- function ensureSecureDir(home) {
52
- const dir = credentialsDir(home);
53
- mkdirOwnerOnly(dir);
54
- const st = fs.lstatSync(dir);
55
- if (!st.isDirectory())
56
- throw new CourierError('credential-permissions', `${dir} must be a real directory, not a symlink or file.`);
57
- assertOwnedByCurrentUser(st, dir);
58
- fs.chmodSync(dir, 0o700);
59
- }
60
- /** Returns false when the store directory does not exist. Re-checks symlink, owner, and mode on every call. */
61
- function checkSecureDir(home) {
62
- const dir = credentialsDir(home);
63
- const st = lstatOrUndefined(dir);
64
- if (!st)
65
- return false;
66
- if (!st.isDirectory())
67
- throw new CourierError('credential-permissions', `${dir} must be a real directory, not a symlink or file.`);
68
- assertOwnerOnly(st, dir, '0700');
69
- return true;
70
- }
71
60
  /**
72
61
  * Atomic owner-only write: O_EXCL|O_NOFOLLOW temp file at 0600, fsync, then rename.
73
62
  * Refuses to replace a destination that is not a regular file.
@@ -137,11 +126,22 @@ function readOwnerOnly(home, file) {
137
126
  function removeFile(file) {
138
127
  fs.rmSync(file, { force: true });
139
128
  }
140
- /** Stored credentials for the Courier agent. Records are dropped once they fail the requirement's window. */
129
+ /**
130
+ * Stored email credentials for the Courier agent.
131
+ *
132
+ * - `find` authenticates the stored record first, with the offline verifier, and refuses anything that
133
+ * fails: the record is neither returned nor deleted, and the caller gets `credential-record-invalid`.
134
+ * - Only then does the lifecycle apply, and only to the authenticated `issuedAt` and `expiresAt` (the
135
+ * verifier proves both equal the signed `iat` and `exp`): a credential with less than 60 s of its own
136
+ * `exp` left, or issued more than the maximum age ago, is deleted and reported as absent.
137
+ * Nothing is deleted on the strength of a stored field the verifier has not accepted.
138
+ */
141
139
  export class StoredCredentialSource {
142
140
  home;
143
- constructor(home = profileDir()) {
141
+ verify;
142
+ constructor(home = profileDir(), verify = verifyStoredEmailProof) {
144
143
  this.home = home;
144
+ this.verify = verify;
145
145
  }
146
146
  async find(input) {
147
147
  const file = credentialFile(this.home, input.holderDid, input.requirementDigest);
@@ -149,20 +149,49 @@ export class StoredCredentialSource {
149
149
  if (!record)
150
150
  return undefined;
151
151
  const now = input.now ?? new Date();
152
- if (!credentialMatchesRequirement(input.requirement, record, input.holderDid, now)) {
152
+ // The verifier enforces the validity window against the instant it is given. Authenticating at the
153
+ // record's own issuance instant proves the signature and every stored field regardless of the clock,
154
+ // so an honestly expired record is classified below from authenticated fields instead of being refused.
155
+ // A stored issuedAt or expiresAt that differs from the signed iat or exp is refused by the verifier.
156
+ const authenticatedAt = Math.max(Date.parse(record.issuedAt), Date.parse(record.notBefore));
157
+ try {
158
+ // The lifecycle below does arithmetic on these fields, so a verifier that accepted the record must not let a
159
+ // field that is not a date through: NaN comparisons are all false and would keep an expired record.
160
+ if (!Number.isFinite(authenticatedAt) || !Number.isFinite(Date.parse(record.expiresAt)))
161
+ throw new Error('stored record has no usable dates');
162
+ await this.verify({ record, requirement: input.requirement, holderDid: input.holderDid, now: new Date(authenticatedAt) });
163
+ }
164
+ catch {
165
+ throw new CourierError('credential-record-invalid', 'Stored credential failed offline verification and was not returned. Run `credential acquire` again.');
166
+ }
167
+ const expired = Date.parse(record.expiresAt) - EXPIRY_MARGIN_MS <= now.getTime();
168
+ const stale = now.getTime() - Date.parse(record.issuedAt) > EMAIL_CREDENTIAL_MAX_AGE_SECONDS * 1000;
169
+ if (expired || stale) {
153
170
  removeFile(file);
154
171
  return undefined;
155
172
  }
156
173
  return record;
157
174
  }
158
175
  async store(input) {
159
- const record = await createStoredCredentialRecord({
160
- verified: input.verified,
176
+ const now = input.now ?? new Date();
177
+ const base = await createStoredCredentialRecord({
178
+ verified: input.result.verified,
161
179
  ownerDid: input.holderDid,
162
180
  requirement: input.requirement,
163
181
  requirementDigest: input.requirementDigest,
164
- storedAt: (input.now ?? new Date()).toISOString(),
182
+ storedAt: now.toISOString(),
165
183
  });
184
+ const record = {
185
+ ...base,
186
+ subjectDid: input.result.envelope.subjectDid,
187
+ descriptor: input.result.descriptor,
188
+ };
189
+ try {
190
+ await this.verify({ record, requirement: input.requirement, holderDid: input.holderDid, now });
191
+ }
192
+ catch {
193
+ throw new CourierError('credential-record-invalid', 'Issued credential failed offline verification and was not stored. Request a new code.');
194
+ }
166
195
  writeOwnerOnly(this.home, credentialFile(this.home, input.holderDid, input.requirementDigest), record);
167
196
  return record;
168
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"credential-source.js","sourceRoot":"","sources":["../src/credential-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-source.js","sourceRoot":"","sources":["../src/credential-source.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { completeEmailProof, requestEmailProofCode } from '@tinycloud/node-sdk/credentials';
2
2
  import { type ParsedArgs } from './args.js';
3
3
  import { type AgentKey } from './profile.js';
4
+ import { type StoredVerifier } from './credential-source.js';
4
5
  export interface CredentialDeps {
5
6
  home?: string;
6
7
  now?: () => Date;
@@ -8,8 +9,11 @@ export interface CredentialDeps {
8
9
  loadKey?: (home: string) => AgentKey;
9
10
  requestCode?: typeof requestEmailProofCode;
10
11
  completeProof?: typeof completeEmailProof;
12
+ /** Test seam for the offline re-verify on store and find. Defaults to verifyStoredEmailProof. */
13
+ verifyStored?: StoredVerifier;
11
14
  /** Reads the first line of stdin for `--code-stdin`. */
12
15
  readStdinLine?: () => Promise<string>;
13
16
  out?: (text: string) => void;
17
+ err?: (text: string) => void;
14
18
  }
15
19
  export declare function cmdCredential(args: ParsedArgs, deps?: CredentialDeps): Promise<void>;
@@ -8,6 +8,8 @@ import { requireFlag } from './args.js';
8
8
  import { cmd } from './program.js';
9
9
  import { loadKey, profileDir } from './profile.js';
10
10
  import { StoredCredentialSource } from './credential-source.js';
11
+ /** Code window: 5 minutes (lifecycle ruling). The witness returns no code expiry, so it is computed from the pending record's creation time. */
12
+ const CODE_WINDOW_MS = 5 * 60_000;
11
13
  const acquireUsage = () => `Usage: ${cmd('credential acquire --email <addr> [--code-stdin]')}`;
12
14
  const showUsage = () => `Usage: ${cmd('credential show --email <addr>')}`;
13
15
  const credentialUsage = () => `${acquireUsage()}\n${showUsage()}`;
@@ -89,7 +91,9 @@ async function acquire(args, deps) {
89
91
  if (older && older.requestId !== pending.requestId)
90
92
  await store.delete(older.requestId);
91
93
  });
92
- deps.out(`Verification code sent to ${address}. Run \`${cmd(`credential acquire --email ${address} --code-stdin`)}\` and enter the code within 15 minutes.\n`);
94
+ const codeExpiresAt = new Date(Math.min(Date.parse(pending.expiresAt), Date.parse(pending.createdAt) + CODE_WINDOW_MS)).toISOString();
95
+ deps.out(JSON.stringify({ ok: true, status: 'code-sent', address, codeExpiresAt }, null, 2) + '\n');
96
+ deps.err(`Verification code sent to ${address}. Run \`${cmd(`credential acquire --email ${address} --code-stdin`)}\` and enter the code within 5 minutes (before ${codeExpiresAt}).\n`);
93
97
  return;
94
98
  }
95
99
  // Step 2: the code is validated before any store or network access, then used once and never written.
@@ -120,22 +124,28 @@ async function acquire(args, deps) {
120
124
  }
121
125
  const requirement = emailProofRequirement(address);
122
126
  const requirementDigest = await credentialRequirementDigest(requirement);
123
- await new StoredCredentialSource(deps.home).store({
124
- verified: result.verified,
125
- requirement,
126
- requirementDigest,
127
- holderDid: holder.did,
128
- now: deps.now(),
129
- });
130
- await withStoreErrors(() => store.delete(pending.requestId));
131
- deps.out(`Email credential stored for ${address}. It is valid for up to 1 hour from issuance.\n`);
127
+ try {
128
+ await new StoredCredentialSource(deps.home, deps.verifyStored).store({
129
+ result,
130
+ requirement,
131
+ requirementDigest,
132
+ holderDid: holder.did,
133
+ now: deps.now(),
134
+ });
135
+ }
136
+ finally {
137
+ // The code was consumed by the witness; the pending request is spent whether or not the record was stored.
138
+ await withStoreErrors(() => store.delete(pending.requestId));
139
+ }
140
+ deps.out(JSON.stringify({ ok: true, status: 'acquired', address, issuedAt: result.issuedAt, expiresAt: result.expiresAt }, null, 2) + '\n');
141
+ deps.err(`Email credential stored for ${address}. Valid until ${result.expiresAt}.\n`);
132
142
  }
133
143
  async function show(args, deps) {
134
144
  const address = requireFlag(args, 'email', showUsage()).trim();
135
145
  const holder = holderFor(deps.loadKey(deps.home));
136
146
  const requirement = emailProofRequirement(address);
137
147
  const requirementDigest = await credentialRequirementDigest(requirement);
138
- const record = await new StoredCredentialSource(deps.home).find({
148
+ const record = await new StoredCredentialSource(deps.home, deps.verifyStored).find({
139
149
  requirement,
140
150
  requirementDigest,
141
151
  holderDid: holder.did,
@@ -145,14 +155,7 @@ async function show(args, deps) {
145
155
  throw new CourierError('credential.show.NOT_FOUND', `No valid stored email credential for ${address}. Run \`${cmd(`credential acquire --email ${address}`)}\`.`);
146
156
  }
147
157
  // The bearer `credential` (SD-JWT) is never printed.
148
- deps.out([
149
- `email: ${record.claims.email}`,
150
- `credentialId: ${record.credentialId}`,
151
- `issuedAt: ${record.issuedAt}`,
152
- `expiresAt: ${record.expiresAt}`,
153
- `status: ${record.status.method}`,
154
- '',
155
- ].join('\n'));
158
+ deps.out(JSON.stringify({ ok: true, address, credentialId: record.credentialId, issuedAt: record.issuedAt, expiresAt: record.expiresAt, status: record.status.method }, null, 2) + '\n');
156
159
  }
157
160
  export async function cmdCredential(args, deps = {}) {
158
161
  const resolved = {
@@ -162,8 +165,10 @@ export async function cmdCredential(args, deps = {}) {
162
165
  loadKey: deps.loadKey ?? ((home) => loadKey(home)),
163
166
  requestCode: deps.requestCode ?? requestEmailProofCode,
164
167
  completeProof: deps.completeProof ?? completeEmailProof,
168
+ verifyStored: deps.verifyStored,
165
169
  readStdinLine: deps.readStdinLine ?? readStdinFirstLine,
166
170
  out: deps.out ?? ((text) => { process.stdout.write(text); }),
171
+ err: deps.err ?? ((text) => { process.stderr.write(text); }),
167
172
  };
168
173
  switch (args.positional[0]) {
169
174
  case 'acquire': return acquire(args, resolved);
@@ -1 +1 @@
1
- {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -10,6 +10,7 @@ import { cmdPause, cmdResume } from './pause.js';
10
10
  import { cmdGuard } from './guard/command.js';
11
11
  import { cmdBroker, cmdRunApproved } from './broker.js';
12
12
  import { cmdCredential } from './credential.js';
13
+ import { courierVersion } from './version.js';
13
14
  function usage() {
14
15
  const name = programName();
15
16
  return `${name} — agent-to-agent threads over TinyCloud (v0)
@@ -127,6 +128,10 @@ api.openkey.so for openkey.so, otherwise the OpenKey host).
127
128
  export async function run(argv) {
128
129
  const args = parseArgs(argv);
129
130
  const command = args.positional[0];
131
+ if (!command && args.has('version')) {
132
+ process.stdout.write(`${courierVersion()}\n`);
133
+ return;
134
+ }
130
135
  if (command === 'request' && args.has('help')) {
131
136
  process.stdout.write(requestHelp());
132
137
  return;
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/dist/profile.d.ts CHANGED
@@ -56,6 +56,10 @@ export interface Profile {
56
56
  spacePending?: true;
57
57
  peers: Record<string, StoredPeer>;
58
58
  }
59
+ /**
60
+ * Courier home: `COURIER_HOME` when set, else `$HOME/.courier`. Refuses an unset or empty `HOME`
61
+ * rather than guessing a home directory.
62
+ */
59
63
  export declare function profileDir(): string;
60
64
  export declare function profileExists(): boolean;
61
65
  export declare function mkdirOwnerOnly(dir: string): void;
package/dist/profile.js CHANGED
@@ -1,11 +1,19 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import os from 'node:os';
4
3
  import { randomBytes } from 'node:crypto';
5
4
  import { cmd } from './program.js';
6
5
  import { CourierError } from './errors.js';
6
+ /**
7
+ * Courier home: `COURIER_HOME` when set, else `$HOME/.courier`. Refuses an unset or empty `HOME`
8
+ * rather than guessing a home directory.
9
+ */
7
10
  export function profileDir() {
8
- return process.env.COURIER_HOME || path.join(os.homedir(), '.courier');
11
+ if (process.env.COURIER_HOME)
12
+ return process.env.COURIER_HOME;
13
+ const home = process.env.HOME;
14
+ if (!home)
15
+ throw new CourierError('home-unset', 'HOME is not set. Set HOME or COURIER_HOME to choose where Courier stores its state.');
16
+ return path.join(home, '.courier');
9
17
  }
10
18
  function profilePath(name, home = profileDir()) {
11
19
  return path.join(home, name);
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Package version from the `package.json` beside `dist/` (npm always ships it). */
2
+ export declare function courierVersion(): string;
@@ -0,0 +1,9 @@
1
+ import { readFileSync } from 'node:fs';
2
+ /** Package version from the `package.json` beside `dist/` (npm always ships it). */
3
+ export function courierVersion() {
4
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
5
+ if (typeof pkg.version !== 'string' || pkg.version === '')
6
+ throw new Error('courier package.json has no version');
7
+ return pkg.version;
8
+ }
9
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,oFAAoF;AACpF,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;IACnH,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClH,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinycloud/courier",
3
- "version": "0.3.0-beta.4",
3
+ "version": "0.3.0-beta.6",
4
4
  "description": "Courier: agent-to-agent threads over TinyCloud (CLI, library and agent skill)",
5
5
  "author": "TinyCloud, Inc.",
6
6
  "type": "module",
@@ -30,7 +30,7 @@
30
30
  "test:live": "tsc -p tsconfig.json && node scripts/happy-path.mjs"
31
31
  },
32
32
  "dependencies": {
33
- "@tinycloud/node-sdk": "3.6.0-beta.5",
33
+ "@tinycloud/node-sdk": "3.6.0-beta.7",
34
34
  "@tinycloud/sdk-core": "3.6.0-beta.4",
35
35
  "ulid": "^3.0.2"
36
36
  },