@talkpilot/core-db 1.3.12 → 1.3.13
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/.cursor/rules/development.mdc +65 -65
- package/DEVELOPMENT.md +141 -141
- package/README.md +307 -297
- package/dist/municipal/tickets/tickets.statistics.getters.d.ts.map +1 -1
- package/dist/municipal/tickets/tickets.statistics.getters.js +6 -2
- package/dist/municipal/tickets/tickets.statistics.getters.js.map +1 -1
- package/dist/talkpilot/flows/flows.schema.d.ts +3 -0
- package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
- package/dist/talkpilot/flows/flows.schema.js +1 -0
- package/dist/talkpilot/flows/flows.schema.js.map +1 -1
- package/dist/talkpilot/flows/flows.types.d.ts +2 -0
- package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
- package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts +4 -0
- package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts.map +1 -0
- package/dist/talkpilot/subscriptions/subscriptions.utils.js +20 -0
- package/dist/talkpilot/subscriptions/subscriptions.utils.js.map +1 -0
- package/dist/test-utils/factories/talkpilot/flows.d.ts.map +1 -1
- package/dist/test-utils/factories/talkpilot/flows.js +1 -0
- package/dist/test-utils/factories/talkpilot/flows.js.map +1 -1
- package/jest.config.js +20 -20
- package/package.json +46 -46
- package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
- package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
- package/src/municipal/tickets/index.ts +9 -9
- package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
- package/src/municipal/tickets/tickets.statistics.getters.ts +145 -132
- package/src/municipal/tickets/tickets.types.ts +54 -54
- package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -481
- package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
- package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
- package/src/talkpilot/clientsConfig/clientsConfig.types.ts +127 -127
- package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
- package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
- package/src/talkpilot/flows/flows.schema.ts +1 -0
- package/src/talkpilot/flows/flows.types.ts +2 -0
- package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
- package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
- package/src/test-utils/factories/talkpilot/flows.ts +1 -0
- package/src/utils/date.utils.ts +126 -126
- package/tsconfig.json +23 -23
- package/README_OLD.md +0 -160
- package/dist/talkpilot/calls/calls.dashboard.d.ts +0 -3
- package/dist/talkpilot/calls/calls.dashboard.d.ts.map +0 -1
- package/dist/talkpilot/calls/calls.dashboard.js +0 -191
- package/dist/talkpilot/calls/calls.dashboard.js.map +0 -1
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Development standards and conventions for the core-db package
|
|
3
|
-
globs: src/**/*.ts
|
|
4
|
-
alwaysApply: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Development Standards
|
|
8
|
-
|
|
9
|
-
This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
|
|
10
|
-
|
|
11
|
-
## Project Structure
|
|
12
|
-
|
|
13
|
-
- **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
|
|
14
|
-
- **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
|
|
15
|
-
- **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
|
|
16
|
-
|
|
17
|
-
## Database Connection Pattern
|
|
18
|
-
|
|
19
|
-
Each domain is isolated. They have their own `db` instance and must be connected independently.
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
|
|
23
|
-
|
|
24
|
-
// TalkPilot
|
|
25
|
-
await mongodbClient.connect(uri);
|
|
26
|
-
|
|
27
|
-
// Municipal
|
|
28
|
-
await municipalDataMongodbClient.connect(uri);
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Creating New Getters
|
|
32
|
-
|
|
33
|
-
1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
|
|
34
|
-
2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
|
|
35
|
-
3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
|
|
36
|
-
|
|
37
|
-
## Environment Validation
|
|
38
|
-
|
|
39
|
-
Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
import { validateConfig, validateMongoUri } from '../utils/validation';
|
|
43
|
-
|
|
44
|
-
async connect(uri?: string) {
|
|
45
|
-
const mongodbUri = uri || process.env.MONGO_URI;
|
|
46
|
-
validateConfig('MONGO_URI', mongodbUri);
|
|
47
|
-
validateMongoUri(mongodbUri!);
|
|
48
|
-
// ... connection logic
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Testing Standards
|
|
53
|
-
|
|
54
|
-
1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
|
|
55
|
-
2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
|
|
56
|
-
3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
import { createAgent } from '../../../test-utils/factories';
|
|
60
|
-
|
|
61
|
-
it('should find agents', async () => {
|
|
62
|
-
const agent = createAgent({ name: 'Test' });
|
|
63
|
-
// ... test logic
|
|
64
|
-
});
|
|
65
|
-
```
|
|
1
|
+
---
|
|
2
|
+
description: Development standards and conventions for the core-db package
|
|
3
|
+
globs: src/**/*.ts
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Development Standards
|
|
8
|
+
|
|
9
|
+
This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
|
|
10
|
+
|
|
11
|
+
## Project Structure
|
|
12
|
+
|
|
13
|
+
- **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
|
|
14
|
+
- **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
|
|
15
|
+
- **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
|
|
16
|
+
|
|
17
|
+
## Database Connection Pattern
|
|
18
|
+
|
|
19
|
+
Each domain is isolated. They have their own `db` instance and must be connected independently.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
|
|
23
|
+
|
|
24
|
+
// TalkPilot
|
|
25
|
+
await mongodbClient.connect(uri);
|
|
26
|
+
|
|
27
|
+
// Municipal
|
|
28
|
+
await municipalDataMongodbClient.connect(uri);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Creating New Getters
|
|
32
|
+
|
|
33
|
+
1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
|
|
34
|
+
2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
|
|
35
|
+
3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
|
|
36
|
+
|
|
37
|
+
## Environment Validation
|
|
38
|
+
|
|
39
|
+
Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { validateConfig, validateMongoUri } from '../utils/validation';
|
|
43
|
+
|
|
44
|
+
async connect(uri?: string) {
|
|
45
|
+
const mongodbUri = uri || process.env.MONGO_URI;
|
|
46
|
+
validateConfig('MONGO_URI', mongodbUri);
|
|
47
|
+
validateMongoUri(mongodbUri!);
|
|
48
|
+
// ... connection logic
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Testing Standards
|
|
53
|
+
|
|
54
|
+
1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
|
|
55
|
+
2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
|
|
56
|
+
3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { createAgent } from '../../../test-utils/factories';
|
|
60
|
+
|
|
61
|
+
it('should find agents', async () => {
|
|
62
|
+
const agent = createAgent({ name: 'Test' });
|
|
63
|
+
// ... test logic
|
|
64
|
+
});
|
|
65
|
+
```
|
package/DEVELOPMENT.md
CHANGED
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
# Development Guide
|
|
2
|
-
|
|
3
|
-
Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
### Prerequisites
|
|
8
|
-
|
|
9
|
-
- Node.js (v18 or later)
|
|
10
|
-
- TypeScript
|
|
11
|
-
|
|
12
|
-
### Setup
|
|
13
|
-
|
|
14
|
-
1. Install dependencies:
|
|
15
|
-
```bash
|
|
16
|
-
npm install
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
2. Build the project:
|
|
20
|
-
```bash
|
|
21
|
-
npm run build
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Local Development
|
|
25
|
-
|
|
26
|
-
Use `npm pack` to test local changes in a consuming project.
|
|
27
|
-
|
|
28
|
-
1. In the `core-db` folder, build and pack:
|
|
29
|
-
```bash
|
|
30
|
-
npm run build && npm pack
|
|
31
|
-
```
|
|
32
|
-
This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
|
|
33
|
-
|
|
34
|
-
2. In the consuming project, install it:
|
|
35
|
-
```bash
|
|
36
|
-
npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
|
|
40
|
-
|
|
41
|
-
## Adding a New Getter
|
|
42
|
-
|
|
43
|
-
1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
|
|
44
|
-
2. **Implement Getter**: Add the function in the `getters.ts` file.
|
|
45
|
-
3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
|
|
46
|
-
4. **Test**: Create a test in the domain's `__tests__` folder.
|
|
47
|
-
|
|
48
|
-
## Signature Immutability
|
|
49
|
-
|
|
50
|
-
`core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
|
|
51
|
-
|
|
52
|
-
**Rules:**
|
|
53
|
-
|
|
54
|
-
- **Never change an existing parameter's type or name.**
|
|
55
|
-
- **Never add a required parameter** to an existing function.
|
|
56
|
-
- **Never remove a function.** Mark it `@deprecated` instead (see below).
|
|
57
|
-
- **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
|
|
58
|
-
|
|
59
|
-
**Deprecating instead of deleting:**
|
|
60
|
-
|
|
61
|
-
When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
|
|
62
|
-
|
|
63
|
-
```ts
|
|
64
|
-
/**
|
|
65
|
-
* @deprecated Use `newFunction` instead — reason for the change.
|
|
66
|
-
*/
|
|
67
|
-
export const oldFunction = (...) => { ... };
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
|
|
71
|
-
|
|
72
|
-
## Testing
|
|
73
|
-
|
|
74
|
-
We use Jest with `mongodb-memory-server` for fast, isolated database tests.
|
|
75
|
-
|
|
76
|
-
### Running Tests
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm test
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Using Factories
|
|
83
|
-
|
|
84
|
-
Always use factories to generate test data to keep tests clean and maintainable.
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { createCallDoc } from '../calls.getters';
|
|
88
|
-
import { createOutGoingCallDoc } from '../../../test-utils/factories';
|
|
89
|
-
|
|
90
|
-
it('should save a call', async () => {
|
|
91
|
-
const call = createOutGoingCallDoc({ callSid: 'CA123' });
|
|
92
|
-
await createCallDoc(call);
|
|
93
|
-
// ... assertions
|
|
94
|
-
});
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Build Process
|
|
98
|
-
|
|
99
|
-
The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
|
|
100
|
-
|
|
101
|
-
- `main`: `dist/index.js`
|
|
102
|
-
- `types`: `dist/index.d.ts`
|
|
103
|
-
|
|
104
|
-
The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
|
|
105
|
-
|
|
106
|
-
## Releasing a New Version
|
|
107
|
-
|
|
108
|
-
Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
|
|
109
|
-
|
|
110
|
-
1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
|
|
111
|
-
2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
|
|
112
|
-
3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
|
|
113
|
-
4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
|
|
114
|
-
5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
|
|
115
|
-
|
|
116
|
-
Add a short release note for the version in the README (the version table and per-version section).
|
|
117
|
-
|
|
118
|
-
### If a published version turns out to be broken
|
|
119
|
-
|
|
120
|
-
Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
|
|
121
|
-
|
|
122
|
-
## Team Access & Authentication
|
|
123
|
-
|
|
124
|
-
To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
|
|
125
|
-
|
|
126
|
-
### One-time Local Setup
|
|
127
|
-
|
|
128
|
-
Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
|
|
129
|
-
|
|
130
|
-
1. Get the shared **npm Automation Token**.
|
|
131
|
-
2. Open (or create) your global npm configuration file:
|
|
132
|
-
```bash
|
|
133
|
-
nano ~/.npmrc
|
|
134
|
-
```
|
|
135
|
-
3. Add the following line (replace `[TOKEN]` with the actual token):
|
|
136
|
-
```text
|
|
137
|
-
//registry.npmjs.org/:_authToken=[TOKEN]
|
|
138
|
-
```
|
|
139
|
-
4. Save and exit.
|
|
140
|
-
|
|
141
|
-
Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.
|
|
1
|
+
# Development Guide
|
|
2
|
+
|
|
3
|
+
Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js (v18 or later)
|
|
10
|
+
- TypeScript
|
|
11
|
+
|
|
12
|
+
### Setup
|
|
13
|
+
|
|
14
|
+
1. Install dependencies:
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Build the project:
|
|
20
|
+
```bash
|
|
21
|
+
npm run build
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Local Development
|
|
25
|
+
|
|
26
|
+
Use `npm pack` to test local changes in a consuming project.
|
|
27
|
+
|
|
28
|
+
1. In the `core-db` folder, build and pack:
|
|
29
|
+
```bash
|
|
30
|
+
npm run build && npm pack
|
|
31
|
+
```
|
|
32
|
+
This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
|
|
33
|
+
|
|
34
|
+
2. In the consuming project, install it:
|
|
35
|
+
```bash
|
|
36
|
+
npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
|
|
40
|
+
|
|
41
|
+
## Adding a New Getter
|
|
42
|
+
|
|
43
|
+
1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
|
|
44
|
+
2. **Implement Getter**: Add the function in the `getters.ts` file.
|
|
45
|
+
3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
|
|
46
|
+
4. **Test**: Create a test in the domain's `__tests__` folder.
|
|
47
|
+
|
|
48
|
+
## Signature Immutability
|
|
49
|
+
|
|
50
|
+
`core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
|
|
51
|
+
|
|
52
|
+
**Rules:**
|
|
53
|
+
|
|
54
|
+
- **Never change an existing parameter's type or name.**
|
|
55
|
+
- **Never add a required parameter** to an existing function.
|
|
56
|
+
- **Never remove a function.** Mark it `@deprecated` instead (see below).
|
|
57
|
+
- **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
|
|
58
|
+
|
|
59
|
+
**Deprecating instead of deleting:**
|
|
60
|
+
|
|
61
|
+
When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
/**
|
|
65
|
+
* @deprecated Use `newFunction` instead — reason for the change.
|
|
66
|
+
*/
|
|
67
|
+
export const oldFunction = (...) => { ... };
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
|
|
71
|
+
|
|
72
|
+
## Testing
|
|
73
|
+
|
|
74
|
+
We use Jest with `mongodb-memory-server` for fast, isolated database tests.
|
|
75
|
+
|
|
76
|
+
### Running Tests
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm test
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Using Factories
|
|
83
|
+
|
|
84
|
+
Always use factories to generate test data to keep tests clean and maintainable.
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { createCallDoc } from '../calls.getters';
|
|
88
|
+
import { createOutGoingCallDoc } from '../../../test-utils/factories';
|
|
89
|
+
|
|
90
|
+
it('should save a call', async () => {
|
|
91
|
+
const call = createOutGoingCallDoc({ callSid: 'CA123' });
|
|
92
|
+
await createCallDoc(call);
|
|
93
|
+
// ... assertions
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Build Process
|
|
98
|
+
|
|
99
|
+
The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
|
|
100
|
+
|
|
101
|
+
- `main`: `dist/index.js`
|
|
102
|
+
- `types`: `dist/index.d.ts`
|
|
103
|
+
|
|
104
|
+
The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
|
|
105
|
+
|
|
106
|
+
## Releasing a New Version
|
|
107
|
+
|
|
108
|
+
Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
|
|
109
|
+
|
|
110
|
+
1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
|
|
111
|
+
2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
|
|
112
|
+
3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
|
|
113
|
+
4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
|
|
114
|
+
5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
|
|
115
|
+
|
|
116
|
+
Add a short release note for the version in the README (the version table and per-version section).
|
|
117
|
+
|
|
118
|
+
### If a published version turns out to be broken
|
|
119
|
+
|
|
120
|
+
Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
|
|
121
|
+
|
|
122
|
+
## Team Access & Authentication
|
|
123
|
+
|
|
124
|
+
To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
|
|
125
|
+
|
|
126
|
+
### One-time Local Setup
|
|
127
|
+
|
|
128
|
+
Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
|
|
129
|
+
|
|
130
|
+
1. Get the shared **npm Automation Token**.
|
|
131
|
+
2. Open (or create) your global npm configuration file:
|
|
132
|
+
```bash
|
|
133
|
+
nano ~/.npmrc
|
|
134
|
+
```
|
|
135
|
+
3. Add the following line (replace `[TOKEN]` with the actual token):
|
|
136
|
+
```text
|
|
137
|
+
//registry.npmjs.org/:_authToken=[TOKEN]
|
|
138
|
+
```
|
|
139
|
+
4. Save and exit.
|
|
140
|
+
|
|
141
|
+
Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.
|