@owlmeans/basic-ids 0.1.18-rc.6 → 0.1.18-rc.8
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/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/basic-ids/SKILL.md +1 -1
- package/build/consts.d.ts +11 -0
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +11 -0
- package/build/consts.js.map +1 -1
- package/build/helper.d.ts +19 -0
- package/build/helper.d.ts.map +1 -1
- package/build/helper.js +37 -1
- package/build/helper.js.map +1 -1
- package/build/index.d.ts +2 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/build/wordlists/list-a.d.ts +13 -0
- package/build/wordlists/list-a.d.ts.map +1 -0
- package/build/wordlists/list-a.js +270 -0
- package/build/wordlists/list-a.js.map +1 -0
- package/build/wordlists/list-b.d.ts +13 -0
- package/build/wordlists/list-b.d.ts.map +1 -0
- package/build/wordlists/list-b.js +270 -0
- package/build/wordlists/list-b.js.map +1 -0
- package/package.json +3 -2
- package/scripts/curate-wordlists.ts +162 -0
- package/src/consts.ts +13 -0
- package/src/helper.ts +43 -1
- package/src/index.ts +2 -0
- package/src/wordlists/list-a.ts +269 -0
- package/src/wordlists/list-b.ts +269 -0
- package/tests/word-slug.spec.ts +66 -0
- package/tsconfig.json +7 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subject half of a word slug — verbs and nouns.
|
|
3
|
+
*
|
|
4
|
+
* Exactly 2048 words (11 bits of entropy per pick), each lowercase ASCII, 3-8 characters, and
|
|
5
|
+
* unique within this list. The two lists share no word, so the halves of a slug can never repeat.
|
|
6
|
+
*
|
|
7
|
+
* Curated by `scripts/curate-wordlists.ts` from the Moby part-of-speech list, screened against
|
|
8
|
+
* profanity, stopword, negative-sentiment and proper-noun sources. Regenerate with that script
|
|
9
|
+
* rather than editing by hand: `tests/word-slug.spec.ts` enforces the invariants above, and a
|
|
10
|
+
* hand-edit that breaks the 2048 count silently biases slug generation.
|
|
11
|
+
*/
|
|
12
|
+
export const WORDLIST_B = [
|
|
13
|
+
'search', 'time', 'news', 'contact', 'business', 'view', 'services', 'service',
|
|
14
|
+
'price', 'people', 'list', 'day', 'email', 'health', 'music', 'data',
|
|
15
|
+
'product', 'post', 'city', 'add', 'policy', 'support', 'message', 'jan',
|
|
16
|
+
'video', 'info', 'rights', 'school', 'review', 'privacy', 'book', 'company',
|
|
17
|
+
'read', 'user', 'set', 'january', 'mail', 'map', 'program', 'life',
|
|
18
|
+
'hotel', 'item', 'center', 'store', 'travel', 'report', 'details', 'send',
|
|
19
|
+
'type', 'office', 'car', 'design', 'internet', 'address', 'phone', 'shipping',
|
|
20
|
+
'subject', 'forum', 'family', 'based', 'code', 'check', 'women', 'sign',
|
|
21
|
+
'file', 'link', 'south', 'project', 'version', 'sports', 'house', 'security',
|
|
22
|
+
'county', 'american', 'photo', 'game', 'power', 'care', 'network', 'total',
|
|
23
|
+
'download', 'access', 'north', 'media', 'law', 'control', 'water', 'history',
|
|
24
|
+
'size', 'art', 'guide', 'shop', 'board', 'location', 'change', 'rating',
|
|
25
|
+
'rate', 'children', 'usa', 'return', 'shopping', 'account', 'times', 'profile',
|
|
26
|
+
'form', 'love', 'john', 'image', 'title', 'property', 'class', 'money',
|
|
27
|
+
'quality', 'listing', 'content', 'country', 'visit', 'save', 'reply', 'customer',
|
|
28
|
+
'december', 'compare', 'include', 'college', 'article', 'york', 'card', 'provide',
|
|
29
|
+
'food', 'source', 'author', 'press', 'learn', 'sale', 'print', 'job',
|
|
30
|
+
'canada', 'process', 'stock', 'training', 'credit', 'science', 'west', 'sales',
|
|
31
|
+
'english', 'team', 'estate', 'box', 'select', 'thread', 'week', 'category',
|
|
32
|
+
'note', 'live', 'gallery', 'table', 'register', 'june', 'october', 'november',
|
|
33
|
+
'market', 'library', 'action', 'start', 'series', 'model', 'air', 'industry',
|
|
34
|
+
'plan', 'required', 'cost', 'movie', 'march', 'july', 'yahoo', 'friend',
|
|
35
|
+
'dec', 'server', 'study', 'cart', 'staff', 'feedback', 'play', 'april',
|
|
36
|
+
'street', 'topic', 'comment', 'standard', 'tax', 'person', 'party', 'payment',
|
|
37
|
+
'login', 'student', 'park', 'red', 'memory', 'quote', 'language', 'story',
|
|
38
|
+
'sell', 'create', 'key', 'body', 'america', 'field', 'east', 'paper',
|
|
39
|
+
'age', 'club', 'password', 'road', 'gift', 'question', 'night', 'texas',
|
|
40
|
+
'oct', 'pay', 'poker', 'status', 'browse', 'range', 'building', 'seller',
|
|
41
|
+
'court', 'february', 'result', 'audio', 'light', 'write', 'nov', 'offer',
|
|
42
|
+
'blue', 'event', 'release', 'analysis', 'request', 'fax', 'china', 'picture',
|
|
43
|
+
'month', 'major', 'star', 'future', 'space', 'hand', 'sun', 'cards',
|
|
44
|
+
'london', 'meeting', 'child', 'enter', 'share', 'garden', 'baby', 'learning',
|
|
45
|
+
'energy', 'delivery', 'term', 'film', 'journal', 'notice', 'god', 'head',
|
|
46
|
+
'radio', 'cell', 'color', 'council', 'track', 'archive', 'format', 'society',
|
|
47
|
+
'log', 'safety', 'trade', 'edition', 'updated', 'david', 'fun', 'green',
|
|
48
|
+
'close', 'drive', 'gold', 'feb', 'sep', 'display', 'director', 'beach',
|
|
49
|
+
'period', 'planning', 'database', 'weather', 'land', 'average', 'window', 'france',
|
|
50
|
+
'region', 'island', 'record', 'direct', 'district', 'calendar', 'costs', 'style',
|
|
51
|
+
'update', 'aug', 'sound', 'resource', 'document', 'word', 'material', 'apr',
|
|
52
|
+
'written', 'talk', 'centre', 'finance', 'mark', 'rock', 'europe', 'reading',
|
|
53
|
+
'auto', 'cover', 'edit', 'percent', 'function', 'unit', 'tech', 'meet',
|
|
54
|
+
'player', 'submit', 'germany', 'watch', 'feel', 'bank', 'james', 'weight',
|
|
55
|
+
'town', 'heart', 'received', 'choose', 'magazine', 'camera', 'girl', 'golf',
|
|
56
|
+
'receive', 'domain', 'chapter', 'loan', 'beauty', 'manager', 'india', 'position',
|
|
57
|
+
'sort', 'step', 'florida', 'wireless', 'license', 'paul', 'friday', 'lake',
|
|
58
|
+
'church', 'method', 'purchase', 'response', 'practice', 'figure', 'holiday', 'chat',
|
|
59
|
+
'writing', 'speed', 'brand', 'discount', 'created', 'remember', 'oil', 'bit',
|
|
60
|
+
'yellow', 'increase', 'kingdom', 'base', 'stuff', 'french', 'storage', 'japan',
|
|
61
|
+
'entry', 'stay', 'nature', 'africa', 'summary', 'growth', 'agency', 'king',
|
|
62
|
+
'monday', 'european', 'activity', 'income', 'force', 'cash', 'bay', 'river',
|
|
63
|
+
'package', 'contents', 'engine', 'port', 'album', 'supplies', 'bar', 'dog',
|
|
64
|
+
'build', 'screen', 'exchange', 'continue', 'season', 'apply', 'held', 'printer',
|
|
65
|
+
'mind', 'sunday', 'tour', 'menu', 'volume', 'cross', 'mortgage', 'hope',
|
|
66
|
+
'silver', 'solution', 'role', 'addition', 'supply', 'union', 'jewelry', 'clothing',
|
|
67
|
+
'mon', 'fine', 'names', 'hour', 'gas', 'bush', 'advice', 'career',
|
|
68
|
+
'rental', 'decision', 'leave', 'british', 'sat', 'woman', 'zip', 'bid',
|
|
69
|
+
'cable', 'values', 'division', 'tuesday', 'lesbian', 'machine', 'logo', 'score',
|
|
70
|
+
'client', 'capital', 'follow', 'sample', 'saturday', 'england', 'culture', 'band',
|
|
71
|
+
'flash', 'lead', 'george', 'choice', 'starting', 'fri', 'thursday', 'consumer',
|
|
72
|
+
'airport', 'artist', 'channel', 'letter', 'mode', 'fund', 'summer', 'degree',
|
|
73
|
+
'contract', 'button', 'matter', 'custom', 'virginia', 'located', 'asian', 'editor',
|
|
74
|
+
'inn', 'song', 'focus', 'featured', 'idea', 'win', 'thomas', 'reason',
|
|
75
|
+
'tool', 'browser', 'spring', 'answer', 'voice', 'schedule', 'purpose', 'feature',
|
|
76
|
+
'bed', 'police', 'approach', 'brown', 'hill', 'medicine', 'deal', 'hold',
|
|
77
|
+
'chicago', 'glass', 'smith', 'survey', 'sport', 'feed', 'animal', 'mexico',
|
|
78
|
+
'evidence', 'station', 'favorite', 'option', 'master', 'valley', 'sea', 'built',
|
|
79
|
+
'blood', 'cut', 'improve', 'hall', 'earth', 'impact', 'transfer', 'kitchen',
|
|
80
|
+
'wedding', 'hospital', 'ground', 'overview', 'ship', 'disease', 'paid', 'italy',
|
|
81
|
+
'hair', 'kit', 'basis', 'command', 'express', 'distance', 'tree', 'peter',
|
|
82
|
+
'ensure', 'wall', 'budget', 'rated', 'success', 'maximum', 'boy', 'amazon',
|
|
83
|
+
'wine', 'horse', 'vote', 'owner', 'retail', 'est', 'son', 'rule',
|
|
84
|
+
'mac', 'housing', 'iii', 'bring', 'catalog', 'max', 'mother', 'told',
|
|
85
|
+
'traffic', 'input', 'strategy', 'feet', 'agent', 'bin', 'ireland', 'teaching',
|
|
86
|
+
'door', 'testing', 'trial', 'charge', 'canadian', 'wrote', 'metal', 'fitness',
|
|
87
|
+
'chinese', 'opinion', 'asia', 'football', 'output', 'develop', 'java', 'guest',
|
|
88
|
+
'trust', 'van', 'session', 'republic', 'vacation', 'century', 'skin', 'graphics',
|
|
89
|
+
'indian', 'ads', 'mary', 'grade', 'dating', 'mountain', 'pop', 'filter',
|
|
90
|
+
'mailing', 'vehicle', 'panel', 'floor', 'german', 'buying', 'match', 'default',
|
|
91
|
+
'require', 'iraq', 'morning', 'rest', 'protein', 'plant', 'pool', 'politics',
|
|
92
|
+
'partner', 'authors', 'boards', 'faculty', 'fish', 'mission', 'eye', 'string',
|
|
93
|
+
'sense', 'modified', 'pack', 'released', 'stage', 'born', 'japanese', 'race',
|
|
94
|
+
'approved', 'target', 'ability', 'spain', 'winter', 'battery', 'youth', 'pressure',
|
|
95
|
+
'boston', 'core', 'dance', 'wood', 'defined', 'papers', 'playing', 'fee',
|
|
96
|
+
'studio', 'reader', 'device', 'rent', 'apple', 'min', 'theory', 'enjoy',
|
|
97
|
+
'remove', 'aid', 'surface', 'minimum', 'host', 'variety', 'martin', 'block',
|
|
98
|
+
'repair', 'steel', 'hands', 'desktop', 'paris', 'ohio', 'sector', 'capacity',
|
|
99
|
+
'jersey', 'father', 'officer', 'driver', 'respect', 'mike', 'trip', 'pst',
|
|
100
|
+
'teacher', 'farm', 'georgia', 'peace', 'campus', 'tom', 'coast', 'benefit',
|
|
101
|
+
'progress', 'funding', 'devices', 'lord', 'grant', 'agree', 'hear', 'led',
|
|
102
|
+
'museum', 'fan', 'wife', 'zone', 'cat', 'jack', 'flow', 'parent',
|
|
103
|
+
'spanish', 'michigan', 'columbia', 'setting', 'scale', 'stand', 'economy', 'frame',
|
|
104
|
+
'path', 'employee', 'chief', 'laws', 'changed', 'pet', 'heard', 'switch',
|
|
105
|
+
'russian', 'african', 'guy', 'justice', 'connect', 'bible', 'cup', 'basket',
|
|
106
|
+
'demand', 'suite', 'square', 'advance', 'skip', 'army', 'auction', 'gear',
|
|
107
|
+
'lee', 'correct', 'charles', 'nation', 'selling', 'piece', 'sheet', 'illinois',
|
|
108
|
+
'elements', 'species', 'jump', 'module', 'resort', 'facility', 'pricing', 'minister',
|
|
109
|
+
'motion', 'fashion', 'monitor', 'trading', 'forest', 'coverage', 'couple', 'chance',
|
|
110
|
+
'vision', 'ball', 'listen', 'discuss', 'accept', 'goal', 'sold', 'wind',
|
|
111
|
+
'lives', 'currency', 'leather', 'palm', 'stone', 'bob', 'commerce', 'fit',
|
|
112
|
+
'village', 'amateur', 'met', 'coffee', 'buyer', 'ford', 'poster', 'edge',
|
|
113
|
+
'root', 'ice', 'pink', 'zealand', 'balance', 'graduate', 'shot', 'label',
|
|
114
|
+
'thinking', 'canon', 'league', 'minute', 'bus', 'provider', 'chair', 'fishing',
|
|
115
|
+
'effort', 'phase', 'bag', 'fantasy', 'letters', 'motor', 'context', 'install',
|
|
116
|
+
'shirt', 'apparel', 'foot', 'mass', 'count', 'johnson', 'religion', 'claim',
|
|
117
|
+
'surgery', 'patch', 'heat', 'kansas', 'chemical', 'doctor', 'task', 'reduce',
|
|
118
|
+
'brought', 'enable', 'exercise', 'leader', 'diamond', 'israel', 'arizona', 'keyword',
|
|
119
|
+
'flight', 'congress', 'fuel', 'walk', 'produced', 'italian', 'wait', 'pocket',
|
|
120
|
+
'saint', 'rose', 'freedom', 'argument', 'creating', 'jim', 'joint', 'premium',
|
|
121
|
+
'attorney', 'upgrade', 'factor', 'stream', 'pick', 'hearing', 'therapy', 'louis',
|
|
122
|
+
'steps', 'del', 'creek', 'quantity', 'platform', 'load', 'labor', 'admin',
|
|
123
|
+
'nursing', 'defense', 'recovery', 'joe', 'merchant', 'expert', 'protect', 'drop',
|
|
124
|
+
'orange', 'prevent', 'theme', 'campaign', 'guitar', 'finding', 'spirit', 'hire',
|
|
125
|
+
'election', 'branch', 'serve', 'magic', 'mount', 'talking', 'latin', 'avoid',
|
|
126
|
+
'manage', 'corner', 'rank', 'oregon', 'element', 'birth', 'separate', 'quarter',
|
|
127
|
+
'define', 'column', 'faith', 'chain', 'identify', 'avenue', 'moved', 'houston',
|
|
128
|
+
'reach', 'moment', 'sequence', 'inch', 'lab', 'reserve', 'gamma', 'plastic',
|
|
129
|
+
'produce', 'snow', 'truth', 'counter', 'weekend', 'dollar', 'camp', 'ontario',
|
|
130
|
+
'bridge', 'movement', 'printing', 'baseball', 'approval', 'draft', 'chart', 'jesus',
|
|
131
|
+
'lcd', 'jackson', 'offering', 'profit', 'leaders', 'expect', 'parking', 'compared',
|
|
132
|
+
'workshop', 'russia', 'seattle', 'fort', 'lighting', 'senate', 'brother', 'gene',
|
|
133
|
+
'disc', 'pattern', 'boat', 'named', 'theatre', 'laser', 'sponsor', 'icon',
|
|
134
|
+
'indiana', 'harry', 'delete', 'evening', 'assembly', 'mouse', 'signal', 'issued',
|
|
135
|
+
'brain', 'dream', 'cast', 'flower', 'supplied', 'pic', 'soul', 'aids',
|
|
136
|
+
'promote', 'hawaii', 'carry', 'flag', 'covers', 'maintain', 'tourism', 'priority',
|
|
137
|
+
'savings', 'atom', 'binding', 'iron', 'script', 'served', 'dining', 'atlanta',
|
|
138
|
+
'dakota', 'tag', 'mix', 'disk', 'queen', 'handle', 'desk', 'hong',
|
|
139
|
+
'truck', 'behavior', 'enlarge', 'ray', 'revenue', 'measure', 'changing', 'duty',
|
|
140
|
+
'bear', 'gain', 'festival', 'ocean', 'depth', 'iowa', 'logged', 'laptop',
|
|
141
|
+
'vintage', 'train', 'explore', 'maryland', 'spa', 'concept', 'checkout', 'reality',
|
|
142
|
+
'forgot', 'handling', 'origin', 'gaming', 'scotland', 'dallas', 'bought', 'route',
|
|
143
|
+
'alaska', 'zoom', 'battle', 'anime', 'speak', 'protocol', 'query', 'clip',
|
|
144
|
+
'equity', 'speech', 'wire', 'tape', 'judge', 'spam', 'acid', 'cent',
|
|
145
|
+
'fight', 'height', 'speaker', 'filed', 'designer', 'remain', 'managed', 'marriage',
|
|
146
|
+
'roll', 'korea', 'bath', 'kelly', 'austin', 'toronto', 'theater', 'missouri',
|
|
147
|
+
'andrew', 'var', 'perform', 'font', 'joseph', 'ministry', 'lawyer', 'proposal',
|
|
148
|
+
'sharing', 'portal', 'waiting', 'birthday', 'beta', 'banking', 'brian', 'assist',
|
|
149
|
+
'conduct', 'lingerie', 'calling', 'jazz', 'serving', 'miami', 'doc', 'wear',
|
|
150
|
+
'combined', 'wales', 'finish', 'mom', 'physics', 'spent', 'daniel', 'bars',
|
|
151
|
+
'row', 'forecast', 'cycle', 'accuracy', 'rise', 'sleep', 'bird', 'pharmacy',
|
|
152
|
+
'brazil', 'creation', 'scene', 'hunter', 'lady', 'crystal', 'writer', 'chairman',
|
|
153
|
+
'violence', 'oklahoma', 'drink', 'academy', 'gender', 'eat', 'dell', 'cleaning',
|
|
154
|
+
'seat', 'vendor', 'aim', 'referred', 'cape', 'ann', 'meaning', 'henry',
|
|
155
|
+
'ticket', 'guess', 'ski', 'soccer', 'math', 'import', 'posting', 'presence',
|
|
156
|
+
'instant', 'viewing', 'majority', 'christ', 'dan', 'austria', 'moon', 'scheme',
|
|
157
|
+
'utility', 'preview', 'fly', 'manner', 'matrix', 'devel', 'strength', 'turkey',
|
|
158
|
+
'delta', 'seeking', 'phoenix', 'daughter', 'standing', 'comfort', 'cisco', 'alpha',
|
|
159
|
+
'appeal', 'cruise', 'bonus', 'bookmark', 'beat', 'adobe', 'smoking', 'alabama',
|
|
160
|
+
'tea', 'improved', 'avg', 'achieve', 'dress', 'dealer', 'sky', 'utah',
|
|
161
|
+
'rom', 'carried', 'happen', 'exposure', 'hide', 'gambling', 'refer', 'miller',
|
|
162
|
+
'caused', 'luxury', 'frames', 'toy', 'circuit', 'layer', 'removal', 'hip',
|
|
163
|
+
'kentucky', 'eric', 'spot', 'taylor', 'spend', 'factory', 'interior', 'revised',
|
|
164
|
+
'grow', 'clock', 'dot', 'hiv', 'identity', 'feeling', 'hidden', 'victoria',
|
|
165
|
+
'serial', 'relief', 'revision', 'ratio', 'rain', 'planet', 'recipe', 'permit',
|
|
166
|
+
'proof', 'dna', 'diff', 'tennis', 'bass', 'bedroom', 'instance', 'hole',
|
|
167
|
+
'ride', 'licensed', 'orlando', 'bureau', 'maine', 'pair', 'ideal', 'dinner',
|
|
168
|
+
'sydney', 'cream', 'discover', 'advisor', 'wilson', 'shape', 'irish', 'gps',
|
|
169
|
+
'acc', 'operator', 'usage', 'cap', 'ink', 'census', 'peak', 'exist',
|
|
170
|
+
'wheel', 'transit', 'salt', 'poetry', 'tracking', 'angel', 'bell', 'keeping',
|
|
171
|
+
'attempt', 'forget', 'array', 'climate', 'pin', 'alcohol', 'greek', 'sister',
|
|
172
|
+
'explain', 'gnu', 'extent', 'ben', 'lane', 'export', 'aircraft', 'sweden',
|
|
173
|
+
'employer', 'occur', 'backup', 'heritage', 'holding', 'spread', 'coach', 'expand',
|
|
174
|
+
'jordan', 'plug', 'cook', 'affect', 'hat', 'helping', 'lib', 'bike',
|
|
175
|
+
'plate', 'blonde', 'utc', 'der', 'seek', 'nevada', 'thailand', 'agenda',
|
|
176
|
+
'cam', 'logic', 'template', 'prince', 'circle', 'soil', 'atlantic', 'investor',
|
|
177
|
+
'ram', 'leaving', 'wildlife', 'cooking', 'fox', 'respond', 'exit', 'iran',
|
|
178
|
+
'arm', 'launch', 'wave', 'costa', 'belgium', 'acts', 'guidance', 'mesh',
|
|
179
|
+
'trail', 'symbol', 'highway', 'buddy', 'observed', 'dean', 'setup', 'poll',
|
|
180
|
+
'booking', 'glossary', 'denver', 'unix', 'bond', 'channels', 'appendix', 'notify',
|
|
181
|
+
'pub', 'portion', 'scope', 'supplier', 'cotton', 'biology', 'border', 'debate',
|
|
182
|
+
'arkansas', 'leisure', 'notebook', 'explorer', 'husband', 'britain', 'concert', 'scores',
|
|
183
|
+
'comedy', 'jean', 'hop', 'carrier', 'visa', 'mouth', 'meter', 'portland',
|
|
184
|
+
'reflect', 'deliver', 'fruit', 'reform', 'lens', 'draw', 'relating', 'assume',
|
|
185
|
+
'alliance', 'confirm', 'lewis', 'leaves', 'engineer', 'replace', 'babe', 'safari',
|
|
186
|
+
'sugar', 'crew', 'sam', 'stick', 'relation', 'enabled', 'genre', 'slide',
|
|
187
|
+
'montana', 'rear', 'enhance', 'bound', 'adapter', 'node', 'lock', 'hockey',
|
|
188
|
+
'storm', 'mile', 'threads', 'bowl', 'estimate', 'navy', 'kid', 'cancel',
|
|
189
|
+
'paint', 'pilot', 'outlet', 'czech', 'winner', 'idaho', 'episode', 'potter',
|
|
190
|
+
'dish', 'bulletin', 'modify', 'oxford', 'adam', 'painting', 'universe', 'patent',
|
|
191
|
+
'slot', 'eating', 'planned', 'watching', 'lodge', 'mirror', 'sterling', 'kernel',
|
|
192
|
+
'taiwan', 'chosen', 'demo', 'greece', 'swiss', 'behalf', 'liquid', 'rice',
|
|
193
|
+
'nebraska', 'loop', 'salary', 'gourmet', 'guard', 'orleans', 'empire', 'resume',
|
|
194
|
+
'raise', 'prepare', 'avatar', 'vary', 'rome', 'arab', 'lincoln', 'helped',
|
|
195
|
+
'premier', 'tomorrow', 'milk', 'decide', 'consent', 'drama', 'visiting', 'downtown',
|
|
196
|
+
'keyboard', 'contest', 'boot', 'millions', 'lunch', 'audit', 'push', 'chamber',
|
|
197
|
+
'guinea', 'muscle', 'polls', 'tower', 'sum', 'misc', 'chicken', 'attend',
|
|
198
|
+
'shower', 'sending', 'jason', 'tonight', 'province', 'oak', 'vat', 'governor',
|
|
199
|
+
'beer', 'swimming', 'formula', 'catch', 'jane', 'pakistan', 'sir', 'earn',
|
|
200
|
+
'finder', 'visitor', 'insert', 'gateway', 'drawing', 'fighting', 'spy', 'romance',
|
|
201
|
+
'bruce', 'heaven', 'focused', 'egypt', 'bargain', 'norway', 'vermont', 'hunting',
|
|
202
|
+
'diabetes', 'suit', 'shift', 'chip', 'res', 'sit', 'cutting', 'loved',
|
|
203
|
+
'mapping', 'char', 'saved', 'paying', 'cartoon', 'carbon', 'spending', 'registry',
|
|
204
|
+
'outlook', 'denmark', 'treat', 'header', 'piano', 'echo', 'grid', 'patrick',
|
|
205
|
+
'plasma', 'journey', 'bidding', 'banner', 'charter', 'fig', 'teach', 'occurred',
|
|
206
|
+
'pull', 'reverse', 'deposit', 'seminar', 'nasa', 'dutch', 'tab', 'boots',
|
|
207
|
+
'router', 'concrete', 'editing', 'poland', 'folder', 'upload', 'pulse', 'voting',
|
|
208
|
+
'detroit', 'metro', 'strip', 'pearl', 'accident', 'nick', 'resident', 'airline',
|
|
209
|
+
'regard', 'pump', 'flashing', 'sitting', 'putting', 'vietnam', 'trailer', 'castle',
|
|
210
|
+
'malaysia', 'antique', 'stored', 'exam', 'logos', 'density', 'mention', 'honda',
|
|
211
|
+
'operate', 'bathroom', 'stable', 'opera', 'lesson', 'cinema', 'asset', 'scan',
|
|
212
|
+
'reaction', 'entitled', 'generate', 'humor', 'duration', 'bulk', 'sci', 'fabric',
|
|
213
|
+
'contrast', 'berlin', 'para', 'siemens', 'adoption', 'meant', 'capture', 'buffalo',
|
|
214
|
+
'plane', 'seed', 'desire', 'camping', 'welfare', 'peer', 'caught', 'driven',
|
|
215
|
+
'bottle', 'marshall', 'massage', 'rubber', 'closing', 'tampa', 'meat', 'legend',
|
|
216
|
+
'grace', 'adams', 'python', 'bang', 'villa', 'bone', 'hamilton', 'ftp',
|
|
217
|
+
'tutorial', 'med', 'entity', 'gate', 'holder', 'portugal', 'tone', 'ethics',
|
|
218
|
+
'dragon', 'captain', 'imagine', 'heating', 'leg', 'neck', 'wing', 'abc',
|
|
219
|
+
'taste', 'dealing', 'commit', 'jay', 'gap', 'tube', 'cache', 'belt',
|
|
220
|
+
'jacket', 'oracle', 'matthew', 'lease', 'aviation', 'excess', 'console', 'giant',
|
|
221
|
+
'achieved', 'shipped', 'seats', 'biz', 'voltage', 'loading', 'franklin', 'angle',
|
|
222
|
+
'rob', 'vinyl', 'mining', 'imaging', 'betting', 'liberty', 'wyoming', 'era',
|
|
223
|
+
'convert', 'analyst', 'garage', 'finland', 'morgan', 'derived', 'pleasure', 'honor',
|
|
224
|
+
'asp', 'eagle', 'columbus', 'nurse', 'prayer', 'luck', 'postage', 'producer',
|
|
225
|
+
'dial', 'cheese', 'jet', 'crown', 'par', 'maker', 'gang', 'semester',
|
|
226
|
+
'fetish', 'apache', 'craft', 'cake', 'fellow', 'lounge', 'semi', 'cafe',
|
|
227
|
+
'ken', 'horror', 'exp', 'pen', 'shoe', 'carrying', 'victory', 'sand',
|
|
228
|
+
'madison', 'joy', 'cpu', 'actor', 'seal', 'citizen', 'prize', 'pipe',
|
|
229
|
+
'guardian', 'lecture', 'layout', 'classics', 'lay', 'deck', 'donate', 'taught',
|
|
230
|
+
'worker', 'temple', 'prove', 'wings', 'waters', 'promise', 'prefer', 'ridge',
|
|
231
|
+
'cabinet', 'modem', 'mph', 'bringing', 'dose', 'evaluate', 'tiffany', 'collect',
|
|
232
|
+
'bet', 'vector', 'shaved', 'buffer', 'purple', 'larry', 'def', 'pipeline',
|
|
233
|
+
'syntax', 'inquiry', 'ethernet', 'exhibit', 'throw', 'trend', 'sierra', 'mercury',
|
|
234
|
+
'handbook', 'navigate', 'summit', 'epa', 'escape', 'receiver', 'glance', 'scottish',
|
|
235
|
+
'arcade', 'richmond', 'ron', 'russell', 'fiber', 'graph', 'covering', 'platinum',
|
|
236
|
+
'judgment', 'talks', 'filing', 'foster', 'modeling', 'tissue', 'clinton', 'alberta',
|
|
237
|
+
'folk', 'commons', 'spectrum', 'arrival', 'pottery', 'emphasis', 'aspect', 'mexican',
|
|
238
|
+
'priced', 'lift', 'inter', 'closer', 'heights', 'shadow', 'riding', 'expense',
|
|
239
|
+
'grove', 'venture', 'clinic', 'korean', 'princess', 'mall', 'entering', 'packet',
|
|
240
|
+
'spray', 'dad', 'buttons', 'extend', 'roads', 'pat', 'dublin', 'yard',
|
|
241
|
+
'nelson', 'arrived', 'tourist', 'mayor', 'senator', 'yield', 'pour', 'digest',
|
|
242
|
+
'lodging', 'replaced', 'radar', 'rescue', 'reducing', 'diary', 'shooting', 'kent',
|
|
243
|
+
'ear', 'pci', 'baker', 'ebony', 'tie', 'arthur', 'roof', 'walker',
|
|
244
|
+
'kiss', 'beast', 'dodge', 'counsel', 'pizza', 'invited', 'rush', 'ukraine',
|
|
245
|
+
'cluster', 'yoga', 'surprise', 'lamp', 'phil', 'cst', 'ceo', 'simpson',
|
|
246
|
+
'palace', 'verify', 'globe', 'copper', 'rack', 'rep', 'kerry', 'receipt',
|
|
247
|
+
'applying', 'boss', 'pride', 'reporter', 'champion', 'ross', 'chile', 'anna',
|
|
248
|
+
'plenty', 'solo', 'sentence', 'throat', 'maria', 'uniform', 'wealth', 'vacuum',
|
|
249
|
+
'dancing', 'brass', 'plaza', 'survival', 'quest', 'publish', 'sri', 'toe',
|
|
250
|
+
'trans', 'jonathan', 'nova', 'lifetime', 'pioneer', 'booty', 'acrobat', 'acres',
|
|
251
|
+
'venue', 'charity', 'excel', 'wake', 'harbor', 'hungary', 'traveler', 'segment',
|
|
252
|
+
'realize', 'lan', 'puzzle', 'rising', 'aluminum', 'insight', 'repeat', 'drum',
|
|
253
|
+
'iraqi', 'builder', 'vista', 'terry', 'flood', 'ease', 'arena', 'outcome',
|
|
254
|
+
'polish', 'jerry', 'clause', 'smile', 'troops', 'bulgaria', 'broker', 'charger',
|
|
255
|
+
'believed', 'pine', 'cooling', 'tend', 'gulf', 'rick', 'laura', 'shopper',
|
|
256
|
+
'tokyo', 'candy', 'tiger', 'folks', 'sensor', 'hunt', 'deputy', 'sealed',
|
|
257
|
+
'thai', 'boost', 'spanking', 'den', 'catering', 'aud', 'finger', 'pound',
|
|
258
|
+
'locate', 'bread', 'tobacco', 'roberts', 'incident', 'gonna', 'dynamics', 'decrease',
|
|
259
|
+
'chest', 'pension', 'billy', 'emerging', 'worship', 'reserves', 'solve', 'minority',
|
|
260
|
+
'amp', 'johnny', 'recorder', 'facing', 'nancy', 'passion', 'sight', 'laid',
|
|
261
|
+
'clay', 'defence', 'refund', 'blvd', 'cyprus', 'insider', 'hearts', 'eve',
|
|
262
|
+
'carter', 'legacy', 'marc', 'vitamin', 'phrase', 'raising', 'paradise', 'hybrid',
|
|
263
|
+
'leaf', 'pad', 'glory', 'billing', 'combine', 'exceed', 'rod', 'saudi',
|
|
264
|
+
'cuba', 'hrs', 'silk', 'karen', 'compiled', 'albert', 'examine', 'jimmy',
|
|
265
|
+
'graham', 'bristol', 'wolf', 'rugby', 'cal', 'infant', 'fluid', 'grounds',
|
|
266
|
+
'kick', 'meal', 'equation', 'pot', 'wright', 'proven', 'cached', 'slip',
|
|
267
|
+
'reviewer', 'rpm', 'profits', 'grass', 'comply', 'florist', 'cherry', 'kenya',
|
|
268
|
+
'charlie', 'quebec', 'mars', 'noticed', 'socket', 'egg', 'mhz', 'caps',
|
|
269
|
+
];
|
|
270
|
+
//# sourceMappingURL=list-b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-b.js","sourceRoot":"","sources":["../../src/wordlists/list-b.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/basic-ids",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.8",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "tsc -b",
|
|
8
8
|
"dev": "sleep 42 && nodemon -e ts,tsx,json --watch src --exec \"tsc -p ./tsconfig.json\"",
|
|
9
|
-
"watch": "tsc -b -w --preserveWatchOutput --pretty"
|
|
9
|
+
"watch": "tsc -b -w --preserveWatchOutput --pretty",
|
|
10
|
+
"test": "bun test ./tests"
|
|
10
11
|
},
|
|
11
12
|
"main": "build/index.js",
|
|
12
13
|
"module": "build/index.js",
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regenerate `src/wordlists/list-a.ts` and `src/wordlists/list-b.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Run: `bun run scripts/curate-wordlists.ts` (needs network access; writes the two source files).
|
|
5
|
+
*
|
|
6
|
+
* The lists are an editorial asset, not a random sample: every word ends up in hostnames, OIDC
|
|
7
|
+
* client ids and support conversations, so the pipeline below screens three ways — a profanity
|
|
8
|
+
* list, a substring screen for words that read badly inside a hostname even when the word itself
|
|
9
|
+
* is innocent, and a frequency floor so nothing unrecognisable survives. Proper nouns are dropped
|
|
10
|
+
* (Moby capitalises them) because a place or brand name makes a poor generic slug, and stopwords
|
|
11
|
+
* are dropped because `not-for` is not a name.
|
|
12
|
+
*
|
|
13
|
+
* Sources (all public, fetched at run time so no corpus is vendored into the repo):
|
|
14
|
+
* - Moby part-of-speech list — github.com/en-wl/wordlist, `pos/part-of-speech.txt`.
|
|
15
|
+
* Tab-separated `word<TAB>|CODES`; N noun, V/t/i verb, A adjective, v adverb.
|
|
16
|
+
* - google-10000-english (USA) — github.com/first20hours/google-10000-english. Primary frequency
|
|
17
|
+
* ranking; the 50k list below only orders what google's 10k does not cover.
|
|
18
|
+
* - FrequencyWords en_50k — github.com/hermitdave/FrequencyWords.
|
|
19
|
+
* - stopwords-en — github.com/stopwords-iso/stopwords-en.
|
|
20
|
+
* - LDNOOBW `en` — github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words.
|
|
21
|
+
*/
|
|
22
|
+
import { writeFileSync } from 'node:fs'
|
|
23
|
+
import { resolve } from 'node:path'
|
|
24
|
+
import { WORDLIST_SIZE } from '../src/consts.js'
|
|
25
|
+
|
|
26
|
+
const SOURCES = {
|
|
27
|
+
moby: 'https://raw.githubusercontent.com/en-wl/wordlist/master/pos/part-of-speech.txt',
|
|
28
|
+
google10k: 'https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa.txt',
|
|
29
|
+
freq50k: 'https://raw.githubusercontent.com/hermitdave/FrequencyWords/master/content/2018/en/en_50k.txt',
|
|
30
|
+
stopwords: 'https://raw.githubusercontent.com/stopwords-iso/stopwords-en/master/stopwords-en.txt',
|
|
31
|
+
profanity: 'https://raw.githubusercontent.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words/master/en',
|
|
32
|
+
negative: 'https://raw.githubusercontent.com/shekhargulati/sentiment-analysis-python/master/opinion-lexicon-English/negative-words.txt',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const WORD = /^[a-z]{3,8}$/
|
|
36
|
+
|
|
37
|
+
/** Innocent words that carry an unfortunate substring once they sit in a public hostname. */
|
|
38
|
+
const BAD_SUBSTRINGS = [
|
|
39
|
+
'sex', 'nazi', 'rape', 'kill', 'die', 'dead', 'shit', 'fuck', 'cunt', 'porn', 'slut',
|
|
40
|
+
'whore', 'hell', 'damn', 'crap', 'piss', 'suck', 'gun', 'war', 'drug', 'bomb',
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Clean, neutrally-ranked words that still make a poor name for somebody's organization. Matched
|
|
45
|
+
* whole, not as substrings — a substring rule here would take `asset`, `class` and `passage` with
|
|
46
|
+
* it, which is how a screen quietly empties the list it is meant to police.
|
|
47
|
+
*/
|
|
48
|
+
const BAD_WORDS = [
|
|
49
|
+
'pee', 'poo', 'butt', 'ass', 'anal', 'bum', 'fart', 'burp', 'snot', 'puke', 'vomit',
|
|
50
|
+
'funeral', 'coffin', 'corpse', 'tumor', 'tumour', 'cancer', 'plague', 'sewer', 'morgue',
|
|
51
|
+
'grave', 'tomb', 'autopsy', 'carcass', 'manure', 'urine', 'feces', 'faeces', 'bowel',
|
|
52
|
+
'rectum', 'groin', 'naked', 'nude', 'booze', 'drunk', 'vodka', 'whisky', 'cigar', 'casino',
|
|
53
|
+
'gamble', 'curse', 'satan', 'demon', 'ghost', 'zombie', 'virgin', 'sperm', 'uterus',
|
|
54
|
+
'breast', 'nipple', 'thigh', 'divorce', 'lawsuit', 'prison', 'inmate', 'felony', 'arrest',
|
|
55
|
+
'arrested', 'combat', 'weapon', 'bullet', 'blade', 'poison', 'venom', 'stab',
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
const fetchText = async (url: string): Promise<string> => {
|
|
59
|
+
const response = await fetch(url)
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`Could not fetch ${url}: ${response.status}`)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return await response.text()
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const lines = (text: string): string[] =>
|
|
68
|
+
text.split('\n').map(line => line.trim()).filter(line => line !== '')
|
|
69
|
+
|
|
70
|
+
const curate = async () => {
|
|
71
|
+
const [moby, google10k, freq50k, stopwords, profanity, negative] = await Promise.all(
|
|
72
|
+
[SOURCES.moby, SOURCES.google10k, SOURCES.freq50k, SOURCES.stopwords, SOURCES.profanity,
|
|
73
|
+
SOURCES.negative].map(fetchText)
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
// Negative-sentiment words are screened out because the slug becomes an organization's public
|
|
77
|
+
// name: `idiotic-spring` is clean by every profanity list and still not a name anyone wants.
|
|
78
|
+
const blocked = new Set(
|
|
79
|
+
[...lines(profanity), ...lines(stopwords), ...BAD_WORDS,
|
|
80
|
+
...lines(negative).filter(word => !word.startsWith(';'))].map(word => word.toLowerCase())
|
|
81
|
+
)
|
|
82
|
+
const admissible = (word: string): boolean =>
|
|
83
|
+
WORD.test(word) && !blocked.has(word) && !BAD_SUBSTRINGS.some(bad => word.includes(bad))
|
|
84
|
+
|
|
85
|
+
// Frequency rank decides which of several thousand admissible words make the cut. Google's list
|
|
86
|
+
// is the better signal, so it keeps the low ranks and the 50k list only breaks ties below it.
|
|
87
|
+
const rank = new Map<string, number>()
|
|
88
|
+
lines(google10k).forEach((word, index) => {
|
|
89
|
+
const key = word.toLowerCase()
|
|
90
|
+
if (!rank.has(key)) rank.set(key, index)
|
|
91
|
+
})
|
|
92
|
+
lines(freq50k).forEach((line, index) => {
|
|
93
|
+
const key = line.split(' ')[0]?.toLowerCase()
|
|
94
|
+
if (key != null && !rank.has(key)) rank.set(key, 10_000 + index)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
const A_CODES = ['A', 'v']
|
|
98
|
+
const B_CODES = ['N', 'V', 't', 'i']
|
|
99
|
+
// Value records whether the part of speech is the word's PRIMARY sense — those are picked first,
|
|
100
|
+
// so `list-a` reads as adjectives rather than as nouns that happen to be adjectival.
|
|
101
|
+
const adjectives = new Map<string, boolean>()
|
|
102
|
+
const subjects = new Map<string, boolean>()
|
|
103
|
+
|
|
104
|
+
for (const line of moby.split('\n')) {
|
|
105
|
+
const [rawWord, rawCodes] = line.split('\t')
|
|
106
|
+
if (rawWord == null || rawCodes == null) continue
|
|
107
|
+
const word = rawWord.trim()
|
|
108
|
+
if (word !== word.toLowerCase()) continue // proper noun
|
|
109
|
+
if (!admissible(word)) continue
|
|
110
|
+
const codes = rawCodes.replace(/\|/g, '').trim()
|
|
111
|
+
if (codes === '') continue
|
|
112
|
+
if (A_CODES.some(code => codes.includes(code))) adjectives.set(word, A_CODES.includes(codes[0]))
|
|
113
|
+
if (B_CODES.some(code => codes.includes(code))) subjects.set(word, B_CODES.includes(codes[0]))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const pick = (candidates: Map<string, boolean>, exclude: Set<string>): string[] =>
|
|
117
|
+
[...candidates.entries()]
|
|
118
|
+
.filter(([word]) => !exclude.has(word) && rank.has(word))
|
|
119
|
+
.sort(([wordX, primaryX], [wordY, primaryY]) =>
|
|
120
|
+
(Number(primaryY) - Number(primaryX)) || (rank.get(wordX)! - rank.get(wordY)!))
|
|
121
|
+
.slice(0, WORDLIST_SIZE)
|
|
122
|
+
.map(([word]) => word)
|
|
123
|
+
|
|
124
|
+
// A picks first and B excludes its choices, so the two halves of a slug are always distinct.
|
|
125
|
+
const listA = pick(adjectives, new Set())
|
|
126
|
+
const listB = pick(subjects, new Set(listA))
|
|
127
|
+
|
|
128
|
+
for (const [name, list] of [['list-a', listA], ['list-b', listB]] as const) {
|
|
129
|
+
if (list.length !== WORDLIST_SIZE) {
|
|
130
|
+
throw new Error(`${name} came out at ${list.length} words; ${WORDLIST_SIZE} are required`)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
emit('list-a', 'WORDLIST_A', 'Descriptive half of a word slug — adjectives and adverbs.', listA)
|
|
135
|
+
emit('list-b', 'WORDLIST_B', 'Subject half of a word slug — verbs and nouns.', listB)
|
|
136
|
+
console.log(`Wrote ${listA.length} + ${listB.length} words.`)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const emit = (file: string, name: string, summary: string, words: string[]) => {
|
|
140
|
+
const rows: string[] = []
|
|
141
|
+
for (let index = 0; index < words.length; index += 8) {
|
|
142
|
+
rows.push(' ' + words.slice(index, index + 8).map(word => `'${word}'`).join(', ') + ',')
|
|
143
|
+
}
|
|
144
|
+
const body = `/**
|
|
145
|
+
* ${summary}
|
|
146
|
+
*
|
|
147
|
+
* Exactly ${WORDLIST_SIZE} words (11 bits of entropy per pick), each lowercase ASCII, 3-8 characters, and
|
|
148
|
+
* unique within this list. The two lists share no word, so the halves of a slug can never repeat.
|
|
149
|
+
*
|
|
150
|
+
* Curated by \`scripts/curate-wordlists.ts\` from the Moby part-of-speech list, screened against
|
|
151
|
+
* profanity, stopword, negative-sentiment and proper-noun sources. Regenerate with that script
|
|
152
|
+
* rather than editing by hand: \`tests/word-slug.spec.ts\` enforces the invariants above, and a
|
|
153
|
+
* hand-edit that breaks the ${WORDLIST_SIZE} count silently biases slug generation.
|
|
154
|
+
*/
|
|
155
|
+
export const ${name}: string[] = [
|
|
156
|
+
${rows.join('\n')}
|
|
157
|
+
]
|
|
158
|
+
`
|
|
159
|
+
writeFileSync(resolve(import.meta.dir, '..', 'src', 'wordlists', `${file}.ts`), body)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
await curate()
|
package/src/consts.ts
CHANGED
|
@@ -3,3 +3,16 @@ export enum IdStyle {
|
|
|
3
3
|
Base58 = 'base58',
|
|
4
4
|
Base64 = 'base64'
|
|
5
5
|
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Word-slug shape: two lowercase words joined by a hyphen, optionally carrying a numeric
|
|
9
|
+
* disambiguation suffix (`brisk-otter`, `brisk-otter-2`).
|
|
10
|
+
*
|
|
11
|
+
* A slug generated this way is a valid DNS label and a valid Kubernetes object-name segment,
|
|
12
|
+
* which is the whole point of preferring it over a random string: the same value can address a
|
|
13
|
+
* host, a namespace and an OIDC client without a second sanitising pass.
|
|
14
|
+
*/
|
|
15
|
+
export const WORD_SLUG_SEPARATOR = '-'
|
|
16
|
+
|
|
17
|
+
/** Words per thesaurus. A power of two so an index costs exactly 11 unbiased bits. */
|
|
18
|
+
export const WORDLIST_SIZE = 2048
|
package/src/helper.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
import { randomBytes } from '@noble/hashes/utils'
|
|
3
3
|
import { base58, base64urlnopad } from '@scure/base'
|
|
4
|
-
import { IdStyle } from './consts.js'
|
|
4
|
+
import { IdStyle, WORDLIST_SIZE, WORD_SLUG_SEPARATOR } from './consts.js'
|
|
5
|
+
import { WORDLIST_A } from './wordlists/list-a.js'
|
|
6
|
+
import { WORDLIST_B } from './wordlists/list-b.js'
|
|
5
7
|
import { v4 } from 'uuid'
|
|
6
8
|
|
|
7
9
|
export const createRandomPrefix = (length: number = 6, format: IdStyle = IdStyle.Base58): string => {
|
|
@@ -20,3 +22,43 @@ export const createIdOfLength = (length: number = 6, format: IdStyle = IdStyle.B
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
export const uuid = (): string => v4()
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A human-readable slug: one descriptive word, one subject word — `civil-format`, `raised-earth`.
|
|
28
|
+
*
|
|
29
|
+
* This exists because the values it replaces are read by people. An organization slug turns up in
|
|
30
|
+
* hostnames, OIDC client ids and support conversations, and a 16-character Base58 string is
|
|
31
|
+
* unquotable over the phone and unrecognisable in a list. Two words out of 2048 each give 22 bits
|
|
32
|
+
* of entropy — far short of a secret, and deliberately so: uniqueness here is settled by a unique
|
|
33
|
+
* index and `nextSlugCandidate`, not by entropy. Never use this for anything that must be
|
|
34
|
+
* unguessable (nonces, secrets, tokens) — `createIdOfLength` is that function.
|
|
35
|
+
*/
|
|
36
|
+
export const generateWordSlug = (): string => {
|
|
37
|
+
const [a, b] = pickWords(2)
|
|
38
|
+
|
|
39
|
+
return `${WORDLIST_A[a]}${WORD_SLUG_SEPARATOR}${WORDLIST_B[b]}`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The n-th candidate for an occupied slug: `brisk-otter`, `brisk-otter-2`, `brisk-otter-3`.
|
|
44
|
+
*
|
|
45
|
+
* The first attempt is the bare name — a suffix appears only once something already answers to it,
|
|
46
|
+
* so the common case keeps the name it was given. Callers own the availability test (a unique
|
|
47
|
+
* index, a registry claim) and walk this until one is free.
|
|
48
|
+
*/
|
|
49
|
+
export const nextSlugCandidate = (base: string, attempt: number): string =>
|
|
50
|
+
attempt < 2 ? base : `${base}${WORD_SLUG_SEPARATOR}${attempt}`
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Uniform indices into a 2048-entry list. 2048 is a power of two, so masking 16 random bits down
|
|
54
|
+
* to 11 is unbiased — no rejection loop, and no modulo skew toward the front of the list.
|
|
55
|
+
*/
|
|
56
|
+
const pickWords = (count: number): number[] => {
|
|
57
|
+
const bytes = randomBytes(count * 2)
|
|
58
|
+
const indices: number[] = []
|
|
59
|
+
for (let i = 0; i < count; ++i) {
|
|
60
|
+
indices.push(((bytes[i * 2] << 8) | bytes[i * 2 + 1]) & (WORDLIST_SIZE - 1))
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return indices
|
|
64
|
+
}
|